View Single Post
  #2  
Old 01-26-2009, 05:27 AM
Derision
Developer
 
Join Date: Feb 2004
Location: UK
Posts: 1,540
Default

The code for the 'hover on death' and respawn window is also in the Titanium client as I was playing with it before Christmas, so it's use for SoF client support may also be optional.

In Titanium, OP_RespawnFromHover=0x011d

This is the code I was using to play with it, it is far from usable in it's current form.

When you die, it brings up the respawn box with two hardcoded options, respawn at bind in Pok, or Rez in Great Divide. It doesn't handle the Client reply which is OP_RespawnFromHover, with a uint32, 0 for respawn at bind, or 1 for the Rez option.

Code:
Index: common/emu_oplist.h
===================================================================
--- common/emu_oplist.h (revision 283)
+++ common/emu_oplist.h (working copy)
@@ -419,3 +419,4 @@
 N(OP_VoiceMacroOut),
 N(OP_WorldObjectsSent),
 N(OP_BlockedBuffs),
+N(OP_RespawnFromHover),
Index: zone/attack.cpp
===================================================================
--- zone/attack.cpp     (revision 283)
+++ zone/attack.cpp     (working copy)
@@ -1703,7 +1703,7 @@
        SetPet(0);
        SetHorseId(0);
        dead = true;
-       dead_timer.Start(5000, true);
+       dead_timer.Start(300000, true);

        if (other != NULL)
        {
@@ -1908,6 +1908,10 @@
        //

        m_pp.zone_id = m_pp.binds[0].zoneId;
+
+       RespawnWindow();
+       return;
+
        database.MoveCharacterToZone(this->CharacterID(), database.GetZoneName(m_pp.zone_id));

        Save();
Index: zone/client.cpp
===================================================================
--- zone/client.cpp     (revision 283)
+++ zone/client.cpp     (working copy)
@@ -3803,3 +3803,42 @@
        if(!worldserver.SendVoiceMacro(this, Type, Target, MacroNumber, GroupOrRaidID))
                Message(0, "Error: World server disconnected");
 }
+
+
+void Client::RespawnWindow() {
+
+       EQApplicationPacket* outapp = new EQApplicationPacket(OP_RespawnFromHover, 90);
+
+       char* buf = (char *)outapp->pBuffer;
+
+       VARSTRUCT_ENCODE_TYPE(uint32, buf, 0);
+       //VARSTRUCT_ENCODE_TYPE(uint32, buf, 0x000493e0); // Time in milliseconds, this is 300 Seconds
+       VARSTRUCT_ENCODE_TYPE(uint32, buf, 60 * 1000); // Timer ?
+       VARSTRUCT_ENCODE_TYPE(uint32, buf, 0);
+       VARSTRUCT_ENCODE_TYPE(uint32, buf, 2);
+
+       VARSTRUCT_ENCODE_TYPE(uint32, buf, 0x0); // Bind Location ?
+       VARSTRUCT_ENCODE_TYPE(uint32, buf, 0xca); // 202 Poknowledge
+       VARSTRUCT_ENCODE_TYPE(uint32, buf, 0xc3586717); // Unknown
+       VARSTRUCT_ENCODE_TYPE(uint32, buf, 0xc2491983); // Unknown
+       VARSTRUCT_ENCODE_TYPE(uint32, buf, 0xc31ecf78); // Unknown
+       VARSTRUCT_ENCODE_TYPE(uint16, buf, 0);
+       VARSTRUCT_ENCODE_TYPE(uint16, buf, 0x4399);
+       VARSTRUCT_ENCODE_STRING(buf, "Bind Location");
+       //VARSTRUCT_ENCODE_TYPE(uint8, buf, 0);
+
+       VARSTRUCT_ENCODE_TYPE(uint32, buf, 1); // Resurrect ?
+       VARSTRUCT_ENCODE_TYPE(uint32, buf, 0x76);  // 118 Great Divide
+       VARSTRUCT_ENCODE_TYPE(uint32, buf, 0xc54d79cf);
+       VARSTRUCT_ENCODE_TYPE(uint32, buf, 0xc491f1e5);
+       VARSTRUCT_ENCODE_TYPE(uint32, buf, 0xc360df77);
+       VARSTRUCT_ENCODE_TYPE(uint16, buf, 0); // was 0
+       VARSTRUCT_ENCODE_TYPE(uint16, buf, 0);
+       VARSTRUCT_ENCODE_STRING(buf, "Resurrect");
+
+       VARSTRUCT_ENCODE_TYPE(uint8, buf, 1);
+
+       DumpPacket(outapp);
+       QueuePacket(outapp);
+       safe_delete(outapp);
+}
Index: zone/client.h
===================================================================
--- zone/client.h       (revision 283)
+++ zone/client.h       (working copy)
@@ -466,6 +466,7 @@
       void     SacrificeConfirm(Client* caster);
        void    Sacrifice(Client* caster);
        void    GoToDeath();
+       void    RespawnWindow();

        FACTION_VALUE   GetReverseFactionCon(Mob* iOther);
     FACTION_VALUE   GetFactionLevel(int32 char_id, int32 npc_id, int32 p_race, int32 p_class, int32 p_deity, sint32 pFaction, Mob* tnpc);
I didn't progress it any further because I didn't think it was particularly useful.

Last edited by Derision; 01-27-2009 at 01:54 AM..
Reply With Quote