Jump to content
  • 0

How to make rebirth system/change job work with rathena


tathanngudong

Question


  • Group:  Members
  • Topic Count:  20
  • Topics Per Day:  0.01
  • Content Count:  64
  • Reputation:   3
  • Joined:  04/17/15
  • Last Seen:  

i very like this system,but i don't know how to make this script work with Rathena sever

//== Function F_CoolDown ====================================
// Cooldown check
//callfunc("F_CoolDown", 5); = 5 seconds cooldown
function	script	F_CoolDown	{
	if (.@cd + getarg(0) > gettimetick(2))
		end;
	@cd = gettimetick(2);
	return;
}

//== Spawn - Char creation ==========================================
new_reborn,203,195,0	script	startpoint#new_reborn	HIDDEN_WARP_NPC,1,1,{
OnTouch:
	if (!newrebornchar && Class != Job_Summoner) { // spawn for non summoner classes
		specialeffect2(EF_ANGEL3);
		newrebornchar = 1;
	}
	callfunc("F_CoolDown", 60);
	sc_start SC_INCREASEAGI, 60000, 10; // apply increase agi +10 with 60 sec cooldown, buff lasts 60 secs
	end;
}

//== Job Master ==========================================
//== Main
new_reborn,1,2,0	script	Ascension#Main	FAKE_NPC,{
OnTalk:
	function Job_Menu; function A_An;

	if (Class > Job_Soul_Linker) {
		message strcharinfo(PC_NAME), "No more jobs are available.";
		end;
	}
	if (checkhomcall() == 0|| checkfalcon() || checkcart() || checkmount() || hascashmount()) {
		message strcharinfo(PC_NAME), "Please remove your "+((checkhomcall() == 0)?"homunculus ":"")+((checkfalcon())?"falcon ":"")+((checkcart())?"cart ":"")+((checkmount() || hascashmount())?"mount ":"") +"before proceeding.";
		end;
	}
	if (.skill_point_check && SkillPoint > 0) {
		message strcharinfo(PC_NAME), "Please use all your skill points before proceeding.";
		end;
	}
	.@eac = eaclass();
	.@base = .third_classes ? roclass(.@eac&EAJ_UPPERMASK) : Class;
	if (.@base >= Job_Knight && .@base <= Job_Crusader2) {
		if (BaseLevel < .rebirth_blevel || JobLevel < .rebirth_jlevel) {
			.@blvl = .rebirth_blevel - BaseLevel;
			.@jlvl = .rebirth_jlevel - JobLevel;
			message strcharinfo(PC_NAME), "You need "
			    + (BaseLevel < .rebirth_blevel ? ((.rebirth_blevel - BaseLevel) +" more base levels "+ (JobLevel < .rebirth_jlevel ? "and " : "")) : "")
			    + (JobLevel < .rebirth_jlevel ? (.rebirth_jlevel - JobLevel) +" more job levels " : "")
			    + "to continue.";
			end;
		}
		if (Class > Job_Crusader2) {
			mes "[Ascension Dimension]";
			mes "Switch to third class?";
			next;
			mes "[Ascension Dimension]";
			mes "^FF0000Reminder: Opting for the Official Job Change quest will allow you to get class specific headgears.^000000";
			next;
			Job_Menu(roclass(.@eac|EAJL_THIRD));
			close;
		}
		while (true) {
			mes "[Ascension Dimension]";
			mes "Select an option.";
			next;
			.@choice = select(" ~ ^0055FFRebirth^000000:"+": ~ ^777777Cancel^000000");
			if (.@choice == 3)
				close;
			mes "[Ascension Dimension]";
			mes "Are you sure?";
			next;
			if (.@choice == 1)
				Job_Menu(Job_Novice_High);
		}
	}
	.@job1 = roclass(.@eac|EAJL_2_1);
	.@job2 = roclass(.@eac|EAJL_2_2);
	if ((.@eac&EAJ_UPPERMASK) == EAJ_SUPER_NOVICE) {
		.@newclass = roclass(.@eac|EAJL_THIRD);
		.@required_jlevel = 99;
	} else if (Class == Job_Ninja) {
		.@newclass = .@job1;
		.@required_jlevel = 70;
	} else if (Class == Job_Gunslinger) {
		.@newclass = .@job1;
		.@required_jlevel = 70;
	}
	if (.@newclass && .third_classes) {
		if (BaseLevel < .rebirth_blevel || JobLevel < .@required_jlevel) {
			message strcharinfo(PC_NAME), "You need "
			    + (BaseLevel < .rebirth_blevel ? ((.rebirth_blevel - BaseLevel) +" more base levels "+ (JobLevel < .@required_jlevel ? "and " : "")) : "")
			    + (JobLevel < .@required_jlevel ? (.@required_jlevel - JobLevel) +" more job levels " : "")
			    + "to continue.";
			end;
		}
		mes "[Ascension Dimension]";
		mes "Switch to "+jobname(.@newclass)+"?";
		next;
		Job_Menu(.@newclass);
		close;
	}
	if (.@eac&EAJL_2)
		if (.@eac&(EAJL_UPPER|EAJL_BABY) || roclass(.@eac|EAJL_UPPER) == -1) {
			message strcharinfo(PC_NAME), "No more jobs are available.";
			end;
		}
	if ((.@eac&EAJ_BASEMASK) == EAJ_NOVICE) {
		if (JobLevel < .jobchange_first) {
			message strcharinfo(PC_NAME), "A job level of "+.jobchange_first+" is required to change into the 1st Class.";
			end;
		} else if (Class == Job_Novice_High && .linear_jobchange && lastJob) {
			mes "[Ascension Dimension]";
			mes "Switch classes now?";
			next;
			Job_Menu(roclass((eaclass(lastJob)&EAJ_BASEMASK)|EAJL_UPPER));
		} else if (Class == Job_Novice) {
			switch(@newborn) {
			case 1:
				Job_Menu(Job_Swordman);
				break;
			case 2:
				Job_Menu(Job_Mage);
				break;
			case 3:
				Job_Menu(Job_Archer);
				break;
			case 4:
				Job_Menu(Job_Acolyte);
				break;
			case 5:
				Job_Menu(Job_Merchant);
				break;
			case 6:
				Job_Menu(Job_Thief);
				break;
			case 7:
				Job_Menu(Job_SuperNovice, Job_Taekwon, Job_Gunslinger, Job_Ninja, Job_Baby);
				break;
			}
		} else if (Class == Job_Novice_High) {
			switch(@newborn) {
			case 1:
				Job_Menu(Job_Swordman_High);
				break;
			case 2:
				Job_Menu(Job_Mage_High);
				break;
			case 3:
				Job_Menu(Job_Archer_High);
				break;
			case 4:
				Job_Menu(Job_Acolyte_High);
				break;
			case 5:
				Job_Menu(Job_Merchant_High);
				break;
			case 6:
				Job_Menu(Job_Thief_High);
				break;
			}
		} else if (Class == Job_Baby) {
			if (@newborn != 7) {
				message strcharinfo(PC_NAME), "You are not supposed to be here, young adventurer..";
				warp "new_reborn", 207, 202;
				end;
			}
			Job_Menu(Job_Baby_Swordman, Job_Baby_Mage, Job_Baby_Archer, Job_Baby_Acolyte, Job_Baby_Merchant, Job_Baby_Thief, Job_Super_Baby);
		} else {
			message strcharinfo(PC_NAME), "An error has occurred.";
			end;
		}
		close;
	}
	if (roclass(.@eac|EAJL_2_1) == -1 || roclass(.@eac|EAJL_2_2) == -1) {
		message strcharinfo(PC_NAME),  "No more jobs are available.";
		end;
	} else if (!(.@eac&EAJL_2) && JobLevel < .jobchange_second) {
		message strcharinfo(PC_NAME), "A job level of "+.jobchange_second+" is required to change into the 2nd Class.";
		end;
	} else if (.linear_jobchange && lastJob && (.@eac&EAJL_UPPER)) {
		mes "[Ascension Dimension]";
		mes "Switch classes now?";
		next;
		Job_Menu(lastJob+Job_Novice_High);
	} else {
		Job_Menu(.@job1, .@job2);
	}
	close;

