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.
Bom, por hoje é só pessoal, espero que gostem.
Abraços