Jump to content
  • 0

Rebirth NPC question


rayleigh

Question


  • Group:  Members
  • Topic Count:  57
  • Topics Per Day:  0.01
  • Content Count:  220
  • Reputation:   0
  • Joined:  09/05/13
  • Last Seen:  

Hello. Im using this rebirth npc.

 

aretnorp,210,218,6	script	Rebirth NPC	811,{
function deleteItem;		// Deletes Required Items
function CheckItemNeed;		// Shows the Required Items
function getItemReward;		// Gives the Reward

	mes "^11E6D0[Rebirth System]^000000";
	mes strcharinfo(0)+", How may I help you?";
	switch( select( "^777777~ Ranking:~ Rebirth:~ Information:~ Reset Stat:~ Cancel"+((getgmlevel()>=.GMLevel)?":~ Reset Ranking":"")+"^000000" ) ) {
		case 1:
			next;
			mes "^11E6D0[Rebirth System]^000000";
			mes "Rankings:";
			query_sql "SELECT `name`,`rebirth_no`,`master_rebirth` FROM `rebirth_system` ORDER BY `master_rebirth` DESC, `rebirth_no` DESC LIMIT "+.list,@name$,@rebirth_no,@master_rebirth;
			if(getarraysize(@name$)==0){mes "^F20808 No Records Found ^000000"; close;}
			mes "Format:";
			mes "^0814F2[Character Name]^000000 - ^B308F2[Rebirths]^000000 - ^B303F2[Master_Rebirth]^000000";
			for (.@i=0; .@i < getarraysize(@name$); .@i++){
				mes (.@i+1) +".) ^0814F2["+ @name$[.@i] +"]^000000 - ^B308F2["+ @rebirth_no[.@i] +"]^000000 - ^B303F2["+ @master_rebirth[.@i] +"]^000000";
			}
			deletearray @name$[0],.list; deletearray @rebirth_no[0],.list; deletearray @master_rebirth[0],.list;
			close;
		case 2:
			next;
			mes "^11E6D0[Rebirth System]^000000";
			if (.MasterRebirth>0 && rebirth_no >= .MasterRebirth){
				mes "You can Do Master Rebirth too.";
				mes "Master rebirth allows you to earn some more powerful items.";
				mes "On doing Master Rebirth, you will lose "+ .MasterRebirth +" Rebirths";
				if (.MaxRebirth[1]){ mes "You can do "+ .MaxRebirth[1] +" Master Rebirths Only"; }
				@rebirth_type = select("Do Standard Rebirth:Do Master Rebirth");
				next;
				mes "^11E6D0[Rebirth System]^000000";
			}else{
				@rebirth_type = 1;
			}
			if ((@rebirth_type==1 && .MaxRebirth[0] > 0 && rebirth_no >= .MaxRebirth[0]) || (@rebirth_type==2 && .MaxRebirth[1] > 0 && master_rebirth >= .MaxRebirth[1]) ){
				mes "You have Reached the Maximum Number of "+ ( (@rebirth_type==2)?"Master":"" ) +" Rebirths("+ ( (@rebirth_type==2)?master_rebirth:rebirth_no ) +")";
				close;
			}
			.@eac = eaclass();
			.@can_rebirth = false;
			for (.@i=0; .@i<getarraysize(.add_jobs); .@i++){
				if (Class==.add_jobs[.@i]){
					.@can_rebirth = true;
					break;
				}
			}
			if (!.@can_rebirth){
				.@can_rebirth = true;
				setarray .@jobcheck[0],EAJL_2,EAJL_2_1,EAJL_2_2,EAJL_UPPER,EAJL_BABY,EAJL_THIRD;
				for (.@i = 0; .@i < getarraysize(.@jobcheck); .@i++)
					if ((.job_rebirth&.@jobcheck[.@i])){
						if (!(.@eac&.@jobcheck[.@i])){
							if ((.@i == 1 || .@i == 2) && .@pass == true)
								continue;
							.@can_rebirth = false;
							break;
						}
						if (.@i == 0)
							.@pass = true;
					}
						
			}
			if( BaseLevel < 500 || JobLevel < 120 ) {
				mes "You must be Max BaselLevel/Joblevel to Rebirth.";
				close;
			}else if( !.@can_rebirth ){
				if (.job_rebirth&EAJL_BABY)
					.@job$ = "Baby ";
				if (.job_rebirth&EAJL_THIRD)
					.@job$ = .@job$+"Third";
				else if (.job_rebirth&EAJL_2_1 || .job_rebirth&EAJL_2_2)
					.@job$ = .@job$+"Second";
				else if (.job_rebirth&EAJL_UPPER)
					.@job$ = .@job$+"1-1";
				mes "You need to be "+ ((.job_rebirth&EAJL_UPPER)?"Trans":"") +" "+ .@job$ +" Job";
				close;
			}

			mes "Items need :";
			CheckItemNeed(@rebirth_type);
			next;
			mes "^11E6D0[Rebirth System]^000000";
			deleteItem(@rebirth_type);
			break;
		case 3:
			next;
			mes "^11E6D0[Rebirth System]^000000";
			switch(.reset_opt){
				case 1:
				case 2:
					mes "Your BaseLevel,JobLevel"+ ((.reset_opt==1)?",Skills,StatPoints And Status":" And SkillPoints") +" will be Reset.";
					break;
				case 3:	
				case 4:				
					mes "You will be Changed to "+ ((.reset_opt==3)?"Base":"Job") +"Level 1 with JobLevel and Skills/Status Unaffected";
					break;
			}
			if (.job_rebirth&EAJL_BABY)
				.@job$ = "Baby ";
			if (.job_rebirth&EAJL_THIRD)
				.@job$ = .@job$+"Third";
			else if (.job_rebirth&EAJL_2_1 || .job_rebirth&EAJL_2_2)
				.@job$ = .@job$+"Second";
			else if (.job_rebirth&EAJL_UPPER)
				.@job$ = .@job$+"1-1";
			mes "You Should be "+ ((.job_rebirth&EAJL_UPPER)?"Trans":"") +" "+ .@job$ +" Job to be able to Rebirth.";
			if (.job_rebirth&EAJL_UPPER)
				.@trans = 1;
			if (.StatusN){ mes "You Get "+ .StatusN +" Extra Status point for every Rebirth"; }
			if (.ResetJob==2 || (.ResetJob==1 && !.@trans) || .@can_rebirth){ mes "You will become Novice Upon rebirth"; }
			else if ((.ResetJob==1 && .@trans) || (.ResetJob==3)){ mes "You will become High Novice Upon rebirth"; }
			else{ mes "Your Job will not change upon rebirth"; }
			next;
			mes "^11E6D0[Rebirth System]^000000";
			mes "For Rebirth, you may need some items.";
			CheckItemNeed(1,1);
			if (.MasterRebirth > 0){
				next;
				mes "^11E6D0[Rebirth System]^000000";
				mes "Upon Reaching "+ .MasterRebirth +" Rebirths, you can do Master Rebirth";
				if (.MaxRebirth[1]){ mes "You can do "+ .MaxRebirth[1] +" Master Rebirths Only"; }
				if (.StatusM){ mes "You Get "+ ((.StatusM)-(.StatusN * .MasterRebirth)) +" Extra Status point than Normal Rebirth for every Master Rebirth"; }
				mes "Master Rebirth Allows you to earn some powerful items.";
				next;
				mes "^11E6D0[Rebirth System]^000000";
				mes "For Master Rebirth, you may need some items.";
				CheckItemNeed(2,1);
			}
			close;
		case 4:
			mes "[Reset Stats]";
			mes "Reset Stats: "+ .ResetStat +"z";
			mes "Continue?";
			if (select("~ Yes, Reset Stat", "No, I don't want to reset") == 2)
				close;
			next;
			mes "[Reset Stats]";
			if (Zeny < .ResetStat) {
				mes "Sorry, you don't have enough Zeny.";
				close;
			}
			Zeny -= .ResetStat;
			resetstatus;
			StatusPoint = StatusPoint + (.StatusM * master_rebirth) + (.StatusN * rebirth_no);
			mes "There you go!";
			close;
		case 5:
			next;
			mes "^11E6D0[Rebirth System]^000000";
			mes "Bye.";
			close;
		case 6:
			next;
			mes "^11E6D0[Rebirth System]^000000";
			mes "Are you sure you want to reset Ranking?";
			mes "Once done, Action cannot be reverted.";
			if (select("Yes, Reset the Ranking:No, Let me think again.")==2){
				next;
				mes "^11E6D0[Rebirth System]^000000";
				mes "Thank you for using my service.";
				close;
			}
			next;
			query_sql "TRUNCATE TABLE `rebirth_system`";
			query_sql "DELETE FROM `char_reg_num_db` WHERE `key`='rebirth_no' OR `key`='master_rebirth'";
			query_sql "SELECT `account_id` from `char` where `online`=1", .@account_id;
			for (.@i=0; .@i < getarraysize(.@account_id); .@i++){
				if (attachrid(.@account_id[.@i])){
					if (rebirth_no){ rebirth_no = 0; }
					if (master_rebirth){ master_rebirth = 0; }
				}
			}
			deletearray .@account_id[0],getarraysize(.@account_id);
			mes "^11E6D0[Rebirth System]^000000";
			mes "Ranker Reset.";
			close;
			
	}
	if (@rebirth_type==1){rebirth_no += 1;}
	else{master_rebirth += 1; rebirth_no = rebirth_no - .MasterRebirth; }
	switch(.ResetJob){
		case 1: 
			if (!Upper){
				jobchange Job_Novice; break;
			}
		case 3: jobchange Job_Novice_High; break;
		case 2: jobchange Job_Novice; break;
		default: break;
	
	}
	//set BaseLevel,200;
	if (.reset_ss&1){resetstatus;}
	if (.reset_ss&2){resetskill;}
	query_sql "INSERT INTO `rebirth_system` (`char_id`,`name`,`rebirth_no`,`master_rebirth`) VALUES ("+getcharid(0)+",'"+strcharinfo(0)+"',"+rebirth_no+","+master_rebirth+") ON DUPLICATE KEY UPDATE `rebirth_no`="+rebirth_no+", `master_rebirth`="+master_rebirth+" ";
	getItemReward(@rebirth_type);
	if (.StatusN || .StatusM){
		StatusPoint = StatusPoint + (.StatusM * master_rebirth) + (.StatusN * rebirth_no);
	}
	mes "^11E6D0[Rebirth System]^000000";
	mes "You have taken Rebirth.";
	if (@rebirth_type==1){
		announce "[ Rebirth system ] : "+ strcharinfo(0) +" rebirth for the "+ rebirth_no +" time !", 0;
	}else{
		announce "[ Rebirth system ] : "+ strcharinfo(0) +" has done Master rebirth for "+ master_rebirth +" time !", 0;
	}
	close;

function deleteItem {
	for (.@i=0 ; .@i < .size_item; .@i += 3 ){
		if ( !( getarg(0)&(.item_req[.@i+2]) ) ){continue;}
		delitem .item_req[.@i], ( .item_req[ .@i+1 ]*(rebirth_no+1) );
	}
	return;
}

function CheckItemNeed {
	if ( Weight > 200000 ) {
		mes "You must reduce your weight to 2000 to do Rebirth.";
		close;
	}
	.@error = 0;
	for (.@i=0 ; .@i < .size_item; .@i += 3 ){
		if ( !( getarg(0)&(.item_req[.@i+2]) ) ){continue;}
		if ( countitem( .item_req[.@i] ) < .item_req[ .@i+1 ]*(rebirth_no+1) ) {
			mes "You Require [^ff0000"+countitem( .item_req[.@i] )+" / "+ .item_req[.@i+1]*(rebirth_no+1) +"^000000] ^112FD9"+getitemname( .item_req[.@i] )+"^000000";
			.@error = 1;
		}else{
			mes "You Require [^00ff00"+countitem( .item_req[.@i] )+" / "+ .item_req[.@i+1]*(rebirth_no+1) +"^000000] ^112FD9"+getitemname( .item_req[.@i] )+"^000000";
		}
	}
	if (.@error && !getarg(1,0)){close;}
	
	return;
}

function getItemReward {
	for (.@i=0 ; .@i < .size_reward; .@i += 4 ){
		if ( !( getarg(0)&( .reward[.@i+3] ) ) ) {continue;}
		if (rand(1,10000) <= .reward[.@i+2]){
			mes "You Got "+.reward[.@i+1]+" "+getitemname(.reward[.@i])+" ";
			getitem .reward[.@i], .reward[ .@i+1 ];
		}
	}
	next;
	return;
}

//OnNPCKillEvent:
//if( getmonsterinfo( killedrid,MOB_MVPEXP ) ){
	// if( getcharid(1) ){
	// 	getpartymember getcharid(1),2;
	// 	.@Name$ = $@partymembername$[ rand( $@partymembercount ) ];
	// }else{
	// 	.@Name$ = strcharinfo(0);
	// }
	//for (set .@a,0; .@a < getarraysize(.mvp_reward); set .@a, .@a+3){
	//	if(rand(0,99) < .mvp_reward[.@a+2]){
	//		getitem .mvp_reward[.@a], .mvp_reward[.@a+1];
	//	}
	//}
	// announce "[ "+( getcharid(1) ? "Party":"Player" )+" ] "+.@Name$+" has killed "+getmonsterinfo( killedrid,MOB_NAME )+" at "+strcharinfo(3),0;
//}
//end;
	
OnInit:

	bindatcmd("reborninfo",strnpcinfo(0)+"::OnCommand");

	waitingroom "Rebirth NPC",0,"",0;

	//MVP Kill Reward List <item[0], number of item[0], chance[0], item[1], number of item[1], chance[1], ...>
	setarray .mvp_reward[0], 60001,1,50,60002,1,100;

	// item required <item ID>, <number> , <1=NormalRebirth,2=MasterRebirth,3=ForBorthRebirths>
	setarray .item_req, 60001, 1, 1;

	.size_item = getarraysize( .item_req );
	// rewards <item ID>, <quantity>,<chance(10000=100%)>,<1=NormalRebirth,2=MasterRebirth,3=PriceForBothRebirths>
    // recalculates the chance and gives the next reward if chance is met.
	setarray .reward,80078,1,10000,1;
		.size_reward = getarraysize( .reward );	//Do not Change This
	.list = 10;		//Show Top x in Ranking
	/*
		EAJL_2_1: 2-1 Class
		EAJL_2_2: 2-2 Class
		EAJL_2: All Second Class
		EAJL_UPPER: All Trans Class
		EAJL_BABY: All Baby Class
		EAJL_THIRD: All Third Class
		Full List:
			EAJL_2_1|EAJL_UPPER: Trans 2-1 Class
			EAJL_2_2|EAJL_UPPER: Trans 2-2 Class
			EAJL_2|EAJL_UPPER: Trans Second Class
			
			EAJL_BABY|EAJL_2: All Second Baby Class
			(Same for 2_1/2_2/Upper as mentioned above)
			
			EAJL_THIRD|EAJL_2_1: 3-1 Class
			EAJL_THIRD|EAJL_2_2: 3-2 Class
			
			EAJL_THIRD|EAJL_2_1|EAJL_UPPER: Trans 3-1 Class
			EAJL_THIRD|EAJL_2_2|EAJL_UPPER: Trans 3-2 Class
			EAJL_THIRD|EAJL_2|EAJL_UPPER: Trans 3rd Class
			
			EAJL_THIRD|EAJL_2_1|EAJL_UPPER|EAJL_BABY: Baby Trans 3-1 Class
			... You can have any Combination of classes ...
			
			
	*/
	.job_rebirth = EAJL_2|EAJL_UPPER;							
	setarray .add_jobs[0],Job_Rebellion,Job_Gunslinger,				// Additional Jobs, who can rebirth
						  Job_Soul_Linker,
						  Job_Star_Gladiator,
						  Job_Taekwon;

	.ResetStat = 1000000000;									// Zeny needed for Resetting Stat
	.reset_opt = 1;										// (1=Reset Base and JobLevel to 1(0 skill points and all stats to 1),2=Reset Base and JobLevel to 1(SkillPoint=0, While Skills and stats are not affected),3=Reset BaseLevel to 1, 4=Reset Job Level to 1)
	.reset_ss = 3;										// (1=Reset Status, 2=Reset Skills, 3 = Reset Status and Skills).
	setarray .MaxRebirth[0],100,1;						// Maximum Number of Normal Rebirth/Master Rebirth.(0=Unlimited) 
	.ResetJob = 0;										// 0=Don't Change Job, Just Reset Level,1=Reset Job to Novice/Novice_High depending upon the job, 2=Force Reset to Novice, 3=Force Reset to Novice_High
	.MasterRebirth = 0;								// Number of rebirths require to do Master Rebirth. (0 to disable)
	.StatusN = 600;										// Status Point to Give at Every Normal Rebirth.
	.StatusM = (.StatusN * .MasterRebirth) + 600;		// Status Point to Give at Every Master Rebirth. (Don't Change initial part)
	.GMLevel = 99;										// Minimum GM Level to Reset the Ranking.
	
	query_sql "CREATE TABLE IF NOT EXISTS `rebirth_system` (  `char_id` int(11) NOT NULL default '0',  `name` varchar(24) NOT NULL DEFAULT 'NULL',  `rebirth_no` mediumint(6) NOT NULL default '0',  `master_rebirth` mediumint(6)  NOT NULL default '0',  PRIMARY KEY  (`char_id`)) ENGINE=MyISAM";
	end;

OnCommand:
	dispbottom "REBIRTH COUNTS: " + rebirth_no;
	dispbottom "+ 10% MaxHP Per Rebirth";
	dispbottom "+ 225 Max Weight Per Rebirth";
	dispbottom "+ 10M Break HP Limit Per Rebirth";
	dispbottom "+ 1 All Stats when Rebirth is 101";
	dispbottom "10M Max Damage when Rebirth 150";
	dispbottom "15M Max Damage when Rebirth 180";
	dispbottom "20M Max Damage when Rebirth 200";
	end;
}

