Compartilhe
Ir em baixo
avatar

Mensagens : 1827
Pontos : 7296
Evolução : 2

Ver perfil do usuáriohttp://www.fury-share.blogspot.com.br/

[C++]Chat Personalizado

em Seg 1 Out 2012 - 13:22
Reputação da mensagem: 100% (5 votos)
Eu percebi que havia algumas pessoas que poderiam querer algo assim para o seu servidor, então eu decidi compartilhá-lo aqui. Mostra se o jogador está falando horda ou aliança ou também irá exibir se eles são um Mod / GM / Admin. Basta digitar: .chat e sua mensagem depois. Testado e trabalhando em 3.3.5a TrinityCore. O roteiro foi despojado de algum código redundante e agora apenas lida com os níveis de segurança padrão.

Jogador: [Horde] ou [Aliança]
Moderador Trial / GM: [Mod]
Gamemaster: [GM]
Administrador: [Admin]

Alterações recentes:
Adicionado uma verificação para ver se o jogador é silenciado e também para verificar se a mensagem contém apenas caracteres vazios (espaços)
Adicionado "Links nome" para o bate-papo para que os jogadores podem clicar sobre os nomes e ser capaz de sussurrar-los.
Adicionado cores de classe para os nomes
Foi adicionada uma pequena configuração de modo que as mensagens são apenas transmitidos aos da mesma facção. Se você deseja que este seja ativado, mude FACTION_SPECIFIC a 1 em vez de 0

Código:
#include "ScriptPCH.h"
#include "Chat.h"

#define FACTION_SPECIFIC 0

std::string GetNameLink(Player* player)
{
   std::string name = player->GetName();
   std::string color;
   switch(player->getClass())
   {
   case CLASS_DEATH_KNIGHT:
      color = "|cffC41F3B";
      break;
   case CLASS_DRUID:
      color = "|cffFF7D0A";
      break;
   case CLASS_HUNTER:
      color = "|cffABD473";
      break;
   case CLASS_MAGE:
      color = "|cff69CCF0";
      break;
   case CLASS_PALADIN:
      color = "|cffF58CBA";
      break;
   case CLASS_PRIEST:
      color = "|cffFFFFFF";
      break;
   case CLASS_ROGUE:
      color = "|cffFFF569";
      break;
   case CLASS_SHAMAN:
      color = "|cff0070DE";
      break;
   case CLASS_WARLOCK:
      color = "|cff9482C9";
      break;
   case CLASS_WARRIOR:
      color = "|cffC79C6E";
      break;
   }
   return "|Hplayer:"+name+"|h|cffFFFFFF["+color+name+"|cffFFFFFF]|h|r";
}

class cs_world_chat : public CommandScript
{
   public:
      cs_world_chat() : CommandScript("cs_world_chat"){}

   ChatCommand * GetCommands() const
   {
      static ChatCommand WorldChatCommandTable[] =
      {
         {"chat",   SEC_PLAYER,      true,      &HandleWorldChatCommand,   "", NULL},
         {NULL,      0,            false,      NULL,                  "", NULL}
      };

      return WorldChatCommandTable;
   }

   static bool HandleWorldChatCommand(ChatHandler * handler, const char * args)
   {
      if (!handler->GetSession()->GetPlayer()->CanSpeak())
         return false;
      std::string temp = args;

      if (!args || temp.find_first_not_of(' ') == std::string::npos)
         return false;

      std::string msg = "";
      Player * player = handler->GetSession()->GetPlayer();

      switch(player->GetSession()->GetSecurity())
      {
         // Player
         case SEC_PLAYER:
            if (player->GetTeam() == ALLIANCE)
            {
               msg += "|cff0000ff[Alliance] ";
               msg += GetNameLink(player);
               msg += " |cfffaeb00";
            }

            else
            {
               msg += "|cffff0000[Horde] ";
               msg += GetNameLink(player);
               msg += " |cfffaeb00";
            }
            break;
         // Moderator/trial
         case SEC_MODERATOR:
            msg += "|cffff8a00[Mod] ";
            msg += GetNameLink(player);
            msg += " |cfffaeb00";
            break;
         // GM
         case SEC_GAMEMASTER:
            msg += "|cff00ffff[GM] ";
            msg += GetNameLink(player);
            msg += " |cfffaeb00";
            break;
         // Admin
         case SEC_ADMINISTRATOR:
            msg += "|cfffa9900[Admin] ";
            msg += GetNameLink(player);
            msg += " |cfffaeb00";
            break;

      }
         
      msg += args;
      if (FACTION_SPECIFIC)
      {
         SessionMap sessions = sWorld->GetAllSessions();
         for (SessionMap::iterator itr = sessions.begin(); itr != sessions.end(); ++itr)
            if (Player* plr = itr->second->GetPlayer())
               if (plr->GetTeam() == player->GetTeam())
                  sWorld->SendServerMessage(SERVER_MSG_STRING, msg.c_str(), plr);
      }
      else
         sWorld->SendServerMessage(SERVER_MSG_STRING, msg.c_str(), 0);   

      return true;
   }
};

