Fala galera, tudo bem?
Hoje, para estrear a cara nova do fórum, trago pra vocês uma função bem simples, porém muito legal e útil.
Nos TFS 1.X a função sendAnimatedText foi retirada. O motivo aparente, pelo que procurei saber, é que a função não mais é suportada em cipclients. Porém, o suporte a função continua funcionando no OTC e, por isso, decidi refazê-la e trazer para vocês. O tfs 1.2 possui a opção de enviar número animados pela sendTextMessage, porém só funciona para números.
sendAnimatedText -> Envia um texto animado na posição escolhida. Ex: "critical" animation, damage animation, etc.
Sem mais delongas, vamos ao que interessa.
Em luascript.h, abaixo de "// Game", cole:
static int luaGameSendAnimatedText(lua_State* L);
Em luascript.cpp, abaixo de "// Game", coloque a nova função:
int LuaScriptInterface::luaGameSendAnimatedText(lua_State* L) { // Game.sendAnimatedText(position, text, color) TextMessage message; message.position = getPosition(L, 1); message.text = getString(L, 2); message.primary.color = getNumber<TextColor_t>(L, 3); if (message.position.x && message.position.y && message.position.z) { SpectatorVec list; g_game.map.getSpectators(list, message.position, false, true); for (Creature* spectator : list) { spectator->getPlayer()->sendAnimatedText(message); } pushBoolean(L, true); } else { lua_pushnil(L); } return 1;}
Feito isso agora vá até player.h, procure por void sendTextMessage e logo após a segunda função sendText message cole:
void sendAnimatedText (TextMessage& message) const { if (client) { client->sendAnimatedMessage(message); } }
Para finalizar vamos criar o protocolo de envio das informações do nosso efeito de texto para o cliente.
Vamos criar a chamada da função em protocolgame.h. Logo após "void sendTextMessage(const TextMessage& message);" coloque:
void sendAnimatedMessage(const TextMessage& message);
Vá em protocolgame.cpp, procure pela função "void ProtocolGame::sendTextMessage(const TextMessage& message)" e cole logo após seu fim:
void ProtocolGame::sendAnimatedMessage(const TextMessage& message){ NetworkMessage msg; msg.addByte(0x84); msg.addPosition(message.position); msg.addByte(message.primary.color); msg.addString(message.text); writeToOutputBuffer(msg);}
É isso galerinha, após seguir esses passos você terá a função sendAnimatedText funcionando certinho.
Para usá-la basta, no lua, usar a função como no exemplo abaixo:
Game.sendAnimatedText(Creature(attacker):getPosition(), "ATACOU", TEXTCOLOR_SKYBLUE)
Abraços,