Jump to content
×
×
  • Create New...

Search the Community

Showing results for tags 'lua'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • xTibia - Notícias e Suporte
    • Regras
    • Noticias
    • Soluções
    • Projetos Patrocinados
    • Tutoriais para Iniciantes
    • Imprensa
  • OTServ
    • Notícias e Debates
    • OTServlist
    • Downloads
    • Recursos
    • Suporte
    • Pedidos
    • Cópia
    • Tutoriais
  • OFF-Topic
    • Barzinho do Éks
    • Design
    • Informática

Categories

There are no results to display.


Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Sou

  1. Boa noite meus amigos, estou com esse pequeno problema e não consigo resolver de jeito nenhum, já andei pesquisando sobre e encontrei alguns tópicos referente a acentuações em scripts, mas nenhum deu certo pra mim, posso estar colocando algo de errado, então por favor alguém consegue me ajudar? já coloquei este código no início do script .lua porém nada mudou. <?xml version="1.0" encoding="ISO-8859-1"?> Desde já agradeço a atenção!
  2. Então eu tinha esse script de carpet em transform_to a bastante tempo desde 2016, mais simples Então então estou postando hoje Vamos ao Assunto. vai em data "datapack"/actions/scripts Crie um arquivo chamado carpet.lua coloque isso Volte na pasta actions abra o actions.xml Coloque Carpet fechado Carpet aberto DONO: PokemonZbr ( Online ) DONO: OtPokemonTvZ ( Offline ) Links do meu jogo https://pokemonzbr.com/ (Online) http://otpokemontvz.com/ (Offline) Eu sou: Scripter: 5% Mapper: 30% Programador: 4% Website : 50%
  3. Hail Xtibianos. Esse script eu criei a pedido de um membro do fórum e resolvi posta-lo para vocês. Ele serve para que ao matarem um determinado monstros, somente os players que tiverem uma certa quantidade de participação (em porcentagem) na morte do monstro é que receberam algo (configurável). Em creaturescripts.xml adicione: <event type="statschange" name="stats" script="statsMonster.lua"/> <event type="death" name="deathMonster" script="deathMonster.lua"/> Em creaturescripts/scripts crie um arquivo lua com o nome statsMonster e adicione: --[[ autor = Marcryzius data = sexta-feira, 05 de fevereiro de 2016 tipo = 1 (um) é ataque, 0 (zero) é healing. query para ser adicionada no monstro: <script> <event name = "stats"/> <event name = "deathMonster"/> </script> ]] M = {} function getDamageInMonster(monster,cid) local monster,cid,m_life,p_dano = tonumber(monster),tonumber(cid),0,0 if not(monster or cid)then return 0,error('function getDamageInMonster(): monster or cid, not number') end if not(isCreature(monster))then return 0,error('function getDamageInMonster(): variavel monster nao e monstro.') end for k,v in pairs(M[monster]) do if(k == cid)then p_dano = v end m_life = m_life + v end return math.floor(p_dano/(m_life/100)) end function onStatsChange(cid, attacker, tipo, combat, value) if not(M[cid])then M[cid] = {} end if not(tipo == 1)then return true end if(isPlayer(attacker))then if not(M[cid][attacker])then M[cid][attacker] = 0 end M[cid][attacker] = M[cid][attacker] + value elseif(isMonster(attacker))then -- caso seja um monstro o atacante local get = getCreatureMaster(attacker) -- averigua se não é um summon que está atacando if(tonumber(get) and isPlayer(get))then -- caso o summon seja de um player, adiciona o dano como se fosse o player if not(M[cid][get])then M[cid][get] = 0 end M[cid][get] = M[cid][get] + value end end return true end Agora crie outro arquivo lua na mesma pasta e nomeie para deathMonster e adicione: function onDeath(cid, corpse, deathList) --[[> Marcryzius <]] for _,player in pairs(deathList) do local player = isCreature(player) and getCreatureMaster(player) or player if(isPlayer(player) and isPlayerOn(player))then if(getDamageInMonster(cid,player) >= 50)then -- quantidade de danos em % --[[ aqui é a parte onde dar ao player seu premio por ter consegue tantos % de danos ao monstro ]]-- -- exemplos de ações doRemoveItem(getThingfromPos(Full_Items[getCreatureName(cid):lower()]).uid) doCreateItem(2283,1,getCreaturePosition(cid)) doCreateItem(4810,1,Full_Items[getCreatureName(cid):lower()]) setPlayerStorageValue(player,getStoreString('fullitems'),0) end if(M[player])then table.remove(M,player) end end end end No monstro que tu queira usar esse sistema, adicione no xml dele essas duas tags: <script> <event name = "stats"/> <event name = "deathMonster"/> </script> Pronto. Qualquer duvida, erro e etc, deixe nos comentários.
  4. FelipeXT

    Addevent Error

    Opá fala pessoal blz? Preciso de ajuda com esse script, na parte da function botMagic(params) tentei colocar essa linha abaixo, mas não funcionou! Até que na parte da function botEat(cid) a checagem acima funcionou! mas quando coloquei na function botMagic(params) não apareceu erros no console quando desloguei o character, mas também o script meio que parou de castar a magia. Queria uma ajuda! para resolver esse erro, sem a checagem fica rolando varios erros no console do otserver sem parar.
  5. data\npc\NomedoNpc.xml data\npc\scripts\nomedoarquivo.lua Espero Que Gostem Ate ++
  6. boa rapeize, alguem pode ajudar, como faço uma spell, que ela sejá apenas para o knight, ou vocation 4 - 8... eu não quero escrever ela e ativar, quero que ela seja propria do personagem sem escrever nada sem ativar... bom seguinte, quando o knight tiver com vida menor que 30% do total da vida dele... ele ganha + 20 de skill, axe sword e club... tem como alguém ajudar ? lembrando, eu não quero ativar ela igual utito tempo, e não quero que tenha um tempo determinado, quero que seja do personagem... ta com -30% de life ele ganha skill... agradeço desde já !
  7. Olá, comecei meus estudos em Otclient, porem tenho muitas duvidas!. Oque ser isso? variaveis? porque todas nil? @onLoad: init() ? @onUnload: terminate() ? Variaveis com local sem o nil? oque isso muda? porque g_game? g_game.IsOnine ? isso é uma função do otclient? como posso tirar essa função da sourcer? Como se inicia um modulo? com local Nome ou Local Nome = nil? ou só a variavel = nil? todas ela tem que tem function init()? function onGameConnectionError(message, code) ? de onde saiu onGameConnection? sourcer? function CharacterList.terminate() ? if charactersWindow then -- se for charactersWindow entao characterList = nil -- lista de char = nil? charactersWindow:destroy() -- :destroy a lista de char ok! charactersWindow = nil -- nil novamente? end function CharacterList.doLogin() ? de onde tira isso? das funçoes da sourcer?
  8. Emooooo

    erro record.lua

    [01/04/2019 20:22:33] [Error - GlobalEvent Interface] [01/04/2019 20:22:33] data/globalevents/scripts/record.lua:onRecord [01/04/2019 20:22:33] Description: [01/04/2019 20:22:33] data/globalevents/scripts/record.lua:2: attempt to call field 'executeQuery' (a nil value) [01/04/2019 20:22:33] stack traceback: [01/04/2019 20:22:33] data/globalevents/scripts/record.lua:2: in function <data/globalevents/scripts/record.lua:1> ALGUÉM AJUDA AE ! PLIS +REP
  9. Eu criei esse sistema de look at attack porquê eu acho ridículo quando o character fica atacando o oponente sem estar "olhando" para ele. O que ele faz? Ele volta o character que esteja atacando um oponente para o oponente. Ele não impede de andar ou de mudar de direção, porém ele vai ficar mantendo a direção voltada ao oponente. Vamos adicionar o sistema. Em: creaturescript/creaturescript.xml, adicione essa tag: Agora em: creaturescript/scripts, crie um arquivo lua e adicione isso: Dentro do mesmo diretório, abra o arquivo login.lua e adicione isso a ele onde existe outros semelhantes. Pronto. Instalado o seus sistema de look at attack. Agora quando o player atacar algum oponente, ele ficará "olhando" para ele.
  10. Olá, xTibianos. Hoje venho lhes trazer umas listas com todas (teoricamente, pois não pude conferir) as funções padrões dos TFS 0.3 e 0.4. Source functions - Funções feitas na source getCreatureHealth(cid) getCreatureMaxHealth(cid[, ignoreModifiers = false]) getCreatureMana(cid) getCreatureMaxMana(cid[, ignoreModifiers = false]) getCreatureHideHealth(cid) doCreatureSetHideHealth(cid, hide) getCreatureSpeakType(cid) doCreatureSetSpeakType(cid, type) getCreatureLookDirection(cid) getPlayerLevel(cid) getPlayerExperience(cid) getPlayerMagLevel(cid[, ignoreModifiers = false]) getPlayerSpentMana(cid) getPlayerFood(cid) getPlayerAccess(cid) getPlayerGhostAccess(cid) getPlayerSkillLevel(cid, skill[, ignoreModifiers = false]) getPlayerSkillTries(cid, skill) getPlayerTown(cid) getPlayerVocation(cid) getPlayerIp(cid) getPlayerRequiredMana(cid, magicLevel) getPlayerRequiredSkillTries(cid, skillId, skillLevel) getPlayerItemCount(cid, itemid[, subType = -1]) getPlayerMoney(cid) getPlayerSoul(cid[, ignoreModifiers = false]) getPlayerFreeCap(cid) getPlayerLight(cid) getPlayerSlotItem(cid, slot) getPlayerWeapon(cid[, ignoreAmmo = false]) getPlayerItemById(cid, deepSearch, itemId[, subType = -1]) getPlayerDepotItems(cid, depotid) getPlayerGuildId(cid) getPlayerGuildName(cid) getPlayerGuildRankId(cid) getPlayerGuildRank(cid) getPlayerGuildNick(cid) getPlayerGuildLevel(cid) getPlayerGUID(cid) getPlayerNameDescription(cid) doPlayerSetNameDescription(cid, desc) getPlayerSpecialDescription(cid) doPlayerSetSpecialDescription(cid, desc) getPlayerAccountId(cid) getPlayerAccount(cid) getPlayerFlagValue(cid, flag) getPlayerCustomFlagValue(cid, flag) getPlayerPromotionLevel(cid) doPlayerSetPromotionLevel(cid, level) getPlayerGroupId(cid) doPlayerSetGroupId(cid, newGroupId) doPlayerSendOutfitWindow(cid) doPlayerLearnInstantSpell(cid, name) doPlayerUnlearnInstantSpell(cid, name) getPlayerLearnedInstantSpell(cid, name) getPlayerInstantSpellCount(cid) getPlayerInstantSpellInfo(cid, index) getInstantSpellInfo(cid, name) getCreatureStorageList(cid) getCreatureStorage(uid, key) doCreatureSetStorage(uid, key, value) getStorageList() getStorage(key) doSetStorage(key, value) getChannelUsers(channelId) getPlayersOnline() getTileInfo(pos) getThingFromPos(pos[, displayError = true]) getThing(uid[, recursive = RECURSE _FIRST]) doTileQueryAdd(uid, pos[, flags[, displayError = true]]) doItemRaidUnref(uid) getThingPosition(uid) getTileItemById(pos, itemId[, subType = -1]) getTileItemByType(pos, type) getTileThingByPos(pos) getTopCreature(pos) doRemoveItem(uid[, count = -1]) doPlayerFeed(cid, food) doPlayerSendCancel(cid, text) doPlayerSendDefaultCancel(cid, ReturnValue) getSearchString(fromPosition, toPosition[, fromIsCreature = false[, toIsCreature = false]]) getClosestFreeTile(cid, targetpos[, extended = false[, ignoreHouse = true]]) doTeleportThing(cid, newpos[, pushmove = true[, fullTeleport = true]]) doTransformItem(uid, newId[, count/subType]) doCreatureSay(uid, text[, type = SPEAK _SAY[, ghost = false[, cid = 0[, pos]]]]) doSendCreatureSquare(cid, color[, player]) doSendMagicEffect(pos, type[, player]) doSendDistanceShoot(fromPos, toPos, type[, player]) doSendAnimatedText(pos, text, color[, player]) doPlayerAddSkillTry(cid, skillid, n[, useMultiplier = true]) doCreatureAddHealth(cid, health[, hitEffect[, hitColor[, force]]]) doCreatureAddMana(cid, mana) setCreatureMaxHealth(cid, health) setCreatureMaxMana(cid, mana) doPlayerSetMaxCapacity(cid, cap) doPlayerAddSpentMana(cid, amount[, useMultiplier = true]) doPlayerAddSoul(cid, amount) doPlayerAddItem(cid, itemid[, count/subtype = 1[, canDropOnMap = true[, slot = 0]]]) doPlayerAddItem(cid, itemid[, count = 1[, canDropOnMap = true[, subtype = 1[, slot = 0]]]]) doPlayerAddItemEx(cid, uid[, canDropOnMap = false[, slot = 0]]) doPlayerSendTextMessage(cid, MessageClasses, message) doPlayerSendChannelMessage(cid, author, message, SpeakClasses, channel) doPlayerSendToChannel(cid, targetId, SpeakClasses, message, channel[, time]) doPlayerOpenChannel(cid, channelId) doPlayerAddMoney(cid, money) doPlayerRemoveMoney(cid, money) doPlayerTransferMoneyTo(cid, target, money) doShowTextDialog(cid, itemid, text) doDecayItem(uid) doCreateItem(itemid[, type/count], pos) doCreateItemEx(itemid[, count/subType = -1]) doTileAddItemEx(pos, uid) doAddContainerItemEx(uid, virtuid) doRelocate(pos, posTo[, creatures = true[, unmovable = true]]) doCleanTile(pos[, forceMapLoaded = false]) doCreateTeleport(itemid, topos, createpos) doCreateMonster(name, pos[, extend = false[, force = false[, displayError = true]]]) doCreateNpc(name, pos[, displayError = true]) doSummonMonster(cid, name) doConvinceCreature(cid, target) getMonsterTargetList(cid) getMonsterFriendList(cid) doMonsterSetTarget(cid, target) doMonsterChangeTarget(cid) getMonsterInfo(name) doAddCondition(cid, condition) doRemoveCondition(cid, type[, subId]) doRemoveConditions(cid[, onlyPersistent]) doRemoveCreature(cid[, forceLogout = true]) doMoveCreature(cid, direction[, flag = FLAG _NOLIMIT]) doSteerCreature(cid, position) doPlayerSetPzLocked(cid, locked) doPlayerSetTown(cid, townid) doPlayerSetVocation(cid,voc) doPlayerRemoveItem(cid, itemid[, count[, subType = -1]]) doPlayerAddExperience(cid, amount) doPlayerSetGuildId(cid, id) doPlayerSetGuildLevel(cid, level[, rank]) doPlayerSetGuildNick(cid, nick) doPlayerAddOutfit(cid, looktype, addon) doPlayerRemoveOutfit(cid, looktype[, addon = 0]) doPlayerAddOutfitId(cid, outfitId, addon) doPlayerRemoveOutfitId(cid, outfitId[, addon = 0]) canPlayerWearOutfit(cid, looktype[, addon = 0]) canPlayerWearOutfitId(cid, outfitId[, addon = 0]) getCreatureCondition(cid, condition[, subId = 0]) doCreatureSetDropLoot(cid, doDrop) getPlayerLossPercent(cid, lossType) doPlayerSetLossPercent(cid, lossType, newPercent) doPlayerSetLossSkill(cid, doLose) getPlayerLossSkill(cid) doPlayerSwitchSaving(cid) doPlayerSave(cid[, shallow = false]) isPlayerPzLocked(cid) isPlayerSaving(cid) isCreature(cid) isMovable(uid) getCreatureByName(name) getPlayerByGUID(guid) getPlayerByNameWildcard(name~[, ret = false]) getPlayerGUIDByName(name[, multiworld = false]) getPlayerNameByGUID(guid[, multiworld = false[, displayError = true]]) doPlayerChangeName(guid, oldName, newName) registerCreatureEvent(uid, eventName) unregisterCreatureEvent(uid, eventName) getContainerSize(uid) getContainerCap(uid) getContainerItem(uid, slot) doAddContainerItem(uid, itemid[, count/subType = 1]) getHouseInfo(houseId[, displayError = true]) getHouseAccessList(houseid, listId) getHouseByPlayerGUID(playerGUID) getHouseFromPos(pos) setHouseAccessList(houseid, listid, listtext) setHouseOwner(houseId, owner[, clean]) getWorldType() setWorldType(type) getWorldTime() getWorldLight() getWorldCreatures(type) getWorldUpTime() getGuildId(guildName) getGuildMotd(guildId) getPlayerSex(cid[, full = false]) doPlayerSetSex(cid, newSex) createCombatArea({area}[, {extArea}]) createConditionObject(type[, ticks[, buff[, subId]]]) setCombatArea(combat, area) setCombatCondition(combat, condition) setCombatParam(combat, key, value) setConditionParam(condition, key, value) addDamageCondition(condition, rounds, time, value) addOutfitCondition(condition, outfit) setCombatCallBack(combat, key, function_name) setCombatFormula(combat, type, mina, minb, maxa, maxb[, minl, maxl[, minm, maxm[, minc[, maxc]]]]) setConditionFormula(combat, mina, minb, maxa, maxb) doCombat(cid, combat, param) createCombatObject() doCombatAreaHealth(cid, type, pos, area, min, max, effect) doTargetCombatHealth(cid, target, type, min, max, effect) doCombatAreaMana(cid, pos, area, min, max, effect) doTargetCombatMana(cid, target, min, max, effect) doCombatAreaCondition(cid, pos, area, condition, effect) doTargetCombatCondition(cid, target, condition, effect) doCombatAreaDispel(cid, pos, area, type, effect) doTargetCombatDispel(cid, target, type, effect) doChallengeCreature(cid, target) numberToVariant(number) stringToVariant(string) positionToVariant(pos) targetPositionToVariant(pos) variantToNumber(var) variantToString(var) variantToPosition(var) doChangeSpeed(cid, delta) doCreatureChangeOutfit(cid, outfit) doSetMonsterOutfit(cid, name[, time = -1]) doSetItemOutfit(cid, item[, time = -1]) doSetCreatureOutfit(cid, outfit[, time = -1]) getCreatureOutfit(cid) getCreatureLastPosition(cid) getCreatureName(cid) getCreatureSpeed(cid) getCreatureBaseSpeed(cid) getCreatureTarget(cid) isSightClear(fromPos, toPos, floorCheck) isInArray(array, value[, caseSensitive = false]) addEvent(callback, delay, ...) stopEvent(eventid) getPlayersByAccountId(accId) getAccountIdByName(name) getAccountByName(name) getAccountIdByAccount(accName) getAccountByAccountId(accId) getIpByName(name) getPlayersByIp(ip[, mask = 0xFFFFFFFF]) doPlayerPopupFYI(cid, message) doPlayerSendTutorial(cid, id) doPlayerSendMailByName(name, item[, town[, actor]]) doPlayerAddMapMark(cid, pos, type[, description]) doPlayerAddPremiumDays(cid, days) getPlayerPremiumDays(cid) doCreatureSetLookDirection(cid, dir) getCreatureGuildEmblem(cid[, target]) doCreatureSetGuildEmblem(cid, emblem) getCreaturePartyShield(cid[, target]) doCreatureSetPartyShield(cid, shield) getCreatureSkullType(cid[, target]) doCreatureSetSkullType(cid, skull) getPlayerSkullEnd(cid) doPlayerSetSkullEnd(cid, time, type) getPlayerBlessing(cid, blessing) doPlayerAddBlessing(cid, blessing) getPlayerStamina(cid) doPlayerSetStamina(cid, minutes) getPlayerBalance(cid) doPlayerSetBalance(cid, balance) getCreatureNoMove(cid) doCreatureSetNoMove(cid, block) getPlayerIdleTime(cid) doPlayerSetIdleTime(cid, amount) getPlayerLastLoad(cid) getPlayerLastLogin(cid) getPlayerAccountManager(cid) getPlayerTradeState(cid) getPlayerModes(cid) getPlayerRates(cid) doPlayerSetRate(cid, type, value) getPlayerPartner(cid) doPlayerSetPartner(cid, guid) doPlayerFollowCreature(cid, target) getPlayerParty(cid) doPlayerJoinParty(cid, lid) doPlayerLeaveParty(cid[, forced = false]) doPlayerAddMount(cid, mountId) doPlayerRemoveMount(cid, mountId) getPlayerMount(cid, mountId) doPlayerSetMount(cid, mountId) doPlayerSetMountStatus(cid, mounted) getMountInfo([mountId]) getPartyMembers(lid) getCreatureMaster(cid) getCreatureSummons(cid) getTownId(townName) getTownName(townId) getTownTemplePosition(townId) getTownHouses(townId) getSpectators(centerPos, rangex, rangey[, multifloor = false]) getVocationInfo(id) getGroupInfo(id[, premium = false]) getVocationList() getGroupList() getChannelList() getTownList() getWaypointList() getTalkActionList() getExperienceStageList() getItemIdByName(name[, displayError = true]) getItemInfo(itemid) getItemAttribute(uid, key) doItemSetAttribute(uid, key, value) doItemEraseAttribute(uid, key) getItemWeight(uid[, precise = true]) getItemParent(uid) hasItemProperty(uid, prop) hasPlayerClient(cid) isIpBanished(ip[, mask]) isPlayerBanished(name/guid, type) isAccountBanished(accountId[, playerId]) doAddIpBanishment(...) doAddPlayerBanishment(...) doAddAccountBanishment(...) doAddNotation(...) doAddStatement(...) doRemoveIpBanishment(ip[, mask]) doRemovePlayerBanishment(name/guid, type) doRemoveAccountBanishment(accountId[, playerId]) doRemoveNotations(accountId[, playerId]) doRemoveStatements(name/guid[, channelId]) getNotationsCount(accountId[, playerId]) getStatementsCount(name/guid[, channelId]) getBanData(value[, type[, param]]) getBanReason(id) getBanAction(id[, ipBanishment = false]) getBanList(type[, value[, param]]) getExperienceStage(level) getDataDir() getLogsDir() getConfigFile() getConfigValue(key) getModList() getHighscoreString(skillId) getWaypointPosition(name) doWaypointAddTemporial(name, pos) getGameState() doSetGameState(id) doExecuteRaid(name) doCreatureExecuteTalkAction(cid, text[, ignoreAccess = false[, channelId = CHANNEL _DEFAULT]]) doReloadInfo(id[, cid]) doSaveServer([shallow = false]) doCleanHouse(houseId) doCleanMap() doRefreshMap() doGuildAddEnemy(guild, enemy, war, type) doGuildRemoveEnemy(guild, enemy) doUpdateHouseAuctions() loadmodlib(lib) domodlib(lib) dodirectory(dir[, recursively = false])getCreatureHealth(cid) getCreatureMaxHealth(cid[, ignoreModifiers = false]) getCreatureMana(cid) getCreatureMaxMana(cid[, ignoreModifiers = false]) getCreatureHideHealth(cid) doCreatureSetHideHealth(cid, hide) getCreatureSpeakType(cid) doCreatureSetSpeakType(cid, type) getCreatureLookDirection(cid) getPlayerLevel(cid) getPlayerExperience(cid) getPlayerMagLevel(cid[, ignoreModifiers = false]) getPlayerSpentMana(cid) getPlayerFood(cid) getPlayerAccess(cid) getPlayerGhostAccess(cid) getPlayerSkillLevel(cid, skill[, ignoreModifiers = false]) getPlayerSkillTries(cid, skill) getPlayerTown(cid) getPlayerVocation(cid) getPlayerIp(cid) getPlayerRequiredMana(cid, magicLevel) getPlayerRequiredSkillTries(cid, skillId, skillLevel) getPlayerItemCount(cid, itemid[, subType = -1]) getPlayerMoney(cid) getPlayerSoul(cid[, ignoreModifiers = false]) getPlayerFreeCap(cid) getPlayerLight(cid) getPlayerSlotItem(cid, slot) getPlayerWeapon(cid[, ignoreAmmo = false]) getPlayerItemById(cid, deepSearch, itemId[, subType = -1]) getPlayerDepotItems(cid, depotid) getPlayerGuildId(cid) getPlayerGuildName(cid) getPlayerGuildRankId(cid) getPlayerGuildRank(cid) getPlayerGuildNick(cid) getPlayerGuildLevel(cid) getPlayerGUID(cid) getPlayerNameDescription(cid) doPlayerSetNameDescription(cid, desc) getPlayerSpecialDescription(cid) doPlayerSetSpecialDescription(cid, desc) getPlayerAccountId(cid) getPlayerAccount(cid) getPlayerFlagValue(cid, flag) getPlayerCustomFlagValue(cid, flag) getPlayerPromotionLevel(cid) doPlayerSetPromotionLevel(cid, level) getPlayerGroupId(cid) doPlayerSetGroupId(cid, newGroupId) doPlayerSendOutfitWindow(cid) doPlayerLearnInstantSpell(cid, name) doPlayerUnlearnInstantSpell(cid, name) getPlayerLearnedInstantSpell(cid, name) getPlayerInstantSpellCount(cid) getPlayerInstantSpellInfo(cid, index) getInstantSpellInfo(cid, name) getCreatureStorageList(cid) getCreatureStorage(uid, key) doCreatureSetStorage(uid, key, value) getStorageList() getStorage(key) doSetStorage(key, value) getChannelUsers(channelId) getPlayersOnline() getTileInfo(pos) getThingFromPos(pos[, displayError = true]) getThing(uid[, recursive = RECURSE _FIRST]) doTileQueryAdd(uid, pos[, flags[, displayError = true]]) doItemRaidUnref(uid) getThingPosition(uid) getTileItemById(pos, itemId[, subType = -1]) getTileItemByType(pos, type) getTileThingByPos(pos) getTopCreature(pos) doRemoveItem(uid[, count = -1]) doPlayerFeed(cid, food) doPlayerSendCancel(cid, text) doPlayerSendDefaultCancel(cid, ReturnValue) getSearchString(fromPosition, toPosition[, fromIsCreature = false[, toIsCreature = false]]) getClosestFreeTile(cid, targetpos[, extended = false[, ignoreHouse = true]]) doTeleportThing(cid, newpos[, pushmove = true[, fullTeleport = true]]) doTransformItem(uid, newId[, count/subType]) doCreatureSay(uid, text[, type = SPEAK _SAY[, ghost = false[, cid = 0[, pos]]]]) doSendCreatureSquare(cid, color[, player]) doSendMagicEffect(pos, type[, player]) doSendDistanceShoot(fromPos, toPos, type[, player]) doSendAnimatedText(pos, text, color[, player]) doPlayerAddSkillTry(cid, skillid, n[, useMultiplier = true]) doCreatureAddHealth(cid, health[, hitEffect[, hitColor[, force]]]) doCreatureAddMana(cid, mana) setCreatureMaxHealth(cid, health) setCreatureMaxMana(cid, mana) doPlayerSetMaxCapacity(cid, cap) doPlayerAddSpentMana(cid, amount[, useMultiplier = true]) doPlayerAddSoul(cid, amount) doPlayerAddItem(cid, itemid[, count/subtype = 1[, canDropOnMap = true[, slot = 0]]]) doPlayerAddItem(cid, itemid[, count = 1[, canDropOnMap = true[, subtype = 1[, slot = 0]]]]) doPlayerAddItemEx(cid, uid[, canDropOnMap = false[, slot = 0]]) doPlayerSendTextMessage(cid, MessageClasses, message) doPlayerSendChannelMessage(cid, author, message, SpeakClasses, channel) doPlayerSendToChannel(cid, targetId, SpeakClasses, message, channel[, time]) doPlayerOpenChannel(cid, channelId) doPlayerAddMoney(cid, money) doPlayerRemoveMoney(cid, money) doPlayerTransferMoneyTo(cid, target, money) doShowTextDialog(cid, itemid, text) doDecayItem(uid) doCreateItem(itemid[, type/count], pos) doCreateItemEx(itemid[, count/subType = -1]) doTileAddItemEx(pos, uid) doAddContainerItemEx(uid, virtuid) doRelocate(pos, posTo[, creatures = true[, unmovable = true]]) doCleanTile(pos[, forceMapLoaded = false]) doCreateTeleport(itemid, topos, createpos) doCreateMonster(name, pos[, extend = false[, force = false[, displayError = true]]]) doCreateNpc(name, pos[, displayError = true]) doSummonMonster(cid, name) doConvinceCreature(cid, target) getMonsterTargetList(cid) getMonsterFriendList(cid) doMonsterSetTarget(cid, target) doMonsterChangeTarget(cid) getMonsterInfo(name) doAddCondition(cid, condition) doRemoveCondition(cid, type[, subId]) doRemoveConditions(cid[, onlyPersistent]) doRemoveCreature(cid[, forceLogout = true]) doMoveCreature(cid, direction[, flag = FLAG _NOLIMIT]) doSteerCreature(cid, position) doPlayerSetPzLocked(cid, locked) doPlayerSetTown(cid, townid) doPlayerSetVocation(cid,voc) doPlayerRemoveItem(cid, itemid[, count[, subType = -1]]) doPlayerAddExperience(cid, amount) doPlayerSetGuildId(cid, id) doPlayerSetGuildLevel(cid, level[, rank]) doPlayerSetGuildNick(cid, nick) doPlayerAddOutfit(cid, looktype, addon) doPlayerRemoveOutfit(cid, looktype[, addon = 0]) doPlayerAddOutfitId(cid, outfitId, addon) doPlayerRemoveOutfitId(cid, outfitId[, addon = 0]) canPlayerWearOutfit(cid, looktype[, addon = 0]) canPlayerWearOutfitId(cid, outfitId[, addon = 0]) getCreatureCondition(cid, condition[, subId = 0]) doCreatureSetDropLoot(cid, doDrop) getPlayerLossPercent(cid, lossType) doPlayerSetLossPercent(cid, lossType, newPercent) doPlayerSetLossSkill(cid, doLose) getPlayerLossSkill(cid) doPlayerSwitchSaving(cid) doPlayerSave(cid[, shallow = false]) isPlayerPzLocked(cid) isPlayerSaving(cid) isCreature(cid) isMovable(uid) getCreatureByName(name) getPlayerByGUID(guid) getPlayerByNameWildcard(name~[, ret = false]) getPlayerGUIDByName(name[, multiworld = false]) getPlayerNameByGUID(guid[, multiworld = false[, displayError = true]]) doPlayerChangeName(guid, oldName, newName) registerCreatureEvent(uid, eventName) unregisterCreatureEvent(uid, eventName) getContainerSize(uid) getContainerCap(uid) getContainerItem(uid, slot) doAddContainerItem(uid, itemid[, count/subType = 1]) getHouseInfo(houseId[, displayError = true]) getHouseAccessList(houseid, listId) getHouseByPlayerGUID(playerGUID) getHouseFromPos(pos) setHouseAccessList(houseid, listid, listtext) setHouseOwner(houseId, owner[, clean]) getWorldType() setWorldType(type) getWorldTime() getWorldLight() getWorldCreatures(type) getWorldUpTime() getGuildId(guildName) getGuildMotd(guildId) getPlayerSex(cid[, full = false]) doPlayerSetSex(cid, newSex) createCombatArea({area}[, {extArea}]) createConditionObject(type[, ticks[, buff[, subId]]]) setCombatArea(combat, area) setCombatCondition(combat, condition) setCombatParam(combat, key, value) setConditionParam(condition, key, value) addDamageCondition(condition, rounds, time, value) addOutfitCondition(condition, outfit) setCombatCallBack(combat, key, function_name) setCombatFormula(combat, type, mina, minb, maxa, maxb[, minl, maxl[, minm, maxm[, minc[, maxc]]]]) setConditionFormula(combat, mina, minb, maxa, maxb) doCombat(cid, combat, param) createCombatObject() doCombatAreaHealth(cid, type, pos, area, min, max, effect) doTargetCombatHealth(cid, target, type, min, max, effect) doCombatAreaMana(cid, pos, area, min, max, effect) doTargetCombatMana(cid, target, min, max, effect) doCombatAreaCondition(cid, pos, area, condition, effect) doTargetCombatCondition(cid, target, condition, effect) doCombatAreaDispel(cid, pos, area, type, effect) doTargetCombatDispel(cid, target, type, effect) doChallengeCreature(cid, target) numberToVariant(number) stringToVariant(string) positionToVariant(pos) targetPositionToVariant(pos) variantToNumber(var) variantToString(var) variantToPosition(var) doChangeSpeed(cid, delta) doCreatureChangeOutfit(cid, outfit) doSetMonsterOutfit(cid, name[, time = -1]) doSetItemOutfit(cid, item[, time = -1]) doSetCreatureOutfit(cid, outfit[, time = -1]) getCreatureOutfit(cid) getCreatureLastPosition(cid) getCreatureName(cid) getCreatureSpeed(cid) getCreatureBaseSpeed(cid) getCreatureTarget(cid) isSightClear(fromPos, toPos, floorCheck) isInArray(array, value[, caseSensitive = false]) addEvent(callback, delay, ...) stopEvent(eventid) getPlayersByAccountId(accId) getAccountIdByName(name) getAccountByName(name) getAccountIdByAccount(accName) getAccountByAccountId(accId) getIpByName(name) getPlayersByIp(ip[, mask = 0xFFFFFFFF]) doPlayerPopupFYI(cid, message) doPlayerSendTutorial(cid, id) doPlayerSendMailByName(name, item[, town[, actor]]) doPlayerAddMapMark(cid, pos, type[, description]) doPlayerAddPremiumDays(cid, days) getPlayerPremiumDays(cid) doCreatureSetLookDirection(cid, dir) getCreatureGuildEmblem(cid[, target]) doCreatureSetGuildEmblem(cid, emblem) getCreaturePartyShield(cid[, target]) doCreatureSetPartyShield(cid, shield) getCreatureSkullType(cid[, target]) doCreatureSetSkullType(cid, skull) getPlayerSkullEnd(cid) doPlayerSetSkullEnd(cid, time, type) getPlayerBlessing(cid, blessing) doPlayerAddBlessing(cid, blessing) getPlayerStamina(cid) doPlayerSetStamina(cid, minutes) getPlayerBalance(cid) doPlayerSetBalance(cid, balance) getCreatureNoMove(cid) doCreatureSetNoMove(cid, block) getPlayerIdleTime(cid) doPlayerSetIdleTime(cid, amount) getPlayerLastLoad(cid) getPlayerLastLogin(cid) getPlayerAccountManager(cid) getPlayerTradeState(cid) getPlayerModes(cid) getPlayerRates(cid) doPlayerSetRate(cid, type, value) getPlayerPartner(cid) doPlayerSetPartner(cid, guid) doPlayerFollowCreature(cid, target) getPlayerParty(cid) doPlayerJoinParty(cid, lid) doPlayerLeaveParty(cid[, forced = false]) doPlayerAddMount(cid, mountId) doPlayerRemoveMount(cid, mountId) getPlayerMount(cid, mountId) doPlayerSetMount(cid, mountId) doPlayerSetMountStatus(cid, mounted) getMountInfo([mountId]) getPartyMembers(lid) getCreatureMaster(cid) getCreatureSummons(cid) getTownId(townName) getTownName(townId) getTownTemplePosition(townId) getTownHouses(townId) getSpectators(centerPos, rangex, rangey[, multifloor = false]) getVocationInfo(id) getGroupInfo(id[, premium = false]) getVocationList() getGroupList() getChannelList() getTownList() getWaypointList() getTalkActionList() getExperienceStageList() getItemIdByName(name[, displayError = true]) getItemInfo(itemid) getItemAttribute(uid, key) doItemSetAttribute(uid, key, value) doItemEraseAttribute(uid, key) getItemWeight(uid[, precise = true]) getItemParent(uid) hasItemProperty(uid, prop) hasPlayerClient(cid) isIpBanished(ip[, mask]) isPlayerBanished(name/guid, type) isAccountBanished(accountId[, playerId]) doAddIpBanishment(...) doAddPlayerBanishment(...) doAddAccountBanishment(...) doAddNotation(...) doAddStatement(...) doRemoveIpBanishment(ip[, mask]) doRemovePlayerBanishment(name/guid, type) doRemoveAccountBanishment(accountId[, playerId]) doRemoveNotations(accountId[, playerId]) doRemoveStatements(name/guid[, channelId]) getNotationsCount(accountId[, playerId]) getStatementsCount(name/guid[, channelId]) getBanData(value[, type[, param]]) getBanReason(id) getBanAction(id[, ipBanishment = false]) getBanList(type[, value[, param]]) getExperienceStage(level) getDataDir() getLogsDir() getConfigFile() getConfigValue(key) getModList() getHighscoreString(skillId) getWaypointPosition(name) doWaypointAddTemporial(name, pos) getGameState() doSetGameState(id) doExecuteRaid(name) doCreatureExecuteTalkAction(cid, text[, ignoreAccess = false[, channelId = CHANNEL _DEFAULT]]) doReloadInfo(id[, cid]) doSaveServer([shallow = false]) doCleanHouse(houseId) doCleanMap() doRefreshMap() doGuildAddEnemy(guild, enemy, war, type) doGuildRemoveEnemy(guild, enemy) doUpdateHouseAuctions() loadmodlib(lib) domodlib(lib) dodirectory(dir[, recursively = false]) Lua made functions - Funções feitas em lua (data/lib) doPlayerGiveItem(cid, itemid, amount, subType) doPlayerGiveItemContainer(cid, containerid, itemid, amount, subType) doPlayerTakeItem(cid, itemid, amount) doPlayerBuyItem(cid, itemid, count, cost, charges) doPlayerBuyItemContainer(cid, containerid, itemid, count, cost, charges) doPlayerSellItem(cid, itemid, count, cost) doPlayerWithdrawMoney(cid, amount) doPlayerDepositMoney(cid, amount) doPlayerAddStamina(cid, minutes) isPremium(cid) getMonthDayEnding(day) getMonthString(m) getArticle(str) isNumeric(str) doNumberFormat(i) doPlayerAddAddons(cid, addon) doPlayerWithdrawAllMoney(cid) doPlayerDepositAllMoney(cid) doPlayerTransferAllMoneyTo(cid, target) playerExists(name) getTibiaTime() doWriteLogFile(file, text) getExperienceForLevel(lv) doMutePlayer(cid, time) getPlayerGroupName(cid) getPlayerVocationName(cid) getPromotedVocation(vid) doPlayerRemovePremiumDays(cid, days) getPlayerMasterPos(cid) getHouseOwner(houseId) getHouseName(houseId) getHouseEntry(houseId) getHouseRent(houseId) getHousePrice(houseId) getHouseTown(houseId) getHouseDoorsCount(houseId) getHouseBedsCount(houseId) getHouseTilesCount(houseId) getItemNameById(itemid) getItemPluralNameById(itemid) getItemArticleById(itemid) getItemName(uid) getItemPluralName(uid) getItemArticle(uid) getItemText(uid) getItemSpecialDescription(uid) getItemWriter(uid) getItemDate(uid) getTilePzInfo(pos) getTileZoneInfo(pos) doShutdown() doSummonCreature(name, pos, displayError) getOnlinePlayers() getPlayerByName(name) isPlayer(cid) isPlayerGhost(cid) isMonster(cid) isNpc(cid) doPlayerSetExperienceRate(cid, value) doPlayerSetMagicRate(cid, value) doPlayerAddLevel(cid, amount, round) doPlayerAddMagLevel(cid, amount) doPlayerAddSkill(cid, skill, amount, round) getPartyLeader(cid) isInParty(cid) isPrivateChannel(channelId) doPlayerResetIdleTime(cid) doBroadcastMessage(text, class) doPlayerBroadcastMessage(cid, text, class, checkFlag, ghost) getBooleanFromString(input) doCopyItem(item, attributes) doRemoveThing(uid) setAttackFormula(combat, type, minl, maxl, minm, maxm, min, max) setHealingFormula(combat, type, minl, maxl, minm, maxm, min, max) doChangeTypeItem(uid, subtype) doSetItemText(uid, text, writer, date) doItemSetActionId(uid, aid) getFluidSourceType(itemid) getDepotId(uid) getItemDescriptions(uid) getItemWeightById(itemid, count, precision) getItemWeaponType(uid) getItemRWInfo(uid) getItemLevelDoor(itemid) isContainer(uid) isItemStackable(itemid) isItemRune(itemid) isItemDoor(itemid) isItemContainer(itemid) isItemFluidContainer(itemid) isItemMovable(itemid) isCorpse(uid) getContainerCapById(itemid) getMonsterAttackSpells(name) getMonsterHealingSpells(name) getMonsterLootList(name) getMonsterSummonList(name) choose(...) exhaustion.check(cid, storage) exhaustion.get(cid, storage) exhaustion.set(cid, storage, time) exhaustion.make(cid, storage, time) doConvertIntegerToIp(int, mask) doConvertIpToInteger(str) doRevertIp(str) isInRange(position, fromPosition, toPosition) getDistanceBetween(fromPosition, toPosition) getDirectionTo(pos1, pos2) getCreatureLookPosition(cid) getPositionByDirection(position, direction, size) doComparePositions(position, positionEx) getArea(position, x, y) Position(x, y, z, stackpos) isValidPosition(position) isSorcerer(cid) isDruid(cid) isPaladin(cid) isKnight(cid) isRookie(cid) string.split(str) string.trim(str) string.explode(str, sep, limit) string.expand(str) string.timediff(diff) Compats (data/lib/100-compat.lua) doSetCreatureDropLoot = doCreatureSetDropLoot doPlayerSay = doCreatureSay doPlayerAddMana = doCreatureAddMana playerLearnInstantSpell = doPlayerLearnInstantSpell doPlayerRemOutfit = doPlayerRemoveOutfit pay = doPlayerRemoveMoney broadcastMessage = doBroadcastMessage getPlayerName = getCreatureName getCreaturePosition = getThingPosition getPlayerPosition = getCreaturePosition getCreaturePos = getCreaturePosition creatureGetPosition = getCreaturePosition getPlayerMana = getCreatureMana getPlayerMaxMana = getCreatureMaxMana hasCondition = hasCreatureCondition getCreatureCondition = hasCreatureCondition isMoveable = isMovable isItemMoveable = isItemMovable saveData = saveServer savePlayers = saveServer getPlayerSkill = getPlayerSkillLevel getPlayerSkullType = getCreatureSkullType getCreatureSkull = getCreatureSkullType getAccountNumberByName = getAccountIdByName getIPByName = getIpByName getPlayersByIP = getPlayersByIp getThingFromPos = getThingFromPosition getThingfromPos = getThingFromPos getHouseFromPos = getHouseFromPosition getPlayersByAccountNumber = getPlayersByAccountId getIPByPlayerName = getIpByName getPlayersByIPNumber = getPlayersByIp getAccountNumberByPlayerName = getAccountIdByName convertIntToIP = doConvertIntegerToIp convertIPToInt = doConvertIpToInteger queryTileAddThing = doTileQueryAdd getTileHouseInfo = getHouseFromPos executeRaid = doExecuteRaid saveServer = doSaveServer cleanHouse = doCleanHouse cleanMap = doCleanMap shutdown = doShutdown mayNotMove = doCreatureSetNoMove getTileItemsByType = getTileItemByType doPlayerSetNoMove = doCreatureSetNoMove getPlayerNoMove = getCreatureNoMove getConfigInfo = getConfigValue doPlayerAddExp = doPlayerAddExperience isInArea = isInRange doPlayerSetSkillRate = doPlayerSetRate getCreatureLookDir = getCreatureLookDirection getPlayerLookDir = getCreatureLookDirection getPlayerLookDirection = getCreatureLookDirection doCreatureSetLookDir = doCreatureSetLookDirection getPlayerLookPos = getCreatureLookPosition setPlayerStamina = doPlayerSetStamina setPlayerPromotionLevel = doPlayerSetPromotionLevel setPlayerGroupId = doPlayerSetGroupId setPlayerPartner = doPlayerSetPartner doPlayerSetStorageValue = doCreatureSetStorage setPlayerStorageValue = doPlayerSetStorageValue getPlayerStorageValue = getCreatureStorage getGlobalStorageValue = getStorage setGlobalStorageValue = doSetStorage getPlayerMount = canPlayerRideMount setPlayerBalance = doPlayerSetBalance doAddMapMark = doPlayerAddMapMark doSendTutorial = doPlayerSendTutorial getWaypointsList = getWaypointList getPlayerLastLoginSaved = getPlayerLastLogin getThingPos = getThingPosition doAreaCombatHealth = doCombatAreaHealth doAreaCombatMana = doCombatAreaMana doAreaCombatCondition = doCombatAreaCondition doAreaCombatDispel = doCombatAreaDispel getItemDescriptionsById = getItemInfo hasProperty = hasItemProperty hasClient = hasPlayerClient print = std.cout getPosByDir = getPositionByDirection isNumber = isNumeric doSetItemActionId = doItemSetActionId getOnlinePlayers = getPlayersOnlineEx addDialog = doPlayerAddDialog doSendPlayerExtendedOpcode = doPlayerSendExtendedOpcode Créditos: Zonnebloem
  11. Hail Xtibianos. Eu fiz esse sistema como pedido de um membro há um bom tempo, mas nunca tinha postado ele e diversos sistemas que uso no meu ot server; agora resolvi postá-los. Esse é o sistema que impede dos players da mesma party se atacarem ou, também dos membros da mesma guild. Em config.lua adicione: noDamageToGuildMates = false noDamageToPartyMembers = true Em creaturescripts.xml adicione: <event type="combat" name="combat" script="combat.lua"/> Em creaturescripts/scripts/login.lua adicione: registerCreatureEvent(cid, "combat") Na mesma pasta, crie um arquivo lua chamado combat e adicione isso nele: --[[> Marcryzius <]]--function onCombat(cid, target) if(isPlayer(cid) and isPlayer(target)) then if(getConfigValue("noDamageToGuildMates") and getPlayerGuildId(cid) > 0 and getPlayerGuildId(cid) == getPlayerGuildId(target)) then return false elseif(getConfigValue("noDamageToPartyMembers") and isInParty(target) and getPartyLeader(target) == getPartyLeader(cid)) then return false end end return trueend Qualquer duvida ou erro deixe nos comentários.
  12. Hail Xtibianos. Eu criei esse sistema, não lembro se foi a pedido de um membro ou não, para que seja interessante sempre matar o toplvl do otserver devido ao premio recebido por isso. Em config.lua adicione: huntedTopLevel = 100 -- "false" inibe o sistema; numero é o level minimo necessario para dar hunted ao toplvl.priceForEachLevelTohuntedTopLevel = 100 -- preço pago por cada lvl do toplvl ao mata-lo. Em creaturescripts.xml adicione: <event type="death" name="toplvl" script="toplvl.lua"/> Em creaturescripts/scripts/config.lua adicione: registerCreatureEvent(cid, "toplvl") Na mesma pasta, crie um arquivo lua com o nome toplvl e adicione: function onDeath(cid, corpse, deathList)local top,price = getConfigInfo("huntedTopLevel"),getConfigInfo("priceForEachLevelTohuntedTopLevel") if(isPlayer(cid))then -- hunted top level local _,level = getTopLevel() if(tonumber(level) and top and tonumber(level) >= top and tonumber(level) <= getPlayerLevel(cid))then for _,player in pairs(deathList) do if(isPlayer(player))then doPlayerAddMoney(player, getPlayerLevel(cid)*price) end end end end return trueend Agora abra o arquivo lib/050-functions.lua e adicione: function getTopLevel() --[[( Marcryzius )]]--local target,name,level = db.getResult("SELECT `name`, `level` FROM `players` WHERE `group_id` <= 2 ORDER BY 'level' DESC;"),"",0 if(target:getID() ~= -1) then repeat local glevel = target:getDataInt("level") if(level < glevel)then name,level = target:getDataString("name"), glevel end until not(target:next()) end target:free() return name,levelend No config.lua tu coloca o valor minimo requerido do toplvl para poder ser caçado. Duvidas, erros e qualquer outra coisa, deixe nos comentários.
  13. Bom, vou ser o mais direto possível: Estou tentando adicionar um novo slot no servidor, de versão 8.54 e TFS 0.4, mudei nas sources e já as compilei com sucesso, segue abaixo no spoiler as alterações feitas na mesma: items.h #define ITEMS 13000 #define SLOTP_WHEREEVER 0xFFFFFFFF #define SLOTP_HEAD 1 << 0 #define SLOTP_NECKLACE 1 << 1 #define SLOTP_BACKPACK 1 << 2 #define SLOTP_ARMOR 1 << 3 #define SLOTP_RIGHT 1 << 4 #define SLOTP_LEFT 1 << 5 #define SLOTP_LEGS 1 << 6 #define SLOTP_FEET 1 << 7 #define SLOTP_RING 1 << 8 #define SLOTP_AMMO 1 << 9 #define SLOTP_DEPOT 1 << 10 #define SLOTP_TWO_HAND 1 << 11 #define SLOTP_EYE 1 << 15 #define SLOTP_HAND SLOTP_LEFT | SLOTP_RIGHT items.cpp else if(tmpStrValue == "eye") { it.slotPosition |= SLOTP_EYE; it.wieldPosition = SLOT_EYE; } movement.cpp else if(tmpStrValue == "eye") slot = SLOTP_EYE; case SLOT_EYE: slotp = SLOTP_EYE; break; player.cpp if((item->getSlotPosition() & SLOTP_HEAD) || (item->getSlotPosition() & SLOTP_NECKLACE) || (item->getSlotPosition() & SLOTP_BACKPACK) || (item->getSlotPosition() & SLOTP_ARMOR) || (item->getSlotPosition() & SLOTP_LEGS) || (item->getSlotPosition() & SLOTP_FEET) || (item->getSlotPosition() & SLOTP_RING) || (item->getSlotPosition() & SLOTP_EYE)) ret = RET_CANNOTBEDRESSED; case SLOT_EYE: if(item->getSlotPosition() & SLOTP_EYE) ret = RET_NOERROR; break; creature.h enum slots_t { SLOT_PRE_FIRST = 0, SLOT_WHEREEVER = SLOT_PRE_FIRST, SLOT_FIRST = 1, SLOT_HEAD = SLOT_FIRST, SLOT_NECKLACE = 2, SLOT_BACKPACK = 3, SLOT_ARMOR = 4, SLOT_RIGHT = 5, SLOT_LEFT = 6, SLOT_LEGS = 7, SLOT_FEET = 8, SLOT_RING = 9, SLOT_AMMO = 10, SLOT_DEPOT = 11, SLOT_LAST = SLOT_DEPOT, SLOT_HAND = 12, SLOT_EYE = 15, SLOT_TWO_HAND = SLOT_HAND }; enums.h enum ConditionId_t { CONDITIONID_DEFAULT = -1, CONDITIONID_COMBAT = 0, CONDITIONID_HEAD, CONDITIONID_NECKLACE, CONDITIONID_BACKPACK, CONDITIONID_ARMOR, CONDITIONID_RIGHT, CONDITIONID_LEFT, CONDITIONID_LEGS, CONDITIONID_FEET, CONDITIONID_RING, CONDITIONID_EYE, CONDITIONID_AMMO, CONDITIONID_OUTFIT }; Após as sources, o único local em que encontrei nos scripts em lua, foi no 'data/lib/000-constant.lua' e deixei assim: CONST_SLOT_FIRST = 1 CONST_SLOT_HEAD = CONST_SLOT_FIRST CONST_SLOT_NECKLACE = 2 CONST_SLOT_BACKPACK = 3 CONST_SLOT_ARMOR = 4 CONST_SLOT_RIGHT = 5 CONST_SLOT_LEFT = 6 CONST_SLOT_LEGS = 7 CONST_SLOT_FEET = 8 CONST_SLOT_RING = 9 CONST_SLOT_AMMO = 10 CONST_SLOT_EYE = 15 CONST_SLOT_LAST = CONST_SLOT_AMMO Deixei um item no 'data/items/items.xml' com o slotType="eye" que foi criado, e fiz as seguintes alterações no OTClient: modules/game_inventory/inventory.lua InventorySlotStyles = { [InventorySlotHead] = "HeadSlot", [InventorySlotNeck] = "NeckSlot", [InventorySlotBack] = "BackSlot", [InventorySlotBody] = "BodySlot", [InventorySlotRight] = "RightSlot", [InventorySlotLeft] = "LeftSlot", [InventorySlotLeg] = "LegSlot", [InventorySlotFeet] = "FeetSlot", [InventorySlotFinger] = "FingerSlot", [InventorySlotAmmo] = "AmmoSlot", [InventorySlotEye] = "EyeSlot" } modules/game_inventory/inventory.otui EyeSlot < InventoryItem id: slot15 image-source: /images/game/slots/eye &position: {x=65535, y=14, z=0} e MiniWindow id: inventoryWindow !text: tr('Inventory') icon: /images/topbuttons/inventory height: 175 @onClose: modules.game_inventory.onMiniWindowClose() &save: true MiniWindowContents HeadSlot anchors.top: parent.top anchors.horizontalCenter: parent.horizontalCenter margin-top: 3 BodySlot anchors.top: prev.bottom anchors.horizontalCenter: prev.horizontalCenter margin-top: 3 LegSlot anchors.top: prev.bottom anchors.horizontalCenter: prev.horizontalCenter margin-top: 3 FeetSlot anchors.top: prev.bottom anchors.horizontalCenter: prev.horizontalCenter margin-top: 3 NeckSlot anchors.top: slot1.top anchors.right: slot1.left margin-top: 10 margin-right: 5 LeftSlot anchors.top: prev.bottom anchors.horizontalCenter: prev.horizontalCenter margin-top: 3 FingerSlot anchors.top: prev.bottom anchors.horizontalCenter: prev.horizontalCenter margin-top: 3 BackSlot anchors.top: slot1.top anchors.left: slot1.right margin-top: 10 margin-left: 5 RightSlot anchors.top: prev.bottom anchors.horizontalCenter: prev.horizontalCenter margin-top: 3 AmmoSlot anchors.top: prev.bottom anchors.horizontalCenter: prev.horizontalCenter margin-top: 3 EyeSlot anchors.top: prev.bottom anchors.horizontalCenter: prev.horizontalCenter margin-top: 3 PurseButton margin-top: 3 anchors.top: prev.bottom anchors.horizontalCenter: prev.horizontalCenter modules/gamelib/player.lua InventorySlotOther = 0 InventorySlotHead = 1 InventorySlotNeck = 2 InventorySlotBack = 3 InventorySlotBody = 4 InventorySlotRight = 5 InventorySlotLeft = 6 InventorySlotLeg = 7 InventorySlotFeet = 8 InventorySlotFinger = 9 InventorySlotAmmo = 10 InventorySlotPurse = 11 InventorySlotEye = 15 InventorySlotFirst = 1 InventorySlotLast = 10 Com todas estas alterações, o que foi feito: O slot foi adicionado com sucesso no OTClient, aparecendo sem erros, com imagem e posicionado; O console não encontrou erro ao debugar o items.xml (testei um tipo aleatório, e dá erro o erro padrão das sources, então o tipo "eye" está correto nas sources); Dei /i em um item do tipo "eye" pra ver se o mesmo iria para o slot, mesmo caso não existisse graficamente, ele deveria ficar salvo nos dados do personagem no banco de dados, e isto não ocorreu, logo o problema está entre as sources e o client; Enfim, nas sources o tipo "eye" foi criado, mas ainda não é reconhecido verdadeiramente, espero que alguém possa me ajudar, segue em anexo as sources e todos os arquivos que citei ter editado: help.rar
  14. Hail Xtibianos. Eu estava/estou atualizando alguns scripts meus bem antigos, então resolvi compartilhar para vocês que priorizam um jogo mais ao estilo: segunda vida na idade média. Bom... tu terás que fazer uma sala parecida como essa e com esses ids (pois já foram implementados no código). Agora vamos implementar os códigos: Vá em data/actions.xml e insira essas tags: Em data/actions/scripts/tools; insira todos esses códigos cada um com seus respectivos nomes: ferreiro.lua bellow.lua wood: Pronto. Instalados os scripts; agora irei explicar como funciona o sistema. Para acender o crucible, você precisa usar o fire bug (5468) no crucible (8642) até ele acender. Agora você põe a arma em cima da bancada e clica no bellow para ele 'aquecer' a arma para forja. Depois de 'esquentar' a arma, voce forja ela no anvil (bigorna de id 2555) por um tempo (tempo esse determinado pelo uso do crucible). Se o crucible 'apagar', voce clica no bellow até ele voltar a 'acender', mas isso só pode ser feito algumas vezes. Se você clicar muitas vezes e ele não 'acender', então tu terás que usar o fire bug de novo no crucible. Novo sistema de forja adicionado. Agora tu poderás adicionar materiais a forja para obter outros items. Explicação desse novo sistema: Primeiro tu põe a arma base para adição de novos compostos na mesa. adicione o item em cima da arma. Clique no bellow e o item de adição desaparecera. Leve o item "aquecido" para a bigorna. Use a marreta nele até sair um efeito verde. Caso ele peça para por de volta na fornalha a arma, não adicione outro item, apenas aqueça-o. Faça esse mesmo procedimento adicionando compostos até que o item seja criado. aqui um manual de forja feito a parti da tabela forja no script ferreiro.lua Tu poderás adicionar mais compostos para obter outros items a seu critério. Nova atualização! Agora a sala de forja ficou assim: Agora é possível forjar/fundir items: Adicione os compostos necessário para forja um por um (desde que ele não seja agrupaveis) na bancada do crucible e clique no bellow até ele sumir. adicione todos os items necessários e ao final clique no crucible: Resultado ao clicar no crucible com os compostos: Resultado da forja com os compostos: Onde edito ou ponho novos compostos no script? No script bellow.lua existe a lista de compostos e suas respectivas forjas. É só copiar uma nova instrução e editar os valores para novos items que possam ser forjados. ATENÇÃO! Todos os compostos precisam ser exatos para a receita funcionar, nem mais nem menos. Função requerida: É isso pessoal, depois posto mais scripts atualizados meu; espero que gostem; qualquer erro ou dúvida deixem no comentário abaixo. Um vídeo explicando como fazer objetos de fundição:
  15. Hail xtibianos! Gostaria de saber se vocês se interessam em ter aulas de scripting lua. Já temos cerca de oito aulas prontas para o primeiro módulo,. As aulas são compostas de teoria e prática, métodos e tarefas para fixar o conhecimento aos alunos. Serão disponibilizados aulas em três módulos: conceito e aplicações básicas, técnicas e conceitos intermediarios, spoo lua; disponibilizado em uma gama de aulas que serão postas todos os sábados até o final do módulo vigente. Ao final, pretendemos dar uma "pip" de scripting lua para todos os alunos que completarem o(s) módulo(s). Dependendo da quantidade de interessados, poderemos iniciar as aulas em princípios do mês subsequente. Deixem nos comentários seu aval ou sua queixa. Esperamos que tenham bastante participantes. Obrigado.
  16. Fala XTibianos! Vim disponibilizar e ensinar como usar a livraria xml em lua, desenvolvida por mim. Ela foi desenvolvida para substituir a livraria padrão disponibilizada por lua para trabalhar com dados xml. Essa livraria não requer a dll-xml necessária para a livraria padrão lua. Aqui tem o tutorial criado por mim para demonstrar as funções e suas implementações da livraria luaxml. Tutorial lua lib xml padrão Vamos lá. Primeiro, a livraria: Vou ensinar como usar ela. Vou usar como exemplo uma parte do arquivo vocations.xml: Primeiro, carregar o arquivo. Ele vai retornar um objeto para ser usado pelos metametodos ou uma string para outros fins como "print". Buscar a tag desejada. Ele vai retornar uma tabela contendo todos os parametros que foram lidos no arquivo. O primeiro argumento da função, é o nome da tag requerida. exemplo: <tagNome ....>, tagNome seria o primeiro argumento da função. O segundo elemento é usado para diferenciar um bloco de outro como no caso do arquivo vocations que contem varias vocations, mas apenas uma é a requerida. O terceiro elemento é o que diferencia um bloco de outro similar. seguindo o exemplo do arquivo vocations, existe varias vocações, mas apenas uma delas tem o id de numero 2. Imprime o que foi lido no arquivo. a saida seria essa, nesse caso. Mas, ela tambem é uma tabela, por isso, voce pode pegar os elementos dentro dela dessa forma. As tags existentes dentro do bloco "vocation", tambem é uma tabela com indice numerico; portanto é valido pegar os dados dela dessa forma. Cada tag que exista dentro do bloco, vem como uma tabela com indicie numerico. Criando objetos para xml: O argumento inserido , seria o nome do bloco. Ex -> <novo> </novo> Adiciona tag's dentro do corpo do bloco. Pode ser adicionado quantas tags quiser. Cria uma tagbloco ou bloco dentro do bloco principal. Ex -> <tagBloco inserido="primer" ordem="2" face="not"> </tagBloco> Essa função retorna um objeto para ser usado pelos metametodos ou uma string para outros fins como "print". Dessa forma que foi declarada sem uma tabela contendo os parametros da tag, ela é criada como um bloco. Ex -> <newBloco> </newBloco> Adiciona tag's ao corpo do novo bloco/tagbloco criado pela função append. E por fim, salva os dados em um arquivo. Nessa função, existe o argumento unico que é o destino do arquivo e seu nome, que nesse caso foi ocultado. Esse é os dados dentro do arquivo gerador pelo script. Devido as novas atualizações feitas a lib, agora podeis usar caracteres especial de busca e inserção de maiores informações para busca. Vou usar como exemplo essa parte do arquivo items.xml e movements.xml para explicar essas mudanças. items movements Na versão anterior da lib ela não poderia buscar informações no arquivo items.xml devido a um erro na ora de selecionar o bloco buscado. O problema residia em que: ao encontrar uma tag ela busca o seu fechamento, sendo que, no exemplo da parte do arquivo items que postei acima, ela pegava todo esse bloco, dessa forma anulando o verdadeiro id buscado. Isso foi resolvido. agora ela filtra o bloco encontrado antes de fazer a analise de que seja o dado requisitado. Outro problema era quando se desejava buscar uma informação mais precisa, como no caso do arquivo movements.xml que existe duas tags com os mesmo ids equip e deequip; se eu colocasse o id de qualquer item ele me retornaria a primeira sentença encontrada que na maioria das vezes não era a que eu queria. isso também foi corrigido; agora podeis usar mais informações para melhorar a precisão da busca. Veja esse exemplo: Obs. Os codigos estão codificados em utf8, converta para ansi antes de usa-los. É isso ae pessoal, espero que gostem; qualquer erro ou sugestão serão bem vindas. obrigado.
  17. Hail Xtibianos. Eu criei esse sistema para impedir que mages usem magias sem estarem usando o livro. Cada livro libera uma certa quantidade de magias, logo, os mages terão que ter o livro para usarem determinadas magias mesmo eles tendo o level requerido por ela. Tu irás a precisar usar essa livraria para poder usar esse sistema: Em movements.xml adicione: Em movements/scripts crie um arquivo lua chamado spellbooks e adicione: Aconselho substituir o código do spellbook em actions por esse: Em actions.xml verifique se existe todos essas tags, caso não, adicione: Em actions/scripts/other/spellbooks.lua apague o seu conteúdo e adicione este: Mais realidade para o verdadeiro tibia. Qualquer duvida, erro e etc, deixe nos comentários.
  18. MALLEUS MALEFICARUM O Martelo das Bruxas ou O Martelo das Feiticeiras é um livro que foi escrito e publicado em 1486 ou 1487 pelos dominicanos Heinrich Kraemer (também conhecido por Heinrich Institoris) e James Sprenger, na Alemanha, em cumprimento à bula papal Summis Desiderantis Affectibus de Inocêncio VIII, que os autorizava criar um manual de combate aos praticantes de heresias - e que veio a se tornar o guia dos inquisidores pelo restante do século XV e seguintes; embora outros manuais tenham sido escritos no período, este é dos mais "perversos e cruéis", verdadeiro "manual de ódio, de tortura e morte". Devido a heresia cometidas pelas pessoas que renegaram a fé um dia obtida e pactuando sua vida com o diabo, trouxeram para si a ira de Deus. Negaram a fé, negaram a igreja, negaram Deus e prestaram culto ao diabo. A ARTE DO PENTAGRAMA As Bruxas são mulheres que praticam culto ao diabo e se satisfazem de seu poder para suas feitiçarias, encantos e adivinhações. Devido a suas capacidade de conhecerem as artes da magia negra, os Bruxos conseguem causar pânico por onde passam e onde atuam. O pentagrama é o simbolo chave para a Bruxaria; é dele que dizem que as forças do mal emanam e os Bruxos o usam para suas artes malignas. Não era para ser uma quest esse sistema, mas eu adaptei para poder publica-lo. Inicialmente foi desenvolvido apenas como forma de punição pela sentença dada pela inquisição aos acusados de bruxaria; agora ele se tornou uma quest. Adicionando o sistema. data/movements/movements.xml data/movements/scripts/quests crie um arquivo com extensão .lua e nomeio para malleus; adicione esse código ao arquivo: Coloque apenas as posições requisitadas na tabela config. Adicione o respawn nas outras áreas, exceto na sala de tortura e no pentagrama. Nessa área, seria bom por esses monstros, como mostra a imagem: adicione na posição central, exatamente onde está a arvore morta, esse monstro: Nessa outra área, adicione na posição central, exatamente onde está a arvore, esse monstro: mapa: clean.rar clean.rar
  19. Esta dando esse probleminha aqui agora , e também não consigo atacar mais ninguém.
  20. Hail Xtibianos. Trago a vós uma serie de funções que eu uso no meu servidor e que pode ser úteis ao seu. Lembrando que algumas funções podem fazer uso de uma livraria xml criado por mim e posta nesse tópico. Essa função tem por objetivo criar uma data formatada (00:00:00) de um intervalo de tempo. function intervalClockFormat(ini,fim) --[[( Marcryzius )]]--local ini,fim = tonumber(ini),tonumber(fim)if not(ini or fim)then return "error",print('function intervalClock erro: type de variaveis invalidas') endlocal tienpo = fim-ini-- existe o parametro de dia, mas não está sendo retornado (usado).local day,hour,minu,seco = tienpo/60/60/23%30,math.floor(tienpo/60/60%23), math.floor(tienpo/60%60),math.floor(tienpo%60) return (hour < 10 and "0"..hour or hour)..":"..(minu < 10 and "0"..minu or minu)..":"..(seco < 10 and "0"..seco or seco)endEx: print(intervalClockFormat(os.time(),os.time()+98)) >> 00:01:38print(intervalClockFormat(os.time(),os.time()+6598)) >> 01:49:58 Essas funções tem por objetivo salvar as informações de uma determinada quest e saber se o player tem essa quest salva em seu histórico. function saveQuestsInfor(uid,name,cid,other) --[[( Marcryzius )]]----[[ uid = Item.uid usado no bau(entre outros) para receber o item da Quest name = nome do item dado ao player ou nome da quest cid = identificacao do player other = informacoes adicionais para serem salvas junto a quest]]--if not(db.executeQuery("SELECT * FROM `server_quests`;"))then -- caso a table não exista, será criada db.executeQuery("CREATE TABLE `server_quests` (`uid` INTEGER, `name` VARCHAR(255), `name_player` VARCHAR(255), `pos` VARCHAR(255), `other` TEXT);")end-- caso o parametro uid seja numero, se pega a posição do item ou, caso não, se pega a posição do player.local other,pos2 = other or '',''local pos = type(uid) == 'number' and getThingPos(uid) or getCreaturePosition(cid) pos2 = 'x='..pos.x..', y='..pos.y..', z='..pos.z -- verifica se tudo está correto. if not(type(name) == 'string') or not(tonumber(cid))then return false, print('Funcao requer parametros: name,cid') end -- salva as informações na database. db.executeQuery("INSERT INTO `server_quests` (`uid`, `name`, `name_player`,`pos`,`other`) VALUES ("..(uid or tonumber(pos.x..''..pos.y..''..pos.z))..",'"..name.."', '"..getCreatureName(cid).."','"..pos2.."','"..other.."');") return trueendfunction getSaveQuestsInfor(uid,cid) --[[( Marcryzius )]]--local str = false if(tonumber(uid))then str = db.getResult("SELECT * FROM `server_quests` WHERE `uid` = '"..uid.."' AND `name_player` = ".. db.escapeString(getCreatureName(cid))..";") elseif(type(uid) == 'string')then str = db.getResult("SELECT * FROM `server_quests` WHERE `name_player` = " ..db.escapeString(getCreatureName(cid)).. " AND `name` = '"..uid.."';") else return false,print('getSaveQuestInfor: tipo de uid invalido > '..tostring(type(uid))) end return (str:getID() == -1) and true or false end Essa função serve para por a primeira letra de cada palavra da 'msg' em maiúscula. function upperPrimer(msg) --[[( Marcryzius )]]--local txt = '' for k in string.gmatch(msg,'%a+') do if(#k > 1)then txt = txt..' '..k:gsub("^%a", function(s) return s:upper() end) else txt = txt..' '..k end end return txt:sub(2,-1)endEx:print(upperPrimer("toda primeira letra de cada palavra desse texto foi colocada em maiusculo")) >> Toda Primeira Letra De Cada Palavra Desse Texto Foi Colocada Em Maiusculo Função criada para determinar o valor inteiro mais próximo de uma fração. function math.proxInteger(value) --[[( Marcryzius )]]-- local value = tonumber(value) if not(value)then return 0,print('Function error: math.proxInteger() > valor => '..type(value)) end return value-math.floor(value) < 0.5 and math.floor(value) or math.ceil(value)end Essa função converte a 'string' em números e devolve a soma de todos os números. function getStoreString(str) --[[( Marcryzius )]]--local store = 0 if(type(str) == 'string')then for pos = 1,#str do store = store+str:sub(pos,pos):byte() end elseif(type(str) == 'number')then return str else print('function getStoreString adverte: tipo de parametro invalido. ('..type(str)..')') end return storeendEx:print(getStoreString("lua")) >> 322 Pega o level necessário para usar a arma dentro do arquivo weapons.xml function getLevelNeedToWeaponById(itemid) --[[( Marcryzius )]]--local xfile = xml:load("data/weapons/weapons.xml"):find('%a+','id',itemid) return tonumber(xfile and xfile.level) or 0end Essa função faz uma verificação se há um town em uma determinada área. function getTownInArea(pos, ranger) --[[( Marcryzius )]]--local ranger,townid,bloked = ranger or 200,1,{getTownId('Gods Island'),getTownId('Isle of Destiny')} -- towns suprimidos while getTownName(townid) do local get = getTownTemplePosition(townid) if not(isInArray(bloked,townid)) and ((pos.x >= get.x-ranger and pos.x <= get.x+ranger)and(pos.y >= get.y-ranger and pos.y <= get.y+ranger))then return townid else townid = townid+1 end end return 0 --retorna 0 (zero) para servir como condição.end Pega o nome e o level do top function getTopLevel() --[[( Marcryzius )]]--local target,name,level = db.getResult("SELECT `name`, `level` FROM `players` WHERE `group_id` <= 2 ORDER BY 'level' DESC;"),"",0 if(target:getID() ~= -1) then repeat local glevel = target:getDataInt("level") if(level < glevel)then name,level = target:getDataString("name"), glevel end until not(target:next()) end target:free() return name,levelend Verifica se existe o nome de um player mesmo ele estando offline. function playerExistName(nome) --[[( Marcryzius )]]--local db = db.getResult("SELECT `name` FROM `players` WHERE `id` = " ..getPlayerGUIDByName(nome).. ";") if not(db:getID() == -1) then return db:getDataString("name") end return falseend Retorna o tempo vigente apenas em segundos function HorasParaSegundos() --[[( Marcryzius )]]-- local hour,minu,second = tostring(os.date("%H:%M:%S")):match('(%d+)%d+)%d+)') return ((tonumber(hour) or 0)*3600)+((tonumber(minu) or 0)*60)+secondend
  21. Como e sabido de muitos, dificilmente se faz scripts para ot serve em simulação poo em lua. Eu estava entediado jogando ot e resolvi jogar xadrez com aquelas peças de xadres que tem no jogo. Então me veio a ideia de por ordem nas peças, fazer com que elas só se movimentem caso seja o movimento correta dela. Eis a oportunidade para eu aprender simulação de poo em lua. Bem o script não está terminado, falta muita coisa, mas já é um começo. Gostaria da ajuda de vocês para me orientar na melhor forma de fazer o script. Eu ainda estou aprendendo simulação de poo em lua, então orientações nessa área são bem vindas. Sugestões e críticas construtivas são bem vindas também. Xadrez.lua Motor do sistema: movements.xml adicione: movements/scripts/xadrez_poo.lua, adicione:
  22. Opa, eu tava aqui tendo alguns problemas para estender o limite de efeitos no OTX. Mas depois percebi que o const.h, eles não utilizam mais em números HEXADECIMAIS, estão utilizando no código números inteiros (1, 2, 3, 4, ...). Então para não ter que refazer manualmente todos os códigos do 68 até o 1500 (que eu tinha configurado na minha source antiga), eu resolvi fazer um programinha que vai fazer isto para mim. Quais versões esse código serve? The Forgotten Server (0.4, 1.0, 1.1, 1.2 e 1.3) OTX (2.9 ou maior) Como que eu utilizo este programa? Muito simples, siga o passo-a-passo a seguir: - Primeiro clique neste link aqui e deixe aberto em outra aba. - Vá no seu const.h (Se encontra na source do seu servidor) e verifique até onde foi configurado os seus effects. - Pronto, agora que você já tem o link aberto e já sabe qual seu ultimo valor configurado. Vá na outra aba e você encontrará a tabela customVariables - Você deverá alterar o initialValue para o próximo valor após o ultimo effect configurado. Por exemplo: initialValue = 400, -- Mude o valor inicial Depois: initialValue = 2001, -- Mude o valor inicial Agora você deve alterar qual será o valor do ultimo effect, por exemplo, eu tenho configurado até o valor 2000 e eu quero ter até o valor 4000. Você deve alterar o finalValue desse jeito: finalValue = 1500 -- Mude o valor final Depois: finalValue = 4000 -- Mude o valor final Pronto, após isso só clique no botão Run e aparecerá um monte de config. Você deverá ir no seu const.h e deletar a linha que configura o MAGIC_EFFECT_LAST. Ou seja, no meu caso irei deletar essa linha: MAGIC_EFFECT_LAST = CUSTOM_MAGIC_EFFECT2000, Agora só dá ctrl + c no código gerado pelo programa e ctrl + v no mesmo lugar em que o MAGIC_EFFECT_LAST foi deletado. Pronto, efeitos adicionados
  23. fica aqui expresso as regras gerais que gerem essa seção. Regras de postagem de conteúdo: 1.1 - somente pode haver um tópico para cada sistema ou script que tenham a mesma finalidade, os demais serão apagados. 1.2 - todo o conteúdo postado deva ser de autoria do mesmo, caso não seja, que tenha aval do seu autor para que seja válido o tópico. 1.3 - o conteúdo postado é de inteira responsabilidade do seu autor. 1.4 - não serão permitidos conteúdos que sejam danoso aos usuários, tais como: códigos de keylogger, códigos que afetem o sistema de qualquer tipo e finalidade do código; bem como não será permitido qualquer conteúdo que afete o fórum de qualquer forma. 1.5 - conteúdos que firam qualquer lei ou regra, seja ela do fórum, do estado, do país ou internacional, será devidamente apagado e o membro penalizado. 1.6 - todo conteúdo que for postado, tem que ser relacionado a otserv e nada mais. 1.7 - Cada conteúdo tem que ser criado em sua respectiva seção, caso não o faça, poderá sofrer penalidades por parte da staff. 1.8 - todo o conteúdo deva estar devidamente completo. - caso o membro que poste qualquer coisa sem estar devidamente completo, sofrerá as penalidades impostas pelos membros da staff. - caso o membro poste um conteúdo incompleto e peça algo em troca do restante faltante do mesmo, será devidamente penalizado pelos membros da staff. - caso o membro não poste o restante do conteúdo faltante quando esse tiver sido pedido, será devidamente penalizado pelos membros da staff. Regras gerais: 1.1 - não será permitido que façam do tópico canal de conversa. 1.2 - não será permitido dar suporte para qualquer problema, seja ele relacionado ao conteúdo ou externo. 1.3 - não será permitido divulgação de qualquer tipo. 1.4 - o tópico não poderá ser abandonado pelo membro. 1.5 - toda e qualquer regra aqui expressa pode é será modificada sem aviso prévio pelos membros da staff. Dos direitos dos autores de tópicos: 1.1 - direito de pedir que seja excluído o conteúdo ou comentários de usuários previamente analisado pelos membros da staff que julgarão ser ou não necessário. 1.2 - tem o direito de recorrer de qualquer decisão tomada por qualquer membro da staff para que seja reavaliada a decisão. 1.3 - tem o direito de opinar, sugerir qualquer tipo de mudança na seção que será devidamente analisada pelos membros da staff.
  24. New OTRestarter version: 1.0 developer: Tony Araújo (OrochiElf) pt. Gabriel Nogueira (Idéias) Funções: - Auto Restarter (Ele inicia o servidor assim que ele não detectar mais que o processo está ativo, ou seja, toda vez que o seu servidor fechar sozinho, o programa automaticamente irá reconhecer e irá reinicia-lo.) - Auto Crash Timer (Uma nova função inédita foi adicionada, esta função é responsável por detectar quando o processo do servidor para de funcionar, algo que acontece frequentemente, então ele irá reconhecer e reiniciar o processo.) - Auto Restarter Timer (Outra função nova adicionada nesta versão, esta função é responsável por programar os horários que você deseja reiniciar o seu servidor. ela é bastante usada para evitar o desperdício de memória usada no consumo do processo do servidor, ou seja, quando um servidor está ativo por muito tempo o gasto de memória aumenta, então esta função irá reiniciar o processo do seu servido de acordo com os horários que você marcar. Para próxima versão: - OTRestarter hosting (Esta função será uma inovação bastante bacana, ela dará o direito de você acessar o Restarter *que estará provavelmente instalado no VPS/Dedicado do servidor* sem que a pessoa precise acionar a conexão remota, ou seja, funcionará parecido com um FTP Control, você poderá controlar o Restarter e ter acesso as informações gravadas no LOG do programa através de um simples client, deixando possível ser acessado em computadores diferentes, e em breve uma versão para mobile/celular.) Imagem do funcionamento do programa: Download: Link Aqui