Postado Julho 19, 2020 4 anos Bom galera aí vai minha duvida: Utilizo atualmente um TFS 0.4 e implantei o AUTO LOOT recentemente. Fiz diversas modificações e agora esse sistema me atende. Porem, há um problema - Ele assim como outros do mercado, trabalha com essa função onDeath: Citar function onDeath(cid, corpse, deathList) local killer,pos = deathList[1],getCreaturePosition(cid) addEvent(loot,1,killer,pos) return true end Isso faz com que o jogador a dar o ultimo hit na criatura fique com o loot da lista, mesmo que nao seja o "dono do corpo morto" ou corpseOwner. Obviamente nem preciso dizer que isso esta errado e vai gerar muitos problemas no meu servidor. A questao é: existe alguma função no TFS 0.4 que verifica o dono do corpo morto para eu implantar uma regra nessa função? Ou entao que diga o jogador que deu mais dano e apenas ele possa "lootear"?! Aguardo amigos.@WooX
Postado Julho 19, 2020 4 anos @Guizek69 do mesmo jeito q existe a função do cara não poder abrir o corpo de um bixo q ele n matou vc deve poder implementar isso no script tb, eu lembro q tinha visto aqui no tibiaking um post de um cara ensinando como ver todas as funcoes do seu tfs, mas enfim, provavelmente nas suas sources deve ter algo relacionado a owner, vc vai ter q transformar isso em função lua (caso já não exista) e dai adicionar no seu script, tipo um if not isOwner(cid) then return false end Se eu te ajudei e você também quer me ajudar, faça uma doação Tfs 0.4 - Click up Tfs 0.4 - Countdown horário dos próximos eventos Tfs 0.4 - Spell que cancela o target do inimigo
Postado Julho 19, 2020 4 anos Autor Na source, a função em actions.cpp é essa: Citar Line 523: if(container->getCorpseOwner() && !player->canOpenCorpse(container->getCorpseOwner()) Line 523: if(container->getCorpseOwner() && !player->canOpenCorpse(container->getCorpseOwner()) Line 524: && g_config.getBool(ConfigManager::CHECK_CORPSE_OWNER)) Line 525: return RET_YOUARENOTTHEOWNER; Line 599: creatureId) || action->hasOwnErrorHandler()); Encontrei uma função lua para TFS 1.2 feita pelo @luanluciano93: Citar local corpse = Tile(target:getPosition()):getTopDownItem() if not corpse or not corpse:isContainer() then return false end if corpse:getType():isCorpse() and corpse:getAttribute(ITEM_ATTRIBUTE_CORPSEOWNER) == player:getId() then return true end Vou tentar converter para TFS 0.4. Se alguem puder ajudar, eu agradeço.
Postado Julho 19, 2020 4 anos @Guizek69 n sei nada de tfs 1.x mas acho que eh convertível sim, vc provavelmente já tentou mas ainda assim vale apontar, tenta colocar esse getCorpseOwner() no seu script e ve se resolve Se eu te ajudei e você também quer me ajudar, faça uma doação Tfs 0.4 - Click up Tfs 0.4 - Countdown horário dos próximos eventos Tfs 0.4 - Spell que cancela o target do inimigo
Postado Julho 19, 2020 4 anos Se você quer trabalhar somente com o player que pegou o loot você pode utilizar a função da seguinte forma: function onDeath(cid, corpse, lastHitKiller, mostDamageKiller) local killer = lastHitKiller[1] --- a atribuição em uma variável do player que pegou o frag é totalmente opcional. Dai caso queira realizar alguma ação em cima desse player pode fazer da seguinte forma: if isPlayer(killer) then --- Não lembro ao certo se tem monstros entram na lista (lastHitKiller) então só por precaução eu recomendaria fazer uma checagem se quem fragou é 1 player. doPlayerAddItem(killer, 13981, 1) end
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.