Jump to content
  • 0

Question

Posted

Using this script but when I reload it inside my server everybody disconnects. Idk why anyone can help?

 

//	....... if your server has { Overwriting user function [int__] } don't blame me ..........
function	script	int__	{
	set .@num, atoi(getarg(0)+"");
	if ( .@num == 0 || .@num >= 2147483647 ) return getarg(0);
	set .@l, getstrlen(.@num+"");
	for ( set .@i,0; .@i < .@l; set .@i, .@i + 1 ) {
		set .@num$, .@num % pow(10,.@i+1) / pow(10,.@i) + .@num$;
		if ( (.@i+1) % 3 == 0 && .@i+1 != .@l ) set .@num$, ","+ .@num$;
	}
	return .@num$;
}

//===== eAthena Script ======================================
//= Private MVP/Branch Room
//===== By: ===============================================
//= by ~AnnieRuru~
//===== Current Version: ======================================
//= 1.4a
//===== Compatible With: ===================================== 
//= rathena 16819
//===== Description: ========================================= 
//= Player can rent MVP room for the player him/herself, for party or for guilds
//===== Topic =================================================
//= http://www.eathena.ws/board/index.php?showtopic=187654
//===== Additional Comments: ================================== 
//= 1.0 
//= ---- break the tradition which a script only for a player, or only for a party.
//=      now 1 room can be use for party and another room can use for guilds.
//= ---- timeout feature to prevent player owns the room indefinitely,
//=      by create a new account and sit/@at'ing inside overnight.
//= ---- can disable mvp/boss summon via configuration and becomes a branch room script.
//= ---- a double check to prevent players rent all the rooms for himself.
//= 1.0a
//= ---- fix a critial bug that the time count too fast -_-"
//= 1.1
//= ---- added item cost to rent or to summon
//= ---- added a config to limit summoning per session
//= ---- added flood control option
//= 1.2
//= ---- rewrite the waitingroom counter
//= ---- optimize the script in a way can add custom summon group
//= ---- add config to kill the monsters if the room just being left empty
//= ---- add GM can kick room in use
//= ---- add able to spawn in numbers
//= ---- add limitspawn can configure to negative to limit spawn in that group instead of individual one
//= 1.3
//= ---- fix chatroom countdown issue due to rev13269
//= ---- fix a bug if 2 people rent a room at same time, the later 1 will get the room
//= ---- add a feature so the GM can know how long the room has rented or abandoned
//= 1.4
//= ---- update with new mvp and mini bosses
//= ---- fix an exploit if server allow to use @mail, player can send item/zeny away to prevent item/zeny deletion when registering the room
//= ---- players die inside mvp room shouldn't lose exp
//= 1.4a
//= ---- fix this to use in rathena
//========================================================

//	This is the shop for this Branch room IF you already enable it. Can sell whatever things you want.
-	shop	MVP room#branch	-1,604:100000,12103:1000000



