Go Back   EQEmulator Home > EQEmulator Forums > Development > Development::Server Code Submissions

Reply
 
Thread Tools Display Modes
  #1  
Old 05-23-2009, 10:04 AM
Derision
Developer
 
Join Date: Feb 2004
Location: UK
Posts: 1,540
Default Combat Ability hot buttons / reuse timers.

My DSL is down so I probably won't be able to commit anything to the SVN from my Linux server for a few days, hence me posting this code here.

I was asked yesterday if I could look into making the hot buttons for Combat Abilities (Alt-C) remain down until their reuse timer is up.

This seems to work well, but I could do with someone more familiar with disciplines and their shared reuse timers testing it out.
Code:
Index: utils/patch_SoF.conf
===================================================================
--- utils/patch_SoF.conf        (revision 554)
+++ utils/patch_SoF.conf        (working copy)
@@ -278,6 +278,7 @@
 OP_Charm=0x2F32                                #
 OP_Stun=0x55BF                         #
 OP_DisciplineUpdate=0x0000             #
+OP_DisciplineTimer=0x53c5              #
 OP_FindPersonRequest=0x07F0            #
 OP_FindPersonReply=0x7770              #
 OP_Sound=0x2B02                                #
Index: utils/patch_Titanium.conf
===================================================================
--- utils/patch_Titanium.conf   (revision 554)
+++ utils/patch_Titanium.conf   (working copy)
@@ -387,6 +387,7 @@
 OP_ZoneComplete=0x0000
 OP_ItemLinkText=0x0000
 OP_DisciplineUpdate=0x7180
+OP_DisciplineTimer=0x53df
 OP_LocInfo=0x0000
 OP_FindPersonRequest=0x3c41                    # ShowEQ 10/27/05
 OP_FindPersonReply=0x5711                      # ShowEQ 10/27/05
Index: utils/patch_6.2.conf
===================================================================
--- utils/patch_6.2.conf        (revision 554)
+++ utils/patch_6.2.conf        (working copy)
@@ -384,6 +384,7 @@
 OP_ItemLinkText=0x0000
 OP_ClearObject=0x8258
 OP_DisciplineUpdate=0x7180
+OP_DisciplineTimer=0x53df
 OP_LocInfo=0x0000
 OP_FindPersonRequest=0x3c41            # ShowEQ 06/29/05
 OP_FindPersonReply=0x5711
Index: common/emu_oplist.h
===================================================================
--- common/emu_oplist.h (revision 554)
+++ common/emu_oplist.h (working copy)
@@ -433,4 +433,5 @@
 N(OP_PVPLeaderBoardReply),
 N(OP_PVPLeaderBoardDetailsRequest),
 N(OP_PVPLeaderBoardDetailsReply),
+N(OP_DisciplineTimer),

Index: common/eq_packet_structs.h
===================================================================
--- common/eq_packet_structs.h  (revision 554)
+++ common/eq_packet_structs.h  (working copy)
@@ -631,6 +631,7 @@


 static const uint32 MAX_PP_DISCIPLINES = 100;
+static const uint32 MAX_DISCIPLINE_TIMERS = 20;

 struct Disciplines_Struct {
        uint32 values[MAX_PP_DISCIPLINES];
@@ -3865,6 +3866,13 @@
 /*168*/
 };

+struct DisciplineTimer_Struct
+{
+/*00*/ uint32  TimerID;
+/*04*/ uint32  Duration;
+/*08*/ uint32  Unknown08;
+};
+
 //old structures live here:
 #include "eq_old_structs.h"

Index: zone/client_packet.cpp
===================================================================
--- zone/client_packet.cpp      (revision 554)
+++ zone/client_packet.cpp      (working copy)
@@ -7572,6 +7572,8 @@

        TotalKarma = database.GetKarma(AccountID());

+       SendDisciplineTimers();
+
 #ifdef EMBPERL
        ((PerlembParser *)parse)->Event(EVENT_ENTERZONE, 0, "", (NPC*)NULL, this);
 #endif