How can I make it also working for expanded class . Example. Gunslinger,ninja,soul linker.

And also. When a character reset I want them to go back to a certain level. Level 50 maybe.

TIA guys. 

Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

  • Group:  Members
  • Topic Count:  6
  • Topics Per Day:  0.00
  • Content Count:  150
  • Reputation:   11
  • Joined:  12/03/18
  • Last Seen:  

On 11/4/2022 at 1:59 PM, rayleigh said:

How can I make it also working for expanded class . Example. Gunslinger,ninja,soul linker.

If I am no mistaken, these do not have rebirth classes. Only Transcendent classes require rebirth.

 

On 11/4/2022 at 1:59 PM, rayleigh said:

And also. When a character reset I want them to go back to a certain level. Level 50 maybe.

try going for set BaseLevel,50; after they achieve it

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  57
  • Topics Per Day:  0.01
  • Content Count:  220
  • Reputation:   0
  • Joined:  09/05/13
  • Last Seen:  

On 11/7/2022 at 9:53 AM, PsyOps said:

If I am no mistaken, these do not have rebirth classes. Only Transcendent classes require rebirth.

 

try going for set BaseLevel,50; after they achieve it

what if sir i want expanded class can reborn too. sorry i mean reborn not rebirth. 

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  6
  • Topics Per Day:  0.00
  • Content Count:  150
  • Reputation:   11
  • Joined:  12/03/18
  • Last Seen:  