-	script	MVP Summoner	-1,{
	goto L_Start;

OnInit:
	getmapxy .@map$, .@x, .@y, 1;
	if ( .@map$ == "" ) {

//	Config ---------------------------------------------------------------------------------------

	// Time for rent a room IN MINUTES. When time out, players inside the room will kick out. Do Not set this as 0
	set .timeout, 60;
	// if the room left empty for # minutes, will be treated as give up the room. Do Not set this as 0
	set .nobodygiveup, 5;

	// NOTE : The script only search item OR zeny. if you specify item amount, then it will ask for the item. If item amount is 0, then it will ask for zeny.

	// the cost to rent a room
	set .rentitemid, 674; // item id use for rent a room - 674 - mithil coin
	set .rentitemamount, 0; // amount of items to rent a room
	set .rentcost, 10000000; // otherwise, zeny cost to rent a room

	// limit each room can only summon 1 monster at a time. (only the Summoning option)
	// Turn it off (0) means the player can summon a lot of monsters as long as the player has enough zeny/item. High rate server players love the room with a lot MVPs
	// Turn it on (1) means the player have to kill existing monster before can summon a new one. Low rate server player prefer to take out MVP 1 by 1
	set .floodcontrol, 0;

	// if .floodcontrol is turn off, your players might experience lag if they summoned too many MVPs
	// so what is the maximum input to limit your players summon too many ?
	set .inputlimit, 30;

	// If the room has left over monsters while nobody in the room and the room not give up yet, shall we kill monsters in empty room ?
	set .killmonster, 1; // Default is yes

	//	Options menu setting for MVP Summoner NPC.
	set .@menu[0], 1; // Turn Heal option On/Off
	set .@menu[1], 1; // Turn Group 1 summons On/Off -> MVP
	set .@menu[2], 1; // Turn Group 2 summons On/Off -> mini boss
	set .@menu[3], 0; // Turn Group 3 summons On/Off
	set .@menu[4], 0; // Turn Group 4 summons On/Off
	set .@menu[5], 0; // Turn Group 5 summons On/Off
	set .@menu[6], 0; // Turn Group 6 summons On/Off
	set .@menu[7], 0; // Turn Group 7 summons On/Off
	set .@menu[8], 0; // Turn Group 8 summons On/Off
	set .@menu[9], 0; // Turn Group 9 summons On/Off
	set .@menu[10], 1; // Sell shop items options On/Off ( shop npc above )

	//	set respawn point when they leave the room. Obviously warp to the Private MVP Room Warper npc
	set .respawnmap$, "prontera"; // Note : "SavePoint" does NOT work
	set .respawnx, 156;
	set .respawny, 191;

	// The minimum GM level can kick a room in use
	set .gmlvlkick, 80;

	// .limitspawn in previous revision changed to .grouplimit .
	// it is for limit each monster spawn per session, prevent them only killing same monster again and again
	// Now you can configure one group has limited summon, and another group has unlimited summon
	// Tips: if you server has an insane custom MVP, you can put your custom mob to Group 3~9 with insane item cost, and limit only 1 summon per session
	// .grouplimit use amount, means if group1limit set to 10, then each session can only summon up to 10 amount of that kind of monster. 0 is unlimited

	// ---------
	// Group 1 -> MVP
	// ---------
	set .group1name$, "MVP"; // Group 1 name
	set .group1itemid, 674; // item id use for summon any Group 1 monster - 674 - mithil coin
	set .group1itemamount, 0; // amount of items to summon a Group 1 monster
	set .group1cost, 10000000; // if no item is specify, zeny cost to summon a Group 1 monster
	set .group1limit, 0; // limit of summon of Group 1 monster per session, prevent them only killing same monster again and again
	setarray .group1id,
		1511,//	Amon Ra
		1647,// Assassin Cross Eremes
		1785,//	Atroce
		1630,//	Bacsojin
		1039,//	Baphomet
		1874,//	Beelzebub
		1272,//	Dark Lord
		1719,//	Datale
		1046,//	Doppelgangger
		1389,//	Dracula
		1112,//	Drake
		1115,//	Eddga
		1418,//	Evil Snake Lord
		1871,//	Fallen Bishop
		1252,//	Garm
		1768,//	Gloom Under Night
		1086,//	Golden Thief Bug
		1885,//	Gopinich
		1649,// High Priest Magaleta
		1651,// High Wizard Katrinn
		1832,//	Ifrit
		1492,//	Incantation Samurai
		1734,//	Kiel D-01
		1251,//	Knight of Windstorm
		1779,//	Ktullanux
		1688,//	Lady Tanee
		1646,// Lord Knight Seyren
		1373,//	Lord of Death
		1147,//	Maya
		1059,//	Mistress
		1150,//	Moonlight Flower
		1087,//	Orc Hero
		1190,//	Orc Lord
		1038,//	Osiris
		1157,//	Pharaoh
		1159,//	Phreeoni
		1623,//	RSX 0806
		1650,// Sniper Shecil
		1583,//	Tao Gunka
		1708,//	Thanatos
		1312,//	Turtle General
		1751,//	Valkyrie Randgris
		1685,// Vesper
		1648,// Whitesmith Harword
		1917,// Wounded Morroc
		1658;//	Ygnizem

	// ---------
	// Group 2 -> mini boss
	// ---------
	set .group2name$, "Mini-Boss"; // Group 2 name
	set .group2itemid, 674; // item id use for summon any Group 2 monster - 674 - mithil coin
	set .group2itemamount, 0; // amount of items to summon a Group 2 monster
	set .group2cost, 5000000; // if no item is specify, zeny cost to summon a Group 2 monster
	set .group2limit, 0; // limit of summon of Group 2 monster per session, prevent them only killing same monster again and again
	setarray .group2id,
		1096,// Angeling
		1388,// Archangeling
		1795,// Bloody Knight
		1830,// Bow Guardian
		1839,// Byorgue
		1309,// Cat O' Nine Tail
		1283,// Chimera
		1302,// Dark Illusion
		1198,// Dark Priest
		1582,// Deviling
		1091,// Dragon Fly
		1093,// Eclipse
		1205,// Executioner
		1783,// Galion
		1592,// Gangster
		1120,// Ghostring
		1259,// Gryphon
		1720,// Hydro
		1090,// Mastering
		1289,// Maya Purple
		1262,// Mutant Dragon
		1203,// Mysteltainn
		1870,// Necromancer
		1295,// Owl Baron
		1829,// Sword Guardian
		1204,// Tirfing
		1089,// Toad
		1092,// Vagabond Wolf
		1765;// Valkyrie

	// ---------
	// Group 3
	// ---------
	set .group3name$, "Poring-Family"; // Group 3 name
	set .group3itemid, 674; // item id use for summon any Group 3 monster - 12109 - Poring box
	set .group3itemamount, 0; // amount of items to summon a Group 3 monster
	set .group3cost, 1000000; // if no item is specify, zeny cost to summon a Group 3 monster
	set .group3limit, 0; // limit of summon of Group 3 monster per session, prevent them only killing same monster again and again
	setarray .group3id,
		1002,// Poring
		1113,// Drops
		1031,// Poporing
		1242,// Marin
		1062,// Santa Poring
		1613,// Metaling
		1784,// Stapo
		1090,// Mastering
		1096,// Angeling
		1120,// Ghostring
		1582,// Deviling
		1388,// Arc Angeling
		1502;// Pori Pori

	// ---------
	// Group 4
	// ---------
	set .group4name$, ""; // Group 4 name
	set .group4itemid, 0; // item id use for summon any Group 4 monster
	set .group4itemamount, 0; // amount of items to summon a Group 4 monster
	set .group4cost, 0; // if no item is specify, zeny cost to summon a Group 4 monster
	set .group4limit, 0; // limit of summon of Group 4 monster per session, prevent them only killing same monster again and again
	setarray .group4id,
		1001,
		1002;

	// ---------
	// Group 5
	// ---------
	set .group5name$, ""; // Group 5 name
	set .group5itemid, 0; // item id use for summon any Group 5 monster
	set .group5itemamount, 0; // amount of items to summon a Group 5 monster
	set .group5cost, 0; // if no item is specify, zeny cost to summon a Group 5 monster
	set .group5limit, 0; // limit of summon of Group 5 monster per session, prevent them only killing same monster again and again
	setarray .group5id,
		1001,
		1002;

	// ---------
	// Group 6
	// ---------
	set .group6name$, ""; // Group 6 name
	set .group6itemid, 0; // item id use for summon any Group 6 monster
	set .group6itemamount, 0; // amount of items to summon a Group 6 monster
	set .group6cost, 0; // if no item is specify, zeny cost to summon a Group 6 monster
	set .group6limit, 0; // limit of summon of Group 6 monster per session, prevent them only killing same monster again and again
	setarray .group6id,
		1001,
		1002;

	// ---------
	// Group 7
	// ---------
	set .group7name$, ""; // Group 7 name
	set .group7itemid, 0; // item id use for summon any Group 7 monster
	set .group7itemamount, 0; // amount of items to summon a Group 7 monster
	set .group7cost, 0; // if no item is specify, zeny cost to summon a Group 7 monster
	set .group7limit, 0; // limit of summon of Group 7 monster per session, prevent them only killing same monster again and again
	setarray .group7id,
		1001,
		1002;

	// ---------
	// Group 8
	// ---------
	set .group8name$, ""; // Group 8 name
	set .group8itemid, 0; // item id use for summon any Group 8 monster
	set .group8itemamount, 0; // amount of items to summon a Group 8 monster
	set .group8cost, 0; // if no item is specify, zeny cost to summon a Group 8 monster
	set .group8limit, 0; // limit of summon of Group 8 monster per session, prevent them only killing same monster again and again
	setarray .group8id,
		1001,
		1002;

	// ---------
	// Group 9
	// ---------
	set .group9name$, ""; // Group 9 name
	set .group9itemid, 0; // item id use for summon any Group 9 monster
	set .group9itemamount, 0; // amount of items to summon a Group 9 monster
	set .group9cost, 0; // if no item is specify, zeny cost to summon a Group 9 monster
	set .group9limit, 0; // limit of summon of Group 9 monster per session, prevent them only killing same monster again and again
	setarray .group9id,
		1001,
		1002;

//	Config Ends ------------------------------------------------------------------------

		if ( .timeout == 0 ) set .timeout, 60;
		if ( .nobodygiveup == 0 ) set .nobodygiveup, 5;
		if ( .inputlimit < 1 ) set .inputlimit, 1;

		if ( .rentitemid && .rentitemamount ) {
			if ( getitemname(.rentitemid) == "null" ) {
				debugmes "Private MVP Room: Rent a room is using invalid item id.";
			}
		}
		set .@i, 1;
		while ( .@i <= 9 ) {
			if ( .@menu[.@i] && getd(".group"+ .@i +"itemid") && getd(".group"+ .@i +"itemamount") ) {
				if ( getitemname( getd(".group"+ .@i +"itemid") ) == "null" ) {
					debugmes "Private MVP Room: Group no. "+ .@i +" is using invalid item id.";
				}
			}
			set .@i, .@i +1 ;
		}
		set .menu$, ( (.@menu[0])?"Heal":"" )+":"+( (.@menu[1])?"Summon "+ .group1name$:"" )+":"+( (.@menu[2])?"Summon "+ .group2name$:"" )+":"+( (.@menu[3])?"Summon "+ .group3name$:"" )+":"+( (.@menu[4])?"Summon "+ .group4name$:"" )+":"+( (.@menu[5])?"Summon "+ .group5name$:"" )+":"+( (.@menu[6])?"Summon "+ .group6name$:"" )+":"+( (.@menu[7])?"Summon "+ .group7name$:"" )+":"+( (.@menu[8])?"Summon "+ .group8name$:"" )+":"+( (.@menu[9])?"Summon "+ .group9name$:"" )+":"+( (.@menu[10])?"Buy branches":"" )+":Leave this room:Give up this room";

		set .@i, 1;
		while ( .@i <= 9 ) {
			setd ".group"+ .@i +"idsize", getarraysize( getd(".group"+ .@i +"id") );
			if ( .@menu[.@i] && getd(".group"+ .@i +"limit") <= 0 ) {
				set .@j, 0;
				while ( .@j < getd(".group"+ .@i +"idsize") ) {
					setd ".group"+ .@i +"menu$", getd(".group"+ .@i +"menu$") + getmonsterinfo( getd(".group"+ .@i +"id["+ .@j +"]"), 0) +":";
					set .@j, .@j +1 ;
				}
			}
			set .@i, .@i +1 ;
		}
	}
	else {
		sleep 1;
		mapannounce .@map$, "Admin has refresh the server, please register the room again.", 1;
		mapwarp .@map$, .respawnmap$, .respawnx, .respawny;
	}
	end;

L_Start: // I hate gotos ... but ...
	set .@dif, strnpcinfo(2);
	if ( .remind[.@dif] == 0 ) {
		set .remind[.@dif], 1;
		initnpctimer;
	}
	mes "[MVP Summoner]";
	mes "Hi, what can I do for you ?";
	next;
	switch ( select(.menu$) ) {
		case 1:
			mes "[MVP Summoner]";
			if ( mobcount("this","") > 0 ) {
				mes "I cannot offer heal service when there are monsters around.";
				close;
			}
			sc_end sc_stone;
			sc_end sc_slowdown;
			sc_end sc_freeze;
			sc_end sc_sleep;
			sc_end sc_curse;
			sc_end sc_silence;
			sc_end sc_confusion;
			sc_end sc_blind;
			sc_end sc_bleeding;
			sc_end sc_decreaseagi;
			sc_end sc_poison;
			sc_end sc_hallucination;
			sc_end sc_stripweapon;
			sc_end sc_striparmor;
			sc_end sc_striphelm;
			sc_end sc_stripshield;
			sc_end sc_changeundead;
			sc_end sc_orcish;
			sc_end sc_berserk;
			sc_end sc_ske;
			sc_end sc_swoo;
			sc_end sc_ska;
			percentheal 100,100;
			specialeffect2 7;
			mes "You have completely healed.";
			close;
		default:
			set .@group, @menu -1;
			if ( .floodcontrol && mobcount("this","") > 0 ) {
				mes "[MVP Summoner]";
				mes "I cannot summon another monster when there are monsters around.";
				close;
			}
			else if ( getd(".group"+ .@group +"itemid") && getd(".group"+ .@group +"itemamount") ) {
				mes "[MVP Summoner]";
				mes "The cost to summon a "+ getd(".group"+ .@group +"name$") +" is "+ getd(".group"+ .@group +"itemamount") +" "+ getitemname( getd(".group"+ .@group +"itemid") ) +".";
				if ( getd(".group"+ .@group +"limit") < 0 )
					mes "("+( ( ~getd(".group"+ .@group +"limit")+1 - getd(".group"+ .@group +"limit"+ .@dif) <= 0 )?0:( ~getd(".group"+ .@group +"limit")+1 - getd(".group"+ .@group +"limit"+ .@dif) ) )+") more summons for this group.";
				next;
			}
			else if ( getd(".group"+ .@group +"cost") ) {
				mes "[MVP Summoner]";
				mes "The cost to summon a "+ getd(".group"+ .@group +"name$") +" is "+ callfunc("int__", getd(".group"+ .@group +"cost") ) +" zeny.";
				if ( getd(".group"+ .@group +"limit") < 0 )
					mes "("+( ( ~getd(".group"+ .@group +"limit")+1 - getd(".group"+ .@group +"limit"+ .@dif) <= 0 )?0:( ~getd(".group"+ .@group +"limit")+1 - getd(".group"+ .@group +"limit"+ .@dif) ) )+") more summons for this group.";
				next;
			}
			else if ( getd(".group"+ .@group +"limit") < 0 ) {
				mes "[MVP Summoner]";
				mes "("+( ( ~getd(".group"+ .@group +"limit")+1 - getd(".group"+ .@group +"limit"+ .@dif) <= 0 )?0:( ~getd(".group"+ .@group +"limit")+1 - getd(".group"+ .@group +"limit"+ .@dif) ) )+") more summons for this group.";
				next;
			}
			if ( getd(".group"+ .@group +"limit") < 0 && getd(".group"+ .@group +"limit"+ .@dif) >= ~getd(".group"+ .@group +"limit")+1 ) {
				mes "[MVP Summoner]";
				mes "I'm sorry, but you can't summon any more monster for this group.";
				close;
			}
			else if ( getd(".group"+ .@group +"limit") > 0 ) {
				for ( set .@i, 0; .@i < getd(".group"+ .@group +"idsize"); set .@i, .@i +1 )
					set .@menu$, .@menu$ +( ( getd(".group"+ .@group +"limit"+ .@dif +"["+ .@i +"]") >= getd(".group"+ .@group +"limit") )?"^999999":"^000000" )+ getmonsterinfo( getd(".group"+ .@group +"id["+ .@i +"]"), 0) +" ("+ ( ( getd(".group"+ .@group +"limit") - getd(".group"+ .@group +"limit"+ .@dif +"["+ .@i +"]") <= 0 )?0:( getd(".group"+ .@group +"limit") - getd(".group"+ .@group +"limit"+ .@dif +"["+ .@i +"]") ) ) +")"+":";
				set .@menu, select(.@menu$) -1;
			}
			else
				set .@menu, select( getd(".group"+ .@group +"menu$") ) -1;
			mes "[MVP Summoner]";
			if ( .floodcontrol == 0 && .inputlimit > 1 ) {
				mes "Input an amount of monsters to summon.";
				next;
				input .@amount;
				if ( .@amount == 0 ) close;
				else if ( .@amount > .inputlimit )
					set .@amount, .inputlimit;
				mes "[MVP Summoner]";
			}
			else
				set .@amount, 1;
			if ( getd(".group"+ .@group +"itemid") && getd(".group"+ .@group +"itemamount") ) {
				if ( countitem( getd(".group"+ .@group +"itemid") ) < getd(".group"+ .@group +"itemamount") * .@amount ) {
					mes "You don't have enough "+ getitemname( getd(".group"+ .@group +"itemid") ) +" to summon a "+ getd(".group"+ .@group +"name$") +".";
					close;
				}
			}
			else if ( getd(".group"+ .@group +"cost") ) {
				if ( zeny < getd(".group"+ .@group +"cost") * .@amount ) {
					mes "You don't have enough zeny to summon a "+ getd(".group"+ .@group +"name$") +".";
					close;
				}
			}
			if ( .floodcontrol && mobcount("this","") > 0 ) {
				mes "I cannot summon another monster when there are monsters around.";
				close;
			}
			else if ( getd(".group"+ .@group +"limit") > 0 ) {
				if ( getd(".group"+ .@group +"limit"+ .@dif +"["+ .@menu +"]") >= getd(".group"+ .@group +"limit") ) {
					mes "I'm sorry, but you already summoned that monster too much. Try summon another.";
					close;
				}
				else if ( getd(".group"+ .@group +"limit"+ .@dif +"["+ .@menu +"]") + .@amount > getd(".group"+ .@group +"limit") ) {
					mes "The amount you input is more than the limit you can summon. Try reduce the amount.";
					close;
				}
			}
			else if ( getd(".group"+ .@group +"limit") < 0 ) {
				if ( getd(".group"+ .@group +"limit"+ .@dif) >= ~getd(".group"+ .@group +"limit")+1 ) {
					mes "I'm sorry, but you can't summon any more monster for this group.";
					close;
				}
				else if ( getd(".group"+ .@group +"limit"+ .@dif) + .@amount > ~getd(".group"+ .@group +"limit")+1 ) {
					mes "The amount you input is more than the limit you can summon. Try reduce the amount.";
					close;
				}
			}
			mes "Summoning "+ .@amount +" "+ getmonsterinfo( getd(".group"+ .@group +"id["+ .@menu +"]"), 0) +".";
			mes "Ok, get ready ?";
			close2;
			if ( .floodcontrol && mobcount("this","") > 0 ) end;
			if ( getd(".group"+ .@group +"itemid") && getd(".group"+ .@group +"itemamount") ) {
				if ( countitem( getd(".group"+ .@group +"itemid") ) < getd(".group"+ .@group +"itemamount") * .@amount ) end;
				delitem getd(".group"+ .@group +"itemid"), getd(".group"+ .@group +"itemamount") * .@amount;
			}
			else if ( getd(".group"+ .@group +"cost") ) {
				if ( zeny < getd(".group"+ .@group +"cost") * .@amount ) end;
				set zeny, zeny - getd(".group"+ .@group +"cost") * .@amount;
			}
			if ( getd(".group"+ .@group +"limit") > 0 ) {
				if ( getd(".group"+ .@group +"limit"+ .@dif +"["+ .@menu +"]") + .@amount > getd(".group"+ .@group +"limit") ) end;
				setd ".group"+ .@group +"limit"+ .@dif +"["+ .@menu +"]", getd(".group"+ .@group +"limit"+ .@dif +"["+ .@menu +"]") + .@amount;
			}
			else if ( getd(".group"+ .@group +"limit") < 0 ) {
				if ( getd(".group"+ .@group +"limit"+ .@dif) + .@amount > ~getd(".group"+ .@group +"limit")+1 ) end;
				setd ".group"+ .@group +"limit"+ .@dif, getd(".group"+ .@group +"limit"+ .@dif) + .@amount;
			}
			monster "this", 0, 0, "--ja--", getd(".group"+ .@group +"id["+ .@menu +"]"), .@amount;
			end;
		case 11:
			if ( mobcount("this","") > 0 ) {
				mes "[MVP Summoner]";
				mes "I cannot offer this service when there are monsters around.";
				close;
			}
			close2;
			callshop "MVP room#branch", 0;
			end;
		case 12:
			mes "[MVP Summoner]";
			mes "Are you sure you want to leave this room ?";
			mes "If this room left empty for more than "+ .nobodygiveup +" minutes, you lost ownership for this room.";
			if ( select( "Yes:No") == 2 ) close;
			warp .respawnmap$, .respawnx, .respawny;
			end;
		case 13:
			mes "[MVP Summoner]";
			getmapxy .@map$, .@x, .@y, 0;
			if ( getmapusers(.@map$) > 1 ) {
				mes "There are still some players in this room. Make sure you are the last member in this room to use this option.";
				close;
			}
			mes "Are you sure you want to give up this room ?";
			if ( .rentcost )
				mes "You will need to pay again to enter this room.";
			next;
			if ( select( "Yes:No" ) == 2 ) close;
			warp .respawnmap$, .respawnx, .respawny;
			set .remaintime[.@dif], -1;
			end;
	}
	close;

OnEnterMap:
	set .@dif, strnpcinfo(2);
	set .remind[.@dif], 0;
	for ( set .@i, 1; .@i <= 9; set .@i, .@i +1 )
		deletearray getd(".group"+ .@i +"limit"+ .@dif), getd(".group"+ .@i +"idsize");
	set .nobodycounter[.@dif], 0;
	getmapxy .@map$, .@x, .@y ,1;
	set .starttime[.@dif], gettimetick(2);
	do {
		set .remaintime[.@dif], .timeout * 60 + .starttime[.@dif] - gettimetick(2);
		set .@hour[.@dif], .remainTime[.@dif] / 3600 ;
		set .@min[.@dif], .remainTime[.@dif] % 3600 / 60 ;
		set .@sec[.@dif], .remainTime[.@dif] % 3600 % 60 ;
		delwaitingroom strnpcinfo(0);
		waitingroom "Time Left = "+( ( .@hour[.@dif] )?( .@hour[.@dif] +":"):"" )+( ( .@min[.@dif] < 10 )?"0"+ .@min[.@dif]: .@min[.@dif] )+":"+( ( .@sec[.@dif] < 10 )?"0"+ .@sec[.@dif]: .@sec[.@dif] ), 0;
		if ( getmapusers(.@map$) )
			set .nobodycounter[.@dif], 0;
		else {
			set .nobodycounter[.@dif], .nobodycounter[.@dif] +1 ;
			if ( .nobodycounter[.@dif] > .nobodygiveup * 60 ) break;
		}
		sleep 995;
	} while ( .remaintime[.@dif] > 1 );
	set .remaintime[.@dif], 0;
	delwaitingroom "MVP Summoner#"+ .@dif;
	mapwarp .@map$, .respawnmap$, .respawnx, .respawny;
	end;

OnTimer100:
	stopnpctimer;
	npctalk "Hi ~ the bubble above my head is the countdown for using this room.";
	sleep 2000;
	npctalk "Sometimes, I can skip for about 1 second in the countdown.";
	sleep 3000;
	npctalk "That is because the server is experiencing minor lag problem.";
	sleep 3000;
	npctalk "So, don't complain about me cheated for the countdown ~ ^.^";
	sleep 3000;
	npctalk "Have a nice day ~";
	end;
}