function Job_Menu {
	while (true) {
		if (getargcount() > 1) {
			mes "Select a job.";
			.@menu$ = "";
			for (.@i = 0; .@i < getargcount(); ++.@i)
				.@menu$ += " ~ "+jobname(getarg(.@i))+":";
			.@menu$ += " ~ ^777777Cancel^000000";
			next;
			.@newjob = getarg(select(.@menu$)-1, 0);
			if (!.@newjob)
				close;
			if ((.@newjob == Job_SuperNovice || .@newjob == Job_Super_Baby) && BaseLevel < .supernovice_level) {
				mes "[Extended Master]";
				mes "A base level of "+.supernovice_level+" is required to turn into a "+jobname(.@newjob)+".";
				close;
			}
			mes "[Ascension Dimension]";
			mes "Are you sure?";
			next;
		} else {
			.@newjob = getarg(0);
		}
		if (select(" ~ Change into ^0055FF"+jobname(.@newjob)+"^000000 class: ~ ^777777"+(getargcount() > 1 ? "Go back" : "Cancel")+"^000000") == 1) {
			mes "[Ascension Dimension]";
			mes "You now become "+A_An(jobname(.@newjob))+"!";
			close2;
			specialeffect2 EF_MAPPILLAR;
			progressbar "FFFF00",7;
			specialeffect2 EF_LORD;
			sc_start SC_INC_AGI, 60000, 10;
			if (.@newjob == Job_Novice_High && .linear_jobchange)
				lastJob = Class; // Note: This is incompatible with the Valkyrie rebirth script.
			jobchange .@newjob;
			mapannounce "new_reborn","Ascension Dimension: "+strcharinfo(PC_NAME)+" has become "+A_An(jobname(.@newjob))+"!",bc_map;
			if (.@newjob == Job_Novice_High)
				resetlvl(1);
			if (.@newjob == Job_Baby) {
				resetlvl(4);
				SkillPoint = 0;
			}
			callsub Get_Novice_Equip;
			if (.platinum)
				callsub Get_Platinum;
			end;
		}
		if (getargcount() == 1)
			return;
		mes "[Ascension Dimension]";
	}
	end;
}

function A_An {
	setarray .@vowels$, "a", "e", "i", "o", "u";
	.@firstletter$ = strtolower(charat(getarg(0), 0));
	for (.@i = 0; .@i < getarraysize(.@vowels); ++.@i) {
		if (.@vowels$[.@i] == .@firstletter$)
			return "an "+getarg(0);
	}
	return "a "+getarg(0);
}

Get_Platinum:
	skill NV_FIRSTAID, 1, 0;
	if (BaseClass == Job_Novice) {
		if (Class != Job_SuperNovice)
			skill NV_TRICKDEAD, 1, 0;
	} else if (BaseClass == Job_Swordman) {
		skill SM_MOVINGRECOVERY, 1, 0;
		skill SM_FATALBLOW, 1, 0;
		skill SM_AUTOBERSERK, 1, 0;
	} else if (BaseClass == Job_Mage) {
		skill MG_ENERGYCOAT, 1, 0;
	} else if (BaseClass == Job_Archer) {
		skill AC_MAKINGARROW, 1, 0;
		skill AC_CHARGEARROW, 1, 0;
	} else if (BaseClass == Job_Acolyte) {
		skill AL_HOLYLIGHT, 1, 0;
	} else if (BaseClass == Job_Merchant) {
		skill MC_CARTREVOLUTION, 1, 0;
		skill MC_CHANGECART, 1, 0;
		skill MC_LOUD, 1, 0;
		skill MC_CARTDECORATE, 1, 0;
	} else if (BaseClass == Job_Thief) {
		skill TF_SPRINKLESAND, 1, 0;
		skill TF_BACKSLIDING, 1, 0;
		skill TF_PICKSTONE, 1, 0;
		skill TF_THROWSTONE, 1, 0;
	}

	if (BaseJob == Job_Knight) {
		skill KN_CHARGEATK, 1, 0;
	} else if (BaseJob == Job_Priest) {
		skill PR_REDEMPTIO, 1, 0;
	} else if (BaseJob == Job_Wizard) {
		skill WZ_SIGHTBLASTER, 1, 0;
	} else if (BaseJob == Job_Blacksmith) {
		skill BS_UNFAIRLYTRICK, 1, 0;
		skill BS_GREED, 1, 0;
	} else if (BaseJob == Job_Hunter) {
		skill HT_PHANTASMIC, 1, 0;
	} else if (BaseJob == Job_Assassin) {
		skill AS_SONICACCEL, 1, 0;
		skill AS_VENOMKNIFE, 1, 0;
	} else if (BaseJob == Job_Crusader) {
		skill CR_SHRINK, 1, 0;
	} else if (BaseJob == Job_Monk) {
		skill MO_KITRANSLATION, 1, 0;
		skill MO_BALKYOUNG, 1, 0;
	} else if (BaseJob == Job_Sage) {
		skill SA_CREATECON, 1, 0;
		skill SA_ELEMENTWATER, 1, 0;
		skill SA_ELEMENTGROUND, 1, 0;
		skill SA_ELEMENTFIRE, 1, 0;
		skill SA_ELEMENTWIND, 1, 0;
	} else if (BaseJob == Job_Rogue) {
		skill RG_CLOSECONFINE, 1, 0;
	} else if (BaseJob == Job_Alchemist) {
		skill AM_BIOETHICS, 1, 0;
	} else if (BaseJob == Job_Bard) {
		skill BA_PANGVOICE, 1, 0;
	} else if (BaseJob == Job_Dancer) {
		skill DC_WINKCHARM, 1, 0;
	}
	return;

