summaryrefslogblamecommitdiff
path: root/npc/custom/jobs/jobmaster.txt
blob: ff364159a65eabffbd4068e089109323aaa74c8f (plain) (tree)
1
2
3
4
5
6
7
8
                                                              
              
                                                              
                                                    
                                                              
        
                                                              
                      








                                                                 
                                                                       
                                                              
 
                                                     








                                                                                          

































































                                                                                                                     
                                


















































                                                                                                                                                                        
                                              







                                                                                                                           
                         
                                                                                               
                                                  
                                                                   
                                                                                                         





                                                                      








                                                                                  
                                        

                                                                          

                                         



                                                          
                         

                              
         
                                                                    


















































                                                                    



                                                                   



                                                                    



                                                                    










                                                                                                             
 
//===== rAthena Script =======================================
//= Job Master
//===== By: ==================================================
//= rAthena Dev Team [Ori:LunatikBunnie] [Cur:Lance]
//===== Current Version: =====================================
//= 1.5a
//===== Compatible With: =====================================
//= rAthena SVN; 6674+
//===== Description: =========================================
//= Changes your job without asking too much
//= For other info, please contact me at Lunatikbunnie@gmail.com 
//= Editted menu to avoid button mashing.
//= 1.3 Added TK/SL/SG, thanks to Haplo. Fixed minor bugs [Lupus]
//=    script leaves grabage variable: 'lastJob'
//= 1.4 Added NJ/GS, changed all job numbers to Job_* constants. 
//=    All credits go to pxxx [Skotlex]
//= 1.5 Rewrite everything from scratch. [Lance]
//= 1.5a fixed Baby -> Super Baby change. Switched to JobName() [Lupus]
//============================================================