Index: zone/client.cpp
===================================================================
--- zone/client.cpp     (revision 554)
+++ zone/client.cpp     (working copy)
@@ -3961,3 +3961,24 @@
        QueuePacket(outapp);
        safe_delete(outapp);
 }
+
+void Client::SendDisciplineTimers()
+{
+
+       EQApplicationPacket *outapp = new EQApplicationPacket(OP_DisciplineTimer, sizeof(DisciplineTimer_Struct));
+       DisciplineTimer_Struct *dts = (DisciplineTimer_Struct *)outapp->pBuffer;
+
+       for(int i = 0; i < MAX_DISCIPLINE_TIMERS; ++i)
+       {
+               int32 RemainingTime = p_timers.GetRemainingTime(pTimerDisciplineReuseStart + i);
+
+               if(RemainingTime > 0)
+               {
+                       dts->TimerID = i;
+                       dts->Duration = RemainingTime;
+                       QueuePacket(outapp);
+               }
+       }
+
+       safe_delete(outapp);
+}
Index: zone/client.h
===================================================================
--- zone/client.h       (revision 554)
+++ zone/client.h       (working copy)
@@ -809,6 +809,7 @@
        void IncrementAggroCount();
        void DecrementAggroCount();
        void SendPVPStats();
+       void SendDisciplineTimers();

 protected:
        friend class Mob;
Index: zone/effects.cpp
===================================================================
--- zone/effects.cpp    (revision 553)
+++ zone/effects.cpp    (working copy)
@@ -676,6 +676,15 @@
        if(spell.recast_time > 0)
        {
                p_timers.Start(DiscTimer, spell.recast_time / 1000);
+               if(spells[spell_id].EndurTimerIndex < MAX_DISCIPLINE_TIMERS)
+               {
+                       EQApplicationPacket *outapp = new EQApplicationPacket(OP_DisciplineTimer, sizeof(DisciplineTimer_Struct));
+                       DisciplineTimer_Struct *dts = (DisciplineTimer_Struct *)outapp->pBuffer;
+                       dts->TimerID = spells[spell_id].EndurTimerIndex;
+                       dts->Duration = spell.recast_time / 1000;
+                       QueuePacket(outapp);
+                       safe_delete(outapp);
+               }
        }
        return(true);
 }
Reply With Quote
  #2  
Old 05-23-2009, 12:38 PM
KLS
Administrator
 
Join Date: Sep 2006
Posts: 1,348
Default

I'll take a look at it.
Reply With Quote
  #3  
Old 05-23-2009, 04:27 PM
demonstar55
Demi-God
 
Join Date: Apr 2008
Location: MA
Posts: 1,165
Default

From my small testing it seems to work nicely, didn't notice anything wrong with shared cool down timers, but then again I didn't testing it out all too much, really looking forward to this
Reply With Quote
  #4  
Old 05-23-2009, 05:03 PM
KLS
Administrator
 
Join Date: Sep 2006
Posts: 1,348
Default

Yeah, worked fine: I couldn't break it or anything.
Reply With Quote
  #5  
Old 05-23-2009, 05:09 PM
Derision
Developer
 
Join Date: Feb 2004
Location: UK
Posts: 1,540
Default

Quote:
Originally Posted by KLS View Post
Yeah, worked fine: I couldn't break it or anything.
Thanks for testing it (and Demonstar). Feel free to commit it if you want. I discovered my ADSL was meant to be upgraded from 7Mb/s to ADSL2+ (15Mb/s) on Friday, but evidently something went wrong. Dial-up really sucks. :(
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

   

All times are GMT -4. The time now is 12:57 PM.


 

Everquest is a registered trademark of Daybreak Game Company LLC.
EQEmulator is not associated or affiliated in any way with Daybreak Game Company LLC.
Except where otherwise noted, this site is licensed under a Creative Commons License.
       
Powered by vBulletin®, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3