Get_Novice_Equip:
	if (Class <= Job_Thief || Class == Job_Ninja || Class == Job_Gunslinger || Class == Job_Taekwon) { // for all standard jobs **I set it here to give +7 novi equips
		getitem2(N_Adventurers_Suit, 1, 1, 7, 0, 0, 0 ,0, 0); // +7 novi equips and 2 battle manual 25
		getitem2(Shoes, 1, 1, 7, 0, 0, 0 ,0, 0);
		getitem2(Muffler, 1, 1, 7, 0, 0, 0 ,0, 0);
		getitem(Battle_Manual25, 2);
		if (Class != Job_Archer) {
			getitem2(Guard_, 1, 1, 7, 0, 0, 0 ,0, 0);
		}
	}
	if (Class == Job_Swordman || Class == Job_Baby_Swordman) {
		getitem2(N_Falchion, 1, 1, 7, 0, 0, 0 ,0, 0); // +7 novi falchion
	}
	if (Class == Job_Mage || Class == Job_Baby_Mage) {
		getitem2(N_Rod, 1, 1, 7, 0, 0, 0 ,0, 0); // +7 novi rod
	}
	if (Class == Job_Archer || Class == Job_Baby_Archer) {
		getitem2(N_Composite_Bow, 1, 1, 7, 0, 0, 0 ,0, 0); // and so on
		getitem Arrow_Container, 1;
		getitem Fire_Arrow_Container, 1;
		getitem Silver_Arrow_Container, 1;
	}
	if (Class == Job_Acolyte || Class == Job_Baby_Acolyte) {
		getitem2(N_Mace, 1, 1, 7, 0, 0, 0 ,0, 0);
	}
	if (Class == Job_Merchant || Class == Job_Baby_Merchant) {
		getitem2(N_Battle_Axe, 1, 1, 7, 0, 0, 0 ,0, 0);
	}
	if (Class == Job_Thief || Class == Job_Baby_Thief || Class == Job_Ninja) {
		getitem2(N_Main_Gauche, 1, 1, 7, 0, 0, 0 ,0, 0);
	}
	if (Class == Job_Gunslinger) {
		getitem2(Novice_Revolver, 1, 1, 7, 0, 0, 0 ,0, 0);
		getitem Bullet_Case, 1;
		getitem Bullet_Case_Silver, 1;
	}
	return;
end;

OnInit:
	.rebirth_blevel = 99;    // Minimum base level to reborn OR change to third class
	.rebirth_jlevel = 50;    // Minimum base job level to reborn OR change to third class
	.jobchange_first = 10;   // Minimum job level to turn into 1st class
	.jobchange_second = 40;  // Minimum job level to turn into 2nd class
	.third_classes = 1;      // Enable third classes? (1: yes / 0: no)
	.supernovice_level = 45; // Minimum base level to turn into Super Novice
	.linear_jobchange = 1;   // Enforce linear class changes? (1: yes / 0: no)
	.skill_point_check = 1;  // Force player to use up all skill points? (1: yes / 0: no)
	.platinum = 1;           // Get platinum skills automatically? (1: yes / 0: no)
	end;
}

//== Swordsman (South-West) 137 158
new_reborn,137,158,0	script	Ascension#1	HIDDEN_WARP_NPC,2,2,{
	if (atoi(strnpcinfo(NPC_NAME_HIDDEN)) == 7) {
		if (BaseClass == Job_Novice || BaseClass == Job_Baby || BaseClass == Job_Ninja || BaseClass == Job_Gunslinger || BaseClass == Job_Taekwon) {
			@newborn = atoi(strnpcinfo(NPC_NAME_HIDDEN));
			doevent "Ascension#Main::OnTalk";
			end;
		}
	}
	callfunc("F_CoolDown", 4); // 4 sec cooldown
	npctalk "Only Novices, Ninjas, Gunslinger and Babies can use my services.";
	end;

OnTouch:
	callfunc("F_CoolDown", 5); // 5 sec cooldown
	@newborn = atoi(strnpcinfo(NPC_NAME_HIDDEN));
	if (atoi(strnpcinfo(NPC_NAME_HIDDEN)) != BaseClass && BaseClass != Job_Novice) {
		message strcharinfo(PC_NAME), "You are not supposed to be here, young adventurer..";
		switch(BaseClass) { // warp players depending on their job
		case 0:
			break;
		case 1:
			warp "new_reborn", 187, 186;
			end;
		case 2:
			warp "new_reborn", 218, 205;
			end;
		case 3:
			warp "new_reborn", 220, 185;
			end;
		case 4:
			warp "new_reborn", 203, 215;
			end;
		case 5:
			warp "new_reborn", 187, 204;
			end;
		case 6:
			warp "new_reborn", 203, 175;
			end;
		case 23:
		case 24:
		case 25:
		case 4023:
		case 4024:
		case 4025:
		case 4026:
		case 4027:
		case 4028:
		case 4029:
		case 4045:
		case 4046:
			warp "new_reborn", 207, 202;
			end;
		}
	}
	doevent "Ascension#Main::OnTalk";
	end;
}

