Instalando e Fixando Hateffect

O que é hateffect? a gravity para não ocupar slot visual que já estava 100% ocupado, então decidiu criar o hateffect possivel chama-lo através de um simples script e ele ficará permanente, ótimo para auras, efeitos que tem o intuito de ficarem em loop infinitos.

Instalando um hateffect é muito simples, primeiro precisamos remover algumas restrições

(essa alteração é necessária apenas 1 única vez)
Abra seu emulador rathena e procure src/map/script.cpp e procure por:

BUILDIN_FUNC(hateffect){

e comente as linhas:

if( effectID <= HAT_EF_MIN || effectID >= HAT_EF_MAX ){
ShowError( "buildin_hateffect: unsupported hat effect id %d\n", effectID );
return SCRIPT_CMD_FAILURE;
}

e ficará:

apos ter feito isso abra o script.hpp e procure por:

EF_SPRITEMABLE,
EF_TUNAPARTY,
EF_MAX
};

enum e_hat_effects {

e adicione:

EF_SPRITEMABLE,
EF_TUNAPARTY,
EF_MAX
 = 9999
};

enum e_hat_effects {

Apos isso você pode compilar seu emulador!

Vamos agora para a parte do client:

Para instalar o hateffect agora removemos a restrição que seria necessário toda vez que adicionar o hateffect também adicionar no script_constant.hpp (mas agora não é mais necessário)

abra o hateffectinfo.lub em data/luafiles514/lua files/hateffectinfo/

e você verá isso:

Aqui vai até o numero 217, ele segue sempre um unico padrão:

* o meu vai até o numero 217 pois tenho vários custons, então provavel que o seu vá ter menos. mas a quantidade não importa, o importante é esta na sequencia certa.

HAT_NOME_DO_EFEITO = numero sequencial,
HAT_NOME = 111,

* Muito importante: o numero não pode ter pulos, tem que ser sequencial, por exemplo:

HAT_EF1 = 110,
HAT_EF2 = 120,


O correto é:

HAT_EF1 = 110,
HAT_EF2 = 111,

Seguindo, vamos criar o HAT_EF_CUSTOM_FROST = 218,

agora vamos ao final do hatEffectTable = { no mesmo arquivo.

Eu usei:

--- Exemplo:
[HatEFID.HAT_EF_CUSTOM_FROST] = { resourceFileName = "custom\exemplo\aura.str", isIgnoreRiding = true, isRenderBeforeCharacter = true, hatEffectPos = -4, hatEffectPosX = 0},


Azul = comentário (--- exemplo:)
Laranja = nome da variavel que escolhemos e o ID( HAT_EF_CUSTOM_FROST)
Amarelo = caminho que será achado o efeito .str ( "custom\exemplo\aura.str" )


* Alguns dos recursos citados a baixo podem funcionar só no hexed 2018+ ou 2020+

IsIgnoreRiding: se for true ao montar um uma montaria ou peco peco o hateffect não irá subir, ele irá ignorar essa ação

isRenderBeforeCharacter: Se for true ao usar o hateffect ele ficará por cima do personagem.

hatEffectPos: Posiciona a ancora Y(cima e baixo) do hateffect
hatEffectPosX: Posiciona a ancora X(esquerda direita) do hateffect

Apos ter feito isso de adicionado no arquivo hateffectinfo.lub vamos adicionar os arquivos na pasta data/texture/effect/custom/exemplo/

Aqui esta meu efeito, apos isso eu vou no jogo e uso um script básico para testa-lo

prontera,155,179,5	script	frost_teste	810,{
end;
	
OnMy:
	input .@number;
	hateffect .@number,true;
	end;
	
OnMy2:
hateffect 218,true;
end;
	
OnInit:
	bindatcmd "efc",strnpcinfo(3)+"::OnMy";
	bindatcmd "ef",strnpcinfo(3)+"::OnMy2";
	
}


Ao usar o @ef eu terei hateffect 218 ativo, se eu usar o @efc terei que por um numero para ativa-lo. (é muito bom para testes)

ingame vamos ver o efeito:

Agora vamos aprender como deixa-lo permanente mesmo usando o /effect

Obs: os hateffects são aparti do @effect 1241+ no meu client, o de vocês podem ser um pouco mais caso tenha mais efeitos nos novos clients;

você pode usar o @effect 1241+ até achar, como eu tenho 218 efeitos eu sei que é o @effect 1459 (1241+218)

Apos saber o numero correto e testa-lo ingame, eu vou em luafiles514/lua files/effecttool e procuro por forcerendereffect.lub

vamos encontrar:


no final do arquivo, adicione:

--- exemplo
1459,
}

Pronto, agora você pode usar /effect e nunca mais desligará.