diff --git a/common/eq_packet_structs.h b/common/eq_packet_structs.h index 036056083..bbf7f8964 100644 --- a/common/eq_packet_structs.h +++ b/common/eq_packet_structs.h @@ -5077,13 +5077,15 @@ struct ServerLootItem_Struct { //"Got a broadcast message for ... %s ...\n" struct ClientMarqueeMessage_Struct { uint32 type; - uint32 unk04; // no idea, have seen 10 mostly, didn't notice a change when altering it + uint32 unk04; // no idea, didn't notice a change when altering it. + //According to asm the following are hard coded values: 2, 4, 5, 6, 7, 10, 12, 13, 14, 15, 16, 18, 20 + //There is also a non-hardcoded fall through but to be honest i don't know enough about what it does yet uint32 priority; //needs a better name but it does: - //opacity = priority / 255 - //# of ending blinks = (int)((priority - 1) / 255) + //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. - uint32 unk16; //no idea, seen 500, 1000 + 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 duration; //in ms diff --git a/utils/patches/patch_RoF.conf b/utils/patches/patch_RoF.conf index 00582a08a..7b0e57920 100644 --- a/utils/patches/patch_RoF.conf +++ b/utils/patches/patch_RoF.conf @@ -346,6 +346,7 @@ OP_IncreaseStats=0x0711 OP_Weblink=0x7cce #OP_OpenInventory=0x0000 # Likely does not exist in RoF -U OP_OpenContainer=0x654f +OP_Marquee=0x288a OP_DzQuit=0x5fc8 OP_DzListTimers=0x67b9 diff --git a/utils/patches/patch_SoF.conf b/utils/patches/patch_SoF.conf index 3f01e0ad5..819096ed4 100644 --- a/utils/patches/patch_SoF.conf +++ b/utils/patches/patch_SoF.conf @@ -328,6 +328,7 @@ OP_RemoveNimbusEffect=0x5872 # C OP_InspectMessageUpdate=0x67e9 # C OP_OpenInventory=0x66c8 OP_OpenContainer=0x10e3 +OP_Marquee=0x2f75 #expedition OP_DzQuit=0x20d6 diff --git a/utils/patches/patch_Titanium.conf b/utils/patches/patch_Titanium.conf index 9cb638462..46978d927 100644 --- a/utils/patches/patch_Titanium.conf +++ b/utils/patches/patch_Titanium.conf @@ -285,6 +285,7 @@ OP_SpellEffect=0x22C5 OP_RemoveNimbusEffect=0x0000 OP_CrystalReclaim=0x7cfe OP_CrystalCreate=0x62c3 +OP_Marquee=0x1d4d OP_DzQuit=0x486d OP_DzListTimers=0x39aa diff --git a/utils/patches/patch_Underfoot.conf b/utils/patches/patch_Underfoot.conf index a409fdaa1..b0d0ad017 100644 --- a/utils/patches/patch_Underfoot.conf +++ b/utils/patches/patch_Underfoot.conf @@ -353,6 +353,7 @@ OP_Weblink=0x6840 # C OP_InspectMessageUpdate=0x7fa1 # C #OP_OpenInventory=0x0000 # Likely does not exist in UF -U OP_OpenContainer=0x041a +OP_Marquee=0x3675 OP_DzQuit=0x1539 OP_DzListTimers=0x21e9 diff --git a/zone/command.cpp b/zone/command.cpp index d37e1a31d..27789cc44 100644 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -719,71 +719,6 @@ void command_sendop(Client *c,const Seperator *sep){ c->QueuePacket(outapp); safe_delete(outapp); return; - - /*if(sep->arg[1][0] && sep->arg[2][0]) - { - c->Message_StringID(atoi(sep->arg[1]),atoi(sep->arg[2]),sep->arg[3],sep->arg[4],sep->arg[5],sep->arg[6],sep->arg[7],sep->arg[8]); - } - else - c->Message(0,"type,string id, message1...");*/ - /* - clientupdate lvl and such - uint32 level; //new level - - - */ - - - /* - if(sep->arg[1][0] && sep->arg[2][0]){ - EQApplicationPacket* outapp = new EQApplicationPacket((EmuOpcode)atoi(sep->arg[1]),sizeof(GMName_Struct)); - GMName_Struct* gms=(GMName_Struct*)outapp->pBuffer; - memset(outapp->pBuffer,0,outapp->size); - strcpy(gms->gmname,c->GetName()); - strcpy(gms->oldname,c->GetName()); - strcpy(gms->newname,sep->arg[3]); - if(sep->arg[4][0]) - gms->badname=atoi(sep->arg[4]); - c->QueuePacket(outapp); - safe_delete(outapp); - } - */ - /* - else{ - EQApplicationPacket* outapp = new EQApplicationPacket(121,atoi(sep->arg[2])); - memset(outapp->pBuffer,0,outapp->size); - uint8 offset=atoi(sep->arg[3]); - if(offsetsize && sep->arg[4][0]) - outapp->pBuffer[offset]=atoi(sep->arg[4]); - offset++; - if(offsetsize && sep->arg[5][0]) - outapp->pBuffer[offset+3]=atoi(sep->arg[5]); - offset++; - if(offsetsize && sep->arg[6][0]) - outapp->pBuffer[offset+3]=atoi(sep->arg[6]); - offset++; - if(offsetsize && sep->arg[7][0]) - outapp->pBuffer[offset]=atoi(sep->arg[7]); - offset++; - if(offsetsize && sep->arg[8][0]) - outapp->pBuffer[offset]=atoi(sep->arg[8]); - offset++; - if(offsetsize && sep->arg[9][0]) - outapp->pBuffer[offset]=atoi(sep->arg[9]); - c->QueuePacket(outapp); - safe_delete(outapp); - }*/ - //c->SetStats(atoi(sep->arg[1]),atoi(sep->arg[2])); - //} - /*EQApplicationPacket* outapp = new EQApplicationPacket(atoi(sep->arg[1]), sizeof(PlayerAA_Struct)); - memcpy(outapp->pBuffer,c->GetAAStruct(),outapp->size); - c->QueuePacket(outapp); - safe_delete(outapp); - } - else - c->Message(15,"Invalid opcode!"); - */ - } void command_optest(Client *c, const Seperator *sep) @@ -824,6 +759,22 @@ void command_optest(Client *c, const Seperator *sep) c->FastQueuePacket(&outapp); break; } + 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); + break; + } default: { break;