Skip to content

Instantly share code, notes, and snippets.

@nonom
Created July 2, 2013 18:41
Show Gist options
  • Save nonom/14e4203cae7a1e66cb48 to your computer and use it in GitHub Desktop.
Save nonom/14e4203cae7a1e66cb48 to your computer and use it in GitHub Desktop.
class 0 ai_monastery_level_burner : default_npc
{
parameter:
int BURNER_NUMBER = 1000;
int CHECK_TIME = 1001;
int CHECK_TIME_ANNOUNCE = 1002;
int DSPAWN_TIME = 1003;
int CHECK_TIME_ANNOUNCE2 = 1004;
int SPAWN_TIME = 1005;
string my_maker0 = "";
string my_maker1 = "";
string B_maker = "";
string BURNER_NAME = "";
handler:
EventHandler CREATED( maker0, maker1 )
{
myself.i_ai2 = 0;
maker0 = gg::GetNpcMaker( my_maker0 );
switch( BURNER_NUMBER )
{
case 1:
{
myself::ChangeNickName( myself.sm,
gg::MakeFString( 60008, "", "", "", "", "" ) );
break;
}
case 2:
{
myself::ChangeNickName( myself.sm,
gg::MakeFString( 60009, "", "", "", "", "" ) );
break;
}
case 3:
{
myself::ChangeNickName( myself.sm,
gg::MakeFString( 60010, "", "", "", "", "" ) );
break;
}
case 4:
{
myself::ChangeNickName( myself.sm,
gg::MakeFString( 60011, "", "", "", "", "" ) );
break;
}
}
if( gg::IsNull( maker0 ) == @FALSE )
{
gg::SendMakerScriptEvent( maker0, @SCE_STOP, BURNER_NUMBER, 0 );
}
maker1 = gg::GetNpcMaker( my_maker1 );
if( gg::IsNull( maker1 ) == @FALSE )
{
gg::SendMakerScriptEvent( maker1, @SCE_STOP, BURNER_NUMBER, 0 );
}
myself::UnblockTimer( CHECK_TIME_ANNOUNCE );
myself::AddTimerEx( CHECK_TIME_ANNOUNCE, 3 * 60 * 1000 );
if( BURNER_NUMBER == 1 )
{
myself.i_ai0 = 1;
myself::ChangeNPCState( myself.sm, 1 );
}
else
{
myself.i_ai0 = 0;
myself::ChangeNPCState( myself.sm, 2 );
}
}
EventHandler ATTACKED( attacker, damage, skill_name_id, i0, f0 )
{
if( skill_name_id <= 0 )
{
myself.i_ai0 = 1;
myself::ChangeNPCState( myself.sm, 1 );
myself::BroadcastScriptEvent( @SCE_IM_ON, BURNER_NUMBER, 600 );
if( myself.i_ai2 == 0 )
{
myself::BlockTimer( CHECK_TIME_ANNOUNCE );
myself.i_ai2 = 1;
myself::AddTimerEx( CHECK_TIME_ANNOUNCE2, 1 * 100 );
}
}
}
EventHandler SCRIPT_EVENT( script_event_arg1, script_event_arg2, c0 )
{
if( script_event_arg1 == @SCE_IM_ON &&
BURNER_NUMBER != script_event_arg2 )
{
myself.i_ai0 = 0;
myself::ChangeNPCState( myself.sm, 2 );
if( myself.i_ai2 == 0 )
{
myself::BlockTimer( CHECK_TIME_ANNOUNCE );
myself.i_ai2 = 1;
myself::AddTimerEx( CHECK_TIME_ANNOUNCE2, 1 * 100 );
}
}
}
EventHandler TIMER_FIRED_EX( timer_id, maker0, maker1 )
{
if( timer_id == CHECK_TIME_ANNOUNCE )
{
myself::Say( gg::MakeFString( 60012, "", "", "", "", "" ) );
myself::AddTimerEx( CHECK_TIME, 15 * 1000 );
}
if( timer_id == CHECK_TIME_ANNOUNCE2 )
{
myself::Say( gg::MakeFString( 60012, "", "", "", "", "" ) );
myself::AddTimerEx( CHECK_TIME, 15 * 1000 );
}
if( timer_id == CHECK_TIME )
{
if( myself.i_ai0 == 1 )
{
maker0 = gg::GetNpcMaker( my_maker0 );
if( gg::IsNull( maker0 ) == @FALSE )
{
gg::SendMakerScriptEvent( maker0, @SCE_START, BURNER_NUMBER, 0 );
gg::SendMakerScriptEvent( maker0, 1001, BURNER_NUMBER, 0 );
}
maker1 = gg::GetNpcMaker( my_maker1 );
if( gg::IsNull( maker1 ) == @FALSE )
{
gg::SendMakerScriptEvent( maker1, @SCE_START, BURNER_NUMBER, 0 );
gg::SendMakerScriptEvent( maker1, 1001, BURNER_NUMBER, 0 );
}
myself::AddTimerEx( DSPAWN_TIME, 1 * 1000 );
}
else if( myself.i_ai0 == 0 )
{
maker0 = gg::GetNpcMaker( my_maker0 );
if( gg::IsNull( maker0 ) == @FALSE )
{
gg::SendMakerScriptEvent( maker0, @SCE_STOP, BURNER_NUMBER, 0 );
gg::SendMakerScriptEvent( maker0, 1000, BURNER_NUMBER, 0 );
}
maker1 = gg::GetNpcMaker( my_maker1 );
if( gg::IsNull( maker1 ) == @FALSE )
{
gg::SendMakerScriptEvent( maker1, @SCE_STOP, BURNER_NUMBER, 0 );
gg::SendMakerScriptEvent( maker1, 1000, BURNER_NUMBER, 0 );
}
myself::AddTimerEx( DSPAWN_TIME, 1 * 1000 );
}
}
if( timer_id == DSPAWN_TIME )
{
myself::Suicide();
myself::AddTimerEx( SPAWN_TIME, 60 * 60 * 1000 );
}
if( timer_id == SPAWN_TIME )
{
maker0 = gg::GetNpcMaker( B_maker );
if( gg::IsNull( maker0 ) == @FALSE )
{
gg::SendMakerScriptEvent( maker0, 1001, BURNER_NUMBER, 0 );
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment