Fala galera, tudo certo?
Então, a um tempo atras, criei um tópico aqui no fórum pedindo uma ajuda sobre como alterar algumas coisas dentro de um servidor de poketibia, porém, não encontrei a resposta.
[Duvida] Cores de mensagem
Depois de um longo tempo procurando as informações dentro da source do cliente, consegui finalmente resolver o meu problema e me senti com uma divida no fórum, graças ao @Brunds que mesmo não resolvendo o meu problema, estava respondendo as minhas mensagens. Com isso venho compartilhar a minha solução.
Servidor utilizado para base: [DxP] Exclusivo Poketibia OpenSource+Cliente+Site+DB
Musica utilizada: Tech N9ne - Come Gangsta (Izzamuzzic Remix)
Tutorial Como alterar a cor do texto
Antes de encontrar a solução, tentei criar um novo tipo de talktype, estava conseguindo, o servidor estava enviando as mensagens corretamente, mas o problema estava no cliente, então mudei a estrategia e tentei usar o que já estava funcionando, lembrei que atualmente existe dois tipo de monster talktype:
data/lib/000-constant.lua
TALKTYPE_MONSTER = 19
TALKTYPE_MONSTER_YELL = 20
O talktype 19 é usado normalmente para os monstros "falarem" e o outro valor não estava sendo usando, pensando nisso peguei esse valor para a minha função de texto.
Obs.: Não vou ensinar como compilar o cliente - Compilando OTC - CodeBlocks - Windows - Vídeo Aula
Primeiro passo
Alterei a linha 142
otclient/source/client/statictext.cpp
} else if(m_mode == Otc::MessageMonsterSay || m_mode == Otc::MessageSpell || m_mode == Otc::MessageBarkLow || m_mode == Otc::MessageBarkLoud) {
m_color = Color(254, 101, 0);
} else if(m_mode == Otc::MessageMonsterYell ){
m_color = Color(255,165,0);
}
Com isso, estou definindo em m_color que, quando o valor de m_mode for igual a MessageMonsterYell, m_color receba a cor especificada em RGB. Alterando isso eu já consigo modificar a cor, porem, ainda não tem um limite de mensagens que aparecem quando o player "fala", continue pesquisando e encontrei uma "meia" solução, adaptei e consegui o resultado que eu estava buscando.
Dentro do mesmo arquivo.
Alterei a linha 74
else if(m_name != name || m_mode != mode) {
return false;
}
else if(mode == Otc::MessageMonsterYell){
if(m_messages.size() > 2) {
m_messages.pop_front();
m_updateEvent->cancel();
m_updateEvent = nullptr;
}
}
// too many messages
else if(m_messages.size() > 10) {
m_messages.pop_front();
m_updateEvent->cancel();
m_updateEvent = nullptr;
}
Adicionei um else if para o mode de MessageMonsterYell, que é o valor estamos utilizando para a comunicação do player, verificando a quantidade de mensagens e limitando em até 3 mensagens.
Apos essas alterações, basta apenas compilar o cliente, porem, ainda não esta pronto .
Segundo passo
Agora precisamos alterar o script do nosso servidor para "falar" da maneira correta, pois atualmente o player envia mensagens ao cliente com outro valor, vamos alterar.
Lembrando dos valores que estão definidos no data/lib/000-constant.lua existe outro dois valores para representar a mesma coisa, porem, apenas com o nome diferente, acredito eu que é para facilitar, dentro do arquivo data/lib/100-compat.lua
TALKTYPE_ORANGE_1 = TALKTYPE_MONSTER
TALKTYPE_ORANGE_2 = TALKTYPE_MONSTER_YELL
Não muda nada, apenas o nome da "variavel".
Alterei a linha 39
data/lib/120-goback.lua
doCreatureSay(cid, mbk, TALKTYPE_ORANGE_2)
Alterei a linha 228
data/actions/scripts/Basic/goback.lua
doCreatureSay(cid, mgo, TALKTYPE_ORANGE_2)
Alterei as linhas:
22, 69, 83, 85, 107, 186, 204, 222, 241, 248, 258, 263
data/actions/scripts/Basic/order.lua
-- linha 22
doPlayerSay(cid, getCreatureNick(getCreatureSummons(cid)[1]) .. orderTalks["downability"].talks[math.random(#orderTalks["downability"].talks)], TALKTYPE_ORANGE_2)
-- linha 69
doPlayerSay(cid, pokeName..orderTalks["ride"].talks[math.random(#orderTalks["ride"].talks)], TALKTYPE_ORANGE_2)
-- linhas 83 e 85
if string.find(habilidades, "levitate") then
doPlayerSay(cid, pokeName..orderTalks["levitate"].talks[math.random(#orderTalks["levitate"].talks)], TALKTYPE_ORANGE_2)
else
doPlayerSay(cid, pokeName..orderTalks["fly"].talks[math.random(#orderTalks["fly"].talks)], TALKTYPE_ORANGE_2)
end
-- linha 107
doPlayerSay(cid, getCreatureNick(getCreatureSummons(cid)[1])..", reverta-se.", TALKTYPE_ORANGE_2)
-- linha 186
doPlayerSay(cid, getCreatureNick(poke)..orderTalks["dig"].talks[math.random(#orderTalks["dig"].talks)], TALKTYPE_ORANGE_2)
-- linha 204
doPlayerSay(cid, getCreatureNick(poke)..orderTalks["cut"].talks[math.random(#orderTalks["cut"].talks)], TALKTYPE_ORANGE_2)
-- linha 222
doPlayerSay(cid, getCreatureNick(poke)..orderTalks["rock"].talks[math.random(#orderTalks["rock"].talks)], TALKTYPE_ORANGE_2)
-- linha 241
doPlayerSay(cid, getCreatureNick(poke)..orderTalks["headbutt"].talks[math.random(#orderTalks["headbutt"].talks)], TALKTYPE_ORANGE_2)
-- linha 248
doPlayerSay(cid, getCreatureNick(poke)..orderTalks["move"].talks[math.random(#orderTalks["move"].talks)], TALKTYPE_ORANGE_2)
-- linha 258
doPlayerSay(cid, getCreatureNick(poke)..orderTalks["move"].talks[math.random(#orderTalks["move"].talks)], TALKTYPE_ORANGE_2)
-- linha 263
doPlayerSay(cid, getCreatureNick(poke)..orderTalks["move"].talks[math.random(#orderTalks["move"].talks)], TALKTYPE_ORANGE_2)
Apos esse processo todo, salva e abre o serve.
Créditos
@Banker
@Brunds
kyogron -- outro forum
Me
Obs.: Aceito pagamento no PicPay para aula de programação
Obs.2: Não sou bom professor
Obs.3: Ajuda a comprar um Mc Lanche Feliz