Ir para conteúdo

Movie

Membro
  • Registro em

  • Última visita

Tudo que Movie postou

  1. Só uma observação, mas nada demais... Esse tipo de verificação não é necessária if balance.canBlock == true then Você pode fazer apenas if balance.canBlock then Caso seja true, ele vai passar normalmente, caso for false ele para ali e nem termina de executar o código.
  2. Dentro da pasta lib, abra o arquivo lib.lua. No final de tudo adicione -- Dodge e Critical dofile('data/lib/dodgeCritical.lua')
  3. [Dodge & Critical] Sabe aqueles sistemas de dodge e critical que temos nos servidores de baiak? Então, é isso que hoje vou trazer para vocês! Há um sistema disponibilizado na internet, porém não funcional, o que eu fiz foi fixá-lo e adicionar o dodge para mana também. Testado no TFS 1.3 na versão 8.60 Na pasta lib crie um arquivo chamado dodgeCritical.lua --[[ Dodge & Critical fixado por Movie (Movie#4361) Disponibilizado para o TibiaKing e não autorizo outras reproduções Mantenha os créditos <3 --]] STORAGEVALUE_DODGE = 48900 STORAGEVALUE_CRITICAL = 48901 DODGE = { LEVEL_MAX = 100, -- máximo de level que o dodge será PERCENT = 0.2 -- porcentagem que irá defender o ataque } CRITICAL = { LEVEL_MAX = 100, -- máximo de level que o critical será PERCENT = 0.2 -- porcentagem que irá aumentar o ataque } function Player.getDodgeLevel(self) return self:getStorageValue(STORAGEVALUE_DODGE) end function Player.setDodgeLevel(self, value) return self:setStorageValue(STORAGEVALUE_DODGE, value) end function Player.getCriticalLevel(self) return self:getStorageValue(STORAGEVALUE_CRITICAL) end function Player.setCriticalLevel(self, value) return self:setStorageValue(STORAGEVALUE_CRITICAL, value) end Não esqueça de registrar a lib no lib.lua Agora na pasta creaturescript/scripts crie um arquivo chamado dodgeCritical.lua --[[ Dodge & Critical fixado por Movie (Movie#4361) Disponibilizado para o TibiaKing e não autorizo outras reproduções Mantenha os créditos <3 --]] function onHealthChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin) if (not attacker or not creature) then return primaryDamage, primaryType, secondaryDamage, secondaryType end if primaryType == COMBAT_HEALING then return primaryDamage, primaryType, secondaryDamage, secondaryType end if ((creature:getDodgeLevel() * 3) >= math.random (0, 1000) and creature:isPlayer()) then primaryDamage = 0 secondaryDamage = 0 creature:say("DODGE!", TALKTYPE_MONSTER_SAY) creature:getPosition():sendMagicEffect(CONST_ME_BLOCKHIT) end if (attacker:isPlayer() and (attacker:getCriticalLevel() * 3) >= math.random (0, 1000)) then primaryDamage = primaryDamage + math.ceil(primaryDamage * CRITICAL.PERCENT) attacker:say("CRITICAL!", TALKTYPE_MONSTER_SAY) creature:getPosition():sendMagicEffect(CONST_ME_EXPLOSIONHIT) end return primaryDamage, primaryType, secondaryDamage, secondaryType end <event type="healthchange" name="DodgeCritical" script="dodgeCritical.lua"/> Agora crie outro arquivo dentro do creaturescripts/scripts com o nome dodgeMana.lua --[[ Dodge & Critical fixado por Movie (Movie#4361) Disponibilizado para o TibiaKing e não autorizo outras reproduções Mantenha os créditos <3 --]] function onManaChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin) if (not attacker or not creature) then return primaryDamage, primaryType, secondaryDamage, secondaryType end if ((creature:getDodgeLevel() * 3) >= math.random (0, 1000) and creature:isPlayer()) then primaryDamage = 0 secondaryDamage = 0 creature:say("DODGE!", TALKTYPE_MONSTER_SAY) creature:getPosition():sendMagicEffect(CONST_ME_BLOCKHIT) end return primaryDamage, primaryType, secondaryDamage, secondaryType end <event type="manachange" name="DodgeMana" script="dodgeMana.lua"/> Não esqueça de registra no login.lua player:registerEvent("DodgeCritical") player:registerEvent("DodgeMana") Adicione também no login.lua if player:getDodgeLevel() == -1 then player:setDodgeLevel(0) end if player:getCriticalLevel() == -1 then player:setCriticalLevel(0) end Agora na pasta scripts/talkactions crie um arquivo chamado dodgeCritical.lua --[[ Dodge & Critical fixado por Movie (Movie#4361) Disponibilizado para o TibiaKing e não autorizo outras reproduções Mantenha os créditos <3 --]] local dodge = TalkAction("!dodge") local critical = TalkAction("!critical") function dodge.onSay(player, words, param) local skill = player:getDodgeLevel() local message = "DODGE SYSTEM\nO sistema consiste em defender uma porcentagem dos ataques recebidos.\n\nPor Exemplo:\nCada pedra utilizada atribui 0,3% a mais de chance.\nCom 10 pedras, voce tera 3% de chance de defender 50% dos ataques recebidos.\nCom 100 pedras (maximo), voce tera 30% de chance de defender 50% dos ataques recebidos.\nCada pedra que voce usar, sua skill de dodge aumenta em 1 ponto.\n\n------------------\nDodge Skill: [" .. skill .. "/100]" doPlayerPopupFYI(player, message) end dodge:register() function critical.onSay(player, words, param) local skill = player:getCriticalLevel() local message = "CRITICAL SYSTEM\nO sistema consiste em ter uma chance de dar um dano critico.\n\nPor Exemplo:\nCada pedra utilizada atribui 0,3% a mais de chance.\nCom 10 pedras, voce tera 3% de chance de hitar um dano critico dos ataques desferidos ao seu oponente.\nCom 100 pedras (maximo), voce tera 30% de chance de hitar um dano critico dos ataques desferidos ao seu oponente.\nCada pedra que voce usar, sua skill de dodge aumenta em 1 ponto.\n\n------------------\nCritical Skill: [" .. skill .. "/100]" doPlayerPopupFYI(player, message) end critical:register() Pronto, agora você tem o sistema no seu servidor! Curtiu? Dá um REP+ aí
  4. Na verdade, você nem precisa do parametro de player lá, já que você nem usa. Tenta assim: function onUseWeapon(cid, var, player) local chance = math.random(100) if chance <= 20 then combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_VORTEXBOLT) doCombat(cid, combat, var) addEvent(atk9, 200, cid) elseif chance > 20 then combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SHIVERARROW) doCombat(cid, combat, var) end end function atk9(cid) local target = getCreatureTarget(cid) local chance2 = math.random(10) if chance2 == 1 then addEvent(atk9, 200, cid) end end
  5. Você tá usando tfs 1.x?
  6. Quando você passa o player como parâmetro do addEvent, você tá passando uma userdata, que é um número mutável. Recomendo você utilizar o id do player, e depois validar o Player usando tipo local player = Player(playerId)
  7. [SafeZone 1.x] Hellou galera, a um tempo atrás tinha postado um safezone que eu e o @luanluciano93 tinhamos feito e por algumas questões resolvi apagar o tópico. Hoje venho postá-lo novamente porém mais otimizado e com maior número de configurações. Qualquer bug que houver durante o decorrer do evento só me avisar nesse tópico que irei fixar (SOMENTE NESSE TÓPICO, NÃO ME PROCUREM NO DISCORD NEM VIA PM) Na pasta lib, crie um arquivo chamado safezone.lua --[[ Evento SafeZone escrito por LuanLuciano93 e Movie (Movie#4361) Otimizado por Movie Disponibilizado para o TibiaKing e não autorizo outras reproduções Mantenha os créditos <3 --]] SAFEZONE = { teleportTimeClose = 5, eventTimeTotal = 30, positionTeleportOpen = Position(1003, 1217, 7), -- Posição que o portal irá abrir positionEnterEvent = Position(1545, 957, 7), -- Para onde os players irão storage = 12149, -- Não mexa actionId = 6412, -- ActionID que irá no portal ao ser criado, tem que ser o mesmo do movements protectionTileId = {9562, 9563, 9564, 9565}, -- ID dos pisos que serão criados levelMin = 150, minPlayers = 5, maxPlayers = 50, reward = {9020, 5}, -- ID do Item, Quantidade players = {}, days = { ["Sunday"] = {"20:00"}, ["Monday"] = {"20:00"}, ["Tuesday"] = {"20:00"}, ["Wednesday"] = {"20:00"}, ["Thursday"] = {"20:00"}, ["Friday"] = {"20:00"}, ["Saturday"] = {"20:00"}, }, messages = { prefix = "[SafeZone] ", messageStart = "O evento irá começar agora com %d participantes! Boa sorte!", messageNoStart = "O evento não foi iniciado por falta de participantes!", messageTime = "O evento foi finalizado por ultrapassar o limite de tempo!", messageOpen = "O evento foi aberto, você tem %d minutos para entrar no portal do evento que se encontra no templo!", messageWait = "O teleporte para o evento está aberto, você tem %d minuto(s) para entrar!", messageFinish = "O evento foi finalizado e o ganhador foi o %s! Parabéns!", messageWinner = "Você ganhou %d %s como premiação pelo primeiro lugar!", }, lifeColor = { [1] = 94, -- red [2] = 77, -- orange [3] = 79 -- yellow }, positionEvent = {firstTile = {x = 1538, y = 951, z = 7}, tilesX = 15, tilesY = 11} -- No final do tópico ensino a configurar } function SAFEZONE:teleportCheck() local tile = Tile(SAFEZONE.positionTeleportOpen) if tile then local item = tile:getItemById(1387) if item then item:remove() local totalPlayers = SAFEZONE:totalPlayers() if totalPlayers >= SAFEZONE.minPlayers then Game.broadcastMessage(SAFEZONE.messages.prefix .. SAFEZONE.messages.messageStart:format(totalPlayers), MESSAGE_STATUS_WARNING) SAFEZONE:createProtectionTiles() addEvent(function() if totalPlayers > 0 then Game.broadcastMessage(SAFEZONE.messages.prefix .. SAFEZONE.messages.messageTime, MESSAGE_STATUS_WARNING) SAFEZONE:removePlayers() end end, SAFEZONE.eventTimeTotal * 60 * 1000) else Game.broadcastMessage(SAFEZONE.messages.prefix .. SAFEZONE.messages.messageNoStart, MESSAGE_STATUS_WARNING) SAFEZONE:removePlayers() end else Game.broadcastMessage(SAFEZONE.messages.prefix .. SAFEZONE.messages.messageOpen:format(SAFEZONE.teleportTimeClose), MESSAGE_STATUS_WARNING) addEvent(Game.broadcastMessage, (SAFEZONE.teleportTimeClose - 3) * 60 * 1000, SAFEZONE.messages.prefix .. (SAFEZONE.messages.messageWait):format(SAFEZONE.teleportTimeClose - 2)) addEvent(Game.broadcastMessage, (SAFEZONE.teleportTimeClose - 1) * 60 * 1000, SAFEZONE.messages.prefix .. (SAFEZONE.messages.messageWait):format(SAFEZONE.teleportTimeClose - 4)) local teleport = Game.createItem(1387, 1, SAFEZONE.positionTeleportOpen) if teleport then teleport:setActionId(SAFEZONE.actionId) end addEvent(function() SAFEZONE:teleportCheck() end, SAFEZONE.teleportTimeClose * 60000) end end end function SAFEZONE:removePlayers() for a in pairs(SAFEZONE.players) do local player = Player(a) player:setStorageValue(SAFEZONE.storage, 0) player:teleportTo(player:getTown():getTemplePosition()) player:getPosition():sendMagicEffect(CONST_ME_TELEPORT) end end function SAFEZONE:insertPlayer(playerId) SAFEZONE.players[playerId] = {} end function SAFEZONE:removePlayer(playerId) SAFEZONE.players[playerId] = nil end function SAFEZONE:totalPlayers() local x = 0 for a in pairs(SAFEZONE.players) do x = x + 1 end return x end function SAFEZONE:totalProtectionTile() local totalPlayers = SAFEZONE:totalPlayers() if totalPlayers >= 10 then return totalPlayers - 3 else return totalPlayers - 1 end end function SAFEZONE:createProtectionTiles() local totalPlayers = SAFEZONE:totalPlayers() if SAFEZONE:totalPlayers() == 1 then for a in pairs(SAFEZONE.players) do local player = Player(a) if player:getStorageValue(SAFEZONE.storage) > 0 then player:setStorageValue(SAFEZONE.storage, 0) SAFEZONE.players[a] = nil player:teleportTo(player:getTown():getTemplePosition()) player:getPosition():sendMagicEffect(CONST_ME_TELEPORT) local itemType = ItemType(SAFEZONE.reward[1]) if itemType:getId() ~= 0 then player:sendTextMessage(MESSAGE_EVENT_ADVANCE, SAFEZONE.messages.prefix .. SAFEZONE.messages.messageWinner:format(SAFEZONE.reward[2],itemType:getName())) player:addItem(itemType:getId(), SAFEZONE.reward[2]) end Game.broadcastMessage(SAFEZONE.messages.prefix .. SAFEZONE.messages.messageFinish:format(player:getName()), MESSAGE_STATUS_WARNING) end end elseif totalPlayers >= SAFEZONE.minPlayers then local createTiles, totalTiles = 0, SAFEZONE:totalProtectionTile() local tileX = SAFEZONE.positionEvent.firstTile.x local tileY = SAFEZONE.positionEvent.firstTile.y local tileZ = SAFEZONE.positionEvent.firstTile.z local tilesX = SAFEZONE.positionEvent.tilesX local tilesY = SAFEZONE.positionEvent.tilesY local protectionTileId = SAFEZONE.protectionTileId while createTiles < totalTiles do local randomX = math.random(tileX, tileX + tilesX) local randomY = math.random(tileY, tileY + tilesY) local newPosition = Position({x = randomX, y = randomY, z = tileZ}) local tile = Tile(newPosition) if tile then local item1 = tile:getItemById(protectionTileId[1]) local item2 = tile:getItemById(protectionTileId[2]) local item3 = tile:getItemById(protectionTileId[3]) local item4 = tile:getItemById(protectionTileId[4]) if not item1 and not item2 and not item3 and not item4 then local randomTile = math.random(protectionTileId[1], protectionTileId[4]) local tileProtection = Game.createItem(randomTile, 1, newPosition) if tileProtection then tileProtection:getPosition():sendMagicEffect(CONST_ME_ENERGYHIT) addEvent(function() SAFEZONE:deleteProtectionTiles(newPosition, randomTile) end, 5000) createTiles = createTiles + 1 end end end end addEvent(function() SAFEZONE:effectArea(SAFEZONE.positionEvent.firstTile, SAFEZONE.positionEvent.tilesX, SAFEZONE.positionEvent.tilesY) end, 5000) addEvent(function() SAFEZONE:checkPlayersinProtectionTiles() end, 4000) addEvent(function() SAFEZONE:createProtectionTiles() end, 6000) end end function SAFEZONE:deleteProtectionTiles(position, tileId) local tile = Tile(position) if tile then local item = tile:getItemById(tileId) if item then item:getPosition():sendMagicEffect(CONST_ME_POFF) item:remove() end end end function SAFEZONE:checkPlayersinProtectionTiles() local protectionTileId = SAFEZONE.protectionTileId for a in pairs(SAFEZONE.players) do local player = Player(a) if player:getStorageValue(SAFEZONE.storage) > 0 then local tile = Tile(player:getPosition()) if tile then local item1 = tile:getItemById(protectionTileId[1]) local item2 = tile:getItemById(protectionTileId[2]) local item3 = tile:getItemById(protectionTileId[3]) local item4 = tile:getItemById(protectionTileId[4]) if not item1 and not item2 and not item3 and not item4 then if player:getStorageValue(SAFEZONE.storage) > 1 then player:setStorageValue(SAFEZONE.storage, player:getStorageValue(SAFEZONE.storage) - 1) local lifes = player:getStorageValue(SAFEZONE.storage) player:setStorageValue(SAFEZONE.storage, 0) player:getPosition():sendMagicEffect(CONST_ME_FIREAREA) SAFEZONE.players[player:getId()] = nil local outfit = player:getSex() == 0 and 136 or 128 if lifes == 1 then local lifeColor = SAFEZONE.lifeColor[1] player:setOutfit({lookType = outfit, lookHead = lifeColor, lookBody = lifeColor, lookLegs = lifeColor, lookFeet = lifeColor}) elseif lifes == 2 then local lifeColor = SAFEZONE.lifeColor[2] player:setOutfit({lookType = outfit, lookHead = lifeColor, lookBody = lifeColor, lookLegs = lifeColor, lookFeet = lifeColor}) end player:setStorageValue(SAFEZONE.storage, lifes) else player:setStorageValue(SAFEZONE.storage, 0) player:getPosition():sendMagicEffect(CONST_ME_FIREAREA) player:teleportTo(player:getTown():getTemplePosition()) player:getPosition():sendMagicEffect(CONST_ME_TELEPORT) end end end end end end function SAFEZONE:effectArea(firstTile, tilesX, tilesY) local fromPosition = firstTile local toPositionX = fromPosition.x + tilesX local toPositionY = fromPosition.y + tilesY for x = fromPosition.x, toPositionX do for y = fromPosition.y, toPositionY do local position = Position({x = x, y = y, z = fromPosition.z}) if position then position:sendMagicEffect(CONST_ME_SMALLPLANTS) end end end end Não esqueça de registrar essa lib no lib.lua Agora na pasta movements/scripts crie um arquivo chamado safezone.lua --[[ Evento SafeZone escrito por LuanLuciano93 e Movie (Movie#4361) Otimizado por Movie Disponibilizado para o TibiaKing e não autorizo outras reproduções Mantenha os créditos <3 --]] function onStepIn(creature, item, position, fromPosition) local player = creature:getPlayer() if not player then return true end if player:getGroup():getAccess() then player:teleportTo(SAFEZONE.positionEnterEvent) return true end if player:getLevel() < SAFEZONE.levelMin then player:sendCancelMessage(SAFEZONE.messages.prefix .."Você precisa ser level " .. SAFEZONE.levelMin .. "ou maior para entrar no evento.") player:teleportTo(fromPosition, true) player:getPosition():sendMagicEffect(CONST_ME_POFF) return true end if player:getItemCount(2165) >= 1 then player:sendCancelMessage(SAFEZONE.messages.prefix .."Você não pode entrar com um stealth ring no evento.") player:teleportTo(fromPosition, true) player:getPosition():sendMagicEffect(CONST_ME_POFF) return true end local ring = player:getSlotItem(CONST_SLOT_RING) if ring then if ring:getId() == 2202 then player:sendCancelMessage(SAFEZONE.messages.prefix .." Você não pode entrar no evento com um stealth ring.") player:teleportTo(fromPosition, true) player:getPosition():sendMagicEffect(CONST_ME_POFF) return true end end for a in pairs(SAFEZONE.players) do target = Player(a) if player:getIp() == target:getIp() then player:sendCancelMessage(SAFEZONE.messages.prefix .. "Você já possui um outro player dentro do evento.") player:teleportTo(fromPosition, true) player:getPosition():sendMagicEffect(CONST_ME_POFF) return true end end if SAFEZONE:totalPlayers() >= SAFEZONE.maxPlayers then player:sendCancelMessage(SAFEZONE.messages.prefix .. "O evento já atingiu o número máximo de participantes.") player:teleportTo(fromPosition, true) player:getPosition():sendMagicEffect(CONST_ME_POFF) return true end local outfit = player:getSex() == 0 and 136 or 128 local treeLifeColor = SAFEZONE.lifeColor[3] player:setOutfit({lookType = outfit, lookHead = treeLifeColor, lookBody = treeLifeColor, lookLegs = treeLifeColor, lookFeet = treeLifeColor}) player:sendTextMessage(MESSAGE_INFO_DESCR, SAFEZONE.messages.prefix .."Você entrou no evento. Boa sorte!") player:teleportTo(SAFEZONE.positionEnterEvent) player:getPosition():sendMagicEffect(CONST_ME_TELEPORT) player:setStorageValue(SAFEZONE.storage, 3) SAFEZONE:insertPlayer(player:getId()) return true end <movevent event="StepIn" actionid="6412" script="safezone.lua" /> Agora vá na pasta globalevents/scripts e crie o arquivo safezone.lua function onThink(interval) if SAFEZONE.days[os.date("%A")] then local hrs = tostring(os.date("%X")):sub(1, 5) if isInArray(SAFEZONE.days[os.date("%A")], hrs) then SAFEZONE:teleportCheck() end end return true end <globalevent name="SafeZone" interval="60000" script="safezone.lua" /> No quadrado azul marinho você configura a posição do firstTile = {x = x, y = y, z = z} Em verde, você conta quantos quadrados existem e coloque em tilesX = quantidade Em vermelho, você conta quantos quadrados existem e coloque em tilesY = quantidade De resto, as outras configurações estão bem explícitas. Créditos 30% Movie 69% @luanluciano93 1% @WooX (pela divisória rs)
  8. Isso não vai funcionar, o seu código está para quem usa 1.x, no caso dele é 0.x. A ideia é a mesma que ele fez, mas no 0.x creio que não há o getSpectators, terá que fazer um for para x e outro for para y e pegar os players nesse área.
  9. Sistema muito bem feito, obrigado pela contribuição.
  10. Movie postou uma resposta no tópico em Suporte Tibia OTServer
    Faz utilizando uma tabela global, inserindo o last monster que o player atacou. No exiva você só pega a informação da tabela global
  11. Como ele vai identificar em qual posição vai ser criado o item se você não declarar a posição? Tente pensar em outras formas de puxar a posição da tabela.
  12. Nas versões antigas não existe a função Position(), adapte. Só falta isso para o seu script funcionar
  13. Para mudar a cor de fontes (letras), deve-se usar o color: NumeroDaCor, e não o background-color. Você pode fazer também direto na página layouts.php, podendo usar <font color="cor"> Texto </font>
  14. Não existe a página worlds
  15. local monstros = {"Monstro1","Monstro2","Monstro3"} function onDeath(monster, corpse, killer, mostDamageKiller, unjustified, mostDamageUnjustified) if isInArray(monstros, monster:getName()) then Game.broadcastMessage("O Jogador "..killer:getName().." matou o Boss " ..monster:getName().. "! ") end return true end
  16. Vocês estão utilizando funções de 0.x em um 1.x. Várias funções não são compatíveis, verifiquem isso.
  17. Pra alterar isso tem que alterar no itens.otb.
  18. https://github.com/Fir3element/3777/ no final da página tem um tutorial.
  19. Movie postou uma resposta no tópico em Websites
    Fala pessoal, beleza? Alguns dias atrás estava procurando um site que seja compatível com o meu servidor que é downgrade (TFS 1.3 para 8.60) e percebi que (segundo minhas pesquisas) não existe nenhum. Portanto, o que eu fiz foi pegar um projeto original que já existia (esse aqui) e fiz um fork para atualizá-lo. Sintam-se à vontade para fazer issues e pull requests, assim melhoraremos o gesior juntos. O link para o repositório é esse: https://github.com/moviebr/TheRealGesiorFerobra Créditos: Gesior.pl Ricardo Souza (Vulgo Ricardin PHP) Marco Oliveira Movie (eu) e alguns outros desenvolvedores. Lembrando que para o site funcionar 100% é necessário fazer a instalação conforme o readme.
  20. local tempo = 5 -- Em segundos function onStepIn(cid, item, position, fromPosition) local n, g = getCreatureName(cid), getPlayerGuildName(cid) if getPlayerGuildId(cid) == 0 then doPlayerSendCancel(cid, "[Castle24Hrs] Apenas jogadores com guild e acima de level 100 podem entrar nessa zona.") doTeleportThing(cid, fromPosition, false) return true end if getPlayerStorageValue(cid, 9952) > os.time() then setPlayerStorageValue(cid, 9952, (os.time() + tempo * 1000)) broadcastMessage(n .." Está invadindo o [Castle24Hrs] para a guild [" .. g .. "].", MESSAGE_STATUS_WARNING) end return true end
  21. Respondi sua dúvida lá no Discord do TK Caso queira dar a solução para os outros só postar aqui.
  22. Tem que alterar em alguns lugares na source para isso ocorrer. Boa sorte para achar alguém que faça isso para você for free.
  23. Hoje estou bonzinho e vou postar mais uma coisa que eu fiz pro otserver que estou desenvolvendo e vou compartilhar com vocês. Você tem aquela nova moeda no seu servidor, mas os NPCs não aceitam ela e tal? Vou te dar a solução nesse tópico. ================================================================================================================ Testado no TFS 1.3 na versão 8.60 ================================================================================================================ Em player.cpp, procure a função Player::updateSaleShopList Troque essa linha if (itemId != ITEM_GOLD_COIN && itemId != ITEM_PLATINUM_COIN && itemId != ITEM_CRYSTAL_COIN) { por essa if (itemId != ITEM_GOLD_COIN && itemId != ITEM_PLATINUM_COIN && itemId != ITEM_CRYSTAL_COIN && itemId != ITEM_GOLD_INGOT) { ================================================================================================================ Em const.h, procure por ITEM_CRYSTAL_COIN = 2160 Abaixo dela, adicione isso ITEM_GOLD_INGOT = 9971, Sendo que o 9971 é o ID do item que gostariamos que seja a nova moeda. ================================================================================================================ Em item.cpp, procure pela função uint32_t Item::getWorth() const Troque ela toda por isso uint32_t Item::getWorth() const { switch (id) { case ITEM_GOLD_COIN: return count; case ITEM_PLATINUM_COIN: return count * 100; case ITEM_CRYSTAL_COIN: return count * 10000; case ITEM_GOLD_INGOT: return count * 1000000; default: return 0; } } ================================================================================================================ Em luascript.cpp, procure por registerEnum(ITEM_CRYSTAL_COIN) Abaixo disso, coloque isso registerEnum(ITEM_GOLD_INGOT) ================================================================================================================ Agora em actions/script/changegold.lua, troque por isso local config = { [ITEM_GOLD_COIN] = {changeTo = ITEM_PLATINUM_COIN}, [ITEM_PLATINUM_COIN] = {changeBack = ITEM_GOLD_COIN, changeTo = ITEM_CRYSTAL_COIN}, [ITEM_CRYSTAL_COIN] = {changeBack = ITEM_PLATINUM_COIN, changeTo = ITEM_GOLD_INGOT}, [ITEM_GOLD_INGOT] = {changeBack = ITEM_CRYSTAL_COIN} } function onUse(player, item, fromPosition, target, toPosition, isHotkey) local coin = config[item:getId()] if coin.changeTo and item.type == 100 then item:remove() player:addItem(coin.changeTo, 1) player:say("$$$", TALKTYPE_MONSTER_SAY, true) elseif coin.changeBack then item:remove(1) player:addItem(coin.changeBack, 100) player:say("$$$", TALKTYPE_MONSTER_SAY, true) else return false end return true end ================================================================================================================ É isso por hoje. ================================================================================================================
  24. Ah é simples de arrumar, caso o @L3K0T não arrume, eu arrumo pra você.
  25. Tenho que estudar um pouco mais pra te informar, mas acho que seria necessário alterar as sources.

Informação Importante

Confirmação de Termo