nociam 90 Postado Setembro 7, 2015 Share Postado Setembro 7, 2015 no meu servidor com o seu exemplo nao funcionou servidor 0.3.6. Link para o comentário https://xtibia.com/forum/topic/236635-ontarget-tamb%C3%A9m-executado-por-monstros/page/2/#findComment-1667812 Compartilhar em outros sites More sharing options...
zipter98 1102 Postado Setembro 7, 2015 Autor Share Postado Setembro 7, 2015 Com o exemplo corrigido não funcionou? Você instalou tudo corretamente? O jogador por acaso está usando um summon? Tudo está funcionando como deve, inclusive testei a modificação na mesma versão da sua distro. Link para o comentário https://xtibia.com/forum/topic/236635-ontarget-tamb%C3%A9m-executado-por-monstros/page/2/#findComment-1667814 Compartilhar em outros sites More sharing options...
nociam 90 Postado Setembro 7, 2015 Share Postado Setembro 7, 2015 (editado) Um eu tenho uma alteração feita pelo slicer acho que e mesma coisa so que faltava a parte do void MonsterdoAttacking(uint32_t interval) pra alterar se pode me dizer se posso deixar desse modo a parte do bool Monster::selectTarget(Creature* creature) ou deixo do seu jeito? modo slicer bool Monster::selectTarget(Creature* creature){#ifdef __DEBUG__std::cout << "Selecting target... " << std::endl;#endifif(!isTarget(creature))return false;CreatureList::iterator it = std::find(targetList.begin(), targetList.end(), creature);if(it == targetList.end()){//Target not found in our target list.#ifdef __DEBUG__std::cout << "Target not found in targetList." << std::endl;#endifreturn false;}if((isHostile() || isSummon()) && setAttackedCreature(creature) && !isSummon())Dispatcher::getInstance().addTask(createTask(boost::bind(&Game::checkCreatureAttack, &g_game, getID())));CreatureEventList targetEvents = getCreatureEvents(CREATURE_EVENT_TARGET);//edited onTargetbool deny = false;for(CreatureEventList::iterator it = targetEvents.begin(); it != targetEvents.end(); ++it){if(!(*it)->executeTarget(this, creature))deny = true;}if(deny)return false;return setFollowCreature(creature, true);} modo seu bool Monster::selectTarget(Creature* creature){#ifdef __DEBUG__std::cout << "Selecting target... " << std::endl;#endifif(!isTarget(creature))return false;CreatureList::iterator it = std::find(targetList.begin(), targetList.end(), creature);if(it == targetList.end()){//Target not found in our target list.#ifdef __DEBUG__std::cout << "Target not found in targetList." << std::endl;#endifreturn false;}CreatureEventList targetEvents = getCreatureEvents(CREATURE_EVENT_TARGET);for(CreatureEventList::iterator it = targetEvents.begin(); it != targetEvents.end(); ++it){if(!(*it)->executeTarget(this, creature))return false;}if((isHostile() || isSummon()) && setAttackedCreature(creature) && !isSummon())Dispatcher::getInstance().addTask(createTask(boost::bind(&Game::checkCreatureAttack, &g_game, getID())));return setFollowCreature(creature, true);} EDIT:Achei um erro fatal no qual da crash no servidor, e quanto os monster(tinha 2) estão atacando e vc seta a storage na hora dos ataques ai cai o servidor. Editado Setembro 8, 2015 por nociam Link para o comentário https://xtibia.com/forum/topic/236635-ontarget-tamb%C3%A9m-executado-por-monstros/page/2/#findComment-1667830 Compartilhar em outros sites More sharing options...
zipter98 1102 Postado Setembro 8, 2015 Autor Share Postado Setembro 8, 2015 Minha alteração é basicamente a mesma do Slicer. A única diferença é que, na minha versão, eu retorno falso antes da dele. Link para o comentário https://xtibia.com/forum/topic/236635-ontarget-tamb%C3%A9m-executado-por-monstros/page/2/#findComment-1667842 Compartilhar em outros sites More sharing options...
nociam 90 Postado Setembro 8, 2015 Share Postado Setembro 8, 2015 Minha alteração é basicamente a mesma do Slicer. A única diferença é que, na minha versão, eu retorno falso antes da dele. e sobre esse erro tipo tem um monstro me atacando ai eu usei uma food de proteçao que me ta tal storage pro monstro nao me atacar ai o servidor cai? Link para o comentário https://xtibia.com/forum/topic/236635-ontarget-tamb%C3%A9m-executado-por-monstros/page/2/#findComment-1667850 Compartilhar em outros sites More sharing options...
zipter98 1102 Postado Setembro 8, 2015 Autor Share Postado Setembro 8, 2015 (editado) Apesar de não ser a maneira mais adequada para corrigir esse erro, é o que pude pensar no momento. Na parte em que a storage é alterada no código da food de proteção: local name = "monster_name" --Nome do monstro. function Substitute(cid) for _, pid in pairs(getSpectators(getThingPos(cid), 8, 8)) do if isMonster(pid) and getCreatureName(pid) == name then local healthNow, posNow = getCreatureHealth(pid), getThingPos(pid) doRemoveCreature(pid) local newMonster = doCreateMonster(name, posNow) doCreatureAddHealth(newMonster, -(getCreatureMaxHealth(newMonster) - healthNow)) end end end setPlayerStorageValue(cid, key, -1) Substitute(cid) Editado Setembro 8, 2015 por zipter98 Link para o comentário https://xtibia.com/forum/topic/236635-ontarget-tamb%C3%A9m-executado-por-monstros/page/2/#findComment-1667855 Compartilhar em outros sites More sharing options...
nociam 90 Postado Setembro 8, 2015 Share Postado Setembro 8, 2015 tipo tem o mosntro A e B e C me atacando ai eu uso a food em min já era, tipo nem testei mais o jeito e setar a storage sem estar em combate mesmo. Link para o comentário https://xtibia.com/forum/topic/236635-ontarget-tamb%C3%A9m-executado-por-monstros/page/2/#findComment-1667858 Compartilhar em outros sites More sharing options...
zipter98 1102 Postado Setembro 8, 2015 Autor Share Postado Setembro 8, 2015 Usando a correção que postei, o servidor não caiu e os monstros não me atacaram mais. Mas, se preferir, você pode fazer o que disse e fazer com que o item só possa ser usado fora de combate. Link para o comentário https://xtibia.com/forum/topic/236635-ontarget-tamb%C3%A9m-executado-por-monstros/page/2/#findComment-1667860 Compartilhar em outros sites More sharing options...
Xtudomuito 2 Postado Setembro 9, 2015 Share Postado Setembro 9, 2015 Amigo vc poderia testa com o script do ptdg. Estou usando ele e está dando esse erro. Quando tem o dois monster com msm nome atacando eu, quando mato um fecha Server. Poderia testa o do nosso amigo ae. Link para o comentário https://xtibia.com/forum/topic/236635-ontarget-tamb%C3%A9m-executado-por-monstros/page/2/#findComment-1667990 Compartilhar em outros sites More sharing options...
zipter98 1102 Postado Setembro 9, 2015 Autor Share Postado Setembro 9, 2015 Por favor, teste outro script e veja se o mesmo erro acontece. O código do ptdg está funcionando perfeitamente, pelo menos aqui. Link para o comentário https://xtibia.com/forum/topic/236635-ontarget-tamb%C3%A9m-executado-por-monstros/page/2/#findComment-1667994 Compartilhar em outros sites More sharing options...
notle2012 233 Postado Setembro 9, 2015 Share Postado Setembro 9, 2015 muito bom rep+ Link para o comentário https://xtibia.com/forum/topic/236635-ontarget-tamb%C3%A9m-executado-por-monstros/page/2/#findComment-1668044 Compartilhar em outros sites More sharing options...
ManoTobira 2 Postado Setembro 12, 2015 Share Postado Setembro 12, 2015 testei todos e continua a mesma coisa se tiver 2 monsters iguais o da script no caso o mizuki quando mata 1 e a storage muda o server cai Link para o comentário https://xtibia.com/forum/topic/236635-ontarget-tamb%C3%A9m-executado-por-monstros/page/2/#findComment-1668501 Compartilhar em outros sites More sharing options...
zipter98 1102 Postado Setembro 13, 2015 Autor Share Postado Setembro 13, 2015 (editado) Se a storage for alterada durante o "processo", o servidor cai. Para evitar isso, vejam a correção que enviei alguns comentários acima para o nociam. Troque a linha responsável pela modificação na storage por este código: local name = "monster_name" --Nome do monstro. function Substitute(cid) for _, pid in pairs(getSpectators(getThingPos(cid), 8, 8)) do if isMonster(pid) and getCreatureName(pid) == name then local healthNow, posNow = getCreatureHealth(pid), getThingPos(pid) doRemoveCreature(pid) local newMonster = doCreateMonster(name, posNow) doCreatureAddHealth(newMonster, -(getCreatureMaxHealth(newMonster) - healthNow)) end end end setPlayerStorageValue(cid, storage, valor) Substitute(cid) Editado Setembro 13, 2015 por zipter98 Link para o comentário https://xtibia.com/forum/topic/236635-ontarget-tamb%C3%A9m-executado-por-monstros/page/2/#findComment-1668649 Compartilhar em outros sites More sharing options...
ManoTobira 2 Postado Outubro 2, 2015 Share Postado Outubro 2, 2015 agr o problema é outro se 2 players tive matando o bixo junto e o bixo morre só muda a storage de 1 deles precisava mudar dos 2 Link para o comentário https://xtibia.com/forum/topic/236635-ontarget-tamb%C3%A9m-executado-por-monstros/page/2/#findComment-1670855 Compartilhar em outros sites More sharing options...
Xtudomuito 2 Postado Fevereiro 3, 2016 Share Postado Fevereiro 3, 2016 agr o problema é outro se 2 players tive matando o bixo junto e o bixo morre só muda a storage de 1 deles precisava mudar dos 2 tem como fazer isso zipter, o meu está do msm jeito. Link para o comentário https://xtibia.com/forum/topic/236635-ontarget-tamb%C3%A9m-executado-por-monstros/page/2/#findComment-1684604 Compartilhar em outros sites More sharing options...
Posts Recomendados