Histórico de Curtidas
-
Guizek69 recebeu reputação de Vodkart em [Ajuda] função onDeathOlá grande mestre!
Perdoe-me minha ignorancia, mas nao entendi bem sua colocação.
Meu problema não está relacionado a criatura x ou y e sim ao fato do lastHitKiller ficar com o loot da tabela mesmo se desse apenas 1 de dano em determinada criatura.
Sendo assim, ele não seria o dono do corpo morto mas ficaria com o loot "rare" de outro consequentemente.
Isso é resolvido buscando a matriz deathList[2] no onDeath - que certifica de dar o loot ao jogador certo ( o que deu mais dano ).
Ficou 100% perfeito agora.
É o inverso amigo.
O evento ativa em todas as criaturas, exceto as que estao em block list (bosses).
-
Guizek69 recebeu reputação de luanluciano93 em [Ajuda] função onDeathA solução foi MUITO mais simples do que eu pensei, agradeço a ajuda de todos vocês, vocês são fod@!!
Segue enredo:
A função onDeath tem duas matrizes: lastHitKiller e mostDamageKiller.
Quando voce usa deathList[1] aplica-se a matriz lastHitKiller, o jogador que causou o hit kill.
Quando voce usa deathList[2] aplica-se a matriz mostDamageKiller ou seja, o maior causador de dano.
Na onPrepareDeath, mesma regra etc..
Logo minha função ficou assim:
Vale a pena lembrar que voce deve criar verificaçoes basicas como if isPlayer(cid) and isMonster(target).
No meu caso, nao foi necessario porque a verificação é feita num evento "combat" e ele joga os players determinado para o onDeath.
RESOLVIDO.
-
Guizek69 recebeu reputação de Lurk em [Ajuda] função onDeathA solução foi MUITO mais simples do que eu pensei, agradeço a ajuda de todos vocês, vocês são fod@!!
Segue enredo:
A função onDeath tem duas matrizes: lastHitKiller e mostDamageKiller.
Quando voce usa deathList[1] aplica-se a matriz lastHitKiller, o jogador que causou o hit kill.
Quando voce usa deathList[2] aplica-se a matriz mostDamageKiller ou seja, o maior causador de dano.
Na onPrepareDeath, mesma regra etc..
Logo minha função ficou assim:
Vale a pena lembrar que voce deve criar verificaçoes basicas como if isPlayer(cid) and isMonster(target).
No meu caso, nao foi necessario porque a verificação é feita num evento "combat" e ele joga os players determinado para o onDeath.
RESOLVIDO.
-
Guizek69 deu reputação a WooX em [Ajuda] função onDeathA resposta é não, pelo menos não uma função Lua.
Tenta buscar pelo atributo "corpseowner" com a função getItemAttribute, pode ser que funcione.
Eu não me recordo da existência dos parâmetros lastHitKiller e mostDamageKiller, pelo menos não no TFS 0.4. Mas se o callback realmente retornar estes valores, a solução pro problema ta ai, só utilizar o mostDamageKiller que vai retornar quem deu mais dano.
Edit: me lembrei que um conhecido estava passando por este mesmo problema a algum tempo atrás, eu cheguei a postar a solução que ele encontrou em outro tópico, pode dar uma olhada.
-
Guizek69 recebeu reputação de fezeRa em (Resolvido)Usar potion e abrir corpos mortos/puxar ring@WooX agradeço muito a ajuda!
Meus problemas foram solucionados.
Segue enredo para quem tem o mesmo problema para compilar:
Vá ate a pasta de sua source e abra o arquivo Makefile
Procure por:
Substitua por:
Isso resolve o problema da compilação.
Após isso, você terá que adicionar exaustao a cada potion que foi adicionada a função na source.
Vá até a pasta Actions de seu OT.
Abra o script de cada potion adicionada e procure por:
Logo abaixo, adicione:
Sendo:
23006 = storage para exaustar (fica a seu criterio, mas tem que ser o mesmo para todas as potions adicionadas)
0.95 = tempo de exaustao (sempre em segundos! No meu caso, 0.95 milesimos de segundo)
Boa sorte a todos,
-
Guizek69 recebeu reputação de Mecianosz em Push com exhaust com outras actionsNesse caso você teria que ir a fundo e pesquisar o erro apresentado no terminal para ter a certeza do que se trata, mas creio que ja estamos fugindo muito do assunto relacionado ao topico kkk
De qualquer modo, eu nao deixaria meu "between" em 0 mesmo sendo enforced.
Abraços
-
Guizek69 recebeu reputação de Mecianosz em Push com exhaust com outras actionsPrimeira coisa: Eu lhe aconselharia fortemente a não baixar o between no config.lua por que isso vai afetar muitas outras ações no servidor, nao somente as potions.
O recomendado por grande conhecedores do assunto, é que se mantenha actions e exactions entre 1000 e 1200 para evitar dor de cabeça.
Essa mudança é uma porta aberta para nuckers se aproveitaram de alguma brecha e derrubarem seu ot (esgotamento de memoria, por exemplo).
Daí a necessidade de alterar somente na source e para itens especificos.
Referente as storages, é simples: baixe algum editor de xml/lua como o notepad++ e faça uma pesquisa pelo storage desejado na pasta do seu ot.
Ele vai mostrar se aquele storage ou numero já está sendo usado por algum outro script.
-
Guizek69 recebeu reputação de Mecianosz em Push com exhaust com outras actionsEsqueça o config. lua nobre colega.
Vá até a pasta actions e procure pelo script de cada potion adicionada a função na source.
Ao encontrar, procure por:
Logo abiaxo, adicione:
23006 = storage da exhausted que usei (fica a seu criterio, mas tem que ser o mesmo em todas as potions)
0.95 = tempo de exaustao (Sempre em segundos! No meu caso, 0.95 milesimos de segundo)
Boa sorte.
-
Guizek69 recebeu reputação de WooX em Push com exhaust com outras actionsEsqueça o config. lua nobre colega.
Vá até a pasta actions e procure pelo script de cada potion adicionada a função na source.
Ao encontrar, procure por:
Logo abiaxo, adicione:
23006 = storage da exhausted que usei (fica a seu criterio, mas tem que ser o mesmo em todas as potions)
0.95 = tempo de exaustao (Sempre em segundos! No meu caso, 0.95 milesimos de segundo)
Boa sorte.
-
Guizek69 recebeu reputação de WooX em (Resolvido)Usar potion e abrir corpos mortos/puxar ring@WooX agradeço muito a ajuda!
Meus problemas foram solucionados.
Segue enredo para quem tem o mesmo problema para compilar:
Vá ate a pasta de sua source e abra o arquivo Makefile
Procure por:
Substitua por:
Isso resolve o problema da compilação.
Após isso, você terá que adicionar exaustao a cada potion que foi adicionada a função na source.
Vá até a pasta Actions de seu OT.
Abra o script de cada potion adicionada e procure por:
Logo abaixo, adicione:
Sendo:
23006 = storage para exaustar (fica a seu criterio, mas tem que ser o mesmo para todas as potions adicionadas)
0.95 = tempo de exaustao (sempre em segundos! No meu caso, 0.95 milesimos de segundo)
Boa sorte a todos,
-
Guizek69 deu reputação a WooX em (Resolvido)Usar potion e abrir corpos mortos/puxar ringProcure pela função bool Actions::useItemEx e onde estiver assim:
player->setNextActionTask(NULL); player->stopWalk(); player->setNextAction(OTSYS_TIME() + g_config.getNumber(ConfigManager::EX_ACTIONS_DELAY_INTERVAL) - SCHEDULER_MINTICKS); Altere para:
int32_t potions[] = {7620, 7589, 7590}; // IDs potions int16_t potionID = item->getID(); if(std::find(std::begin(potions), std::end(potions), potionID) == std::end(potions)) { player->setNextAction(OTSYS_TIME() + g_config.getNumber(ConfigManager::EX_ACTIONS_DELAY_INTERVAL)); } player->stopWalk();
Lembrando que isso vai retirar o exausted exActions de todas os items adicionados ali, terá que ser adicionado exausted no script lua das poções.