mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-12 05:21:29 +00:00
Removed fluff code, added drakkin heritage and status can use modifiers to aa abilities
This commit is contained in:
parent
e5d1e98793
commit
65ac9683a3
468
zone/aa.cpp
468
zone/aa.cpp
@ -37,428 +37,6 @@ Copyright (C) 2001-2004 EQEMu Development Team (http://eqemulator.net)
|
||||
|
||||
extern QueryServ* QServ;
|
||||
|
||||
int Client::CalcAAReuseTimer(const AA_DBAction *caa) {
|
||||
|
||||
if(!caa)
|
||||
return 0;
|
||||
|
||||
int ReuseTime = caa->reuse_time;
|
||||
|
||||
if(ReuseTime > 0)
|
||||
{
|
||||
int ReductionPercentage;
|
||||
|
||||
if(caa->redux_aa > 0 && caa->redux_aa < aaHighestID)
|
||||
{
|
||||
ReductionPercentage = GetAA(caa->redux_aa) * caa->redux_rate;
|
||||
|
||||
if(caa->redux_aa2 > 0 && caa->redux_aa2 < aaHighestID)
|
||||
ReductionPercentage += (GetAA(caa->redux_aa2) * caa->redux_rate2);
|
||||
|
||||
ReuseTime = caa->reuse_time * (100 - ReductionPercentage) / 100;
|
||||
}
|
||||
|
||||
}
|
||||
return ReuseTime;
|
||||
}
|
||||
|
||||
void Client::ActivateAA(aaID activate){
|
||||
// if(activate < 0 || activate >= aaHighestID)
|
||||
// return;
|
||||
// if(IsStunned() || IsFeared() || IsMezzed() || IsSilenced() || IsPet() || IsSitting() || GetFeigned())
|
||||
// return;
|
||||
//
|
||||
// int AATimerID = GetAATimerID(activate);
|
||||
//
|
||||
// SendAA_Struct* aa2 = nullptr;
|
||||
// aaID aaid = activate;
|
||||
// uint8 activate_val = GetAA(activate);
|
||||
// //this wasn't taking into acct multi tiered act talents before...
|
||||
// if(activate_val == 0){
|
||||
// aa2 = zone->FindAA(activate);
|
||||
// if(!aa2){
|
||||
// int i;
|
||||
// int a;
|
||||
// for(i=1;i<MAX_AA_ACTION_RANKS;i++){
|
||||
// a = activate - i;
|
||||
// if(a <= 0)
|
||||
// break;
|
||||
//
|
||||
// aa2 = zone->FindAA(a);
|
||||
// if(aa2 != nullptr)
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// if(aa2){
|
||||
// aaid = (aaID) aa2->id;
|
||||
// activate_val = GetAA(aa2->id);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if (activate_val == 0){
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// if(aa2)
|
||||
// {
|
||||
// if(aa2->account_time_required)
|
||||
// {
|
||||
// if((Timer::GetTimeSeconds() + account_creation) < aa2->account_time_required)
|
||||
// {
|
||||
// return;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if(!p_timers.Expired(&database, AATimerID + pTimerAAStart))
|
||||
// {
|
||||
// uint32 aaremain = p_timers.GetRemainingTime(AATimerID + pTimerAAStart);
|
||||
// uint32 aaremain_hr = aaremain / (60 * 60);
|
||||
// uint32 aaremain_min = (aaremain / 60) % 60;
|
||||
// uint32 aaremain_sec = aaremain % 60;
|
||||
//
|
||||
// if(aa2) {
|
||||
// if (aaremain_hr >= 1) //1 hour or more
|
||||
// Message(13, "You can use the ability %s again in %u hour(s) %u minute(s) %u seconds",
|
||||
// aa2->name, aaremain_hr, aaremain_min, aaremain_sec);
|
||||
// else //less than an hour
|
||||
// Message(13, "You can use the ability %s again in %u minute(s) %u seconds",
|
||||
// aa2->name, aaremain_min, aaremain_sec);
|
||||
// } else {
|
||||
// if (aaremain_hr >= 1) //1 hour or more
|
||||
// Message(13, "You can use this ability again in %u hour(s) %u minute(s) %u seconds",
|
||||
// aaremain_hr, aaremain_min, aaremain_sec);
|
||||
// else //less than an hour
|
||||
// Message(13, "You can use this ability again in %u minute(s) %u seconds",
|
||||
// aaremain_min, aaremain_sec);
|
||||
// }
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// if(activate_val > MAX_AA_ACTION_RANKS)
|
||||
// activate_val = MAX_AA_ACTION_RANKS;
|
||||
// activate_val--; //to get array index.
|
||||
//
|
||||
// //get our current node, now that the indices are well bounded
|
||||
// const AA_DBAction *caa = &AA_Actions[aaid][activate_val];
|
||||
//
|
||||
// if((aaid == aaImprovedHarmTouch || aaid == aaLeechTouch) && !p_timers.Expired(&database, pTimerHarmTouch)){
|
||||
// Message(13,"Ability recovery time not yet met.");
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// //everything should be configured out now
|
||||
//
|
||||
// uint16 target_id = 0;
|
||||
//
|
||||
// //figure out our target
|
||||
// switch(caa->target) {
|
||||
// case aaTargetUser:
|
||||
// case aaTargetGroup:
|
||||
// target_id = GetID();
|
||||
// break;
|
||||
// case aaTargetCurrent:
|
||||
// case aaTargetCurrentGroup:
|
||||
// if(GetTarget() == nullptr) {
|
||||
// Message_StringID(MT_DefaultText, AA_NO_TARGET); //You must first select a target for this ability!
|
||||
// p_timers.Clear(&database, AATimerID + pTimerAAStart);
|
||||
// return;
|
||||
// }
|
||||
// target_id = GetTarget()->GetID();
|
||||
// break;
|
||||
// case aaTargetPet:
|
||||
// if(GetPet() == nullptr) {
|
||||
// Message(0, "A pet is required for this skill.");
|
||||
// return;
|
||||
// }
|
||||
// target_id = GetPetID();
|
||||
// break;
|
||||
// }
|
||||
//
|
||||
// //handle non-spell action
|
||||
// if(caa->action != aaActionNone) {
|
||||
// if(caa->mana_cost > 0) {
|
||||
// if(GetMana() < caa->mana_cost) {
|
||||
// Message_StringID(13, INSUFFICIENT_MANA);
|
||||
// return;
|
||||
// }
|
||||
// SetMana(GetMana() - caa->mana_cost);
|
||||
// }
|
||||
// if(caa->reuse_time > 0)
|
||||
// {
|
||||
// uint32 timer_base = CalcAAReuseTimer(caa);
|
||||
// if(activate == aaImprovedHarmTouch || activate == aaLeechTouch)
|
||||
// {
|
||||
// p_timers.Start(pTimerHarmTouch, HarmTouchReuseTime);
|
||||
// }
|
||||
// p_timers.Start(AATimerID + pTimerAAStart, timer_base);
|
||||
// SendAATimer(AATimerID, 0, 0);
|
||||
// }
|
||||
// HandleAAAction(aaid);
|
||||
// }
|
||||
//
|
||||
// //cast the spell, if we have one
|
||||
// if(caa->spell_id > 0 && caa->spell_id < SPDAT_RECORDS) {
|
||||
//
|
||||
// if(caa->reuse_time > 0)
|
||||
// {
|
||||
// uint32 timer_base = CalcAAReuseTimer(caa);
|
||||
// SendAATimer(AATimerID, 0, 0);
|
||||
// p_timers.Start(AATimerID + pTimerAAStart, timer_base);
|
||||
// if(activate == aaImprovedHarmTouch || activate == aaLeechTouch)
|
||||
// {
|
||||
// p_timers.Start(pTimerHarmTouch, HarmTouchReuseTime);
|
||||
// }
|
||||
// // Bards can cast instant cast AAs while they are casting another song
|
||||
// if (spells[caa->spell_id].cast_time == 0 && GetClass() == BARD && IsBardSong(casting_spell_id)) {
|
||||
// if(!SpellFinished(caa->spell_id, entity_list.GetMob(target_id), 10, -1, -1, spells[caa->spell_id].ResistDiff, false)) {
|
||||
// //Reset on failed cast
|
||||
// SendAATimer(AATimerID, 0, 0xFFFFFF);
|
||||
// Message_StringID(15,ABILITY_FAILED);
|
||||
// p_timers.Clear(&database, AATimerID + pTimerAAStart);
|
||||
// return;
|
||||
// }
|
||||
// } else {
|
||||
// if (!CastSpell(caa->spell_id, target_id, USE_ITEM_SPELL_SLOT, -1, -1, 0, -1, AATimerID + pTimerAAStart, timer_base, 1)) {
|
||||
// //Reset on failed cast
|
||||
// SendAATimer(AATimerID, 0, 0xFFFFFF);
|
||||
// Message_StringID(15,ABILITY_FAILED);
|
||||
// p_timers.Clear(&database, AATimerID + pTimerAAStart);
|
||||
// return;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// if(!CastSpell(caa->spell_id, target_id))
|
||||
// return;
|
||||
// }
|
||||
// }
|
||||
// // Check if AA is expendable
|
||||
// if (aas_send[activate - activate_val]->special_category == 7) {
|
||||
//
|
||||
// // Add the AA cost to the extended profile to track overall total
|
||||
// m_epp.expended_aa += aas_send[activate]->cost;
|
||||
//
|
||||
// SetAA(activate, 0);
|
||||
//
|
||||
// SaveAA(); /* Save Character AA */
|
||||
// SendAA(activate);
|
||||
// SendAATable();
|
||||
// }
|
||||
}
|
||||
|
||||
void Client::HandleAAAction(aaID activate) {
|
||||
// if(activate < 0 || activate >= aaHighestID)
|
||||
// return;
|
||||
//
|
||||
// uint8 activate_val = GetAA(activate);
|
||||
//
|
||||
// if (activate_val == 0)
|
||||
// return;
|
||||
//
|
||||
// if(activate_val > MAX_AA_ACTION_RANKS)
|
||||
// activate_val = MAX_AA_ACTION_RANKS;
|
||||
// activate_val--; //to get array index.
|
||||
//
|
||||
// //get our current node, now that the indices are well bounded
|
||||
// const AA_DBAction *caa = &AA_Actions[activate][activate_val];
|
||||
//
|
||||
// uint16 timer_id = 0;
|
||||
// uint16 timer_duration = caa->duration;
|
||||
// aaTargetType target = aaTargetUser;
|
||||
//
|
||||
// uint16 spell_id = SPELL_UNKNOWN; //gets cast at the end if not still unknown
|
||||
//
|
||||
// switch(caa->action) {
|
||||
// case aaActionAETaunt:
|
||||
// entity_list.AETaunt(this);
|
||||
// break;
|
||||
//
|
||||
// case aaActionFlamingArrows:
|
||||
// //toggle it
|
||||
// if(CheckAAEffect(aaEffectFlamingArrows))
|
||||
// EnableAAEffect(aaEffectFlamingArrows);
|
||||
// else
|
||||
// DisableAAEffect(aaEffectFlamingArrows);
|
||||
// break;
|
||||
//
|
||||
// case aaActionFrostArrows:
|
||||
// if(CheckAAEffect(aaEffectFrostArrows))
|
||||
// EnableAAEffect(aaEffectFrostArrows);
|
||||
// else
|
||||
// DisableAAEffect(aaEffectFrostArrows);
|
||||
// break;
|
||||
//
|
||||
// case aaActionRampage:
|
||||
// EnableAAEffect(aaEffectRampage, 10);
|
||||
// break;
|
||||
//
|
||||
// case aaActionSharedHealth:
|
||||
// if(CheckAAEffect(aaEffectSharedHealth))
|
||||
// EnableAAEffect(aaEffectSharedHealth);
|
||||
// else
|
||||
// DisableAAEffect(aaEffectSharedHealth);
|
||||
// break;
|
||||
//
|
||||
// case aaActionCelestialRegen: {
|
||||
// //special because spell_id depends on a different AA
|
||||
// switch (GetAA(aaCelestialRenewal)) {
|
||||
// case 1:
|
||||
// spell_id = 3250;
|
||||
// break;
|
||||
// case 2:
|
||||
// spell_id = 3251;
|
||||
// break;
|
||||
// default:
|
||||
// spell_id = 2740;
|
||||
// break;
|
||||
// }
|
||||
// target = aaTargetCurrent;
|
||||
// break;
|
||||
// }
|
||||
//
|
||||
// case aaActionDireCharm: {
|
||||
// //special because spell_id depends on class
|
||||
// switch (GetClass())
|
||||
// {
|
||||
// case DRUID:
|
||||
// spell_id = 2760; //2644?
|
||||
// break;
|
||||
// case NECROMANCER:
|
||||
// spell_id = 2759; //2643?
|
||||
// break;
|
||||
// case ENCHANTER:
|
||||
// spell_id = 2761; //2642?
|
||||
// break;
|
||||
// }
|
||||
// target = aaTargetCurrent;
|
||||
// break;
|
||||
// }
|
||||
//
|
||||
// case aaActionImprovedFamiliar: {
|
||||
// //Spell IDs might be wrong...
|
||||
// if (GetAA(aaAllegiantFamiliar))
|
||||
// spell_id = 3264; //1994?
|
||||
// else
|
||||
// spell_id = 2758; //2155?
|
||||
// break;
|
||||
// }
|
||||
//
|
||||
// case aaActionActOfValor:
|
||||
// if(GetTarget() != nullptr) {
|
||||
// int curhp = GetTarget()->GetHP();
|
||||
// target = aaTargetCurrent;
|
||||
// GetTarget()->HealDamage(curhp, this);
|
||||
// Death(this, 0, SPELL_UNKNOWN, SkillHandtoHand);
|
||||
// }
|
||||
// break;
|
||||
//
|
||||
// case aaActionSuspendedMinion:
|
||||
// if (GetPet()) {
|
||||
// target = aaTargetPet;
|
||||
// switch (GetAA(aaSuspendedMinion)) {
|
||||
// case 1:
|
||||
// spell_id = 3248;
|
||||
// break;
|
||||
// case 2:
|
||||
// spell_id = 3249;
|
||||
// break;
|
||||
// }
|
||||
// //do we really need to cast a spell?
|
||||
//
|
||||
// Message(0,"You call your pet to your side.");
|
||||
// GetPet()->WipeHateList();
|
||||
// GetPet()->GMMove(GetX(),GetY(),GetZ());
|
||||
// if (activate_val > 1)
|
||||
// entity_list.ClearFeignAggro(GetPet());
|
||||
// } else {
|
||||
// Message(0,"You have no pet to call.");
|
||||
// }
|
||||
// break;
|
||||
//
|
||||
// case aaActionEscape:
|
||||
// Escape();
|
||||
// break;
|
||||
//
|
||||
// // Don't think this code is used any longer for Bestial Alignment as the aa.has a spell_id and no nonspell_action.
|
||||
// case aaActionBeastialAlignment:
|
||||
// switch(GetBaseRace()) {
|
||||
// case BARBARIAN:
|
||||
// spell_id = AA_Choose3(activate_val, 4521, 4522, 4523);
|
||||
// break;
|
||||
// case TROLL:
|
||||
// spell_id = AA_Choose3(activate_val, 4524, 4525, 4526);
|
||||
// break;
|
||||
// case OGRE:
|
||||
// spell_id = AA_Choose3(activate_val, 4527, 4527, 4529);
|
||||
// break;
|
||||
// case IKSAR:
|
||||
// spell_id = AA_Choose3(activate_val, 4530, 4531, 4532);
|
||||
// break;
|
||||
// case VAHSHIR:
|
||||
// spell_id = AA_Choose3(activate_val, 4533, 4534, 4535);
|
||||
// break;
|
||||
// }
|
||||
//
|
||||
// case aaActionLeechTouch:
|
||||
// target = aaTargetCurrent;
|
||||
// spell_id = SPELL_HARM_TOUCH2;
|
||||
// EnableAAEffect(aaEffectLeechTouch, 1000);
|
||||
// break;
|
||||
//
|
||||
// case aaActionFadingMemories:
|
||||
// // Do nothing since spell effect works correctly, but mana isn't used.
|
||||
// break;
|
||||
//
|
||||
// default:
|
||||
// Log.Out(Logs::General, Logs::Error, "Unknown AA nonspell action type %d", caa->action);
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
//
|
||||
// uint16 target_id = 0;
|
||||
// //figure out our target
|
||||
// switch(target) {
|
||||
// case aaTargetUser:
|
||||
// case aaTargetGroup:
|
||||
// target_id = GetID();
|
||||
// break;
|
||||
// case aaTargetCurrent:
|
||||
// case aaTargetCurrentGroup:
|
||||
// if(GetTarget() == nullptr) {
|
||||
// Message_StringID(MT_DefaultText, AA_NO_TARGET); //You must first select a target for this ability!
|
||||
// p_timers.Clear(&database, timer_id + pTimerAAEffectStart);
|
||||
// return;
|
||||
// }
|
||||
// target_id = GetTarget()->GetID();
|
||||
// break;
|
||||
// case aaTargetPet:
|
||||
// if(GetPet() == nullptr) {
|
||||
// Message(0, "A pet is required for this skill.");
|
||||
// return;
|
||||
// }
|
||||
// target_id = GetPetID();
|
||||
// break;
|
||||
// }
|
||||
//
|
||||
// //cast the spell, if we have one
|
||||
// if(IsValidSpell(spell_id)) {
|
||||
// int aatid = GetAATimerID(activate);
|
||||
// if (!CastSpell(spell_id, target_id, USE_ITEM_SPELL_SLOT, -1, -1, 0, -1, pTimerAAStart + aatid, CalcAAReuseTimer(caa), 1)) {
|
||||
// SendAATimer(aatid, 0, 0xFFFFFF);
|
||||
// Message_StringID(15,ABILITY_FAILED);
|
||||
// p_timers.Clear(&database, pTimerAAStart + aatid);
|
||||
// return;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// //handle the duration timer if we have one.
|
||||
// if(timer_id > 0 && timer_duration > 0) {
|
||||
// p_timers.Start(pTimerAAEffectStart + timer_id, timer_duration);
|
||||
// }
|
||||
}
|
||||
|
||||
void Mob::TemporaryPets(uint16 spell_id, Mob *targ, const char *name_override, uint32 duration_override, bool followme, bool sticktarg) {
|
||||
|
||||
//It might not be a bad idea to put these into the database, eventually..
|
||||
@ -1333,7 +911,7 @@ void Client::SendAlternateAdvancementRank(int aa_id, int level) {
|
||||
aai->max_level = ability->GetMaxLevel(this);
|
||||
aai->prev_id = rank->prev_id;
|
||||
|
||||
if(rank->next && !CanUseAlternateAdvancementRank(rank->next)) {
|
||||
if(rank->next && !CanUseAlternateAdvancementRank(rank->next) || ability->charges > 0) {
|
||||
aai->next_id = -1;
|
||||
} else {
|
||||
aai->next_id = rank->next_id;
|
||||
@ -1834,28 +1412,16 @@ bool Mob::CanUseAlternateAdvancementRank(AA::Rank *rank) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check for racial/Drakkin blood line AAs
|
||||
//Commented this out for now, will add a drakkin heritage field later
|
||||
//if(ability->category == 8)
|
||||
//{
|
||||
// uint32 client_race = GetBaseRace();
|
||||
//
|
||||
// // Drakkin Bloodlines
|
||||
// if(rank->expansion > 522)
|
||||
// {
|
||||
// if(client_race != 522)
|
||||
// return false;
|
||||
//
|
||||
// int heritage = this->GetDrakkinHeritage() + 523; // 523 = Drakkin Race(522) + Bloodline
|
||||
//
|
||||
// if(heritage != rank->expansion)
|
||||
// return false;
|
||||
// }
|
||||
// else if(client_race != rank->expansion)
|
||||
// {
|
||||
// return false;
|
||||
// }
|
||||
//}
|
||||
if(IsClient() && CastToClient()->Admin() < ability->status) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(GetBaseRace() == 522) {
|
||||
//drakkin_heritage
|
||||
if(!(ability->drakkin_heritage & (1 << GetDrakkinHeritage()))) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -1963,7 +1529,7 @@ bool ZoneDatabase::LoadAlternateAdvancementAbilities(std::unordered_map<int, std
|
||||
{
|
||||
Log.Out(Logs::General, Logs::Status, "Loading Alternate Advancement Abilities...");
|
||||
abilities.clear();
|
||||
std::string query = "SELECT id, name, category, classes, races, deities, type, charges, grant_only, first_rank_id FROM aa_ability";
|
||||
std::string query = "SELECT id, name, category, classes, races, deities, drakkin_heritage, status, type, charges, grant_only, first_rank_id FROM aa_ability";
|
||||
auto results = QueryDatabase(query);
|
||||
if(results.Success()) {
|
||||
for(auto row = results.begin(); row != results.end(); ++row) {
|
||||
@ -1975,10 +1541,12 @@ bool ZoneDatabase::LoadAlternateAdvancementAbilities(std::unordered_map<int, std
|
||||
ability->classes = atoi(row[3]) << 1;
|
||||
ability->races = atoi(row[4]);
|
||||
ability->deities = atoi(row[5]);
|
||||
ability->type = atoi(row[6]);
|
||||
ability->charges = atoi(row[7]);
|
||||
ability->grant_only = atoi(row[8]) != 0 ? true : false;
|
||||
ability->first_rank_id = atoi(row[9]);
|
||||
ability->drakkin_heritage = atoi(row[6]);
|
||||
ability->status = atoi(row[7]);
|
||||
ability->type = atoi(row[8]);
|
||||
ability->charges = atoi(row[9]);
|
||||
ability->grant_only = atoi(row[10]) != 0 ? true : false;
|
||||
ability->first_rank_id = atoi(row[11]);
|
||||
ability->first = nullptr;
|
||||
|
||||
abilities[ability->id] = std::unique_ptr<AA::Ability>(ability);
|
||||
|
||||
605
zone/aa.h
605
zone/aa.h
@ -1,27 +1,8 @@
|
||||
|
||||
#ifndef AA_H
|
||||
#define AA_H
|
||||
|
||||
struct AA_Ability;
|
||||
struct SendAA_Struct;
|
||||
|
||||
|
||||
#define MANA_BURN 664
|
||||
|
||||
#include <map>
|
||||
|
||||
#define MAX_SWARM_PETS 12 //this can change as long as you make more coords (swarm_pet_x/swarm_pet_y)
|
||||
|
||||
//this might be missing some, and some might not be used...
|
||||
typedef enum { //AA Targeting Constants
|
||||
aaTargetUser = 1,
|
||||
aaTargetCurrent = 2, //use current target
|
||||
aaTargetGroup = 3, //target group of user
|
||||
aaTargetCurrentGroup = 4, //target group of current target
|
||||
aaTargetPet = 5 //target the user's pet
|
||||
} aaTargetType;
|
||||
|
||||
|
||||
typedef enum {
|
||||
aaActionNone = 0,
|
||||
aaActionAETaunt = 1,
|
||||
@ -133,571 +114,6 @@ static const uint8 LeadershipAACosts[_maxLeaderAA][MAX_LEADERSHIP_TIERS] = {
|
||||
{ 0, 0, 0, 0, 0, 0 }, //raidAA15
|
||||
};
|
||||
|
||||
/*
|
||||
typedef enum { //AA IDs
|
||||
aaNone = 0,
|
||||
aaInnateStrength = 2, //works
|
||||
aaInnateStamina = 7, //works
|
||||
aaInnateAgility = 12, //works
|
||||
//aaCompleteHeal = 13,/ //not implemented, but is in dbstr_us.txt
|
||||
aaInnateDexterity = 17, //works
|
||||
aaInnateIntelligence = 22, //works
|
||||
aaInnateWisdom = 27, //works
|
||||
aaInnateCharisma = 32, //works
|
||||
aaInnateFireProtection = 37, //works
|
||||
aaInnateColdProtection = 42, //works
|
||||
aaInnateMagicProtection = 47, //works
|
||||
aaInnatePoisonProtection = 52, //works
|
||||
aaInnateDiseaseProtection = 57, //works
|
||||
aaInnateRunSpeed = 62, //works
|
||||
aaInnateRegeneration = 65, //works
|
||||
aaInnateMetabolism = 68,
|
||||
aaInnateLungCapacity = 71, //handled by client
|
||||
aaFirstAid = 74, //untested
|
||||
aaHealingAdept = 77, //untested
|
||||
aaHealingGift = 80, //untested
|
||||
aaSpellCastingMastery = 83, //untested
|
||||
aaSpellCastingReinforcement = 86, //untested
|
||||
aaMentalClarity = 89,
|
||||
aaSpellCastingFury = 92, //untested
|
||||
aaChanellingFocus = 95,
|
||||
aaSpellCastingSubtlety = 98, //untested
|
||||
aaSpellCastingExpertise = 101, //untested
|
||||
aaSpellCastingDeftness = 104, //untested
|
||||
aaNaturalDurability = 107, //works
|
||||
aaNaturalHealing = 110, //untested
|
||||
aaCombatFury = 113, //untested
|
||||
aaFearResistance = 116, //untested
|
||||
aaFinishingBlow = 119, //untested
|
||||
aaCombatStability = 122,
|
||||
aaCombatAgility = 125,
|
||||
aaMassGroupBuff = 128, //untested
|
||||
aaDivineResurrection = 129, //DB
|
||||
aaInnateInvisToUndead = 130, //DB
|
||||
aaCelestialRegeneration = 131, //untested
|
||||
aaBestowDivineAura = 132, //DB
|
||||
aaTurnUndead = 133, //DB
|
||||
aaPurifySoul = 136, //DB
|
||||
aaQuickEvacuation = 137, //untested
|
||||
aaExodus = 140, //untested
|
||||
aaQuickDamage = 141, //untested
|
||||
aaEnhancedRoot = 144,
|
||||
aaDireCharm = 145, //untested
|
||||
aaCannibalization = 146, //DB
|
||||
aaQuickBuff = 147, //untested
|
||||
aaAlchemyMastery = 150,
|
||||
aaRabidBear = 153, //DB
|
||||
aaManaBurn = 154, //DB
|
||||
aaImprovedFamiliar = 155, //untested, implemented?
|
||||
aaNexusGate = 156, //DB
|
||||
aaUnknown54 = 157,
|
||||
aaPermanentIllusion = 158,
|
||||
aaJewelCraftMastery = 159,
|
||||
aaGatherMana = 162, //DB
|
||||
aaMendCompanion = 163, //DB
|
||||
aaQuickSummoning = 164, //untested
|
||||
aaFrenziedBurnout = 167, //DB
|
||||
aaElementalFormFire = 168, //DB
|
||||
aaElementalFormWater = 171, //DB
|
||||
aaElementalFormEarth = 174, //DB
|
||||
aaElementalFormAir = 177, //DB
|
||||
aaImprovedReclaimEnergy = 180, //untested
|
||||
aaTurnSummoned = 181, //DB
|
||||
aaElementalPact = 182, //DB
|
||||
aaLifeBurn = 183, //DB
|
||||
aaDeadMesmerization = 184, //DB
|
||||
aaFearstorm = 185, //DB
|
||||
aaFleshToBone = 186, //DB
|
||||
aaCallToCorpse = 187, //DB
|
||||
aaDivineStun = 188, //DB
|
||||
aaImprovedLayOnHands = 189,
|
||||
aaSlayUndead = 190,
|
||||
aaActOfValor = 193, //DB
|
||||
aaHolySteed = 194, //DB
|
||||
aaFearless = 195,
|
||||
aa2HandBash = 196, //works. handled by client?
|
||||
aaInnateCamouflage = 197, //DB
|
||||
aaAmbidexterity = 198, //untested
|
||||
aaArcheryMastery = 199, //untested
|
||||
aaFletchingMastery = 202, //removed from db?
|
||||
aaEndlessQuiver = 205, //untested
|
||||
aaUnholySteed = 206, //DB
|
||||
aaImprovedHarmTouch = 207, //untested
|
||||
aaLeechTouch = 208, //DB
|
||||
aaDeathPeace = 209,
|
||||
aaSoulAbrasion = 210, //untested
|
||||
aaInstrumentMastery = 213, //untested
|
||||
aaUnknown91 = 216, //not used
|
||||
aaUnknown92 = 219, //not used
|
||||
aaUnknown93 = 222, //not used
|
||||
aaJamFest = 225,
|
||||
aaUnknown95 = 228,
|
||||
aaSonicCall = 229,
|
||||
aaCriticalMend = 230, //untested
|
||||
aaPurifyBody = 233, //DB
|
||||
aaChainCombo = 234,
|
||||
aaRapidFeign = 237, //works
|
||||
aaReturnKick = 240,
|
||||
aaEscape = 243, //DB
|
||||
aaPoisonMastery = 244,
|
||||
aaDoubleRiposte = 247, //untested
|
||||
aaQuickHide = 250,
|
||||
aaQuickThrow = 253, //corrected from dbstr_us.txt
|
||||
aaPurgePoison = 254, //DB
|
||||
aaFlurry = 255, //untested
|
||||
aaRampage = 258, //untested
|
||||
aaAreaTaunt = 259, //untested
|
||||
aaWarcry = 260, //DB
|
||||
aaBandageWound = 263, //untested
|
||||
aaSpellCastingReinforcementMastery = 266, //untested
|
||||
aaSpellCastingFuryMastery = 267, //untested
|
||||
aaExtendedNotes = 270, //untested
|
||||
aaDragonPunch = 273,
|
||||
aaStrongRoot = 274, //DB
|
||||
aaSingingMastery = 275, //untested
|
||||
aaBodyAndMindRejuvenation = 278, //added
|
||||
aaPhysicalEnhancement = 279, //untested
|
||||
aaAdvTrapNegotiation = 280, //untested
|
||||
aaAcrobatics = 283, //untested
|
||||
aaScribbleNotes = 286,
|
||||
aaChaoticStab = 287, //untested
|
||||
aaPetDiscipline = 288, //added
|
||||
aaHobbleofSpirits = 289, //DB
|
||||
aaFrenzyofSpirit = 290, //DB
|
||||
aaParagonofSpirit = 291, //DB
|
||||
aaAdvancedInnateStrength = 292, //works
|
||||
aaAdvancedInnateStamina = 302, //works
|
||||
aaAdvancedInnateAgility = 312, //works
|
||||
aaAdvancedInnateDexterity = 322, //works
|
||||
aaAdvancedInnateIntelligence = 332, //works
|
||||
aaAdvancedInnateWisdom = 342, //works
|
||||
aaAdvancedInnateCharisma = 352, //works
|
||||
aaWardingofSolusek = 362, //works
|
||||
aaBlessingofEci = 372, //works
|
||||
aaMarrsProtection = 382, //works
|
||||
aaShroudofTheFaceless = 392, //works
|
||||
aaBertoxxulousGift = 402, //works
|
||||
aaNewTanaanCraftingMastery = 412,
|
||||
aaPlanarPower = 418, //untested
|
||||
aaPlanarDurability = 423, //added
|
||||
aaInnateEnlightenment = 426, //added
|
||||
aaAdvancedSpellCastingMastery = 431,//untested
|
||||
aaAdvancedHealingAdept = 434, //untested
|
||||
aaAdvancedHealingGift = 437, //untested
|
||||
aaCoupdeGrace = 440, //added
|
||||
aaFuryoftheAges = 443, //added
|
||||
aaMasteryofthePast = 446, //untested
|
||||
aaLightningReflexes = 449, //added
|
||||
aaInnateDefense = 454, //added
|
||||
aaRadiantCure = 459, //DB
|
||||
aaHastenedDivinity = 462, //DB
|
||||
aaHastenedTurning = 465, //DB
|
||||
aaHastenedPurificationofSoul = 468, //DB
|
||||
aaHastenedGathering = 471, //DB
|
||||
aaHastenedRabidity = 474, //DB
|
||||
aaHastenedExodus = 477, //DB
|
||||
aaHastenedRoot = 480, //DB
|
||||
aaHastenedMending = 483, //DB
|
||||
aaHastenedBanishment = 486, //DB
|
||||
aaHastenedInstigation = 489, //DB, maybe
|
||||
aaFuriousRampage = 492, //DB
|
||||
aaHastenedPurificationoftheBody = 495,//DB
|
||||
aaHastyExit = 498, //DB
|
||||
aaHastenedPurification = 501, //DB
|
||||
aaFlashofSteel = 504,
|
||||
aaDivineArbitration = 507, //DB
|
||||
aaWrathoftheWild = 510, //DB
|
||||
aaVirulentParalysis = 513, //DB
|
||||
aaHarvestofDruzzil = 516, //DB
|
||||
aaEldritchRune = 517, //DB
|
||||
aaServantofRo = 520, //DB
|
||||
aaWaketheDead = 523, //DB
|
||||
aaSuspendedMinion = 526, //untested
|
||||
aaSpiritCall = 528, //DB
|
||||
aaCelestialRenewal = 531, //DB
|
||||
aaAllegiantFamiliar = 533,
|
||||
aaHandofPiety = 534, //DB
|
||||
aaMithanielsBinding = 537, //untested
|
||||
aaMendingoftheTranquil = 539,
|
||||
aaRagingFlurry = 542,
|
||||
aaGuardianoftheForest = 545, //DB
|
||||
aaSpiritoftheWood = 548, //DB
|
||||
aaBestialFrenzy = 551, //untested
|
||||
aaHarmoniousAttack = 556, //untested
|
||||
aaKnightsAdvantage = 561,
|
||||
aaFerocity = 564,
|
||||
aaViscidRoots = 567,
|
||||
aaSionachiesCrescendo = 568, //untested
|
||||
aaAyonaesTutelage = 571,
|
||||
aaFeignedMinion = 574,
|
||||
aaUnfailingDivinity = 577,
|
||||
aaAnimationEmpathy = 580, // Implemented
|
||||
aaRushtoJudgement = 583,
|
||||
aaLivingShield = 586,
|
||||
aaConsumptionoftheSoul = 589, //untested
|
||||
aaBoastfulBellow = 592, //DB
|
||||
aaFervrentBlessing = 593, //untested
|
||||
aaTouchoftheWicked = 596, //untested
|
||||
aaPunishingBlade = 599,
|
||||
aaSpeedoftheKnight = 602,
|
||||
aaShroudofStealth = 605,
|
||||
aaNimbleEvasion = 606,
|
||||
aaTechniqueofMasterWu = 611,
|
||||
aaHostoftheElements = 616, //DB
|
||||
aaCallofXuzl = 619, //DB
|
||||
aaHastenedStealth = 622,
|
||||
aaIngenuity = 625,
|
||||
aaFleetofFoot = 628,
|
||||
aaFadingMemories = 630,
|
||||
aaTacticalMastery = 631,
|
||||
aaTheftofLife = 634,
|
||||
aaFuryofMagic = 637,
|
||||
aaFuryofMagicMastery2 = 640, //whats the difference?
|
||||
aaProjectIllusion = 643,
|
||||
aaHeadshot = 644, //added
|
||||
aaEntrap = 645, //DB
|
||||
aaUnholyTouch = 646, //untested
|
||||
aaTotalDomination = 649, // Implemented
|
||||
aaStalwartEndurance = 652, //implemented as bonus
|
||||
aaQuickSummoning2 = 655, //whats the difference?
|
||||
aaMentalClarity2 = 658, //whats the difference?
|
||||
aaInnateRegeneration2 = 661, //whats the difference?
|
||||
aaManaBurn2 = 664, //whats the difference?
|
||||
aaExtendedNotes2 = 665, //not implemented - later expansions replaced Extended Notes with this.
|
||||
aaSionachiesCrescendo2 = 668, //not implemented - later expansions replaced Sionachies Crescendo with this.
|
||||
aaImprovedReclaimEnergy2 = 671, //whats the difference? untetsed
|
||||
aaSwiftJourney = 672, //implemented as bonus
|
||||
aaConvalescence = 674, //added 9/26/08
|
||||
aaLastingBreath = 676, //handled by client
|
||||
aaPackrat = 678, //added 9/29/08
|
||||
aaHeightenedEndurance = 683,
|
||||
aaWeaponAffinity = 686, //implemented
|
||||
aaSecondaryForte = 691,
|
||||
aaPersistantCasting = 692,
|
||||
aaTuneofPursuance = 695,
|
||||
aaImprovedInstrumentMastery = 700,
|
||||
aaImprovedSingingMastery =701,
|
||||
aaExultantBellowing = 702,
|
||||
aaEchoofTaelosia = 707,
|
||||
aaInternalMetronome = 710, //In 2006 this AA was removed.
|
||||
aaPiousSupplication = 715,
|
||||
aaBeastialAlignment = 718, //untested
|
||||
aaWrathofXuzl = 721,
|
||||
aaFeralSwipe = 723, //DB?
|
||||
aaWardersFury = 724,
|
||||
aaWardersAlacrity = 729,
|
||||
aaPetAffinity = 734, // Implemented
|
||||
aaMasteryofthePast2 = 735, //whats the difference?
|
||||
aaSpellCastingSubtlety2 = 738, //whats the difference?
|
||||
aaTouchoftheDivine = 741,
|
||||
aaDivineAvatar = 746, //DB
|
||||
aaExquisiteBenediction = 749, //DB
|
||||
aaQuickenedCuring = 754,
|
||||
aaNaturesBoon = 757, //DB
|
||||
aaAdvancedTracking = 762,
|
||||
aaCriticalAffliction = 767,
|
||||
aaFuryofMagicMastery = 770, //whats the difference?
|
||||
aaDoppelganger = 773,
|
||||
aaEnchancedForgetfulness = 776,
|
||||
aaMesmerizationMastery = 781,
|
||||
aaQuickMassGroupBuff = 782,
|
||||
aaSharedHealth = 785,
|
||||
aaElementalFury = 790,
|
||||
aaElementalAlacrity = 795,
|
||||
aaElementalAgility = 800,
|
||||
aaElementalDurability = 803,
|
||||
aaSinisterStrikes = 806,
|
||||
aaStrikethrough = 807,
|
||||
aaStonewall = 810,
|
||||
aaRapidStrikes = 815,
|
||||
aaKickMastery = 820,
|
||||
aaHightenedAwareness = 823,
|
||||
aaDestructiveForce = 828, //DB
|
||||
aaSwarmofDecay = 831, //DB
|
||||
aaDeathsFury = 834,
|
||||
aaQuickeningofDeath = 839,
|
||||
aaAdvancedTheftofLife = 844,
|
||||
aaTripleBackstab = 846,
|
||||
aaHastenedPiety = 849,
|
||||
aaImmobilizingBash = 852,
|
||||
aaViciousSmash = 855,
|
||||
aaRadiantCure2 = 860, //whats the difference?
|
||||
aaPurification = 863,
|
||||
aaPrecisionofthePathfinder = 864,
|
||||
aaCoatofThistles = 867,
|
||||
aaFlamingArrows = 872, //untested
|
||||
aaFrostArrows = 875, //untested
|
||||
aaSeizedOpportunity = 878,
|
||||
aaTrapCircumvention = 881,
|
||||
aaImprovedHastyExit = 886,
|
||||
aaVirulentVenom = 888,
|
||||
aaImprovedConsumptionofSoul = 893,
|
||||
aaIntenseHatred = 895,
|
||||
aaAdvancedSpiritCall = 900,
|
||||
aaCalloftheAncients = 902, //DB
|
||||
aaSturdiness = 907,
|
||||
aaWarlordsTenacity = 912, //DB
|
||||
aaStrengthenedStrike = 915,
|
||||
aaExtendedShielding = 918,
|
||||
aaRosFlamingFamiliar = 921, //DB
|
||||
aaEcisIcyFamiliar = 922, //DB
|
||||
aaDruzzilsMysticalFamiliar = 923, //DB
|
||||
aaAdvancedFuryofMagicMastery = 924, //added 9/29/08
|
||||
aaWardofDestruction = 926, //DB
|
||||
aaFrenziedDevastation = 931, //DB
|
||||
aaCombatFury2 = 934, //whats the difference?
|
||||
aaCombatFury3 = 937, //whats the difference?
|
||||
aaCombatFury4 = 940, //whats the difference?
|
||||
aaFuryoftheAges2 = 943, //whats the difference?
|
||||
aaFuryoftheAges3 = 946, //whats the difference?
|
||||
aaFuryoftheAges4 = 949, //whats the difference?
|
||||
aaPlanarDurability2 = 952, //whats the difference?
|
||||
aaInnateEnlightenment2 = 955, //whats the difference?
|
||||
aaDireCharm2 = 960, //whats the difference?
|
||||
aaDireCharm3 = 961, //whats the difference?
|
||||
aaTouchoftheDivine2 = 962, //whats the difference?
|
||||
aaTouchofDecay = 967,
|
||||
aaCalloftheAncients2 = 970, //whats the difference?
|
||||
aaImprovedVision = 975,
|
||||
aaEternalBreath = 978, //handled by client
|
||||
aaBlacksmithingMastery = 979, //added 9/29/08
|
||||
aaBakingMastery = 982, //added 9/29/08
|
||||
aaBrewingMastery = 985, //added 9/29/08
|
||||
aaFletchingMastery2 = 988, //added 9/29/08
|
||||
aaPotteryMastery = 991, //added 9/29/08
|
||||
aaTailoringMastery = 994, //added 9/29/08
|
||||
aaSalvage = 997,
|
||||
aaOrigin = 1000, //spell
|
||||
aaChaoticPotential = 1001, //added
|
||||
aaDiscordantDefiance = 1006, //added 9/29/08
|
||||
aaTrialsofMataMuram = 1011,
|
||||
aaMysticalAttuning = 1021,
|
||||
aaDelayDeath = 1026,
|
||||
aaHealthyAura = 1031,
|
||||
aaFitness = 1036,
|
||||
aaVeteransWrath = 1041, //added 9/29/08
|
||||
aaVeteransWrath2 = 1044, //whats the difference?
|
||||
aaVeteransWrath3 = 1047, //whats the difference?
|
||||
aaVeteransWrath4 = 1050, //whats the difference?
|
||||
aaDeathblow = 1053,
|
||||
aaReflexiveMastery = 1061,
|
||||
aaDefensiveInstincts = 1066,
|
||||
aaMnemonicRetention = 1071, //Implemented
|
||||
aaExpansiveMind = 1072, //added 9/29/08
|
||||
aaSleightofHand = 1077,
|
||||
aaSleightofHand2 = 1080, //whats the difference?
|
||||
aaHealingAdeptMastery = 1083,
|
||||
aaHealingGiftMastery = 1086,
|
||||
aaArcaneTongues = 1089,
|
||||
aaMasterofDisguise = 1092,
|
||||
aaSlipperyAttacks = 1093,
|
||||
aaImprovedCriticalAffliction = 1099,
|
||||
aaFortifiedBellowing = 1102,
|
||||
aaFuryofMagic2 = 1107, //whats the difference?
|
||||
aaDanceofBlades = 1110,
|
||||
aaShieldofNotes = 1116,
|
||||
aaRoarofThunder = 1119,
|
||||
aaPersistentMinion = 1122,
|
||||
aaPerfectionofSpirit = 1123,
|
||||
aaReplentishCompanion = 1126,
|
||||
aaAdvancedPetDiscipline = 1129,
|
||||
aaThrowingMastery = 1131,
|
||||
aaBlurofAxes = 1134,
|
||||
aaHastenedWarCry = 1137,
|
||||
aaDeadAim = 1140,
|
||||
aaFrenziedDefense = 1143,
|
||||
aaTirelessSprint = 1146,
|
||||
aaDesperation = 1149,
|
||||
aaUntamedRage = 1150,
|
||||
aaEchoingCries = 1155,
|
||||
aaViciousFrenzy = 1158,
|
||||
aaCrazedOnslaught = 1163,
|
||||
aaOverwhelmingAttack = 1172,
|
||||
aaFuriousRage = 1175,
|
||||
aaBloodPact = 1178,
|
||||
aaShieldingResistance = 1181,
|
||||
aaHealingBoon = 1186,
|
||||
aaResplendentCure = 1189,
|
||||
aaCelestialHammer = 1192,
|
||||
aaDivineRetribution = 1195,
|
||||
aaCelestialRejuvination = 1203,
|
||||
aaFerventBenediction = 1206,
|
||||
aaSanctuary = 1209,
|
||||
aaDestructiveFury = 1210, //added 9/29/08
|
||||
aaDestructiveFury2 = 1213, //whats the difference?
|
||||
aaBoonoftheForest = 1222,
|
||||
aaSpiritoftheGrove = 1225,
|
||||
aaCalloftheWild = 1228,
|
||||
aaSecondaryRecall = 1229,
|
||||
aaNaturesBounty = 1230,
|
||||
aaStasis = 1233,
|
||||
aaColorShock = 1239,
|
||||
aaMindOverMatter = 1242,
|
||||
aaSoothingWords = 1245,
|
||||
aaElementalSwarm = 1248,
|
||||
aaHeartofFlames = 1251,
|
||||
aaHeartofVapor = 1252,
|
||||
aaHeartofIce = 1253,
|
||||
aaHeartofStone = 1254,
|
||||
aaImitateDeath = 1255,
|
||||
aaCripplingStrike = 1256,
|
||||
aaStunningKick = 1259,
|
||||
aaEyeGouge = 1262,
|
||||
aaIronKicks = 1265,
|
||||
aaStyleoftheMimic = 1268,
|
||||
aaDeathPeace2 = 1272, //whats the difference?
|
||||
aaArmyoftheDead = 1274,
|
||||
aaCelestialStun = 1277,
|
||||
aaHandofDevotion = 1278,
|
||||
aaSteadfastWill = 1284,
|
||||
aaShieldBlock = 1287,
|
||||
aaScoutsEfficiency = 1290,
|
||||
aaGuardianoftheGlade = 1293,
|
||||
aaTrackingMastery = 1296,
|
||||
aaFlurryofKnives = 1301,
|
||||
aaPrecision = 1304,
|
||||
aaNervesofSteel = 1307,
|
||||
aaTouchoftheCursed = 1313,
|
||||
aaSpiritualCorrosion = 1316,
|
||||
aaSoulThief = 1319,
|
||||
aaSpiritualChanneling = 1323,
|
||||
aaBoonoftheAncients = 1324,
|
||||
aaAncestralAid = 1327,
|
||||
aaResoluteDefiance = 1330,
|
||||
aaPresstheAttack = 1333,
|
||||
aaMindCrash = 1334,
|
||||
aaProlongedDestruction = 1337,
|
||||
aaRosGreaterFamiliar = 1340,
|
||||
aaEcisGreaterFamiliar = 1341,
|
||||
aaDruzzilsGreaterFamiliar = 1342,
|
||||
aaTeleportBind = 1343,
|
||||
aaDevotedFamiliar = 1344,
|
||||
aaAuspiceoftheHunter = 1345,
|
||||
aaSavageSpirit = 1348,
|
||||
aaPresstheAttack2 = 1351, //whats the difference?
|
||||
aaCripplingStrike2 = 1352, //whats the difference?
|
||||
aaStunningKick2 = 1353, //whats the difference?
|
||||
aaEyeGouge2 = 1358, //whats the difference?
|
||||
|
||||
//Dragons of Norrath
|
||||
//good info here: http://www.eqthieves.com/exp-don-progression.htm and here: http://everquest.allakhazam.com/db/guides.html?guide=811
|
||||
aaGiftoftheDarkReign = 1361, //from dbstr_us.txt
|
||||
aaTenacityoftheDarkReign = 1362, //from dbstr_us.txt
|
||||
aaEmbraceoftheDarkReign = 1363, //from dbstr_us.txt
|
||||
aaPoweroftheDarkReign = 1364, //from dbstr_us.txt
|
||||
aaFervoroftheDarkReign = 1365, //from dbstr_us.txt
|
||||
aaGiftoftheKeepers = 1366, //from dbstr_us.txt
|
||||
aaValoroftheKeepers = 1367, //from dbstr_us.txt
|
||||
aaEmbraceoftheKeepers = 1368, //from dbstr_us.txt
|
||||
aaPoweroftheKeepers = 1369, //from dbstr_us.txt
|
||||
aaSanctityoftheKeepers = 1370, //from dbstr_us.txt
|
||||
|
||||
//Veteran AAs
|
||||
aaLessonoftheDevoted = 1371, //from dbstr_us.txt
|
||||
aaInfusionoftheFaithful = 1372, //from dbstr_us.txt
|
||||
aaChaoticJester = 1373, //from dbstr_us.txt
|
||||
aaExpedientRecovery = 1374, //from dbstr_us.txt
|
||||
aaSteadfastServant = 1375, //from dbstr_us.txt
|
||||
aaStaunchRecovery = 1376, //from dbstr_us.txt
|
||||
aaIntensityoftheResolute = 1377, //from dbstr_us.txt
|
||||
|
||||
//Depths of Darkhollow
|
||||
|
||||
//the following 5 look to be used as flags for completion of the Blood Raids for access to the Demiplane of Blood
|
||||
//quest info here: http://everquest.allakhazam.com/db/quest.html?quest=3582
|
||||
//"You must also complete the five Blood Raids in any order: The Council of Nine, Emperor Draygun, Bloodeye, Matriarch Shyra, Sendaii, the Hive Queen"
|
||||
//"The AA's you receive are: Curse of Blood (1/5), Affliction of Blood (2/5), Torment of Blood (3/5), Temptation of Blood (4/5), Invitation of Blood (5/5)."
|
||||
aaCurseofBlood = 1378, //from dbstr_us.txt
|
||||
aaAfflictionofBlood = 1379, //from dbstr_us.txt
|
||||
aaTormentofBlood = 1380, //from dbstr_us.txt
|
||||
aaTemptationofBlood = 1381, //from dbstr_us.txt
|
||||
aaInvitationofBlood = 1382, //from dbstr_us.txt
|
||||
|
||||
aaTurnUndead2 = 1383, //from dbstr_us.txt, Class AA changed in DoD
|
||||
aaWrackUndead = 1386, //from dbstr_us.txt, PoP Class AA changed in DoD
|
||||
aaEradicateUndead = 1387, //from dbstr_us.txt
|
||||
aaInnateSeeInvis = 1388, //from dbstr_us.txt
|
||||
aaProlongedMortality = 1389, //from dbstr_us.txt
|
||||
aaPrecognition = 1394, //from dbstr_us.txt
|
||||
aaThickSkin = 1399, //from dbstr_us.txt
|
||||
aaSilentCasting = 1404, //from dbstr_us.txt
|
||||
aaSilentCasting2 = 1409, //from dbstr_us.txt
|
||||
aaHastenedMindCrash = 1414, //from dbstr_us.txt
|
||||
aaFieldDressing = 1417, //from dbstr_us.txt
|
||||
aaBandageWounds = 1420, //from dbstr_us.txt
|
||||
aaCascadingRage = 1425, //from dbstr_us.txt
|
||||
aaElementalFerocity = 1430, //from dbstr_us.txt
|
||||
aaGiftofMana = 1435, //from dbstr_us.txt
|
||||
aaRuneofShadows = 1440, //from dbstr_us.txt
|
||||
aaChannelingMastery = 1445, //from dbstr_us.txt
|
||||
aaConservation = 1453, //from dbstr_us.txt
|
||||
aaCryofBattle = 1458, //from dbstr_us.txt
|
||||
aaWardofPurity = 1459, //from dbstr_us.txt
|
||||
aaTurnSummoned2 = 1462, //from dbstr_us.txt
|
||||
aaWrackSummoned = 1465, //from dbstr_us.txt
|
||||
aaEradicateSummoned = 1466, //from dbstr_us.txt
|
||||
aaWardersSavagery = 1467, //from dbstr_us.txt
|
||||
aaShackleofSpirits = 1470, //from dbstr_us.txt
|
||||
aaHastenedThunder = 1471, //from dbstr_us.txt
|
||||
aaTranslocationalAnchor = 1474, //from dbstr_us.txt
|
||||
aaStealthyGetaway = 1477, //from dbstr_us.txt
|
||||
aaPyromancy = 1478, //from dbstr_us.txt
|
||||
aaMasteryofFury = 1483, //from dbstr_us.txt
|
||||
aaAbundantHealing = 1486, //from dbstr_us.txt
|
||||
aaGreaterAvatar = 1491, //from dbstr_us.txt
|
||||
aaSharedCamouflage = 1494, //from dbstr_us.txt
|
||||
aaConvergenceofSpirits = 1495, //from dbstr_us.txt
|
||||
aaNaturesGuardian = 1498, //from dbstr_us.txt
|
||||
aaEdictofCommand = 1501, //from dbstr_us.txt
|
||||
aaExtendedBurnout = 1504, //from dbstr_us.txt
|
||||
aaGuardianofRo = 1507, //from dbstr_us.txt
|
||||
aaBloodMagic = 1510, //from dbstr_us.txt
|
||||
aaGraverobbing = 1511, //from dbstr_us.txt
|
||||
aaAfflictionMastery = 1514, //from dbstr_us.txt
|
||||
aaGreaterRabidBear = 1517, //from dbstr_us.txt
|
||||
aaAncestralGuard = 1520, //from dbstr_us.txt
|
||||
aaCloakofLight = 1523, //from dbstr_us.txt
|
||||
aaVanquishUndead = 1524, //from dbstr_us.txt
|
||||
aaCloakofShadows = 1527, //from dbstr_us.txt
|
||||
aaWillfulDeath = 1528, //from dbstr_us.txt
|
||||
aaSwiftBlade = 1533, //from dbstr_us.txt
|
||||
aaWickedBlade = 1536, //from dbstr_us.txt
|
||||
aaForcedOpening = 1539, //from dbstr_us.txt
|
||||
aaAppraisal = 1542, //from dbstr_us.txt
|
||||
aaPreciseStrikes = 1543, //from dbstr_us.txt
|
||||
aaHastenedDeath = 1546, //from dbstr_us.txt
|
||||
aaUnflinchingResolve = 1549, //from dbstr_us.txt
|
||||
aaWeightlessSteps = 1552, //from dbstr_us.txt
|
||||
aaHastenedBlades = 1555, //from dbstr_us.txt
|
||||
aaImprovedHarmoniousAttack = 1563, //from dbstr_us.txt
|
||||
aaImprovedBestialFrenzy = 1566, //from dbstr_us.txt
|
||||
aaSongofStone = 1569, //from dbstr_us.txt
|
||||
aaDeepSleep = 1572, //from dbstr_us.txt
|
||||
aaCompanionsGift = 1577, //from dbstr_us.txt
|
||||
aaHastenedDefiance = 1583, //from dbstr_us.txt
|
||||
aaDauntlessPerseverance = 1586, //from dbstr_us.txt
|
||||
aaConcentration = 1587, //from dbstr_us.txt
|
||||
aaEnhancedAggression = 1592, //from dbstr_us.txt
|
||||
aaCallofChallenge = 1597, //from dbstr_us.txt
|
||||
aaCacophony = 1598, //from dbstr_us.txt
|
||||
aaImprovedHeadshot = 1601, //from dbstr_us.txt
|
||||
aaAnatomy = 1604, //from dbstr_us.txt
|
||||
aaFetterofSpirits = 1607, //from dbstr_us.txt
|
||||
aaTrickShot = 1608, //from dbstr_us.txt
|
||||
aaLightningStrikes = 1616, //from dbstr_us.txt
|
||||
aaRelentlessAssault = 1621, //from dbstr_us.txt
|
||||
aaKnightsExpertise = 1624, //from dbstr_us.txt
|
||||
aaSelosEnduringCadence = 1627, //from dbstr_us.txt
|
||||
aaHarmTouch = 7800, //from dbstr_us.txt
|
||||
aaLayonHands = 7850, //from dbstr_us.txt
|
||||
aaLayonHandsRank16 = 7866,
|
||||
|
||||
aaHighestID //this should always be last, and should always
|
||||
//follow the highest AA ID
|
||||
} aaID;
|
||||
*/
|
||||
|
||||
|
||||
typedef enum { //AA IDs
|
||||
aaNone =0,
|
||||
aaInnateStrength =2,//implemented as bonus
|
||||
@ -2109,21 +1525,6 @@ typedef enum { //AA IDs
|
||||
//follow the highest AA ID
|
||||
} aaID;
|
||||
|
||||
|
||||
//Structure representing the database's AA actions
|
||||
struct AA_DBAction {
|
||||
uint32 reuse_time; //in seconds
|
||||
uint16 spell_id; //spell to cast, SPELL_UNKNOWN=no spell
|
||||
aaTargetType target; //from aaTargetType
|
||||
aaNonspellAction action; //non-spell action to take
|
||||
uint16 mana_cost; //mana the NON-SPELL action costs
|
||||
uint16 duration; //duration of NON-SPELL effect, 0=N/A
|
||||
aaID redux_aa; //AA which reduces reuse time
|
||||
int32 redux_rate; //%/point in redux_aa reduction in reuse time
|
||||
aaID redux_aa2; //AA which reduces reuse time
|
||||
int32 redux_rate2; //%/point in redux_aa reduction in reuse time
|
||||
};
|
||||
|
||||
//Structure representing the database's swarm pet configs
|
||||
struct AA_SwarmPet {
|
||||
uint8 count; //number to summon
|
||||
@ -2131,12 +1532,6 @@ struct AA_SwarmPet {
|
||||
uint16 duration; //how long they last, in seconds
|
||||
};
|
||||
|
||||
struct AALevelCost_Struct
|
||||
{
|
||||
uint32 Level;
|
||||
uint32 Cost;
|
||||
};
|
||||
|
||||
enum { //values of AA_Action.action
|
||||
aaActionActivate = 0,
|
||||
aaActionSetEXP = 1,
|
||||
|
||||
@ -49,6 +49,8 @@ public:
|
||||
int classes;
|
||||
int races;
|
||||
int deities;
|
||||
int drakkin_heritage;
|
||||
int status;
|
||||
bool grant_only;
|
||||
int type;
|
||||
int charges;
|
||||
|
||||
@ -784,9 +784,6 @@ public:
|
||||
void SetTitleSuffix(const char *txt);
|
||||
inline uint32 GetMaxAAXP(void) const { return max_AAXP; }
|
||||
inline uint32 GetAAXP() const { return m_pp.expAA; }
|
||||
void SendAATable();
|
||||
int CalcAAReuseTimer(const AA_DBAction *caa);
|
||||
void ActivateAA(aaID activate);
|
||||
void EnableAAEffect(aaEffectType type, uint32 duration = 0);
|
||||
void DisableAAEffect(aaEffectType type);
|
||||
bool CheckAAEffect(aaEffectType type);
|
||||
|
||||
@ -167,7 +167,6 @@ int command_init(void) {
|
||||
command_add("aggro", "(range) [-v] - Display aggro information for all mobs 'range' distance from your target. -v is verbose faction info.", 80, command_aggro) ||
|
||||
command_add("aggrozone", "[aggro] - Aggro every mob in the zone with X aggro. Default is 0. Not recommend if you're not invulnerable.", 100, command_aggrozone) ||
|
||||
command_add("ai", "[factionid/spellslist/con/guard/roambox/stop/start] - Modify AI on NPC target", 100, command_ai) ||
|
||||
command_add("altactivate", "[argument] - activates alternate advancement abilities, use altactivate help for more information", 0, command_altactivate) ||
|
||||
command_add("appearance", "[type] [value] - Send an appearance packet for you or your target", 150, command_appearance) ||
|
||||
command_add("attack", "[targetname] - Make your NPC target attack targetname", 150, command_attack) ||
|
||||
command_add("augmentitem", "Force augments an item. Must have the augment item window open.", 250, command_augmentitem) ||
|
||||
@ -273,7 +272,6 @@ int command_init(void) {
|
||||
command_add("los", nullptr,0, command_checklos) ||
|
||||
command_add("makepet", "[level] [class] [race] [texture] - Make a pet", 50, command_makepet) ||
|
||||
command_add("mana", "- Fill your or your target's mana", 50, command_mana) ||
|
||||
command_add("manaburn", "- Use AA Wizard class skill manaburn on target", 10, command_manaburn) ||
|
||||
command_add("maxskills", "Maxes skills for you.", 200, command_max_all_skills) ||
|
||||
command_add("memspell", "[slotid] [spellid] - Memorize spellid in the specified slot", 50, command_memspell) ||
|
||||
command_add("merchant_close_shop", "Closes a merchant shop", 100, command_merchantcloseshop) ||
|
||||
@ -4848,36 +4846,6 @@ void command_zonestatus(Client *c, const Seperator *sep)
|
||||
}
|
||||
}
|
||||
|
||||
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->GetAA(MANA_BURN);//ManaBurn ID
|
||||
if (DistanceSquared(c->GetPosition(), target->GetPosition()) > 200)
|
||||
c->Message(0,"You are too far away from your target.");
|
||||
else {
|
||||
if(cur_level == 1) {
|
||||
if(c->IsAttackAllowed(target))
|
||||
{
|
||||
c->SetMana(0);
|
||||
int nukedmg=(c->GetMana())*2;
|
||||
if (nukedmg>0)
|
||||
{
|
||||
target->Damage(c, nukedmg, 2751, SkillAbjuration/*hackish*/);
|
||||
c->Message(4,"You unleash an enormous blast of magical energies.");
|
||||
}
|
||||
Log.Out(Logs::General, Logs::Normal, "Manaburn request from %s, damage: %d", c->GetName(), nukedmg);
|
||||
}
|
||||
}
|
||||
else
|
||||
c->Message(0, "You have not learned this skill.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void command_doanim(Client *c, const Seperator *sep)
|
||||
{
|
||||
if (!sep->IsNumber(1))
|
||||
@ -7684,57 +7652,6 @@ void command_reloadtitles(Client *c, const Seperator *sep)
|
||||
|
||||
}
|
||||
|
||||
//old aa, probably to be removed
|
||||
void command_altactivate(Client *c, const Seperator *sep){
|
||||
// if(sep->arg[1][0] == '\0'){
|
||||
// c->Message(10, "Invalid argument, usage:");
|
||||
// c->Message(10, "#altactivate list - lists the AA ID numbers that are available to you");
|
||||
// c->Message(10, "#altactivate time [argument] - returns the time left until you can use the AA with the ID that matches the argument.");
|
||||
// c->Message(10, "#altactivate [argument] - activates the AA with the ID that matches the argument.");
|
||||
// return;
|
||||
// }
|
||||
// if(!strcasecmp(sep->arg[1], "help")){
|
||||
// c->Message(10, "Usage:");
|
||||
// c->Message(10, "#altactivate list - lists the AA ID numbers that are available to you");
|
||||
// c->Message(10, "#altactivate time [argument] - returns the time left until you can use the AA with the ID that matches the argument.");
|
||||
// c->Message(10, "#altactivate [argument] - activates the AA with the ID that matches the argument.");
|
||||
// return;
|
||||
// }
|
||||
// if(!strcasecmp(sep->arg[1], "list")){
|
||||
// c->Message(10, "You have access to the following AA Abilities:");
|
||||
// int x, val;
|
||||
// SendAA_Struct* saa = nullptr;
|
||||
// for(x = 0; x < aaHighestID; x++){
|
||||
// if(AA_Actions[x][0].spell_id || AA_Actions[x][0].action){ //if there's an action or spell associated we assume it's a valid
|
||||
// val = 0; //and assume if they don't have a value for the first rank then it isn't valid for any rank
|
||||
// saa = nullptr;
|
||||
// val = c->GetAA(x);
|
||||
// if(val){
|
||||
// saa = zone->FindAA(x);
|
||||
// c->Message(10, "%d: %s %d", x, saa->name, val);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// else if(!strcasecmp(sep->arg[1], "time")){
|
||||
// int ability = atoi(sep->arg[2]);
|
||||
// if(c->GetAA(ability)){
|
||||
// int remain = c->GetPTimers().GetRemainingTime(pTimerAAStart + ability);
|
||||
// if(remain)
|
||||
// c->Message(10, "You may use that ability in %d minutes and %d seconds.", (remain/60), (remain%60));
|
||||
// else
|
||||
// c->Message(10, "You may use that ability now.");
|
||||
// }
|
||||
// else{
|
||||
// c->Message(10, "You do not have access to that ability.");
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// c->ActivateAA((aaID) atoi(sep->arg[1]));
|
||||
// }
|
||||
}
|
||||
|
||||
void command_traindisc(Client *c, const Seperator *sep)
|
||||
{
|
||||
uint8 max_level, min_level;
|
||||
|
||||
@ -216,7 +216,6 @@ void command_time(Client *c, const Seperator *sep);
|
||||
void command_guild(Client *c, const Seperator *sep);
|
||||
bool helper_guild_edit(Client *c, uint32 dbid, uint32 eqid, uint8 rank, const char* what, const char* value);
|
||||
void command_zonestatus(Client *c, const Seperator *sep);
|
||||
void command_manaburn(Client *c, const Seperator *sep);
|
||||
void command_doanim(Client *c, const Seperator *sep);
|
||||
void command_randomfeatures(Client *c, const Seperator *sep);
|
||||
void command_face(Client *c, const Seperator *sep);
|
||||
@ -276,7 +275,6 @@ void command_guildlist(Client *c, const Seperator *sep);
|
||||
void command_rules(Client *c, const Seperator *sep);
|
||||
void command_task(Client *c, const Seperator *sep);
|
||||
void command_reloadtitles(Client *c, const Seperator *sep);
|
||||
void command_altactivate(Client *c, const Seperator *sep);
|
||||
void command_refundaa(Client *c, const Seperator *sep);
|
||||
void command_traindisc(Client *c, const Seperator *sep);
|
||||
void command_deletegraveyard(Client *c, const Seperator *sep);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user