prontera,148,174,5	script	Private MVP Room	621,{
	mes "[Private MVP Room]";
	mes "Please select a private MVP room.";
	if ( getvariableofnpc(.rentitemid, "MVP Summoner") && getvariableofnpc(.rentitemamount, "MVP Summoner") )
		mes "The cost to rent a room for "+ getvariableofnpc(.timeout, "MVP Summoner") +" minutes is "+ getvariableofnpc(.rentitemamount, "MVP Summoner") +" "+ getitemname( getvariableofnpc(.rentitemid, "MVP Summoner") ) +".";
	else if ( getvariableofnpc(.rentcost, "MVP Summoner") )
		mes "The cost to rent a room for "+ getvariableofnpc(.timeout, "MVP Summoner") +" minutes is "+ callfunc("int__", getvariableofnpc(.rentcost, "MVP Summoner") ) +" zeny.";
	else
		mes "You can only use the room for only "+ getvariableofnpc(.timeout, "MVP Summoner") +" minutes.";
	mes " ";
	for ( set .@i, 1; .@i <= 8; set .@i, .@i +1 ) {
		if ( getvariableofnpc(.remaintime[.@i],"MVP Summoner") ) {
			switch ( .type[.@i] ) {
				case 1: set .@color$, "^EE8800"; break;
				case 2: set .@color$, "^70CC11"; break;
				case 3: set .@color$, "^0000FF"; break;
				default: set .@color$, "^000000";
			}
			mes "Room #"+ .@i +" = "+ .@color$ + .whoinuse$[.@i] +"^000000";
		}
	}
	next;
	set .@room, select("MVP Room 1 ["+ getmapusers("06guild_01") +"]",
		"MVP Room 2 ["+ getmapusers("06guild_02") +"]",
		"MVP Room 3 ["+ getmapusers("06guild_03") +"]",
		"MVP Room 4 ["+ getmapusers("06guild_04") +"]",
		"MVP Room 5 ["+ getmapusers("06guild_05") +"]",
		"MVP Room 6 ["+ getmapusers("06guild_06") +"]",
		"MVP Room 7 ["+ getmapusers("06guild_07") +"]",
		"MVP Room 8 ["+ getmapusers("06guild_08") +"]");
	if ( getvariableofnpc(.remaintime[.@room],"MVP Summoner") ) {
		if ( .inuseid[.@room] == getcharid(.type[.@room]) ) {
			if ( getvariableofnpc(.killmonster,"MVP Summoner") && getmapusers("06guild_0"+ .@room) == 0 )
				killmonsterall "06guild_0"+ .@room;
			warp "06guild_0"+ .@room, 0,0;
			end;
		} else {
			mes "[Private MVP Room]";
			switch ( .type[.@room] ) {
				case 1: set .@color$, "^EE8800Party "; break;
				case 2: set .@color$, "^70CC11Guild "; break;
				case 3: set .@color$, "^0000FFPlayer ";
			}
			mes "This room is reserved for ";
			mes .@color$ + .whoinuse$[.@room] +"^000000 .";
			if ( getgmlevel() < getvariableofnpc(.gmlvlkick,"MVP Summoner") ) {
				mes "Please select another.";
				close;
			}
			mes " ";
			mes "Currently there are "+ getmapusers("06guild_0"+ .@room) +" players";
			mes "in that room.";
			set .@remaintime, getvariableofnpc(.remaintime[.@room],"MVP Summoner");
			mes "It still has "+( .@remaintime /60 )+"mn "+( .@remaintime %60 )+"s left.";
			set .@nobodycounter, getvariableofnpc(.nobodycounter[.@room],"MVP Summoner");
			if ( .@nobodycounter )
				mes "And have left empty for "+( .@nobodycounter /60 )+"mn "+( .@nobodycounter %60 )+"s.";
			mes "Kick them ?";
			next;
			if ( select ( "No:Yes" ) == 1 ) close;
			set getvariableofnpc(.remaintime[.@room],"MVP Summoner"), -1;
			mes "[Private MVP Room]";
			mes "Room#"+ .@room +" is empty now.";
			close;
		}
	}
	mes "[Private MVP Room]";
	if ( getvariableofnpc(.rentitemid, "MVP Summoner") && getvariableofnpc(.rentitemamount, "MVP Summoner") ) {
		if ( countitem(getvariableofnpc(.rentitemid, "MVP Summoner")) < getvariableofnpc(.rentitemamount, "MVP Summoner") ) {
			mes "You don't have enough "+ getitemname( getvariableofnpc(.rentitemid, "MVP Summoner") ) +" to rent a room.";
			close;
		}
	}
	else if ( getvariableofnpc(.rentcost, "MVP Summoner") ) {
		if ( zeny < getvariableofnpc(.rentcost, "MVP Summoner") ) {
			mes "You don't have enough zeny to rent a room.";
			close;
		}
	}
	mes "You reserve this room for ...";
	next;
	set .@type, select("For my party members", "For my guild members", "For personal account use" );
	if ( getcharid(.@type) == 0 ) {
		mes "[Private MVP Room]";
		mes "You do not own a "+( (.@type == 1)?"Party":"Guild" )+".";
		close;
	}
	else if ( getvariableofnpc(.rentitemid, "MVP Summoner") && getvariableofnpc(.rentitemamount, "MVP Summoner") ) {
		if ( countitem(getvariableofnpc(.rentitemid, "MVP Summoner")) < getvariableofnpc(.rentitemamount, "MVP Summoner") ) {
			mes "You don't have enough "+ getitemname( getvariableofnpc(.rentitemid, "MVP Summoner") ) +" to rent a room.";
			close;
		}
	}
	else if ( getvariableofnpc(.remaintime[.@room],"MVP Summoner") ) {
		mes "[Private MVP Room]";
		mes "I'm sorry, somebody else has already register this room faster than you.";
		close;
	}
	for ( set .@i, 1; .@i <= 8; set .@i, .@i +1 ) {
		if ( getvariableofnpc(.remaintime[.@i],"MVP Summoner") && .@type == .type[.@i] && getcharid(.@type) == .inuseid[.@i] ) {
			mes "[Private MVP Room]";
			mes "You already rented Room#"+ .@i +". Use that room instead.";
			close;
		}
	}
	set .type[.@room], .@type;
	set .inuseid[.@room], getcharid(.@type);
	set .whoinuse$[.@room], strcharinfo( (.@type == 3)?0:.@type );
	if ( getvariableofnpc(.rentitemid, "MVP Summoner") && getvariableofnpc(.rentitemamount, "MVP Summoner") ) {
		if ( countitem(getvariableofnpc(.rentitemid, "MVP Summoner")) < getvariableofnpc(.rentitemamount, "MVP Summoner") ) end;
		delitem getvariableofnpc(.rentitemid, "MVP Summoner"), getvariableofnpc(.rentitemamount, "MVP Summoner");
	}
	else if ( getvariableofnpc(.rentcost, "MVP Summoner") ) {
		if ( zeny < getvariableofnpc(.rentcost, "MVP Summoner") ) end;
		set zeny, zeny - getvariableofnpc(.rentcost, "MVP Summoner");
	}
	warp "06guild_0"+ .@room, 0,0;
	killmonsterall "06guild_0"+ .@room;
	donpcevent "MVP Summoner#"+ .@room +"::OnEnterMap";
	end;
}

06guild_01,49,49,4	duplicate(MVP Summoner)	MVP Summoner#1	116
06guild_02,49,49,4	duplicate(MVP Summoner)	MVP Summoner#2	116
06guild_03,49,49,4	duplicate(MVP Summoner)	MVP Summoner#3	116
06guild_04,49,49,4	duplicate(MVP Summoner)	MVP Summoner#4	116
06guild_05,49,49,4	duplicate(MVP Summoner)	MVP Summoner#5	116
06guild_06,49,49,4	duplicate(MVP Summoner)	MVP Summoner#6	116
06guild_07,49,49,4	duplicate(MVP Summoner)	MVP Summoner#7	116
06guild_08,49,49,4	duplicate(MVP Summoner)	MVP Summoner#8	116