10 hours ago, rayleigh said:

what if sir i want expanded class can reborn too. sorry i mean reborn not rebirth. 

Then you would have create your own npc for it.

That is the only way to do it

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  57
  • Topics Per Day:  0.01
  • Content Count:  220
  • Reputation:   0
  • Joined:  09/05/13
  • Last Seen:  

On 11/7/2022 at 9:53 AM, PsyOps said:

If I am no mistaken, these do not have rebirth classes. Only Transcendent classes require rebirth.

 

try going for set BaseLevel,50; after they achieve it

Hello. Need help on this. My character level is still at max 500/250,
I want it to go back at 250/250.

Help anyone? 

 

On 12/8/2022 at 10:27 AM, rayleigh said:

Hello. Need help on this. My character level is still at max 500/250,
I want it to go back at 250/250.

Help anyone? 

This is my main NPC
Its still going to max level b500/j250.

I want them to go back to b250/j250 and the same job after they rebirth. 

 

On 12/9/2022 at 6:00 PM, rayleigh said:

This is my main NPC
Its still going to max level b500/j250.

I want them to go back to b250/j250 and the same job after they rebirth. 

I did it ... removing // at the start of BaseLevel. 
Thank you @PsyOps.
But I got new problem. The reward is given every rebirth. I want it to be given only on the first rebirth and no reward for the next rebirths. 

Thank you again sir @PsyOps

Link to comment
Share on other sites

Join the conversation

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

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

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

×   Your previous content has been restored.   Clear editor

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

×
×
  • Create New...