Jump to content

AinsLord

Members
  • Posts

    794
  • Joined

  • Last visited

  • Days Won

    3

Posts posted by AinsLord

  1. 8 hours ago, Racaae said:

    The NPC is in the empty space between floors. You can use @jump 53 8 to get close to it.
    image.thumb.png.6f85c5b7ee62f858abb89d849c30435c.png

    -	script	ShowEndlessTowerPoints	-1,{
    OnAtcommand:
    	.@size = getarraysize($@difficulty_mode$);
    	if (!.@size) {
    		dispbottom "Please talk to the Tower Protection Stone first.";
    		end;
    	}
    	dispbottom "====================";
    	dispbottom "ENDLESS TOWER POINTS";
    	for (.@i = 1; .@i < .@size; .@i++)
    		dispbottom $@difficulty_mode$[.@i] + ": " + getd("#" + $@var_names$[.@i]);
    	dispbottom "====================";
    	end;
    
    OnInit:
    	bindatcmd "ETpoints",strnpcinfo(3)+"::OnAtcommand";
    	end;
    }

     

    Thanks sir appreciated

    how about this error i've been checking this one on how to fix it hehehe still no luck

    using the dust item to teleport from floors

    image.png.e6903673daf147999165a6f6cc21da3a.png

    also the access in floor to the 101F

    EDIT: @Racaae seems no NPC on my end

    image.png.4a0bac778effa97871d33664b8a806be.png

     

  2. Hi @Louis T Steinhil can I ask if you can add a command how many E_tower points you have, so you dont need to bother going back to the NPC

    also I tried to finish the instance how ever no points acquired no errors in console, also I cant enter back to fight naugth seiger is that normal on your script

     

    Thank you!

    Additional : Also no announcement upon finishing the dungeon

    using the torch to jump in some floors have this error in console

    image.png.4ee424753ac10bfeebd0514a9090b1dc.png

     

    where can I find this NPC tried to warp on it but no NPC shows

    2@tower,71,1,0	script	#Manager Mode2	406,{
    	callfunc "F_GM_NPC";
    	mes "Please enter the password.";
    	set .@i, callfunc("F_GM_NPC","dmc2008",1);
    	next;
    	if (.@i == 1) {
    		mes "This NPC manages the tower from the 26st to the 50th Level.";
    		mes "Please enter the Level number to open.";
    		mes "(i.g.: 26F->26, 50F->50)";
    		input .@input,26,50;
    		next;
    		if (.@onput < 26 || .@input > 50)
    			mes "You can only enter a number from 26 to 50.";
    		else {
    			donpcevent instance_npcname(.@input+"FGate102tower")+"::OnEnable";
    			mes "*** Level "+ .@input + " is now being opened. ***";
    		}
    	}
    	close;
    }

     

  3. Anyone can modify this script of @Euphy and @AnnieRuru

    //===== 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,166,206,4	script	Private MVP Room	71,{
    	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, 50,46;
    			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, 50,46;
    	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;
    	setarray .mobsx[0],8,50,91,50;
    	setarray .mobsy[0],50,91,50,8;
    	set .mobsxy, rand(0,3);
    	switch (select(.menu$)) {
    	case 1:
    		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", .mobsx[.mobsxy], .mobsy[.mobsxy], "--ja--", .mvpid[.@menu], 1, strnpcinfo(3) + "::OnMobDead";
    		end;
    	case 2:
    		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", .mobsx[.mobsxy], .mobsy[.mobsxy], "--ja--", .bossid[.@menu], 1, strnpcinfo(3) + "::OnMobDead";
    		end;
    	case 3:
    		mes "[MVP Summoner]";
    		mes "Great Demon Baphomet could enter invincible state, meaning you can't hurt them.";
    		mes "Do you want to remove it?";
    		next;
    			if (select("Yes:No") == 1) {
    			if (Zeny < .removecost) {
    				mes "[MVP Summoner]";
    				mes "You doesn't have enough zeny to remove Great Demon Baphomet's invincible state.";
    				mes "Good Luck!";
    				close;
    			}
    			Zeny -= .removecost;
    			getmapxy .@map$, .@x, .@y;
    			areamobuseskill .@map$,50,50,50,1929,"NPC_INVINCIBLEOFF",1,0,0,ET_HELP,0;
    			mes "[MVP Summoner]";
    			mes "Done!";
    			mes "Good luck on defeating them!";
    			close;
    		}
    		mes "[MVP Summoner]";
    		mes "Okay then";
    		close;
    	case 4:
    		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 5:
    		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, 1000000;		// Zeny cost for renting a room (0 = free)
    	set .mvpcost, 10000000;		// Zeny cost to summon an MVP (0 = free)
    	set .bosscost, 1000000;		// Zeny cost to summon a Mini-boss monster (0 = free)
    	set .removecost, 100000;	// Zeny cost to remove monster's invincible state (0 = free)
    
    	//	Options setting inside MVP room
    	set .@menu[1], 1;	// Turn MVP Summoning On/Off
    	set .@menu[2], 1;	// Turn Mini boss Summoning On/Off
    
    	// Respawn point when players leave the room
    	set .respawnmap$, "prontera";
    	set .respawnx, 156;
    	set .respawny, 188;
    
    	setarray .mvpid[0],
    		1511,//	Amon Ra
    		1647,// Assassin Cross Eremes
    		1785,//	Atroce
    		1630,//	Bacsojin
    		1039,//	Baphomet
    		1399,// Baphomet
    		1874,//	Beelzebub
    		2068,// Boitata
    		1272,//	Dark Lord
    		1719,//	Datale
    		1046,//	Doppelgangger
    		1389,//	Dracula
    		1112,//	Drake
    		1115,//	Eddga
    		1957,//	Entweihen Crothen
    		1418,//	Evil Snake Lord
    		1871,//	Fallen Bishop
    		1252,//	Garm
    		1768,//	Gloom Under Night
    		1086,//	Golden Thief Bug
    		1885,//	Gopinich
    		1929,// Great Demon Baphomet
    		1990,//	Hardrock Mammoth
    		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
    		1956,//	Naght Sieger
    		2022,//	Nidhoggr's Shadow 
    		1087,//	Orc Hero
    		1190,//	Orc Lord
    		1038,//	Osiris
    		1157,//	Pharaoh
    		1159,//	Phreeoni
    		1623,//	RSX 0806
    		1650,// Sniper Shecil
    		1991,//	Tendrilion
    		1583,//	Tao Gunka
    		1708,//	Thanatos
    		1312,//	Turtle General
    		1751,//	Valkyrie Randgris
    		1685,// Vesper
    		1648,// Whitesmith Harword
    		1917,// Wounded Morocc
    		1658;//	Ygnizem
    
    	setarray .bossid[0],
    		1096,// Angeling
    		1388,// Archangeling
    		1795,// Bloody Knight
    		1830,// Bow Guardian
    		1839,// Byorgue
    		1307,// Cat O' Nine Tail
    		1283,// Chimera
    		1302,// Dark Illusion
    		1582,// Deviling
    		1091,// Dragon Fly
    		1093,// Eclipse
    		1205,// Executioner
    		1783,// Galion
    		1592,// Gangster
    		1681,// Gemini
    		1120,// Ghostring
    		1259,// Gryphon
    		1720,// Hydro
    		1918,// Incarnation of Morroc
    		1919,// Incarnation of Morroc
    		1920,// Incarnation of Morroc
    		1921,// Incarnation of Morroc
    		1833,// Kasa
    		1090,// Mastering
    		1289,// Maya Purple
    		1262,// Mutant Dragon
    		1203,// Mysteltainn
    		1870,// Necromancer
    		1700,// Observation
    		1295,// Owl Baron
    		1320,// Owl Duke
    		1702,// Retribution
    		1831,// Salamander
    		1701,// Shelter
    		1754,// Skeggiold (Brown)
    		1755,// Skeggiold (Blue)
    		1703,// Solace
    		1829,// Sword Guardian
    		1705,// Thanatos Despero
    		1707,// Thanatos Dolor
    		1706,// Thanatos Maero
    		1704,// Thanatos Odium
    		1204,// Tirfing
    		1089,// Toad
    		1092,// Vagabond Wolf
    		1765;// Valkyrie
    
    //	Config Ends ------------------------------------------------------------------------
    
    		if (!.timeout) set .timeout, 60;
    		.menu$ = .menu$ + (.@menu[1] ? "Summon MVP" : "") + ":";
    		.menu$ = .menu$ + (.@menu[2] ? "Summon Mini-boss" : "") + ":";
    		.menu$ = .menu$ + "Remove Invincible State:Leave this room:Give up this room";
    		if (.@menu[1]) {
    			.@size = getarraysize(.mvpid);
    			for (.@i = 0; .@i < .@size; .@i++)
    				.mvpid_menu$ = .mvpid_menu$ + getmonsterinfo(.mvpid[.@i], MOB_NAME) + ":";
    		}
    		if (.@menu[2]) {
    			.@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:20000,12103:2000000
    
    06guild_01,50,50,4	duplicate(MVP Summoner)	MVP Summoner#1	116
    06guild_02,50,50,4	duplicate(MVP Summoner)	MVP Summoner#2	116
    06guild_03,50,50,4	duplicate(MVP Summoner)	MVP Summoner#3	116
    06guild_04,50,50,4	duplicate(MVP Summoner)	MVP Summoner#4	116
    06guild_05,50,50,4	duplicate(MVP Summoner)	MVP Summoner#5	116
    06guild_06,50,50,4	duplicate(MVP Summoner)	MVP Summoner#6	116
    06guild_07,50,50,4	duplicate(MVP Summoner)	MVP Summoner#7	116
    06guild_08,50,50,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

    I tried this by @AnnieRuru

    //	....... 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, 30;
    	// if the room left empty for # minutes, will be treated as give up the room. Do Not set this as 0
    	set .nobodygiveup, 2;
    
    	// 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, 1000000; // 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, 1;
    
    	// 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], 0; // 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, 150;
    	set .respawny, 174;
    
    	// 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, 100000; // 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
    	//	1980,// Kubkin ( I think this mvp is still new )
    		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, 10000; // 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, 12109; // item id use for summon any Group 3 monster - 12109 - Poring box
    	set .group3itemamount, 1; // amount of items to summon a Group 3 monster
    	set .group3cost, 0; // if no item is specify, zeny cost to summon a Group 3 monster
    	set .group3limit, -5; // 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	100,{
    	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

    got this errors

    image.png.a441add2ef2a9f13de771c2468034130.png

    anyone can help

    Thank you!

  4. 6 hours ago, b1rbert said:

    Dont know which Date of 2022 you are using but 04.06.2022 (day,month,year) shows numbers above that.
    image.png.63407c67700d4bfcb1eb7c0272472e87.pngimage is with 3000 str + EDP autoattack on 04.06.2022 client

    image.png.9520c51247fe41642bac67cbc331d24b.pngthere is also expand damage in the settings but this doesnt really do much for your problem.

    yea ive seen that thank you for response im just used to 2018 and 2019 clients

  5. im using 2022 client patched in WARP

    image.png.14a3609ef9adfa5a95532c57deb7895f.png

    how can i increase this numbers?

    I tried to check some patch in WARP for damage extend like on Nemo

    I cant find one

    Thank you! ❤️

  6. Update on this script

    so I fixed it to make it work on the latest rA git

    // By pass FCP when using single strip skills by 15%(requires Glistening Coat).
    	if ( sd && tsc && sd->sc.getSCE(SC_SPIRIT) && sd->sc.getSCE(SC_SPIRIT)->val2 == SL_ROGUE && rand()%100 < 100
    	&&
    	( skill_id == RG_STRIPWEAPON && tsc->getSCE(SC_CP_WEAPON) ||
                	skill_id == RG_STRIPSHIELD && tsc->getSCE(SC_CP_SHIELD) ||
                	skill_id == RG_STRIPARMOR && tsc->getSCE(SC_CP_ARMOR) ||
                	skill_id == RG_STRIPHELM && tsc->getSCE(SC_CP_HELM) ) ) {
    	int item_id = 7139; // Glistening Coat
    	int ii;
    	ARR_FIND( 0, MAX_INVENTORY, ii, sd->inventory.u.items_inventory[ii].nameid == item_id );
    	if ( ii < MAX_INVENTORY ) {
    		pc_delitem( sd, ii, 1, 0, 0, LOG_TYPE_CONSUME);
    		switch ( skill_id ) {
    			case RG_STRIPWEAPON:
    				status_change_end( bl, SC_CP_WEAPON, INVALID_TIMER );
    				sc_start(src,bl,SC_STRIPWEAPON,100,skill_lv,skill_get_time(skill_id,skill_lv));
    				break;
    			case RG_STRIPSHIELD:
    				status_change_end( bl, SC_CP_SHIELD, INVALID_TIMER );
    				sc_start(src,bl,SC_STRIPSHIELD,100,skill_lv,skill_get_time(skill_id,skill_lv));
    				break;
    			case RG_STRIPARMOR:
    				status_change_end( bl, SC_CP_ARMOR, INVALID_TIMER );
    				sc_start(src,bl,SC_STRIPARMOR,100,skill_lv,skill_get_time(skill_id,skill_lv));
    				break;
    			case RG_STRIPHELM:
    				status_change_end( bl, SC_CP_HELM, INVALID_TIMER );
    				sc_start(src,bl,SC_STRIPHELM,100,skill_lv,skill_get_time(skill_id,skill_lv));
    				break;			}
    			clif_skill_nodamage( src, *bl, skill_id, skill_lv, i = 0 );
    				break;
    				}
    			}

    but upon compiling it on my offline compiler I got this warning

    image.png.64cea0a07bc3f92e583306d145c1d60e.png

    if anyone knows how to fix this kindly send help

    it works well with my VPS no errors at all just this warnings on my offline compiler

     

    NOTE: fixed all the warnings code updated

  7. 8 hours ago, Racaae said:

    The sql table is working fine for me. Does any error appear on the server console?

     

    Stat Points Doesnt clear out after rebirth only the allocated stats. Changed.

     In what line I can edit the reward for Grand Reset, all I can see was the reward for the Reset after they reach 150 reset. It's the same reward.

    Is it possible that after grand reset all of the "STAT POINTS" earned during Rebirth can be wiped and start as new rebirth. Added config for this.

    GM selection to clear out rankings for Rebirths and Grand Rebirths. Added

    character log in SQL should be per character not per account ( Ex: char1 have 5 rebirth char2 has 3 when you check in DB char1 has 8 Rebirths already ) tried this but still same Added config for this. Drop the old table.

    //===== rAthena Script =======================================
    //= Rebirth System
    //===== Description: =========================================
    //- Go back to Level 1 to gain bonus status points
    //===== Changelogs: ==========================================
    //= 1.0 First version. [Capuche]
    //= 1.6 Added Grand Rebirth. [Racaae]
    //============================================================
    
    /*
    CREATE TABLE IF NOT EXISTS `rebirth_system` (
      `player_id` int(11) unsigned NOT NULL default 0,
      `name` varchar(255) NOT NULL DEFAULT 'NULL',
      `num_rebirth` int(11) unsigned NOT NULL default 0,
      `num_grand` int(11) unsigned NOT NULL default 0,
      `last_ip` varchar(100) NOT NULL default '',
      PRIMARY KEY  (`player_id`)
    ) ENGINE=MyISAM;
    */
    
    prontera,141,179,5	script	Rebirth System	531,{
    function checkItem;			// check if player have all item required
    function colorItemrequired;	// color the text. Red : not enough item, green otherwise
    function deleteItem;		// delete all items required
    function displayItemneed;	// display all items need at start
    function getItemReward;		// give the items reward
    //function weightreq;			// check if your current weight is highter than weight high novice
    
    	if (.grand_reset_max > -1 && num_grand_rebirth >= .grand_reset_max) {
    		mes "You can only grand rebirth x"+ .grand_reset_max +".";
    		emotion e_gasp;
    	}
    	else {
    		.@eac = eaclass();
    		if( BaseLevel < 255 || JobLevel < 120 || ( !( .@eac&EAJL_2 ) || !Upper ) && ( Class != Job_Ninja && Class != Job_Gunslinger && Class != Job_Soul_Linker && Class != Job_Star_Gladiator) )
    			mes "You must be max level/max job level to rebirth.";
    		else {
    			if ( num_rebirth == .reset_max ) {
    				mes "You have reached the maximum rebirth.";
    				emotion e_gasp;
    				.@s2$ = "^777777~ Grand Rebirth";
    			}
    			else
    				.@s1$ = "^777777~ Rebirth";
    			mes "Items need :";
    			displayItemneed();
    		}
    	}
    	next;
    	switch( select( .@s1$, .@s2$, "^777777~ Informations", (.rebirth_ranking?"~ Rebirth ranking":""), (.grand_ranking?"~ Grand Rebirth ranking":""), "~ Good bye^000000", (getgroupid() < 90 ?"":"^FF0000[GM]^000000 Reset Rebirth Rankings") )) {
    		case 1:
    			checkItem();
    			deleteItem();
    			num_rebirth += 1;
    			.@account_id = getcharid(3);
    			if (.ranking_type)
    				.@player_id = .@account_id;
    			else
    				.@player_id = getcharid(0);
    			query_sql "insert into `rebirth_system` ( `player_id`, `name`, `num_rebirth`, `last_ip` ) select "+ .@player_id +", '"+ escape_sql( strcharinfo(0) ) +"', '"+ num_rebirth +"',`login`.`last_ip` from `login` where `login`.`account_id` = "+ .@account_id +" on duplicate key update `rebirth_system`.`num_rebirth` = `rebirth_system`.`num_rebirth` +1";
    			announce "[ Rebirth system ] : "+ strcharinfo(0) +" Successfully Rebirth!", 0;
    			break;
    		case 2:
    			checkItem();
    			deleteItem();
    			getItemReward();
    			num_grand_rebirth += 1;
    			num_rebirth = 0;
    			.@account_id = getcharid(3);
    			if (.ranking_type)
    				.@player_id = .@account_id;
    			else
    				.@player_id = getcharid(0);
    			query_sql "insert into `rebirth_system` ( `player_id`, `name`, `num_grand`, `last_ip` ) select "+ .@player_id  + ", '" + escape_sql( strcharinfo(0) ) +"', '"+ num_grand_rebirth +"',`login`.`last_ip` from `login` where `login`.`account_id` = "+ .@account_id +" on duplicate key update `rebirth_system`.`num_grand` = `rebirth_system`.`num_grand` +1, `rebirth_system`.`num_rebirth` = 0";
    			announce "[ Rebirth system ] : "+ strcharinfo(0) +" Successfully Grand Rebirth!", 0;
    			specialeffect2 EF_GLOW4;
    			break;
    		case 3:
    			do {
    				switch(select("My status", "Rebirth", (.grand_reset_max!=0?"Grand Rebirth":""), "Cancel")) {
    				case 1:
    					if (num_grand_rebirth)
    						mes "You performed Grand Rebirth ^ff0000x"+ num_grand_rebirth +"^000000.";
    					if (num_rebirth)
    						mes "You already rebirth ^ff0000x"+ num_rebirth +"^000000.";
    					else if (num_grand_rebirth == 0)
    						mes "You did not rebirth.";
    					break;
    				case 2:
    					mes "Rebirthing can be done when one reaches the pinnacle, that is, maximum base and job level.";
    					mes "It reverts your base level back to 1 and gives you ^ff0000"+ .num_status +" bonus status points^000000.";
    					next;
    					mes "Items required each time:";
    					displayItemneed();
    					mes "After ^ff0000"+ .change_reward +" rebirths^000000, more items are necessary.";
    					next;
    					if (.reset_job)
    						mes "You will be back as a simple novice.";
    					else
    						mes "You will maintain your job class, job level and skills.";
    					mes "One can only rebirth ^ff0000x"+ .reset_max +"^000000.";
    					if (.grand_reset_max != 0)
    						mes "When you reach the maximum you can perform the ^0000FFGrand Rebirth^000000.";
    					break;
    				case 3:
    					mes "After rebirthing "+ .reset_max +" times you can merge all past rebirth into a powerful ^0000FFGrand Rebirth^000000 upon reaching max level!";
    					next;
    					mes "The process will reward you with item:";
    					for (.@i = 0 ; .@i < .size_reward; .@i += 2 )
    						mes .reward[ .@i+1 ] + " " + mesitemlink(.reward[.@i]);
    					mes "Also all bonus status points gained are forfeit since the rebirth count goes back to zero.";
    					next;
    					mes "Then you can repeat the process of Rebirths and ^0000FFGrand Rebirth^000000 for even more glory.";
    					if (.grand_reset_max > 0)
    						mes "^0000FFGrand Rebirth^000000 can be perfomed " + .grand_reset_max + " times.";
    					else
    						mes "There is no limit on how many ^0000FFGrand Rebirth^000000 can be perfomed.";
    					break;
    				case 4:
    					mes F_Bye;
    					close;
    				}
    				mes "What do you want to know about?";
    				next;
    			} while (true);
    		case 4:
    			mes "TOP " + .rebirth_ranking + " of rebirth";
    			mes "Name  -  Number of rebirth";
    			.@size = query_sql( "select `name`, `num_rebirth` from `rebirth_system` WHERE num_rebirth > 0 ORDER BY `num_rebirth` desc limit " + .rebirth_ranking, .@name$, .@value );
    			if( .@size ) {
    				for( .@i = 0; .@i < .@size; .@i++ )
    					mes "^777777"+ F_GetNumSuffix( .@i +1 ) +"^000000 : "+ .@name$[.@i] +" : ^FF0000"+ .@value[.@i] +"^000000";
    			}
    			else
    				mes "^0000ff* the list is empty *^000000";
    			close;
    		case 5:
    			mes "TOP " + .grand_ranking + " of grand rebirth";
    			mes "Name  -  Number of rebirth";
    			.@size = query_sql( "select `name`, `num_grand` from `rebirth_system` WHERE num_grand > 0 ORDER BY `num_grand` desc limit " + .grand_ranking, .@name$, .@value );
    			if( .@size ) {
    				for( .@i = 0; .@i < .@size; .@i++ )
    					mes "^777777"+ F_GetNumSuffix( .@i +1 ) +"^000000 : "+ .@name$[.@i] +" : ^FF0000"+ .@value[.@i] +"^000000";
    			}
    			else
    				mes "^0000ff* the list is empty *^000000";
    			close;
    		case 6:
    			mes "Bye.";
    			close;
    		case 7:
    			callsub S_GM;
    			close;
    	}
    	if (.reset_job) {
    		if ( Upper ) {	// just in case the user change the setting...
    			lastJob = roclass( .@eac&EAJ_UPPERMASK );
    			jobchange Job_Novice_High;
    		}
    		else
    			jobchange Job_Novice;
    	}
    	resetlvl 1;
    	resetstatus; // Will reset the statpoints
    	//StatusPoint = .default_statuspoints;
    	StatusPoint += .num_status * num_rebirth;
    	if (.grand_reset_points == false)
    		StatusPoint += .num_status * (num_grand_rebirth * .reset_max);
    	mes "Done!";
    	close2;
    	sleep2 10000;
    	removespecialeffect2 EF_GLOW4;
    	end;
    
    S_GM:
    	switch(select("Cancel", (.rebirth_ranking?"^FF0000Confirm Reset Rebirth Ranking!":""), (.grand_ranking?"^FF0000Confirm Reset Grand Rebirth Ranking!":""))) {
    		case 1:
    			close;
    		case 2:
    			query_sql "UPDATE rebirth_system SET num_rebirth = 0";
    			announce "[ Rebirth system ] : The Rebirth Ranking has been reset!", 0;
    			break;
    		case 3:
    			query_sql "UPDATE rebirth_system SET num_grand = 0";
    			announce "[ Rebirth system ] : The Grand Rebirth Ranking has been reset!", 0;
    			break;
    	}
    	query_sql "DELETE FROM rebirth_system WHERE num_rebirth = 0 AND num_grand = 0";
    	mes "Reset done.";
    	close;
    
    function checkItem {
    	for ( ; .@i < .size_item; .@i += 2 )
    		if ( countitem( .item_req[.@i] ) < .item_req[ .@i+1 ] + num_rebirth ) {
    			mes "You don't have enought "+ getitemname( .item_req[.@i] ) +". ^ff0000["+ countitem( .item_req[.@i] ) +"/"+ ( .item_req[ .@i+1 ] + num_rebirth ) +"]^000000";
    			close;
    		}
    	if ( num_rebirth >= .change_reward )
    		if ( .add_item_req[1] + num_rebirth - .change_reward > countitem( .add_item_req[0] ) ) {
    			mes "You don't have enought "+ getitemname( .add_item_req[0] ) +". ^ff0000["+ countitem( .add_item_req[0] ) +"/"+ ( .add_item_req[1] + num_rebirth - .change_reward ) +"]^000000";
    			close;
    		}
    	return;
    }
    
    function colorItemrequired {
    	if ( countitem( .item_req[ getarg(0) ] ) < .item_req[ getarg(0)+1 ] + num_rebirth ) return "^ff0000";
    	return "^00ff00";
    }
    
    function deleteItem {
    	for ( ; .@i < .size_item; .@i += 2 )
    		delitem .item_req[.@i], ( .item_req[ .@i+1 ] + num_rebirth );
    	if ( num_rebirth >= .change_reward )
    		delitem .add_item_req[0], ( .add_item_req[1] + num_rebirth - .change_reward );
    	return;
    }
    
    function displayItemneed {
    	for ( ; .@i < .size_item; .@i += 2 )
    		mes colorItemrequired( .@i ) +" - x"+ ( .item_req[ .@i+1 ] + num_rebirth ) +" "+ (PACKETVER>=20230302?"^i["+ .item_req[.@i] + "]":"") + getitemname( .item_req[.@i] );
    	if ( num_rebirth >= .change_reward ) {
    		if ( .add_item_req[1] + num_rebirth - .change_reward > countitem( .add_item_req[0] ) )
    			.@color$ = "^ff0000";
    		else
    			.@color$ = "^00ff00";
    		mes .@color$ +"- x"+ ( .add_item_req[1] + ( num_rebirth - .change_reward ) ) +" "+ (PACKETVER>=20230302?"^i["+ .item_req[.@i] + "]":"") + getitemname( .add_item_req[0] );
    	}
    	return;
    }
    
    function getItemReward {
    	for ( ; .@i < .size_reward; .@i += 2 )
    		getitem .reward[.@i], .reward[ .@i+1 ];
    	return;
    }
    
    function weightreq {
    	if ( Weight > 50000 ) {
    		mes "You have too much items on you. Your weight will be too high after rebirth.";
    		close;
    	}
    	return;
    }
    
    OnInit:
    	.reset_max = 10;			// how many reset max
    	.grand_reset_max = 100;		// how many grand rebirth max (-1:unlimited) (0:disable)
    	.change_reward = 6;			// after the set rebirth, change reward
    	.num_status = 10;			// + X number of status points
    	.reset_job = false;			// character will go back to Novice?
    	.rebirth_ranking = 0;		// How many tops in normal rebirth ranking? (0=disable)
    	.grand_ranking = 5;			// How many tops in grand rebirhh ranking? (0=disable)
    	.ranking_type = 0;			// 0 = ranking by character. | 1 = ranking by account.
    	.grand_reset_points = true;	// Bonus status points will be back to 0 upon Grand Rebirth?
    	.default_statuspoints = 48; // Default status points upon Lv1 in your server
    
    
    // item required <item ID>, <number>
    	setarray .item_req, 7179, 50,
    						7227, 50,
    						969, 300;
    
    // additionnal items after rebirth >> .change_reward
    // <item ID>, <number>
    	setarray .add_item_req, 7179, 100;
    
    // Grand Rebirth rewards <item ID>, <number>
    	setarray .reward, 674, 50;
    
    
    	.size_item = getarraysize( .item_req );
    	.size_reward = getarraysize( .reward );
    	query_sql("CREATE TABLE IF NOT EXISTS `rebirth_system` ("
    			+ " `player_id` int(11) unsigned NOT NULL default 0,"
    			+ " `name` varchar(255) NOT NULL DEFAULT 'NULL',"
    			+ " `num_rebirth` int(11) unsigned NOT NULL default 0,"
    			+ " `num_grand` int(11) unsigned NOT NULL default 0,"
    			+ " `last_ip` varchar(100) NOT NULL default '',"
    			+ " PRIMARY KEY  (`player_id`)"
    			+ " ) ENGINE=MyISAM;");
    	end;
    }

     

    is this normal

    image.png.e4ee53b69dcaadba53ffdbabba687525.png

    coz what happen here after clearing the rebirth system database and do some rebirth

    the rebirth counts still continue instead of clearing all characters/account rebirth/grand rebirth

    and also if possible for account base rebirth ranking once any of the characters in the account do a

    grand rebirth all of the rebirth made by other characters are also wiped or reset.

    thanks ❤️ @Racaae

  8. 7 hours ago, Racaae said:

    The sql table is working fine for me. Does any error appear on the server console?

     

    Stat Points Doesnt clear out after rebirth only the allocated stats. Changed.

     In what line I can edit the reward for Grand Reset, all I can see was the reward for the Reset after they reach 150 reset. It's the same reward.

    Is it possible that after grand reset all of the "STAT POINTS" earned during Rebirth can be wiped and start as new rebirth. Added config for this.

    GM selection to clear out rankings for Rebirths and Grand Rebirths. Added

    character log in SQL should be per character not per account ( Ex: char1 have 5 rebirth char2 has 3 when you check in DB char1 has 8 Rebirths already ) tried this but still same Added config for this. Drop the old table.

    //===== rAthena Script =======================================
    //= Rebirth System
    //===== Description: =========================================
    //- Go back to Level 1 to gain bonus status points
    //===== Changelogs: ==========================================
    //= 1.0 First version. [Capuche]
    //= 1.6 Added Grand Rebirth. [Racaae]
    //============================================================
    
    /*
    CREATE TABLE IF NOT EXISTS `rebirth_system` (
      `player_id` int(11) unsigned NOT NULL default 0,
      `name` varchar(255) NOT NULL DEFAULT 'NULL',
      `num_rebirth` int(11) unsigned NOT NULL default 0,
      `num_grand` int(11) unsigned NOT NULL default 0,
      `last_ip` varchar(100) NOT NULL default '',
      PRIMARY KEY  (`player_id`)
    ) ENGINE=MyISAM;
    */
    
    prontera,141,179,5	script	Rebirth System	531,{
    function checkItem;			// check if player have all item required
    function colorItemrequired;	// color the text. Red : not enough item, green otherwise
    function deleteItem;		// delete all items required
    function displayItemneed;	// display all items need at start
    function getItemReward;		// give the items reward
    //function weightreq;			// check if your current weight is highter than weight high novice
    
    	if (.grand_reset_max > -1 && num_grand_rebirth >= .grand_reset_max) {
    		mes "You can only grand rebirth x"+ .grand_reset_max +".";
    		emotion e_gasp;
    	}
    	else {
    		.@eac = eaclass();
    		if( BaseLevel < 255 || JobLevel < 120 || ( !( .@eac&EAJL_2 ) || !Upper ) && ( Class != Job_Ninja && Class != Job_Gunslinger && Class != Job_Soul_Linker && Class != Job_Star_Gladiator) )
    			mes "You must be max level/max job level to rebirth.";
    		else {
    			if ( num_rebirth == .reset_max ) {
    				mes "You have reached the maximum rebirth.";
    				emotion e_gasp;
    				.@s2$ = "^777777~ Grand Rebirth";
    			}
    			else
    				.@s1$ = "^777777~ Rebirth";
    			mes "Items need :";
    			displayItemneed();
    		}
    	}
    	next;
    	switch( select( .@s1$, .@s2$, "^777777~ Informations", (.rebirth_ranking?"~ Rebirth ranking":""), (.grand_ranking?"~ Grand Rebirth ranking":""), "~ Good bye^000000", (getgroupid() < 90 ?"":"^FF0000[GM]^000000 Reset Rebirth Rankings") )) {
    		case 1:
    			checkItem();
    			deleteItem();
    			num_rebirth += 1;
    			.@account_id = getcharid(3);
    			if (.ranking_type)
    				.@player_id = .@account_id;
    			else
    				.@player_id = getcharid(0);
    			query_sql "insert into `rebirth_system` ( `player_id`, `name`, `num_rebirth`, `last_ip` ) select "+ .@player_id +", '"+ escape_sql( strcharinfo(0) ) +"', '"+ num_rebirth +"',`login`.`last_ip` from `login` where `login`.`account_id` = "+ .@account_id +" on duplicate key update `rebirth_system`.`num_rebirth` = `rebirth_system`.`num_rebirth` +1";
    			announce "[ Rebirth system ] : "+ strcharinfo(0) +" Successfully Rebirth!", 0;
    			break;
    		case 2:
    			checkItem();
    			deleteItem();
    			getItemReward();
    			num_grand_rebirth += 1;
    			num_rebirth = 0;
    			.@account_id = getcharid(3);
    			if (.ranking_type)
    				.@player_id = .@account_id;
    			else
    				.@player_id = getcharid(0);
    			query_sql "insert into `rebirth_system` ( `player_id`, `name`, `num_grand`, `last_ip` ) select "+ .@player_id  + ", '" + escape_sql( strcharinfo(0) ) +"', '"+ num_grand_rebirth +"',`login`.`last_ip` from `login` where `login`.`account_id` = "+ .@account_id +" on duplicate key update `rebirth_system`.`num_grand` = `rebirth_system`.`num_grand` +1, `rebirth_system`.`num_rebirth` = 0";
    			announce "[ Rebirth system ] : "+ strcharinfo(0) +" Successfully Grand Rebirth!", 0;
    			specialeffect2 EF_GLOW4;
    			break;
    		case 3:
    			do {
    				switch(select("My status", "Rebirth", (.grand_reset_max!=0?"Grand Rebirth":""), "Cancel")) {
    				case 1:
    					if (num_grand_rebirth)
    						mes "You performed Grand Rebirth ^ff0000x"+ num_grand_rebirth +"^000000.";
    					if (num_rebirth)
    						mes "You already rebirth ^ff0000x"+ num_rebirth +"^000000.";
    					else if (num_grand_rebirth == 0)
    						mes "You did not rebirth.";
    					break;
    				case 2:
    					mes "Rebirthing can be done when one reaches the pinnacle, that is, maximum base and job level.";
    					mes "It reverts your base level back to 1 and gives you ^ff0000"+ .num_status +" bonus status points^000000.";
    					next;
    					mes "Items required each time:";
    					displayItemneed();
    					mes "After ^ff0000"+ .change_reward +" rebirths^000000, more items are necessary.";
    					next;
    					if (.reset_job)
    						mes "You will be back as a simple novice.";
    					else
    						mes "You will maintain your job class, job level and skills.";
    					mes "One can only rebirth ^ff0000x"+ .reset_max +"^000000.";
    					if (.grand_reset_max != 0)
    						mes "When you reach the maximum you can perform the ^0000FFGrand Rebirth^000000.";
    					break;
    				case 3:
    					mes "After rebirthing "+ .reset_max +" times you can merge all past rebirth into a powerful ^0000FFGrand Rebirth^000000 upon reaching max level!";
    					next;
    					mes "The process will reward you with item:";
    					for (.@i = 0 ; .@i < .size_reward; .@i += 2 )
    						mes .reward[ .@i+1 ] + " " + mesitemlink(.reward[.@i]);
    					mes "Also all bonus status points gained are forfeit since the rebirth count goes back to zero.";
    					next;
    					mes "Then you can repeat the process of Rebirths and ^0000FFGrand Rebirth^000000 for even more glory.";
    					if (.grand_reset_max > 0)
    						mes "^0000FFGrand Rebirth^000000 can be perfomed " + .grand_reset_max + " times.";
    					else
    						mes "There is no limit on how many ^0000FFGrand Rebirth^000000 can be perfomed.";
    					break;
    				case 4:
    					mes F_Bye;
    					close;
    				}
    				mes "What do you want to know about?";
    				next;
    			} while (true);
    		case 4:
    			mes "TOP " + .rebirth_ranking + " of rebirth";
    			mes "Name  -  Number of rebirth";
    			.@size = query_sql( "select `name`, `num_rebirth` from `rebirth_system` WHERE num_rebirth > 0 ORDER BY `num_rebirth` desc limit " + .rebirth_ranking, .@name$, .@value );
    			if( .@size ) {
    				for( .@i = 0; .@i < .@size; .@i++ )
    					mes "^777777"+ F_GetNumSuffix( .@i +1 ) +"^000000 : "+ .@name$[.@i] +" : ^FF0000"+ .@value[.@i] +"^000000";
    			}
    			else
    				mes "^0000ff* the list is empty *^000000";
    			close;
    		case 5:
    			mes "TOP " + .grand_ranking + " of grand rebirth";
    			mes "Name  -  Number of rebirth";
    			.@size = query_sql( "select `name`, `num_grand` from `rebirth_system` WHERE num_grand > 0 ORDER BY `num_grand` desc limit " + .grand_ranking, .@name$, .@value );
    			if( .@size ) {
    				for( .@i = 0; .@i < .@size; .@i++ )
    					mes "^777777"+ F_GetNumSuffix( .@i +1 ) +"^000000 : "+ .@name$[.@i] +" : ^FF0000"+ .@value[.@i] +"^000000";
    			}
    			else
    				mes "^0000ff* the list is empty *^000000";
    			close;
    		case 6:
    			mes "Bye.";
    			close;
    		case 7:
    			callsub S_GM;
    			close;
    	}
    	if (.reset_job) {
    		if ( Upper ) {	// just in case the user change the setting...
    			lastJob = roclass( .@eac&EAJ_UPPERMASK );
    			jobchange Job_Novice_High;
    		}
    		else
    			jobchange Job_Novice;
    	}
    	resetlvl 1;
    	resetstatus; // Will reset the statpoints
    	//StatusPoint = .default_statuspoints;
    	StatusPoint += .num_status * num_rebirth;
    	if (.grand_reset_points == false)
    		StatusPoint += .num_status * (num_grand_rebirth * .reset_max);
    	mes "Done!";
    	close2;
    	sleep2 10000;
    	removespecialeffect2 EF_GLOW4;
    	end;
    
    S_GM:
    	switch(select("Cancel", (.rebirth_ranking?"^FF0000Confirm Reset Rebirth Ranking!":""), (.grand_ranking?"^FF0000Confirm Reset Grand Rebirth Ranking!":""))) {
    		case 1:
    			close;
    		case 2:
    			query_sql "UPDATE rebirth_system SET num_rebirth = 0";
    			announce "[ Rebirth system ] : The Rebirth Ranking has been reset!", 0;
    			break;
    		case 3:
    			query_sql "UPDATE rebirth_system SET num_grand = 0";
    			announce "[ Rebirth system ] : The Grand Rebirth Ranking has been reset!", 0;
    			break;
    	}
    	query_sql "DELETE FROM rebirth_system WHERE num_rebirth = 0 AND num_grand = 0";
    	mes "Reset done.";
    	close;
    
    function checkItem {
    	for ( ; .@i < .size_item; .@i += 2 )
    		if ( countitem( .item_req[.@i] ) < .item_req[ .@i+1 ] + num_rebirth ) {
    			mes "You don't have enought "+ getitemname( .item_req[.@i] ) +". ^ff0000["+ countitem( .item_req[.@i] ) +"/"+ ( .item_req[ .@i+1 ] + num_rebirth ) +"]^000000";
    			close;
    		}
    	if ( num_rebirth >= .change_reward )
    		if ( .add_item_req[1] + num_rebirth - .change_reward > countitem( .add_item_req[0] ) ) {
    			mes "You don't have enought "+ getitemname( .add_item_req[0] ) +". ^ff0000["+ countitem( .add_item_req[0] ) +"/"+ ( .add_item_req[1] + num_rebirth - .change_reward ) +"]^000000";
    			close;
    		}
    	return;
    }
    
    function colorItemrequired {
    	if ( countitem( .item_req[ getarg(0) ] ) < .item_req[ getarg(0)+1 ] + num_rebirth ) return "^ff0000";
    	return "^00ff00";
    }
    
    function deleteItem {
    	for ( ; .@i < .size_item; .@i += 2 )
    		delitem .item_req[.@i], ( .item_req[ .@i+1 ] + num_rebirth );
    	if ( num_rebirth >= .change_reward )
    		delitem .add_item_req[0], ( .add_item_req[1] + num_rebirth - .change_reward );
    	return;
    }
    
    function displayItemneed {
    	for ( ; .@i < .size_item; .@i += 2 )
    		mes colorItemrequired( .@i ) +" - x"+ ( .item_req[ .@i+1 ] + num_rebirth ) +" "+ (PACKETVER>=20230302?"^i["+ .item_req[.@i] + "]":"") + getitemname( .item_req[.@i] );
    	if ( num_rebirth >= .change_reward ) {
    		if ( .add_item_req[1] + num_rebirth - .change_reward > countitem( .add_item_req[0] ) )
    			.@color$ = "^ff0000";
    		else
    			.@color$ = "^00ff00";
    		mes .@color$ +"- x"+ ( .add_item_req[1] + ( num_rebirth - .change_reward ) ) +" "+ (PACKETVER>=20230302?"^i["+ .item_req[.@i] + "]":"") + getitemname( .add_item_req[0] );
    	}
    	return;
    }
    
    function getItemReward {
    	for ( ; .@i < .size_reward; .@i += 2 )
    		getitem .reward[.@i], .reward[ .@i+1 ];
    	return;
    }
    
    function weightreq {
    	if ( Weight > 50000 ) {
    		mes "You have too much items on you. Your weight will be too high after rebirth.";
    		close;
    	}
    	return;
    }
    
    OnInit:
    	.reset_max = 10;			// how many reset max
    	.grand_reset_max = 100;		// how many grand rebirth max (-1:unlimited) (0:disable)
    	.change_reward = 6;			// after the set rebirth, change reward
    	.num_status = 10;			// + X number of status points
    	.reset_job = false;			// character will go back to Novice?
    	.rebirth_ranking = 0;		// How many tops in normal rebirth ranking? (0=disable)
    	.grand_ranking = 5;			// How many tops in grand rebirhh ranking? (0=disable)
    	.ranking_type = 0;			// 0 = ranking by character. | 1 = ranking by account.
    	.grand_reset_points = true;	// Bonus status points will be back to 0 upon Grand Rebirth?
    	.default_statuspoints = 48; // Default status points upon Lv1 in your server
    
    
    // item required <item ID>, <number>
    	setarray .item_req, 7179, 50,
    						7227, 50,
    						969, 300;
    
    // additionnal items after rebirth >> .change_reward
    // <item ID>, <number>
    	setarray .add_item_req, 7179, 100;
    
    // Grand Rebirth rewards <item ID>, <number>
    	setarray .reward, 674, 50;
    
    
    	.size_item = getarraysize( .item_req );
    	.size_reward = getarraysize( .reward );
    	query_sql("CREATE TABLE IF NOT EXISTS `rebirth_system` ("
    			+ " `player_id` int(11) unsigned NOT NULL default 0,"
    			+ " `name` varchar(255) NOT NULL DEFAULT 'NULL',"
    			+ " `num_rebirth` int(11) unsigned NOT NULL default 0,"
    			+ " `num_grand` int(11) unsigned NOT NULL default 0,"
    			+ " `last_ip` varchar(100) NOT NULL default '',"
    			+ " PRIMARY KEY  (`player_id`)"
    			+ " ) ENGINE=MyISAM;");
    	end;
    }

     

    Thanks a lot sir I highly appreciate this

  9. 12 hours ago, Eterunaru said:
     
        EquipScript: |
          changebase 0; = turns to novice 
        UnEquipScript: |
          changebase Class;

    use @job to see job id of the classes

    so it will be multiple items for each class ill try "IF' variable to have it in 1 item

    thanks ❤️

  10. So I made and item script that when equipped it will change your class to 3rd job

      - Id: 2301
        AegisName: Cotton_Shirt
        Name: Cotton Shirt
        Type: Armor
        Buy: 10
        Weight: 100
        Defense: 1
        Locations:
          Armor: true
        ArmorLevel: 1
        Refineable: true
        EquipScript: |
          changebase roclass(eaclass()|EAJL_2_1|EAJL_THIRD);
        UnEquipScript: |
          changebase Class;

    this item script is 3rd job

    how can I make this base class will turn Baby like baby crusader or baby royal guard

    thank you ❤️

  11. Update on this script

    So @Racaae help me out on this script

    This script is the same as requested on the 1st post but he made some modification on it

    - Includes Grand Rebirth where you received items upon doing Grand Rebirths 

    - Reset all the remaining STAT POINTS upon doing Rebirths ( except the Reward STAT POINTS )

    - Instead of going back to High Novice it will stays in the current CLASS

    - Ranking for Grand Rebirth

    Sir @Capuche is it possible on this script to have this

    - GM selection to clear out rankings for Rebirths and Grand Rebirths

    - After doing Grand Rebirths all of the STAT POINTS gained will be wiped ( ex: Max 10 rebirth = 100 stat points earned after Grand Rebirth the 100 Stat points earned will be back to 0 then if they do rebirth again they will gain 10 and so on )

    - character log in SQL should be per character not per account ( Ex: char1 have 5 rebirth char2 has 3 when you check in DB char1 has 8 Rebirths already ) tried this but still same

    If its possible can you help to modify it

    Thank you ❤️

    I already put this line

    (( getgmlevel() < 90 )?"":"^FF0000[GM]^000000 Reset Rebirth Rankings"),

    for the selection in the NPC for reset I just don't know what script should I input

    /*
    CREATE TABLE IF NOT EXISTS `rebirth_system` (
      `account_id` int(11) unsigned NOT NULL default 0,
      `name` varchar(255) NOT NULL DEFAULT 'NULL',
      `num_rebirth` int(11) unsigned NOT NULL default 0,
      `num_grand` int(11) unsigned NOT NULL default 0,
      `last_ip` varchar(100) NOT NULL default '',
      PRIMARY KEY  (`account_id`)
    ) ENGINE=MyISAM;
    */
    
    
    prontera,141,179,5	script	Rebirth System	531,{
    function checkItem;			// check if player have all item required
    function colorItemrequired;	// color the text. Red : not enough item, green otherwise
    function deleteItem;		// delete all items required
    function displayItemneed;	// display all items need at start
    function getItemReward;		// give the items reward
    //function weightreq;			// check if your current weight is highter than weight high novice
    
    
    	if (num_grand_rebirth >= .grand_reset_max) {
    		mes "You can only grand rebirth x"+ .grand_reset_max +".";
    		emotion e_gasp;
    	}
    	else {
    		.@eac = eaclass();
    		if( BaseLevel < 255 || JobLevel < 120 || ( !( .@eac&EAJL_2 ) || !Upper ) && ( Class != Job_Ninja && Class != Job_Gunslinger && Class != Job_Soul_Linker && Class != Job_Star_Gladiator) )
    			mes "You must be rebirth max level/max job level.";
    		else if ( num_rebirth == .reset_max ) {
    			mes "You have reached the maximum rebirth.";
    			emotion e_gasp;
    			.@s2$ = "^777777~ Grand Rebirth";
    		}
    		else
    			.@s1$ = "^777777~ Rebirth";
    		mes "Items need :";
    		displayItemneed();
    	}
    	next;
    	switch( select(( (( getgmlevel() < 90 )?"":"^FF0000[GM]^000000 Reset Rebirth Rankings"), .@s1$, .@s2$, "^777777~ Informations", (.rebirth_ranking?"~ Rebirth ranking":""), (.grand_ranking?"~ Grand Rebirth ranking":""),  "~ Good bye^000000" ) ) {
    		case 1:
    			checkItem();
    			deleteItem();
    			num_rebirth += 1;
    			query_sql "insert into `rebirth_system` ( `account_id`, `name`, `num_rebirth`, `last_ip` ) select "+ getcharid(3) +", '"+ escape_sql( strcharinfo(0) ) +"', '"+ num_rebirth +"',`login`.`last_ip` from `login` where `login`.`account_id` = "+ getcharid(3) +" on duplicate key update `rebirth_system`.`num_rebirth` = `rebirth_system`.`num_rebirth` +1";
    			announce "[ Rebirth system ] : "+ strcharinfo(0) +" Successfully Rebirth!", 0;
    			break;
    		case 2:
    			checkItem();
    			deleteItem();
    			num_grand_rebirth += 1;
    			num_rebirth = 0;
    			getItemReward();
    			query_sql "insert into `rebirth_system` ( `account_id`, `name`, `num_grand`, `last_ip` ) select "+ getcharid(3) +", '"+ escape_sql( strcharinfo(0) ) +"', '"+ num_grand_rebirth +"',`login`.`last_ip` from `login` where `login`.`account_id` = "+ getcharid(3) +" on duplicate key update `rebirth_system`.`num_grand` = `rebirth_system`.`num_grand` +1, `rebirth_system`.`num_rebirth` = 0";
    			announce "[ Rebirth system ] : "+ strcharinfo(0) +" Successfully Grand Rebirth!", 0;
    			break;
    		case 3:
    			mes "You can only rebirth ^ff0000x"+ .reset_max +"^000000. You already rebirth ^ff0000x"+ num_rebirth +"^000000.";
    			mes "Each rebirth you get ^ff0000"+ .num_status +"^000000 status points and after ^ff0000"+ .change_reward +"^000000 rebirth, you get only some items.";
    			close;
    		case 4:
    			mes "TOP " + .rebirth_ranking + " of rebirth.";
    			mes "Name  -  Number of rebirth";
    			.@size = query_sql( "select `name`, `num_rebirth` from `rebirth_system` WHERE num_rebirth > 0 ORDER BY `num_rebirth` desc limit " + .rebirth_ranking, .@name$, .@value );
    			if( .@size ) {
    				for( .@i = 0; .@i < .@size; .@i++ )
    					mes "^777777"+ F_GetNumSuffix( .@i +1 ) +"^000000 : "+ .@name$[.@i] +" : ^FF0000"+ .@value[.@i] +"^000000";
    			}
    			else
    				mes "^0000ff* the list is empty *^000000";
    			close;
    		case 5:
    			mes "TOP " + .grand_ranking + " of grand rebirth.";
    			mes "Name  -  Number of rebirth";
    			.@size = query_sql( "select `name`, `num_grand` from `rebirth_system` WHERE num_grand > 0 ORDER BY `num_grand` desc limit " + .grand_ranking, .@name$, .@value );
    			if( .@size ) {
    				for( .@i = 0; .@i < .@size; .@i++ )
    					mes "^777777"+ F_GetNumSuffix( .@i +1 ) +"^000000 : "+ .@name$[.@i] +" : ^FF0000"+ .@value[.@i] +"^000000";
    			}
    			else
    				mes "^0000ff* the list is empty *^000000";
    			close;
    		case 6:
    			mes "Bye.";
    			close;
    	}
    	if (.reset_job) {
    		if ( Upper ) {	// just in case the user change the setting...
    			lastJob = roclass( .@eac&EAJ_UPPERMASK );
    			jobchange Job_Novice_High;
    		}
    		else
    			jobchange Job_Novice;
    	}
    	resetlvl 1;
    	ResetStatus;
    	if ( Class == Job_Novice ) StatusPoint = 100;
    	StatusPoint += .num_status * num_rebirth;
    	StatusPoint += .num_status * (num_grand_rebirth * .reset_max);
    	close;
    
    function checkItem {
    	for ( ; .@i < .size_item; .@i += 2 )
    		if ( countitem( .item_req[.@i] ) < .item_req[ .@i+1 ] + num_rebirth ) {
    			mes "You don't have enought "+ getitemname( .item_req[.@i] ) +". ^ff0000["+ countitem( .item_req[.@i] ) +"/"+ ( .item_req[ .@i+1 ] + num_rebirth ) +"]^000000";
    			close;
    		}
    	if ( num_rebirth >= .change_reward )
    		if ( .add_item_req[1] + num_rebirth - .change_reward > countitem( .add_item_req[0] ) ) {
    			mes "You don't have enought "+ getitemname( .add_item_req[0] ) +". ^ff0000["+ countitem( .add_item_req[0] ) +"/"+ ( .add_item_req[1] + num_rebirth - .change_reward ) +"]^000000";
    			close;
    		}
    	return;
    }
    
    function colorItemrequired {
    	if ( countitem( .item_req[ getarg(0) ] ) < .item_req[ getarg(0)+1 ] + num_rebirth ) return "^ff0000";
    	return "^00ff00";
    }
    
    function deleteItem {
    	for ( ; .@i < .size_item; .@i += 2 )
    		delitem .item_req[.@i], ( .item_req[ .@i+1 ] + num_rebirth );
    	if ( num_rebirth >= .change_reward )
    		delitem .add_item_req[0], ( .add_item_req[1] + num_rebirth - .change_reward );
    	return;
    }
    
    function displayItemneed {
    	for ( ; .@i < .size_item; .@i += 2 )
    		mes colorItemrequired( .@i ) +" - x"+ ( .item_req[ .@i+1 ] + num_rebirth ) +" "+ (PACKETVER>=20230302?"^i["+ .item_req[.@i] + "]":"") + getitemname( .item_req[.@i] );
    	if ( num_rebirth >= .change_reward ) {
    		if ( .add_item_req[1] + num_rebirth - .change_reward > countitem( .add_item_req[0] ) )
    			.@color$ = "^ff0000";
    		else
    			.@color$ = "^00ff00";
    		mes .@color$ +"- x"+ ( .add_item_req[1] + ( num_rebirth - .change_reward ) ) +" "+ (PACKETVER>=20230302?"^i["+ .item_req[.@i] + "]":"") + getitemname( .add_item_req[0] );
    	}
    	return;
    }
    
    function getItemReward {
    	for ( ; .@i < .size_reward; .@i += 2 )
    		getitem .reward[.@i], .reward[ .@i+1 ];
    	return;
    }
    
    function weightreq {
    	if ( Weight > 50000 ) {
    		mes "You have too much items on you. Your weight will be too high after rebirth.";
    		close;
    	}
    	return;
    }
    
    OnInit:
    	.reset_max = 10;		// how much reset max
    	.grand_reset_max = 100;		// how much grand rebirth max
    	.change_reward = 7;	// after the set rebirth, change reward
    	.num_status = 10;		// + X number of status points
    	.reset_job = false;		// character will go back to Novice?
    	.rebirth_ranking = 5;	// How many tops in rebirth ranking? (0=disable)
    	.grand_ranking = 5;		// How many tops in grand rebirhh ranking? (0=disable)
    
    
    // item required <item ID>, <number>
    	setarray .item_req, 7179, 50,
    						7227, 50,
    						969, 300;
    
    // additionnal items after rebirth >> .change_reward
    // <item ID>, <number>
    	setarray .add_item_req, 7179, 100;
    
    // rewards <item ID>, <number>
    	setarray .reward, 674, 50;
    
    
    	.size_item = getarraysize( .item_req );
    	.size_reward = getarraysize( .reward );
    	query_sql("CREATE TABLE IF NOT EXISTS `rebirth_system` ("
    			+ " `account_id` int(11) unsigned NOT NULL default 0,"
    			+ " `name` varchar(255) NOT NULL DEFAULT 'NULL',"
    			+ " `num_rebirth` int(11) unsigned NOT NULL default 0,"
    			+ " `num_grand` int(11) unsigned NOT NULL default 0,"
    			+ " `last_ip` varchar(100) NOT NULL default '',"
    			+ " PRIMARY KEY  (`account_id`)"
    			+ " ) ENGINE=MyISAM;");
    	end;
    }

    Thank you again @Capuche ❤️

  12. Got an update on this script

    /*
    CREATE TABLE IF NOT EXISTS `rebirth_system` (
      `account_id` int(11) unsigned NOT NULL default 0,
      `name` varchar(255) NOT NULL DEFAULT 'NULL',
      `num_rebirth` int(11) unsigned NOT NULL default 0,
      `num_grand` int(11) unsigned NOT NULL default 0,
      `last_ip` varchar(100) NOT NULL default '',
      PRIMARY KEY  (`account_id`)
    ) ENGINE=MyISAM;
    */
    
    
    prontera,141,179,5	script	Rebirth System	531,{
    function checkItem;			// check if player have all item required
    function colorItemrequired;	// color the text. Red : not enough item, green otherwise
    function deleteItem;		// delete all items required
    function displayItemneed;	// display all items need at start
    function getItemReward;		// give the items reward
    //function weightreq;			// check if your current weight is highter than weight high novice
    
    
    	if (num_grand_rebirth >= .grand_reset_max) {
    		mes "You can only grand rebirth x"+ .grand_reset_max +".";
    		emotion e_gasp;
    	}
    	else {
    		.@eac = eaclass();
    		if( BaseLevel < 255 || JobLevel < 120 || ( !( .@eac&EAJL_2 ) || !Upper ) && ( Class != Job_Ninja && Class != Job_Gunslinger && Class != Job_Soul_Linker && Class != Job_Star_Gladiator) )
    			mes "You must be rebirth max level/max job level.";
    		else if ( num_rebirth == .reset_max ) {
    			mes "You have reached the maximum rebirth.";
    			emotion e_gasp;
    			.@s2$ = "^777777~ Grand Rebirth";
    		}
    		else
    			.@s1$ = "^777777~ Rebirth";
    		mes "Items need :";
    		displayItemneed();
    	}
    	next;
    	switch( select( .@s1$, .@s2$, "^777777~ Informations", (.rebirth_ranking?"~ Rebirth ranking":""), (.grand_ranking?"~ Grand Rebirth ranking":""), "~ Good bye^000000" ) ) {
    		case 1:
    			checkItem();
    			deleteItem();
    			num_rebirth += 1;
    			query_sql "insert into `rebirth_system` ( `account_id`, `name`, `num_rebirth`, `last_ip` ) select "+ getcharid(3) +", '"+ escape_sql( strcharinfo(0) ) +"', '"+ num_rebirth +"',`login`.`last_ip` from `login` where `login`.`account_id` = "+ getcharid(3) +" on duplicate key update `rebirth_system`.`num_rebirth` = `rebirth_system`.`num_rebirth` +1";
    			announce "[ Rebirth system ] : "+ strcharinfo(0) +" Successfully Rebirth!", 0;
    			break;
    		case 2:
    			checkItem();
    			deleteItem();
    			num_grand_rebirth += 1;
    			num_rebirth = 0;
    			getItemReward();
    			query_sql "insert into `rebirth_system` ( `account_id`, `name`, `num_grand`, `last_ip` ) select "+ getcharid(3) +", '"+ escape_sql( strcharinfo(0) ) +"', '"+ num_grand_rebirth +"',`login`.`last_ip` from `login` where `login`.`account_id` = "+ getcharid(3) +" on duplicate key update `rebirth_system`.`num_grand` = `rebirth_system`.`num_grand` +1, `rebirth_system`.`num_rebirth` = 0";
    			announce "[ Rebirth system ] : "+ strcharinfo(0) +" Successfully Grand Rebirth!", 0;
    			break;
    		case 3:
    			mes "You can only rebirth ^ff0000x"+ .reset_max +"^000000. You already rebirth ^ff0000x"+ num_rebirth +"^000000.";
    			mes "Each rebirth you get ^ff0000"+ .num_status +"^000000 status points and after ^ff0000"+ .change_reward +"^000000 rebirth, you get only some items.";
    			close;
    		case 4:
    			mes "TOP " + .rebirth_ranking + " of rebirth.";
    			mes "Name  -  Number of rebirth";
    			.@size = query_sql( "select `name`, `num_rebirth` from `rebirth_system` WHERE num_rebirth > 0 ORDER BY `num_rebirth` desc limit " + .rebirth_ranking, .@name$, .@value );
    			if( .@size ) {
    				for( .@i = 0; .@i < .@size; .@i++ )
    					mes "^777777"+ F_GetNumSuffix( .@i +1 ) +"^000000 : "+ .@name$[.@i] +" : ^FF0000"+ .@value[.@i] +"^000000";
    			}
    			else
    				mes "^0000ff* the list is empty *^000000";
    			close;
    		case 5:
    			mes "TOP " + .grand_ranking + " of grand rebirth.";
    			mes "Name  -  Number of rebirth";
    			.@size = query_sql( "select `name`, `num_grand` from `rebirth_system` WHERE num_grand > 0 ORDER BY `num_grand` desc limit " + .grand_ranking, .@name$, .@value );
    			if( .@size ) {
    				for( .@i = 0; .@i < .@size; .@i++ )
    					mes "^777777"+ F_GetNumSuffix( .@i +1 ) +"^000000 : "+ .@name$[.@i] +" : ^FF0000"+ .@value[.@i] +"^000000";
    			}
    			else
    				mes "^0000ff* the list is empty *^000000";
    			close;
    		case 6:
    			mes "Bye.";
    			close;
    	}
    	if (.reset_job) {
    		if ( Upper ) {	// just in case the user change the setting...
    			lastJob = roclass( .@eac&EAJ_UPPERMASK );
    			jobchange Job_Novice_High;
    		}
    		else
    			jobchange Job_Novice;
    	}
    	resetlvl 1;
    	ResetStatus; // Will reset the statpoints
    	if ( Class == Job_Novice ) StatusPoint = 48;
    	StatusPoint += .num_status * num_rebirth;
    	StatusPoint += .num_status * (num_grand_rebirth * .reset_max);
    	close;
    
    function checkItem {
    	for ( ; .@i < .size_item; .@i += 2 )
    		if ( countitem( .item_req[.@i] ) < .item_req[ .@i+1 ] + num_rebirth ) {
    			mes "You don't have enought "+ getitemname( .item_req[.@i] ) +". ^ff0000["+ countitem( .item_req[.@i] ) +"/"+ ( .item_req[ .@i+1 ] + num_rebirth ) +"]^000000";
    			close;
    		}
    	if ( num_rebirth >= .change_reward )
    		if ( .add_item_req[1] + num_rebirth - .change_reward > countitem( .add_item_req[0] ) ) {
    			mes "You don't have enought "+ getitemname( .add_item_req[0] ) +". ^ff0000["+ countitem( .add_item_req[0] ) +"/"+ ( .add_item_req[1] + num_rebirth - .change_reward ) +"]^000000";
    			close;
    		}
    	return;
    }
    
    function colorItemrequired {
    	if ( countitem( .item_req[ getarg(0) ] ) < .item_req[ getarg(0)+1 ] + num_rebirth ) return "^ff0000";
    	return "^00ff00";
    }
    
    function deleteItem {
    	for ( ; .@i < .size_item; .@i += 2 )
    		delitem .item_req[.@i], ( .item_req[ .@i+1 ] + num_rebirth );
    	if ( num_rebirth >= .change_reward )
    		delitem .add_item_req[0], ( .add_item_req[1] + num_rebirth - .change_reward );
    	return;
    }
    
    function displayItemneed {
    	for ( ; .@i < .size_item; .@i += 2 )
    		mes colorItemrequired( .@i ) +" - x"+ ( .item_req[ .@i+1 ] + num_rebirth ) +" "+ (PACKETVER>=20230302?"^i["+ .item_req[.@i] + "]":"") + getitemname( .item_req[.@i] );
    	if ( num_rebirth >= .change_reward ) {
    		if ( .add_item_req[1] + num_rebirth - .change_reward > countitem( .add_item_req[0] ) )
    			.@color$ = "^ff0000";
    		else
    			.@color$ = "^00ff00";
    		mes .@color$ +"- x"+ ( .add_item_req[1] + ( num_rebirth - .change_reward ) ) +" "+ (PACKETVER>=20230302?"^i["+ .item_req[.@i] + "]":"") + getitemname( .add_item_req[0] );
    	}
    	return;
    }
    
    function getItemReward {
    	for ( ; .@i < .size_reward; .@i += 2 )
    		getitem .reward[.@i], .reward[ .@i+1 ];
    	return;
    }
    
    function weightreq {
    	if ( Weight > 50000 ) {
    		mes "You have too much items on you. Your weight will be too high after rebirth.";
    		close;
    	}
    	return;
    }
    
    OnInit:
    	.reset_max = 500;		// how much reset max
    	.grand_reset_max = 100;		// how much grand rebirth max
    	.change_reward = 250;	// after the set rebirth, change reward
    	.num_status = 10;		// + X number of status points
    	.reset_job = false;		// character will go back to Novice?
    	.rebirth_ranking = 5;	// How many tops in rebirth ranking? (0=disable)
    	.grand_ranking = 5;		// How many tops in grand rebirhh ranking? (0=disable)
    
    
    // item required <item ID>, <number>
    	setarray .item_req, 7179, 50,
    						7227, 50,
    						969, 300;
    
    // additionnal items after rebirth >> .change_reward
    // <item ID>, <number>
    	setarray .add_item_req, 7179, 100;
    
    // rewards <item ID>, <number>
    	setarray .reward, 674, 50;
    
    
    	.size_item = getarraysize( .item_req );
    	.size_reward = getarraysize( .reward );
    	query_sql("CREATE TABLE IF NOT EXISTS `rebirth_system` ("
    			+ " `account_id` int(11) unsigned NOT NULL default 0,"
    			+ " `name` varchar(255) NOT NULL DEFAULT 'NULL',"
    			+ " `num_rebirth` int(11) unsigned NOT NULL default 0,"
    			+ " `num_grand` int(11) unsigned NOT NULL default 0,"
    			+ " `last_ip` varchar(100) NOT NULL default '',"
    			+ " PRIMARY KEY  (`account_id`)"
    			+ " ) ENGINE=MyISAM;");
    	end;
    }

    I already figured out the reset for the remaining stat point

    Is it possible that after grand reset all of the "STAT POINTS" earned during Rebirth can be wiped and start as new rebirth

     

     

  13. On 5/13/2025 at 12:50 AM, Racaae said:
      Hide contents
    /*
    CREATE TABLE IF NOT EXISTS `rebirth_system` (
      `account_id` int(11) unsigned NOT NULL default 0,
      `name` varchar(255) NOT NULL DEFAULT 'NULL',
      `num_rebirth` int(11) unsigned NOT NULL default 0,
      `num_grand` int(11) unsigned NOT NULL default 0,
      `last_ip` varchar(100) NOT NULL default '',
      PRIMARY KEY  (`account_id`)
    ) ENGINE=MyISAM;
    */
    
    
    prontera,141,179,5	script	Rebirth System	531,{
    function checkItem;			// check if player have all item required
    function colorItemrequired;	// color the text. Red : not enough item, green otherwise
    function deleteItem;		// delete all items required
    function displayItemneed;	// display all items need at start
    function getItemReward;		// give the items reward
    //function weightreq;			// check if your current weight is highter than weight high novice
    
    
    	if (num_grand_rebirth >= .grand_reset_max) {
    		mes "You can only grand rebirth x"+ .grand_reset_max +".";
    		emotion e_gasp;
    	}
    	else {
    		.@eac = eaclass();
    		if( BaseLevel < 255 || JobLevel < 120 || ( !( .@eac&EAJL_2 ) || !Upper ) && ( Class != Job_Ninja && Class != Job_Gunslinger && Class != Job_Soul_Linker && Class != Job_Star_Gladiator) )
    			mes "You must be rebirth max level/max job level.";
    		else if ( num_rebirth == .reset_max ) {
    			mes "You have reached the maximum rebirth.";
    			emotion e_gasp;
    			.@s2$ = "^777777~ Grand Rebirth";
    		}
    		else
    			.@s1$ = "^777777~ Rebirth";
    		mes "Items need :";
    		displayItemneed();
    	}
    	next;
    	switch( select( .@s1$, .@s2$, "^777777~ Informations", (.rebirth_ranking?"~ Rebirth ranking":""), (.grand_ranking?"~ Grand Rebirth ranking":""), "~ Good bye^000000" ) ) {
    		case 1:
    			checkItem();
    			deleteItem();
    			num_rebirth += 1;
    			query_sql "insert into `rebirth_system` ( `account_id`, `name`, `num_rebirth`, `last_ip` ) select "+ getcharid(3) +", '"+ escape_sql( strcharinfo(0) ) +"', '"+ num_rebirth +"',`login`.`last_ip` from `login` where `login`.`account_id` = "+ getcharid(3) +" on duplicate key update `rebirth_system`.`num_rebirth` = `rebirth_system`.`num_rebirth` +1";
    			announce "[ Rebirth system ] : "+ strcharinfo(0) +" Successfully Rebirth!", 0;
    			break;
    		case 2:
    			checkItem();
    			deleteItem();
    			num_grand_rebirth += 1;
    			num_rebirth = 0;
    			getItemReward();
    			query_sql "insert into `rebirth_system` ( `account_id`, `name`, `num_grand`, `last_ip` ) select "+ getcharid(3) +", '"+ escape_sql( strcharinfo(0) ) +"', '"+ num_grand_rebirth +"',`login`.`last_ip` from `login` where `login`.`account_id` = "+ getcharid(3) +" on duplicate key update `rebirth_system`.`num_grand` = `rebirth_system`.`num_grand` +1, `rebirth_system`.`num_rebirth` = 0";
    			announce "[ Rebirth system ] : "+ strcharinfo(0) +" Successfully Grand Rebirth!", 0;
    			break;
    		case 3:
    			mes "You can only rebirth ^ff0000x"+ .reset_max +"^000000. You already rebirth ^ff0000x"+ num_rebirth +"^000000.";
    			mes "Each rebirth you get ^ff0000"+ .num_status +"^000000 status points and after ^ff0000"+ .change_reward +"^000000 rebirth, you get only some items.";
    			close;
    		case 4:
    			mes "TOP " + .rebirth_ranking + " of rebirth.";
    			mes "Name  -  Number of rebirth";
    			.@size = query_sql( "select `name`, `num_rebirth` from `rebirth_system` WHERE num_rebirth > 0 ORDER BY `num_rebirth` desc limit " + .rebirth_ranking, .@name$, .@value );
    			if( .@size ) {
    				for( .@i = 0; .@i < .@size; .@i++ )
    					mes "^777777"+ F_GetNumSuffix( .@i +1 ) +"^000000 : "+ .@name$[.@i] +" : ^FF0000"+ .@value[.@i] +"^000000";
    			}
    			else
    				mes "^0000ff* the list is empty *^000000";
    			close;
    		case 5:
    			mes "TOP " + .grand_ranking + " of grand rebirth.";
    			mes "Name  -  Number of rebirth";
    			.@size = query_sql( "select `name`, `num_grand` from `rebirth_system` WHERE num_grand > 0 ORDER BY `num_grand` desc limit " + .grand_ranking, .@name$, .@value );
    			if( .@size ) {
    				for( .@i = 0; .@i < .@size; .@i++ )
    					mes "^777777"+ F_GetNumSuffix( .@i +1 ) +"^000000 : "+ .@name$[.@i] +" : ^FF0000"+ .@value[.@i] +"^000000";
    			}
    			else
    				mes "^0000ff* the list is empty *^000000";
    			close;
    		case 6:
    			mes "Bye.";
    			close;
    	}
    	if (.reset_job) {
    		if ( Upper ) {	// just in case the user change the setting...
    			lastJob = roclass( .@eac&EAJ_UPPERMASK );
    			jobchange Job_Novice_High;
    		}
    		else
    			jobchange Job_Novice;
    	}
    	resetlvl 1;
    	if ( Class == Job_Novice ) StatusPoint = 48;
    	StatusPoint += .num_status * num_rebirth;
    	StatusPoint += .num_status * (num_grand_rebirth * .reset_max);
    	close;
    
    function checkItem {
    	for ( ; .@i < .size_item; .@i += 2 )
    		if ( countitem( .item_req[.@i] ) < .item_req[ .@i+1 ] + num_rebirth ) {
    			mes "You don't have enought "+ getitemname( .item_req[.@i] ) +". ^ff0000["+ countitem( .item_req[.@i] ) +"/"+ ( .item_req[ .@i+1 ] + num_rebirth ) +"]^000000";
    			close;
    		}
    	if ( num_rebirth >= .change_reward )
    		if ( .add_item_req[1] + num_rebirth - .change_reward > countitem( .add_item_req[0] ) ) {
    			mes "You don't have enought "+ getitemname( .add_item_req[0] ) +". ^ff0000["+ countitem( .add_item_req[0] ) +"/"+ ( .add_item_req[1] + num_rebirth - .change_reward ) +"]^000000";
    			close;
    		}
    	return;
    }
    
    function colorItemrequired {
    	if ( countitem( .item_req[ getarg(0) ] ) < .item_req[ getarg(0)+1 ] + num_rebirth ) return "^ff0000";
    	return "^00ff00";
    }
    
    function deleteItem {
    	for ( ; .@i < .size_item; .@i += 2 )
    		delitem .item_req[.@i], ( .item_req[ .@i+1 ] + num_rebirth );
    	if ( num_rebirth >= .change_reward )
    		delitem .add_item_req[0], ( .add_item_req[1] + num_rebirth - .change_reward );
    	return;
    }
    
    function displayItemneed {
    	for ( ; .@i < .size_item; .@i += 2 )
    		mes colorItemrequired( .@i ) +" - x"+ ( .item_req[ .@i+1 ] + num_rebirth ) +" "+ (PACKETVER>=20230302?"^i["+ .item_req[.@i] + "]":"") + getitemname( .item_req[.@i] );
    	if ( num_rebirth >= .change_reward ) {
    		if ( .add_item_req[1] + num_rebirth - .change_reward > countitem( .add_item_req[0] ) )
    			.@color$ = "^ff0000";
    		else
    			.@color$ = "^00ff00";
    		mes .@color$ +"- x"+ ( .add_item_req[1] + ( num_rebirth - .change_reward ) ) +" "+ (PACKETVER>=20230302?"^i["+ .item_req[.@i] + "]":"") + getitemname( .add_item_req[0] );
    	}
    	return;
    }
    
    function getItemReward {
    	for ( ; .@i < .size_reward; .@i += 2 )
    		getitem .reward[.@i], .reward[ .@i+1 ];
    	return;
    }
    
    function weightreq {
    	if ( Weight > 50000 ) {
    		mes "You have too much items on you. Your weight will be too high after rebirth.";
    		close;
    	}
    	return;
    }
    
    OnInit:
    	.reset_max = 9;		// how much reset max
    	.grand_reset_max = 100;		// how much grand rebirth max
    	.change_reward = 150;	// after the set rebirth, change reward
    	.num_status = 10;		// + X number of status points
    	.reset_job = false;		// character will go back to Novice?
    	.rebirth_ranking = 0;	// How many tops in rebirth ranking? (0=disable)
    	.grand_ranking = 5;		// How many tops in grand rebirhh ranking? (0=disable)
    
    
    // item required <item ID>, <number>
    	setarray .item_req, 7179, 50,
    						7227, 50,
    						969, 300;
    
    // additionnal items after rebirth >> .change_reward
    // <item ID>, <number>
    	setarray .add_item_req, 7179, 100;
    
    // rewards <item ID>, <number>
    	setarray .reward, 674, 50;
    
    
    	.size_item = getarraysize( .item_req );
    	.size_reward = getarraysize( .reward );
    	query_sql("CREATE TABLE IF NOT EXISTS `rebirth_system` ("
    			+ " `account_id` int(11) unsigned NOT NULL default 0,"
    			+ " `name` varchar(255) NOT NULL DEFAULT 'NULL',"
    			+ " `num_rebirth` int(11) unsigned NOT NULL default 0,"
    			+ " `num_grand` int(11) unsigned NOT NULL default 0,"
    			+ " `last_ip` varchar(100) NOT NULL default '',"
    			+ " PRIMARY KEY  (`account_id`)"
    			+ " ) ENGINE=MyISAM;");
    	end;
    }

     

     

    @Racaae the script is fine however this is the script do

    - The Rebirth count doesnt list in SQL

    image.png.9ec8a0d192e6461840c8842a54662e8d.png

    - Stat Points Doesnt clear out after rebirth only the allocated stats

    image.png

    image.png.6038b10990fc6ff8057f5b5e9ccd09d8.png

    - it should be the only reward stat points will be shown in Stat point area

    In what line I can edit the reward for Grand Reset, all I can see was the reward for the Reset after they reach 150 reset

     

    NOTE: Increasing materials every reset was good ❤️

     

    Thank you in advance ❤️

     

  14. 42 minutes ago, Racaae said:
      Hide contents
    /*
    CREATE TABLE IF NOT EXISTS `rebirth_system` (
      `account_id` int(11) unsigned NOT NULL default 0,
      `name` varchar(255) NOT NULL DEFAULT 'NULL',
      `num_rebirth` int(11) unsigned NOT NULL default 0,
      `num_grand` int(11) unsigned NOT NULL default 0,
      `last_ip` varchar(100) NOT NULL default '',
      PRIMARY KEY  (`account_id`)
    ) ENGINE=MyISAM;
    */
    
    
    prontera,141,179,5	script	Rebirth System	531,{
    function checkItem;			// check if player have all item required
    function colorItemrequired;	// color the text. Red : not enough item, green otherwise
    function deleteItem;		// delete all items required
    function displayItemneed;	// display all items need at start
    function getItemReward;		// give the items reward
    //function weightreq;			// check if your current weight is highter than weight high novice
    
    
    	if (num_grand_rebirth >= .grand_reset_max) {
    		mes "You can only grand rebirth x"+ .grand_reset_max +".";
    		emotion e_gasp;
    	}
    	else {
    		.@eac = eaclass();
    		if( BaseLevel < 255 || JobLevel < 120 || ( !( .@eac&EAJL_2 ) || !Upper ) && ( Class != Job_Ninja && Class != Job_Gunslinger && Class != Job_Soul_Linker && Class != Job_Star_Gladiator) )
    			mes "You must be rebirth max level/max job level.";
    		else if ( num_rebirth == .reset_max ) {
    			mes "You have reached the maximum rebirth.";
    			emotion e_gasp;
    			.@s2$ = "^777777~ Grand Rebirth";
    		}
    		else
    			.@s1$ = "^777777~ Rebirth";
    		mes "Items need :";
    		displayItemneed();
    	}
    	next;
    	switch( select( .@s1$, .@s2$, "^777777~ Informations", (.rebirth_ranking?"~ Rebirth ranking":""), (.grand_ranking?"~ Grand Rebirth ranking":""), "~ Good bye^000000" ) ) {
    		case 1:
    			checkItem();
    			deleteItem();
    			num_rebirth += 1;
    			query_sql "insert into `rebirth_system` ( `account_id`, `name`, `num_rebirth`, `last_ip` ) select "+ getcharid(3) +", '"+ escape_sql( strcharinfo(0) ) +"', '"+ num_rebirth +"',`login`.`last_ip` from `login` where `login`.`account_id` = "+ getcharid(3) +" on duplicate key update `rebirth_system`.`num_rebirth` = `rebirth_system`.`num_rebirth` +1";
    			announce "[ Rebirth system ] : "+ strcharinfo(0) +" Successfully Rebirth!", 0;
    			break;
    		case 2:
    			checkItem();
    			deleteItem();
    			num_grand_rebirth += 1;
    			num_rebirth = 0;
    			getItemReward();
    			query_sql "insert into `rebirth_system` ( `account_id`, `name`, `num_grand`, `last_ip` ) select "+ getcharid(3) +", '"+ escape_sql( strcharinfo(0) ) +"', '"+ num_grand_rebirth +"',`login`.`last_ip` from `login` where `login`.`account_id` = "+ getcharid(3) +" on duplicate key update `rebirth_system`.`num_grand` = `rebirth_system`.`num_grand` +1, `rebirth_system`.`num_rebirth` = 0";
    			announce "[ Rebirth system ] : "+ strcharinfo(0) +" Successfully Grand Rebirth!", 0;
    			break;
    		case 3:
    			mes "You can only rebirth ^ff0000x"+ .reset_max +"^000000. You already rebirth ^ff0000x"+ num_rebirth +"^000000.";
    			mes "Each rebirth you get ^ff0000"+ .num_status +"^000000 status points and after ^ff0000"+ .change_reward +"^000000 rebirth, you get only some items.";
    			close;
    		case 4:
    			mes "TOP " + .rebirth_ranking + " of rebirth.";
    			mes "Name  -  Number of rebirth";
    			.@size = query_sql( "select `name`, `num_rebirth` from `rebirth_system` WHERE num_rebirth > 0 ORDER BY `num_rebirth` desc limit " + .rebirth_ranking, .@name$, .@value );
    			if( .@size ) {
    				for( .@i = 0; .@i < .@size; .@i++ )
    					mes "^777777"+ F_GetNumSuffix( .@i +1 ) +"^000000 : "+ .@name$[.@i] +" : ^FF0000"+ .@value[.@i] +"^000000";
    			}
    			else
    				mes "^0000ff* the list is empty *^000000";
    			close;
    		case 5:
    			mes "TOP " + .grand_ranking + " of grand rebirth.";
    			mes "Name  -  Number of rebirth";
    			.@size = query_sql( "select `name`, `num_grand` from `rebirth_system` WHERE num_grand > 0 ORDER BY `num_grand` desc limit " + .grand_ranking, .@name$, .@value );
    			if( .@size ) {
    				for( .@i = 0; .@i < .@size; .@i++ )
    					mes "^777777"+ F_GetNumSuffix( .@i +1 ) +"^000000 : "+ .@name$[.@i] +" : ^FF0000"+ .@value[.@i] +"^000000";
    			}
    			else
    				mes "^0000ff* the list is empty *^000000";
    			close;
    		case 6:
    			mes "Bye.";
    			close;
    	}
    	if (.reset_job) {
    		if ( Upper ) {	// just in case the user change the setting...
    			lastJob = roclass( .@eac&EAJ_UPPERMASK );
    			jobchange Job_Novice_High;
    		}
    		else
    			jobchange Job_Novice;
    	}
    	resetlvl 1;
    	if ( Class == Job_Novice ) StatusPoint = 48;
    	StatusPoint += .num_status * num_rebirth;
    	StatusPoint += .num_status * (num_grand_rebirth * .reset_max);
    	close;
    
    function checkItem {
    	for ( ; .@i < .size_item; .@i += 2 )
    		if ( countitem( .item_req[.@i] ) < .item_req[ .@i+1 ] + num_rebirth ) {
    			mes "You don't have enought "+ getitemname( .item_req[.@i] ) +". ^ff0000["+ countitem( .item_req[.@i] ) +"/"+ ( .item_req[ .@i+1 ] + num_rebirth ) +"]^000000";
    			close;
    		}
    	if ( num_rebirth >= .change_reward )
    		if ( .add_item_req[1] + num_rebirth - .change_reward > countitem( .add_item_req[0] ) ) {
    			mes "You don't have enought "+ getitemname( .add_item_req[0] ) +". ^ff0000["+ countitem( .add_item_req[0] ) +"/"+ ( .add_item_req[1] + num_rebirth - .change_reward ) +"]^000000";
    			close;
    		}
    	return;
    }
    
    function colorItemrequired {
    	if ( countitem( .item_req[ getarg(0) ] ) < .item_req[ getarg(0)+1 ] + num_rebirth ) return "^ff0000";
    	return "^00ff00";
    }
    
    function deleteItem {
    	for ( ; .@i < .size_item; .@i += 2 )
    		delitem .item_req[.@i], ( .item_req[ .@i+1 ] + num_rebirth );
    	if ( num_rebirth >= .change_reward )
    		delitem .add_item_req[0], ( .add_item_req[1] + num_rebirth - .change_reward );
    	return;
    }
    
    function displayItemneed {
    	for ( ; .@i < .size_item; .@i += 2 )
    		mes colorItemrequired( .@i ) +" - x"+ ( .item_req[ .@i+1 ] + num_rebirth ) +" "+ (PACKETVER>=20230302?"^i["+ .item_req[.@i] + "]":"") + getitemname( .item_req[.@i] );
    	if ( num_rebirth >= .change_reward ) {
    		if ( .add_item_req[1] + num_rebirth - .change_reward > countitem( .add_item_req[0] ) )
    			.@color$ = "^ff0000";
    		else
    			.@color$ = "^00ff00";
    		mes .@color$ +"- x"+ ( .add_item_req[1] + ( num_rebirth - .change_reward ) ) +" "+ (PACKETVER>=20230302?"^i["+ .item_req[.@i] + "]":"") + getitemname( .add_item_req[0] );
    	}
    	return;
    }
    
    function getItemReward {
    	for ( ; .@i < .size_reward; .@i += 2 )
    		getitem .reward[.@i], .reward[ .@i+1 ];
    	return;
    }
    
    function weightreq {
    	if ( Weight > 50000 ) {
    		mes "You have too much items on you. Your weight will be too high after rebirth.";
    		close;
    	}
    	return;
    }
    
    OnInit:
    	.reset_max = 9;		// how much reset max
    	.grand_reset_max = 100;		// how much grand rebirth max
    	.change_reward = 150;	// after the set rebirth, change reward
    	.num_status = 10;		// + X number of status points
    	.reset_job = false;		// character will go back to Novice?
    	.rebirth_ranking = 0;	// How many tops in rebirth ranking? (0=disable)
    	.grand_ranking = 5;		// How many tops in grand rebirhh ranking? (0=disable)
    
    
    // item required <item ID>, <number>
    	setarray .item_req, 7179, 50,
    						7227, 50,
    						969, 300;
    
    // additionnal items after rebirth >> .change_reward
    // <item ID>, <number>
    	setarray .add_item_req, 7179, 100;
    
    // rewards <item ID>, <number>
    	setarray .reward, 674, 50;
    
    
    	.size_item = getarraysize( .item_req );
    	.size_reward = getarraysize( .reward );
    	query_sql("CREATE TABLE IF NOT EXISTS `rebirth_system` ("
    			+ " `account_id` int(11) unsigned NOT NULL default 0,"
    			+ " `name` varchar(255) NOT NULL DEFAULT 'NULL',"
    			+ " `num_rebirth` int(11) unsigned NOT NULL default 0,"
    			+ " `num_grand` int(11) unsigned NOT NULL default 0,"
    			+ " `last_ip` varchar(100) NOT NULL default '',"
    			+ " PRIMARY KEY  (`account_id`)"
    			+ " ) ENGINE=MyISAM;");
    	end;
    }

     

     

    Thanks man i'll try this one out ❤️

    appreciate it so much

  15. /*
    CREATE TABLE IF NOT EXISTS `rebirth_system` (
      `account_id` int(11) unsigned NOT NULL default '0',
      `name` varchar(255) NOT NULL DEFAULT 'NULL',
      `num_rebirth` int(11) unsigned NOT NULL default '0',
      `last_ip` varchar(100) NOT NULL default '',
      PRIMARY KEY  (`account_id`)
    ) ENGINE=MyISAM;
    */
    
    
    prontera,141,179,5	script	Rebirth System	531,{
    function checkItem;			// check if player have all item required
    function colorItemrequired;	// color the text. Red : not enough item, green otherwise
    function deleteItem;		// delete all items required
    function displayItemneed;	// display all items need at start
    function getItemReward;		// give the items reward
    //function weightreq;			// check if your current weight is highter than weight high novice
    
    
    	.@eac = eaclass();
    	if ( num_rebirth == .reset_max ) {
    		mes "You can only rebirth x"+ .reset_max +".";
    		emotion e_gasp;
    		close;
    	}
    	else if( BaseLevel < 255 || JobLevel < 120 || ( !( .@eac&EAJL_2 ) || !Upper ) && ( Class != Job_Ninja && Class != Job_Gunslinger && Class != Job_Soul_Linker && Class != Job_Star_Gladiator) ) {
    		mes "You must be rebirth max level/max job level.";
    		close;
    	}
    
    	mes "Items need :";
    	displayItemneed();
    	next;
    
    	switch( select( "^777777~ Rebirth", "~ Informations", "~ Rebirth ranking", "~ Good bye^000000" ) ) {
    		case 1:
    			checkItem();
    			deleteItem();
    			break;
    		case 2:
    			mes "You can only rebirth ^ff0000x"+ .reset_max +"^000000. You already rebirth ^ff0000x"+ num_rebirth +"^000000.";
    			mes "Each rebirth you get ^ff0000"+ .num_status +"^000000 status points and after ^ff0000"+ .change_reward +"^000000 rebirth, you get only some items.";
    			close;
    		case 4:
    			mes "Bye.";
    			close;
    		case 3:
    			mes "TOP 50 of rebirth.";
    			mes "Name  -  Number of rebirth";
    			.@size = query_sql( "select `name`, `num_rebirth` from `rebirth_system` order by `num_rebirth` desc limit 50", .@name$, .@value );
    			if( .@size ) {
    				for( .@i = 0; .@i < .@size; .@i++ )
    					mes "^777777"+ ( .@i +1 ) +"^000000 : "+ .@name$[.@i] +" : ^FF0000"+ .@value[.@i] +"^000000";
    			}
    			else
    				mes "^0000ff* the list is empty *^000000";
    			close;
    	}
    	num_rebirth += 1;
    	if ( Upper ) {	// just in case the user change the setting...
    		lastJob = roclass( .@eac&EAJ_UPPERMASK );
    		jobchange Job_Novice_High;
    	}
    	else
    		jobchange Job_Novice;
    	resetlvl 1;
    	if ( num_rebirth < .change_reward ) {
    		if ( Class == Job_Novice ) StatusPoint = 48;
    		StatusPoint = StatusPoint + .num_status * num_rebirth;
    	}
    	else {
    		StatusPoint = StatusPoint + .num_status * .change_reward;
    		getItemReward();
    	query_sql "insert into `rebirth_system` ( `account_id`, `name`, `num_rebirth`, `last_ip` ) select "+ getcharid(3) +", '"+ escape_sql( strcharinfo(0) ) +"', '"+ num_rebirth +"',`login`.`last_ip` from `login` where `login`.`account_id` = "+ getcharid(3) +" on duplicate key update `rebirth_system`.`num_rebirth` = `rebirth_system`.`num_rebirth` +1";
    	announce "[ Rebirth system ] : "+ strcharinfo(0) +" Successfully Rebirth!", 0;
    	close;
    
    }
    
    function checkItem {
    	for ( ; .@i < .size_item; .@i += 2 )
    		if ( countitem( .item_req[.@i] ) < .item_req[ .@i+1 ] + num_rebirth ) {
    			mes "You don't have enought "+ getitemname( .item_req[.@i] ) +". ^ff0000["+ countitem( .item_req[.@i] ) +"/"+ ( .item_req[ .@i+1 ] + num_rebirth ) +"]^000000";
    			close;
    		}
    	if ( num_rebirth >= .change_reward )
    		if ( .add_item_req[1] + num_rebirth - .change_reward > countitem( .add_item_req[0] ) ) {
    			mes "You don't have enought "+ getitemname( .add_item_req[0] ) +". ^ff0000["+ countitem( .add_item_req[0] ) +"/"+ ( .add_item_req[1] + num_rebirth - .change_reward ) +"]^000000";
    			close;
    		}
    	return;
    }
    
    function colorItemrequired {
    	if ( countitem( .item_req[ getarg(0) ] ) < .item_req[ getarg(0)+1 ] + num_rebirth ) return "^ff0000";
    	return "^00ff00";
    }
    
    function deleteItem {
    	for ( ; .@i < .size_item; .@i += 2 )
    		delitem .item_req[.@i], ( .item_req[ .@i+1 ] + num_rebirth );
    	if ( num_rebirth >= .change_reward )
    		delitem .add_item_req[0], ( .add_item_req[1] + num_rebirth - .change_reward );
    	return;
    }
    
    function displayItemneed {
    	for ( ; .@i < .size_item; .@i += 2 )
    		mes colorItemrequired( .@i ) +" - x"+ ( .item_req[ .@i+1 ] + num_rebirth ) +" "+ getitemname( .item_req[.@i] );
    	if ( num_rebirth >= .change_reward ) {
    		if ( .add_item_req[1] + num_rebirth - .change_reward > countitem( .add_item_req[0] ) )
    			.@color$ = "^ff0000";
    		else
    			.@color$ = "^00ff00";
    		mes .@color$ +"- x"+ ( .add_item_req[1] + ( num_rebirth - .change_reward ) ) +" "+ getitemname( .add_item_req[0] );
    	}
    	return;
    }
    
    function getItemReward {
    	for ( ; .@i < .size_reward; .@i += 2 )
    		getitem .reward[.@i], .reward[ .@i+1 ];
    	return;
    }
    
    function weightreq {
    	if ( Weight > 50000 ) {
    		mes "You have too much items on you. Your weight will be too high after rebirth.";
    		close;
    	}
    	return;
    }
    
    OnInit:
    	.reset_max = 200;		// how much reset max
    	.change_reward = 150;	// after the set rebirth, change reward
    	.num_status = 10;		// + X number of status points
    
    // item required <item ID>, <number>
    	setarray .item_req, 7179, 50,
    						7227, 50,
    						969, 300;
    	.size_item = getarraysize( .item_req );
    
    // additionnal items after rebirth >> .change_reward
    // <item ID>, <number>
    	setarray .add_item_req, 7179, 100;
    
    // rewards <item ID>, <number>
    	setarray .reward, 674, 50;
    	.size_reward = getarraysize( .reward );
    	end;
    }

     

    Can anyone help me modify this script I thin its from @Capuche

    - After Rebirth the character will not go back to High Novice instead stay on same class but the stats will reset

    - Doing Grand Rebirth all Rebirth Count will be back to 0

    - Max Grand Rebirth can be modify

    - After reaching  the Max Rebirth there will be a Grand Rebirth that gives a certain Items that can be modify

    - Ranking for Highest Grand Rebirth

     

    Thank you in advance

×
×
  • Create New...