06guild_01	mapflag	nowarpto
06guild_02	mapflag	nowarpto
06guild_03	mapflag	nowarpto
06guild_04	mapflag	nowarpto
06guild_05	mapflag	nowarpto
06guild_06	mapflag	nowarpto
06guild_07	mapflag	nowarpto
06guild_08	mapflag	nowarpto
06guild_01	mapflag	nomemo
06guild_02	mapflag	nomemo
06guild_03	mapflag	nomemo
06guild_04	mapflag	nomemo
06guild_05	mapflag	nomemo
06guild_06	mapflag	nomemo
06guild_07	mapflag	nomemo
06guild_08	mapflag	nomemo
06guild_01	mapflag	noteleport
06guild_02	mapflag	noteleport
06guild_03	mapflag	noteleport
06guild_04	mapflag	noteleport
06guild_05	mapflag	noteleport
06guild_06	mapflag	noteleport
06guild_07	mapflag	noteleport
06guild_08	mapflag	noteleport
06guild_01	mapflag	nosave	SavePoint
06guild_02	mapflag	nosave	SavePoint
06guild_03	mapflag	nosave	SavePoint
06guild_04	mapflag	nosave	SavePoint
06guild_05	mapflag	nosave	SavePoint
06guild_06	mapflag	nosave	SavePoint
06guild_07	mapflag	nosave	SavePoint
06guild_08	mapflag	nosave	SavePoint
06guild_01	mapflag	nopenalty
06guild_02	mapflag	nopenalty
06guild_03	mapflag	nopenalty
06guild_04	mapflag	nopenalty
06guild_05	mapflag	nopenalty
06guild_06	mapflag	nopenalty
06guild_07	mapflag	nopenalty
06guild_08	mapflag	nopenalty

 

7 answers to this question

Recommended Posts

  • 0
Posted
6 hours ago, xyxzero said:

Using this script but when I reload it inside my server everybody disconnects. Idk why anyone can help?

 


//	....... if your server has { Overwriting user function [int__] } don't blame me ..........
function	script	int__	{
	set .@num, atoi(getarg(0)+"");
	if ( .@num == 0 || .@num >= 2147483647 ) return getarg(0);
	set .@l, getstrlen(.@num+"");
	for ( set .@i,0; .@i < .@l; set .@i, .@i + 1 ) {
		set .@num$, .@num % pow(10,.@i+1) / pow(10,.@i) + .@num$;
		if ( (.@i+1) % 3 == 0 && .@i+1 != .@l ) set .@num$, ","+ .@num$;
	}
	return .@num$;
}

//===== eAthena Script ======================================
//= Private MVP/Branch Room
//===== By: ===============================================
//= by ~AnnieRuru~
//===== Current Version: ======================================
//= 1.4a
//===== Compatible With: ===================================== 
//= rathena 16819
//===== Description: ========================================= 
//= Player can rent MVP room for the player him/herself, for party or for guilds
//===== Topic =================================================
//= http://www.eathena.ws/board/index.php?showtopic=187654
//===== Additional Comments: ================================== 
//= 1.0 
//= ---- break the tradition which a script only for a player, or only for a party.
//=      now 1 room can be use for party and another room can use for guilds.
//= ---- timeout feature to prevent player owns the room indefinitely,
//=      by create a new account and sit/@at'ing inside overnight.
//= ---- can disable mvp/boss summon via configuration and becomes a branch room script.
//= ---- a double check to prevent players rent all the rooms for himself.
//= 1.0a
//= ---- fix a critial bug that the time count too fast -_-"
//= 1.1
//= ---- added item cost to rent or to summon
//= ---- added a config to limit summoning per session
//= ---- added flood control option
//= 1.2
//= ---- rewrite the waitingroom counter
//= ---- optimize the script in a way can add custom summon group
//= ---- add config to kill the monsters if the room just being left empty
//= ---- add GM can kick room in use
//= ---- add able to spawn in numbers
//= ---- add limitspawn can configure to negative to limit spawn in that group instead of individual one
//= 1.3
//= ---- fix chatroom countdown issue due to rev13269
//= ---- fix a bug if 2 people rent a room at same time, the later 1 will get the room
//= ---- add a feature so the GM can know how long the room has rented or abandoned
//= 1.4
//= ---- update with new mvp and mini bosses
//= ---- fix an exploit if server allow to use @mail, player can send item/zeny away to prevent item/zeny deletion when registering the room
//= ---- players die inside mvp room shouldn't lose exp
//= 1.4a
//= ---- fix this to use in rathena
//========================================================

//	This is the shop for this Branch room IF you already enable it. Can sell whatever things you want.
-	shop	MVP room#branch	-1,604:100000,12103:1000000



