mirror of
https://github.com/EQEmu/Server.git
synced 2026-03-26 05:22:25 +00:00
Added FilteredMessage functions that better use ServerFilters
These functions are currently unused, but should work nicely. I didn't add overloads to separate them from the others for now
This commit is contained in:
parent
d46912fcdf
commit
e0edd7a290
@ -2963,6 +2963,101 @@ void Client::Message_StringID(uint32 type, uint32 string_id, const char* message
|
|||||||
safe_delete(outapp);
|
safe_delete(outapp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// helper function, returns true if we should see the message
|
||||||
|
bool Client::FilteredMessageCheck(Mob *sender, eqFilterType filter)
|
||||||
|
{
|
||||||
|
eqFilterMode mode = GetFilter(filter);
|
||||||
|
// easy ones first
|
||||||
|
if (mode == FilterShow)
|
||||||
|
return true;
|
||||||
|
else if (mode == FilterHide)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (!sender && mode == FilterHide) {
|
||||||
|
return false;
|
||||||
|
} else if (sender) {
|
||||||
|
if (this == sender) {
|
||||||
|
if (mode == FilterHide) // don't need to check others
|
||||||
|
return false;
|
||||||
|
} else if (mode == FilterShowSelfOnly) { // we know sender isn't us
|
||||||
|
return false;
|
||||||
|
} else if (mode == FilterShowGroupOnly) {
|
||||||
|
Group *g = GetGroup();
|
||||||
|
if (!g || !g->IsGroupMember(sender))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// we passed our checks
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Client::FilteredMessage_StringID(Mob *sender, uint32 type,
|
||||||
|
eqFilterType filter, uint32 string_id)
|
||||||
|
{
|
||||||
|
if (!FilteredMessageCheck(sender, filter))
|
||||||
|
return;
|
||||||
|
|
||||||
|
EQApplicationPacket *outapp = new EQApplicationPacket(OP_SimpleMessage, 12);
|
||||||
|
SimpleMessage_Struct *sms = (SimpleMessage_Struct *)outapp->pBuffer;
|
||||||
|
sms->color = type;
|
||||||
|
sms->string_id = string_id;
|
||||||
|
|
||||||
|
sms->unknown8 = 0;
|
||||||
|
|
||||||
|
QueuePacket(outapp);
|
||||||
|
safe_delete(outapp);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Client::FilteredMessage_StringID(Mob *sender, uint32 type, eqFilterType filter, uint32 string_id,
|
||||||
|
const char *message1, const char *message2, const char *message3,
|
||||||
|
const char *message4, const char *message5, const char *message6,
|
||||||
|
const char *message7, const char *message8, const char *message9)
|
||||||
|
{
|
||||||
|
if (!FilteredMessageCheck(sender, filter))
|
||||||
|
return;
|
||||||
|
|
||||||
|
int i, argcount, length;
|
||||||
|
char *bufptr;
|
||||||
|
const char *message_arg[9] = {0};
|
||||||
|
|
||||||
|
if (type == MT_Emote)
|
||||||
|
type = 4;
|
||||||
|
|
||||||
|
if (!message1) {
|
||||||
|
Message_StringID(type, string_id); // use the simple message instead
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
message_arg[i++] = message1;
|
||||||
|
message_arg[i++] = message2;
|
||||||
|
message_arg[i++] = message3;
|
||||||
|
message_arg[i++] = message4;
|
||||||
|
message_arg[i++] = message5;
|
||||||
|
message_arg[i++] = message6;
|
||||||
|
message_arg[i++] = message7;
|
||||||
|
message_arg[i++] = message8;
|
||||||
|
message_arg[i++] = message9;
|
||||||
|
|
||||||
|
for (argcount = length = 0; message_arg[argcount]; argcount++)
|
||||||
|
length += strlen(message_arg[argcount]) + 1;
|
||||||
|
|
||||||
|
EQApplicationPacket *outapp = new EQApplicationPacket(OP_FormattedMessage, length+13);
|
||||||
|
FormattedMessage_Struct *fm = (FormattedMessage_Struct *)outapp->pBuffer;
|
||||||
|
fm->string_id = string_id;
|
||||||
|
fm->type = type;
|
||||||
|
bufptr = fm->message;
|
||||||
|
for (i = 0; i < argcount; i++) {
|
||||||
|
strcpy(bufptr, message_arg[i]);
|
||||||
|
bufptr += strlen(message_arg[i]) + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
QueuePacket(outapp);
|
||||||
|
safe_delete(outapp);
|
||||||
|
}
|
||||||
|
|
||||||
void Client::SetTint(int16 in_slot, uint32 color) {
|
void Client::SetTint(int16 in_slot, uint32 color) {
|
||||||
Color_Struct new_color;
|
Color_Struct new_color;
|
||||||
|
|||||||
@ -250,6 +250,14 @@ public:
|
|||||||
uint8 SlotConvert(uint8 slot,bool bracer=false);
|
uint8 SlotConvert(uint8 slot,bool bracer=false);
|
||||||
void Message_StringID(uint32 type, uint32 string_id, uint32 distance = 0);
|
void Message_StringID(uint32 type, uint32 string_id, uint32 distance = 0);
|
||||||
void Message_StringID(uint32 type, uint32 string_id, const char* message,const char* message2=0,const char* message3=0,const char* message4=0,const char* message5=0,const char* message6=0,const char* message7=0,const char* message8=0,const char* message9=0, uint32 distance = 0);
|
void Message_StringID(uint32 type, uint32 string_id, const char* message,const char* message2=0,const char* message3=0,const char* message4=0,const char* message5=0,const char* message6=0,const char* message7=0,const char* message8=0,const char* message9=0, uint32 distance = 0);
|
||||||
|
bool FilteredMessageCheck(Mob *sender, eqFilterType filter);
|
||||||
|
void FilteredMessage_StringID(Mob *sender, uint32 type, eqFilterType filter, uint32 string_id);
|
||||||
|
void FilteredMessage_StringID(Mob *sender, uint32 type, eqFilterType filter,
|
||||||
|
uint32 string_id, const char *message1, const char *message2 = nullptr,
|
||||||
|
const char *message3 = nullptr, const char *message4 = nullptr,
|
||||||
|
const char *message5 = nullptr, const char *message6 = nullptr,
|
||||||
|
const char *message7 = nullptr, const char *message8 = nullptr,
|
||||||
|
const char *message9 = nullptr);
|
||||||
void SendBazaarResults(uint32 trader_id,uint32 class_,uint32 race,uint32 stat,uint32 slot,uint32 type,char name[64],uint32 minprice,uint32 maxprice);
|
void SendBazaarResults(uint32 trader_id,uint32 class_,uint32 race,uint32 stat,uint32 slot,uint32 type,char name[64],uint32 minprice,uint32 maxprice);
|
||||||
void SendTraderItem(uint32 item_id,uint16 quantity);
|
void SendTraderItem(uint32 item_id,uint16 quantity);
|
||||||
uint16 FindTraderItem(int32 SerialNumber,uint16 Quantity);
|
uint16 FindTraderItem(int32 SerialNumber,uint16 Quantity);
|
||||||
|
|||||||
@ -1907,6 +1907,24 @@ void EntityList::MessageClose_StringID(Mob *sender, bool skipsender, float dist,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EntityList::FilteredMessageClose_StringID(Mob *sender, bool skipsender,
|
||||||
|
float dist, uint32 type, eqFilterType filter, uint32 string_id,
|
||||||
|
const char *message1, const char *message2, const char *message3,
|
||||||
|
const char *message4, const char *message5, const char *message6,
|
||||||
|
const char *message7, const char *message8, const char *message9)
|
||||||
|
{
|
||||||
|
Client *c;
|
||||||
|
float dist2 = dist * dist;
|
||||||
|
|
||||||
|
for (auto it = client_list.begin(); it != client_list.end(); ++it) {
|
||||||
|
c = it->second;
|
||||||
|
if (c && c->DistNoRoot(*sender) <= dist2 && (!skipsender || c != sender))
|
||||||
|
c->FilteredMessage_StringID(sender, type, filter, string_id,
|
||||||
|
message1, message2, message3, message4, message5,
|
||||||
|
message6, message7, message8, message9);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void EntityList::Message_StringID(Mob *sender, bool skipsender, uint32 type, uint32 string_id, const char* message1,const char* message2,const char* message3,const char* message4,const char* message5,const char* message6,const char* message7,const char* message8,const char* message9)
|
void EntityList::Message_StringID(Mob *sender, bool skipsender, uint32 type, uint32 string_id, const char* message1,const char* message2,const char* message3,const char* message4,const char* message5,const char* message6,const char* message7,const char* message8,const char* message9)
|
||||||
{
|
{
|
||||||
Client *c;
|
Client *c;
|
||||||
@ -1918,6 +1936,23 @@ void EntityList::Message_StringID(Mob *sender, bool skipsender, uint32 type, uin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EntityList::FilteredMessage_StringID(Mob *sender, bool skipsender,
|
||||||
|
uint32 type, eqFilterType filter, uint32 string_id,
|
||||||
|
const char *message1, const char *message2, const char *message3,
|
||||||
|
const char *message4, const char *message5, const char *message6,
|
||||||
|
const char *message7, const char *message8, const char *message9)
|
||||||
|
{
|
||||||
|
Client *c;
|
||||||
|
|
||||||
|
for (auto it = client_list.begin(); it != client_list.end(); ++it) {
|
||||||
|
c = it->second;
|
||||||
|
if (c && (!skipsender || c != sender))
|
||||||
|
c->FilteredMessage_StringID(sender, type, filter, string_id,
|
||||||
|
message1, message2, message3, message4, message5, message6,
|
||||||
|
message7, message8, message9);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void EntityList::MessageClose(Mob* sender, bool skipsender, float dist, uint32 type, const char* message, ...)
|
void EntityList::MessageClose(Mob* sender, bool skipsender, float dist, uint32 type, const char* message, ...)
|
||||||
{
|
{
|
||||||
va_list argptr;
|
va_list argptr;
|
||||||
|
|||||||
@ -267,7 +267,9 @@ public:
|
|||||||
void MessageStatus(uint32 to_guilddbid, int to_minstatus, uint32 type, const char* message, ...);
|
void MessageStatus(uint32 to_guilddbid, int to_minstatus, uint32 type, const char* message, ...);
|
||||||
void MessageClose(Mob* sender, bool skipsender, float dist, uint32 type, const char* message, ...);
|
void MessageClose(Mob* sender, bool skipsender, float dist, uint32 type, const char* message, ...);
|
||||||
void Message_StringID(Mob *sender, bool skipsender, uint32 type, uint32 string_id, const char* message1=0,const char* message2=0,const char* message3=0,const char* message4=0,const char* message5=0,const char* message6=0,const char* message7=0,const char* message8=0,const char* message9=0);
|
void Message_StringID(Mob *sender, bool skipsender, uint32 type, uint32 string_id, const char* message1=0,const char* message2=0,const char* message3=0,const char* message4=0,const char* message5=0,const char* message6=0,const char* message7=0,const char* message8=0,const char* message9=0);
|
||||||
|
void FilteredMessage_StringID(Mob *sender, bool skipsender, uint32 type, eqFilterType filter, uint32 string_id, const char* message1=0,const char* message2=0,const char* message3=0,const char* message4=0,const char* message5=0,const char* message6=0,const char* message7=0,const char* message8=0,const char* message9=0);
|
||||||
void MessageClose_StringID(Mob *sender, bool skipsender, float dist, uint32 type, uint32 string_id, const char* message1=0,const char* message2=0,const char* message3=0,const char* message4=0,const char* message5=0,const char* message6=0,const char* message7=0,const char* message8=0,const char* message9=0);
|
void MessageClose_StringID(Mob *sender, bool skipsender, float dist, uint32 type, uint32 string_id, const char* message1=0,const char* message2=0,const char* message3=0,const char* message4=0,const char* message5=0,const char* message6=0,const char* message7=0,const char* message8=0,const char* message9=0);
|
||||||
|
void FilteredMessageClose_StringID(Mob *sender, bool skipsender, float dist, uint32 type, eqFilterType filter, uint32 string_id, const char* message1=0,const char* message2=0,const char* message3=0,const char* message4=0,const char* message5=0,const char* message6=0,const char* message7=0,const char* message8=0,const char* message9=0);
|
||||||
void ChannelMessageFromWorld(const char* from, const char* to, uint8 chan_num, uint32 guilddbid, uint8 language, const char* message);
|
void ChannelMessageFromWorld(const char* from, const char* to, uint8 chan_num, uint32 guilddbid, uint8 language, const char* message);
|
||||||
void ChannelMessage(Mob* from, uint8 chan_num, uint8 language, const char* message, ...);
|
void ChannelMessage(Mob* from, uint8 chan_num, uint8 language, const char* message, ...);
|
||||||
void ChannelMessage(Mob* from, uint8 chan_num, uint8 language, uint8 lang_skill, const char* message, ...);
|
void ChannelMessage(Mob* from, uint8 chan_num, uint8 language, uint8 lang_skill, const char* message, ...);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user