
- Added option to disable hash check by GM group_id (specify 'disabled' as hash for a certain group_id to let them log in with any client, even if 'client_hash_check' is enabled. - Updated and reworded related documentation for the feature. Improvements on script command 'axtoi'; added 'strtol'. (Hercules 1cf7c1e) - Added script command 'strtol' (conforming to the ISO C90 function). - Modified script command 'axtoi' to internally use 'strtol' instead of an unnecessary separate implementation. Cleaned up many sections of script documentation, and modernized syntax in examples. Added documentation for 'rentitem2' and 'makeitem2'. (follow-up 339c0a8) Added 'true' (1) and 'false' (2) as script constants. 'freeloop' argument is now optional, and will only return the value of freeloop if no argument is given. (tid:92470) http://rathena.org/board/topic/92470-freeloop-optional-argument/ Added a missing mapflag to custom 'devil_square' script. (bugreport:8611) http://rathena.org/board/tracker/issue-8611-devil-square-bug/ Signed-off-by: Euphy <euphy.raliel@rathena.org>
236 lines
8.2 KiB
Plaintext
236 lines
8.2 KiB
Plaintext
//===== rAthena Script =======================================
|
|
//= Devil Square
|
|
//===== By: ==================================================
|
|
//= Kirlein, Stillhard (translation), AnnieRuru (rewrite)
|
|
//===== Current Version: =====================================
|
|
//= 1.0
|
|
//===== Compatible With: =====================================
|
|
//= rAthena Project
|
|
//===== Description: =========================================
|
|
//= Devil Square, based on the event in MU Online.
|
|
//= Defeat three waves of monsters for treasure.
|
|
//===== Additional Comments: =================================
|
|
//= 1.0 First version, edited. [Euphy]
|
|
//============================================================
|
|
|
|
prontera,156,185,5 script Devil Square Guardian#1 406,{
|
|
set .@gm_level, 99; // GM level required to start/stop the event
|
|
|
|
mes "[Devil Square Guardian]";
|
|
mes "This is the entrance to ^FF0000Devil Square^000000.";
|
|
mes "If you fail or die, the door will close and you must wait until the event starts again to re-enter.";
|
|
next;
|
|
switch(select("Enter.:Information.:" + ((getgmlevel() >= .@gm_level) ? "GM Menu." : "") + ":Cancel.")) {
|
|
case 1:
|
|
if (.start != 1) { // registration period
|
|
mes "[Devil Square Guardian]";
|
|
mes "Devil Square is now closed.";
|
|
mes "It will open at these times:";
|
|
mes "00:00 , 02:00 , 04:00 , 06:00"; // display your times here
|
|
mes "08:00 , 10:00 , 12:00 , 14:00";
|
|
mes "16:00 , 18:00 , 20:00 , 22:00";
|
|
close;
|
|
}
|
|
if (BaseLevel < 70 || Zeny < 20000) { // requirements
|
|
mes "[Devil Square Guardian]";
|
|
mes "You do not meet the requirements to enter Devil Square.";
|
|
mes " ";
|
|
mes "Requirements:";
|
|
mes " - Base Level 70";
|
|
mes " - Registration fee 20,000z";
|
|
close;
|
|
}
|
|
Zeny -= 20000;
|
|
announce strcharinfo(0)+" has entered Devil Square.", bc_npc;
|
|
percentheal 100,100;
|
|
warp "ordeal_1-1",183,182;
|
|
close;
|
|
case 2:
|
|
mes "[Devil Square Guardian]";
|
|
mes "Inside, you will encounter 3 waves of monsters. The monsters will grow stronger with each wave.";
|
|
next;
|
|
mes "[Devil Square Guardian]";
|
|
mes "If you defeat all the enemies, you will be given the opportunity to open 10 Treasure Chests with items, equipment, and rare cards inside!";
|
|
close;
|
|
case 3:
|
|
mes "[Devil Square Guardian]";
|
|
switch (.start) { // event states
|
|
case 0: mes "Devil Square has not yet started."; break;
|
|
case 1: mes "Devil Square is currently accepting participants."; break;
|
|
case 2: mes "Devil Square Event is currently running on Round "+ .round +" with "+ .mob +" monsters remaining."; break;
|
|
}
|
|
next;
|
|
switch(select("Start event.:Stop event.:Cancel.")) {
|
|
case 1:
|
|
mes "[Devil Square Guardian]";
|
|
if (.start)
|
|
mes "Devil Square has already started.";
|
|
else {
|
|
mes "Starting Devil Square...";
|
|
donpcevent strnpcinfo(0)+"::OnStartEvent";
|
|
}
|
|
close;
|
|
case 2:
|
|
mes "[Devil Square Guardian]";
|
|
if (!.start)
|
|
mes "Devil Square has not yet started.";
|
|
else {
|
|
mes "Stopping Devil Square...";
|
|
donpcevent strnpcinfo(0)+"::OnStopEvent";
|
|
}
|
|
close;
|
|
case 3:
|
|
break;
|
|
}
|
|
break;
|
|
case 4:
|
|
break;
|
|
}
|
|
mes "[Devil Square Guardian]";
|
|
mes "Farewell.";
|
|
close;
|
|
|
|
OnStartEvent:
|
|
OnClock0000:
|
|
OnClock0200:
|
|
OnClock0400:
|
|
OnClock0600:
|
|
OnClock0800:
|
|
OnClock1000:
|
|
OnClock1200:
|
|
OnClock1400:
|
|
OnClock1600:
|
|
OnClock1800:
|
|
OnClock2000:
|
|
OnClock2200:
|
|
.start = 1;
|
|
disablenpc "ord11-12"; //from npc/warps/pvp.txt
|
|
disablenpc "Devil Square Guardian#2";
|
|
mapannounce "ordeal_1-1","Devil Square is now closed.", bc_map;
|
|
getmapxy .@map$, .@x, .@y, 1;
|
|
mapwarp "ordeal_1-1", .@map$, .@x, .@y;
|
|
killmonsterall "ordeal_1-1";
|
|
announce "Devil Square is OPEN. The event will begin in 5 minutes.", bc_all;
|
|
sleep 60000;
|
|
announce "Devil Square will begin in 4 minutes.", bc_all;
|
|
sleep 60000;
|
|
announce "Devil Square will begin in 3 minutes.", bc_all;
|
|
sleep 60000;
|
|
announce "Devil Square will begin in 2 minutes.", bc_all;
|
|
sleep 60000;
|
|
announce "Devil Square will begin in 1 minute.", bc_all;
|
|
sleep 60000;
|
|
announce "Devil Square has STARTED!", bc_all;
|
|
if ( !getmapusers("ordeal_1-1") )
|
|
goto OnStopEvent;
|
|
.start = 2;
|
|
.round = 1;
|
|
.mob = 75;
|
|
areamonster "ordeal_1-1",183,182,246,244,"[DS] SOLDIER SKELETON",1028,10,strnpcinfo(0)+"::OnDevilDead";
|
|
areamonster "ordeal_1-1",183,182,246,244,"[DS] ORC ARCHER",1189,15,strnpcinfo(0)+"::OnDevilDead";
|
|
areamonster "ordeal_1-1",183,182,246,244,"[DS] SANDMAN",1165,10,strnpcinfo(0)+"::OnDevilDead";
|
|
areamonster "ordeal_1-1",183,182,246,244,"[DS] ARCHER SKELETON",1016,15,strnpcinfo(0)+"::OnDevilDead";
|
|
areamonster "ordeal_1-1",183,182,246,244,"[DS] MINOROUS",1149,15,strnpcinfo(0)+"::OnDevilDead";
|
|
areamonster "ordeal_1-1",183,182,246,244,"[DS] REQUIEM",1164,10,strnpcinfo(0)+"::OnDevilDead";
|
|
end;
|
|
|
|
OnDevilDead:
|
|
.mob--;
|
|
if ( .mob == 25 || .mob == 5 )
|
|
announce "Devil Square : "+ .mob +" monsters remaining in round 1.", bc_map;
|
|
else if ( .mob <= 0 ) {
|
|
announce "Devil Square is entering round 2...", bc_map;
|
|
goto OnDevil2;
|
|
}
|
|
end;
|
|
|
|
OnDevil2:
|
|
.round = 2;
|
|
.mob = 70;
|
|
areamonster "ordeal_1-1",183,182,246,244,"[DS] GARGOYLE",1253,15,strnpcinfo(0)+"::OnDevilDead2";
|
|
areamonster "ordeal_1-1",183,182,246,244,"[DS] ALARM",1193,10,strnpcinfo(0)+"::OnDevilDead2";
|
|
areamonster "ordeal_1-1",183,182,246,244,"[DS] HIGH ORC",1213,10,strnpcinfo(0)+"::OnDevilDead2";
|
|
areamonster "ordeal_1-1",183,182,246,244,"[DS] INJUSTICE",1257,10,strnpcinfo(0)+"::OnDevilDead2";
|
|
areamonster "ordeal_1-1",183,182,246,244,"[DS] MIMIC",1191,15,strnpcinfo(0)+"::OnDevilDead2";
|
|
areamonster "ordeal_1-1",183,182,246,244,"[DS] WRAITH",1192,10,strnpcinfo(0)+"::OnDevilDead2";
|
|
end;
|
|
|
|
OnDevilDead2:
|
|
.mob--;
|
|
if ( .mob == 25 || .mob == 5 )
|
|
announce "Devil Square : "+ .mob +" monsters remaining in round 2.", bc_map;
|
|
else if ( .mob <= 0 ) {
|
|
announce "Devil Square is entering round 3...", bc_map;
|
|
goto OnDevil3;
|
|
}
|
|
end;
|
|
|
|
OnDevil3:
|
|
.round = 3;
|
|
.mob = 58;
|
|
areamonster "ordeal_1-1",183,182,246,244,"[DS] ANOLIAN",1206,15,strnpcinfo(0)+"::OnDevilDead3";
|
|
areamonster "ordeal_1-1",183,182,246,244,"[DS] WANDERER",1208,15,strnpcinfo(0)+"::OnDevilDead3";
|
|
areamonster "ordeal_1-1",183,182,246,244,"[DS] DEVIRUCHI",1109,10,strnpcinfo(0)+"::OnDevilDead3";
|
|
areamonster "ordeal_1-1",183,182,246,244,"[DS] JOKER",1131,15,strnpcinfo(0)+"::OnDevilDead3";
|
|
areamonster "ordeal_1-1",183,182,246,244,"[DS] MOONLIGHT",1150,2,strnpcinfo(0)+"::OnDevilDead3";
|
|
areamonster "ordeal_1-1",183,182,246,244,"[DS] DARK ILLUSION",1302,1,strnpcinfo(0)+"::OnDevilDead3";
|
|
end;
|
|
|
|
OnDevilDead3:
|
|
.mob--;
|
|
if ( .mob == 25 || .mob == 5 )
|
|
announce "Devil Square : "+ .mob +" monsters remaining in the final round.", bc_map;
|
|
else if ( .mob <= 0 ) {
|
|
announce "Devil Square : CONGRATULATIONS. These 10 Treasure Chests are yours.", bc_map;
|
|
goto OnDevil4;
|
|
}
|
|
end;
|
|
|
|
OnDevil4:
|
|
.round = 4;
|
|
.mob = 10;
|
|
monster "ordeal_1-1",231,250,"Treasure Chest",1324,1,strnpcinfo(0)+"::OnTreasureDead";
|
|
monster "ordeal_1-1",234,247,"Treasure Chest",1328,1,strnpcinfo(0)+"::OnTreasureDead";
|
|
monster "ordeal_1-1",237,244,"Treasure Chest",1332,1,strnpcinfo(0)+"::OnTreasureDead";
|
|
monster "ordeal_1-1",240,241,"Treasure Chest",1336,1,strnpcinfo(0)+"::OnTreasureDead";
|
|
monster "ordeal_1-1",243,238,"Treasure Chest",1340,1,strnpcinfo(0)+"::OnTreasureDead";
|
|
monster "ordeal_1-1",246,235,"Treasure Chest",1344,1,strnpcinfo(0)+"::OnTreasureDead";
|
|
monster "ordeal_1-1",249,232,"Treasure Chest",1348,1,strnpcinfo(0)+"::OnTreasureDead";
|
|
monster "ordeal_1-1",252,229,"Treasure Chest",1352,1,strnpcinfo(0)+"::OnTreasureDead";
|
|
monster "ordeal_1-1",249,241,"Treasure Chest",1356,1,strnpcinfo(0)+"::OnTreasureDead";
|
|
monster "ordeal_1-1",240,249,"Treasure Chest",1360,1,strnpcinfo(0)+"::OnTreasureDead";
|
|
end;
|
|
|
|
OnTreasureDead:
|
|
.mob--;
|
|
announce "Devil Square : "+ strcharinfo(0) +" has opened the Treasure Chest at Devil Square.", bc_all;
|
|
if ( .mob <= 0 )
|
|
goto OnStopEvent;
|
|
end;
|
|
|
|
OnStopEvent:
|
|
killmonsterall "ordeal_1-1";
|
|
enablenpc "ord11-12"; //from npc/warps/pvp.txt
|
|
enablenpc "Devil Square Guardian#2";
|
|
.start = .round = .mob = 0;
|
|
end;
|
|
}
|
|
|
|
ordeal_1-1,246,245,7 script Devil Square Guardian#2 406,{
|
|
mes "[Exit]";
|
|
mes "Farewell.";
|
|
close2;
|
|
warp "SavePoint",0,0;
|
|
end;
|
|
}
|
|
|
|
ordeal_1-1 mapflag nowarp
|
|
ordeal_1-1 mapflag nowarpto
|
|
ordeal_1-1 mapflag noteleport
|
|
ordeal_1-1 mapflag monster_noteleport
|
|
ordeal_1-1 mapflag nosave SavePoint
|
|
ordeal_1-1 mapflag nomemo
|
|
ordeal_1-1 mapflag nobranch
|
|
ordeal_1-1 mapflag nopenalty
|
|
ordeal_1-1 mapflag noicewall
|