-	script	MVP Summoner	-1,{
	goto L_Start;

OnInit:
	getmapxy .@map$, .@x, .@y, 1;
	if ( .@map$ == "" ) {

//	Config ---------------------------------------------------------------------------------------

	// Time for rent a room IN MINUTES. When time out, players inside the room will kick out. Do Not set this as 0
	set .timeout, 60;
	// if the room left empty for # minutes, will be treated as give up the room. Do Not set this as 0
	set .nobodygiveup, 5;

	// NOTE : The script only search item OR zeny. if you specify item amount, then it will ask for the item. If item amount is 0, then it will ask for zeny.

	// the cost to rent a room
	set .rentitemid, 674; // item id use for rent a room - 674 - mithil coin
	set .rentitemamount, 0; // amount of items to rent a room
	set .rentcost, 10000000; // otherwise, zeny cost to rent a room

	// limit each room can only summon 1 monster at a time. (only the Summoning option)
	// Turn it off (0) means the player can summon a lot of monsters as long as the player has enough zeny/item. High rate server players love the room with a lot MVPs
	// Turn it on (1) means the player have to kill existing monster before can summon a new one. Low rate server player prefer to take out MVP 1 by 1
	set .floodcontrol, 0;

	// if .floodcontrol is turn off, your players might experience lag if they summoned too many MVPs
	// so what is the maximum input to limit your players summon too many ?
	set .inputlimit, 30;

	// If the room has left over monsters while nobody in the room and the room not give up yet, shall we kill monsters in empty room ?
	set .killmonster, 1; // Default is yes

	//	Options menu setting for MVP Summoner NPC.
	set .@menu[0], 1; // Turn Heal option On/Off
	set .@menu[1], 1; // Turn Group 1 summons On/Off -> MVP
	set .@menu[2], 1; // Turn Group 2 summons On/Off -> mini boss
	set .@menu[3], 0; // Turn Group 3 summons On/Off
	set .@menu[4], 0; // Turn Group 4 summons On/Off
	set .@menu[5], 0; // Turn Group 5 summons On/Off
	set .@menu[6], 0; // Turn Group 6 summons On/Off
	set .@menu[7], 0; // Turn Group 7 summons On/Off
	set .@menu[8], 0; // Turn Group 8 summons On/Off
	set .@menu[9], 0; // Turn Group 9 summons On/Off
	set .@menu[10], 1; // Sell shop items options On/Off ( shop npc above )

	//	set respawn point when they leave the room. Obviously warp to the Private MVP Room Warper npc
	set .respawnmap$, "prontera"; // Note : "SavePoint" does NOT work
	set .respawnx, 156;
	set .respawny, 191;

	// The minimum GM level can kick a room in use
	set .gmlvlkick, 80;

	// .limitspawn in previous revision changed to .grouplimit .
	// it is for limit each monster spawn per session, prevent them only killing same monster again and again
	// Now you can configure one group has limited summon, and another group has unlimited summon
	// Tips: if you server has an insane custom MVP, you can put your custom mob to Group 3~9 with insane item cost, and limit only 1 summon per session
	// .grouplimit use amount, means if group1limit set to 10, then each session can only summon up to 10 amount of that kind of monster. 0 is unlimited

	// ---------
	// Group 1 -> MVP
	// ---------
	set .group1name$, "MVP"; // Group 1 name
	set .group1itemid, 674; // item id use for summon any Group 1 monster - 674 - mithil coin
	set .group1itemamount, 0; // amount of items to summon a Group 1 monster
	set .group1cost, 10000000; // if no item is specify, zeny cost to summon a Group 1 monster
	set .group1limit, 0; // limit of summon of Group 1 monster per session, prevent them only killing same monster again and again
	setarray .group1id,
		1511,//	Amon Ra
		1647,// Assassin Cross Eremes
		1785,//	Atroce
		1630,//	Bacsojin
		1039,//	Baphomet
		1874,//	Beelzebub
		1272,//	Dark Lord
		1719,//	Datale
		1046,//	Doppelgangger
		1389,//	Dracula
		1112,//	Drake
		1115,//	Eddga
		1418,//	Evil Snake Lord
		1871,//	Fallen Bishop
		1252,//	Garm
		1768,//	Gloom Under Night
		1086,//	Golden Thief Bug
		1885,//	Gopinich
		1649,// High Priest Magaleta
		1651,// High Wizard Katrinn
		1832,//	Ifrit
		1492,//	Incantation Samurai
		1734,//	Kiel D-01
		1251,//	Knight of Windstorm
		1779,//	Ktullanux
		1688,//	Lady Tanee
		1646,// Lord Knight Seyren
		1373,//	Lord of Death
		1147,//	Maya
		1059,//	Mistress
		1150,//	Moonlight Flower
		1087,//	Orc Hero
		1190,//	Orc Lord
		1038,//	Osiris
		1157,//	Pharaoh
		1159,//	Phreeoni
		1623,//	RSX 0806
		1650,// Sniper Shecil
		1583,//	Tao Gunka
		1708,//	Thanatos
		1312,//	Turtle General
		1751,//	Valkyrie Randgris
		1685,// Vesper
		1648,// Whitesmith Harword
		1917,// Wounded Morroc
		1658;//	Ygnizem

	// ---------
	// Group 2 -> mini boss
	// ---------
	set .group2name$, "Mini-Boss"; // Group 2 name
	set .group2itemid, 674; // item id use for summon any Group 2 monster - 674 - mithil coin
	set .group2itemamount, 0; // amount of items to summon a Group 2 monster
	set .group2cost, 5000000; // if no item is specify, zeny cost to summon a Group 2 monster
	set .group2limit, 0; // limit of summon of Group 2 monster per session, prevent them only killing same monster again and again
	setarray .group2id,
		1096,// Angeling
		1388,// Archangeling
		1795,// Bloody Knight
		1830,// Bow Guardian
		1839,// Byorgue
		1309,// Cat O' Nine Tail
		1283,// Chimera
		1302,// Dark Illusion
		1198,// Dark Priest
		1582,// Deviling
		1091,// Dragon Fly
		1093,// Eclipse
		1205,// Executioner
		1783,// Galion
		1592,// Gangster
		1120,// Ghostring
		1259,// Gryphon
		1720,// Hydro
		1090,// Mastering
		1289,// Maya Purple
		1262,// Mutant Dragon
		1203,// Mysteltainn
		1870,// Necromancer
		1295,// Owl Baron
		1829,// Sword Guardian
		1204,// Tirfing
		1089,// Toad
		1092,// Vagabond Wolf
		1765;// Valkyrie

	// ---------
	// Group 3
	// ---------
	set .group3name$, "Poring-Family"; // Group 3 name
	set .group3itemid, 674; // item id use for summon any Group 3 monster - 12109 - Poring box
	set .group3itemamount, 0; // amount of items to summon a Group 3 monster
	set .group3cost, 1000000; // if no item is specify, zeny cost to summon a Group 3 monster
	set .group3limit, 0; // limit of summon of Group 3 monster per session, prevent them only killing same monster again and again
	setarray .group3id,
		1002,// Poring
		1113,// Drops
		1031,// Poporing
		1242,// Marin
		1062,// Santa Poring
		1613,// Metaling
		1784,// Stapo
		1090,// Mastering
		1096,// Angeling
		1120,// Ghostring
		1582,// Deviling
		1388,// Arc Angeling
		1502;// Pori Pori

	// ---------
	// Group 4
	// ---------
	set .group4name$, ""; // Group 4 name
	set .group4itemid, 0; // item id use for summon any Group 4 monster
	set .group4itemamount, 0; // amount of items to summon a Group 4 monster
	set .group4cost, 0; // if no item is specify, zeny cost to summon a Group 4 monster
	set .group4limit, 0; // limit of summon of Group 4 monster per session, prevent them only killing same monster again and again
	setarray .group4id,
		1001,
		1002;

	// ---------
	// Group 5
	// ---------
	set .group5name$, ""; // Group 5 name
	set .group5itemid, 0; // item id use for summon any Group 5 monster
	set .group5itemamount, 0; // amount of items to summon a Group 5 monster
	set .group5cost, 0; // if no item is specify, zeny cost to summon a Group 5 monster
	set .group5limit, 0; // limit of summon of Group 5 monster per session, prevent them only killing same monster again and again
	setarray .group5id,
		1001,
		1002;

	// ---------
	// Group 6
	// ---------
	set .group6name$, ""; // Group 6 name
	set .group6itemid, 0; // item id use for summon any Group 6 monster
	set .group6itemamount, 0; // amount of items to summon a Group 6 monster
	set .group6cost, 0; // if no item is specify, zeny cost to summon a Group 6 monster
	set .group6limit, 0; // limit of summon of Group 6 monster per session, prevent them only killing same monster again and again
	setarray .group6id,
		1001,
		1002;

	// ---------
	// Group 7
	// ---------
	set .group7name$, ""; // Group 7 name
	set .group7itemid, 0; // item id use for summon any Group 7 monster
	set .group7itemamount, 0; // amount of items to summon a Group 7 monster
	set .group7cost, 0; // if no item is specify, zeny cost to summon a Group 7 monster
	set .group7limit, 0; // limit of summon of Group 7 monster per session, prevent them only killing same monster again and again
	setarray .group7id,
		1001,
		1002;

	// ---------
	// Group 8
	// ---------
	set .group8name$, ""; // Group 8 name
	set .group8itemid, 0; // item id use for summon any Group 8 monster
	set .group8itemamount, 0; // amount of items to summon a Group 8 monster
	set .group8cost, 0; // if no item is specify, zeny cost to summon a Group 8 monster
	set .group8limit, 0; // limit of summon of Group 8 monster per session, prevent them only killing same monster again and again
	setarray .group8id,
		1001,
		1002;

	// ---------
	// Group 9
	// ---------
	set .group9name$, ""; // Group 9 name
	set .group9itemid, 0; // item id use for summon any Group 9 monster
	set .group9itemamount, 0; // amount of items to summon a Group 9 monster
	set .group9cost, 0; // if no item is specify, zeny cost to summon a Group 9 monster
	set .group9limit, 0; // limit of summon of Group 9 monster per session, prevent them only killing same monster again and again
	setarray .group9id,
		1001,
		1002;

//	Config Ends ------------------------------------------------------------------------

		if ( .timeout == 0 ) set .timeout, 60;
		if ( .nobodygiveup == 0 ) set .nobodygiveup, 5;
		if ( .inputlimit < 1 ) set .inputlimit, 1;

		if ( .rentitemid && .rentitemamount ) {
			if ( getitemname(.rentitemid) == "null" ) {
				debugmes "Private MVP Room: Rent a room is using invalid item id.";
			}
		}
		set .@i, 1;
		while ( .@i <= 9 ) {
			if ( .@menu[.@i] && getd(".group"+ .@i +"itemid") && getd(".group"+ .@i +"itemamount") ) {
				if ( getitemname( getd(".group"+ .@i +"itemid") ) == "null" ) {
					debugmes "Private MVP Room: Group no. "+ .@i +" is using invalid item id.";
				}
			}
			set .@i, .@i +1 ;
		}
		set .menu$, ( (.@menu[0])?"Heal":"" )+":"+( (.@menu[1])?"Summon "+ .group1name$:"" )+":"+( (.@menu[2])?"Summon "+ .group2name$:"" )+":"+( (.@menu[3])?"Summon "+ .group3name$:"" )+":"+( (.@menu[4])?"Summon "+ .group4name$:"" )+":"+( (.@menu[5])?"Summon "+ .group5name$:"" )+":"+( (.@menu[6])?"Summon "+ .group6name$:"" )+":"+( (.@menu[7])?"Summon "+ .group7name$:"" )+":"+( (.@menu[8])?"Summon "+ .group8name$:"" )+":"+( (.@menu[9])?"Summon "+ .group9name$:"" )+":"+( (.@menu[10])?"Buy branches":"" )+":Leave this room:Give up this room";

		set .@i, 1;
		while ( .@i <= 9 ) {
			setd ".group"+ .@i +"idsize", getarraysize( getd(".group"+ .@i +"id") );
			if ( .@menu[.@i] && getd(".group"+ .@i +"limit") <= 0 ) {
				set .@j, 0;
				while ( .@j < getd(".group"+ .@i +"idsize") ) {
					setd ".group"+ .@i +"menu$", getd(".group"+ .@i +"menu$") + getmonsterinfo( getd(".group"+ .@i +"id["+ .@j +"]"), 0) +":";
					set .@j, .@j +1 ;
				}
			}
			set .@i, .@i +1 ;
		}
	}
	else {
		sleep 1;
		mapannounce .@map$, "Admin has refresh the server, please register the room again.", 1;
		mapwarp .@map$, .respawnmap$, .respawnx, .respawny;
	}
	end;

L_Start: // I hate gotos ... but ...
	set .@dif, strnpcinfo(2);
	if ( .remind[.@dif] == 0 ) {
		set .remind[.@dif], 1;
		initnpctimer;
	}
	mes "[MVP Summoner]";
	mes "Hi, what can I do for you ?";
	next;
	switch ( select(.menu$) ) {
		case 1:
			mes "[MVP Summoner]";
			if ( mobcount("this","") > 0 ) {
				mes "I cannot offer heal service when there are monsters around.";
				close;
			}
			sc_end sc_stone;
			sc_end sc_slowdown;
			sc_end sc_freeze;
			sc_end sc_sleep;
			sc_end sc_curse;
			sc_end sc_silence;
			sc_end sc_confusion;
			sc_end sc_blind;
			sc_end sc_bleeding;
			sc_end sc_decreaseagi;
			sc_end sc_poison;
			sc_end sc_hallucination;
			sc_end sc_stripweapon;
			sc_end sc_striparmor;
			sc_end sc_striphelm;
			sc_end sc_stripshield;
			sc_end sc_changeundead;
			sc_end sc_orcish;
			sc_end sc_berserk;
			sc_end sc_ske;
			sc_end sc_swoo;
			sc_end sc_ska;
			percentheal 100,100;
			specialeffect2 7;
			mes "You have completely healed.";
			close;
		default:
			set .@group, @menu -1;
			if ( .floodcontrol && mobcount("this","") > 0 ) {
				mes "[MVP Summoner]";
				mes "I cannot summon another monster when there are monsters around.";
				close;
			}
			else if ( getd(".group"+ .@group +"itemid") && getd(".group"+ .@group +"itemamount") ) {
				mes "[MVP Summoner]";
				mes "The cost to summon a "+ getd(".group"+ .@group +"name$") +" is "+ getd(".group"+ .@group +"itemamount") +" "+ getitemname( getd(".group"+ .@group +"itemid") ) +".";
				if ( getd(".group"+ .@group +"limit") < 0 )
					mes "("+( ( ~getd(".group"+ .@group +"limit")+1 - getd(".group"+ .@group +"limit"+ .@dif) <= 0 )?0:( ~getd(".group"+ .@group +"limit")+1 - getd(".group"+ .@group +"limit"+ .@dif) ) )+") more summons for this group.";
				next;
			}
			else if ( getd(".group"+ .@group +"cost") ) {
				mes "[MVP Summoner]";
				mes "The cost to summon a "+ getd(".group"+ .@group +"name$") +" is "+ callfunc("int__", getd(".group"+ .@group +"cost") ) +" zeny.";
				if ( getd(".group"+ .@group +"limit") < 0 )
					mes "("+( ( ~getd(".group"+ .@group +"limit")+1 - getd(".group"+ .@group +"limit"+ .@dif) <= 0 )?0:( ~getd(".group"+ .@group +"limit")+1 - getd(".group"+ .@group +"limit"+ .@dif) ) )+") more summons for this group.";
				next;
			}
			else if ( getd(".group"+ .@group +"limit") < 0 ) {
				mes "[MVP Summoner]";
				mes "("+( ( ~getd(".group"+ .@group +"limit")+1 - getd(".group"+ .@group +"limit"+ .@dif) <= 0 )?0:( ~getd(".group"+ .@group +"limit")+1 - getd(".group"+ .@group +"limit"+ .@dif) ) )+") more summons for this group.";
				next;
			}
			if ( getd(".group"+ .@group +"limit") < 0 && getd(".group"+ .@group +"limit"+ .@dif) >= ~getd(".group"+ .@group +"limit")+1 ) {
				mes "[MVP Summoner]";
				mes "I'm sorry, but you can't summon any more monster for this group.";
				close;
			}
			else if ( getd(".group"+ .@group +"limit") > 0 ) {
				for ( set .@i, 0; .@i < getd(".group"+ .@group +"idsize"); set .@i, .@i +1 )
					set .@menu$, .@menu$ +( ( getd(".group"+ .@group +"limit"+ .@dif +"["+ .@i +"]") >= getd(".group"+ .@group +"limit") )?"^999999":"^000000" )+ getmonsterinfo( getd(".group"+ .@group +"id["+ .@i +"]"), 0) +" ("+ ( ( getd(".group"+ .@group +"limit") - getd(".group"+ .@group +"limit"+ .@dif +"["+ .@i +"]") <= 0 )?0:( getd(".group"+ .@group +"limit") - getd(".group"+ .@group +"limit"+ .@dif +"["+ .@i +"]") ) ) +")"+":";
				set .@menu, select(.@menu$) -1;
			}
			else
				set .@menu, select( getd(".group"+ .@group +"menu$") ) -1;
			mes "[MVP Summoner]";
			if ( .floodcontrol == 0 && .inputlimit > 1 ) {
				mes "Input an amount of monsters to summon.";
				next;
				input .@amount;
				if ( .@amount == 0 ) close;
				else if ( .@amount > .inputlimit )
					set .@amount, .inputlimit;
				mes "[MVP Summoner]";
			}
			else
				set .@amount, 1;
			if ( getd(".group"+ .@group +"itemid") && getd(".group"+ .@group +"itemamount") ) {
				if ( countitem( getd(".group"+ .@group +"itemid") ) < getd(".group"+ .@group +"itemamount") * .@amount ) {
					mes "You don't have enough "+ getitemname( getd(".group"+ .@group +"itemid") ) +" to summon a "+ getd(".group"+ .@group +"name$") +".";
					close;
				}
			}
			else if ( getd(".group"+ .@group +"cost") ) {
				if ( zeny < getd(".group"+ .@group +"cost") * .@amount ) {
					mes "You don't have enough zeny to summon a "+ getd(".group"+ .@group +"name$") +".";
					close;
				}
			}
			if ( .floodcontrol && mobcount("this","") > 0 ) {
				mes "I cannot summon another monster when there are monsters around.";
				close;
			}
			else if ( getd(".group"+ .@group +"limit") > 0 ) {
				if ( getd(".group"+ .@group +"limit"+ .@dif +"["+ .@menu +"]") >= getd(".group"+ .@group +"limit") ) {
					mes "I'm sorry, but you already summoned that monster too much. Try summon another.";
					close;
				}
				else if ( getd(".group"+ .@group +"limit"+ .@dif +"["+ .@menu +"]") + .@amount > getd(".group"+ .@group +"limit") ) {
					mes "The amount you input is more than the limit you can summon. Try reduce the amount.";
					close;
				}
			}
			else if ( getd(".group"+ .@group +"limit") < 0 ) {
				if ( getd(".group"+ .@group +"limit"+ .@dif) >= ~getd(".group"+ .@group +"limit")+1 ) {
					mes "I'm sorry, but you can't summon any more monster for this group.";
					close;
				}
				else if ( getd(".group"+ .@group +"limit"+ .@dif) + .@amount > ~getd(".group"+ .@group +"limit")+1 ) {
					mes "The amount you input is more than the limit you can summon. Try reduce the amount.";
					close;
				}
			}
			mes "Summoning "+ .@amount +" "+ getmonsterinfo( getd(".group"+ .@group +"id["+ .@menu +"]"), 0) +".";
			mes "Ok, get ready ?";
			close2;
			if ( .floodcontrol && mobcount("this","") > 0 ) end;
			if ( getd(".group"+ .@group +"itemid") && getd(".group"+ .@group +"itemamount") ) {
				if ( countitem( getd(".group"+ .@group +"itemid") ) < getd(".group"+ .@group +"itemamount") * .@amount ) end;
				delitem getd(".group"+ .@group +"itemid"), getd(".group"+ .@group +"itemamount") * .@amount;
			}
			else if ( getd(".group"+ .@group +"cost") ) {
				if ( zeny < getd(".group"+ .@group +"cost") * .@amount ) end;
				set zeny, zeny - getd(".group"+ .@group +"cost") * .@amount;
			}
			if ( getd(".group"+ .@group +"limit") > 0 ) {
				if ( getd(".group"+ .@group +"limit"+ .@dif +"["+ .@menu +"]") + .@amount > getd(".group"+ .@group +"limit") ) end;
				setd ".group"+ .@group +"limit"+ .@dif +"["+ .@menu +"]", getd(".group"+ .@group +"limit"+ .@dif +"["+ .@menu +"]") + .@amount;
			}
			else if ( getd(".group"+ .@group +"limit") < 0 ) {
				if ( getd(".group"+ .@group +"limit"+ .@dif) + .@amount > ~getd(".group"+ .@group +"limit")+1 ) end;
				setd ".group"+ .@group +"limit"+ .@dif, getd(".group"+ .@group +"limit"+ .@dif) + .@amount;
			}
			monster "this", 0, 0, "--ja--", getd(".group"+ .@group +"id["+ .@menu +"]"), .@amount;
			end;
		case 11:
			if ( mobcount("this","") > 0 ) {
				mes "[MVP Summoner]";
				mes "I cannot offer this service when there are monsters around.";
				close;
			}
			close2;
			callshop "MVP room#branch", 0;
			end;
		case 12:
			mes "[MVP Summoner]";
			mes "Are you sure you want to leave this room ?";
			mes "If this room left empty for more than "+ .nobodygiveup +" minutes, you lost ownership for this room.";
			if ( select( "Yes:No") == 2 ) close;
			warp .respawnmap$, .respawnx, .respawny;
			end;
		case 13:
			mes "[MVP Summoner]";
			getmapxy .@map$, .@x, .@y, 0;
			if ( getmapusers(.@map$) > 1 ) {
				mes "There are still some players in this room. Make sure you are the last member in this room to use this option.";
				close;
			}
			mes "Are you sure you want to give up this room ?";
			if ( .rentcost )
				mes "You will need to pay again to enter this room.";
			next;
			if ( select( "Yes:No" ) == 2 ) close;
			warp .respawnmap$, .respawnx, .respawny;
			set .remaintime[.@dif], -1;
			end;
	}
	close;

OnEnterMap:
	set .@dif, strnpcinfo(2);
	set .remind[.@dif], 0;
	for ( set .@i, 1; .@i <= 9; set .@i, .@i +1 )
		deletearray getd(".group"+ .@i +"limit"+ .@dif), getd(".group"+ .@i +"idsize");
	set .nobodycounter[.@dif], 0;
	getmapxy .@map$, .@x, .@y ,1;
	set .starttime[.@dif], gettimetick(2);
	do {
		set .remaintime[.@dif], .timeout * 60 + .starttime[.@dif] - gettimetick(2);
		set .@hour[.@dif], .remainTime[.@dif] / 3600 ;
		set .@min[.@dif], .remainTime[.@dif] % 3600 / 60 ;
		set .@sec[.@dif], .remainTime[.@dif] % 3600 % 60 ;
		delwaitingroom strnpcinfo(0);
		waitingroom "Time Left = "+( ( .@hour[.@dif] )?( .@hour[.@dif] +":"):"" )+( ( .@min[.@dif] < 10 )?"0"+ .@min[.@dif]: .@min[.@dif] )+":"+( ( .@sec[.@dif] < 10 )?"0"+ .@sec[.@dif]: .@sec[.@dif] ), 0;
		if ( getmapusers(.@map$) )
			set .nobodycounter[.@dif], 0;
		else {
			set .nobodycounter[.@dif], .nobodycounter[.@dif] +1 ;
			if ( .nobodycounter[.@dif] > .nobodygiveup * 60 ) break;
		}
		sleep 995;
	} while ( .remaintime[.@dif] > 1 );
	set .remaintime[.@dif], 0;
	delwaitingroom "MVP Summoner#"+ .@dif;
	mapwarp .@map$, .respawnmap$, .respawnx, .respawny;
	end;

OnTimer100:
	stopnpctimer;
	npctalk "Hi ~ the bubble above my head is the countdown for using this room.";
	sleep 2000;
	npctalk "Sometimes, I can skip for about 1 second in the countdown.";
	sleep 3000;
	npctalk "That is because the server is experiencing minor lag problem.";
	sleep 3000;
	npctalk "So, don't complain about me cheated for the countdown ~ ^.^";
	sleep 3000;
	npctalk "Have a nice day ~";
	end;
}

