Boa tarde,
O passive system nada mais é do sistema que ficou famoso no mundo do "poketibia", onde o monstro não ataca a menos que o ataquem. Este código foi criado para tfs 1.x, porém adaptei para o tfs 0.4, segue:
luascript.cpp
procure por:
setFieldBool(L, "hostile", mType->isHostile);
e abaixo adicione:
setFieldBool(L, "passive", mType->isPassive);
monster.h
procure por:
bool isHostile() const {return mType->isHostile;}
e adicione:
bool isPassive() const {return mType->isPassive;}
monster.cpp
procure por:
bool MonsterselectTarget(Creature* creature)
e embaixo de:
if(!isTarget(creature)) return false;
adicione:
if (isPassive() && !hasBeenAttacked(creature->getID())) { return false; }
monsters.h
troque isso:
bool isSummonable, isIllusionable, isConvinceable, isAttackable, isHostile, isLureable, isWalkable, canPushItems, canPushCreatures, pushable, hideName, hideHealth;
por isto:
bool isSummonable, isIllusionable, isConvinceable, isAttackable, isHostile, isPassive, isLureable, isWalkable, canPushItems, canPushCreatures, pushable, hideName, hideHealth;
monsters.cpp
troque isso:
canPushItems = canPushCreatures = isSummonable = isIllusionable = isConvinceable = isLureable = isWalkable = hideName = hideHealth = false;
por isto:
canPushItems = canPushCreatures = isSummonable = isIllusionable = isConvinceable = isLureable = isWalkable = hideName = hideHealth = isPassive = false;
procure por:
if(readXMLString(tmpNode, "hostile", strValue)) mType->isHostile = booleanString(strValue);
e adicione:
if(readXMLString(tmpNode, "passive", strValue)) mType->isPassive = booleanString(strValue);
Pronto, agora é só compilar a source e ser feliz.
Ah, antes que eu esqueça. No xml do monstro desejado tem que adicionar:
<flag passive="1" />
Por último, porém não menos importante. Segue o link do código fonte em tfs 1.x: https://gist.github.com/ranisalt/a238128104b7af3a17f1
Que é do também brasileiro Ranieri Althoff , então créditos para ele.