mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-19 13:28:25 +00:00
[Spells] Major update to Bard song pulsing, Bard item clicks while singing, and spell casting restriction logic. (#1954)
* test * complete * Update effects.cpp * Update spells.cpp * Update effects.cpp * [Spells] Support for bards using Disciplines while casting or /melody. Support for spell field 'cast not standing' not allow casting from divine aura * [Spells] Support for bards using Disciplines while casting or /melody. DA bypass logic for spells with field 'cast_not_standing' * updates * stun and mez bypass * Update spdat.cpp * Update spdat.cpp * Update spells.cpp * clean * requirement messages * update * pct * save work * Reform code 1_22_22 * updated * update id to pointer * Update spells.cpp * rework 2 * update 1_23_22 * Update spells.cpp * updates * msg string works * fix disc timers not be set * more optimization * update 1_23_22 PM moved stop casting out charm and harmony moved in * update 1_25_22 rework of functions * updates 1_26_22 * remove old checks * gm override added for some * update bard AA casting checks * updates * addbuff exception for bard * debugs * charm working * update * moved skill check here * cast from item while singing * lets not attack mounts * instant cast items click * aug clicks working * aug tests Bug? Cast time not display on aug clicks for bards * aug recast from items semi ok * added item timer function * unified setting item recast timer * clean up time * update * bard AA cast updates * debugs removed * debugs removed * clean up * clean up * better placement of bindsight and numhits fix * move and rename function * Update spells.cpp * add logs * delete old DoCastingChecks * Removed old bard pulse functions * remove AEBardPulse and GroupPulse * removed Raid::GroupBardPulse * Pulse Restriction: Divine Aura * Pulse Restrictions : Fear behavior * Update spells.cpp * Update spells.cpp * [Spells] Major update to Bard song pulsing, Bard item clicks while singing, and spell casting restriction logic. bots... * [Spells] Major update to Bard song pulsing, Bard item clicks while singing, and spell casting restriction logic. added recommended isvalidspell check * [Spells] Major update to Bard song pulsing, Bard item clicks while singing, and spell casting restriction logic. merged * [Spells] Major update to Bard song pulsing, Bard item clicks while singing, and spell casting restriction logic. removed defines since we have them as constants
This commit is contained in:
+41
-16
@@ -4053,7 +4053,6 @@ void Client::Handle_OP_CastSpell(const EQApplicationPacket *app)
|
||||
{
|
||||
EQ::ItemInstance* p_inst = (EQ::ItemInstance*)inst;
|
||||
int i = parse->EventItem(EVENT_ITEM_CLICK_CAST, this, p_inst, nullptr, "", castspell->inventoryslot);
|
||||
|
||||
if (i == 0) {
|
||||
CastSpell(item->Click.Effect, castspell->target_id, slot, item->CastTime, 0, 0, castspell->inventoryslot);
|
||||
}
|
||||
@@ -8791,6 +8790,7 @@ void Client::Handle_OP_ItemVerifyRequest(const EQApplicationPacket *app)
|
||||
}
|
||||
|
||||
spell_id = item->Click.Effect;
|
||||
bool is_casting_bard_song = false;
|
||||
|
||||
if
|
||||
(
|
||||
@@ -8812,10 +8812,20 @@ void Client::Handle_OP_ItemVerifyRequest(const EQApplicationPacket *app)
|
||||
)
|
||||
)
|
||||
{
|
||||
SendSpellBarEnable(spell_id);
|
||||
return;
|
||||
/*
|
||||
Bards on live can click items while casting spell gems, it stops that song cast and replaces it with item click cast.
|
||||
Can not click while casting other items.
|
||||
*/
|
||||
if (GetClass() == BARD && IsCasting() && casting_spell_slot < CastingSlot::MaxGems)
|
||||
{
|
||||
is_casting_bard_song = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
SendSpellBarEnable(spell_id);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Modern clients don't require pet targeted for item clicks that are ST_Pet
|
||||
if (spell_id > 0 && (spells[spell_id].target_type == ST_Pet || spells[spell_id].target_type == ST_SummonedPet))
|
||||
target_id = GetPetID();
|
||||
@@ -8903,11 +8913,16 @@ void Client::Handle_OP_ItemVerifyRequest(const EQApplicationPacket *app)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (i == 0) {
|
||||
if (!IsCastWhileInvis(item->Click.Effect))
|
||||
if (!IsCastWhileInvis(item->Click.Effect)) {
|
||||
CommonBreakInvisible(); // client can't do this for us :(
|
||||
CastSpell(item->Click.Effect, target_id, CastingSlot::Item, item->CastTime, 0, 0, slot_id);
|
||||
}
|
||||
if (GetClass() == BARD){
|
||||
DoBardCastingFromItemClick(is_casting_bard_song, item->CastTime, item->Click.Effect, target_id, CastingSlot::Item, slot_id, item->RecastType, item->RecastDelay);
|
||||
}
|
||||
else {
|
||||
CastSpell(item->Click.Effect, target_id, CastingSlot::Item, item->CastTime, 0, 0, slot_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -8944,9 +8959,15 @@ void Client::Handle_OP_ItemVerifyRequest(const EQApplicationPacket *app)
|
||||
}
|
||||
|
||||
if (i == 0) {
|
||||
if (!IsCastWhileInvis(augitem->Click.Effect))
|
||||
if (!IsCastWhileInvis(augitem->Click.Effect)) {
|
||||
CommonBreakInvisible(); // client can't do this for us :(
|
||||
CastSpell(augitem->Click.Effect, target_id, CastingSlot::Item, augitem->CastTime, 0, 0, slot_id);
|
||||
}
|
||||
if (GetClass() == BARD) {
|
||||
DoBardCastingFromItemClick(is_casting_bard_song, augitem->CastTime, augitem->Click.Effect, target_id, CastingSlot::Item, slot_id, augitem->RecastType, augitem->RecastDelay);
|
||||
}
|
||||
else {
|
||||
CastSpell(augitem->Click.Effect, target_id, CastingSlot::Item, augitem->CastTime, 0, 0, slot_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -9552,16 +9573,20 @@ void Client::Handle_OP_ManaChange(const EQApplicationPacket *app)
|
||||
{
|
||||
if (app->size == 0) {
|
||||
// i think thats the sign to stop the songs
|
||||
if (IsBardSong(casting_spell_id) || bardsong != 0)
|
||||
InterruptSpell(SONG_ENDS, 0x121);
|
||||
else
|
||||
if (IsBardSong(casting_spell_id) || HasActiveSong()) {
|
||||
InterruptSpell(SONG_ENDS, 0x121); //Live doesn't send song end message anymore (~Kayen 1/26/22)
|
||||
}
|
||||
else {
|
||||
InterruptSpell(INTERRUPT_SPELL, 0x121);
|
||||
|
||||
}
|
||||
return;
|
||||
}
|
||||
else // I don't think the client sends proper manachanges
|
||||
{ // with a length, just the 0 len ones for stopping songs
|
||||
//ManaChange_Struct* p = (ManaChange_Struct*)app->pBuffer;
|
||||
/*
|
||||
I don't think the client sends proper manachanges
|
||||
with a length, just the 0 len ones for stopping songs
|
||||
ManaChange_Struct* p = (ManaChange_Struct*)app->pBuffer;
|
||||
*/
|
||||
else{
|
||||
printf("OP_ManaChange from client:\n");
|
||||
DumpPacket(app);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user