prontera,148,174,5	script	Private MVP Room	621,{
	mes "[Private MVP Room]";
	mes "Please select a private MVP room.";
	if ( getvariableofnpc(.rentitemid, "MVP Summoner") && getvariableofnpc(.rentitemamount, "MVP Summoner") )
		mes "The cost to rent a room for "+ getvariableofnpc(.timeout, "MVP Summoner") +" minutes is "+ getvariableofnpc(.rentitemamount, "MVP Summoner") +" "+ getitemname( getvariableofnpc(.rentitemid, "MVP Summoner") ) +".";
	else if ( getvariableofnpc(.rentcost, "MVP Summoner") )
		mes "The cost to rent a room for "+ getvariableofnpc(.timeout, "MVP Summoner") +" minutes is "+ callfunc("int__", getvariableofnpc(.rentcost, "MVP Summoner") ) +" zeny.";
	else
		mes "You can only use the room for only "+ getvariableofnpc(.timeout, "MVP Summoner") +" minutes.";
	mes " ";
	for ( set .@i, 1; .@i <= 8; set .@i, .@i +1 ) {
		if ( getvariableofnpc(.remaintime[.@i],"MVP Summoner") ) {
			switch ( .type[.@i] ) {
				case 1: set .@color$, "^EE8800"; break;
				case 2: set .@color$, "^70CC11"; break;
				case 3: set .@color$, "^0000FF"; break;
				default: set .@color$, "^000000";
			}
			mes "Room #"+ .@i +" = "+ .@color$ + .whoinuse$[.@i] +"^000000";
		}
	}
	next;
	set .@room, select("MVP Room 1 ["+ getmapusers("06guild_01") +"]",
		"MVP Room 2 ["+ getmapusers("06guild_02") +"]",
		"MVP Room 3 ["+ getmapusers("06guild_03") +"]",
		"MVP Room 4 ["+ getmapusers("06guild_04") +"]",
		"MVP Room 5 ["+ getmapusers("06guild_05") +"]",
		"MVP Room 6 ["+ getmapusers("06guild_06") +"]",
		"MVP Room 7 ["+ getmapusers("06guild_07") +"]",
		"MVP Room 8 ["+ getmapusers("06guild_08") +"]");
	if ( getvariableofnpc(.remaintime[.@room],"MVP Summoner") ) {
		if ( .inuseid[.@room] == getcharid(.type[.@room]) ) {
			if ( getvariableofnpc(.killmonster,"MVP Summoner") && getmapusers("06guild_0"+ .@room) == 0 )
				killmonsterall "06guild_0"+ .@room;
			warp "06guild_0"+ .@room, 0,0;
			end;
		} else {
			mes "[Private MVP Room]";
			switch ( .type[.@room] ) {
				case 1: set .@color$, "^EE8800Party "; break;
				case 2: set .@color$, "^70CC11Guild "; break;
				case 3: set .@color$, "^0000FFPlayer ";
			}
			mes "This room is reserved for ";
			mes .@color$ + .whoinuse$[.@room] +"^000000 .";
			if ( getgmlevel() < getvariableofnpc(.gmlvlkick,"MVP Summoner") ) {
				mes "Please select another.";
				close;
			}
			mes " ";
			mes "Currently there are "+ getmapusers("06guild_0"+ .@room) +" players";
			mes "in that room.";
			set .@remaintime, getvariableofnpc(.remaintime[.@room],"MVP Summoner");
			mes "It still has "+( .@remaintime /60 )+"mn "+( .@remaintime %60 )+"s left.";
			set .@nobodycounter, getvariableofnpc(.nobodycounter[.@room],"MVP Summoner");
			if ( .@nobodycounter )
				mes "And have left empty for "+( .@nobodycounter /60 )+"mn "+( .@nobodycounter %60 )+"s.";
			mes "Kick them ?";
			next;
			if ( select ( "No:Yes" ) == 1 ) close;
			set getvariableofnpc(.remaintime[.@room],"MVP Summoner"), -1;
			mes "[Private MVP Room]";
			mes "Room#"+ .@room +" is empty now.";
			close;
		}
	}
	mes "[Private MVP Room]";
	if ( getvariableofnpc(.rentitemid, "MVP Summoner") && getvariableofnpc(.rentitemamount, "MVP Summoner") ) {
		if ( countitem(getvariableofnpc(.rentitemid, "MVP Summoner")) < getvariableofnpc(.rentitemamount, "MVP Summoner") ) {
			mes "You don't have enough "+ getitemname( getvariableofnpc(.rentitemid, "MVP Summoner") ) +" to rent a room.";
			close;
		}
	}
	else if ( getvariableofnpc(.rentcost, "MVP Summoner") ) {
		if ( zeny < getvariableofnpc(.rentcost, "MVP Summoner") ) {
			mes "You don't have enough zeny to rent a room.";
			close;
		}
	}
	mes "You reserve this room for ...";
	next;
	set .@type, select("For my party members", "For my guild members", "For personal account use" );
	if ( getcharid(.@type) == 0 ) {
		mes "[Private MVP Room]";
		mes "You do not own a "+( (.@type == 1)?"Party":"Guild" )+".";
		close;
	}
	else if ( getvariableofnpc(.rentitemid, "MVP Summoner") && getvariableofnpc(.rentitemamount, "MVP Summoner") ) {
		if ( countitem(getvariableofnpc(.rentitemid, "MVP Summoner")) < getvariableofnpc(.rentitemamount, "MVP Summoner") ) {
			mes "You don't have enough "+ getitemname( getvariableofnpc(.rentitemid, "MVP Summoner") ) +" to rent a room.";
			close;
		}
	}
	else if ( getvariableofnpc(.remaintime[.@room],"MVP Summoner") ) {
		mes "[Private MVP Room]";
		mes "I'm sorry, somebody else has already register this room faster than you.";
		close;
	}
	for ( set .@i, 1; .@i <= 8; set .@i, .@i +1 ) {
		if ( getvariableofnpc(.remaintime[.@i],"MVP Summoner") && .@type == .type[.@i] && getcharid(.@type) == .inuseid[.@i] ) {
			mes "[Private MVP Room]";
			mes "You already rented Room#"+ .@i +". Use that room instead.";
			close;
		}
	}
	set .type[.@room], .@type;
	set .inuseid[.@room], getcharid(.@type);
	set .whoinuse$[.@room], strcharinfo( (.@type == 3)?0:.@type );
	if ( getvariableofnpc(.rentitemid, "MVP Summoner") && getvariableofnpc(.rentitemamount, "MVP Summoner") ) {
		if ( countitem(getvariableofnpc(.rentitemid, "MVP Summoner")) < getvariableofnpc(.rentitemamount, "MVP Summoner") ) end;
		delitem getvariableofnpc(.rentitemid, "MVP Summoner"), getvariableofnpc(.rentitemamount, "MVP Summoner");
	}
	else if ( getvariableofnpc(.rentcost, "MVP Summoner") ) {
		if ( zeny < getvariableofnpc(.rentcost, "MVP Summoner") ) end;
		set zeny, zeny - getvariableofnpc(.rentcost, "MVP Summoner");
	}
	warp "06guild_0"+ .@room, 0,0;
	killmonsterall "06guild_0"+ .@room;
	donpcevent "MVP Summoner#"+ .@room +"::OnEnterMap";
	end;
}

06guild_01,49,49,4	duplicate(MVP Summoner)	MVP Summoner#1	116
06guild_02,49,49,4	duplicate(MVP Summoner)	MVP Summoner#2	116
06guild_03,49,49,4	duplicate(MVP Summoner)	MVP Summoner#3	116
06guild_04,49,49,4	duplicate(MVP Summoner)	MVP Summoner#4	116
06guild_05,49,49,4	duplicate(MVP Summoner)	MVP Summoner#5	116
06guild_06,49,49,4	duplicate(MVP Summoner)	MVP Summoner#6	116
06guild_07,49,49,4	duplicate(MVP Summoner)	MVP Summoner#7	116
06guild_08,49,49,4	duplicate(MVP Summoner)	MVP Summoner#8	116


