zipter98 1102 Postado Setembro 5, 2015 Share Postado Setembro 5, 2015 (editado) Serei breve: com esta pequena modificação, o creatureevent onTarget poderá ser executado por monstros. Nas sources do seu servidor, abra o arquivo monster.cpp e procure por: if(it == targetList.end()) { //Target not found in our target list. #ifdef __DEBUG__ std::cout << "Target not found in targetList." << std::endl; #endif return false; } Abaixo deste bloco de código, coloque: CreatureEventList targetEvents = getCreatureEvents(CREATURE_EVENT_TARGET); for(CreatureEventList::iterator it = targetEvents.begin(); it != targetEvents.end(); ++it) { if(!(*it)->executeTarget(this, creature)) return false; } Depois, no código da função: void Monster::doAttacking(uint32_t interval) Abaixo de: if(!attackedCreature || (isSummon() && attackedCreature == this)) return; coloque: if(Creature* creature = attackedCreature->getCreature()) { CreatureEventList targetEvents = getCreatureEvents(CREATURE_EVENT_TARGET); for(CreatureEventList::iterator it = targetEvents.begin(); it != targetEvents.end(); ++it) { if(!(*it)->executeTarget(this, creature)) { setFollowCreature(NULL); setAttackedCreature(NULL); searchTarget(TARGETSEARCH_NEAREST); break; } } } Exemplo do que pode ser feito com esta alteração: Monstro não atacando jogador com X storagedata/creaturescripts/scripts: local storage = xxx function onTarget(cid, target) if isMonster(cid) and isPlayer(target) and getPlayerStorageValue(target, storage) > -1 then return false end return true end Tag: <event type="target" name="blockTarget" event="script" value="nome_do_arquivo.lua"/> No arquivo .XML do monstro, acima de: </monster> coloque: <script> <event name="blockTarget"/> </script> Editado Setembro 7, 2015 por zipter98 Link para o comentário https://xtibia.com/forum/topic/236635-ontarget-tamb%C3%A9m-executado-por-monstros/ Compartilhar em outros sites More sharing options...
nociam 90 Postado Setembro 6, 2015 Share Postado Setembro 6, 2015 (editado) posso usar pra fazer pra que um monstro ataque apenas certo monstro com tal storage, tb tipo o target fica sempre num monstro? edit erro nessa linha if(Creature* creature = attackedCreature->getCreature() não seria if(Creature* creature = attackedCreature->getCreature()) Editado Setembro 6, 2015 por nociam Link para o comentário https://xtibia.com/forum/topic/236635-ontarget-tamb%C3%A9m-executado-por-monstros/#findComment-1667679 Compartilhar em outros sites More sharing options...
zipter98 1102 Postado Setembro 6, 2015 Autor Share Postado Setembro 6, 2015 (editado) Para fazer isso seriam necessárias outras alterações. Retornando falso você vai impedir com que monstros ataquem summons e/ou players, e retornando verdadeiro a ação será realizada normalmente. E obrigado pela observação. Falta de atenção minha. Editado Setembro 6, 2015 por zipter98 Link para o comentário https://xtibia.com/forum/topic/236635-ontarget-tamb%C3%A9m-executado-por-monstros/#findComment-1667682 Compartilhar em outros sites More sharing options...
Felipe Moraes 151 Postado Setembro 6, 2015 Share Postado Setembro 6, 2015 Muito bom man, obrigado por compartilhar conosco. Certamente é muito útil. Link para o comentário https://xtibia.com/forum/topic/236635-ontarget-tamb%C3%A9m-executado-por-monstros/#findComment-1667685 Compartilhar em outros sites More sharing options...
gonorreiaswat 151 Postado Setembro 6, 2015 Share Postado Setembro 6, 2015 Muito bom @zipter98, pelo visto continuou os estudos em programação hein; Abraços. Link para o comentário https://xtibia.com/forum/topic/236635-ontarget-tamb%C3%A9m-executado-por-monstros/#findComment-1667704 Compartilhar em outros sites More sharing options...
Xtudomuito 2 Postado Setembro 6, 2015 Share Postado Setembro 6, 2015 Obrigado! Tem como deixa o monster parado. Link para o comentário https://xtibia.com/forum/topic/236635-ontarget-tamb%C3%A9m-executado-por-monstros/#findComment-1667709 Compartilhar em outros sites More sharing options...
zipter98 1102 Postado Setembro 6, 2015 Autor Share Postado Setembro 6, 2015 Obrigado pelos comentários, pessoal. @Xtudomuito Basta deixar a speed dele igual a 0 (arquivo .XML do monstro). Link para o comentário https://xtibia.com/forum/topic/236635-ontarget-tamb%C3%A9m-executado-por-monstros/#findComment-1667719 Compartilhar em outros sites More sharing options...
ManoTobira 2 Postado Setembro 6, 2015 Share Postado Setembro 6, 2015 to com um problema que quando eu mato o bixo se tiver mais de 1 da erro e o server para de responde só nao sei se é no meu codigo ou na sources meu codigo: local config = { name = "Mizuki", --nome do monstro storage = 3, --storage id } function onTarget(cid, target) if isMonster(cid) and isPlayer(target) then if getPlayerStorageValue(target, 8000) ~= config.storage then return false end elseif isPlayer(cid) and isMonster(target) then if getCreatureName(target) == config.name and getPlayerStorageValue(cid, 8000) ~= config.storage then return doPlayerSendCancel(cid, "You cannot attack this monster now.") and false end end return true end function onStatsChange(cid, attacker, type, combat, value) if isMonster(attacker) and getCreatureName(attacker) == config.name and isPlayer(cid) then if getPlayerStorageValue(cid, 8000) ~= config.storage then return false end elseif isPlayer(attacker) and isMonster(cid) and type == STATSCHANGE_HEALTHLOSS then if getCreatureName(cid) == config.name and getPlayerStorageValue(attacker, 8000) ~= config.storage then return doPlayerSendCancel(attacker, "You cannot attack this monster now.") and false end end return true end function onKill(cid, target) if isMonster(target) and getCreatureName(target) == config.name and getPlayerStorageValue(cid, 8000) == config.storage then doPlayerAddExperience(cid,6200) setPlayerStorageValue(cid, 8000, config.storage+1) end return true end Link para o comentário https://xtibia.com/forum/topic/236635-ontarget-tamb%C3%A9m-executado-por-monstros/#findComment-1667732 Compartilhar em outros sites More sharing options...
zipter98 1102 Postado Setembro 6, 2015 Autor Share Postado Setembro 6, 2015 (editado) Qual o erro que aparece? Para todo caso, teste aquele código que exemplifiquei no tópico e informe se ele funciona adequadamente no seu servidor ou não. Se funcionar, é problema no código lua. Se não, o erro encontra-se na instalação da modificação nas sources. Editado Setembro 6, 2015 por zipter98 Link para o comentário https://xtibia.com/forum/topic/236635-ontarget-tamb%C3%A9m-executado-por-monstros/#findComment-1667733 Compartilhar em outros sites More sharing options...
Xtudomuito 2 Postado Setembro 6, 2015 Share Postado Setembro 6, 2015 Sim amigo como eu faria pra quando monster ver o player que tem a storage certa ele corre atras. Link para o comentário https://xtibia.com/forum/topic/236635-ontarget-tamb%C3%A9m-executado-por-monstros/#findComment-1667740 Compartilhar em outros sites More sharing options...
zipter98 1102 Postado Setembro 6, 2015 Autor Share Postado Setembro 6, 2015 (editado) data/creaturescripts/scripts: local storage = xxx function onTarget(cid, target) if isMonster(cid) and isPlayer(target) and getPlayerStorageValue(target, storage) > -1 then return true end return false end Tag: <event type="target" name="allowTarget" event="script" value="nome_do_arquivo.lua"/> No arquivo .XML do monstro, acima de: </monster> coloque: <script> <event name="allowTarget"/> </script> Editado Setembro 7, 2015 por zipter98 Link para o comentário https://xtibia.com/forum/topic/236635-ontarget-tamb%C3%A9m-executado-por-monstros/#findComment-1667743 Compartilhar em outros sites More sharing options...
Xtudomuito 2 Postado Setembro 6, 2015 Share Postado Setembro 6, 2015 Então deixa eu ver seu entendi. Eu coloco no monster xml speed 0. Aí eu uso esse seu script quando o monster ver o player ele vai corre atrás do player. Link para o comentário https://xtibia.com/forum/topic/236635-ontarget-tamb%C3%A9m-executado-por-monstros/#findComment-1667744 Compartilhar em outros sites More sharing options...
zipter98 1102 Postado Setembro 6, 2015 Autor Share Postado Setembro 6, 2015 (editado) Se a speed do monstro for igual a 0, ele não irá se mover em ocasião alguma. Logo, para fazer o que você quer, seriam necessárias outras modificações. Em monster.cpp: No código da função: void Monster::onThink(uint32_t interval) Abaixo de: updateIdleStatus(); if(isIdle) return; coloque: if(Creature* creature = static_cast<Creature*>(this)) { if(!attackedCreature && !isSummon() && creature->getNoMove()) creature->setNoMove(true); } Depois, abaixo de: //We just spawned lets look around to see who is there. if(isSummon()) isMasterInRange = canSee(getMaster()->getPosition()); coloque: creature->setNoMove(true); Código lua: local storage = xxx function onTarget(cid, target) if isMonster(cid) and isPlayer(target) and getPlayerStorageValue(target, storage) > -1 then doCreatureSetNoMove(cid, false) return true end return false end Editado Setembro 7, 2015 por zipter98 Link para o comentário https://xtibia.com/forum/topic/236635-ontarget-tamb%C3%A9m-executado-por-monstros/#findComment-1667755 Compartilhar em outros sites More sharing options...
Xtudomuito 2 Postado Setembro 7, 2015 Share Postado Setembro 7, 2015 (editado) Obrigado Amigo! Realmente ocorreu esse erro do amigo ae PTDG quando tem dois monster com a msm storage atacando o player. quando o player mata um. o server fecha. Editado Setembro 7, 2015 por Xtudomuito Link para o comentário https://xtibia.com/forum/topic/236635-ontarget-tamb%C3%A9m-executado-por-monstros/#findComment-1667757 Compartilhar em outros sites More sharing options...
zipter98 1102 Postado Setembro 7, 2015 Autor Share Postado Setembro 7, 2015 Fiz uma pequena correção nos códigos que postei anteriormente. Se possível, atualizem-nos. Realizei inúmeros testes a procura deste erro que vocês encontraram, porém não o enfrentei em ocasião alguma. O servidor não fechou nem nada. Link para o comentário https://xtibia.com/forum/topic/236635-ontarget-tamb%C3%A9m-executado-por-monstros/#findComment-1667800 Compartilhar em outros sites More sharing options...
Posts Recomendados