diff --git a/changelog.txt b/changelog.txt index 6d596a646..2a9dfb762 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,5 +1,9 @@ EQEMu Changelog (Started on Sept 24, 2003 15:50) ------------------------------------------------------- +== 11/22/2014 == +Trevius: Grouping with Mercenaries is now considerably less buggy. +Trevius: Fixed an issue with Spell Globals related to high Character IDs. + == 11/19/2014 == Trevius: Mercenaries now Dismiss, Suspend, Unsuspend, and Die correctly. diff --git a/utils/patches/patch_RoF.conf b/utils/patches/patch_RoF.conf index 97098946d..027eac161 100644 --- a/utils/patches/patch_RoF.conf +++ b/utils/patches/patch_RoF.conf @@ -514,8 +514,8 @@ OP_LFGAppearance=0x0000 OP_LFGResponse=0x0000 # Raid Opcodes -OP_RaidInvite=0x1bd1 -OP_RaidUpdate=0x548e +OP_RaidInvite=0x5fb2 +OP_RaidUpdate=0x1bd1 OP_RaidJoin=0x0000 # Button-push commands diff --git a/zone/client.cpp b/zone/client.cpp index f555a26e8..9b10cb174 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -3872,11 +3872,11 @@ void Client::SendOPTranslocateConfirm(Mob *Caster, uint16 SpellID) { PendingTranslocateData.heading = m_pp.binds[0].heading; } else { - ts->ZoneID = database.GetZoneID(Spell.teleport_zone); + PendingTranslocateData.zone_id = ts->ZoneID = database.GetZoneID(Spell.teleport_zone); PendingTranslocateData.instance_id = 0; - ts->y = Spell.base[0]; - ts->x = Spell.base[1]; - ts->z = Spell.base[2]; + PendingTranslocateData.y = ts->y = Spell.base[0]; + PendingTranslocateData.x = ts->x = Spell.base[1]; + PendingTranslocateData.z = ts->z = Spell.base[2]; PendingTranslocateData.heading = 0.0; } diff --git a/zone/client.h b/zone/client.h index 72e69e8eb..3e54771ad 100644 --- a/zone/client.h +++ b/zone/client.h @@ -874,6 +874,7 @@ void SetConsumption(int32 in_hunger, int32 in_thirst); void DropInst(const ItemInst* inst); bool TrainDiscipline(uint32 itemid); void SendDisciplineUpdate(); + void SendDisciplineTimer(uint32 timer_id, uint32 duration); bool UseDiscipline(uint32 spell_id, uint32 target); bool CheckTitle(int titleset); diff --git a/zone/effects.cpp b/zone/effects.cpp index 7506f99cf..0bface8b7 100644 --- a/zone/effects.cpp +++ b/zone/effects.cpp @@ -696,16 +696,7 @@ bool Client::UseDiscipline(uint32 spell_id, uint32 target) { return true; } - CastSpell(spell_id, target, DISCIPLINE_SPELL_SLOT, -1, -1, 0, -1, (uint32)DiscTimer, reduced_recast); - 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 = reduced_recast; - QueuePacket(outapp); - safe_delete(outapp); - } + SendDisciplineTimer(spells[spell_id].EndurTimerIndex, reduced_recast); } else { @@ -714,6 +705,19 @@ bool Client::UseDiscipline(uint32 spell_id, uint32 target) { return(true); } +void Client::SendDisciplineTimer(uint32 timer_id, uint32 duration) +{ + if (timer_id < MAX_DISCIPLINE_TIMERS) + { + EQApplicationPacket *outapp = new EQApplicationPacket(OP_DisciplineTimer, sizeof(DisciplineTimer_Struct)); + DisciplineTimer_Struct *dts = (DisciplineTimer_Struct *)outapp->pBuffer; + dts->TimerID = timer_id; + dts->Duration = duration; + QueuePacket(outapp); + safe_delete(outapp); + } +} + void EntityList::AETaunt(Client* taunter, float range) { if (range == 0)