/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * _______ _______  _____  _     _ _______ _     _ __   __ ______  *
 * |______ |  |  | |     | |____/  |______  \___/    \_/    ____/  *
 * ______| |  |  | |_____| |    \_ |______ _/   \_    |    /_____  *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
 *                                                                 *
 * Super Leveling Dungeon                                          *
 * Script Version 1.0                                              *
 * Credits : Smokexyz [sagunxp@gmail.com]                          *
 * Skype - smokekho                                                *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
prontera,141,179,3	script	Super Trainer	4_M_DST_TOUGH,{
	set .@npc_name$,"[^999900Super Trainer^000000]";
	set .@sl_name$,"[Super Training]";
	mes .@npc_name$;
	if (BaseLevel < 50){
		mes "Hello, "+strcharinfo(0)+"...";
		mes "here you can access a memorial dungeon training service.";
		next;
		mes "I'm sorry, but you will need to have a base level of at least ^FF0000Level 50^000000 to use the Super Training services.";
		close;
	}
	mes "Howdy, "+strcharinfo(0)+"...";
	if( has_instance("1@mir") == "" ){
		mes "The Super Training program is a crash course of experience for players.";
		mes "Monsters from all over the world are collected to spawn based on the dungeon's level.";
		next;
		mes .@npc_name$;
		mes "Once you enter, an Assistant will be available to provide dungeon controls.";
		next;
		mes .@npc_name$;
		mes "What say, would you like to give it a shot?";
		if( select("Enter the dungeon","Cancel") != 1) close;
		goto Lcreateinstance;
	}
	 else {
		mes "It seems that there already is a dungeon reserved by your party.";
		goto L_DirectInstance;
		end;
	}
Lcreateinstance:
		set .@party_id, getcharid(1);
		next;
		// -----------------------------
		mes .@npc_name$;
		if( .@party_id == 0 )
		{
			mes "You need to be in a group even if you enter alone.";
			close;
		}		

		if( getpartyleader(.@party_id,2) != getcharid(0) )
		{
			mes "Only the party leader can register for " + .@sl_name$ + ".";
			close;
		}

		if( Zeny < .TrainingZenyReq ) // to check for zeny requirement
		{
			mes "...I'm sorry, you do not have enough Zeny.";
			mes "To enter this dungeon you require "+.TrainingZenyReq+" Zeny.";
			close;
		}
		mes "For my services you will be charged "+.TrainingZenyReq+" Zeny.";
		mes "Do you wish to continue?";
		next;
		if(select("- Proceed","- Cancel") == 2) close;
		set Zeny,Zeny-.TrainingZenyReq;
		set .@sl_instance, instance_create(.@sl_name$, .@party_id);
		if( .@sl_instance == -1 )
		{
			mes .@npc_name$;
			mes "There is already a memorial dungeon registered for your group.";
			close;
		}
		else if( .@sl_instance < 0 )
		{
			mes .@npc_name$;
			mes "Instance creation failed: " + .@sl_instance;
			mes "Please report this to a Game Master.";
			close;
		}			
		
		if( instance_attachmap(.TrainingMap$, .@sl_instance,1) == "" )
		{
			instance_destroy(.@sl_instance);
			mes .@npc_name$;
			mes "Instance creation failed. No more free maps.";
			mes "Please report this to a Game Master.";
			close;
		}
		mes .@npc_name$;
		mes "The dungeon is well prepared.";
		mes "You and your party will now be teleported to the Super dungeon.";
		instance_attach(.@sl_instance);
		instance_set_timeout 14400,300,.@sl_instance; // One hour
		instance_init(.@sl_instance);
		donpcevent instance_npcname("Assistant#slinstance", instance_id())+"::OnEnable";
		next;
		if( has_instance(.TrainingMap$) == "") {
			mes .@npc_name$;
			mes "You must register a dungeon with your party.";
			mes "And only then can you enter it.";
			close;
		}
				
		set .@sl_instance, instance_id(); // Store IDs
		instance_attach(.@sl_instance);

		mes .@npc_name$;
		mes "You will now be warped.";
		close2;
		warp has_instance("1@mir"),99,93;
		end;

L_DirectInstance:
	switch( select("Lets go!:Cancel") ) {
		case 1:
			if( has_instance("1@mir") == "" ) {
				mes .@npc_name$;
				mes "You must register a dungeon with your party.";
				mes "Only then can you enter it.";
				close;
			}
			close2;
			instance_attach(instance_id());
			if (has_instance("1@mir") != "")
				warp has_instance("1@mir"),99,93;
			end;

		default:
			mes .@npc_name$;
			mes "Okay, come back when you're ready then.";
			break;
	}
	close;

OnInit:
	/* Configuration */
	set .TrainingZenyReq,25000; // Amount of zeny required to create an instance.
	set .TrainingMap$,"1@mir";
	set .HappyHourBonusRate,150; // 150% of actual EXP
	end;

OnWhisperGlobal:
	if(getgmlevel() < 99) end;
	else if ( compare ( @whispervar0$, "hhourstart" ) ) goto OnHappyHour;
	else if ( compare ( @whispervar0$, "hhourend" ) ) goto OnHappyHourEnd;
	end;
	
OnHappyHour:
OnHour06:
OnHour12:
OnHour18:
OnHour00:
	announce "Super Training : Out of generosity I'm teaching my greatest techniques for the next two hours, level with me the fast way!",bc_blue;
	setmapflag .TrainingMap$,mf_bexp,.HappyHourBonusRate;
	setmapflag .TrainingMap$,mf_jexp,.HappyHourBonusRate;
	end;

OnHappyHourEnd:
OnHour08:
OnHour14:
OnHour20:
OnHour02:
	announce "Super Training : I'll be back soon with more great techniques for those who are trying to levelup!",bc_blue;	
	setmapflag .TrainingMap$,mf_bexp,100;
	setmapflag .TrainingMap$,mf_jexp,100;
	end;

OnPCLoadMapEvent:
	if(strcharinfo(3) != "prontera") end;
	if (BaseLevel >=50 && BaseLevel < 99 && getmapflag(.TrainingMap$,mf_bexp) > 0)
		showevent 4,1;
	end;
}

1@mir,101,95,4	script	Assistant#slinstance	4_M_1STPRIN1,{
OnTouch:
	if(!'leaderid) set 'leaderid, getpartyleader(getcharid(1),2);
	set .@name$,"[^999900Training Assistant^000000]";
	mes .@name$;
	mes "Welcome to the ^FF3333Training Dungeons^000000.";
	mes " ";
	mes "Dungeon difficulty : "+'dungeondiff$;
	mes "Dungeon level : ^FF0000"+'dungeonlevel$+"^000000";
	mes " ";
	mes "Would you like to toggle the dungeon controls ?";
	next;
	switch(select("Adjust Difficulty","Adjust Level Range","Warp me out!","Finish Training","Cancel")){
		case 1:
			if('leaderid != getcharid(0)){
				mes .@name$;
				mes "I'm sorry, but only the party leader can moderate the difficulty of training.";
				close;
			}
			mes .@name$;
			mes "Here you can adjust the level of difficulty.";
			mes "Please select from the menu below.";
			next;
			switch(select("Easy","Moderate","Hard","^FF0000Extreme^000000","^FF2266Super Extreme^000000","Cancel")){
				case 1:
					mes .@name$;
					mes "The difficulty level has been changed.";
					set 'dungeondiff$,"Easy";
					set 'mobspawn,.MinimumMobSpawn;
					break;
				case 2:
					mes .@name$;
					mes "The difficulty level has been changed.";
					set 'dungeondiff$,"Moderate";
					set 'mobspawn,15;
					break;
				case 3:
					mes .@name$;
					mes "The difficulty level has been changed.";
					set 'dungeondiff$,"Hard";
					set 'mobspawn,25;
					break;
				case 4:
					mes .@name$;
					mes "The difficulty level has been changed.";
					set 'dungeondiff$,"Extreme";
					set 'mobspawn,40;
					break;
				case 5:
					mes .@name$;
					mes "The difficulty level has been changed.";
					set 'dungeondiff$,"Super Extreme";
					set 'mobspawn,55;
					break;
				default:
					break;
			}
			close2;
			instance_announce 0, "Trainer : The Party Leader has set the dungeon's difficulty to "+'dungeondiff$+"!",bc_map,"0xffcc00";
			message strcharinfo(0),"Dungeon difficulty set to "+'dungeondiff$;
			end;
		case 2:
			if('leaderid != getcharid(0)){
				mes .@name$;
				mes "I'm sorry, but only the party leader can moderate the difficulty of training.";
				close;
			}
			switch(select("Level ^FF3333 50 ~ 60 ^000000",
					"Level ^FF3333 61 ~ 70 ^000000",
					"Level ^FF3333 71 ~ 80 ^000000",
					"Level ^FF3333 81 ~ 99 ^000000",
					"Cancel")) {
				case 1:
					mes .@name$;
					mes "Leveling mode is now set for players between levels ^FF000050 ~ 60^000000.";
					set 'dungeonlevel$,"50 ~ 60";
					deletearray 'mobid[0],getarraysize('mobid);
					copyarray 'mobid[0],.mobid5060[0],getarraysize(.mobid5060);
					next;
					mes .@name$;
					mes "Monsters that will spawn randomly :";
					for (set .@i,0; .@i < (getarraysize('mobid) -1); set .@i,.@i+1)
						mes "^FF4444"+strmobinfo(1,'mobid[.@i])+"^000000 Exp:"+strmobinfo(6,'mobid[.@i])+"/"+strmobinfo(7,'mobid[.@i]);
					break;
		
				case 2:
					mes .@name$;
					mes "Leveling mode is now set for players between levels ^FF000061 ~ 70^000000.";
					set 'dungeonlevel$,"61 ~ 70";
					deletearray 'mobid[0],getarraysize('mobid);
					copyarray 'mobid[0],.mobid6170[0],getarraysize(.mobid6170);
					next;
					mes .@name$;
					mes "Monsters that will spawn randomly :";
					for (set .@i,0; .@i < (getarraysize('mobid) -1); set .@i,.@i+1)
						mes "^FF4444"+strmobinfo(1,'mobid[.@i])+"^000000 Exp:"+strmobinfo(6,'mobid[.@i])+"/"+strmobinfo(7,'mobid[.@i]);
					break;
				case 3:
					mes .@name$;
					mes "Leveling mode is now set for players between levels ^FF000071 ~ 80^000000.";
					set 'dungeonlevel$,"71 ~ 80";
					deletearray 'mobid[0],getarraysize('mobid);
					copyarray 'mobid[0],.mobid7180[0],getarraysize(.mobid7180);
					next;
					mes .@name$;
					mes "Monsters that will spawn randomly :";
					for (set .@i,0; .@i < (getarraysize('mobid) -1); set .@i,.@i+3)
						mes "^FF4444"+strmobinfo(1,'mobid[.@i])+"^000000 Exp:"+strmobinfo(6,'mobid[.@i])+"/"+strmobinfo(7,'mobid[.@i]);
					break;			
				case 4:
					mes .@name$;
					mes "Leveling mode is now set for players between levels ^FF000081 ~ 99^000000.";
					set 'dungeonlevel$,"81 ~ 99";
					deletearray 'mobid[0],getarraysize('mobid);
					copyarray 'mobid[0],.mobid8199[0],getarraysize(.mobid8199);
					next;
					mes .@name$;
					mes "Monsters that will spawn randomly :";
					for (set .@i,0; .@i < (getarraysize('mobid) -1); set .@i,.@i+3)
						mes "^FF4444"+strmobinfo(1,'mobid[.@i])+"^000000 Exp:"+strmobinfo(6,'mobid[.@i])+"/"+strmobinfo(7,'mobid[.@i]);
					break;
				default:
					next;
					mes .@name$;
					mes "Take it easy there... you should carry a few potions to heal while in combat.";
					break;
				}
				instance_announce 0, "Trainer : The Party Leader has set the dungeon's level to "+'dungeonlevel$+"!",bc_map,"0xffcc00";
				message strcharinfo(0),"Dungeon level set to "+'dungeonlevel$;
				close;
			case 3:
				mes .@name$;
				mes "You will now be warped out!";
				close2;
				warp "SavePoint",0,0;
				end;
			case 4:
				mes .@name$;
				if('leaderid != getcharid(0)){
					mes "Only the party leader can decide this... please consult with him.";
					close;
				}
				mes "Very well then, you will now be warped out!";
				close2;
				donpcevent instance_npcname("Assistant#slinstance", instance_id())+"::OnDestroyInstance";
				warp "SavePoint",0,0;
				end;
			default:
				break;
	}
	close;
	
OnDisable:
	killmonster "1@mir",instance_npcname("Assistant#slinstance", instance_id())+"::OnSLDead";
	end;

OnEnable:
	sleep 10000;
	instance_announce 0, "Trainer : Welcome to the Super training dungeon.",bc_map,"0xffcc00";
	sleep 3000;
	instance_announce 0, "Trainer : You can moderate your dungeon's difficulty levels by speaking with the room supervisor.",bc_map,"0xffcc00";
	sleep 3000;
	instance_announce 0, "Trainer : Lets begin training, don't forget to use potions while in battle or you might faint!",bc_map,"0xffcc00";
	sleep 3000;
	instance_announce 0, "Trainer : Training begins in 5 seconds!",bc_map,"0xffcc00";
	sleep 1000;
	instance_announce 0, "Trainer : 4 seconds!",bc_map,"0xffcc00";
	sleep 1000;
	instance_announce 0, "Trainer : 3 seconds!",bc_map,"0xffcc00";
	sleep 1000;
	instance_announce 0, "Trainer : Get Ready!",bc_map,"0xffcc00";
	sleep 1000;
	instance_announce 0, "Trainer : GO!",bc_map,"0xffcc00";
	sleep 1000;
	set .@mobnumber,0;
	if (!'mobid[0] || !'mobspawn) {
		deletearray 'mobid[0],getarraysize('mobid);
		copyarray 'mobid[0],.mobid5060[0],getarraysize(.mobid5060);
		set 'dungeonlevel$,"50 ~ 60";
		set 'mobspawn,.MinimumMobSpawn;
		set 'dungeondiff$,"Easy";
	}
	donpcevent instance_npcname("Assistant#slinstance", instance_id())+"::OnInstanceRound";
		
OnInstanceRound:
	for (set .@i,0; .@i < 'mobspawn; set .@i,.@i+1) {
		set .@mobid,'mobid[rand(0,getarraysize('mobid))];
		set .@randname,rand(1,5);
		switch(.@randname) {
			case 1:
				set .@mobname$,"Tamed "+strmobinfo(1,.@mobid);
				break;
			case 2:
				set .@mobname$,"Superb "+strmobinfo(1,.@mobid);
				break;
			case 3:
				set .@mobname$,"Sedated "+strmobinfo(1,.@mobid);
				break;
			case 4:
				set .@mobname$,"Retired "+strmobinfo(1,.@mobid);
				break;
			case 5:
				set .@mobname$,"Training "+strmobinfo(1,.@mobid);
				break;
			default:
				set .@mobname$,"Training "+strmobinfo(1,.@mobid);
				break;
		}
		areamonster "1@mir",74,90,118,65,.@mobname$,.@mobid,1,instance_npcname("Assistant#slinstance", instance_id())+"::OnMobDead";
	}
	end;

OnMobDead:
	set .@mobnumber,mobcount("1@mir",instance_npcname("Assistant#slinstance", instance_id())+"::OnMobDead");
	if (.@mobnumber == 0){
		set .@rand,rand(1,5);
		switch(.@rand) {
			case 1:	
				instance_announce 0, "Trainer : Awesome! ^^ You have cleared this round, lets do another!",bc_map,"0xFFCC00";
				break;
			case 2:
				instance_announce 0, "Trainer : Brilliant ^^... You lads will be the finest in all of Rune Midgard! Let's train you some more!",bc_map,"0xFFCC00";
				break;
			case 3:
				instance_announce 0, "Trainer : Outstanding ^^... Maintain this attitude and you'll be going places you've never dreamt of! But, try this round...",bc_map,"0xFFCC00";
				break;
			case 4:
				instance_announce 0, "Trainer : Okay platoon let's do this again... ! ^^ 1... 2... 3...",bc_map,"0x00CCFF";
				break;
			case 5:
				instance_announce 0, "Trainer : Looks like one of you there is hurt, rub some dirt on it and get back up! ^^",bc_map,"0x00CCFF";
				break;
			default:
				break;
		}
		sleep2 5000;
		donpcevent instance_npcname("Assistant#slinstance", instance_id())+"::OnInstanceRound";
		set .@mobnumber,0;
	}
	end;

OnDestroyInstance:
	initnpctimer;
	end;

OnTimer5000:
	instance_warpall "prontera", 143,166;
	end;

OnTimer10000:
	stopnpctimer;
	instance_destroy(instance_id());
	end;

OnInit:
	/* * * * * * * * * * * * * * * * * *
	 * Static Configuration            *
	 * * * * * * * * * * * * * * * * * */
	set .MinimumMobSpawn,10; // Minimum Amount of monsters to spawn per round
	/* * * * * * * * * * * * * * * * * *
	 * Dynamic Configuration            *
	 * * * * * * * * * * * * * * * * * */
	setarray .mobid5060[0],1193 // Alarm
						,1818 //Event Alarm
						,1699 // Ancient Mimic
						,1593 // Ancient Mummy
						,1684 // Archdam
						,1194 // Arclouse
						,1364 // Assaulter
						,1882 // Baba Yaga
						,1101 // Bapho Jr.
						,1633 // Beholder
						,1408 // Blood Butterfly
						,1692 // Breeze
						,1267 // Carat
						,1519 // Chung E
						,1269 // Clock
						,1738 // Constant
						,1209 // Cramp
						,1514 // Dancing Dragon
						,1260 // Dark Frame
						,1378 // Demon Pungus
						,1506 // Disguise
						,1380 // Driller
						,1493 // Dryad
						,1655 // Erend
						,1412 // Cloud Hermit
						,1117 // Evil Druid
						,1869 // Flame Skull
						,1778 // Gazeti
						,1368 // Geographer
						,1303 // Giant Hornet
						,1304 // Giant Spider
						,1513 // Gibbet
						,1387 // Gig
						,1369 // Grand Peco
						,1687 // Green Iguana
						,1632 // Gremlin
						,1213 // High Orc
						,1512 // Hyegun
						,1510 // Hylozoist
						,1777 // Ice Titan
						,1516 // Mi Gao
						,1257 // Injustice
						,1131 // Joker
						,1072 // Kaho
						,1656 // Kavach
						,1294 // Killer Mantis
						,1838 // Knocker
						,1587 // Kraben
						,1306 // Leib Olmai
						,1410 // Enchanted Peach Tree
						,1265 // Merman
						,1191 // Mimic
						,1614 // Mineral
						,1149 // Minorous
						,1780 // Muscipular
						,1061 // Nightmare
						,1471 // Nine Tail
						,1651 // Obsidian
						,1189 // Orc Archer
						,1308 // Panzer Goblin
						,1500 // Parasite
						,1216 // Penomena
						,1693 // Plasma
						,1894 // Pouring
						,1163 // Raydric
						,1276 // Raydric Archer
						,1682 // Remover
						,1195 // Rideword
						,1323 // Sea Otter
						,1196 // Skel Prisoner
						,1775 // Snowier
						,1322 // Spring Rabbit
						,1278 // Stalatic Golem
						,1584 // Tamruan
						,1375 // The Paper
						,1771 // Vanberk
						,1263 // Wind Ghost
						,1497 // Wooden Golem
						,1192 // Wraith
						,1197; // Zombie Prizoner
	setarray .mobid6170[0],1257 // Alice
						,1737 // Aliza
						,1301 // Am Mut
						,1297 // Ancient Mummy
						,1305 // Ancient Worm
						,1206 // Anolian
						,1365 // Apocalypse
						,1654 // Armaia
						,1796 // Aunoe
						,1975 // Beholder Master
						,1300 // Caterpillar
						,1283 // Chimera
						,1513 // Civil Servant
						,1270 // Clock Tower Manager
						,1293 // Creamy Fear
						,2074 // Curupira
						,1698 // Deathword
						,1394 // Deleter Air
						,1385 // Deleter Ground
						,1382 // Diabolic
						,2014 // Draco Egg
						,1321 // Dragon Tail
						,1504 // Dullahan
						,1770 // Echio
						,1377 // Elder
						,1205 // Executioner
						,1371 // Fake Angel
						,1797 // Fanat
						,1717 // Ferus Green
						,1714 // Ferus Red
						,1753 // Frus
						,1317 // Fur Seal
						,1309 // Gajomart
						,1391 // Galapago
						,1515 // Garm Baby
						,1372 // Goat
						,1299 // Goblin Leader
						,1381 // Grizzly
						,1311 // Gullinbursti
						,1376 // Harpy
						,1318 // Heater
						,1872 // Hell Fly
						,1773 // Hodremlin
						,1772 // Isilla
						,1132 // Khalitzburg
						,1296 // Kobold Leader
						,1691 // Kraben
						,1310 // Majoruros
						,1884 // Mavka
						,1292 // Mini Demon
						,1313 // Mobster
						,1262 // Mutant Dragonoid
						,1154 // Pasana
						,1314 // Permeter
						,1664 // Photon Cannon
						,1666 // Photon Cannon 2
						,1657 // Laurell Weinder
						,1774 // Seeker
						,1401 // Shinobi
						,1752 // Skogul
						,1386 // Sleeper
						,1316 // Solider
						,1207 // Sting
						,1405 // Tengu
						,2073 // Toucan
						,1618 // Ungoliant
						,1883 // Uzhas
						,1617 // Waste Stove
						,1653 // Whikebain
						,1416 // Wicked Nymph
						,1200 // Zealotus
						,1298; // Zombie Master
	setarray .mobid7180[0],1713 // Acidus Gold
						,1716 // Acidus Blue
						,1769 // Agav
						,1735 // Alicel
						,1736 // Aliot
						,1098 // Anubis
						,1668 // Archdam
						,1315 // Assaulter
						,1518 // Bacsojin
						,1507 // Bloody Murderer
						,1307 // Cat O' Nine Tails
						,1999 // Centipede
						,1976 // Cobalt Mineral
						,2031 // Dandelion
						,1302 // Dark Illusion
						,1198 // Dark Priest
						,1670 // Dimik 1
						,1672 // Dimik 2
						,1669 // Dimik
						,1319 // Freezer
						,1932 // Garden Keeper
						,1681 // Gemini S58
						,1259 // Gryphon
						,2071 // Headless Mule
						,1977 // Heavy Metaling
						,1866 // Hell Poodle
						,2069 // Iara
						,1837 // Fire Imp
						,1374 // Incubus
						,2072 // Jaguar
						,1219 // Abysmal Knight
						,1366 // Lava Golem
						,1505 // Loli Ruri
						,1148 // Medusa
						,1203 // Mysteltainn
						,1988 // Nepenthes
						,1295 // Owl Baron
						,1320 // Owl Duke
						,1202 // Phendark
						,1995 // Pinguicula
						,2070 // Pirhana
						,1865 // Ragged Zombie
						,1702 // Retribution
						,1201 // Rybio
						,1701 // Shelter
						,1290 // Skeleton General
						,1703 // Solace
						,1622 // Teddy Bear
						,1204 // Tirfing
						,1875 // Tristan III
						,1678 // Venatu
						,1676 // Venatu
						,1679 // Venatu
						,1677 // Venatu
						,1390 // Violy
						,1208 // Wanderer
						,1291 // Wraith Dead
						,1864; // Zombie Slaughterer 
	setarray .mobid8199[0],2016 // Aqua Elemental
						,1867 // Banshee
						,1974 // Banshee Master
						,1268 // Bloody Knight
						,2049 // Bradium Golem
						,2155 // Butoijo
						,2015 // Dark Pinguicula
						,1983 // Depraved Orc Spirit
						,1671 // Dimik 2
						,1673 // Dimik 4
						,2013 // Draco
						,1635 // Eremes Guile
						,1933 // Garden Watcher
						,1636 // Howard Alt-Eisen
						,1978 // Hell Apocalypse
						,1923 // Incarnation of Morroc
						,1924 // Incarnation of Morroc
						,1922 // Incarnation of Morroc
						,1639 // Katrinn
						,1637 // Margaretha Sorin
						,1674 // Monemus
						,2047 // Naga
						,1982 // Orc Sniper
						,2021 // Phylla
						,2020 // Ryncho
						,1981 // Safeguard 
						,1370 // Succubus
						,1979; // Zakudam
	end;	
}

1@mir	mapflag	src4instance
1@mir	mapflag	nowarp
1@mir	mapflag	nowarpto
1@mir	mapflag	nosave
1@mir	mapflag	noteleport
1@mir	mapflag	noreturn
prontera	mapflag	loadevent