KI

[c++] passive system

Por Kilowog, 10 de jun. de 2016 em Linguagens de Programação

tfs 0.4
147
18.2k
KilowogK
10 de junho de 2016 às 13:49

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.

Editado Junho 10 por Kilowog

kttallanK
10 de junho de 2016 às 13:54

Parabéns obrigado pela contribuição. 

Rep+

DeadpoolD
10 de junho de 2016 às 13:57

Muito bom, como funciona? (existem alguns no forum, porém, não funciona como todos gostariam, haha).

Muito Bom ^^

AdministradorA
10 de junho de 2016 às 14:00

Uma adaptação necessária, visto que há muitos servidores poketibia 0.4. Reputado.

boxxer321B
10 de junho de 2016 às 14:17

funciona em 0.3.6?

KilowogK
10 de junho de 2016 às 14:23
21 minutos atrás, Deadpool disse:

Muito bom, como funciona? (existem alguns no forum, porém, não funciona como todos gostariam, haha).

Muito Bom ^^

 

O monstro com a tag passive=0 vai ficar andando sem atacar ninguem, só vai atacar quando o player ou um sumon do player (pokemon) bater nele. Caso este player que atacou fuja ele não irá atacar os outros players, apenas o player que o atacou.

KilowogK
10 de junho de 2016 às 14:52
35 minutos atrás, boxxer321 disse:

funciona em 0.3.6?

Tem que adaptar amigo, mas acho que pouca coisa. Visto que é bastante parecido com 0.4, talvez funcione. Teste e poste o resultado.

JosegvbJ
10 de junho de 2016 às 14:58

nao existem varias funçoes nas sources do 3.0.6 :/ nemhuma dessas estao la 

if(readXMLString(tmpNode, "hostile", strValue))						mType->isHostile = booleanString(strValue);
	canPushItems = canPushCreatures = isSummonable = isIllusionable = isConvinceable = isLureable = isWalkable = hideName = hideHealth = false;
bool isSummonable, isIllusionable, isConvinceable, isAttackable, isHostile, isLureable,			isWalkable, canPushItems, canPushCreatures, pushable, hideName, hideHealth;

 

StyloMaldosoS
10 de junho de 2016 às 15:01

Seria bom adapta pra 0.3.6, a maioria de servidores poketibia é nessa versão, aí todo mundo sairia de vez do pda porque era uns dos sistemas mais "raro" do pda, abraços! 

KilowogK
10 de junho de 2016 às 15:02
4 minutos atrás, Josegvb disse:

nao existem varias funçoes nas sources do 3.0.6 :/ nemhuma dessas estao la 

if(readXMLString(tmpNode, "hostile", strValue))						mType->isHostile = booleanString(strValue);
	canPushItems = canPushCreatures = isSummonable = isIllusionable = isConvinceable = isLureable = isWalkable = hideName = hideHealth = false;
bool isSummonable, isIllusionable, isConvinceable, isAttackable, isHostile, isLureable,			isWalkable, canPushItems, canPushCreatures, pushable, hideName, hideHealth;

 

Tem facil a base para download?

JosegvbJ
10 de junho de 2016 às 15:05
32 minutes ago, Kilowog said:

Tem facil a base para download?

 

sim amigo, se vc nao ouviu ainda ta bem atrassado haha nessa semana veio 1 novo servidor no xtibia q ta movimentando muito a comunidade

é esse la 

 

 

se tiver como adatar vai ajudar mts ^^ somos mts quems estamos querendo ajudar nesse novo servidor 

KilowogK
10 de junho de 2016 às 15:06

Ah, baixei ele, mas não cheguei a ver a source. É que tou em um projeto e é 0.4 =): Quando Chegar em casa eu olho direitinho e posto se conseguir.

JosegvbJ
10 de junho de 2016 às 15:13
37 minutes ago, Kilowog said:

Ah, baixei ele, mas não cheguei a ver a source. É que tou em um projeto e é 0.4 =): Quando Chegar em casa eu olho direitinho e posto se conseguir.

 

obrigado estarei acompanhando os topicos qlqr coisa avisa 

KilowogK
10 de junho de 2016 às 15:32

Eu não testei, mas olhei o fonte do DarkXPoke e tudo que postei aqui, tem lá. As vezes o buscador do devcpp que é meio bugado, em vez de procurar pelo texto todo, busquem por parte dele. Uma dica procurem pela palavra "hostile".

Editado Junho 10 por Kilowog

JosegvbJ
10 de junho de 2016 às 15:39
34 minutes ago, Kilowog said:

Eu não testei, mas olhei o fonte do DarkXPoke e tudo que postei aqui, tem lá. As vezes o buscador do devcpp que é meio bugado, em vez de procurar pelo texto todo, busquem por parte dele. Uma dica, sempre buscam a palavra "hostile".

 

 

la tem

		bool isHostile() const {             std::string value;             if(getStorage(504, value) && value == "-1")				 value = "0";                         return value == "0" ? false : true;        }

retirei e coloquei 

        bool isHostile() const {return mType->isHostile;}  

        bool isPassive() const {return mType->isPassive;} 

 

mas o problema começa aqui

 

2 hours ago, Kilowog said:

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);

 

nao existe nemhum desses la pelo menos na versao 2 da source q é a que estou usando

tem 1 tag la q diz

    if((isHostile() || isSummon()) && setAttackedCreature(creature) && !isSummon())

mas nao veio parescido algum com o bool isSummonable, isIllusionable, isConvinceable, isAttackable, isHostile, isLureable,

            isWalkable, canPushItems, canPushCreatures, pushable, hideName, hideHealth;

 

=/