puppy > gnome. just cant touch the gimpness that is gnomes, anyway uh heres a few other AAs, and im redoing manaburn and lifeburn so their pvpable will update that in a moment. swarm pets still buggy so no code yet but ive almost got enough information from people that their all the correct models now. no luck on the wards yet...
redid SK weapon proc buffs to make them work correctly.
soul abrasion.
healing adept.
advanced healing adept.
healing gift.
advanced healing gift.
casting fury.
fury mastery.
fury of magic mastery.
theft of life.
removed the FD effect of lifeburn server side which was causing issues.
added a message to heals for caster and target.
zone\spells.cpp search for " nukes, heals; also "
and replace the exsisting case: SE_CurrentHP with
Code:
case SE_CurrentHP: // nukes, heals; also regen/dot if a buff
{
#ifdef SPELL_EFFECT_SPAM
snprintf(effect_desc, _EDLEN, "Current Hitpoints: %+i", effect_value);
#endif
// SE_CurrentHP is calculated at first tick if its a dot/buff
if (buffslot >= 0)
break;
// for offensive spells check if we have a spell rune on
sint32 dmg = effect_value;
if(dmg < 0)
{
// take partial damage into account
dmg = (int) (dmg * partial / 100);
if (caster && caster->IsClient())
{
dmg = caster->GetActSpellValue(spell_id, dmg);
//Dook- Soul Abrasion, 3 levs, increase self buff procs damage 40% each
if(caster->CastToClient()->GetAA(89))
{
if((spell_id==2718) ||
(spell_id==2712) ||
(spell_id==1471) ||
(spell_id==3228) ||
(spell_id==4910) ||
(spell_id==4908))
{
uint8 lev=0;
lev=caster->CastToClient()->GetAA(89);
if(lev==1){dmg=dmg*1.67;}
else if(lev==2){dmg=dmg*2.34;}
else if(lev==3){dmg=dmg*3.01;}
}
}
//spell crits
int chance = 0;
float ratio =1.0;
//normal spell crit for wizards
if(caster_level >= 11 && caster->GetClass() == WIZARD)
{
chance+= 7;
ratio +=.15;
}
//spell casting fury, fury mastery, and fury of magic mastery. Dook-
uint8 scf = 0;
uint8 scfm = 0;
uint8 cfom = 0;
uint8 fomm = 0;
uint8 cfomm = 0;
scf = caster->CastToClient()->GetAA(23);
scfm = caster->CastToClient()->GetAA(114);
cfom = caster->CastToClient()->GetAA(215); //cleric
fomm = caster->CastToClient()->GetAA(216);
cfomm = caster->CastToClient()->GetAA(260); //cleric only?
if(scf == 1) {chance+=2; ratio += .333;}
if(scf == 2) {chance+=5; ratio += .666;}
if(scf == 3) {chance+=7; ratio += 1.0;}
if(scfm == 1){chance+=3;}
if(scfm == 2){chance+=5;}
if(scfm == 3){chance+=7;}
if(fomm == 1){chance+=2;}
if(fomm == 2){chance+=4;}
if(fomm == 3){chance+=6;}
if(cfom == 1){chance+=2;}
if(cfom == 2){chance+=4;}
if(cfom == 3){chance+=6;}
if(cfomm == 1){chance+=2;}
if(cfomm == 2){chance+=4;}
if(cfomm == 3){chance+=6;}
int r=MakeRandomInt(0,100);
if((r <= chance)&&(spell.targettype!=6))
{
dmg = (int)(dmg * ratio);
entity_list.MessageClose(this, false, 75, 0, "%s delivers a critical blast! (%d)", caster->GetCleanName(), ((dmg)*(-1)));
caster->Message(0,"You deliver a critical blast! (%d)", ((dmg)*(-1)));
}
}
sint32 origdmg = dmg;
dmg = ReduceMagicalDamage(dmg, GetMagicRune());
if (origdmg != dmg && caster)
{
caster->Message(15,
"The Spellshield absorbed %d of %d points of damage",
abs(origdmg - dmg), abs(origdmg));
}
if (dmg == 0) // rune absorbed it all
break;
}
else if(dmg > 0)
{
if (caster && caster->IsClient())
{
dmg = caster->GetActSpellValue(spell_id, dmg);
int dur=spell.buffduration;
//Dook- Healing Adept and Advance Heal Adept
uint8 ha = 0;
ha = caster->CastToClient()->GetAA(18);
if((dur==0)&&(spell_id!=13)&&(ha>=1))
{
uint8 aha = 0;
aha = caster->CastToClient()->GetAA(146);
if(ha==1 && aha==0){dmg=dmg*1.02;}
else if(ha==2 && aha==0){dmg=dmg*1.05;}
else if(ha==3 && aha==0){dmg=dmg*1.10;}
else if(ha==3 && aha==1){dmg=dmg*1.13;}
else if(ha==3 && aha==2){dmg=dmg*1.16;}
else if(ha==3 && aha==3){dmg=dmg*1.19;}
}
//heal crits
int chance = 0;
float ratio =1.0;
//Remove next 5 lines if you dont want innate cleric crit heals
if(caster->GetLevel() >= 11 && caster->GetClass() == CLERIC)
{
chance+= 5;
ratio +=.15;
}
//healing gift, advance HG, Dook-
uint8 hg=0;
uint8 ahg=0;
hg=(caster->CastToClient()->GetAA(19));
ahg=(caster->CastToClient()->GetAA(147));
if(hg == 1){chance+=3; ratio += .333;}
if(hg == 2){chance+=6; ratio += .666;}
if(hg == 3){chance+=10; ratio += 1.0;}
if(ahg == 1){chance+=2;}
if(ahg == 2){chance+=2;}
if(ahg == 3){chance+=2;}
if(MakeRandomInt(0,100) <= chance)
{
dmg = (int)(dmg * ratio);
entity_list.MessageClose(this, false, 75, 0, "%s performs an exception heal! (%d)", caster->GetName(), dmg);
caster->Message(0,"You perform and exceptional heal! (%d)", dmg);
}
}
if(((this->GetHP())+dmg) >= (this->CalcMaxHP()))
{
dmg=((this->CalcMaxHP())-(this->GetHP()));
}
if(this->IsClient())
{
this->Message(1,"%s has healed you for %d point of damage.", caster->GetCleanName(), dmg);
}
if(caster->IsClient())
{
caster->Message(1, "You have healed %s for %d points of damage.", this->GetCleanName(), dmg);
}
}
this->ChangeHP(caster, dmg, spell_id, buffslot);
#ifdef SPELL_EFFECT_SPAM
snprintf(effect_desc, _EDLEN, "Current Hitpoints: %+i actual: %+i", effect_value, dmg);
#endif
break;
}
do a search for "SE_WeaponProc:" and replace exsist case with this
Code:
case SE_WeaponProc:
{
#ifdef SPELL_EFFECT_SPAM
snprintf(effect_desc, _EDLEN, "Weapon Proc: %s (id %d)", spells[effect_value].name, effect_value);
#endif
if(spell_id==2574)//scream of death
{
AddProcToWeapon(2718);
break;
}
if(spell_id==2576)//mental corruption
{
AddProcToWeapon(2712);
break;
}
if(spell_id==1459)//shroud of death
{
AddProcToWeapon(1471);
break;
}
if(spell_id==1376)//shroud of undeath
{
AddProcToWeapon(1471);
break;
}
if(spell_id==1459)//shroud of death
{
AddProcToWeapon(1471);
break;
}
if(spell_id==3227)//shroud of chaos
{
AddProcToWeapon(3228);
break;
}
if(spell_id==4903)//black shroud
{ //procs 4910
AddProcToWeapon(4910); //then 4911 to client
break;
}
if(spell_id==4902)//mental horror
{ //procs 4908
AddProcToWeapon(4908); //then 4909 to the client
break;
}
else
AddProcToWeapon(spell.base[i]);
break;
}
now on to zone\attack.cpp do a search for "if spell is lifetap" and make sure your at the second one around like 1600 something since there seems to be the exact same code in 2 spots for some reason i dont know. replace exsisting to
Code:
// if spell is lifetap add hp to the caster
if (other && IsLifetapSpell( spell_id ))
{
int32 healedhp=damage;
//Dook-Theft of Life
if((other->CastToClient()->GetAA(214)) >= 1)
{
int chance = 101;
float ratio = 0;
int tol=0;
tol=other->CastToClient()->GetAAStruct()->pop_ability.named.theft_of_life;
if(tol==1){chance=97; ratio=1.333;}
if(tol==2){chance=94; ratio=1.666;}
if(tol==3){chance=90; ratio=2.000;}
if((MakeRandomInt(0,100)) >= chance)
{
healedhp=damage*ratio;
entity_list.MessageClose(other,false,75,0,"%s performs an exceptional heal! (%d)",other->GetName(),healedhp);
other->Message(0,"You perform an exceptional heal! (%d)",healedhp);
}
else
{
healedhp=damage;
}
}
// check if healing would be greater than max hp
// use temp var to store actual healing value
if ( other && other->GetHP() + healedhp > other->GetMaxHP()) //healedhp was damage
{
healedhp = other->GetMaxHP() - other->GetHP();
other->SetHP(other->GetMaxHP());
}
else
{
// healedhp = damage; //testing
if(other != 0)
other->SetHP(other->GetHP() + healedhp); //was damage
}
// if client was casting the spell there need to be some messages
if (other->IsClient())
{
other->CastToClient()->Message(4,"You have been healed for %d points of damage.", healedhp);
}
// emote goes with every one ... even npcs
then back into zone\spells.cpp do a search for "SE_FeignDeath"
after the #endif add
Code:
if(spell_id==2488) //Dook- Lifeburn fix
break;
couple more in a few.