From 6c7a4edae366b179e4d4d462cd2f080fce192a27 Mon Sep 17 00:00:00 2001 From: KayenEQ Date: Fri, 14 Nov 2014 00:23:26 -0500 Subject: [PATCH 1/3] Support for spell field to determine if a spell can be blocked or not. Numerous other spell fields defined. Required sql added for updating spells_new field definations. --- common/shareddb.cpp | 3 +++ common/spdat.h | 10 +++++++--- .../sql/git/required/2014_11_13_spells_new_updates.sql | 9 +++++++++ zone/client_packet.cpp | 4 ++-- zone/string_ids.h | 1 + 5 files changed, 22 insertions(+), 5 deletions(-) create mode 100644 utils/sql/git/required/2014_11_13_spells_new_updates.sql diff --git a/common/shareddb.cpp b/common/shareddb.cpp index 1f30a3481..b0f29c74b 100644 --- a/common/shareddb.cpp +++ b/common/shareddb.cpp @@ -1526,6 +1526,7 @@ void SharedDatabase::LoadSpells(void *data, int max_spells) { sp[tempid].CastingAnim=atoi(row[120]); sp[tempid].SpellAffectIndex=atoi(row[123]); sp[tempid].disallow_sit=atoi(row[124]); + sp[tempid].diety_agnostic=atoi(row[125]); for (y = 0; y < 16; y++) sp[tempid].deities[y]=atoi(row[126+y]); @@ -1544,6 +1545,7 @@ void SharedDatabase::LoadSpells(void *data, int max_spells) { sp[tempid].reflectable = atoi(row[161]) != 0; sp[tempid].bonushate=atoi(row[162]); + sp[tempid].ldon_trap = atoi(row[165]) != 0; sp[tempid].EndurCost=atoi(row[166]); sp[tempid].EndurTimerIndex=atoi(row[167]); sp[tempid].IsDisciplineBuff = atoi(row[168]) != 0; @@ -1568,6 +1570,7 @@ void SharedDatabase::LoadSpells(void *data, int max_spells) { sp[tempid].not_extendable = atoi(row[197]) != 0; sp[tempid].suspendable = atoi(row[200]) != 0; sp[tempid].viral_range = atoi(row[201]); + sp[tempid].no_block = atoi(row[205]); sp[tempid].spellgroup=atoi(row[207]); sp[tempid].rank = atoi(row[208]); sp[tempid].powerful_flag=atoi(row[209]); diff --git a/common/spdat.h b/common/spdat.h index 410269813..19f2394c9 100644 --- a/common/spdat.h +++ b/common/spdat.h @@ -676,7 +676,7 @@ struct SPDat_Spell_Struct /* 122 */ //uint32 TravelType; /* 123 */ uint16 SpellAffectIndex; /* 124 */ int8 disallow_sit; // 124: high-end Yaulp spells (V, VI, VII, VIII [Rk 1, 2, & 3], & Gallenite's Bark of Fury -/* 125 */ // 125: Words of the Skeptic +/* 125 */ int8 diety_agnostic;// 125: Words of the Skeptic /* 126 */ int8 deities[16]; // Deity check. 201 - 216 per http://www.eqemulator.net/wiki/wikka.php?wakka=DeityList // -1: Restrict to Deity; 1: Restrict to Deity, but only used on non-Live (Test Server "Blessing of ...") spells; 0: Don't restrict /* 142 */ // 142: between 0 & 100 @@ -700,6 +700,7 @@ struct SPDat_Spell_Struct /* 162 */ int bonushate; /* 163 */ /* 164 */ // for most spells this appears to mimic ResistDiff +/* 165 */ bool ldon_trap; //Flag found on all LDON trap / chest related spells. /* 166 */ int EndurCost; /* 167 */ int8 EndurTimerIndex; /* 168 */ bool IsDisciplineBuff; //Will goto the combat window when cast @@ -712,7 +713,8 @@ struct SPDat_Spell_Struct /* 178 */ int pvpresistcalc; /* 179 */ int pvpresistcap; /* 180 */ int spell_category; -/* 181 */ +/* 181 */ //unknown - likely buff duration related +/* 182 */ //unknown - likely buff duration related /* 185 */ int8 can_mgb; // 0=no, -1 or 1 = yes /* 186 */ int dispel_flag; /* 189 */ int MinResist; @@ -729,7 +731,9 @@ struct SPDat_Spell_Struct /* 201 */ int viral_range; /* 202 */ /* 203 */ //int songcap; // individual song cap (how live currently does it, not implemented) -/* 204 - 206 */ +/* 204 */ +/* 205 */ bool no_block; +/* 206 */ /* 207 */ int spellgroup; /* 208 */ int rank; //increments AA effects with same name /* 209 */ int powerful_flag; // Need more investigation to figure out what to call this, for now we know -1 makes charm spells not break before their duration is complete, it does alot more though diff --git a/utils/sql/git/required/2014_11_13_spells_new_updates.sql b/utils/sql/git/required/2014_11_13_spells_new_updates.sql new file mode 100644 index 000000000..310a3de15 --- /dev/null +++ b/utils/sql/git/required/2014_11_13_spells_new_updates.sql @@ -0,0 +1,9 @@ +-- spells new table update +ALTER TABLE `spells_new` CHANGE `field124` `disallow_sit` INT(11) NOT NULL DEFAULT '0'; +ALTER TABLE `spells_new` CHANGE `field124` `deities0` INT(11) NOT NULL DEFAULT '0'; +ALTER TABLE `spells_new` CHANGE `field196` `sneaking` INT(11) NOT NULL DEFAULT '0'; +ALTER TABLE `spells_new` CHANGE `field158` `effectdescnum2` INT(11) NOT NULL DEFAULT '0'; +ALTER TABLE `spells_new` CHANGE `field165` `ldon_trap` INT(11) NOT NULL DEFAULT '0'; +ALTER TABLE `spells_new` CHANGE `field205` `no_block` INT(11) NOT NULL DEFAULT '0'; + + diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index 474e66031..63e507162 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -3770,7 +3770,7 @@ void Client::Handle_OP_BlockedBuffs(const EQApplicationPacket *app) for (unsigned int i = 0; i < BLOCKED_BUFF_COUNT; ++i) { - if ((bbs->SpellID[i] > 0) && IsBeneficialSpell(bbs->SpellID[i])) + if ((IsValidSpell(bbs->SpellID[i])) && IsBeneficialSpell(bbs->SpellID[i]) && !spells[bbs->SpellID[i]].no_block) { if (BlockedBuffs->find(bbs->SpellID[i]) == BlockedBuffs->end()) BlockedBuffs->insert(bbs->SpellID[i]); @@ -3818,7 +3818,7 @@ void Client::Handle_OP_BlockedBuffs(const EQApplicationPacket *app) for (unsigned int i = 0; i < BLOCKED_BUFF_COUNT; ++i) { - if (!IsBeneficialSpell(bbs->SpellID[i])) + if (!IsValidSpell(bbs->SpellID[i]) || !IsBeneficialSpell(bbs->SpellID[i]) || spells[bbs->SpellID[i]].no_block) continue; if ((BlockedBuffs->size() < BLOCKED_BUFF_COUNT) && (BlockedBuffs->find(bbs->SpellID[i]) == BlockedBuffs->end())) diff --git a/zone/string_ids.h b/zone/string_ids.h index a12b8640e..57711a40d 100644 --- a/zone/string_ids.h +++ b/zone/string_ids.h @@ -299,6 +299,7 @@ #define SENTINEL_TRIG_YOU 6724 //You have triggered your sentinel. #define SENTINEL_TRIG_OTHER 6725 //%1 has triggered your sentinel. #define IDENTIFY_SPELL 6765 //Item Lore: %1. +#define BUFF_NOT_BLOCKABLE 7608 //You cannot block this effect. #define LDON_DONT_KNOW_TRAPPED 7552 //You do not know if this object is trapped. #define LDON_HAVE_DISARMED 7553 //You have disarmed %1! #define LDON_ACCIDENT_SETOFF 7554 //You accidentally set off the trap! From 4a26466b2baf622b3187b0ab1efbc54f176f676b Mon Sep 17 00:00:00 2001 From: KayenEQ Date: Fri, 14 Nov 2014 00:26:14 -0500 Subject: [PATCH 2/3] add --- common/spdat.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/common/spdat.h b/common/spdat.h index 19f2394c9..ed8a86e20 100644 --- a/common/spdat.h +++ b/common/spdat.h @@ -715,8 +715,12 @@ struct SPDat_Spell_Struct /* 180 */ int spell_category; /* 181 */ //unknown - likely buff duration related /* 182 */ //unknown - likely buff duration related +/* 183 */ +/* 184 */ /* 185 */ int8 can_mgb; // 0=no, -1 or 1 = yes /* 186 */ int dispel_flag; +/* 187 */ //int npc_category; +/* 188 */ //int npc_usefulness; /* 189 */ int MinResist; /* 190 */ int MaxResist; /* 191 */ uint8 viral_targets; From cbc8e652b9fbfda38fcbc38fee12e0975f24ab00 Mon Sep 17 00:00:00 2001 From: KayenEQ Date: Fri, 14 Nov 2014 00:34:17 -0500 Subject: [PATCH 3/3] fix --- utils/sql/git/required/2014_11_13_spells_new_updates.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/sql/git/required/2014_11_13_spells_new_updates.sql b/utils/sql/git/required/2014_11_13_spells_new_updates.sql index 310a3de15..a3863cbd8 100644 --- a/utils/sql/git/required/2014_11_13_spells_new_updates.sql +++ b/utils/sql/git/required/2014_11_13_spells_new_updates.sql @@ -1,6 +1,6 @@ -- spells new table update ALTER TABLE `spells_new` CHANGE `field124` `disallow_sit` INT(11) NOT NULL DEFAULT '0'; -ALTER TABLE `spells_new` CHANGE `field124` `deities0` INT(11) NOT NULL DEFAULT '0'; +ALTER TABLE `spells_new` CHANGE `field125` `deities0` INT(11) NOT NULL DEFAULT '0'; ALTER TABLE `spells_new` CHANGE `field196` `sneaking` INT(11) NOT NULL DEFAULT '0'; ALTER TABLE `spells_new` CHANGE `field158` `effectdescnum2` INT(11) NOT NULL DEFAULT '0'; ALTER TABLE `spells_new` CHANGE `field165` `ldon_trap` INT(11) NOT NULL DEFAULT '0';