void AddSC_cs_world_chat()
{
   new cs_world_chat();
}

pastebin

Créditos: Parranoia e Erictemponi
avatar

Mensagens : 184
Pontos : 707
Ver perfil do usuário

Re: [C++]Chat Personalizado

em Seg 1 Out 2012 - 16:30
É impressao minha ou ja tem isso postado aquui?
avatar

Mensagens : 144
Pontos : 468
Ver perfil do usuário

Re: [C++]Chat Personalizado

em Sab 6 Out 2012 - 17:28
Aparece essas tag's antes dos nomes ?
avatar

Mensagens : 23
Pontos : 60
Ver perfil do usuário

Re: [C++]Chat Personalizado

em Sab 6 Out 2012 - 18:12
Sijm, aparece as Tags e a cor da letra a cada tipo de player
avatar

Mensagens : 144
Pontos : 468
Ver perfil do usuário

Re: [C++]Chat Personalizado

em Sab 6 Out 2012 - 18:45
No chat ingame?Pode mandar css
avatar

Mensagens : 23
Pontos : 60
Ver perfil do usuário

Re: [C++]Chat Personalizado

em Sab 6 Out 2012 - 18:46
Manow, segue o que se diz no inicio do tópico que da certo, css é pra site essas coisas, isso ae é pra wow
avatar

Mensagens : 144
Pontos : 468
Ver perfil do usuário

Re: [C++]Chat Personalizado

em Sab 6 Out 2012 - 18:49
Quando falei CSS queria dizer no Print screen
avatar

Mensagens : 147
Pontos : 529
Ver perfil do usuário

Re: [C++]Chat Personalizado

em Qua 10 Out 2012 - 6:41
otimo c++ eu utilizo ele em meu servidor porem ele tem um pequeno problema
Nao tem mute :S

jah passei alguns sufoco com muleque divulgando no .chat

Sera que seria possivel adicionar mute nele?
Eu encontrei um na ac web que dizia ter
mas nao tem tbm! :S +rep
avatar

Mensagens : 1827
Pontos : 7296
Evolução : 2

Ver perfil do usuáriohttp://www.fury-share.blogspot.com.br/

Re: [C++]Chat Personalizado

em Qua 10 Out 2012 - 11:33
Adiciona o Mute automático no worldserver.conf
que ae se ele falar de mais em qualquer tipo de chat? say, yell, party, battleground, world, global, etc.
Ele toma mute em qualquer um
avatar

Mensagens : 619
Pontos : 2179
Evolução : 5

Ver perfil do usuáriohttp://www.mthsena.info

Re: [C++]Chat Personalizado

em Qua 10 Out 2012 - 12:23
Reputação da mensagem: 100% (1 votos)
se desejar, esse tem mute.
[Você precisa estar registrado e conectado para ver este link.]

até +
avatar

Mensagens : 144
Pontos : 468
Ver perfil do usuário

Re: [C++]Chat Personalizado

em Qua 10 Out 2012 - 12:35
Alguem pode me mandar um print screen de como fica ?
avatar

Mensagens : 85
Pontos : 448
Ver perfil do usuário

Re: [C++]Chat Personalizado

em Seg 14 Abr 2014 - 20:54
Amanha irei testar  obg por compartilhar
avatar

Mensagens : 1299
Pontos : 2591
Ver perfil do usuário

Re: [C++]Chat Personalizado

em Seg 14 Abr 2014 - 20:56
Ola,
Aconselho a utilizar este [Você precisa estar registrado e conectado para ver este link.]
Conteúdo patrocinado

Re: [C++]Chat Personalizado

Voltar ao Topo
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum