All pastes #987771 Raw Edit

Stuff

public cpp v1 · immutable
#987771 ·published 2008-04-16 22:57 UTC
rendered paste body
class 1 boss_castle_siege : raid_boss_standard{parameter:	int GM_ID = 5;	int PhysicalSpecial_a = -1;	int RangePhysicalSpecial_a = -1;	int ShortRangeTeleport_a = -1;	int LongRangeTeleport_a = -1;handler:	EventHandler NO_DESIRE()	{		if( myself.sm.db_value == 3 )		{			if( myself::GetLifeTime() > 9 )			{				//myself::AddMoveAroundDesire( 5, 5 );				myself::LookNeighbor( 900 );			}			//myself::AddMoveToDesire( 11702, -49152, -536, 100 );		}	}		EventHandler CREATED(i0,reply)	{		myself.sm.flag = 1;		myself.i_ai0 = 0;		myself.i_ai1 = 0;		myself.i_ai2 = 0;		myself.i_ai3 = 0;				if( GM_ID != 0 )		{			i0 = myself::GetGlobalMap( GM_ID );			if( i0 == -1 )			{				myself::RegisterGlobalMap( GM_ID, myself::GetIndexFromCreature( myself.sm ) );				myself::SetDBValue( myself.sm, 0 );	//default				myself::AddTimerEx( 2001, 1000 );			}		}		myself::AddTimerEx( 1001, 1000 );	}		EventHandler TIMER_FIRED_EX(timer_id,i0,i1,c0,i2,c2)	{		if( timer_id == 1001 )		{			if( gg::Rand( 4 ) < 1 )			{				myself::RandomizeAttackDesire();			}			myself::AddTimerEx( 1001, 30000 );		}		else if( timer_id == 2001 )		{			//Get our siege information to check siege conditions			i0 = myself::Castle_IsUnderSiege();			i1 = myself::Castle_GetRawSystemTime();			i2 = myself::Castle_GetRawSiegeTime();			i3 = i2 - i1;			i4 = myself.i_ai3; //db_value basically						//Debug only			//i5 = myself::Castle_GetLifeControlLevel();			//gg::Announce("Siege: " + i0 + " -- System: " + i1 + " -- Siege: " + i2 + " -- 24hrs: " + myself::IntToStr( i2 - 86400) );			//gg::Announce("Siege - System: " + i3 + " -- DB Value: " + i4 + " -- Life Control Level: " + i5 );						//Case 1: Over 24 Hrs Before Siege			if( !i0 && i3 > 86400 && i3 >= 0 )			{				//gg::Announce( "Benom: Case 1" );	//Debug only								if( i4 != 1 )				{					//gg::Announce( "Benom: Case 1 - Stage 2" );	//Debug only					//What is Benom doing?  Back to "sleeping" :)					gg::SendScriptEvent( myself.sm, 1, 0 );				}			}			//Case 2: 24 hrs Before Siege			else if( !i0 && i3 <= 86400 && i3 >= 0 )			{				//gg::Announce( "Benom: Case 2" );	//Debug only								if( i4 != 2 )				{					//gg::Announce( "Benom: Case 2 - Stage 2" );	//Debug only					//Teleport to Rune Castle Dungeon					gg::SendScriptEvent( myself.sm, 2, 0 );				}			}			//Case 3: Castle Under Siege			else if( i0 )			{				//gg::Announce( "Benom: Case 3" );	//Debug only				i5 = myself::Castle_GetLifeControlLevel();								//Check if 4 or less Life Control Towers are live, of Rune's total 6				if( i5 <= 4 && i4 != 3 )				{					//gg::Announce( "Benom: Case 3 - Stage 2" );	//Debug only					//Teleport to the Rune Castle Throne Room					gg::SendScriptEvent( myself.sm, 3, 0 );				}			}			//Case 4: After Siege Ends			//This condition should *only* be reached after a siege ends,			//and before a new siege date is announced			else			{				//gg::Announce( "Benom: Case 4" );	//Debug only								if( i4 != 1 )				{					//gg::Announce( "Benom: Case 4 - Stage 2" );	//Debug only					//Siege over!  Back to "sleeping" :)					gg::SendScriptEvent( myself.sm, 1, 0 );				}			}			myself::AddTimerEx(2001, 5000);		}	}		EventHandler SCRIPT_EVENT(script_event_arg1,script_event_arg2,i0)	{		//Note: we don't support a DB state of 0, as that means the NPC was just created, and could be ANYWHERE				//Go back to "sleep" (Case 1 and 4)		if( script_event_arg1 == 1 )		{			gg::InstantTeleportEx( myself.sm, -106500, -251840, -15536, 0 );			myself::SetDBValue( myself.sm, 1 );			myself.i_ai3 = 1;		}		//Passive in Rune Castle Dungeon (Case 2)		else if( script_event_arg1 == 2 )		{			gg::InstantTeleportEx( myself.sm, 12152, -49146, -3008, 49000 );			myself::SetDBValue( myself.sm, 2 );			myself.i_ai3 = 2;			myself::EffectMusic( myself.sm, 8000, RaidSpawnMusic );		}		//Aggro in Rune Castle siege grounds (Case 3)		else if( script_event_arg1 == 3 )		{			gg::InstantTeleportEx( myself.sm, 11702, -49152, -536, 0 );			myself::SetDBValue( myself.sm, 3 );			myself.i_ai3 = 3;			myself::EffectMusic( myself.sm, 8000, RaidSpawnMusic );		}	}		EventHandler SEE_CREATURE(creature)	{		if( myself.i_ai3 == 3 )		{			if( creature.is_pc == 0 && myself::IsInCategory( 11, creature.npc_class_id ) == 0 )			{				//do nothing			}			else			{				myself::AddAttackDesire( creature, 1, 1000 );			}		}	}	EventHandler USE_SKILL_FINISHED(target,skill_name_id)	{		if( skill_name_id == ShortRangeTeleport_a)		{			if( myself.i_ai0 != 0 )			{				if( myself::IsNullCreature( myself.c_ai0 ) == 0 )				{					myself::InstantTeleport( myself.sm, myself::FloatToInt( myself.c_ai0.x ), myself::FloatToInt( myself.c_ai0.y ), myself::FloatToInt( myself.c_ai0.z ) );					myself::AddAttackDesire( myself.c_ai0, 1, 1000 );					myself.i_ai0 = 0;	//reset the var				}			}		}		else if( skill_name_id == LongRangeTeleport_a )		{			if( myself.i_ai0 != 0 )			{				if( myself::IsNullCreature( myself.c_ai0 ) == 0 )				{					myself::InstantTeleport( myself.sm, myself::FloatToInt( myself.c_ai0.x ), myself::FloatToInt( myself.c_ai0.y ), myself::FloatToInt( myself.c_ai0.z ) );					myself::AddAttackDesire( myself.c_ai0, 1, 1000 );					myself.i_ai0 = 0;	//reset the var				}			}		}	}	EventHandler ATTACKED(attacker,damage)	{		//myself::Say( "Entered Attacked Handler" );	//Debug only		if( attacker.is_pc != 0 || myself::IsInCategory( 11, attacker.npc_class_id ) )		{			//myself::Say( "Attack: Valid Attack Target" );	//Debug only			//if( attacker == myself.top_desire_target )			//{			//	myself::Say( "Attack: Target = Top Desire Target" );			//}			//if( myself::DistFromMe( attacker ) < 100 )			//{			//	myself::Say( "Attack: Target distance < 100" );			//}			//if( myself::DistFromMe( attacker ) > 150 )			//{			//	myself::Say( "Attack: Target distance > 150" );			//}			if( myself::DistFromMe( attacker ) < 100 && gg::Rand( 100 ) < 10 )			{				myself::AddUseSkillDesire( attacker, PhysicalSpecial_a, 0, 1, 1000000 );			}			else if( attacker != myself.top_desire_target && myself::DistFromMe( attacker ) < 1000 && gg::Rand( 100 ) < 25 )			{				myself::AddUseSkillDesire( myself.sm, RangePhysicalSpecial_a, 0, 1, 1000000 );			}			else if( myself::DistFromMe( attacker ) > 200 && myself::DistFromMe( attacker ) < 600 && gg::Rand( 100 ) < 6 )			{				if( myself.i_ai0 == 0 )				{					if( myself::Skill_GetConsumeMP( ShortRangeTeleport_a ) < myself.sm.mp && myself::Skill_GetConsumeHP( ShortRangeTeleport_a ) < myself.sm.hp && myself::Skill_InReuseDelay( ShortRangeTeleport_a ) == 0 )					{						myself::AddUseSkillDesire( myself.sm, ShortRangeTeleport_a, 1, 1, 1000000 );						myself.i_ai0 = 1;			//set our state variable to true						myself.c_ai0 = attacker;	//save our attacker for later use					}				}			}			else if( myself::DistFromMe( attacker ) > 400 && myself::DistFromMe( attacker ) < 1200 && gg::Rand( 100 ) < 6 )			{				if( myself.i_ai0 == 0 )				{					if( myself::Skill_GetConsumeMP( LongRangeTeleport_a ) < myself.sm.mp && myself::Skill_GetConsumeHP( LongRangeTeleport_a ) < myself.sm.hp && myself::Skill_InReuseDelay( LongRangeTeleport_a ) == 0 )					{						myself::AddUseSkillDesire( myself.sm, LongRangeTeleport_a, 1, 1, 1000000 );						myself.i_ai0 = 1;			//set our state variable to true						myself.c_ai0 = attacker;	//save our attacker for later use					}				}			}		}		super;	}	EventHandler SEE_SPELL(speller,skill_name_id)	{		//myself::Say( "Entered Spelled Handler" );	//Debug only		//if( speller == myself.top_desire_target )		//{		//	myself::Say( "Spelled: Target = Top Desire Target" );		//}		//if( myself::DistFromMe( speller ) < 100 )		//{		//	myself::Say( "Spelled: Target distance < 100" );		//}		//if( myself::DistFromMe( speller ) > 150 )		//{		//	myself::Say( "Spelled: Target distance > 150" );		//}		if( myself::DistFromMe( speller ) < 100 && gg::Rand( 100 ) < 10 )		{			myself::AddUseSkillDesire( speller, PhysicalSpecial_a, 0, 1, 1000000 );		}		else if( speller != myself.top_desire_target && myself::DistFromMe( speller ) < 1000 && gg::Rand( 100 ) < 25 )		{			myself::AddUseSkillDesire( myself.sm, RangePhysicalSpecial_a, 0, 1, 1000000 );		}		else if( myself::DistFromMe( speller ) > 200 && myself::DistFromMe( speller ) < 600 && gg::Rand( 100 ) < 6 )		{			if( myself.i_ai0 == 0 )			{				if( myself::Skill_GetConsumeMP( ShortRangeTeleport_a ) < myself.sm.mp && myself::Skill_GetConsumeHP( ShortRangeTeleport_a ) < myself.sm.hp && myself::Skill_InReuseDelay( ShortRangeTeleport_a ) == 0 )				{					myself::AddUseSkillDesire( myself.sm, ShortRangeTeleport_a, 1, 1, 1000000 );					myself.i_ai0 = 1;			//set our state variable to true					myself.c_ai0 = speller;		//save our speller for later use				}			}		}		else if( myself::DistFromMe( speller ) > 600 && myself::DistFromMe( speller ) < 1200 && gg::Rand( 100 ) < 6 )		{			if( myself.i_ai0 == 0 )			{				if( myself::Skill_GetConsumeMP( LongRangeTeleport_a ) < myself.sm.mp && myself::Skill_GetConsumeHP( LongRangeTeleport_a ) < myself.sm.hp && myself::Skill_InReuseDelay( LongRangeTeleport_a ) == 0 )				{					myself::AddUseSkillDesire( myself.sm, LongRangeTeleport_a, 1, 1, 1000000 )					myself.i_ai0 = 1;			//set our state variable to true;					myself.c_ai0 = speller;		//save our speller for later use				}			}		}		super;	}		EventHandler MY_DYING(i0,c0)	{		if( GM_ID != 0 )		{			i0 = myself::GetGlobalMap( GM_ID );			if( i0 != -1 )			{				myself::UnregisterGlobalMap( GM_ID );				myself::SetDBValue( myself.sm, 0 );			}		}		super;	}}