Removed fluff code, added drakkin heritage and status can use modifiers to aa abilities

This commit is contained in:
KimLS 2015-06-12 13:39:20 -07:00
parent e5d1e98793
commit 65ac9683a3
6 changed files with 20 additions and 1143 deletions

View File

@ -37,428 +37,6 @@ Copyright (C) 2001-2004 EQEMu Development Team (http://eqemulator.net)
extern QueryServ* QServ; 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) { 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.. //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->max_level = ability->GetMaxLevel(this);
aai->prev_id = rank->prev_id; 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; aai->next_id = -1;
} else { } else {
aai->next_id = rank->next_id; aai->next_id = rank->next_id;
@ -1834,28 +1412,16 @@ bool Mob::CanUseAlternateAdvancementRank(AA::Rank *rank) {
return false; return false;
} }
// Check for racial/Drakkin blood line AAs if(IsClient() && CastToClient()->Admin() < ability->status) {
//Commented this out for now, will add a drakkin heritage field later return false;
//if(ability->category == 8) }
//{
// uint32 client_race = GetBaseRace(); if(GetBaseRace() == 522) {
// //drakkin_heritage
// // Drakkin Bloodlines if(!(ability->drakkin_heritage & (1 << GetDrakkinHeritage()))) {
// if(rank->expansion > 522) return false;
// { }
// 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;
// }
//}
return true; return true;
} }
@ -1963,7 +1529,7 @@ bool ZoneDatabase::LoadAlternateAdvancementAbilities(std::unordered_map<int, std
{ {
Log.Out(Logs::General, Logs::Status, "Loading Alternate Advancement Abilities..."); Log.Out(Logs::General, Logs::Status, "Loading Alternate Advancement Abilities...");
abilities.clear(); 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); auto results = QueryDatabase(query);
if(results.Success()) { if(results.Success()) {
for(auto row = results.begin(); row != results.end(); ++row) { 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->classes = atoi(row[3]) << 1;
ability->races = atoi(row[4]); ability->races = atoi(row[4]);
ability->deities = atoi(row[5]); ability->deities = atoi(row[5]);
ability->type = atoi(row[6]); ability->drakkin_heritage = atoi(row[6]);
ability->charges = atoi(row[7]); ability->status = atoi(row[7]);
ability->grant_only = atoi(row[8]) != 0 ? true : false; ability->type = atoi(row[8]);
ability->first_rank_id = atoi(row[9]); ability->charges = atoi(row[9]);
ability->grant_only = atoi(row[10]) != 0 ? true : false;
ability->first_rank_id = atoi(row[11]);
ability->first = nullptr; ability->first = nullptr;
abilities[ability->id] = std::unique_ptr<AA::Ability>(ability); abilities[ability->id] = std::unique_ptr<AA::Ability>(ability);

605
zone/aa.h
View File

@ -1,27 +1,8 @@
#ifndef AA_H #ifndef AA_H
#define 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) #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 { typedef enum {
aaActionNone = 0, aaActionNone = 0,
aaActionAETaunt = 1, aaActionAETaunt = 1,
@ -133,571 +114,6 @@ static const uint8 LeadershipAACosts[_maxLeaderAA][MAX_LEADERSHIP_TIERS] = {
{ 0, 0, 0, 0, 0, 0 }, //raidAA15 { 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 typedef enum { //AA IDs
aaNone =0, aaNone =0,
aaInnateStrength =2,//implemented as bonus aaInnateStrength =2,//implemented as bonus
@ -2109,21 +1525,6 @@ typedef enum { //AA IDs
//follow the highest AA ID //follow the highest AA ID
} aaID; } 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 //Structure representing the database's swarm pet configs
struct AA_SwarmPet { struct AA_SwarmPet {
uint8 count; //number to summon uint8 count; //number to summon
@ -2131,12 +1532,6 @@ struct AA_SwarmPet {
uint16 duration; //how long they last, in seconds uint16 duration; //how long they last, in seconds
}; };
struct AALevelCost_Struct
{
uint32 Level;
uint32 Cost;
};
enum { //values of AA_Action.action enum { //values of AA_Action.action
aaActionActivate = 0, aaActionActivate = 0,
aaActionSetEXP = 1, aaActionSetEXP = 1,

View File

@ -49,6 +49,8 @@ public:
int classes; int classes;
int races; int races;
int deities; int deities;
int drakkin_heritage;
int status;
bool grant_only; bool grant_only;
int type; int type;
int charges; int charges;

View File

@ -784,9 +784,6 @@ public:
void SetTitleSuffix(const char *txt); void SetTitleSuffix(const char *txt);
inline uint32 GetMaxAAXP(void) const { return max_AAXP; } inline uint32 GetMaxAAXP(void) const { return max_AAXP; }
inline uint32 GetAAXP() const { return m_pp.expAA; } 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 EnableAAEffect(aaEffectType type, uint32 duration = 0);
void DisableAAEffect(aaEffectType type); void DisableAAEffect(aaEffectType type);
bool CheckAAEffect(aaEffectType type); bool CheckAAEffect(aaEffectType type);

View File

@ -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("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("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("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("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("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) || 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("los", nullptr,0, command_checklos) ||
command_add("makepet", "[level] [class] [race] [texture] - Make a pet", 50, command_makepet) || 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("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("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("memspell", "[slotid] [spellid] - Memorize spellid in the specified slot", 50, command_memspell) ||
command_add("merchant_close_shop", "Closes a merchant shop", 100, command_merchantcloseshop) || 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) void command_doanim(Client *c, const Seperator *sep)
{ {
if (!sep->IsNumber(1)) 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) void command_traindisc(Client *c, const Seperator *sep)
{ {
uint8 max_level, min_level; uint8 max_level, min_level;

View File

@ -216,7 +216,6 @@ void command_time(Client *c, const Seperator *sep);
void command_guild(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); 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_zonestatus(Client *c, const Seperator *sep);
void command_manaburn(Client *c, const Seperator *sep);
void command_doanim(Client *c, const Seperator *sep); void command_doanim(Client *c, const Seperator *sep);
void command_randomfeatures(Client *c, const Seperator *sep); void command_randomfeatures(Client *c, const Seperator *sep);
void command_face(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_rules(Client *c, const Seperator *sep);
void command_task(Client *c, const Seperator *sep); void command_task(Client *c, const Seperator *sep);
void command_reloadtitles(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_refundaa(Client *c, const Seperator *sep);
void command_traindisc(Client *c, const Seperator *sep); void command_traindisc(Client *c, const Seperator *sep);
void command_deletegraveyard(Client *c, const Seperator *sep); void command_deletegraveyard(Client *c, const Seperator *sep);