mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-12 01:11:29 +00:00
Implemented SE_PC_Pet_Rampage 464 - Base1 % chance to do rampage for base2 % of damage each melee round
This commit is contained in:
parent
957aba7ae5
commit
a11816fddf
@ -617,8 +617,8 @@ typedef enum {
|
||||
//#define SE_Fc_Damage_%2 461 //
|
||||
//#define SE_Fc_Damage_Amt2 462 //
|
||||
//#define SE_Shield_Target 463 //
|
||||
//#define SE_PC_Pet_Rampage 464 //
|
||||
//#define SE_PC_Pet_AE_Rampage 465 //
|
||||
#define SE_PC_Pet_Rampage 464 // Base1 % chance to do rampage for base2 % of damage each melee round
|
||||
#define SE_PC_Pet_AE_Rampage 465 // Base1 % chance to do aerampage for base2 % of damage each melee round
|
||||
//#define SE_PC_Pet_Flurry_Chance 466 //
|
||||
//#define SE_DS_Mitigation_Amount 467 //
|
||||
//#define SE_DS_Mitigation_Percentage 468 //
|
||||
|
||||
@ -1417,6 +1417,13 @@ void Mob::ApplyAABonuses(const AA::Rank &rank, StatBonuses *newbon)
|
||||
case SE_IncreaseExtTargetWindow:
|
||||
newbon->extra_xtargets += base1;
|
||||
break;
|
||||
|
||||
case SE_PC_Pet_Rampage: {
|
||||
newbon->PC_Pet_Rampage[0] += base1; //Chance to rampage
|
||||
if (newbon->PC_Pet_Rampage[1] < base2)
|
||||
newbon->PC_Pet_Rampage[1] = base2; //Damage modifer - take highest
|
||||
break;
|
||||
}
|
||||
// to do
|
||||
case SE_PetDiscipline:
|
||||
break;
|
||||
@ -3120,6 +3127,13 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *ne
|
||||
break;
|
||||
}
|
||||
|
||||
case SE_PC_Pet_Rampage: {
|
||||
new_bonus->PC_Pet_Rampage[0] += effect_value; //Chance to rampage
|
||||
if (new_bonus->PC_Pet_Rampage[1] < base2)
|
||||
new_bonus->PC_Pet_Rampage[1] = base2; //Damage modifer - take highest
|
||||
break;
|
||||
}
|
||||
|
||||
//Special custom cases for loading effects on to NPC from 'npc_spels_effects' table
|
||||
if (IsAISpellEffect) {
|
||||
|
||||
|
||||
@ -405,6 +405,7 @@ struct StatBonuses {
|
||||
bool LimitToSkill[HIGHEST_SKILL+2]; // Determines if we need to search for a skill proc.
|
||||
uint32 SkillProc[MAX_SKILL_PROCS]; // Max number of spells containing skill_procs.
|
||||
uint32 SkillProcSuccess[MAX_SKILL_PROCS]; // Max number of spells containing skill_procs_success.
|
||||
uint32 PC_Pet_Rampage[2]; // 0= % chance to rampage, 1=damage modifier
|
||||
|
||||
// AAs
|
||||
int8 Packrat; //weight reduction for items, 1 point = 10%
|
||||
|
||||
@ -1139,16 +1139,12 @@ void Mob::AI_Process() {
|
||||
}
|
||||
}
|
||||
|
||||
if (IsPet() || (IsNPC() && CastToNPC()->GetSwarmOwner())) {
|
||||
if (IsPet() || IsTempPet()) {
|
||||
Mob *owner = nullptr;
|
||||
|
||||
if (IsPet())
|
||||
owner = GetOwner();
|
||||
else
|
||||
owner = entity_list.GetMobID(CastToNPC()->GetSwarmOwner());
|
||||
owner = GetOwner();
|
||||
|
||||
if (owner) {
|
||||
int16 flurry_chance = owner->aabonuses.PetFlurry +
|
||||
int16 flurry_chance = owner->aabonuses.PetFlurry +
|
||||
owner->spellbonuses.PetFlurry + owner->itembonuses.PetFlurry;
|
||||
|
||||
if (flurry_chance && zone->random.Roll(flurry_chance))
|
||||
@ -1156,6 +1152,19 @@ void Mob::AI_Process() {
|
||||
}
|
||||
}
|
||||
|
||||
if ((IsPet() || IsTempPet()) && IsPetOwnerClient()){
|
||||
if (spellbonuses.PC_Pet_Rampage[0] || itembonuses.PC_Pet_Rampage[0] || aabonuses.PC_Pet_Rampage[0]){
|
||||
int chance = spellbonuses.PC_Pet_Rampage[0] + itembonuses.PC_Pet_Rampage[0] + aabonuses.PC_Pet_Rampage[0];
|
||||
int dmg_mod = spellbonuses.PC_Pet_Rampage[1] + itembonuses.PC_Pet_Rampage[1] + aabonuses.PC_Pet_Rampage[1];
|
||||
Shout("CHance %i", chance);
|
||||
if(zone->random.Roll(chance)) {
|
||||
ExtraAttackOptions opts;
|
||||
opts.damage_percent = dmg_mod / 100.0f;
|
||||
Rampage(&opts);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (GetSpecialAbility(SPECATK_RAMPAGE) && !specialed)
|
||||
{
|
||||
int rampage_chance = GetSpecialAbilityParam(SPECATK_RAMPAGE, 0);
|
||||
@ -1245,6 +1254,7 @@ void Mob::AI_Process() {
|
||||
//now special attacks (kick, etc)
|
||||
if(IsNPC())
|
||||
CastToNPC()->DoClassAttacks(target);
|
||||
|
||||
}
|
||||
AI_EngagedCastCheck();
|
||||
} //end is within combat rangepet
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user