diff --git a/common/eq_packet_structs.h b/common/eq_packet_structs.h index bbf7f8964..a0175a398 100644 --- a/common/eq_packet_structs.h +++ b/common/eq_packet_structs.h @@ -5084,10 +5084,8 @@ struct ClientMarqueeMessage_Struct { //opacity = (priority / 255) - floor(priority / 255) //# of fade in/out blinks = (int)((priority - 1) / 255) //so 510 would have 100% opacity and 1 extra blink at end - uint32 unk12; //no idea, seen 0, 500, 1000. I'm assuming this has to do with the fade in/out. - uint32 unk16; //no idea, seen 500, 1000. I'm assuming this has to do with the fade in/out. - //Visually I couldn't tell a difference from these previous two, - //but there's probably a reason for them that's more subtle than what i was looking for + uint32 fade_in_time; //The fade in time, in ms + uint32 fade_out_time; //The fade out time, in ms uint32 duration; //in ms char msg[1]; //message plus null terminator diff --git a/zone/client.cpp b/zone/client.cpp index 97f389667..9d2cdbd27 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -8042,3 +8042,23 @@ void Client::Consume(const Item_Struct *item, uint8 type, int16 slot, bool auto_ #endif } } + +void Client::SendMarqueeMessage(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, std::string msg) +{ + if(duration == 0 || msg.length() == 0) { + return; + } + + EQApplicationPacket outapp(OP_Marquee, sizeof(ClientMarqueeMessage_Struct) + msg.length()); + ClientMarqueeMessage_Struct *cms = (ClientMarqueeMessage_Struct*)outapp.pBuffer; + + cms->type = type; + cms->unk04 = 10; + cms->priority = priority; + cms->fade_in_time = fade_in; + cms->fade_out_time = fade_out; + cms->duration = duration; + strcpy(cms->msg, msg.c_str()); + + QueuePacket(&outapp); +} \ No newline at end of file diff --git a/zone/client.h b/zone/client.h index bf3ad7bd2..b672b114a 100644 --- a/zone/client.h +++ b/zone/client.h @@ -1136,6 +1136,7 @@ public: const char* GetRacePlural(Client* client); const char* GetClassPlural(Client* client); void SendWebLink(const char* website); + void SendMarqueeMessage(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, std::string msg); void DuplicateLoreMessage(uint32 ItemID); void GarbleMessage(char *, uint8); diff --git a/zone/command.cpp b/zone/command.cpp index 27789cc44..68c740de6 100644 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -761,18 +761,7 @@ void command_optest(Client *c, const Seperator *sep) } case 3: { - char *msg = "This is a test message"; - EQApplicationPacket outapp(OP_Marquee, sizeof(ClientMarqueeMessage_Struct) + strlen(msg)); - ClientMarqueeMessage_Struct *cms = (ClientMarqueeMessage_Struct*)outapp.pBuffer; - cms->priority = 510; - cms->type = 15; - cms->unk04 = 10; - cms->unk12 = 1000; - cms->unk16 = 1000; - cms->duration = 5000; - strcpy(cms->msg, msg); - - c->QueuePacket(&outapp); + c->SendMarqueeMessage(15, 250, 0, 500, 5000, "Some msg"); break; } default: diff --git a/zone/lua_client.cpp b/zone/lua_client.cpp index 86ad83c57..61e2a9290 100644 --- a/zone/lua_client.cpp +++ b/zone/lua_client.cpp @@ -1229,6 +1229,11 @@ void Lua_Client::SetConsumption(int in_hunger, int in_thirst) { self->SetConsumption(in_hunger, in_thirst); } +void Lua_Client::SendMarqueeMessage(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, std::string msg) { + Lua_Safe_Call_Void(); + self->SendMarqueeMessage(type, priority, fade_in, fade_out, duration, msg); +} + luabind::scope lua_register_client() { return luabind::class_("Client") .def(luabind::constructor<>()) @@ -1473,7 +1478,8 @@ luabind::scope lua_register_client() { .def("GetThirst", (int(Lua_Client::*)(void))&Lua_Client::GetThirst) .def("SetHunger", (void(Lua_Client::*)(int))&Lua_Client::SetHunger) .def("SetThirst", (void(Lua_Client::*)(int))&Lua_Client::SetThirst) - .def("SetConsumption", (void(Lua_Client::*)(int, int))&Lua_Client::SetConsumption); + .def("SetConsumption", (void(Lua_Client::*)(int, int))&Lua_Client::SetConsumption) + .def("SendMarqueeMessage", (void(Lua_Client::*)(uint32, uint32, uint32, uint32, uint32, std::string))&Lua_Client::SendMarqueeMessage); } luabind::scope lua_register_inventory_where() { diff --git a/zone/lua_client.h b/zone/lua_client.h index 82443f29c..f4a45c526 100644 --- a/zone/lua_client.h +++ b/zone/lua_client.h @@ -273,6 +273,7 @@ public: void SetHunger(int in_hunger); void SetThirst(int in_thirst); void SetConsumption(int in_hunger, int in_thirst); + void SendMarqueeMessage(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, std::string msg); }; #endif