
Tudo que Movie postou
- [CreatureScript] Sugestão de balanceamento
-
[TFS 1.X] Dodge & Critical System
Dentro da pasta lib, abra o arquivo lib.lua. No final de tudo adicione -- Dodge e Critical dofile('data/lib/dodgeCritical.lua')
-
[TFS 1.X] Dodge & Critical System
[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í
-
Erro: Argument is unsafe, como resolver?
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
-
Erro: Argument is unsafe, como resolver?
Você tá usando tfs 1.x?
-
Erro: Argument is unsafe, como resolver?
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)
-
[SafeZone] Evento by Movie & LuanLuciano
[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)
-
(Resolvido)Setar storage para todos em uma determinada área
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.
- Cave Exclusiva [SUPER UP] by WooX
-
Script exiva
Faz utilizando uma tabela global, inserindo o last monster que o player atacou. No exiva você só pega a informação da tabela global
-
(Resolvido)GlobalEvent criar item no mapa
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.
-
(Resolvido)GlobalEvent criar item no mapa
Nas versões antigas não existe a função Position(), adapte. Só falta isso para o seu script funcionar
- Mudando a cor das letras do Gesior
-
(Resolvido)Critical erro gesior
Não existe a página worlds
-
Anunciar quem Matou um Monstro
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
-
(Resolvido)[Pedido][ tfs 1.3] Anunciar para todos um boss que morreu e quem matou
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.
-
(Resolvido)Baú de quest pode ser movido
Pra alterar isso tem que alterar no itens.otb.
-
Ensinando como compilar TFS 0.4 [COM IMAGENS]
-
Gesior Ferobra - Open Source
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.
-
(Resolvido)[Ajuda] Script de invasores não avisa
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
-
(Resolvido)[Ajuda] Script de invasores não avisa
Respondi sua dúvida lá no Discord do TK Caso queira dar a solução para os outros só postar aqui.
-
[Ajuda] Como aumentar o numero de itens no mesmo slot
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.
-
[TFS 1.X] Nova moeda, funcionando com NPCs
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. ================================================================================================================
-
Como eu deixo o /closeserver open de tutores à gods
Ah é simples de arrumar, caso o @L3K0T não arrume, eu arrumo pra você.
-
Como eu deixo o /closeserver open de tutores à gods
Tenho que estudar um pouco mais pra te informar, mas acho que seria necessário alterar as sources.