[TFS 1.2] Criando novos CombatTypes

Skulls
Por Skulls
em Tutoriais de Programação

Skulls

Coordenador de Eventos
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 26/02/07Posts: 859Gênero: Masculino

Bom dia galera, tudo bem?

 

Hoje vou ensinar uma coisinha simples, porém bem útil: criar um novo tipo de combate.

 

Tipos de combate representam o tipo do dano que você está causando naquele momento. Basicamente, eles são os responsáveis pelo efeito básico daquele tipo de combate (além do efeito e o efeito de distância que você pode adicionar) e também pela cor do texto de dano.

 

Bom, vamos lá.

 

1. Criação do novo tipo no Enum

O primeiro passo para a criação do novo tipo de combate é adicionar o referencial ao seu combate novo no enumerador (enum) de tipos de combate (CombatType_t). Para isso, vá até o arquivo de cabeçalho enums.h, procure por "enum CombatType_t" e, após o último enum, coloque o nome que quer dar ao seu tipo de combate. Eu escolhi chamar o meu de COMBAT_CRITICAL, para fazer um dano diferente quando o acerto for crítico. Ficou assim:

enum CombatType_t {	COMBAT_NONE = 0,	COMBAT_PHYSICALDAMAGE = 1 << 0,	COMBAT_ENERGYDAMAGE = 1 << 1,	COMBAT_EARTHDAMAGE = 1 << 2,	COMBAT_FIREDAMAGE = 1 << 3,	COMBAT_UNDEFINEDDAMAGE = 1 << 4,	COMBAT_LIFEDRAIN = 1 << 5,	COMBAT_MANADRAIN = 1 << 6,	COMBAT_HEALING = 1 << 7,	COMBAT_DROWNDAMAGE = 1 << 8,	COMBAT_ICEDAMAGE = 1 << 9,	COMBAT_HOLYDAMAGE = 1 << 10,	COMBAT_DEATHDAMAGE = 1 << 11,	COMBAT_CRITICAL = 1 << 12,	COMBAT_COUNT = 13};

 

2. Adicionar "referências"

Esse passo consiste em criar facilidades para acessar seu tipo de combate em alguns casos. Para isso, vamos até tools.cpp e vamos alterar o vetor combatTypeNames (que cria uma string que referencia o nosso combate) e a função combatTypeToIndex (indexa os combates), adicionando o nosso novo combate ao final de cada um deles de forma coerente. O meu ficou assim:

CombatTypeNames combatTypeNames[] = {	{"physical",		COMBAT_PHYSICALDAMAGE},	{"energy",		COMBAT_ENERGYDAMAGE},	{"earth",		COMBAT_EARTHDAMAGE},	{"fire",		COMBAT_FIREDAMAGE},	{"undefined",		COMBAT_UNDEFINEDDAMAGE},	{"lifedrain",		COMBAT_LIFEDRAIN},	{"manadrain",		COMBAT_MANADRAIN},	{"healing",		COMBAT_HEALING},	{"drown",		COMBAT_DROWNDAMAGE},	{"ice",			COMBAT_ICEDAMAGE},	{"holy",		COMBAT_HOLYDAMAGE},	{"death",		COMBAT_DEATHDAMAGE},	{ "critical",		COMBAT_CRITICAL },};
size_t combatTypeToIndex(CombatType_t combatType){	switch (combatType) {		case COMBAT_PHYSICALDAMAGE:			return 0;		case COMBAT_ENERGYDAMAGE:			return 1;		case COMBAT_EARTHDAMAGE:			return 2;		case COMBAT_FIREDAMAGE:			return 3;		case COMBAT_UNDEFINEDDAMAGE:			return 4;		case COMBAT_LIFEDRAIN:			return 5;		case COMBAT_MANADRAIN:			return 6;		case COMBAT_HEALING:			return 7;		case COMBAT_DROWNDAMAGE:			return 8;		case COMBAT_ICEDAMAGE:			return 9;		case COMBAT_HOLYDAMAGE:			return 10;		case COMBAT_DEATHDAMAGE:			return 11;		case COMBAT_CRITICAL:			return 12;		default:			return 0;	}}

 

3. Definir o efeito e o dano do nosso combate

Agora devemos definir como o nosso combate vai se comportar dizendo a cor do dano gerado e qual efeito associado a ele. Para isso, vamos até a função combatGetTypeInfo dentro de game.cpp. Dentro de switch (combatType), após o último combate e antes do default, vamos adicionar as características do nosso combate. O meu ficou assim:

case COMBAT_CRITICAL: {	color = TEXTCOLOR_MAYABLUE;	effect = CONST_ME_NONE;	break;}

Isto é, meu tipo de combate crítico tem a cor azul maia e nenhum efeito.

 

4. Informar ao LUA seu novo tipo de combate

O último passo é simplesmente enviar para o lua o novo tipo de combate.

Para isso, vá até luascript.cpp e, logo abaixo de:

registerEnum(COMBAT_DEATHDAMAGE)

adicione:

registerEnum(COMBAT_CRITICAL)

 

Pronto, após seguir esses passos o seu novo tipo combate foi criado, referenciado, caracterizado e definido em lua.

Para utilizá-lo basta chamá-lo no lugar certo COMBAT_CRITICAL.

 

ogPduE3.png

 

Bom, por hoje é só pessoal, espero que gostem.
Abraços

Administrador

xTibia 2017
avatar
Administrador
Administrador

INFOS

Grupo: AdministradorRegistrado: 09/07/05Posts: 5780Gênero: Outro

É muito interessante ter alguém disponibilizando materiais desse tipo, são modificações ao meu ver complicadas de fazer. Parabéns @Skulls

DICA

Utilize botão @UP, no início de seu tópico, para atualizar o destaque de seu tópico em "Tópicos Recentes" na index, fará com que mais pessoas o vejam.

 

 

Skulls

Coordenador de Eventos
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 26/02/07Posts: 859Gênero: Masculino
3 hours ago, Daniel said:

É muito interessante ter alguém disponibilizando materiais desse tipo, são modificações ao meu ver complicadas de fazer. Parabéns @Skulls

Nem tanto, porém, bastante úteis!

Obrigado @Daniel.

 

Abraços!

HeelNox

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 08/10/11Posts: 444Gênero: FemininoChar no Tibia: No Have.

Funciona na tfs 1.0 ?

2+2 = 1

Skulls

Coordenador de Eventos
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 26/02/07Posts: 859Gênero: Masculino
On 4/9/2016 at 5:20 PM, HeelNox said:

Funciona na tfs 1.0 ?

Funciona sim, acredito eu.

julyo

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 02/02/12Posts: 11

sirve para tfs 0.3.6?