Branks
08-01-2004, 02:41 PM
hi, ive kinda made it a goal of mine to fix AA as a means of learning to program, im posting so that anyone else thats been working on them as well may post their progress so i dont have to do something thats already been done, and so that others may notice problems in what ive corrected so far.
anyway ive corrected quite a few but i need some help on the more complex ones such as wake the dead and doppelganger, so im hoping someone else may have already made some progress on those or others and would like to share.
also let me say sorry for deleting the exsisting comments in eq_packet_structs.h as ive been useing that as a checklist of sorta, also while working with these i discovered a tons of little errors and exploits, the biggest of which were that the entire AA table was off by one so checks for innate STA were actually checking innate STR, also with the way AA were set up i found a huge exploit allowing any character to have any AA skill at any time, thats been corrected however another huge problem is that the AA timers dont seem to be working at all, so i need to ask if they ever were to begin with or maybe my database or something ive done has broken them, these all work with the latest CVS 07-31-04 and the latest spells_us.txt from sony, although some of the spells themselves arent correct so druid dire charm does not check if the target is an animal, can correct this in your own spells_us.txt or ill eventually do it in the code for the skill itself i guess.
PROS- most targeted AAs work, if your database is setup correctly with the correct max level and the cost of the FIRST purchase of a skill the buy ammount is correct in that it doubles when needed 2-4-6 etc, i fixed the exploit i found. i also threw in the timer mods for skill reuse AAs, and i put in a message to client for my own testing purposes so youll have to delete those as needed
CONS- THIS WILL DELETE ALL EXSISTING AA SKILLS AND POINTS FROM ALL CHARACTERS on your server, and none are really usefull to legit servers since currently the AA timer is not working, for me atleast
uhh also im not sure how to post all this without it useing word wrap or whatever so this might be messy but oh well...
zone\command.cpp around line 4748
replace exsisintg with-
void command_manaburn(Client *c, const Seperator *sep)
{
Mob* target=c->GetTarget();
if (c->GetTarget() == 0)
c->Message(0, "#Manaburn needs a target.");
else {
int cur_level=c->GetAAStruct()->god_ability.named.mana_burn;
if (c->DistNoRootNoZ(*target) > 200)
c->Message(0,"You are too far away from your target.");
else {
if(cur_level == 1) {
if(c->IsAttackAllowed(target))
{
int nukedmg=(c->GetMana())*2;
if (nukedmg>0)
{
target->Damage(c, nukedmg, 2751,240);
c->SetMana(0);
}
LogFile->write(EQEMuLog::Normal,"Manaburn request from %s, damage: %d", c->GetName(), nukedmg);
}
}
else
c->Message(0, "You have not learned this skill.");
}
}
}
common\eq_packet_structs.h around line 3142
replace exsisintg with-
// New Alternate Advancement table. holds all the skill levels for the AA skills.
// Length: 309 Bytes
// OpCode: 1422
struct PlayerAA_Struct {
/* 0 */ uint8 unknown0;
union {
uint8 unnamed[17];
struct {
/* 1 */ uint8 innate_strength; //works
/* 2 */ uint8 innate_stamina; //works
/* 3 */ uint8 innate_agility; //works
/* 4 */ uint8 innate_dexterity; //works
/* 5 */ uint8 innate_intelligence; //works
/* 6 */ uint8 innate_wisdom; //works
/* 7 */ uint8 innate_charisma; //works
/* 8 */ uint8 innate_fire_protection; //works
/* 9 */ uint8 innate_cold_protection; //works
/* 10 */ uint8 innate_magic_protection; //works
/* 11 */ uint8 innate_poison_protection; //works
/* 12 */ uint8 innate_disease_protection; //works
/* 13 */ uint8 innate_run_speed; //works, 3 levs
/* 14 */ uint8 unknown14; //was regeneration
/* 15 */ uint8 innate_metabolism; //dont know, 3 levs
/* 16 */ uint8 innate_lung_capacity; //dont know, 3 levs
/* 17 */ uint8 first_aid; //dont know, 3 levs
} named;
} general_skills;
union {
uint8 unnamed[17];
struct {
/* 18 */ uint8 healing_adept; //works
/* 19 */ uint8 healing_gift; //works
/* 20 */ uint8 spell_casting_mastery; //dont know,
/* 21 */ uint8 spell_casting_reinforcement; //dont know,
/* 22 */ uint8 unknown22; //was mental clarity
/* 23 */ uint8 spell_casting_fury; //works
/* 24 */ uint8 chanelling_focus; //dont know,
/* 25 */ uint8 spell_casting_subtlety; //dont know,
/* 26 */ uint8 spell_casting_expertise; //dont know,
/* 27 */ uint8 spell_casting_deftness; //works
/* 28 */ uint8 natural_durability; //works
/* 29 */ uint8 natural_healing; //works
/* 30 */ uint8 combat_fury; //dont know,
/* 31 */ uint8 fear_resistance; //works
/* 32 */ uint8 finishing_blow; //dont know,
/* 33 */ uint8 combat_stability; //dont know,
/* 34 */ uint8 combat_agility; //dont know,
} named;
} archetype_skills;
union {
uint8 unnamed[94];
struct {
/* 35 */ uint8 mass_group_buff; //works lil off
// ===== Cleric =====
/* 36 */ uint8 divine_resurrection; //works
/* 37 */ uint8 innate_invis_to_undead; //works
/* 38 */ uint8 celestial_regeneration; //works
/* 39 */ uint8 bestow_divine_aura; //works
/* 40 */ uint8 turn_undead; //Spell Buggy
/* 41 */ uint8 purify_soul; //works but buggy
// ===== Druid =====
/* 42 */ uint8 quick_evacuation; //works
/* 43 */ uint8 exodus; //works
/* 44 */ uint8 quick_damage; //works
/* 45 */ uint8 enhanced_root; //dont know
/* 46 */ uint8 dire_charm; //works lil off
// ===== Shaman =====
/* 47 */ uint8 cannibalization; //works
/* 48 */ uint8 quick_buff; //dont know, 3 levs
/* 49 */ uint8 alchemy_mastery; //dont know
/* 50 */ uint8 rabid_bear; //works
// ===== Wizard =====
/* 51 */ uint8 unknown51; //used to be manaburn
/* 52 */ uint8 improved_familiar; //works
/* 53 */ uint8 nexus_gate; //works
// ===== Enchanter =====
/* 54 */ uint8 unknown54;
/* 55 */ uint8 permanent_illusion; //dont know
/* 56 */ uint8 jewel_craft_mastery; //dont know, 3 levs
/* 57 */ uint8 gather_mana; //works
// ===== Mage =====
/* 58 */ uint8 mend_companion; //Works
/* 59 */ uint8 quick_summoning; //dont know
/* 60 */ uint8 frenzied_burnout; //not working-spell buggy
/* 61 */ uint8 elemental_form_fire; //Works
/* 62 */ uint8 elemental_form_water; //Works
/* 63 */ uint8 elemental_form_earth; //Works
/* 64 */ uint8 elemental_form_air; //Works
/* 65 */ uint8 unknown65; //was improved reclaim energy
/* 66 */ uint8 turn_summoned; //Spell Buggy
/* 67 */ uint8 elemental_pact; //dont know
// ===== Necromancer =====
/* 68 */ uint8 life_burn; //works
/* 69 */ uint8 dead_mesmerization; //dont know
/* 70 */ uint8 fearstorm; //works
/* 71 */ uint8 flesh_to_bone; //not working
/* 72 */ uint8 call_to_corpse; //works but self only
// ===== Paladin =====
/* 73 */ uint8 divine_stun; //works
/* 74 */ uint8 improved_lay_of_hands; //dont know
/* 75 */ uint8 slay_undead; //dont know, 3 levs
/* 76 */ uint8 act_of_valor; //works
/* 77 */ uint8 holy_steed; //works but default fast horse
/* 78 */ uint8 fearless; //works
/* 79 */ uint8 two_hand_bash; //dont know
// ===== Ranger =====
/* 80 */ uint8 innate_camouflage; //works
/* 81 */ uint8 ambidexterity; //works
/* 82 */ uint8 archery_mastery; //works
/* 83 */ uint8 unknown83;
/* 84 */ uint8 endless_quiver; //works
// ===== Shadow Knight =====
/* 85 */ uint8 unholy_steed; //works but just a default fast horse~
/* 86 */ uint8 improved_harm_touch; //dont know, can fix
/* 87 */ uint8 leech_touch; //works
/* 88 */ uint8 unknown88;
/* 89 */ uint8 soul_abrasion; //works
// ===== Bard =====
/* 90 */ uint8 instrument_mastery; //dont know, 3 levs
/* 91 */ uint8 unknown91;
/* 92 */ uint8 unknown92;
/* 93 */ uint8 unknown93;
/* 94 */ uint8 jam_fest; //dont know, 3 levs
/* 95 */ uint8 unknown95;
/* 96 */ uint8 unknown96;
// ===== Monk =====
/* 97 */ uint8 critical_mend; //dont know, 3 levs
/* 98 */ uint8 purify_body; //dont know
/* 99 */ uint8 unknown99;
/* 100 */ uint8 rapid_feign; //dont know, 3 levs
/* 101 */ uint8 return_kick; //dont know, 3 levs
// ===== Rogue =====
/* 102 */ uint8 escape; //works
/* 103 */ uint8 poison_mastery; //dont know, 3 levs
/* 104 */ uint8 double_riposte; //dont know, 3 levs
/* 105 */ uint8 unknown105;
/* 106 */ uint8 unknown106;
/* 107 */ uint8 purge_poison; //works
// ===== Warrior =====
/* 108 */ uint8 flurry; //works
/* 109 */ uint8 rampage; //works
/* 110 */ uint8 area_taunt; //works
/* 111 */ uint8 warcry; //spell error
/* 112 */ uint8 bandage_wound; //dont know, 3 levs
// ===== (Other) =====
/* 113 */ uint8 spell_casting_reinforcement_mastery; //dont know
/* 114 */ uint8 spell_casting_fury_mastery; //works
/* 115 */ uint8 unknown115; //was extended notes
/* 116 */ uint8 dragon_punch; //dont know
/* 117 */ uint8 strong_root; //works
/* 118 */ uint8 singing_mastery; //dont know, 3 levs
/* 119 */ uint8 body_and_mind_rejuvenation; //not working
/* 120 */ uint8 physical_enhancement; //dont know
/* 121 */ uint8 adv_trap_negotiation; //dont know, 3 levs
/* 122 */ uint8 acrobatics; //dont know, 3 levs
/* 123 */ uint8 scribble_notes; //dont know
/* 124 */ uint8 chaotic_stab; //dont know
/* 125 */ uint8 pet_discipline; //not working
/* 126 */ uint8 hobble_of_spirits; //works
/* 127 */ uint8 frenzy_of_spirit; //works
/* 128 */ uint8 paragon_of_spirit; //works
} named;
} class_skills;
union {
uint8 unnamed[15];
struct {
/* 129 */ uint8 advanced_innate_strength; //works
/* 130 */ uint8 advanced_innate_stamina; //works
/* 131 */ uint8 advanced_innate_agility; //works
/* 132 */ uint8 advanced_innate_dexterity; //works
/* 133 */ uint8 advanced_innate_intelligence; //works
/* 134 */ uint8 advanced_innate_wisdom; //works
/* 135 */ uint8 advanced_innate_charisma; //works
/* 136 */ uint8 warding_of_solusek; //works
/* 137 */ uint8 blessing_of_eci; //works
/* 138 */ uint8 marrs_protection; //works
/* 139 */ uint8 shroud_of_the_faceless; //works
/* 140 */ uint8 bertoxxulous_gift; //works
/* 141 */ uint8 new_tanaan_crafting_mastery; //dont know
/* 142 */ uint8 planar_power; //works
/* 143 */ uint8 planar_durability; //works
} named;
} pop_advance;
union {
uint8 unnamed[77];
struct {
/* 144 */ uint8 innate_enlightenment; //works
/* 145 */ uint8 unknown145;
/* 146 */ uint8 advanced_healing_adept; //works
/* 147 */ uint8 advanced_healing_gift; //works
/* 148 */ uint8 coup_de_grace; //dont know, 3 levs
/* 149 */ uint8 fury_of_the_ages; //dont know, 3 levs
/* 150 */ uint8 mastery_of_the_past; //dont know, 3 levs
/* 151 */ uint8 lightning_reflexes; //dont know, 5 levs
/* 152 */ uint8 innate_defense; //dont know, 5 levs
/* 153 */ uint8 radiant_cure; //Works spell buggy
/* 154 */ uint8 hastened_divinity; //Works
/* 155 */ uint8 hastened_turning; //Works
/* 156 */ uint8 hastened_purification_of_the_soul; //Works
/* 157 */ uint8 hastened_gathering; //Works
/* 158 */ uint8 hastened_rabidity; //works
/* 159 */ uint8 hastened_exodus; //works
/* 160 */ uint8 hastened_root; //works
/* 161 */ uint8 hastened_mending; //Works
/* 162 */ uint8 hastened_banishment; //Works
/* 163 */ uint8 hastened_instigation; //Works
/* 164 */ uint8 furious_rampage; //Works
/* 165 */ uint8 hastened_purification_of_the_body; //works
/* 166 */ uint8 hasty_exit; //works
/* 167 */ uint8 hastened_purification; //works
/* 168 */ uint8 flash_of_steel; //dont know, 3 levs, addon buff
/* 169 */ uint8 divine_arbitration; //spell error
/* 170 */ uint8 wrath_of_the_wild; //works
/* 171 */ uint8 virulent_paralysis; //works
/* 172 */ uint8 harvest_of_druzzil; //works
/* 173 */ uint8 eldritch_rune; //Works
/* 174 */ uint8 servant_of_ro; //works
/* 175 */ uint8 wake_the_dead; //works
/* 176 */ uint8 suspended_minion; //Spell errors
/* 177 */ uint8 spirit_call; //works
/* 178 */ uint8 celestial_renewal; //Works
/* 179 */ uint8 allegiant_familiar; //works
/* 180 */ uint8 hand_of_piety; //works
/* 181 */ uint8 mithaniels_binding; //dont know, 2 levs
/* 182 */ uint8 mending_of_the_tranquil; //dont know, 3 levs
/* 183 */ uint8 raging_flurry; //dont know, 3 levs, addon buff
/* 184 */ uint8 guardian_of_the_forest; //works
/* 185 */ uint8 spirit_of_the_wood; //works
/* 186 */ uint8 bestial_frenzy; //dont know, 5 levs
/* 187 */ uint8 harmonious_attack; //dont know, 5 levs
/* 188 */ uint8 knights_advantage; //dont know, 3 levs
/* 189 */ uint8 ferocity; //dont know, 3 levs
/* 190 */ uint8 viscid_roots; //dont know
/* 191 */ uint8 unknown191;
/* 192 */ uint8 ayonaes_tutelage; //dont know, 3 levs
/* 193 */ uint8 feigned_minion; //dont know, 3 levs
/* 194 */ uint8 unfailing_divinity; //dont know, 3 levs
/* 195 */ uint8 animation_empathy; //dont know, 3 levs
/* 196 */ uint8 rush_to_judgment; //works
/* 197 */ uint8 living_shield; //dont know, 3 levs, disc reuse buff
/* 198 */ uint8 consumption_of_the_soul; //dont know, 3 levs, addon
/* 199 */ uint8 boastful_bellow; //works
/* 200 */ uint8 fervent_blessing; //dont know, 3 levs, reuse skill 12 minutes each
/* 201 */ uint8 touch_of_the_wicked; //dont know, 3 levs, reuse buff 12 minutes each
/* 202 */ uint8 punishing_blade; //dont know, 3 levs
/* 203 */ uint8 speed_of_the_knight; //dont know, 3 levs
/* 204 */ uint8 shround_of_stealth; //dont know
/* 205 */ uint8 nimble_evasion; //dont know, 5 levs
/* 206 */ uint8 technique_of_master_wu; //dont know, 5 levs
/* 207 */ uint8 host_of_the_elements; //works
/* 208 */ uint8 call_of_xuzl; //works
/* 209 */ uint8 hastened_stealth; //works
/* 210 */ uint8 ingenuity; //dont know, 3 levs
/* 211 */ uint8 fleet_of_foot; //dont know, 2 levs
/* 212 */ uint8 fading_memories; //works
/* 213 */ uint8 tactical_mastery; //dont know, 3 levs
/* 214 */ uint8 theft_of_life; //works
/* 215 */ uint8 fury_of_magic; //works cleric
/* 216 */ uint8 fury_of_magic_mastery; //works
/* 217 */ uint8 project_illusion; //spell error
/* 218 */ uint8 headshot; //works
/* 219 */ uint8 entrap; //works
/* 220 */ uint8 unholy_touch; //dont know, 3 levs, addon
} named;
} pop_ability;
union {
uint8 unnamed[89];
struct {
/* 221 */ uint8 total_domination; //dont know, 3 levs
/* 222 */ uint8 stalwart_endurance; //dont know, 3 levs
/* 223 */ uint8 quick_summoning; //dont know, 3 levs
/* 224 */ uint8 mental_clarity; //not working, 3 levs
/* 225 */ uint8 innate_regeneration; //works
/* 226 */ uint8 mana_burn; //works
/* 227 */ uint8 extended_notes; //dont know, 3 levs
/* 228 */ uint8 sionachies_crescendo; //dont know, 3 levs
/* 229 */ uint8 improved_reclaim_energy; //dont know
/* 230 */ uint8 swift_journey; //dont know, 2 levs
/* 231 */ uint8 convalescence; //dont know, 2 levs
/* 232 */ uint8 lasting_breath; //dont know, 2 levs
/* 233 */ uint8 packrat; //dont know
/* 234 */ uint8 heightened_endurance; //dont know, 3 levs
/* 235 */ uint8 weapon_affinity; //dont know, 5 levs
/* 236 */ uint8 secondary_forte; //dont know
/* 237 */ uint8 persistent_casting; //dont know, 3 levs
/* 238 */ uint8 tune_of_pursuance; //dont know, 5 levs
/* 239 */ uint8 improved_instrument_mastery; //dont know
/* 240 */ uint8 improved_singing_mastery; //dont know
/* 241 */ uint8 exultant_bellowing; //dont know, 5 levs
/* 242 */ uint8 echo_of_taelosia; //dont know, 3 levs
/* 243 */ uint8 internal_metronome; //dont know, 5 levs
/* 244 */ uint8 pious_supplication; //dont know, 3 levs, addon
/* 245 */ uint8 bestial_alignment; //dont know, 3 levs, spell error
/* 246 */ uint8 wrath_of_xuzl; //works need to add button
/* 247 */ uint8 feral_swipe; //spell error
/* 248 */ uint8 warders_fury; //dont know, 5 levs
/* 249 */ uint8 warders_alacrity; //dont know, 5 levs
/* 250 */ uint8 pet_affinity; //dont know
/* 251 */ uint8 mastery_of_the_past; //dont know, 3 levs, beastlord only?
/* 252 */ uint8 spell_casting_subtlety; //dont know, 3 levs
/* 253 */ uint8 touch_of_the_divine; //dont know, 5 levs
/* 254 */ uint8 divine_avatar; //need to implement
/* 255 */ uint8 exquisite_benediction; //need to implement
/* 256 */ uint8 quickened_curing; //Works
/* 257 */ uint8 natures_boon; //need to implement
/* 258 */ uint8 advanced_tracking; //dont know, 5 levs
/* 259 */ uint8 critical_affliction; //dont know, 3 levs
/* 260 */ uint8 fury_of_magic_mastery; //works
/* 261 */ uint8 doppelganger; //works- lil off
/* 262 */ uint8 enhanced_forgetfulness; //dont know, 5 levs
/* 263 */ uint8 mesmerization_mastery; //dont know
/* 264 */ uint8 quick_mass_group_buff; //Works
/* 265 */ uint8 shared_health; //Not Working
/* 266 */ uint8 elemental_fury; //dont know, 5 levs
/* 267 */ uint8 elemental_alacrity; //dont know, 5 levs
/* 268 */ uint8 elemental_agility; //dont know, 3 levs
/* 269 */ uint8 elemental_durability; //dont know, 3 levs
/* 270 */ uint8 sinister_strikes; //dont know, addon
/* 271 */ uint8 strikethrough; //dont know, 3 levs
/* 272 */ uint8 stonewall; //dont know, 5 levs
/* 273 */ uint8 rapid_strikes; //dont know, 5 levs
/* 274 */ uint8 kick_mastery; //dont know, 3 levs
/* 275 */ uint8 heightened_awareness; //dont know, 5 levs
/* 276 */ uint8 destructive_force; //dont know, 3 levs
/* 277 */ uint8 swarm_of_decay; //works- lil off
/* 278 */ uint8 deaths_fury; //dont know, 5 levs
/* 279 */ uint8 quickening_of_death; //dont know, 5 levs
/* 280 */ uint8 advanced_theft_of_life; //need to implement, 2 levs
/* 281 */ uint8 triple_backstab; //dont know, 3 levs
/* 282 */ uint8 hastened_piety; //works
/* 283 */ uint8 immobilizing_bash; //dont know, 3 levs
/* 284 */ uint8 vicious_smash; //dont know, 5 levs
/* 285 */ uint8 radiant_cure; //spell errors
/* 286 */ uint8 purification; //spell error
/* 287 */ uint8 precision_of_the_pathfinder; //dont know, 3 levs
/* 288 */ uint8 coat_of_thistles; //dont know, 5 levs
/* 289 */ uint8 flaming_arrows; //not working
/* 290 */ uint8 frost_arrows; //not working
/* 291 */ uint8 seized_opportunity; //dont know, 3 levs
/* 292 */ uint8 trap_circumvention; //dont know, 5 levs
/* 293 */ uint8 improved_hasty_exit; //works
/* 294 */ uint8 virulent_venom; //dont know, 5 levs
/* 295 */ uint8 improved_consumption_of_the_soul; //dont know, 2 levs, addon
/* 296 */ uint8 intense_hatred; //dont know, 5 levs
/* 297 */ uint8 advanced_spirit_call; //works needs button
/* 298 */ uint8 call_of_the_ancients; //needs implemented
/* 299 */ uint8 sturdiness; //dont know, 5 levs
/* 300 */ uint8 warlords_tenacity; //works
/* 301 */ uint8 strengthened_strike; //dont know, 3 levs
/* 302 */ uint8 extended_shielding; //dont know, 3 levs
/* 303 */ uint8 ros_flaming_familiar; //spell error
/* 304 */ uint8 ecis_icy_familiar; //spell error
/* 305 */ uint8 druzzils_mystical_familiar; //spell error
/* 306 */ uint8 advanced_fury_of_magic_mastery;//works
/* 307 */ uint8 ward_of_destruction; //needs implemented
/* 308 */ uint8 frenzied_devastation; //not working 3 levs, spell error
/* 309 */ uint8 unknown309;
} named;
} god_ability;
};
zone\client.cpp around line 3264
replace exsisintg with-
void Client::ActivateAA(int activate){
int32 timermod=0;
Mob *target=CastToClient()->GetTarget();
Mob *c=CastToClient();
int ct=CastToClient()->GetID();
int targ;
switch(activate){
case 35: //MGB---AE cast group spell in slot 1
{
targ=ct;
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.mass_group_buff;
if(cur_level == 1)
{
CastToClient()->Message(0,"Casting Spell in Slot 1 as an Area Effect");
int spell=m_pp.mem_spells[0];
if((IsGroupSpell(spell))&&(!IsEffectInSpell(spell, SE_Gate))&&
(!IsEffectInSpell(spell, SE_Translocate))&&(!IsEffectInSpell(spell, SE_Teleport))
&&(!IsEffectInSpell(spell, SE_Succor)))
{
int mana;
mana = spells[spell].mana;
mana = (GetActSpellCost(spell, mana))*2;
if(c->GetMana() >= mana)
{
int newmana=(c->GetMana() - mana);
entity_list.AESpell(c,c,100,spell);
c->CastSpell(spell,ct,9,0,0,0,0);
c->SetMana(newmana);
}
else
{
c->Message(13,"Insufficient Mana to cast this Spell.");
break;
}
}
else
{
c->Message(0,"MGB only works with Group Buffs!");
break;
}
int usemod=CastToClient()->GetAAStruct()->god_ability.named.quick_mass_group_buff;
int time;
if(usemod == 1){time=3888;}
else if(usemod == 2){time=3456;}
else if(usemod == 3){time=3024;}
else{time=4320;}
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 36: //divine rezz
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.divine_resurrection;
if(cur_level == 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastSpell(2738,targ,9,0,0,0,0);
timermod=64800;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 37: //innate ivu
{
targ=ct;
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.innate_invis_to_undead;
if(cur_level == 1)
{
CastSpell(2739,targ,9,0,0,0,0);
timermod=7;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 38: //celest regen
{
targ=ct;
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.celestial_regeneration;
if(cur_level == 1)
{
int mod=CastToClient()->GetAAStruct()->pop_ability.named.celestial_renewal;
int spell;
if(mod == 0){spell=2740;}
else if(mod==1){spell=3250;}
else if(mod==2){spell=3251;}
CastSpell(spell,targ,9,100,0,0,0);
timermod=900;
break;
}
else
CastToClient()->Message(0,"you have not learned this skill");
}
break;
case 39: //bestow DA
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.bestow_divine_aura;
if(cur_level == 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastSpell(2741,targ,9,0,0,0,0);
int mod=CastToClient()->GetAAStruct()->pop_ability.named.hastened_divinity;
int time;
if(mod == 0){time=8640;}
else if(mod == 1){time=7776;}
else if(mod == 2){time=6912;}
else if(mod == 3){time=6048;}
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 40: //turn undead
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.turn_undead;
int mod=CastToClient()->GetAAStruct()->pop_ability.named.hastened_turning;
if(cur_level > 0)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
int spell;
if(cur_level==1){spell=2776;}
else if(cur_level==2){spell=2777;}
else if(cur_level==3){spell=2778;}
int time;
if(mod==0){time=4320;}
else if(mod==1){time=3888;}
else if(mod==2){time=3456;}
else if(mod==3){time=3024;}
CastSpell(spell,targ,9,2500,0,0,0);
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 41: //purify soul
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.purify_soul;
int mod=CastToClient()->GetAAStruct()->pop_ability.named.hastened_purification_of_the_sou l;
if(cur_level==1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastSpell(2742,targ,9,0,0,0,0);
int time;
if(mod==0){time=1800;}
else if(mod==1){time=1620;}
else if(mod==2){time=1440;}
else if(mod==3){time=1260;}
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 43: //exodus
{
targ=ct;
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.exodus;
int mod=CastToClient()->GetAAStruct()->pop_ability.named.hastened_exodus;
if(cur_level==1)
{
CastSpell(2771,targ,9,100,0,0,0);
int time;
if(mod==0){time=4320;}
else if(mod==1){time=3888;}
else if(mod==2){time=3456;}
else if(mod==3){time=3024;}
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 46: //dire charm
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.dire_charm;
if(cur_level==1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
int spell;
if((CastToClient()->GetClass())==DRUID){spell=2760;}
else if((CastToClient()->GetClass())==ENCHANTER){spell=2761;}
else if((CastToClient()->GetClass())==NECROMANCER){spell=2759;}
CastSpell(spell,targ,9,6000,0,0,0);
timermod=4320;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 47: //cannibalization
{
targ=ct;
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.cannibalization;
if(cur_level == 1)
{
CastSpell(2749,targ,9,2500,0,0,0);
timermod=180;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 50: //rabid bear
{
targ=ct;
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.rabid_bear;
int mod=CastToClient()->GetAAStruct()->pop_ability.named.hastened_rabidity;
if(cur_level==1)
{
int time;
if(mod==0){time=7200;}
else if(mod==1){time=6480;}
else if(mod==2){time=5760;}
else if(mod==3){time=5040;}
CastSpell(2750,targ,9,100,0,0,0);
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 52: //wizard familiars
{
targ=ct;
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.improved_familiar;
if(cur_level==1)
{
int mod=CastToClient()->GetAAStruct()->pop_ability.named.allegiant_familiar;
int spell;
if(mod==0){spell=2758;}
else if(mod==1){spell=3264;}
CastSpell(spell,targ,9,16000,0,0,0);
timermod=7;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 53: //nexus gate
{
targ=ct;
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.nexus_gate;
if(cur_level==1)
{
CastSpell(2734,targ,9,0,0,0,0);
timermod=4320;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 57: //gather mana
{
targ=ct;
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.gather_mana;
if(cur_level==1)
{
int mod=CastToClient()->GetAAStruct()->pop_ability.named.hastened_gathering;
int time;
if(mod==0){time=8640;}
else if(mod==1){time=7776;}
else if(mod==2){time=6912;}
else if(mod==3){time=6048;}
CastSpell(2753,targ,9,2000,0,0,0);
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 58: //Mend Companion
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.mend_companion;
if(cur_level==1)
{
targ=ct;
int mod=CastToClient()->GetAAStruct()->pop_ability.named.hastened_mending;
int time;
if(mod==0){time=2160;}
else if(mod==1){time=1944;}
else if(mod==2){time=1728;}
else if(mod==3){time=1512;}
CastSpell(2752,targ,9,0,0,0,0);
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 60: //Frenzied Burnout
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.frenzied_burnout;
if(cur_level == 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastSpell(2754,targ,9,2000,0,0,0);
timermod=4320;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 61: //mage ele form fire
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.elemental_form_fire;
if(cur_level >= 1)
{
targ=ct;
int spell;
if(cur_level==1){spell=2795;}
if(cur_level==2){spell=2796;}
if(cur_level==3){spell=2797;}
CastSpell(spell,targ,9,8000,0,0,0);
timermod=900;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 62: //mage ele form water
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.elemental_form_water;
if(cur_level >= 1)
{
targ=ct;
int spell;
if(cur_level==1){spell=2798;}
if(cur_level==2){spell=2799;}
if(cur_level==3){spell=2800;}
CastSpell(spell,targ,9,8000,0,0,0);
timermod=900;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 63: //mage ele form earth
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.elemental_form_earth;
if(cur_level >= 1)
{
targ=ct;
int spell;
if(cur_level==1){spell=2792;}
if(cur_level==2){spell=2793;}
if(cur_level==3){spell=2794;}
CastSpell(spell,targ,9,8000,0,0,0);
timermod=900;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 64: //mage ele form air
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.elemental_form_air;
if(cur_level >= 1)
{
targ=ct;
int spell;
if(cur_level==1){spell=2789;}
if(cur_level==2){spell=2790;}
if(cur_level==3){spell=2791;}
CastSpell(spell,targ,9,8000,0,0,0);
timermod=900;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 66: //turn summoned.....supposed to be 3 levs?? UI only has 1??
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.turn_summoned;
int mod=CastToClient()->GetAAStruct()->pop_ability.named.hastened_banishment;
if(cur_level > 0)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
int spell;
if(cur_level==1){spell=2779;}
else if(cur_level==2){spell=2780;}
else if(cur_level==3){spell=2781;}
int time;
if(mod==0){time=4320;}
else if(mod==1){time=3888;}
else if(mod==2){time=3456;}
else if(mod==3){time=3024;}
CastSpell(spell,targ,9,2500,0,0,0);
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 68: //Life Burn
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.life_burn;
if(cur_level==1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastSpell(2755,targ,9,6000,0,0,0);
timermod=8640;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 69: //Dead mesmerization
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.dead_mesmerization;
if(cur_level==1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastToClient()->Message(0,"Sorry, Dead Mesmerization not working YET");
CastSpell(2756,targ,9,3000,0,0,0);
timermod=4320;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 70: //fearstorm
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.fearstorm;
if(cur_level==1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastSpell(2757,targ,9,3000,0,0,0);
timermod=4320;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 71: //flesh to bone
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.flesh_to_bone;
if(cur_level==1)
{
targ=ct;
CastToClient()->Message(0,"Sorry, Flesh to Bone not working YET");
CastSpell(2772,targ,9,3000,0,0,0);
timermod=7;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 72: //call to corpse
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.call_to_corpse;
if(cur_level==1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastSpell(2764,targ,9,5000,0,0,0);
timermod=4320;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 73: //divine stun
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.divine_stun;
int mod=CastToClient()->GetAAStruct()->pop_ability.named.rush_to_judgment;
if(cur_level == 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
int time;
if(mod==0){time=30;}
else if(mod==1){time=23;}
else if(mod==2){time=16;}
else if(mod==3){time=9;}
CastSpell(2190,targ,9,1500,0,0,0);
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 76: //act of valor
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.act_of_valor;
if(cur_level == 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastSpell(2775,targ,9,0,0,0,0);
int heal=c->GetHP();
int curhp=target->GetHP();
target->SetHP(heal+curhp);
c->Death(c,0,0,0);
timermod=4320;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 77: //holy steed------Default fast horse
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.holy_steed;
if(cur_level == 1)
{
targ=ct;
CastSpell(2871,targ,9,2000,0,0,0);
timermod=1;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 80: //innate camo
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.innate_camouflage;
if(cur_level == 1)
{
targ=ct;
CastSpell(2765,targ,9,1,0,0,0);
timermod=7;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 85: //unholy steed-----default fast horse
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.unholy_steed;
if(cur_level == 1)
{
targ=ct;
CastSpell(2918,targ,9,2000,0,0,0);
timermod=1;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 86: //Improved HT
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.improved_harm_touch;
if(cur_level == 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastToClient()->Message(0,"Sorry Improved harmtouch not working YET");
timermod=4320;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 87: //Leech touch
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.leech_touch;
if(cur_level == 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastSpell(2766,targ,9,1,0,0,0);
timermod=4320;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 98: //purify body
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.purify_body;
int mod=CastToClient()->GetAAStruct()->pop_ability.named.hastened_purification_of_the_bod y;
if(cur_level == 1)
{
targ=ct;
CastToClient()->Message(0,"Sorry, Purify Body not working YET");
int time;
if(mod==0){time=4320;}
else if(mod==1){time=3888;}
else if(mod==2){time=3456;}
else if(mod==3){time=3024;}
CastSpell(2190,targ,9,0,0,0,0);
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 102: //escape
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.escape;
int mod=CastToClient()->GetAAStruct()->pop_ability.named.hasty_exit;
int modtwo=CastToClient()->GetAAStruct()->god_ability.named.improved_hasty_exit;
if(cur_level == 1)
{
targ=ct;
CastToClient()->Message(0,"Sorry, Escape not working YET");
int time;
if(mod==0){time=4320;}
else if((mod==1)&&(modtwo==0)){time=3888;}
else if((mod==2)&&(modtwo==0)){time=3456;}
else if((mod==3)&&(modtwo==0)){time=3024;}
else if((mod==3)&&(modtwo==1)){time=2592;}
else if((mod==3)&&(modtwo==2)){time=2175;}
CastSpell(5244,targ,9,0,0,0,0);
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 107: //purge poison
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.purge_poison;
int mod=CastToClient()->GetAAStruct()->pop_ability.named.hastened_purification;
if(cur_level == 1)
{
targ=ct;
CastToClient()->Message(0,"Sorry, Purify Body not working YET");
int time;
if(mod==0){time=4320;}
else if(mod==1){time=3888;}
else if(mod==2){time=3456;}
else if(mod==3){time=3024;}
CastSpell(5232,targ,9,0,0,0,0);
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 109: //rampage
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.rampage;
int mod=CastToClient()->GetAAStruct()->pop_ability.named.furious_rampage;
if(cur_level == 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
Attack(target,13);
int time;
if(mod==0){time=600;}
else if(mod==1){time=540;}
else if(mod==2){time=480;}
else if(mod==3){time=420;}
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 110: //AE taunt
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.area_taunt;
int mod=CastToClient()->GetAAStruct()->pop_ability.named.hastened_instigation;
if(cur_level == 1)
{
targ=ct;
CastToClient()->Message(0,"Sorry, AE Taunt not working YET");
int time;
if(mod==0){time=900;}
else if(mod==1){time=810;}
else if(mod==2){time=720;}
else if(mod==3){time=630;}
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 111: //warcry
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.warcry;
if(cur_level >= 1)
{
targ=ct;
CastToClient()->Message(0,"Sorry, Warcry not working YET");
int spell;
if(cur_level==1){spell=5229;}
else if(cur_level==2){spell=5230;}
else if(cur_level==3){spell=5231;}
CastSpell(spell,targ,9,0,0,0,0);
timermod=2160;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 117: //strong root
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.strong_root;
int mod=CastToClient()->GetAAStruct()->pop_ability.named.hastened_root;
if(cur_level == 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
int time;
if(mod==0){time=4320;}
else if(mod==1){time=3888;}
else if(mod==2){time=3456;}
else if(mod==3){time=3024;}
CastSpell(2748,targ,9,2000,0,0,0);
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 126: //hobble of spirits
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.hobble_of_spirits;
if(cur_level == 1)
{
targ=ct;
CastSpell(3290,targ,9,3000,0,0,0);
timermod=300;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 127: //frenzy of spirit
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.frenzy_of_spirit;
if(cur_level == 1)
{
targ=ct;
CastSpell(3289,targ,9,0,0,0,0);
timermod=720;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 128: //paragon
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.paragon_of_spirit;
if(cur_level == 1)
{
targ=ct;
CastSpell(3291,targ,9,5000,0,0,0);
timermod=900;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 153: //radiant cure
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.radiant_cure;
int mod=CastToClient()->GetAAStruct()->god_ability.named.quickened_curing;
if(cur_level >= 1)
{
targ=ct;
int spell;
if(cur_level==1){spell=3297;}
else if(cur_level==2){spell=3298;}
else if(cur_level==3){spell=3299;}
int time;
if(mod==0){time=180;}
else if(mod==1){time=162;}
else if(mod==2){time=144;}
else if(mod==3){time=126;}
CastSpell(spell,targ,9,3500,0,0,0);
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 169: //divine arbitration
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.divine_arbitration;
if(cur_level >= 1)
{
targ=ct;
int spell;
if(cur_level==1){spell=3252;}
else if(cur_level==2){spell=3253;}
else if(cur_level==3){spell=3254;}
CastSpell(spell,targ,9,750,0,0,0);
timermod=180;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 170: //wrath of the wild
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.wrath_of_the_wild;
if(cur_level >= 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
int spell;
if(cur_level==1){spell=3255;}
else if(cur_level==2){spell=3256;}
else if(cur_level==3){spell=3257;}
CastSpell(spell,targ,9,1000,0,0,0);
timermod=240;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 171: //virulent paralysis
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.virulent_paralysis;
if(cur_level >= 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
int spell;
if(cur_level==1){spell=3274;}
else if(cur_level==2){spell=3275;}
else if(cur_level==3){spell=3276;}
CastSpell(spell,targ,9,2000,0,0,0);
timermod=120;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 172: //harvest of druzzil
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.harvest_of_druzzil;
if(cur_level == 1)
{
targ=ct;
CastSpell(3338,targ,9,10000,0,0,0);
timermod=480;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 173: //eldritch rune
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.eldritch_rune;
if(cur_level >= 1)
{
targ=ct;
int spell;
if(cur_level==1){spell=3258;}
else if(cur_level==2){spell=3259;}
else if(cur_level==3){spell=3260;}
CastSpell(spell,targ,9,1,0,0,0);
timermod=600;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 174: //servant of ro
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.servant_of_ro;
if(cur_level >= 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastToClient()->Message(0,"Sorry, Servant of Ro not working YET");
int spell;
if(cur_level==1){spell=3265;}
else if(cur_level==2){spell=3266;}
else if(cur_level==3){spell=3267;}
CastSpell(spell,targ,9,500,0,0,0);
timermod=540;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 175: //wake the dead
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.wake_the_dead;
if(cur_level >= 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastToClient()->Message(0,"Sorry, Wake the Dead not working YET");
int spell;
if(cur_level==1){spell=3268;}
else if(cur_level==2){spell=3269;}
else if(cur_level==3){spell=3270;}
CastSpell(spell,targ,9,8000,0,0,0);
timermod=540;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 176: //suspend minion
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.suspended_minion;
if(cur_level >= 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastToClient()->Message(0,"Sorry Suspend Minion not working YET");
int spell;
if(cur_level==1){spell=3248;}
else if(cur_level==2){spell=3249;}
CastSpell(spell,targ,9,4000,0,0,0);
timermod=1;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 177: //spirit call
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.spirit_call;
if(cur_level >= 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastToClient()->Message(0,"Sorry, Spirit Call not working YET");
int spell;
if(cur_level==1){spell=3283;}
else if(cur_level==2){spell=3284;}
else if(cur_level==3){spell=3285;}
CastSpell(spell,targ,9,6500,0,0,0);
timermod=720;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 180: //hand of piety
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.hand_of_piety;
int mod=CastToClient()->GetAAStruct()->god_ability.named.hastened_piety;
if(cur_level >= 1)
{
targ=ct;
int spell;
if(cur_level==1){spell=3261;}
else if(cur_level==2){spell=3262;}
else if(cur_level==3){spell=3263;}
int time;
if(mod==0){time=2160;}
else if(mod==1){time=1920;}
else if(mod==2){time=1680;}
else if(mod==3){time=1440;}
CastSpell(spell,targ,9,0,0,0,0);
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 184: //guardian of the forest
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.guardian_of_the_forest;
if(cur_level >= 1)
{
targ=ct;
int spell;
if(cur_level==1){spell=3271;}
else if(cur_level==2){spell=3272;}
else if(cur_level==3){spell=3273;}
CastSpell(spell,targ,9,0,0,0,0);
timermod=900;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 185: //spirit of the wood
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.spirit_of_the_wood;
if(cur_level >= 1)
{
targ=ct;
int spell;
if(cur_level==1){spell=3277;}
else if(cur_level==2){spell=3278;}
else if(cur_level==3){spell=3279;}
CastSpell(spell,targ,9,0,0,0,0);
timermod=1320;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 199: //boastfull bellow
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.boastful_bellow;
if(cur_level == 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastSpell(3282,targ,9,0,0,0,0);
timermod=18;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 207: //host of elements
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.host_of_the_elements;
if(cur_level >= 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
int spell;
if(cur_level==1){spell=3286;}
else if(cur_level==2){spell=3287;}
else if(cur_level==3){spell=3288;}
CastSpell(spell,targ,9,6500,0,0,0);
timermod=1320;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 208: //call of xuzl
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.call_of_xuzl;
if(cur_level >= 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
int spell;
if(cur_level==1){spell=3292;}
else if(cur_level==2){spell=3293;}
else if(cur_level==3){spell=3294;}
CastSpell(spell,targ,9,6500,0,0,0);
timermod=900;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
anyway ive corrected quite a few but i need some help on the more complex ones such as wake the dead and doppelganger, so im hoping someone else may have already made some progress on those or others and would like to share.
also let me say sorry for deleting the exsisting comments in eq_packet_structs.h as ive been useing that as a checklist of sorta, also while working with these i discovered a tons of little errors and exploits, the biggest of which were that the entire AA table was off by one so checks for innate STA were actually checking innate STR, also with the way AA were set up i found a huge exploit allowing any character to have any AA skill at any time, thats been corrected however another huge problem is that the AA timers dont seem to be working at all, so i need to ask if they ever were to begin with or maybe my database or something ive done has broken them, these all work with the latest CVS 07-31-04 and the latest spells_us.txt from sony, although some of the spells themselves arent correct so druid dire charm does not check if the target is an animal, can correct this in your own spells_us.txt or ill eventually do it in the code for the skill itself i guess.
PROS- most targeted AAs work, if your database is setup correctly with the correct max level and the cost of the FIRST purchase of a skill the buy ammount is correct in that it doubles when needed 2-4-6 etc, i fixed the exploit i found. i also threw in the timer mods for skill reuse AAs, and i put in a message to client for my own testing purposes so youll have to delete those as needed
CONS- THIS WILL DELETE ALL EXSISTING AA SKILLS AND POINTS FROM ALL CHARACTERS on your server, and none are really usefull to legit servers since currently the AA timer is not working, for me atleast
uhh also im not sure how to post all this without it useing word wrap or whatever so this might be messy but oh well...
zone\command.cpp around line 4748
replace exsisintg with-
void command_manaburn(Client *c, const Seperator *sep)
{
Mob* target=c->GetTarget();
if (c->GetTarget() == 0)
c->Message(0, "#Manaburn needs a target.");
else {
int cur_level=c->GetAAStruct()->god_ability.named.mana_burn;
if (c->DistNoRootNoZ(*target) > 200)
c->Message(0,"You are too far away from your target.");
else {
if(cur_level == 1) {
if(c->IsAttackAllowed(target))
{
int nukedmg=(c->GetMana())*2;
if (nukedmg>0)
{
target->Damage(c, nukedmg, 2751,240);
c->SetMana(0);
}
LogFile->write(EQEMuLog::Normal,"Manaburn request from %s, damage: %d", c->GetName(), nukedmg);
}
}
else
c->Message(0, "You have not learned this skill.");
}
}
}
common\eq_packet_structs.h around line 3142
replace exsisintg with-
// New Alternate Advancement table. holds all the skill levels for the AA skills.
// Length: 309 Bytes
// OpCode: 1422
struct PlayerAA_Struct {
/* 0 */ uint8 unknown0;
union {
uint8 unnamed[17];
struct {
/* 1 */ uint8 innate_strength; //works
/* 2 */ uint8 innate_stamina; //works
/* 3 */ uint8 innate_agility; //works
/* 4 */ uint8 innate_dexterity; //works
/* 5 */ uint8 innate_intelligence; //works
/* 6 */ uint8 innate_wisdom; //works
/* 7 */ uint8 innate_charisma; //works
/* 8 */ uint8 innate_fire_protection; //works
/* 9 */ uint8 innate_cold_protection; //works
/* 10 */ uint8 innate_magic_protection; //works
/* 11 */ uint8 innate_poison_protection; //works
/* 12 */ uint8 innate_disease_protection; //works
/* 13 */ uint8 innate_run_speed; //works, 3 levs
/* 14 */ uint8 unknown14; //was regeneration
/* 15 */ uint8 innate_metabolism; //dont know, 3 levs
/* 16 */ uint8 innate_lung_capacity; //dont know, 3 levs
/* 17 */ uint8 first_aid; //dont know, 3 levs
} named;
} general_skills;
union {
uint8 unnamed[17];
struct {
/* 18 */ uint8 healing_adept; //works
/* 19 */ uint8 healing_gift; //works
/* 20 */ uint8 spell_casting_mastery; //dont know,
/* 21 */ uint8 spell_casting_reinforcement; //dont know,
/* 22 */ uint8 unknown22; //was mental clarity
/* 23 */ uint8 spell_casting_fury; //works
/* 24 */ uint8 chanelling_focus; //dont know,
/* 25 */ uint8 spell_casting_subtlety; //dont know,
/* 26 */ uint8 spell_casting_expertise; //dont know,
/* 27 */ uint8 spell_casting_deftness; //works
/* 28 */ uint8 natural_durability; //works
/* 29 */ uint8 natural_healing; //works
/* 30 */ uint8 combat_fury; //dont know,
/* 31 */ uint8 fear_resistance; //works
/* 32 */ uint8 finishing_blow; //dont know,
/* 33 */ uint8 combat_stability; //dont know,
/* 34 */ uint8 combat_agility; //dont know,
} named;
} archetype_skills;
union {
uint8 unnamed[94];
struct {
/* 35 */ uint8 mass_group_buff; //works lil off
// ===== Cleric =====
/* 36 */ uint8 divine_resurrection; //works
/* 37 */ uint8 innate_invis_to_undead; //works
/* 38 */ uint8 celestial_regeneration; //works
/* 39 */ uint8 bestow_divine_aura; //works
/* 40 */ uint8 turn_undead; //Spell Buggy
/* 41 */ uint8 purify_soul; //works but buggy
// ===== Druid =====
/* 42 */ uint8 quick_evacuation; //works
/* 43 */ uint8 exodus; //works
/* 44 */ uint8 quick_damage; //works
/* 45 */ uint8 enhanced_root; //dont know
/* 46 */ uint8 dire_charm; //works lil off
// ===== Shaman =====
/* 47 */ uint8 cannibalization; //works
/* 48 */ uint8 quick_buff; //dont know, 3 levs
/* 49 */ uint8 alchemy_mastery; //dont know
/* 50 */ uint8 rabid_bear; //works
// ===== Wizard =====
/* 51 */ uint8 unknown51; //used to be manaburn
/* 52 */ uint8 improved_familiar; //works
/* 53 */ uint8 nexus_gate; //works
// ===== Enchanter =====
/* 54 */ uint8 unknown54;
/* 55 */ uint8 permanent_illusion; //dont know
/* 56 */ uint8 jewel_craft_mastery; //dont know, 3 levs
/* 57 */ uint8 gather_mana; //works
// ===== Mage =====
/* 58 */ uint8 mend_companion; //Works
/* 59 */ uint8 quick_summoning; //dont know
/* 60 */ uint8 frenzied_burnout; //not working-spell buggy
/* 61 */ uint8 elemental_form_fire; //Works
/* 62 */ uint8 elemental_form_water; //Works
/* 63 */ uint8 elemental_form_earth; //Works
/* 64 */ uint8 elemental_form_air; //Works
/* 65 */ uint8 unknown65; //was improved reclaim energy
/* 66 */ uint8 turn_summoned; //Spell Buggy
/* 67 */ uint8 elemental_pact; //dont know
// ===== Necromancer =====
/* 68 */ uint8 life_burn; //works
/* 69 */ uint8 dead_mesmerization; //dont know
/* 70 */ uint8 fearstorm; //works
/* 71 */ uint8 flesh_to_bone; //not working
/* 72 */ uint8 call_to_corpse; //works but self only
// ===== Paladin =====
/* 73 */ uint8 divine_stun; //works
/* 74 */ uint8 improved_lay_of_hands; //dont know
/* 75 */ uint8 slay_undead; //dont know, 3 levs
/* 76 */ uint8 act_of_valor; //works
/* 77 */ uint8 holy_steed; //works but default fast horse
/* 78 */ uint8 fearless; //works
/* 79 */ uint8 two_hand_bash; //dont know
// ===== Ranger =====
/* 80 */ uint8 innate_camouflage; //works
/* 81 */ uint8 ambidexterity; //works
/* 82 */ uint8 archery_mastery; //works
/* 83 */ uint8 unknown83;
/* 84 */ uint8 endless_quiver; //works
// ===== Shadow Knight =====
/* 85 */ uint8 unholy_steed; //works but just a default fast horse~
/* 86 */ uint8 improved_harm_touch; //dont know, can fix
/* 87 */ uint8 leech_touch; //works
/* 88 */ uint8 unknown88;
/* 89 */ uint8 soul_abrasion; //works
// ===== Bard =====
/* 90 */ uint8 instrument_mastery; //dont know, 3 levs
/* 91 */ uint8 unknown91;
/* 92 */ uint8 unknown92;
/* 93 */ uint8 unknown93;
/* 94 */ uint8 jam_fest; //dont know, 3 levs
/* 95 */ uint8 unknown95;
/* 96 */ uint8 unknown96;
// ===== Monk =====
/* 97 */ uint8 critical_mend; //dont know, 3 levs
/* 98 */ uint8 purify_body; //dont know
/* 99 */ uint8 unknown99;
/* 100 */ uint8 rapid_feign; //dont know, 3 levs
/* 101 */ uint8 return_kick; //dont know, 3 levs
// ===== Rogue =====
/* 102 */ uint8 escape; //works
/* 103 */ uint8 poison_mastery; //dont know, 3 levs
/* 104 */ uint8 double_riposte; //dont know, 3 levs
/* 105 */ uint8 unknown105;
/* 106 */ uint8 unknown106;
/* 107 */ uint8 purge_poison; //works
// ===== Warrior =====
/* 108 */ uint8 flurry; //works
/* 109 */ uint8 rampage; //works
/* 110 */ uint8 area_taunt; //works
/* 111 */ uint8 warcry; //spell error
/* 112 */ uint8 bandage_wound; //dont know, 3 levs
// ===== (Other) =====
/* 113 */ uint8 spell_casting_reinforcement_mastery; //dont know
/* 114 */ uint8 spell_casting_fury_mastery; //works
/* 115 */ uint8 unknown115; //was extended notes
/* 116 */ uint8 dragon_punch; //dont know
/* 117 */ uint8 strong_root; //works
/* 118 */ uint8 singing_mastery; //dont know, 3 levs
/* 119 */ uint8 body_and_mind_rejuvenation; //not working
/* 120 */ uint8 physical_enhancement; //dont know
/* 121 */ uint8 adv_trap_negotiation; //dont know, 3 levs
/* 122 */ uint8 acrobatics; //dont know, 3 levs
/* 123 */ uint8 scribble_notes; //dont know
/* 124 */ uint8 chaotic_stab; //dont know
/* 125 */ uint8 pet_discipline; //not working
/* 126 */ uint8 hobble_of_spirits; //works
/* 127 */ uint8 frenzy_of_spirit; //works
/* 128 */ uint8 paragon_of_spirit; //works
} named;
} class_skills;
union {
uint8 unnamed[15];
struct {
/* 129 */ uint8 advanced_innate_strength; //works
/* 130 */ uint8 advanced_innate_stamina; //works
/* 131 */ uint8 advanced_innate_agility; //works
/* 132 */ uint8 advanced_innate_dexterity; //works
/* 133 */ uint8 advanced_innate_intelligence; //works
/* 134 */ uint8 advanced_innate_wisdom; //works
/* 135 */ uint8 advanced_innate_charisma; //works
/* 136 */ uint8 warding_of_solusek; //works
/* 137 */ uint8 blessing_of_eci; //works
/* 138 */ uint8 marrs_protection; //works
/* 139 */ uint8 shroud_of_the_faceless; //works
/* 140 */ uint8 bertoxxulous_gift; //works
/* 141 */ uint8 new_tanaan_crafting_mastery; //dont know
/* 142 */ uint8 planar_power; //works
/* 143 */ uint8 planar_durability; //works
} named;
} pop_advance;
union {
uint8 unnamed[77];
struct {
/* 144 */ uint8 innate_enlightenment; //works
/* 145 */ uint8 unknown145;
/* 146 */ uint8 advanced_healing_adept; //works
/* 147 */ uint8 advanced_healing_gift; //works
/* 148 */ uint8 coup_de_grace; //dont know, 3 levs
/* 149 */ uint8 fury_of_the_ages; //dont know, 3 levs
/* 150 */ uint8 mastery_of_the_past; //dont know, 3 levs
/* 151 */ uint8 lightning_reflexes; //dont know, 5 levs
/* 152 */ uint8 innate_defense; //dont know, 5 levs
/* 153 */ uint8 radiant_cure; //Works spell buggy
/* 154 */ uint8 hastened_divinity; //Works
/* 155 */ uint8 hastened_turning; //Works
/* 156 */ uint8 hastened_purification_of_the_soul; //Works
/* 157 */ uint8 hastened_gathering; //Works
/* 158 */ uint8 hastened_rabidity; //works
/* 159 */ uint8 hastened_exodus; //works
/* 160 */ uint8 hastened_root; //works
/* 161 */ uint8 hastened_mending; //Works
/* 162 */ uint8 hastened_banishment; //Works
/* 163 */ uint8 hastened_instigation; //Works
/* 164 */ uint8 furious_rampage; //Works
/* 165 */ uint8 hastened_purification_of_the_body; //works
/* 166 */ uint8 hasty_exit; //works
/* 167 */ uint8 hastened_purification; //works
/* 168 */ uint8 flash_of_steel; //dont know, 3 levs, addon buff
/* 169 */ uint8 divine_arbitration; //spell error
/* 170 */ uint8 wrath_of_the_wild; //works
/* 171 */ uint8 virulent_paralysis; //works
/* 172 */ uint8 harvest_of_druzzil; //works
/* 173 */ uint8 eldritch_rune; //Works
/* 174 */ uint8 servant_of_ro; //works
/* 175 */ uint8 wake_the_dead; //works
/* 176 */ uint8 suspended_minion; //Spell errors
/* 177 */ uint8 spirit_call; //works
/* 178 */ uint8 celestial_renewal; //Works
/* 179 */ uint8 allegiant_familiar; //works
/* 180 */ uint8 hand_of_piety; //works
/* 181 */ uint8 mithaniels_binding; //dont know, 2 levs
/* 182 */ uint8 mending_of_the_tranquil; //dont know, 3 levs
/* 183 */ uint8 raging_flurry; //dont know, 3 levs, addon buff
/* 184 */ uint8 guardian_of_the_forest; //works
/* 185 */ uint8 spirit_of_the_wood; //works
/* 186 */ uint8 bestial_frenzy; //dont know, 5 levs
/* 187 */ uint8 harmonious_attack; //dont know, 5 levs
/* 188 */ uint8 knights_advantage; //dont know, 3 levs
/* 189 */ uint8 ferocity; //dont know, 3 levs
/* 190 */ uint8 viscid_roots; //dont know
/* 191 */ uint8 unknown191;
/* 192 */ uint8 ayonaes_tutelage; //dont know, 3 levs
/* 193 */ uint8 feigned_minion; //dont know, 3 levs
/* 194 */ uint8 unfailing_divinity; //dont know, 3 levs
/* 195 */ uint8 animation_empathy; //dont know, 3 levs
/* 196 */ uint8 rush_to_judgment; //works
/* 197 */ uint8 living_shield; //dont know, 3 levs, disc reuse buff
/* 198 */ uint8 consumption_of_the_soul; //dont know, 3 levs, addon
/* 199 */ uint8 boastful_bellow; //works
/* 200 */ uint8 fervent_blessing; //dont know, 3 levs, reuse skill 12 minutes each
/* 201 */ uint8 touch_of_the_wicked; //dont know, 3 levs, reuse buff 12 minutes each
/* 202 */ uint8 punishing_blade; //dont know, 3 levs
/* 203 */ uint8 speed_of_the_knight; //dont know, 3 levs
/* 204 */ uint8 shround_of_stealth; //dont know
/* 205 */ uint8 nimble_evasion; //dont know, 5 levs
/* 206 */ uint8 technique_of_master_wu; //dont know, 5 levs
/* 207 */ uint8 host_of_the_elements; //works
/* 208 */ uint8 call_of_xuzl; //works
/* 209 */ uint8 hastened_stealth; //works
/* 210 */ uint8 ingenuity; //dont know, 3 levs
/* 211 */ uint8 fleet_of_foot; //dont know, 2 levs
/* 212 */ uint8 fading_memories; //works
/* 213 */ uint8 tactical_mastery; //dont know, 3 levs
/* 214 */ uint8 theft_of_life; //works
/* 215 */ uint8 fury_of_magic; //works cleric
/* 216 */ uint8 fury_of_magic_mastery; //works
/* 217 */ uint8 project_illusion; //spell error
/* 218 */ uint8 headshot; //works
/* 219 */ uint8 entrap; //works
/* 220 */ uint8 unholy_touch; //dont know, 3 levs, addon
} named;
} pop_ability;
union {
uint8 unnamed[89];
struct {
/* 221 */ uint8 total_domination; //dont know, 3 levs
/* 222 */ uint8 stalwart_endurance; //dont know, 3 levs
/* 223 */ uint8 quick_summoning; //dont know, 3 levs
/* 224 */ uint8 mental_clarity; //not working, 3 levs
/* 225 */ uint8 innate_regeneration; //works
/* 226 */ uint8 mana_burn; //works
/* 227 */ uint8 extended_notes; //dont know, 3 levs
/* 228 */ uint8 sionachies_crescendo; //dont know, 3 levs
/* 229 */ uint8 improved_reclaim_energy; //dont know
/* 230 */ uint8 swift_journey; //dont know, 2 levs
/* 231 */ uint8 convalescence; //dont know, 2 levs
/* 232 */ uint8 lasting_breath; //dont know, 2 levs
/* 233 */ uint8 packrat; //dont know
/* 234 */ uint8 heightened_endurance; //dont know, 3 levs
/* 235 */ uint8 weapon_affinity; //dont know, 5 levs
/* 236 */ uint8 secondary_forte; //dont know
/* 237 */ uint8 persistent_casting; //dont know, 3 levs
/* 238 */ uint8 tune_of_pursuance; //dont know, 5 levs
/* 239 */ uint8 improved_instrument_mastery; //dont know
/* 240 */ uint8 improved_singing_mastery; //dont know
/* 241 */ uint8 exultant_bellowing; //dont know, 5 levs
/* 242 */ uint8 echo_of_taelosia; //dont know, 3 levs
/* 243 */ uint8 internal_metronome; //dont know, 5 levs
/* 244 */ uint8 pious_supplication; //dont know, 3 levs, addon
/* 245 */ uint8 bestial_alignment; //dont know, 3 levs, spell error
/* 246 */ uint8 wrath_of_xuzl; //works need to add button
/* 247 */ uint8 feral_swipe; //spell error
/* 248 */ uint8 warders_fury; //dont know, 5 levs
/* 249 */ uint8 warders_alacrity; //dont know, 5 levs
/* 250 */ uint8 pet_affinity; //dont know
/* 251 */ uint8 mastery_of_the_past; //dont know, 3 levs, beastlord only?
/* 252 */ uint8 spell_casting_subtlety; //dont know, 3 levs
/* 253 */ uint8 touch_of_the_divine; //dont know, 5 levs
/* 254 */ uint8 divine_avatar; //need to implement
/* 255 */ uint8 exquisite_benediction; //need to implement
/* 256 */ uint8 quickened_curing; //Works
/* 257 */ uint8 natures_boon; //need to implement
/* 258 */ uint8 advanced_tracking; //dont know, 5 levs
/* 259 */ uint8 critical_affliction; //dont know, 3 levs
/* 260 */ uint8 fury_of_magic_mastery; //works
/* 261 */ uint8 doppelganger; //works- lil off
/* 262 */ uint8 enhanced_forgetfulness; //dont know, 5 levs
/* 263 */ uint8 mesmerization_mastery; //dont know
/* 264 */ uint8 quick_mass_group_buff; //Works
/* 265 */ uint8 shared_health; //Not Working
/* 266 */ uint8 elemental_fury; //dont know, 5 levs
/* 267 */ uint8 elemental_alacrity; //dont know, 5 levs
/* 268 */ uint8 elemental_agility; //dont know, 3 levs
/* 269 */ uint8 elemental_durability; //dont know, 3 levs
/* 270 */ uint8 sinister_strikes; //dont know, addon
/* 271 */ uint8 strikethrough; //dont know, 3 levs
/* 272 */ uint8 stonewall; //dont know, 5 levs
/* 273 */ uint8 rapid_strikes; //dont know, 5 levs
/* 274 */ uint8 kick_mastery; //dont know, 3 levs
/* 275 */ uint8 heightened_awareness; //dont know, 5 levs
/* 276 */ uint8 destructive_force; //dont know, 3 levs
/* 277 */ uint8 swarm_of_decay; //works- lil off
/* 278 */ uint8 deaths_fury; //dont know, 5 levs
/* 279 */ uint8 quickening_of_death; //dont know, 5 levs
/* 280 */ uint8 advanced_theft_of_life; //need to implement, 2 levs
/* 281 */ uint8 triple_backstab; //dont know, 3 levs
/* 282 */ uint8 hastened_piety; //works
/* 283 */ uint8 immobilizing_bash; //dont know, 3 levs
/* 284 */ uint8 vicious_smash; //dont know, 5 levs
/* 285 */ uint8 radiant_cure; //spell errors
/* 286 */ uint8 purification; //spell error
/* 287 */ uint8 precision_of_the_pathfinder; //dont know, 3 levs
/* 288 */ uint8 coat_of_thistles; //dont know, 5 levs
/* 289 */ uint8 flaming_arrows; //not working
/* 290 */ uint8 frost_arrows; //not working
/* 291 */ uint8 seized_opportunity; //dont know, 3 levs
/* 292 */ uint8 trap_circumvention; //dont know, 5 levs
/* 293 */ uint8 improved_hasty_exit; //works
/* 294 */ uint8 virulent_venom; //dont know, 5 levs
/* 295 */ uint8 improved_consumption_of_the_soul; //dont know, 2 levs, addon
/* 296 */ uint8 intense_hatred; //dont know, 5 levs
/* 297 */ uint8 advanced_spirit_call; //works needs button
/* 298 */ uint8 call_of_the_ancients; //needs implemented
/* 299 */ uint8 sturdiness; //dont know, 5 levs
/* 300 */ uint8 warlords_tenacity; //works
/* 301 */ uint8 strengthened_strike; //dont know, 3 levs
/* 302 */ uint8 extended_shielding; //dont know, 3 levs
/* 303 */ uint8 ros_flaming_familiar; //spell error
/* 304 */ uint8 ecis_icy_familiar; //spell error
/* 305 */ uint8 druzzils_mystical_familiar; //spell error
/* 306 */ uint8 advanced_fury_of_magic_mastery;//works
/* 307 */ uint8 ward_of_destruction; //needs implemented
/* 308 */ uint8 frenzied_devastation; //not working 3 levs, spell error
/* 309 */ uint8 unknown309;
} named;
} god_ability;
};
zone\client.cpp around line 3264
replace exsisintg with-
void Client::ActivateAA(int activate){
int32 timermod=0;
Mob *target=CastToClient()->GetTarget();
Mob *c=CastToClient();
int ct=CastToClient()->GetID();
int targ;
switch(activate){
case 35: //MGB---AE cast group spell in slot 1
{
targ=ct;
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.mass_group_buff;
if(cur_level == 1)
{
CastToClient()->Message(0,"Casting Spell in Slot 1 as an Area Effect");
int spell=m_pp.mem_spells[0];
if((IsGroupSpell(spell))&&(!IsEffectInSpell(spell, SE_Gate))&&
(!IsEffectInSpell(spell, SE_Translocate))&&(!IsEffectInSpell(spell, SE_Teleport))
&&(!IsEffectInSpell(spell, SE_Succor)))
{
int mana;
mana = spells[spell].mana;
mana = (GetActSpellCost(spell, mana))*2;
if(c->GetMana() >= mana)
{
int newmana=(c->GetMana() - mana);
entity_list.AESpell(c,c,100,spell);
c->CastSpell(spell,ct,9,0,0,0,0);
c->SetMana(newmana);
}
else
{
c->Message(13,"Insufficient Mana to cast this Spell.");
break;
}
}
else
{
c->Message(0,"MGB only works with Group Buffs!");
break;
}
int usemod=CastToClient()->GetAAStruct()->god_ability.named.quick_mass_group_buff;
int time;
if(usemod == 1){time=3888;}
else if(usemod == 2){time=3456;}
else if(usemod == 3){time=3024;}
else{time=4320;}
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 36: //divine rezz
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.divine_resurrection;
if(cur_level == 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastSpell(2738,targ,9,0,0,0,0);
timermod=64800;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 37: //innate ivu
{
targ=ct;
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.innate_invis_to_undead;
if(cur_level == 1)
{
CastSpell(2739,targ,9,0,0,0,0);
timermod=7;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 38: //celest regen
{
targ=ct;
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.celestial_regeneration;
if(cur_level == 1)
{
int mod=CastToClient()->GetAAStruct()->pop_ability.named.celestial_renewal;
int spell;
if(mod == 0){spell=2740;}
else if(mod==1){spell=3250;}
else if(mod==2){spell=3251;}
CastSpell(spell,targ,9,100,0,0,0);
timermod=900;
break;
}
else
CastToClient()->Message(0,"you have not learned this skill");
}
break;
case 39: //bestow DA
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.bestow_divine_aura;
if(cur_level == 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastSpell(2741,targ,9,0,0,0,0);
int mod=CastToClient()->GetAAStruct()->pop_ability.named.hastened_divinity;
int time;
if(mod == 0){time=8640;}
else if(mod == 1){time=7776;}
else if(mod == 2){time=6912;}
else if(mod == 3){time=6048;}
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 40: //turn undead
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.turn_undead;
int mod=CastToClient()->GetAAStruct()->pop_ability.named.hastened_turning;
if(cur_level > 0)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
int spell;
if(cur_level==1){spell=2776;}
else if(cur_level==2){spell=2777;}
else if(cur_level==3){spell=2778;}
int time;
if(mod==0){time=4320;}
else if(mod==1){time=3888;}
else if(mod==2){time=3456;}
else if(mod==3){time=3024;}
CastSpell(spell,targ,9,2500,0,0,0);
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 41: //purify soul
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.purify_soul;
int mod=CastToClient()->GetAAStruct()->pop_ability.named.hastened_purification_of_the_sou l;
if(cur_level==1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastSpell(2742,targ,9,0,0,0,0);
int time;
if(mod==0){time=1800;}
else if(mod==1){time=1620;}
else if(mod==2){time=1440;}
else if(mod==3){time=1260;}
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 43: //exodus
{
targ=ct;
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.exodus;
int mod=CastToClient()->GetAAStruct()->pop_ability.named.hastened_exodus;
if(cur_level==1)
{
CastSpell(2771,targ,9,100,0,0,0);
int time;
if(mod==0){time=4320;}
else if(mod==1){time=3888;}
else if(mod==2){time=3456;}
else if(mod==3){time=3024;}
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 46: //dire charm
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.dire_charm;
if(cur_level==1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
int spell;
if((CastToClient()->GetClass())==DRUID){spell=2760;}
else if((CastToClient()->GetClass())==ENCHANTER){spell=2761;}
else if((CastToClient()->GetClass())==NECROMANCER){spell=2759;}
CastSpell(spell,targ,9,6000,0,0,0);
timermod=4320;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 47: //cannibalization
{
targ=ct;
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.cannibalization;
if(cur_level == 1)
{
CastSpell(2749,targ,9,2500,0,0,0);
timermod=180;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 50: //rabid bear
{
targ=ct;
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.rabid_bear;
int mod=CastToClient()->GetAAStruct()->pop_ability.named.hastened_rabidity;
if(cur_level==1)
{
int time;
if(mod==0){time=7200;}
else if(mod==1){time=6480;}
else if(mod==2){time=5760;}
else if(mod==3){time=5040;}
CastSpell(2750,targ,9,100,0,0,0);
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 52: //wizard familiars
{
targ=ct;
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.improved_familiar;
if(cur_level==1)
{
int mod=CastToClient()->GetAAStruct()->pop_ability.named.allegiant_familiar;
int spell;
if(mod==0){spell=2758;}
else if(mod==1){spell=3264;}
CastSpell(spell,targ,9,16000,0,0,0);
timermod=7;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 53: //nexus gate
{
targ=ct;
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.nexus_gate;
if(cur_level==1)
{
CastSpell(2734,targ,9,0,0,0,0);
timermod=4320;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 57: //gather mana
{
targ=ct;
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.gather_mana;
if(cur_level==1)
{
int mod=CastToClient()->GetAAStruct()->pop_ability.named.hastened_gathering;
int time;
if(mod==0){time=8640;}
else if(mod==1){time=7776;}
else if(mod==2){time=6912;}
else if(mod==3){time=6048;}
CastSpell(2753,targ,9,2000,0,0,0);
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 58: //Mend Companion
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.mend_companion;
if(cur_level==1)
{
targ=ct;
int mod=CastToClient()->GetAAStruct()->pop_ability.named.hastened_mending;
int time;
if(mod==0){time=2160;}
else if(mod==1){time=1944;}
else if(mod==2){time=1728;}
else if(mod==3){time=1512;}
CastSpell(2752,targ,9,0,0,0,0);
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 60: //Frenzied Burnout
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.frenzied_burnout;
if(cur_level == 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastSpell(2754,targ,9,2000,0,0,0);
timermod=4320;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 61: //mage ele form fire
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.elemental_form_fire;
if(cur_level >= 1)
{
targ=ct;
int spell;
if(cur_level==1){spell=2795;}
if(cur_level==2){spell=2796;}
if(cur_level==3){spell=2797;}
CastSpell(spell,targ,9,8000,0,0,0);
timermod=900;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 62: //mage ele form water
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.elemental_form_water;
if(cur_level >= 1)
{
targ=ct;
int spell;
if(cur_level==1){spell=2798;}
if(cur_level==2){spell=2799;}
if(cur_level==3){spell=2800;}
CastSpell(spell,targ,9,8000,0,0,0);
timermod=900;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 63: //mage ele form earth
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.elemental_form_earth;
if(cur_level >= 1)
{
targ=ct;
int spell;
if(cur_level==1){spell=2792;}
if(cur_level==2){spell=2793;}
if(cur_level==3){spell=2794;}
CastSpell(spell,targ,9,8000,0,0,0);
timermod=900;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 64: //mage ele form air
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.elemental_form_air;
if(cur_level >= 1)
{
targ=ct;
int spell;
if(cur_level==1){spell=2789;}
if(cur_level==2){spell=2790;}
if(cur_level==3){spell=2791;}
CastSpell(spell,targ,9,8000,0,0,0);
timermod=900;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 66: //turn summoned.....supposed to be 3 levs?? UI only has 1??
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.turn_summoned;
int mod=CastToClient()->GetAAStruct()->pop_ability.named.hastened_banishment;
if(cur_level > 0)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
int spell;
if(cur_level==1){spell=2779;}
else if(cur_level==2){spell=2780;}
else if(cur_level==3){spell=2781;}
int time;
if(mod==0){time=4320;}
else if(mod==1){time=3888;}
else if(mod==2){time=3456;}
else if(mod==3){time=3024;}
CastSpell(spell,targ,9,2500,0,0,0);
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 68: //Life Burn
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.life_burn;
if(cur_level==1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastSpell(2755,targ,9,6000,0,0,0);
timermod=8640;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 69: //Dead mesmerization
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.dead_mesmerization;
if(cur_level==1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastToClient()->Message(0,"Sorry, Dead Mesmerization not working YET");
CastSpell(2756,targ,9,3000,0,0,0);
timermod=4320;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 70: //fearstorm
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.fearstorm;
if(cur_level==1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastSpell(2757,targ,9,3000,0,0,0);
timermod=4320;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 71: //flesh to bone
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.flesh_to_bone;
if(cur_level==1)
{
targ=ct;
CastToClient()->Message(0,"Sorry, Flesh to Bone not working YET");
CastSpell(2772,targ,9,3000,0,0,0);
timermod=7;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 72: //call to corpse
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.call_to_corpse;
if(cur_level==1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastSpell(2764,targ,9,5000,0,0,0);
timermod=4320;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 73: //divine stun
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.divine_stun;
int mod=CastToClient()->GetAAStruct()->pop_ability.named.rush_to_judgment;
if(cur_level == 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
int time;
if(mod==0){time=30;}
else if(mod==1){time=23;}
else if(mod==2){time=16;}
else if(mod==3){time=9;}
CastSpell(2190,targ,9,1500,0,0,0);
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 76: //act of valor
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.act_of_valor;
if(cur_level == 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastSpell(2775,targ,9,0,0,0,0);
int heal=c->GetHP();
int curhp=target->GetHP();
target->SetHP(heal+curhp);
c->Death(c,0,0,0);
timermod=4320;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 77: //holy steed------Default fast horse
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.holy_steed;
if(cur_level == 1)
{
targ=ct;
CastSpell(2871,targ,9,2000,0,0,0);
timermod=1;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 80: //innate camo
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.innate_camouflage;
if(cur_level == 1)
{
targ=ct;
CastSpell(2765,targ,9,1,0,0,0);
timermod=7;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 85: //unholy steed-----default fast horse
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.unholy_steed;
if(cur_level == 1)
{
targ=ct;
CastSpell(2918,targ,9,2000,0,0,0);
timermod=1;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 86: //Improved HT
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.improved_harm_touch;
if(cur_level == 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastToClient()->Message(0,"Sorry Improved harmtouch not working YET");
timermod=4320;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 87: //Leech touch
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.leech_touch;
if(cur_level == 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastSpell(2766,targ,9,1,0,0,0);
timermod=4320;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 98: //purify body
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.purify_body;
int mod=CastToClient()->GetAAStruct()->pop_ability.named.hastened_purification_of_the_bod y;
if(cur_level == 1)
{
targ=ct;
CastToClient()->Message(0,"Sorry, Purify Body not working YET");
int time;
if(mod==0){time=4320;}
else if(mod==1){time=3888;}
else if(mod==2){time=3456;}
else if(mod==3){time=3024;}
CastSpell(2190,targ,9,0,0,0,0);
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 102: //escape
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.escape;
int mod=CastToClient()->GetAAStruct()->pop_ability.named.hasty_exit;
int modtwo=CastToClient()->GetAAStruct()->god_ability.named.improved_hasty_exit;
if(cur_level == 1)
{
targ=ct;
CastToClient()->Message(0,"Sorry, Escape not working YET");
int time;
if(mod==0){time=4320;}
else if((mod==1)&&(modtwo==0)){time=3888;}
else if((mod==2)&&(modtwo==0)){time=3456;}
else if((mod==3)&&(modtwo==0)){time=3024;}
else if((mod==3)&&(modtwo==1)){time=2592;}
else if((mod==3)&&(modtwo==2)){time=2175;}
CastSpell(5244,targ,9,0,0,0,0);
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 107: //purge poison
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.purge_poison;
int mod=CastToClient()->GetAAStruct()->pop_ability.named.hastened_purification;
if(cur_level == 1)
{
targ=ct;
CastToClient()->Message(0,"Sorry, Purify Body not working YET");
int time;
if(mod==0){time=4320;}
else if(mod==1){time=3888;}
else if(mod==2){time=3456;}
else if(mod==3){time=3024;}
CastSpell(5232,targ,9,0,0,0,0);
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 109: //rampage
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.rampage;
int mod=CastToClient()->GetAAStruct()->pop_ability.named.furious_rampage;
if(cur_level == 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
Attack(target,13);
int time;
if(mod==0){time=600;}
else if(mod==1){time=540;}
else if(mod==2){time=480;}
else if(mod==3){time=420;}
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 110: //AE taunt
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.area_taunt;
int mod=CastToClient()->GetAAStruct()->pop_ability.named.hastened_instigation;
if(cur_level == 1)
{
targ=ct;
CastToClient()->Message(0,"Sorry, AE Taunt not working YET");
int time;
if(mod==0){time=900;}
else if(mod==1){time=810;}
else if(mod==2){time=720;}
else if(mod==3){time=630;}
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 111: //warcry
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.warcry;
if(cur_level >= 1)
{
targ=ct;
CastToClient()->Message(0,"Sorry, Warcry not working YET");
int spell;
if(cur_level==1){spell=5229;}
else if(cur_level==2){spell=5230;}
else if(cur_level==3){spell=5231;}
CastSpell(spell,targ,9,0,0,0,0);
timermod=2160;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 117: //strong root
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.strong_root;
int mod=CastToClient()->GetAAStruct()->pop_ability.named.hastened_root;
if(cur_level == 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
int time;
if(mod==0){time=4320;}
else if(mod==1){time=3888;}
else if(mod==2){time=3456;}
else if(mod==3){time=3024;}
CastSpell(2748,targ,9,2000,0,0,0);
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 126: //hobble of spirits
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.hobble_of_spirits;
if(cur_level == 1)
{
targ=ct;
CastSpell(3290,targ,9,3000,0,0,0);
timermod=300;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 127: //frenzy of spirit
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.frenzy_of_spirit;
if(cur_level == 1)
{
targ=ct;
CastSpell(3289,targ,9,0,0,0,0);
timermod=720;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 128: //paragon
{
int cur_level=CastToClient()->GetAAStruct()->class_skills.named.paragon_of_spirit;
if(cur_level == 1)
{
targ=ct;
CastSpell(3291,targ,9,5000,0,0,0);
timermod=900;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 153: //radiant cure
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.radiant_cure;
int mod=CastToClient()->GetAAStruct()->god_ability.named.quickened_curing;
if(cur_level >= 1)
{
targ=ct;
int spell;
if(cur_level==1){spell=3297;}
else if(cur_level==2){spell=3298;}
else if(cur_level==3){spell=3299;}
int time;
if(mod==0){time=180;}
else if(mod==1){time=162;}
else if(mod==2){time=144;}
else if(mod==3){time=126;}
CastSpell(spell,targ,9,3500,0,0,0);
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 169: //divine arbitration
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.divine_arbitration;
if(cur_level >= 1)
{
targ=ct;
int spell;
if(cur_level==1){spell=3252;}
else if(cur_level==2){spell=3253;}
else if(cur_level==3){spell=3254;}
CastSpell(spell,targ,9,750,0,0,0);
timermod=180;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 170: //wrath of the wild
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.wrath_of_the_wild;
if(cur_level >= 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
int spell;
if(cur_level==1){spell=3255;}
else if(cur_level==2){spell=3256;}
else if(cur_level==3){spell=3257;}
CastSpell(spell,targ,9,1000,0,0,0);
timermod=240;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 171: //virulent paralysis
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.virulent_paralysis;
if(cur_level >= 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
int spell;
if(cur_level==1){spell=3274;}
else if(cur_level==2){spell=3275;}
else if(cur_level==3){spell=3276;}
CastSpell(spell,targ,9,2000,0,0,0);
timermod=120;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 172: //harvest of druzzil
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.harvest_of_druzzil;
if(cur_level == 1)
{
targ=ct;
CastSpell(3338,targ,9,10000,0,0,0);
timermod=480;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 173: //eldritch rune
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.eldritch_rune;
if(cur_level >= 1)
{
targ=ct;
int spell;
if(cur_level==1){spell=3258;}
else if(cur_level==2){spell=3259;}
else if(cur_level==3){spell=3260;}
CastSpell(spell,targ,9,1,0,0,0);
timermod=600;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 174: //servant of ro
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.servant_of_ro;
if(cur_level >= 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastToClient()->Message(0,"Sorry, Servant of Ro not working YET");
int spell;
if(cur_level==1){spell=3265;}
else if(cur_level==2){spell=3266;}
else if(cur_level==3){spell=3267;}
CastSpell(spell,targ,9,500,0,0,0);
timermod=540;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 175: //wake the dead
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.wake_the_dead;
if(cur_level >= 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastToClient()->Message(0,"Sorry, Wake the Dead not working YET");
int spell;
if(cur_level==1){spell=3268;}
else if(cur_level==2){spell=3269;}
else if(cur_level==3){spell=3270;}
CastSpell(spell,targ,9,8000,0,0,0);
timermod=540;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 176: //suspend minion
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.suspended_minion;
if(cur_level >= 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastToClient()->Message(0,"Sorry Suspend Minion not working YET");
int spell;
if(cur_level==1){spell=3248;}
else if(cur_level==2){spell=3249;}
CastSpell(spell,targ,9,4000,0,0,0);
timermod=1;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 177: //spirit call
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.spirit_call;
if(cur_level >= 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastToClient()->Message(0,"Sorry, Spirit Call not working YET");
int spell;
if(cur_level==1){spell=3283;}
else if(cur_level==2){spell=3284;}
else if(cur_level==3){spell=3285;}
CastSpell(spell,targ,9,6500,0,0,0);
timermod=720;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 180: //hand of piety
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.hand_of_piety;
int mod=CastToClient()->GetAAStruct()->god_ability.named.hastened_piety;
if(cur_level >= 1)
{
targ=ct;
int spell;
if(cur_level==1){spell=3261;}
else if(cur_level==2){spell=3262;}
else if(cur_level==3){spell=3263;}
int time;
if(mod==0){time=2160;}
else if(mod==1){time=1920;}
else if(mod==2){time=1680;}
else if(mod==3){time=1440;}
CastSpell(spell,targ,9,0,0,0,0);
timermod=time;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 184: //guardian of the forest
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.guardian_of_the_forest;
if(cur_level >= 1)
{
targ=ct;
int spell;
if(cur_level==1){spell=3271;}
else if(cur_level==2){spell=3272;}
else if(cur_level==3){spell=3273;}
CastSpell(spell,targ,9,0,0,0,0);
timermod=900;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 185: //spirit of the wood
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.spirit_of_the_wood;
if(cur_level >= 1)
{
targ=ct;
int spell;
if(cur_level==1){spell=3277;}
else if(cur_level==2){spell=3278;}
else if(cur_level==3){spell=3279;}
CastSpell(spell,targ,9,0,0,0,0);
timermod=1320;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 199: //boastfull bellow
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.boastful_bellow;
if(cur_level == 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
CastSpell(3282,targ,9,0,0,0,0);
timermod=18;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 207: //host of elements
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.host_of_the_elements;
if(cur_level >= 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
int spell;
if(cur_level==1){spell=3286;}
else if(cur_level==2){spell=3287;}
else if(cur_level==3){spell=3288;}
CastSpell(spell,targ,9,6500,0,0,0);
timermod=1320;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;
case 208: //call of xuzl
{
int cur_level=CastToClient()->GetAAStruct()->pop_ability.named.call_of_xuzl;
if(cur_level >= 1)
{
if(target>0){targ=target->GetID();}
else if(target==0)
{
CastToClient()->Message(0,"Skill requires a target");
break;
}
int spell;
if(cur_level==1){spell=3292;}
else if(cur_level==2){spell=3293;}
else if(cur_level==3){spell=3294;}
CastSpell(spell,targ,9,6500,0,0,0);
timermod=900;
break;
}
else
CastToClient()->Message(0,"You have not learned this skill");
}
break;