NO

Atk/def/arm Increase

Por Nostradamus, 24 de jun. de 2007 em Linguagens de Programação

tibia
otserv
17
4.5k
NostradamusN
24 de junho de 2007 às 15:10

ATK/DEF/ARM Increase

 

Explicação: No Tibia 8.0 nós temos algumas armas que aumentam a Def (e.g: You see a XXXX. (Atk: YY Def: ZZ + A)

Fiz semelhante, mas a diferença é que ele pode aumentar o ataque ou mesmo a armor.

 

Esse é meu primeiro código em OTServ, não tive recursos de testar, mas acho que está 100%

 

Vamos ao código

 

Items.cpp

 

Em ItemType::ItemType()

 

Adicione:

 

atkbonus = 0;
armbonus = 0;
defbonus = 0;

 

 

Depois de:

 

							else if(strcasecmp(strValue.c_str(), "attack") == 0){
							if(readXMLInteger(itemAttributesNode, "value", intValue)){
								it.attack = intValue;
							}
						}
						else if(strcasecmp(strValue.c_str(), "armor") == 0){
							if(readXMLInteger(itemAttributesNode, "value", intValue)){
								it.armor = intValue;
							}
						}
						else if(strcasecmp(strValue.c_str(), "defense") == 0){
							if(readXMLInteger(itemAttributesNode, "value", intValue)){
								it.defense= intValue;
							}
						}

 

Adicione:

 

							
							  else if(strcasecmp(strValue.c_str(), "atkincrease") == 0){
							if(readXMLInteger(itemAttributesNode, "value", intValue)){
									 it.atkbonus = intValue;
							}
						}
							  else if(strcasecmp(strValue.c_str(), "armincrease") == 0){
							if(readXMLInteger(itemAttributesNode, "value", intValue)){
									 it.armbonus = intValue;
							}
						}
							  else if(strcasecmp(strValue.c_str(), "defincrease") == 0){
							if(readXMLInteger(itemAttributesNode, "value", intValue)){
									 it.defbonus = intValue;
							}
						}

 

Troque:

 

 return baseDefense + (defense * shieldSkill) / 100;

 

Por:

 

	
if(getDefBonus) {
 return getDefBonus() + baseDefense + (defense * shieldSkill) / 100;
 }
else if(getArmBonus) {
  return getArmBonus() + baseDefense + (defense * shieldSkill) / 100;
}
else if(getDefBonus && getArmBonus) {
  return getArmBonus() + getDefBonus() + baseDefense + (defense * shieldSkill) / 100;
}
else {
   return baseDefense + (defense * shieldSkill) / 100;
}

 

 

Items.h

 

Declare esses valores:

 

	int32_t			atkbonus;
int32_t			armbonus;
int32_t			defbonus;

 

 

E depois de:

 

int32_t getAttack() const {return items[id].attack;}
int32_t getArmor() const {return items[id].armor;}
int32_t getDefense() const {return items[id].defence;}

 

Adicione:

 

int32_t getAtkBonus() const {return items[id].atkbonus;}
int32_t getArmBonus() const {return items[id].armbonus;}
int32_t getDefBonus() const {return items[id].defbonus;}

 

 

Troque:

 

				if(getAttack())
				s << article(it.name) << " (Atk:" << (int32_t)getAttack() << " Def:" << (int32_t)getDefense() << ").";
			else
				s << article(it.name) << " (Def:" << (int32_t)getDefense() << ").";
		}
		else if(getArmor())
			s << article(it.name) << " (Arm:" << (int32_t)getArmor() << ").";

 

Por:

 

 

			if(getAttack()) {
				if(getAtkBonus()) {
					s << article(it.name) << " (Atk:" << (int32_t)getAttack() << " + " << (int32_t)getAtkBonus() << " Def:" << (int32_t)getDefense() << ").";
				}
				else if(getDefBonus()) {
					  s << article(it.name) << " (Atk:" << (int32_t)getAttack() << " Def:" << (int32_t)getDefense() << " + " << (int32_t)getDefBonus() << ").";
				}
				else if(getAtkBonus() && getDefBonus()) {
					s << article(it.name) << " (Atk:" << (int32_t)getAttack() << " + " << (int32_t)getAtkBonus() << " Def:" << (int32_t)getDefense() << " + " << (int32_t)getDefBonus() << ").";
				}
				else {
					s << article(it.name) << " (Atk:" << (int32_t)getAttack() << " Def:" << (int32_t)getDefense() << ").";	
				}
		}
		else if(getArmor()) {
			if(getArmBonus()) {
				s << article(it.name) << " (Arm:" << (int32_t)getArmor() << ") +" << (int32_t)getArmBonus();
			}
			else {
				s << article(it.name) << " (Arm:" << (int32_t)getArmor() << ").";
			}
		}
		else {
				if(getDefBonus()) {
					s << article(it.name) << " (Def:" << (int32_t)getDefense() << " + " << (int32_t)getDefBonus() << ").";
				}
				else {	
					s << article(it.name) << " (Def:" << (int32_t)getDefense() << ").";
				}
		}

 