06guild_01	mapflag	nowarpto
06guild_02	mapflag	nowarpto
06guild_03	mapflag	nowarpto
06guild_04	mapflag	nowarpto
06guild_05	mapflag	nowarpto
06guild_06	mapflag	nowarpto
06guild_07	mapflag	nowarpto
06guild_08	mapflag	nowarpto
06guild_01	mapflag	nomemo
06guild_02	mapflag	nomemo
06guild_03	mapflag	nomemo
06guild_04	mapflag	nomemo
06guild_05	mapflag	nomemo
06guild_06	mapflag	nomemo
06guild_07	mapflag	nomemo
06guild_08	mapflag	nomemo
06guild_01	mapflag	noteleport
06guild_02	mapflag	noteleport
06guild_03	mapflag	noteleport
06guild_04	mapflag	noteleport
06guild_05	mapflag	noteleport
06guild_06	mapflag	noteleport
06guild_07	mapflag	noteleport
06guild_08	mapflag	noteleport
06guild_01	mapflag	nosave	SavePoint
06guild_02	mapflag	nosave	SavePoint
06guild_03	mapflag	nosave	SavePoint
06guild_04	mapflag	nosave	SavePoint
06guild_05	mapflag	nosave	SavePoint
06guild_06	mapflag	nosave	SavePoint
06guild_07	mapflag	nosave	SavePoint
06guild_08	mapflag	nosave	SavePoint
06guild_01	mapflag	nopenalty
06guild_02	mapflag	nopenalty
06guild_03	mapflag	nopenalty
06guild_04	mapflag	nopenalty
06guild_05	mapflag	nopenalty
06guild_06	mapflag	nopenalty
06guild_07	mapflag	nopenalty
06guild_08	mapflag	nopenalty

 

How about console logs, do you have any? and does the comment at the very first line of your script show up in the console logs?

  • 0
Posted

maybe u can try this one.

 

function	script	Time2Str	{
	set .@Time_Left, getarg(0) - gettimetick(2);
	
	set .@Days, .@Time_Left / 86400;
	set .@Time_Left, .@Time_Left - (.@Days * 86400);
	set .@Hours, .@Time_Left / 3600;
	set .@Time_Left, .@Time_Left - (.@Hours * 3600);
	set .@Minutes, .@Time_Left / 60;
	set .@Time_Left, .@Time_Left - (.@Minutes * 60);
	
	set .@Time$, "";
	if( .@Days > 1 )
		set .@Time$, .@Time$ + .@Days + " days, ";
	else if( .@Days > 0 )
		set .@Time$, .@Time$ + .@Days + " day, ";

	if( .@Hours > 1 )
		set .@Time$, .@Time$ + .@Hours + " hours, ";
	else if( .@Hours > 0 )
		set .@Time$, .@Time$ + .@Hours + " hour, ";

	if( .@Minutes > 1 )
		set .@Time$, .@Time$ + .@Minutes + " minutes, ";
	else if( .@Minutes > 0 )
		set .@Time$, .@Time$ + .@Minutes + " minute, ";

	if( .@Time_Left > 1 || .@Time_Left == 0 )
		set .@Time$, .@Time$ + .@Time_Left + " seconds";
	else if( .@Time_Left == 1 )
		set .@Time$, .@Time$ + .@Time_Left + " second";
	
	return .@Time$;
}

function	script	F_InsertComma	{
	set .@str$, getarg(0);
	for (set .@i,getstrlen(.@str$)-3; .@i>0; set .@i,.@i-3)
		set .@str$, insertchar(.@str$,",",.@i);
	return .@str$;
}

function	script	F_GetPlural	{
	set .@str$, getarg(0);

	if (countstr(.@str$," ")) {  // multiple words
		explode(.@tmp$,.@str$," ");
		set .@size, getarraysize(.@tmp$);

		// if format is "... of|in|on ...", pluralize preceding word; else pluralize last word
		if (compare(.@str$," of ") || compare(.@str$," in ") || compare(.@str$," on ")) {
			for (set .@i,1; .@i<.@size; set .@i,.@i+1) {
				if (getstrlen(.@tmp$[.@i]) == 2 && compare("of|in|on",.@tmp$[.@i]))
					break;
				set .@index, .@index + 1;
			}
		} else
			set .@index, .@size - 1;

		set .@str$, .@tmp$[.@index];
		set .@tmp$[.@index],"%s";
		set .@format$, implode(.@tmp$," ");
	} else
		set .@format$, "%s";

	set .@strlen, getstrlen(.@str$);
	if (.@strlen < 3)  // prevent errors
		return ((getarg(1,0)) ? strtoupper(sprintf(.@format$,.@str$)) : sprintf(.@format$,.@str$));

	setarray .@suffix$[0], charat(.@str$,.@strlen - 1), substr(.@str$,.@strlen - 2,.@strlen - 1);
	if (!compare("abcdefghijklmnopqrstuvwxyz",.@suffix$[0])) {  // last character is not a letter
		set .@result$, .@str$;
	}

	// common exceptions --> singular form == plural form
	else if (compare("fish|glasses|sunglasses|clothes|boots|shoes|greaves|sandals|wings|ears",.@str$)) {
		set .@result$, .@str$;
	}

	// ends in -s, -x, -z, -ch, -sh --> add -es
	else if (.@suffix$[0] == "s" || .@suffix$[0] == "x" || .@suffix$[0] == "z" ||
	    .@suffix$[1] == "ch" || .@suffix$[1] == "sh") {
		set .@result$, .@str$ + "es";
	}

	// ends in -f, -fe --> remove -f, -fe --> add -ves
	else if ((.@suffix$[0] == "f" || .@suffix$[1] == "fe") && .@suffix$[1] != "ff") {
		if (compare("belief|cliff|chief|dwarf|grief|gulf|proof|roof",.@str$))
			set .@result$, .@str$ + "s";  // exceptions --> add -s
		else
			set .@result$, substr(.@str$,0,.@strlen - 2 - (.@suffix$[1] == "fe")) + "ves";
	}
	
	// ends in consonant + -y --> remove -y --> add -ies
	else if (.@suffix$[0] == "y" && !compare("aeiou",charat(.@suffix$[1],0))) {
		set .@result$, delchar(.@str$,.@strlen - 1) + "ies";
	}

	// ends in -o --> exceptions --> add -es
	else if (.@suffix$[0] == "o" &&
	         compare("buffalo|domino|echo|grotto|halo|hero|mango|mosquito|potato|tomato|tornado|torpedo|veto|volcano",.@str$)) {
		set .@result$, .@str$ + "es";
	}

	// default --> add -s
	else {
		set .@result$, .@str$ + "s";
	}

	return ((getarg(1,0)) ? strtoupper(sprintf(.@format$,.@result$)) : sprintf(.@format$,.@result$));
}
function	script	F_InsertPlural	{
	return sprintf(getarg(3,"%d %s"), getarg(0), ((getarg(0) == 1) ? getarg(1) : callfunc("F_GetPlural",getarg(1),getarg(2,0))));
}



//===== rAthena Script =======================================
//= Private MVP & Branch Room
//===== By: ==================================================
//= AnnieRuru
//===== Current Version: =====================================
//= 1.0
//===== Compatible With: =====================================
//= rAthena Project
//===== Description: =========================================
//= Allows players to rent an MVP room for personal use,
//= or for a party or guild.
//===== Additional Comments: =================================
//= 1.0 First version, edited. [Euphy]
//============================================================

prontera,148,174,5	script	Private MVP Room	100,{
	mes "[Private MVP Room]";
	mes "Please select a private MVP room.";
	if ( getvariableofnpc( .rentcost, "MVP Summoner" ) )
		mes "The cost to rent a room for "+ getvariableofnpc( .timeout, "MVP Summoner" ) +" minutes is "+ callfunc("F_InsertComma", getvariableofnpc( .rentcost, "MVP Summoner" ) ) +" zeny.";
	else
		mes "You can only use the room for only "+ getvariableofnpc( .timeout, "MVP Summoner" ) +" minutes.";
	mes " ";
	for ( .@i = 1; .@i <= 8; .@i++ )
		if ( getvariableofnpc( .renttime[.@i], "MVP Summoner" ) )
			mes "Room #"+ .@i +" = "+ .color$[ .type[.@i] ] + .whoinuse$[.@i] +"^000000";
	next;
	.@room = select(
		"MVP Room 1 ["+ getmapusers("06guild_01") +"]",
		"MVP Room 2 ["+ getmapusers("06guild_02") +"]",
		"MVP Room 3 ["+ getmapusers("06guild_03") +"]",
		"MVP Room 4 ["+ getmapusers("06guild_04") +"]",
		"MVP Room 5 ["+ getmapusers("06guild_05") +"]",
		"MVP Room 6 ["+ getmapusers("06guild_06") +"]",
		"MVP Room 7 ["+ getmapusers("06guild_07") +"]",
		"MVP Room 8 ["+ getmapusers("06guild_08") +"]");
	if ( getvariableofnpc( .renttime[.@room], "MVP Summoner" ) ) {
		if ( .inuseid[.@room] == getcharid( .type[.@room] ) ) {
			warp "06guild_0"+ .@room, 0,0;
			close;
		} else {
			mes "[Private MVP Room]";
			mes "This room is reserved for ";
			mes .color$[ .type[.@room] ] + .whoinuse$[.@room] +"^000000.";
			mes "Please select another.";
			close;
		}
	}
	mes "[Private MVP Room]";
	mes "Reserve this room for...";
	next;
	set .@type, select( "For my party members", "For my guild members", "For personal account use" );
	if ( !getcharid(.@type) ) {
		mes "[Private MVP Room]";
		mes "You do not own a "+( ( .@type == 1 )? "Party" : "Guild" )+".";
		close;
	}
	else if ( Zeny < getvariableofnpc( .rentcost, "MVP Summoner" ) ) {
		mes "You don't have enough zeny to rent a room.";
		close;
	}
	else if ( getvariableofnpc( .renttime[.@room], "MVP Summoner" ) ) {
		mes "[Private MVP Room]";
		mes "I'm sorry, somebody else has already registered this room faster than you.";
		close;
	}
	for ( .@i = 1; .@i <= 8; .@i++ ) {
		if ( ( getvariableofnpc( .renttime[.@i], "MVP Summoner" ) ) && .@type == .type[.@i] && getcharid(.@type) == .inuseid[.@i] ) {
			mes "[Private MVP Room]";
			mes "You already rented Room#"+ .@i +". Use that room instead.";
			close;
		}
	}
	set .type[.@room], .@type;
	set .inuseid[.@room], getcharid(.@type);
	set .whoinuse$[.@room], strcharinfo( ( .@type == 3 )? 0 : .@type );
	Zeny -= getvariableofnpc( .rentcost, "MVP Summoner" );
	warp "06guild_0"+ .@room, 0,0;
	killmonsterall "06guild_0"+ .@room;
	donpcevent "MVP Summoner#"+ .@room +"::OnEnterMap";
	close;
OnInit:
	.color$[1] =  "^EE8800"; // party color
	.color$[2] =  "^70CC11"; // guild color
	.color$[3] =  "^0000FF"; // account color
	end;
}