//== Magician (North-East) 268 234
new_reborn,268,234,0	duplicate(Ascension#1)	Ascension#2	HIDDEN_WARP_NPC,2,2
//== Archer (South-East) 268 157
new_reborn,268,157,0	duplicate(Ascension#1)	Ascension#3	HIDDEN_WARP_NPC,2,2
//== Acolyte (North) 202 271
new_reborn,202,271,3	duplicate(Ascension#1)	Ascension#4	HIDDEN_WARP_NPC,2,2
//== Merchant (Notrh-West) 137 232
new_reborn,137,232,0	duplicate(Ascension#1)	Ascension#5	HIDDEN_WARP_NPC,2,2
//==Thief (South) 202 119
new_reborn,202,119,0	duplicate(Ascension#1)	Ascension#6	HIDDEN_WARP_NPC,2,2
//== Expanded Classes + Baby
new_reborn,209,206,3	duplicate(Ascension#1)	Expanded Master#7	4_F_KHALITZBURG


//== Waitingrooms ========================================
new_reborn,203,209,4	script	#Acolyte	4_F_ACOLYTE,{
	mes("Follow this path for all "+strnpcinfo(NPC_NAME_HIDDEN)+" related class changes.");
	close();

OnInit:
    waitingroom strnpcinfo(NPC_NAME_HIDDEN), 0;
	end;
}

new_reborn,215,202,3	duplicate(#Acolyte)	#Magician	4_M_ARUNA_NFM1
new_reborn,215,188,3	duplicate(#Acolyte)	#Archer	4_M_ARCHER
new_reborn,203,183,0	duplicate(#Acolyte)	#Thief	2_M_THIEFMASTER
new_reborn,191,189,5	duplicate(#Acolyte)	#Swordsman	2_M_SWORDMASTER
new_reborn,191,201,5	duplicate(#Acolyte)	#Merchant	1_F_MERCHANT_01

//== Warps ===============================================
//== To Pront
new_reborn,196,206,4	script	Exit#nr1	1_SHADOW_NPC,1,1,{
	end;

OnInit:
    .rotate = 1; // rotate? 1 = yes, 0 = no **Attention, this is an infinite loop
	.message$ = "Exit"; // text for rotating waitingroom
	if (.rotate) {
		while (true) {
			.message$ = delchar(.message$ + charat(.message$, 0), 0);
			delwaitingroom;
			waitingroom .message$, 0;
			sleep 500; // reduce or increase for rotation speed. The lower the faster the more ressource eating.
		}
	} else {
		waitingroom "Exit", 0; // else name for chatroom,
	}
	end;

OnTouch:
	specialeffect2 EF_AGIUP2;
	specialeffect2 EF_JUMPBODY;
	sleep2 1000;
	warp "prontera", 156, 176;
	end;
}

//== To Ascending Dimension
prontera,149,175,0	script	Novi Area#novi2	1_SHADOW_NPC,1,1,{
	end;


OnInit:
	.rotate = 1; // rotate? 1 = yes, 0 = no **Attention, this is an infinite loop
	.message$ = "Ascending Dimension - Job Master "; // text for rotating waitingroom
	if (.rotate) {
		while (true) {
			.message$ = delchar(.message$ + charat(.message$, 0), 0);
			delwaitingroom;
			waitingroom .message$, 0;
			sleep 500; // reduce or increase for rotation speed. The lower the faster the more ressource eating.
		}
	} else {
		waitingroom "Job Master", 0; // else name for chatroom,
	}
	end;

OnTouch:
	specialeffect2 EF_AGIUP2;
	specialeffect2 EF_JUMPBODY;
	sleep2 1000;
	warp "new_reborn", 203, 195;
	end;
}

//== Mobs ================================================
new_reborn,203,195,8,8	monster	Failed Ascendant	1002,2,5000,0,0 // spawn some mobs in the center
new_reborn,203,195,8,8	monster	Failed Ascendant	1007,2,5000,0,0
new_reborn,203,195,8,8	monster	Failed Ascendant	1063,2,5000,0,0

//== Mapflags ============================================
new_reborn	mapflag	noskill
new_reborn	mapflag	nomemo
new_reborn	mapflag	noteleport
new_reborn	mapflag	novending
new_reborn	mapflag	nowarpto
new_reborn	mapflag	nobranch
new_reborn	mapflag	town
//new_reborn	mapflag	noafk

i want rebirth when job 2nd class max base/job... and change job when high novice and high 1st class max lv base/job... 
 

Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

  • Group:  Members
  • Topic Count:  1
  • Topics Per Day:  0.00
  • Content Count:  6
  • Reputation:   2
  • Joined:  02/10/18
  • Last Seen:  

//===== rAthena Script =======================================
//= Job Master
//===== By: ==================================================
//= Euphy
//===== Current Version: =====================================
//= 1.3
//===== Compatible With: ===================================== 
//= rAthena SVN r16114+
//===== Description: =========================================
//= A fully functional job changer.
//===== Additional Comments: =================================  
//= 1.1 Fixed reset on Baby job change. [Euphy]
//= 1.2 Added Expanded Super Novice support and initial Kagerou/Oboro support. [Euphy]
//= 1.3 Kagerou/Oboro added. [Euphy]
//============================================================

payon,166,97,6	script	Job Master	113,{
function Job_Menu; function A_An;

	mes "[Job Master]";
	if (Class > 4049) {
		mes "No more jobs are available.";
		close; }
	if (checkfalcon() || checkcart() || checkriding() || ismounting()) {
		mes "Please remove your "+((checkfalcon())?"falcon":"")+((checkcart())?"cart":"")+((checkriding())?"Peco":"")+((ismounting())?"mount":"")+" before proceeding.";
		close; }
	if (.SkillPointCheck && SkillPoint) {
		mes "Please use all your skill points before proceeding.";
		close; }

	set .@eac, eaclass();
	set .@i, ((.ThirdClass)?roclass(.@eac&EAJ_UPPERMASK):Class);
	if (.@i > 6 && .@i < 22) {
		if (BaseLevel < .Rebirth[0] || JobLevel < .Rebirth[1]) {
			set .@blvl, .Rebirth[0]-BaseLevel; set .@jlvl, .Rebirth[1]-JobLevel;
			mes "You need "+((.@blvl>0)?.@blvl+" more base levels "+((.@jlvl>0)?"/ ":""):"")+((.@jlvl>0)?.@jlvl+" more job levels ":"")+"to continue.";
			close; }
		if (Class > 21) {
			mes "Switch to third class?";
			next;
			Job_Menu(roclass(.@eac|EAJL_THIRD));
			close; }
		while(1) {
			mes "Select an option.";
			next;
			set .@i, select(" ~ ^0055FFRebirth^000000: ~ ^777777Cancel^000000");
			if (.@i==3) close;
			mes "[Job Master]";
			mes "Are you sure?";
			next;
			Job_Menu(((.@i==1)?4001:roclass(.@eac|EAJL_THIRD)));
			mes "[Job Master]"; } }
	set .@j1, roclass(.@eac|EAJL_2_1); set .@j2,roclass(.@eac|EAJL_2_2);
	if ((.@eac&EAJ_UPPERMASK) == EAJ_SUPER_NOVICE) setarray .@exp[0],roclass(.@eac|EAJL_THIRD),99;
	if (Class == Job_Ninja) setarray .@exp[0],.@j1,70;
	if (.@exp[0] && .ThirdClass) {
		if (BaseLevel < .Rebirth[0] || JobLevel < .@exp[1]) {
			set .@blvl, .Rebirth[0]-BaseLevel; set .@jlvl, .@exp[1]-JobLevel;
			mes "You need "+((.@blvl>0)?.@blvl+" more base levels "+((.@jlvl>0)?"/ ":""):"")+((.@jlvl>0)?.@jlvl+" more job levels ":"")+"to continue.";
			close; }
		mes "Switch to "+jobname(.@exp[0])+"?";
		next;
		Job_Menu(.@exp[0]);
		close; }
	if (.@eac&EAJL_2)
		if (.@eac&(EAJL_UPPER|EAJL_BABY) || roclass(.@eac|EAJL_UPPER) == -1) {
			mes "No more jobs are available.";
			close; }
	if ((.@eac&EAJ_BASEMASK) == EAJ_NOVICE) {
		if (JobLevel < .JobReq[0])
			mes "A job level of "+.JobReq[0]+" is required to change into the 1st Class.";
		else if (Class == 4001 && .LastJob && lastJob) {
			mes "Switch classes now?";
			next;
			Job_Menu(roclass((eaclass(lastJob)&EAJ_BASEMASK)|EAJL_UPPER)); }
		else switch(Class) {
			case 0: Job_Menu(1,2,3,4,5,6,23,4046,24,25,4023);
			case 4001: Job_Menu(4002,4003,4004,4005,4006,4007);
			case 4023: Job_Menu(4024,4025,4026,4027,4028,4029,4045);
			default: mes "An error has occurred."; break; }
		close; }
	if (roclass(.@eac|EAJL_2_1) == -1 || roclass(.@eac|EAJL_2_2) == -1)
		mes "No more jobs are available.";
	else if (!(.@eac&EAJL_2) && JobLevel < .JobReq[1])
		mes "A job level of "+.JobReq[1]+" is required to change into the 2nd Class.";
	else if (.LastJob && lastJob && (.@eac&EAJL_UPPER)) {
		mes "Switch classes now?";
		next;
		Job_Menu(lastJob+4001); }
	else Job_Menu(.@j1,.@j2);
	close;

function Job_Menu {
	while(1) {
		if (getargcount() > 1) {
			mes "Select a job.";
			set .@menu$,"";
			for(set .@i,0; .@i<getargcount(); set .@i,.@i+1)
				set .@menu$, .@menu$+" ~ "+jobname(getarg(.@i))+":";
			set .@menu$, .@menu$+" ~ ^777777Cancel^000000";
			next;
			set .@i, getarg(select(.@menu$)-1,0);
			if (!.@i) close;
			if ((.@i == 23 || .@i == 4045) && BaseLevel < .SNovice) {
				mes "[Job Master]";
				mes "A base level of "+.SNovice+" is required to turn into a "+jobname(.@i)+".";
				close; }
			mes "[Job Master]";
			mes "Are you sure?";
			next; }
		else set .@i, getarg(0);
		if (select(" ~ Change into ^0055FF"+jobname(.@i)+"^000000 class: ~ ^777777"+((getargcount() > 1)?"Go back":"Cancel")+"^000000")==1) {
			mes "[Job Master]";
			mes "You are now "+A_An(jobname(.@i))+"!";
			if (.@i==4001 && .LastJob) set lastJob, Class;
			jobchange .@i;
			if (.@i==4001 || .@i==4023) resetlvl(1);
			//set StatusPoint,StatusPoint + 4891;
			specialeffect2 338; specialeffect2 432;
			if (.Platinum) callsub Get_Platinum;
			close; }
		if (getargcount() == 1) return;
		mes "[Job Master]"; }
	end; }

function A_An {
	setarray .@A$[0],"a","e","i","o","u";
	set .@B$, "_"+getarg(0);
	for(set .@i,0; .@i<5; set .@i,.@i+1)
		if (compare(.@B$,"_"+.@A$[.@i])) return "an "+getarg(0);
	return "a "+getarg(0); }

Get_Platinum:
	skill 142,1,0;
	switch(BaseClass) {
		case 0: if (Class !=23) skill 143,1,0; break;
		case 1: skill 144,1,0; skill 145,1,0; skill 146,1,0; break;
		case 2: skill 157,1,0; break;
		case 3: skill 147,1,0; skill 148,1,0; break;
		case 4: skill 156,1,0; break;
		case 5: skill 153,1,0; skill 154,1,0; skill 155,1,0; break;
		case 6: skill 149,1,0; skill 150,1,0; skill 151,1,0; skill 152,1,0; break;
		default: break; }
	switch(roclass(eaclass()&EAJ_UPPERMASK)) {
		case 7: skill 1001,1,0; break;
		case 8: skill 1014,1,0; break;
		case 9: skill 1006,1,0; break;
		case 10: skill 1012,1,0; skill 1013,1,0; break;
		case 11: skill 1009,1,0; break;
		case 12: skill 1003,1,0; skill 1004,1,0; break;
		case 14: skill 1002,1,0; break;
		case 15: skill 1015,1,0; skill 1016,1,0; break;
		case 16: skill 1007,1,0; skill 1008,1,0; skill 1017,1,0; skill 1018,1,0; skill 1019,1,0; break;
		case 17: skill 1005,1,0; break;
		case 18: skill 238,1,0; break;
		case 19: skill 1010,1,0; break;
		case 20: skill 1011,1,0; break;
		default: break; }
	return;

OnInit:
	setarray .Rebirth[0],99,50;	// Minimum base level, job level to rebirth OR change to third class
	setarray .JobReq[0],10,40;	// Minimum job level to turn into 1st class, 2nd class
	set .ThirdClass,0;		// Enable third classes? (1: yes / 0: no)
	set .SNovice,45;		// Minimum base level to turn into Super Novice
	set .LastJob,1;			// Enforce linear class changes? (1: yes / 0: no)
	set .SkillPointCheck,0;		// Force player to use up all skill points? (1: yes / 0: no)
	set .Platinum,1;		// Get platinum skills automatically? (1: yes / 0: no)
	end;
}

 

Here's a working job changer. Credits to Euphy in making this script :)

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...