// Ryzom - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see .
#ifndef SEND_CHAT_H
#define SEND_CHAT_H
#include "nel/misc/types_nl.h"
#include "nel/misc/entity_id.h"
#include "nel/misc/stream.h"
#include "nel/net/message.h"
#include "nel/net/unified_network.h"
#include "synchronised_message.h"
#include "chat_group.h"
#include "game_share/string_manager_sender.h"
#include
/**
* Send a chat line from system to a player that will be displayed as a normal chat sentence
* Sentence will be formated using "" as prefix of chat string
*/
inline void chatToPlayer(const NLMISC::CEntityId &id, const std::string &chatString)
{
NLNET::CMessage msgout("CHAT");
bool talkToPlayer = true;
msgout.serial(talkToPlayer, const_cast(id), const_cast(chatString));
sendMessageViaMirror("IOS", msgout);
}
/**
* Send a chat line from system to a group of player that will be displayed as a normal chat sentence
* Sentence will be formated using "" as prefix of chat string
*/
inline void chatToGroup(const NLMISC::CEntityId &id, const std::string &chatString)
{
NLNET::CMessage msgout("CHAT");
bool talkToPlayer = false;
msgout.serial(talkToPlayer, const_cast(id), const_cast(chatString));
sendMessageViaMirror("IOS", msgout);
}
/**
* Send a chat line from a bot (mainly NPC) in a chat channel (know as chat group).
* Chat group can be constructed from CChatGroup class.
* phraseId is a phrase identifier in the phrase translation file.
* param are the parameter of the phrase
*/
inline void npcChatParamToChannel(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, const std::string &phraseId, const std::vector ¶ms)
{
NLNET::CMessage msgout("NPC_CHAT_PARAM");
msgout.serial(const_cast(senderId));
msgout.serialEnum(groupType);
msgout.serial(const_cast(phraseId));
uint32 size = params.size();
msgout.serial(size);
// params.resize(size);
for ( uint i = 0; i < size; i++ )
{
uint8 type8 = params[i].Type;
msgout.serial( type8 );
const_cast(params[i]).serialParam( false, msgout, (STRING_MANAGER::TParamType) type8 );
}
sendMessageViaMirror("IOS", msgout);
}
/**
* Send a chat line from a bot (mainly NPC) in a chat channel (know as chat group).
* Chat group can be constructed from CChatGroup class.
* phraseId is a phrase identifier in the phrase translation file.
*/
inline void npcChatToChannel(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, const std::string &phraseId)
{
NLNET::CMessage msgout("NPC_CHAT");
msgout.serial(const_cast(senderId));
msgout.serialEnum(groupType);
msgout.serial(const_cast(phraseId));
sendMessageViaMirror("IOS", msgout);
}
/**
* Send a chat line from a bot (mainly NPC) in a chat channel (know as chat group).
* Chat group can be constructed from CChatGroup class.
* phraseId is a phrase identifier in the phrase translation file.
*/
inline void npcChatToChannelEx(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, uint32 phraseId)
{
NLNET::CMessage msgout("NPC_CHAT_EX");
msgout.serial(const_cast(senderId));
msgout.serialEnum(groupType);
msgout.serial(phraseId);
sendMessageViaMirror("IOS", msgout);
}
/**
* Send a chat line from a bot (mainly NPC) in a chat channel (know as chat group).
* Chat group can be constructed from CChatGroup class.
* sentence is the sentence to be sent.
*/
inline void npcChatToChannelSentence(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, std::string& sentence)
{
NLNET::CMessage msgout("NPC_CHAT_SENTENCE");
msgout.serial(const_cast(senderId));
msgout.serialEnum(groupType);
msgout.serial(sentence);
sendMessageViaMirror("IOS", msgout);
}
/**
* Request to the DSS to send a chat line from a bot in a chat channel
* Chat group can be constructed from CChatGroup class.
* sentenceId is the id of the sentence that must be sent by the DSS
*/
inline void forwardToDss(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, std::string& sentenceId,uint32 scenarioId)
{
nlinfo( ("forwarding to DSS : id: "+sentenceId).c_str());
NLNET::CMessage msgout("translateAndForward");
msgout.serial(const_cast(senderId));
msgout.serialEnum(groupType);
msgout.serial(sentenceId);
msgout.serial(scenarioId);
NLNET::CUnifiedNetwork::getInstance()->send("DSS",msgout);
}
/**
* Request to the DSS to send a chat line from a bot in a chat channel
* Chat group can be constructed from CChatGroup class.
* sentenceId is the id of the sentence that must be sent by the DSS
*/
inline void forwardToDssArg(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, std::string& sentenceId,uint32 scenarioId,std::vector& argValues)
{
nlinfo( ("forwarding to DSS : id: "+sentenceId).c_str());
NLNET::CMessage msgout("translateAndForwardArg");
msgout.serial(const_cast(senderId));
msgout.serialEnum(groupType);
msgout.serial(sentenceId);
msgout.serial(scenarioId);
uint32 size=argValues.size(),i=0;
msgout.serial(size);
for(;isend("DSS",msgout);
}
/**
* Send a tell line from a bot (mainly NPC) to a player
* phraseId is a phrase identifier in the phrase translation file.
*/
inline void npcTellToPlayer(const TDataSetRow &senderId, const TDataSetRow &receiverId, const std::string &phraseId, bool needSenderNpc=true)
{
NLNET::CMessage msgout;
if ( needSenderNpc )
{
msgout.setType("NPC_TELL");
msgout.serial(const_cast(senderId));
}
else
{
msgout.setType("GHOST_TELL");
}
msgout.serial(const_cast(receiverId));
msgout.serial(const_cast(phraseId));
sendMessageViaMirror("IOS", msgout);
}
/**
* Send a tell line from a bot (mainly NPC) to a player. Accept parametered strings
* phraseId is a phrase id obtained through the string manager
*/
inline void npcTellToPlayerEx(const TDataSetRow &senderId, const TDataSetRow &receiverId, uint32 phraseId)
{
NLNET::CMessage msgout("NPC_TELL_EX");
msgout.serial(const_cast(senderId));
msgout.serial(const_cast(receiverId));
msgout.serial(phraseId);
sendMessageViaMirror("IOS", msgout);
}
#endif // SEND_CHAT_H
/* End of send_chat.h */