Weapons.cpp

 

Troque:

 

int32_t attackValue = item->getAttack();

 

Por:

	if(item->getAtkBonus())
	int32_t attackValue = item->getAttack() + item->getAtkBonus();
else
	int32_t attackValue = item->getAttack();

 

Para usar é fácil:

 

<attribute key="atkincrease" value="3"/>
<attribute key="defincrease" value="5"/>
<attribute key="armincrease" value="4"/>

 

Basta por isso em algum item no items.xml

Caso não queira por increases, basta deixar sem.

 

 

Código desenvolvido totalmente por mim

Editado Junho 24 por Nostradamus

CaideraC
24 de junho de 2007 às 15:17

Enfu i.i'

Sinistro

 

Agora só precisa fazer um code de quebrar a sword ou algo semelhante... Para que tenha que procurar um blacksmith para consertar ou incrementar =)

24 de junho de 2007 às 15:18

Isso ai é inovador ;b

Quando eu te dei a idéia, não sabia que tu ia fazer :p

Ta muito bom!, não testei ainda,

Mas vou testar!

 

Abraços Nostradamus!

HudeH
24 de junho de 2007 às 15:18

Nostra.

Muito bom, você e seus trabalhos magníficos. Você é muito bom no que faz!

Parabéns!

 

Abraços.

LordfireL
24 de junho de 2007 às 16:20

Magnífico!

Só preciso agora saber o que é declarar valores

Fora isso, código muito bom

NostradamusN
24 de junho de 2007 às 16:45

@Jackson Zani

Eu nem ia pois acho inútil, mas como o Tibia Global fez...

duda123D
24 de junho de 2007 às 22:41

Valeu!!!! Esta muito bom o code... Eu estava precisando de algo parecido... Mas nao tinha nem ideia de como fazer... Agora eh so modificar :) Valeu!

NostradamusN
24 de junho de 2007 às 23:26

Obrigado pelos comentários.

Depois irei fazer um configurável por config.lua

JvchequerJ
25 de junho de 2007 às 05:41

o.O

Realmente muito sinistro \o

 

 

Parabéns pelo CODE nostradamus, está magnífico :]~

 

 

Cya

ExordiumE
25 de junho de 2007 às 14:19

Ia ser esse tipo de code nu seu servidor certo, mas como tibia jah disponibilizou..

belissimo code cara, tu eh fera :D

HugoBeolchiH
28 de junho de 2007 às 17:18

HAhAHa mal o tibia acaba de da o update com sistemas novos e os cara tao ai ja xD

 

vlw mto bom

;)

abraço

tibiaa4eT
01 de julho de 2007 às 00:03

Eita po...

até o nostradamus aprendeu c++ só eu que naum ¬¬

 

Belo code

Tinha um amigo que se matava por esse code

 

O maldito do frerety teve preguissa de fazer ahauaahuauhauhau

Até que sumiu e eu nunca + vi o maldito

NostradamusN
05 de julho de 2007 às 11:02

@tibiaa4e

Eu sempre soube C/C++ (Desde que nos conheçemos)

05 de julho de 2007 às 13:48

Que cabrero :blink:

2 semanas depois...
DeadKennedyD
17 de julho de 2007 às 16:25

po...

to chocadoO

:wacko: :blink: :wacko:

#####, se tem uma ekipe neah???

di ot e etc... se n tiver

 

meu ot vai fik online soh anu que vem, to fazendo o mapa xD

vai ser tipow 24 hrs, 300 play+

ot vai ser o capetaaa

uashaush

i preciso dum cara aew, tipow oc xD

se tiver afim, comunique - me!

 

manerissimo

no more