From 2834641350c3bfc184c9111622a8165c8f3b8762 Mon Sep 17 00:00:00 2001 From: Euphy Date: Wed, 29 Jan 2014 23:50:19 -0500 Subject: [PATCH] Added a sample instancing script. A few authorship fixes in sample scripts. Signed-off-by: Euphy --- doc/sample/instancing.txt | 202 ++++++++++++++++++++++++++++++++ doc/sample/npc_dynamic_shop.txt | 2 +- doc/sample/npc_test_pcre.txt | 2 +- doc/sample/npc_test_quest.txt | 2 +- 4 files changed, 205 insertions(+), 3 deletions(-) create mode 100644 doc/sample/instancing.txt diff --git a/doc/sample/instancing.txt b/doc/sample/instancing.txt new file mode 100644 index 0000000000..5e175d87ee --- /dev/null +++ b/doc/sample/instancing.txt @@ -0,0 +1,202 @@ +//===== rAthena Script ======================================= +//= Sample: Instancing +//===== By: ================================================== +//= Euphy +//===== Last Updated: ======================================== +//= 20140129 +//===== Description: ========================================= +//= Contains elements of a basic instance script. +//============================================================ + +// Before running this script, add the entry below to +// 'db/(pre-)re/instance_db.txt': +// 12,Abyss Lake Instance,3600,abyss_03,160,155,abyss_03 + +// Instance Creation +//============================================================ +prontera,151,190,6 script Sample Instance 101,{ + .@instance$ = "Abyss Lake Instance"; + + if (instance_id()) { // ignore the console debug message (harmless) + mes "[Sample Instance]"; + mes "You are already part of an instance."; + next; + switch(select("Enter Instance.:Cancel.")) { + case 1: + break; + case 2: + mes "[Sample Instance]"; + mes "You don't want to try again?"; + emotion e_sob; + close; + } + } else { + mes "[Sample Instance]"; + mes "Would you like to try the sample instance in Abyss Lake 3?"; + next; + switch(select("Create Instance.:Cancel.")) { + case 1: + .@create = instance_create(.@instance$); + if (.@create < 0) { + mes "[Sample Instance]"; + switch (.@create) { + case -1: mes "ERROR: Invalid type."; break; + case -2: mes "ERROR: Party not found."; break; + case -3: mes "ERROR: Instance already exists."; break; + case -4: mes "ERROR: No free instances."; break; + } + mes " "; + mes "Instance creation ^FF0000failed^000000."; + emotion e_omg; + close; + } + mes "[Sample Instance]"; + mes "Instance created."; + mes " "; + mes "Now entering the instance..."; + next; + break; + case 2: + mes "[Sample Instance]"; + mes "Okay. Maybe next time!"; + close; + } + } + .@enter = instance_enter(.@instance$); + if (.@enter != 0) { + mes "[Sample Instance]"; + switch (.@enter) { + case 1: mes "ERROR: Party not found."; break; + case 2: mes "ERROR: Party does not have an instance."; break; + case 3: mes "ERROR: Unknown error."; break; + } + mes " "; + mes "Instance entry ^FF0000failed^000000."; + emotion e_omg; + close; + } + close; +} + +// Instance Scripts +//============================================================ +abyss_03,154,159,6 script Instance NPC#start 101,{ + mes "[Instance NPC]"; + mes "Are you ready to begin?"; + next; + switch(select("Yes.:No.")) { + case 1: + mes "[Instance NPC]"; + mes "Good luck."; + close2; + donpcevent instance_npcname("#ins_abyss03_mobs")+"::OnEnable"; + delwaitingroom; + disablenpc instance_npcname(strnpcinfo(0)); + end; + case 2: + mes "[Instance NPC]"; + mes "Take your time."; + close; + } + end; + +OnInit: // hide the NPC on the normal map + disablenpc strnpcinfo(0); + end; +OnInstanceInit: // initialize the NPC when the instance is created + disablenpc instance_npcname("abysslakedunwarp004"); // disable original warp portal (currently buggy) + waitingroom "Click here to start!",0; + end; +} + +abyss_03,0,0,0 script #ins_abyss03_mobs -1,{ + end; +OnEnable: + initnpctimer; + end; +OnTimer1000: //strnpcinfo(4) will retrieve the instanced map name + mapannounce strnpcinfo(4),"Instance NPC: The Abyss Lake instance has begun.",bc_all; + end; +OnTimer4000: + mapannounce strnpcinfo(4),"Instance NPC: Smash the Treasure Chest in the center of the map for a prize.",bc_all; + end; +OnTimer5000: + stopnpctimer; + + // spawn mobs + .@map$ = instance_mapname("abyss_03"); + .@label$ = instance_npcname(strnpcinfo(0))+"::OnMyMobDead"; + .@label_boss$ = instance_npcname(strnpcinfo(0))+"::OnMyBossDead"; + monster .@map$,0,0,"Huge Poring",1002,20,.@label$,2; + monster .@map$,0,0,"Huge Drops",1113,15,.@label$,2; + monster .@map$,0,0,"Huge Poporing",1031,10,.@label$,2; + monster .@map$,0,0,"Huge Marin",1242,10,.@label$,2; + monster .@map$,0,0,"Tiny Zombie",1015,30,.@label$,1; + monster .@map$,0,0,"Huge Mime Monkey",1585,2,.@label$,2; + monster .@map$,97,102,"Treasure Chest",1732,1,.@label_boss$,2; + end; +OnMyMobDead: // normal mobs + dispbottom "What am I doing? I should be attacking the Treasure Chest!"; + viewpoint 0,97,102,0,0xFF0000; + switch (rand(6)) { // for fun (: + case 0: sc_start SC_STONE,5000,0; break; + case 1: sc_start SC_FREEZE,5000,0; break; + case 2: sc_start SC_STUN,5000,0; break; + case 3: sc_start SC_SLEEP,5000,0; break; + case 4: sc_start SC_CONFUSION,5000,0; break; + case 5: sc_start SC_BLIND,5000,0; break; + } + end; +OnMyBossDead: // treasure chest + specialeffect2 EF_MVP; + getitem 512,1; //Apple + + // trigger other events + .@map$ = instance_mapname("abyss_03"); + .@label$ = instance_npcname(strnpcinfo(0))+"::OnMyMobDead"; + killmonster .@map$,.@label$; + mapannounce .@map$,"Instance NPC: Good work! Please speak to me as soon as possible.",bc_all; + donpcevent instance_npcname("Instance NPC#finish")+"::OnEnable"; + end; +} + +abyss_03,97,102,4 script Instance NPC#finish 101,{ + mes "[Instance NPC]"; + mes "Congratulations! You've finished the instance."; + mes "I'll send you back to town now."; + emotion e_no1; + close2; + warp "prontera",156,191; + instance_destroy(); + end; + +OnInit: + disablenpc strnpcinfo(0); + end; +OnInstanceInit: + disablenpc instance_npcname(strnpcinfo(0)); + end; +OnEnable: + enablenpc instance_npcname(strnpcinfo(0)); + specialeffect EF_HIDING; + end; +} + +abyss_03,115,26,0 script #ins_abyss03_warp 45,5,5,{ + end; +OnTouch: + mes "Are you sure you want to leave?"; + next; + switch(select("Leave.:Stay.")) { + case 1: + warp "prontera",156,191; + break; + case 2: + warp strnpcinfo(4),160,155; + break; + } + close; +OnInit: + disablenpc strnpcinfo(0); + end; +} diff --git a/doc/sample/npc_dynamic_shop.txt b/doc/sample/npc_dynamic_shop.txt index 5364282d4f..7263deb78c 100644 --- a/doc/sample/npc_dynamic_shop.txt +++ b/doc/sample/npc_dynamic_shop.txt @@ -1,7 +1,7 @@ //===== rAthena Script ======================================= //= Sample: Dynamic Shop //===== By: ================================================== -//= rAthena Dev Team +//= Lance //===== Last Updated: ======================================== //= 20101219 //===== Description: ========================================= diff --git a/doc/sample/npc_test_pcre.txt b/doc/sample/npc_test_pcre.txt index 03af541500..247464c0f3 100644 --- a/doc/sample/npc_test_pcre.txt +++ b/doc/sample/npc_test_pcre.txt @@ -1,7 +1,7 @@ //===== rAthena Script ======================================= //= Sample: PCRE //===== By: ================================================== -//= rAthena Dev Team +//= MouseJstr //===== Last Updated: ======================================== //= 20100108 //===== Description: ========================================= diff --git a/doc/sample/npc_test_quest.txt b/doc/sample/npc_test_quest.txt index e5eb853c5b..88e8fc515c 100644 --- a/doc/sample/npc_test_quest.txt +++ b/doc/sample/npc_test_quest.txt @@ -1,7 +1,7 @@ //===== rAthena Script ======================================= //= Sample: Quest Test //===== By: ================================================== -//= rAthena Dev Team +//= Akkarin //===== Last Updated: ======================================== //= 20121227 //===== Description: =========================================