Thread: Random fixes
View Single Post
  #11  
Old 08-23-2004, 07:09 PM
Branks
Sarnak
 
Join Date: May 2004
Posts: 58
Default

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.
Reply With Quote