Jump to content
  • 0

Rebirth NPC question


Question

Posted

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. 

4 answers to this question

Recommended Posts

  • 0
Posted
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

  • 0
Posted
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. 

  • 0
Posted
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

  • 0
Posted
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

Join the conversation

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

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

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

×   Your previous content has been restored.   Clear editor

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

  • Recently Browsing   0 members

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