prontera,153,193,6	script	Job Master	123,{
	mes "^ff0000[Job Master]^000000";
	if(Upper == 1 && Class >= Job_Lord_Knight) goto L_noReq;
	if(SkillPoint != 0){
		mes "I'm sorry, please use up all your skill points before changing jobs";
		mes "Please come again soon!";
		close;
	}
	if(JobLevel < 10) goto L_LvError;
	switch(Class){
	case Job_Novice_High:
	case Job_Baby:
	case Job_Novice:
		skill 142,1,0;
		skill 143,1,0;
		mes "Welcome, please select the job you wish to change into";
		if(lastJob != 0 && Class == Job_Novice_High){
			switch(lastJob){
			case Job_Knight:
			case Job_Crusader:
				set @target_job, Job_Swordman_High;
				break;
			case Job_Monk:
			case Job_Priest:
				set @target_job, Job_Acolyte_High;
				break;
			case Job_Alchemist:
			case Job_Blacksmith:
				set @target_job, Job_Merchant_High;
				break;
			case Job_Rogue:
			case Job_Assassin:
				set @target_job, Job_Thief_High;
				break;
			case Job_Wizard:
			case Job_Sage:
				set @target_job, Job_Mage_High;
				break;
			case Job_Hunter:
			case Job_Bard:
			case Job_Dancer:
				set @target_job, Job_Archer_High;
				break;
			}
		} else {
			switch(select("Swordsman","Mage","Archer","Acolyte","Merchant","Thief",
			"Super Novice","Taekwon","Gunslinger","Ninja")){
			case 7:
				if(Class == Job_Novice_High) goto L_noReq;
				if($@JC_SupNovM > BaseLevel) goto L_BvError;
				if(Upper == 2)
				set @target_job, Job_Super_Baby;
				else
				set @target_job, Job_SuperNovice;
				break;
			case 8:
				if(Class == Job_Novice_High) goto L_noReq;
				if(Upper == 2) goto L_noReq;
				set @target_job, Job_Taekwon;
				break;
			case 9:
			case 10:
				if(Class == Job_Novice_High || Upper == 2) goto L_noReq;
				set @target_job, @menu + 15;
				break;
			default:
				set @target_job, @menu;
				if(Class == Job_Novice_High) set @target_job, @target_job + 4001;
				break;
			}
		}
		mes "Are you sure you want to change to " + JobName(@target_job) + "?";
		if(select("No","Yes") == 2){
			callfunc "Job_Change", @target_job;
			if(@target_job == Job_Gunslinger || @target_job == Job_Ninja || @target_job == Job_Taekwon) {
				callfunc "F_ClearJobVar";
			} else {
				if($@JC_Plat) goto L_GivePlat;
			}
		}
		close;
		break;
	default:
		if(JobLevel < $@JC_MinimumJB) goto L_LvError;
		deletearray @job_opt, getarraysize(@job_opt);
		if(Class < Job_Knight || Class == Job_Taekwon || (Class > Job_Baby && Class < Job_Baby_Knight) || (Class > Job_Novice_High && Class < Job_Lord_Knight)){
			if(lastJob != 0){
				set @target_job, lastJob + 4001;
			} else {
				switch(Class){
				case Job_Swordman_High:
				case Job_Baby_Swordman:
				case Job_Swordman:
					set @job_opt[0], Job_Knight;
					set @job_opt[1], Job_Crusader;
					break;
				case Job_Mage_High:
				case Job_Baby_Mage:
				case Job_Mage:
					set @job_opt[0], Job_Wizard;
					set @job_opt[1], Job_Sage;
					break;
				case Job_Archer_High:
				case Job_Baby_Archer:
				case Job_Archer:
					set @job_opt[0], Job_Hunter;
					if(Sex == 0)
					set @job_opt[1], Job_Dancer;
					else
					set @job_opt[1], Job_Bard;
					break;
				case Job_Acolyte_High:
				case Job_Baby_Acolyte:
				case Job_Acolyte:
					set @job_opt[0], Job_Priest;
					set @job_opt[1], Job_Monk;
					break;
				case Job_Merchant_High:
				case Job_Baby_Merchant:
				case Job_Merchant:
					set @job_opt[0], Job_Blacksmith;
					set @job_opt[1], Job_Alchemist;
					break;
				case Job_Thief_High:
				case Job_Baby_Thief:
				case Job_Thief:
					set @job_opt[0], Job_Assassin;
					set @job_opt[1], Job_Rogue;
					break;
				default:
					set @job_opt[0], Job_Star_Gladiator;
					set @job_opt[1], Job_Soul_Linker;
					break;
				}
				mes "Welcome, please select the job you wish to change into";
				set @target_job, @job_opt[select(JobName(@job_opt[0]), JobName(@job_opt[1]))-1];
				if(Class > Job_Novice_High && Class < Job_Lord_Knight) set @target_job, @target_job + 4001;
			}
			mes "Are you sure you want to change to " + JobName(@target_job) + "?";
			if(select("No","Yes")==2){
				callfunc "Job_Change", @target_job;
				if(@target_job == Job_Star_Gladiator || @target_job == Job_Soul_Linker) {
					callfunc "F_ClearJobVar";
				} else {
					if($@JC_Plat) goto L_GivePlat;
				}
			}
			close;
		}
		if(checkfalcon() || checkcart() || checkriding()) goto L_remove;
		if((Class >=Job_Knight) && (Class <=Job_Crusader2)){
			mes "Do you want to reborn?";
			if(select("Yes","No")==1){
				if(BaseLevel < 99 || JobLevel < 50) goto L_cantCh;
				set lastJob, Class;
				if(Class == Job_Knight2){
					set lastJob, Job_Knight;
				} else {
					if(Class == Job_Crusader2){
						set lastJob, Job_Crusader;
					}
				}
				jobchange Job_Novice_High;
				resetlvl(1);
				skill 142,1,0;
				skill 143,1,0;
			}
			close;
		}
	}
	mes "I'm sorry, there are no further classes for your job.";
	close;

L_GivePlat:
	if (BaseClass==Job_SuperNovice) goto L_sSuperN;
	if (BaseClass==Job_Swordman) goto L_sSword;
	if (BaseClass==Job_Mage) goto L_sMage;
	if (BaseClass==Job_Archer) goto L_sArcher;
	if (BaseClass==Job_Acolyte) goto L_sAcolyte;
	if (BaseClass==Job_Merchant) goto L_sMerchant;
	if (BaseClass==Job_Thief) goto L_sThief;
	close;
L_sSuperN:
	skill 142,1,0;
	close;
L_sSword:
	skill 142,1,0;
	skill 144,1,0;
	skill 145,1,0;
	skill 146,1,0;
	close;
L_sMage:
	skill 142,1,0;
	skill 157,1,0;
	close;
L_sArcher:
	skill 142,1,0;
	skill 147,1,0;
	skill 148,1,0;
	close;
L_sAcolyte:
	skill 142,1,0;
	skill 156,1,0;
	close;
L_sMerchant:
	skill 142,1,0;
	skill 153,1,0;
	skill 154,1,0;
	skill 155,1,0;
	close;
L_sThief:
	skill 142,1,0;
	skill 149,1,0;
	skill 150,1,0;
	skill 151,1,0;
	skill 152,1,0;
	close;

L_cantCh:
	mes "I'm sorry, you do not meet the requirements to change";
	mes "Please come again soon!";
	close;
L_LvError:
	mes "I'm sorry, you do not seem to have enough Job Levels";
	mes "Please come again soon!";
	close;
L_BvError:
	mes "I'm sorry, you do not seem to have enough Base Levels";
	mes "Please come again soon!";
	close;
L_noReq:
	mes "I'm sorry, you do not meet the requirements to change";
	mes "Please come again soon!";
	close;
L_remove:
	mes "Please remove your cart,falcon or peco";
	mes "Please come again soon!";
	close;

OnInit:
	// Variable Setup
	set $@JC_MinimumJB, 40; //Minimum job level for changing between 2nd and advance Class (Default : 40)
	set $@JC_Plat, 1; //Give Platinum skills on Jobchange (Default : 1-yes)
	set $@JC_SupNovM, 45; //Base Level to change into Super Novice (Default : 45)
	end;
}