Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Index: trunk/EQEmuServer/zone/attack.cpp
- ===================================================================
- --- trunk/EQEmuServer/zone/attack.cpp (revision 2509)
- +++ trunk/EQEmuServer/zone/attack.cpp (working copy)
- @@ -384,6 +384,10 @@
- damage = -3;
- mlog(COMBAT__DAMAGE, "I am enraged, riposting frontal attack.");
- }
- + if (IsInfuriated()) {
- + damage = -3;
- + mlog(COMBAT__DAMAGE, "I am infuriated, riposting attacks from all sides.");
- + }
- /////////////////////////////////////////////////////////
- // riposte
- Index: trunk/EQEmuServer/zone/bot.cpp
- ===================================================================
- --- trunk/EQEmuServer/zone/bot.cpp (revision 2509)
- +++ trunk/EQEmuServer/zone/bot.cpp (working copy)
- @@ -3755,6 +3755,9 @@
- // Stop attacking if the target is enraged
- if(IsEngaged() && !BehindMob(GetTarget(), GetX(), GetY()) && GetTarget()->IsEnraged())
- return;
- + // Stop attacking if the target is infuriated
- + if(IsEngaged() && GetTarget()->IsInfuriated())
- + return;
- if(GetBotStance() == BotStancePassive)
- return;
- @@ -4083,6 +4086,9 @@
- // Stop attacking while we are on a front arc and the target is enraged
- if(!botPet->BehindMob(botPet->GetTarget(), botPet->GetX(), botPet->GetY()) && botPet->GetTarget()->IsEnraged())
- return;
- + // Stop attacking while the target is infuriated
- + if(botPet->GetTarget()->IsInfuriated())
- + return;
- if(botPet->Attack(GetTarget(), SLOT_PRIMARY)) // try the main hand
- if (botPet->GetTarget()) // Do we still have a target?
- @@ -7841,6 +7847,10 @@
- damage = -3;
- mlog(COMBAT__DAMAGE, "I am enraged, riposting frontal attack.");
- }
- + if (IsInfuriated()) {
- + damage = -3;
- + mlog(COMBAT__DAMAGE, "I am infuriated, riposting attacks from all sides.");
- + }
- /////////////////////////////////////////////////////////
- // riposte
- Index: trunk/EQEmuServer/zone/common.h
- ===================================================================
- --- trunk/EQEmuServer/zone/common.h (revision 2509)
- +++ trunk/EQEmuServer/zone/common.h (working copy)
- @@ -84,11 +84,11 @@
- /*
- Used:
- -b,d,f,g,j,m,n,o,p,r,t
- +b,d,e,f,g,j,m,n,o,p,r,t
- A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,Q,R,S,T,U,W,Y
- Unused:
- -a,c,e,h,k,l,q,s,u,v,w,x,y,z
- +a,c,h,k,l,q,s,u,v,w,x,y,z
- P,V,X
- */
- @@ -96,6 +96,7 @@
- SPECATK_NONE = 0,
- SPECATK_SUMMON, // S
- SPECATK_ENRAGE, // E
- + SPECATK_INFURIATE, // e
- SPECATK_RAMPAGE, // R
- SPECATK_AREA_RAMPAGE, // r
- SPECATK_FLURRY, // F
- Index: trunk/EQEmuServer/zone/merc.cpp
- ===================================================================
- --- trunk/EQEmuServer/zone/merc.cpp (revision 2509)
- +++ trunk/EQEmuServer/zone/merc.cpp (working copy)
- @@ -1708,6 +1708,9 @@
- // Stop attacking if the target is enraged
- if(IsEngaged() && !BehindMob(GetTarget(), GetX(), GetY()) && GetTarget()->IsEnraged())
- return;
- + // stop attacking if the target is infuriated
- + if(IsEngaged() && GetTarget()->IsInfuriated())
- + return;
- //TODO: Implement Stances.
- /*if(GetBotStance() == BotStancePassive)
- return;*/
- Index: trunk/EQEmuServer/zone/mob.h
- ===================================================================
- --- trunk/EQEmuServer/zone/mob.h (revision 2509)
- +++ trunk/EQEmuServer/zone/mob.h (working copy)
- @@ -646,6 +646,7 @@
- void StartEnrage();
- void ProcessEnrage();
- bool IsEnraged();
- + bool IsInfuriated();
- void Taunt(NPC* who, bool always_succeed, float chance_bonus = 0);
- virtual void AI_Init();
- @@ -916,6 +917,7 @@
- char lastname[64];
- bool bEnraged;
- + bool bInfuriated;
- Timer *SpecAttackTimers[SPECATK_MAXNUM];
- bool destructibleobject;
- Index: trunk/EQEmuServer/zone/MobAI.cpp
- ===================================================================
- --- trunk/EQEmuServer/zone/MobAI.cpp (revision 2509)
- +++ trunk/EQEmuServer/zone/MobAI.cpp (working copy)
- @@ -1854,12 +1854,12 @@
- void Mob::StartEnrage()
- {
- // dont continue if already enraged
- - if (bEnraged)
- + if (bEnraged || bInfuriated)
- return;
- if (SpecAttackTimers[SPECATK_ENRAGE] && !SpecAttackTimers[SPECATK_ENRAGE]->Check())
- return;
- // see if NPC has possibility to enrage
- - if (!SpecAttacks[SPECATK_ENRAGE])
- + if (!SpecAttacks[SPECATK_ENRAGE] && !SpecAttacks[SPECATK_INFURIATE])
- return;
- // check if timer exists (should be true at all times)
- if (SpecAttackTimers[SPECATK_ENRAGE])
- @@ -1874,16 +1874,25 @@
- }
- // start the timer. need to call IsEnraged frequently since we dont have callback timers :-/
- SpecAttackTimers[SPECATK_ENRAGE]->Start();
- - bEnraged = true;
- - entity_list.MessageClose_StringID(this, true, 200, MT_NPCEnrage, NPC_ENRAGE_START, GetCleanName());
- + if (SpecAttacks[SPECATK_ENRAGE]) {
- + bEnraged = true;
- + entity_list.MessageClose_StringID(this, true, 200, MT_NPCEnrage, NPC_ENRAGE_START, GetCleanName());
- + } else if (SpecAttacks[SPECATK_INFURIATE]) {
- + bInfuriated = true;
- + entity_list.MessageClose(this, true, 200, MT_NPCEnrage, "%1 is infuriated.", GetCleanName());
- + }
- }
- void Mob::ProcessEnrage(){
- - if(IsEnraged()){
- + if(IsEnraged() || IsInfuriated()){
- if(SpecAttackTimers[SPECATK_ENRAGE] && SpecAttackTimers[SPECATK_ENRAGE]->Check()){
- - entity_list.MessageClose_StringID(this, true, 200, MT_NPCEnrage, NPC_ENRAGE_END, GetCleanName());
- SpecAttackTimers[SPECATK_ENRAGE]->Start(EnragedTimer);
- - bEnraged = false;
- + if(IsEnraged()) {
- + entity_list.MessageClose_StringID(this, true, 200, MT_NPCEnrage, NPC_ENRAGE_END, GetCleanName());
- + bEnraged = false;
- + } else if(IsInfuriated()) {
- + entity_list.MessageClose(this, true, 200, MT_NPCEnrage,"%1 is no longer infuriated.", GetCleanName());
- + bInfuriated = false; }
- }
- }
- }
- @@ -1893,6 +1902,11 @@
- return bEnraged;
- }
- +bool Mob::IsInfuriated()
- +{
- + return bInfuriated;
- +}
- +
- bool Mob::Flurry()
- {
- // this is wrong, flurry is extra attacks on the current target
- Index: trunk/EQEmuServer/zone/npc.cpp
- ===================================================================
- --- trunk/EQEmuServer/zone/npc.cpp (revision 2509)
- +++ trunk/EQEmuServer/zone/npc.cpp (working copy)
- @@ -1443,6 +1443,9 @@
- case 'E':
- SpecAttacks[SPECATK_ENRAGE] = (remove ? false : true);
- break;
- + case 'e':
- + SpecAttacks[SPECATK_INFURIATE] = (remove ? false : true);
- + break;
- case 'F':
- SpecAttacks[SPECATK_FLURRY] = (remove ? false : true);
- break;
- @@ -1588,6 +1591,10 @@
- if (!SpecAttacks[SPECATK_ENRAGE])
- HasAllAttacks = false;
- break;
- + case 'e':
- + if (!SpecAttacks[SPECATK_INFURIATE])
- + HasAllAttacks = false;
- + break;
- case 'F':
- if (!SpecAttacks[SPECATK_FLURRY])
- HasAllAttacks = false;
- Index: trunk/EQEmuServer/zone/perl_mob.cpp
- ===================================================================
- --- trunk/EQEmuServer/zone/perl_mob.cpp (revision 2509)
- +++ trunk/EQEmuServer/zone/perl_mob.cpp (working copy)
- @@ -4986,6 +4986,32 @@
- XSRETURN(1);
- }
- +XS(XS_Mob_IsInfuriated); /* prototype to pass -Wmissing-prototypes */
- +XS(XS_Mob_IsInfuriated)
- +{
- + dXSARGS;
- + if (items != 1)
- + Perl_croak(aTHX_ "Usage: Mob::IsInfuriated(THIS)");
- + {
- + Mob * THIS;
- + bool RETVAL;
- +
- + if (sv_derived_from(ST(0), "Mob")) {
- + IV tmp = SvIV((SV*)SvRV(ST(0)));
- + THIS = INT2PTR(Mob *,tmp);
- + }
- + else
- + Perl_croak(aTHX_ "THIS is not of type Mob");
- + if(THIS == NULL)
- + Perl_croak(aTHX_ "THIS is NULL, avoiding crash.");
- +
- + RETVAL = THIS->IsInfuriated();
- + ST(0) = boolSV(RETVAL);
- + sv_2mortal(ST(0));
- + }
- + XSRETURN(1);
- +}
- +
- XS(XS_Mob_GetReverseFactionCon); /* prototype to pass -Wmissing-prototypes */
- XS(XS_Mob_GetReverseFactionCon)
- {
- @@ -8243,6 +8269,7 @@
- newXSproto(strcpy(buf, "IsStunned"), XS_Mob_IsStunned, file, "$");
- newXSproto(strcpy(buf, "StartEnrage"), XS_Mob_StartEnrage, file, "$");
- newXSproto(strcpy(buf, "IsEnraged"), XS_Mob_IsEnraged, file, "$");
- + newXSproto(strcpy(buf, "IsInfuriated"), XS_Mob_IsInfuriated, file, "$");
- newXSproto(strcpy(buf, "GetReverseFactionCon"), XS_Mob_GetReverseFactionCon, file, "$$");
- newXSproto(strcpy(buf, "IsAIControlled"), XS_Mob_IsAIControlled, file, "$");
- newXSproto(strcpy(buf, "GetAggroRange"), XS_Mob_GetAggroRange, file, "$");
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement