É muito interessante ter alguém disponibilizando materiais desse tipo, são modificações ao meu ver complicadas de fazer. Parabéns @Skulls
- Fórum
- OTServ
- Tutoriais
- Tutoriais de Programação
- [TFS 1.2] Criando novos CombatTypes
6
5.3k
info
Grupo: Administrador
Registrado: 08/07/05
Posts: 5.8k
Reputação: +1.4k
Gênero: Outro

07 de abril de 2016 às 09:10
info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino

info
Grupo: Visconde
Registrado: 08/10/11
Posts: 444
Reputação: +71
Gênero: Feminino
Char no Tibia: No Have.

09 de abril de 2016 às 17:20
Funciona na tfs 1.0 ?
info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gênero: Masculino

15 de abril de 2016 às 10:15
On 4/9/2016 at 5:20 PM, HeelNox said:Funciona na tfs 1.0 ?
Funciona sim, acredito eu.
3 anos depois...




info
Grupo: Herói
Registrado: 25/02/07
Posts: 859
Reputação: +331
Gê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.
Bom, por hoje é só pessoal, espero que gostem.
Abraços