More work on OP_Marquee. Should be enough to implement a function with it. Anyone wants to fiddle around with the unknowns and get them better documented they are free to.

This commit is contained in:
KimLS 2013-12-23 15:42:13 -08:00
parent ccf6b5ff68
commit a96f10b6aa
6 changed files with 27 additions and 70 deletions

View File

@ -5077,13 +5077,15 @@ struct ServerLootItem_Struct {
//"Got a broadcast message for ... %s ...\n" //"Got a broadcast message for ... %s ...\n"
struct ClientMarqueeMessage_Struct { struct ClientMarqueeMessage_Struct {
uint32 type; 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: uint32 priority; //needs a better name but it does:
//opacity = priority / 255 //opacity = (priority / 255) - floor(priority / 255)
//# of ending blinks = (int)((priority - 1) / 255) //# of fade in/out blinks = (int)((priority - 1) / 255)
//so 510 would have 100% opacity and 1 extra blink at end //so 510 would have 100% opacity and 1 extra blink at end
uint32 unk12; //no idea, seen 0, 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 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, //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 //but there's probably a reason for them that's more subtle than what i was looking for
uint32 duration; //in ms uint32 duration; //in ms

View File

@ -346,6 +346,7 @@ OP_IncreaseStats=0x0711
OP_Weblink=0x7cce OP_Weblink=0x7cce
#OP_OpenInventory=0x0000 # Likely does not exist in RoF -U #OP_OpenInventory=0x0000 # Likely does not exist in RoF -U
OP_OpenContainer=0x654f OP_OpenContainer=0x654f
OP_Marquee=0x288a
OP_DzQuit=0x5fc8 OP_DzQuit=0x5fc8
OP_DzListTimers=0x67b9 OP_DzListTimers=0x67b9

View File

@ -328,6 +328,7 @@ OP_RemoveNimbusEffect=0x5872 # C
OP_InspectMessageUpdate=0x67e9 # C OP_InspectMessageUpdate=0x67e9 # C
OP_OpenInventory=0x66c8 OP_OpenInventory=0x66c8
OP_OpenContainer=0x10e3 OP_OpenContainer=0x10e3
OP_Marquee=0x2f75
#expedition #expedition
OP_DzQuit=0x20d6 OP_DzQuit=0x20d6

View File

@ -285,6 +285,7 @@ OP_SpellEffect=0x22C5
OP_RemoveNimbusEffect=0x0000 OP_RemoveNimbusEffect=0x0000
OP_CrystalReclaim=0x7cfe OP_CrystalReclaim=0x7cfe
OP_CrystalCreate=0x62c3 OP_CrystalCreate=0x62c3
OP_Marquee=0x1d4d
OP_DzQuit=0x486d OP_DzQuit=0x486d
OP_DzListTimers=0x39aa OP_DzListTimers=0x39aa

View File

@ -353,6 +353,7 @@ OP_Weblink=0x6840 # C
OP_InspectMessageUpdate=0x7fa1 # C OP_InspectMessageUpdate=0x7fa1 # C
#OP_OpenInventory=0x0000 # Likely does not exist in UF -U #OP_OpenInventory=0x0000 # Likely does not exist in UF -U
OP_OpenContainer=0x041a OP_OpenContainer=0x041a
OP_Marquee=0x3675
OP_DzQuit=0x1539 OP_DzQuit=0x1539
OP_DzListTimers=0x21e9 OP_DzListTimers=0x21e9

View File

@ -719,71 +719,6 @@ void command_sendop(Client *c,const Seperator *sep){
c->QueuePacket(outapp); c->QueuePacket(outapp);
safe_delete(outapp); safe_delete(outapp);
return; 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(offset<outapp->size && sep->arg[4][0])
outapp->pBuffer[offset]=atoi(sep->arg[4]);
offset++;
if(offset<outapp->size && sep->arg[5][0])
outapp->pBuffer[offset+3]=atoi(sep->arg[5]);
offset++;
if(offset<outapp->size && sep->arg[6][0])
outapp->pBuffer[offset+3]=atoi(sep->arg[6]);
offset++;
if(offset<outapp->size && sep->arg[7][0])
outapp->pBuffer[offset]=atoi(sep->arg[7]);
offset++;
if(offset<outapp->size && sep->arg[8][0])
outapp->pBuffer[offset]=atoi(sep->arg[8]);
offset++;
if(offset<outapp->size && 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) void command_optest(Client *c, const Seperator *sep)
@ -824,6 +759,22 @@ void command_optest(Client *c, const Seperator *sep)
c->FastQueuePacket(&outapp); c->FastQueuePacket(&outapp);
break; 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: default:
{ {
break; break;