Monstros Passivos
Muito bom dia, galera.
Sabe, eu estava estudando como funcionam os servidores de pokémons, aqueles que ainda estão começando, embriões de bons servidores, não grandes servidores como o Poke Brasil Online (PokeBro). O problema de todos esses servidores, é que todos são dependentes de sistemas criados pelo brun123 (se não me engano) dentro das sources, ou seja, esses servidores são dependentes do executável compilado do PDA, entre outros.
A pedido de um amigo, eu desenvolvi o sistema de monstros passivos. Sim aquele sistema que dá um upgrade na inteligência artificial das criaturas, onde algumas podem atacar o jogador assim que o ver, outras podem atacar apenas quando for atacadas.
É um sistema muito básico mesmo, eu fiz com C++ e Lua por puro comodismo, e pretendo deixar mais avançado apenas com C++ e uso de flags nos XMLs.
Se você quiser usar, sinta-se a vontade.
No seu arquivo monster.h, procure por:
bool isHostile() {return mType->isHostile;}
Substitua por:
bool isHostile() const { std::string value; if(!getStorage("hostile", value)) return mType->isHostile; return booleanString(value); }
No seu arquivo monster.cpp, procure por:
Monster::selectTarget
Dentro da função, procure por:
if(!isTarget(creature)) return false;
Adicione abaixo:
if(!isHostile()) return false;
No diretório creaturescripts/scripts, crie um novo arquivo com nome passive.lua e adicione:
PASSIVE_BEHAVIOR = {"Deer", "Rabbit"} -- Aqui ficam os monstros que não atacam, mesmo que atacados. function onCombat(cid, target) if isMonster(target) then if not isInArray(PASSIVE_BEHAVIOR, getCreatureName(target)) then doCreatureSetStorage(target, "hostile", 1) end doMonsterSetTarget(target, cid) end return true end
No mesmo diretório, abra o arquivo login.lua e adicione:
registerCreatureEvent(cid, "PassiveSystem")
No diretório creaturescripts/, abra o arquivo creaturescripts.xml e adicione:
<event type="combat" name="PassiveSystem" event="script" value="passive.lua"/>
Agora é só compilar seu servidor, sem a pasta obj, ou seja, dê um Rebuild All e correr pro abraço com seu sistema de monstros passivos.
Abraços,
Oneshot.