-	script	MVP Summoner	-1,{
	mes "[MVP Summoner]";
	mes "Time left: " + callfunc( "Time2Str", .renttime[ atoi( strnpcinfo(2) ) ] + .timeout * 60 );
	mes "Hi, what can I do for you?";
	next;
	switch ( select(.menu$) ) {
	case 1:
		mes "[MVP Summoner]";
		if ( mobcount( "this", strnpcinfo(3)+"::OnMobDead" ) ) {
			mes "I cannot offer heal service when there are monsters around.";
			close;
		}
		sc_end SC_STONE;
		sc_end SC_SLOWDOWN;
		sc_end SC_FREEZE;
		sc_end SC_SLEEP;
		sc_end SC_CURSE;
		sc_end SC_SILENCE;
		sc_end SC_CONFUSION;
		sc_end SC_BLIND;
		sc_end SC_BLEEDING;
		sc_end SC_DECREASEAGI;
		sc_end SC_POISON;
		sc_end SC_HALLUCINATION;
		sc_end SC_STRIPWEAPON;
		sc_end SC_STRIPARMOR;
		sc_end SC_STRIPHELM;
		sc_end SC_STRIPSHIELD;
		sc_end SC_CHANGEUNDEAD;
		sc_end SC_ORCISH;
		sc_end SC_BERSERK;
		sc_end SC_SKE;
		sc_end SC_SWOO;
		sc_end SC_SKA;
		percentheal 100,100;
		specialeffect2 EF_HEAL;
		mes "You are completely healed.";
		close;
	case 2:
		if ( mobcount( "this", strnpcinfo(3)+"::OnMobDead" ) ) {
			mes "[MVP Summoner]";
			mes "I cannot summon another MVP when there are monsters around.";
			close;
		} else if ( .mvpcost ) {
			mes "[MVP Summoner]";
			mes "The cost to summon an MVP is "+ callfunc( "F_InsertComma", .mvpcost ) +" zeny.";
			next;
			set .@menu, select(.mvpid_menu$) -1;
			mes "[MVP Summoner]";
			if ( Zeny < .mvpcost ) {
				mes "You don't have enough zeny to summon an MVP.";
				close;
			}
		} else {
			set .@menu, select(.mvpid_menu$) -1;
			mes "[MVP Summoner]";
		}
		mes "Please get ready.";
		close2;
		if ( Zeny < .mvpcost ) end;
		Zeny -= .mvpcost;
		monster "this", 0, 0, "--ja--", .mvpid[.@menu], 1, strnpcinfo(3)+"::OnMobDead";
		end;
	case 3:
		if ( mobcount( "this", strnpcinfo(3)+"::OnMobDead" ) ) {
			mes "[MVP Summoner]";
			mes "I cannot summon another mini-boss when there are monsters around.";
			close;
		} else if ( .bosscost ) {
			mes "[MVP Summoner]";
			mes "The cost to summon a mini-boss is "+ callfunc( "F_InsertComma", .bosscost ) +" zeny.";
			next;
			set .@menu, select(.bossid_menu$) -1;
			mes "[MVP Summoner]";
			if ( Zeny < .bosscost ) {
				mes "You doesn't have enough zeny to summon a mini-boss.";
				close;
			}
		} else {
			set .@menu, select(.bossid_menu$) -1;
			mes "[MVP Summoner]";
		}
		mes "Please get ready.";
		close2;
		if ( Zeny < .bosscost ) end;
		Zeny -= .bosscost;
		monster "this", 0, 0, "--ja--", .bossid[.@menu], 1, strnpcinfo(3)+"::OnMobDead";
		end;
	case 4:
		if ( mobcount( "this", strnpcinfo(3)+"::OnMobDead" ) > 0 ) {
			mes "[MVP Summoner]";
			mes "I cannot offer this service when there are monsters around.";
			close;
		}
		close2;
		callshop "MVP room#branch", 1;
		end;
	case 5:
		mes "[MVP Summoner]";
		mes "Are you sure you want to leave this room?";
		next;
		if ( select( "Yes:No") == 1 )
			warp .respawnmap$, .respawnx, .respawny;
		close;
	case 6:
		mes "[MVP Summoner]";
		if ( getmapusers( strcharinfo(3) ) > 1 ) {
			mes "There are still some players in this room. Make sure you are the last member in this room to use this option.";
			close;
		}
		mes "Are you sure you want to give up this room?";
		if ( .rentcost )
			mes "You will need to pay again to enter this room.";
		next;
		if ( select( "Yes", "No" ) == 2 ) close;
		awake strnpcinfo(0);
		end;
	}
	close;

OnMobDead:
	end;

OnEnterMap:
	.@id = atoi( strnpcinfo(2) );
	.renttime[.@id] = gettimetick(2);
	sleep .timeout * 60000;
	mapwarp strnpcinfo(4), .respawnmap$, .respawnx, .respawny;
	.renttime[.@id] = 0;
	killmonsterall strnpcinfo(4);
	end;

OnInit:
	if ( !getstrlen( strnpcinfo(2) ) ) {

//	Config ---------------------------------------------------------------------------------------

	// Room rental time, in minutes.
	// When time runs out, all players inside the room will be kicked out.
	// Do NOT set this to zero!
	set .timeout, 60;

	set .rentcost, 100000;	// Zeny cost for renting a room (0 = free)
	set .mvpcost, 100000;	// Zeny cost to summon an MVP (0 = free)
	set .bosscost, 50000;	// Zeny cost to summon a boss monster (0 = free)

	//	Options setting inside MVP room
	set .@menu[1], 1;	// Turn Heal option On/Off
	set .@menu[2], 1;	// Turn MVP Summoning On/Off
	set .@menu[3], 1;	// Turn Mini boss Summoning On/Off
	set .@menu[4], 0;	// Sell items (branches) On/Off (see shop below, before the mapflags)

	// Respawn point when players leave the room
	set .respawnmap$, "prontera";
	set .respawnx, 150;
	set .respawny, 174;

	setarray .mvpid[0],
		1511,//	Amon Ra
		1647,// Assassin Cross Eremes
		1785,//	Atroce
		1630,//	Bacsojin
		1039,//	Baphomet
		1874,//	Beelzebub
		1272,//	Dark Lord
		1719,//	Datale
		1046,//	Doppelgangger
		1389,//	Dracula
		1112,//	Drake
		1115,//	Eddga
		1418,//	Evil Snake Lord
		1871,//	Fallen Bishop
		1252,//	Garm
		1768,//	Gloom Under Night
		1086,//	Golden Thief Bug
		1885,//	Gopinich
		1649,// High Priest Magaleta
		1651,// High Wizard Katrinn
		1832,//	Ifrit
		1492,//	Incantation Samurai
		1734,//	Kiel D-01
		1251,//	Knight of Windstorm
		1779,//	Ktullanux
		1688,//	Lady Tanee
		1646,// Lord Knight Seyren
		1373,//	Lord of Death
		1147,//	Maya
		1059,//	Mistress
		1150,//	Moonlight Flower
		1087,//	Orc Hero
		1190,//	Orc Lord
		1038,//	Osiris
		1157,//	Pharaoh
		1159,//	Phreeoni
		1623,//	RSX 0806
		1650,// Sniper Shecil
		1583,//	Tao Gunka
		1708,//	Thanatos
		1312,//	Turtle General
		1751,//	Valkyrie Randgris
		1685,// Vesper
		1648,// Whitesmith Harword
		1917,// Wounded Morroc
		1658;//	Ygnizem

	setarray .bossid[0],
		1096,// Angeling
		1388,// Archangeling
		1795,// Bloody Knight
		1830,// Bow Guardian
		1839,// Byorgue
		1309,// Cat O' Nine Tail
		1283,// Chimera
		1302,// Dark Illusion
		1198,// Dark Priest
		1582,// Deviling
		1091,// Dragon Fly
		1093,// Eclipse
		1205,// Executioner
		1783,// Galion
		1592,// Gangster
		1120,// Ghostring
		1259,// Gryphon
		1720,// Hydro
		1090,// Mastering
		1289,// Maya Purple
		1262,// Mutant Dragon
		1203,// Mysteltainn
		1870,// Necromancer
		1295,// Owl Baron
		1829,// Sword Guardian
		1204,// Tirfing
		1089,// Toad
		1092,// Vagabond Wolf
		1765;// Valkyrie

//	Config Ends ------------------------------------------------------------------------

		if ( !.timeout ) set .timeout, 60;
		.menu$ = ( .@menu[1] ? "Heal" : "" ) +":" ;
		.menu$ = .menu$ + ( .@menu[2] ? "Summon MVP" : "" ) +":";
		.menu$ = .menu$ + ( .@menu[3] ? "Summon Mini-boss" : "" ) +":";
		.menu$ = .menu$ + ( .@menu[4] ? "Buy branches" : "" ) +":";
		.menu$ = .menu$ + "Leave this room:Give up this room";
		if ( .@menu[2] ) {
			.@size = getarraysize( .mvpid );
			for ( .@i = 0; .@i < .@size; .@i++ )
				.mvpid_menu$ = .mvpid_menu$ + getmonsterinfo( .mvpid[.@i], MOB_NAME ) +":";
		}
		if ( .@menu[3] ) {
			.@size = getarraysize( .bossid );
			for ( .@i = 0; .@i < .@size; .@i++ )
				.bossid_menu$ = .bossid_menu$ + getmonsterinfo( .bossid[.@i], MOB_NAME ) +":";
		}
	}
	else {
		mapannounce strnpcinfo(4), "An administrator has refreshed the server. Please re-register this room.", bc_map;
		mapwarp strnpcinfo(4), .respawnmap$, .respawnx, .respawny;
	}
	end;
}

-	shop	MVP room#branch	-1,604:100000,12103:1000000

06guild_01,49,49,4	duplicate(MVP Summoner)	MVP Summoner#1	116
06guild_02,49,49,4	duplicate(MVP Summoner)	MVP Summoner#2	116
06guild_03,49,49,4	duplicate(MVP Summoner)	MVP Summoner#3	116
06guild_04,49,49,4	duplicate(MVP Summoner)	MVP Summoner#4	116
06guild_05,49,49,4	duplicate(MVP Summoner)	MVP Summoner#5	116
06guild_06,49,49,4	duplicate(MVP Summoner)	MVP Summoner#6	116
06guild_07,49,49,4	duplicate(MVP Summoner)	MVP Summoner#7	116
06guild_08,49,49,4	duplicate(MVP Summoner)	MVP Summoner#8	116

06guild_01	mapflag	nowarpto
06guild_02	mapflag	nowarpto
06guild_03	mapflag	nowarpto
06guild_04	mapflag	nowarpto
06guild_05	mapflag	nowarpto
06guild_06	mapflag	nowarpto
06guild_07	mapflag	nowarpto
06guild_08	mapflag	nowarpto
06guild_01	mapflag	nomemo
06guild_02	mapflag	nomemo
06guild_03	mapflag	nomemo
06guild_04	mapflag	nomemo
06guild_05	mapflag	nomemo
06guild_06	mapflag	nomemo
06guild_07	mapflag	nomemo
06guild_08	mapflag	nomemo
06guild_01	mapflag	noteleport
06guild_02	mapflag	noteleport
06guild_03	mapflag	noteleport
06guild_04	mapflag	noteleport
06guild_05	mapflag	noteleport
06guild_06	mapflag	noteleport
06guild_07	mapflag	noteleport
06guild_08	mapflag	noteleport
06guild_01	mapflag	nosave	SavePoint
06guild_02	mapflag	nosave	SavePoint
06guild_03	mapflag	nosave	SavePoint
06guild_04	mapflag	nosave	SavePoint
06guild_05	mapflag	nosave	SavePoint
06guild_06	mapflag	nosave	SavePoint
06guild_07	mapflag	nosave	SavePoint
06guild_08	mapflag	nosave	SavePoint
06guild_01	mapflag	nopenalty
06guild_02	mapflag	nopenalty
06guild_03	mapflag	nopenalty
06guild_04	mapflag	nopenalty
06guild_05	mapflag	nopenalty
06guild_06	mapflag	nopenalty
06guild_07	mapflag	nopenalty
06guild_08	mapflag	nopenalty
06guild_01	mapflag	monster_noteleport
06guild_02	mapflag	monster_noteleport
06guild_03	mapflag	monster_noteleport
06guild_04	mapflag	monster_noteleport
06guild_05	mapflag	monster_noteleport
06guild_06	mapflag	monster_noteleport
06guild_07	mapflag	monster_noteleport
06guild_08	mapflag	monster_noteleport

 

  • 0
Posted

Geeezz ... rathena actually broke 2 of my scripts

On 1/8/2019 at 6:07 PM, AnnieRuru said:

yeah, confirm, but its rAthena's fault. This simple script cause map-server crash


-    script    fsfdsfsd    -1,{
OnInit:
    getmapxy .@map$, .@x, .@y, UNITTYPE_NPC;
    end;
}

1.5 https://drive.google.com/file/d/1PFBD6areDW4j4viH2rYViA4cAeXWWOMz/view
fix a server crash bug by rathena

@xyxzero

@Sky Raker

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...