|
@@ -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;
|
|
|
+}
|