Hi, I tried to edit the scripts you guys gave me and got this script.
there's no error but I can't click the NPC. Anyone can help me with this?
I made the 2 scripts as a function then the main npc will call on them depending if they already got the autojob or not.
//===== rAthena Script =======================================
//= Job Master
//===== By: ==================================================
//= Euphy
//===== Current Version: =====================================
//= 1.4
//===== Compatible With: =====================================
//= rAthena Project
//===== Description: =========================================
//= A fully functional job changer.
//===== Additional Comments: =================================
//= 1.0 Initial script.
//= 1.1 Fixed reset on Baby job change.
//= 1.2 Added Expanded Super Novice support and initial Kagerou/Oboro support.
//= 1.3 Kagerou/Oboro added.
//= 1.4 Rebellion added.
//============================================================
prontera,153,193,6 script Job Master 923,{
if (#auto == 0) { callfunc "autojob"; }
else { callfunc "Class Master"; }
}
function script autojob {
OnInit:
setarray .JobList[0],4060,4061,4062,4063,4064,4065,4015,4073,4074,4075,4076,4077,4078,4079;
.BaseLevel = 175; // change to 1
.JobLevel = 60; // change to 1
.SkillPoints = 127; // just remove this
[email protected] = getarraysize( .JobList );
for(
[email protected] = 0;
[email protected] <
[email protected];
[email protected]++ )
.Menu$ = .Menu$ + jobname( .JobList[
[email protected]] )+":";
end;
if( Class != 0 ){
mes "You are not a novice!";
}else{
[email protected] = select( .Menu$ ) - 1;
if( select( "Change to "+jobname( .JobList[
[email protected]] )+"?:Cancel" ) == 1 ){
jobchange .JobList[
[email protected]];
BaseLevel = .BaseLevel;
JobLevel = .JobLevel;
SkillPoint = .SkillPoints; // you can comment this out to get no skill points
set #auto, 1;
mes "DONE";
}
}
end;
} //end autojob
function script Class Master {
function Job_Menu;
mes "[Job Master]";
if (Class > Job_Soul_Linker) {
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;
}
[email protected] = eaclass();
[email protected] = ((.ThirdClass) ? roclass(
[email protected]&EAJ_UPPERMASK) : Class);
if (
[email protected] >= Job_Knight &&
[email protected] <= Job_Crusader2) {
if (BaseLevel < .Rebirth[0] || JobLevel < .Rebirth[1]) {
[email protected] = .Rebirth[0] - BaseLevel;
[email protected] = .Rebirth[1] - JobLevel;
mes "You need " +
((
[email protected] > 0) ?
[email protected] + " more base levels " + ((
[email protected] > 0) ? "/ " : "") : "") +
((
[email protected] > 0) ?
[email protected] + " more job levels " : "") + "to continue.";
close;
}
if (Class > Job_Crusader2) {
mes "Switch to third class?";
next;
Job_Menu(roclass(
[email protected]|EAJL_THIRD));
close;
}
while(1) {
mes "Select an option.";
next;
[email protected] = select(" ~ ^0055FFRebirth^000000:" + ((.ThirdClass) ? " ~ ^FF0000Third Class^000000" : "") + ": ~ ^777777Cancel^000000");
if (
[email protected] == 3)
close;
mes "[Job Master]";
mes "Are you sure?";
next;
Job_Menu(((
[email protected] == 1) ? Job_Novice_High : roclass(
[email protected]|EAJL_THIRD)));
mes "[Job Master]";
}
}
[email protected] = roclass(
[email protected]|EAJL_2_1);
[email protected] = roclass(
[email protected]|EAJL_2_2);
if ((
[email protected]&EAJ_UPPERMASK) == EAJ_SUPER_NOVICE)
setarray
[email protected][0], roclass(
[email protected]|EAJL_THIRD), 99;
if (Class == Job_Ninja || Class == Job_Gunslinger)
setarray
[email protected][0],
[email protected], 70;
if (
[email protected][0] && .SecondExpanded) {
if (BaseLevel < .Rebirth[0] || JobLevel <
[email protected][1]) {
[email protected] = .Rebirth[0] - BaseLevel;
[email protected] =
[email protected][1] - JobLevel;
mes "You need " +
((
[email protected] > 0) ?
[email protected] + " more base levels " + ((
[email protected] > 0) ? "/ " : "") : "") +
((
[email protected] > 0) ?
[email protected] + " more job levels " : "") + "to continue.";
close;
}
mes "Switch to " + jobname(
[email protected][0]) + "?";
next;
Job_Menu(
[email protected][0]);
close;
}
if (
[email protected]&EAJL_2)
if (
[email protected]&(EAJL_UPPER|EAJL_BABY) || roclass(
[email protected]|EAJL_UPPER) == -1) {
mes "No more jobs are available.";
close;
}
if ((
[email protected]&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 == Job_Novice_High && .LastJob && lastJob) {
mes "Switch classes now?";
next;
Job_Menu(roclass((eaclass(lastJob)&EAJ_BASEMASK)|EAJL_UPPER));
} else {
switch(Class) {
case Job_Novice:
Job_Menu(
Job_Swordman,
Job_Mage,
Job_Archer,
Job_Acolyte,
Job_Merchant,
Job_Thief,
Job_SuperNovice,
Job_Taekwon,
Job_Gunslinger,
Job_Ninja,
Job_Baby
);
break;
case Job_Novice_High:
Job_Menu(
Job_Swordman_High,
Job_Mage_High,
Job_Archer_High,
Job_Acolyte_High,
Job_Merchant_High,
Job_Thief_High
);
break;
case Job_Baby:
Job_Menu(
Job_Baby_Swordman,
Job_Baby_Mage,
Job_Baby_Archer,
Job_Baby_Acolyte,
Job_Baby_Merchant,
Job_Baby_Thief,
Job_Super_Baby
);
break;
default:
mes "An error has occurred.";
break;
}
}
close;
}
if (roclass(
[email protected]|EAJL_2_1) == -1 || roclass(
[email protected]|EAJL_2_2) == -1)
mes "No more jobs are available.";
else if (!(
[email protected]&EAJL_2) && JobLevel < .JobReq[1])
mes "A job level of " + .JobReq[1] + " is required to change into the 2nd Class.";
else if (.LastJob && lastJob && (
[email protected]&EAJL_UPPER)) {
mes "Switch classes now?";
next;
Job_Menu(lastJob + Job_Novice_High);
} else
Job_Menu(
[email protected],
[email protected]);
close;
function Job_Menu {
while(1) {
if (getargcount() > 1) {
mes "Select a job.";
[email protected]$ = "";
for (
[email protected] = 0;
[email protected] < getargcount();
[email protected]++)
[email protected]$ =
[email protected]$ + " ~ " + jobname(getarg(
[email protected])) + ":";
[email protected]$ =
[email protected]$+" ~ ^777777Cancel^000000";
next;
[email protected] = getarg(select(
[email protected]$) - 1, 0);
if (
[email protected])
close;
if ((
[email protected] == Job_SuperNovice ||
[email protected] == Job_Super_Baby) && BaseLevel < .SNovice) {
mes "[Job Master]";
mes "A base level of " + .SNovice + " is required to turn into a " + jobname(
[email protected]) + ".";
close;
}
mes "[Job Master]";
mes "Are you sure?";
next;
} else
[email protected] = getarg(0);
if (select(" ~ Change into ^0055FF" + jobname(
[email protected]) + "^000000 class: ~ ^777777" + ((getargcount() > 1) ? "Go back" : "Cancel") + "^000000") == 1) {
mes "[Job Master]";
mes "You are now " + callfunc("F_InsertArticle", jobname(
[email protected])) + "!";
if (
[email protected] == Job_Novice_High && .LastJob)
lastJob = Class;
jobchange
[email protected];
if (
[email protected] == Job_Novice_High)
resetlvl(1);
else if (
[email protected] == Job_Baby) {
resetstatus;
resetskill;
set SkillPoint,0;
}
specialeffect2 EF_ANGEL2;
specialeffect2 EF_ELECTRIC;
if (.Platinum)
callsub Get_Platinum;
close;
}
if (getargcount() == 1)
return;
mes "[Job Master]";
}
end;
}
Get_Platinum:
skill "NV_FIRSTAID",1,SKILL_PERM;
switch (BaseClass) {
case Job_Novice:
if (Class != Job_SuperNovice)
skill "NV_TRICKDEAD",1,SKILL_PERM;
break;
case Job_Swordman:
skill "SM_MOVINGRECOVERY",1,SKILL_PERM;
skill "SM_FATALBLOW",1,SKILL_PERM;
skill "SM_AUTOBERSERK",1,SKILL_PERM;
break;
case Job_Mage:
skill "MG_ENERGYCOAT",1,SKILL_PERM;
break;
case Job_Archer:
skill "AC_MAKINGARROW",1,SKILL_PERM;
skill "AC_CHARGEARROW",1,SKILL_PERM;
break;
case Job_Acolyte:
skill "AL_HOLYLIGHT",1,SKILL_PERM;
break;
case Job_Merchant:
skill "MC_CARTREVOLUTION",1,SKILL_PERM;
skill "MC_CHANGECART",1,SKILL_PERM;
skill "MC_LOUD",1,SKILL_PERM;
break;
case Job_Thief:
skill "TF_SPRINKLESAND",1,SKILL_PERM;
skill "TF_BACKSLIDING",1,SKILL_PERM;
skill "TF_PICKSTONE",1,SKILL_PERM;
skill "TF_THROWSTONE",1,SKILL_PERM;
break;
default:
break;
}
switch (BaseJob) {
case Job_Knight:
skill "KN_CHARGEATK",1,SKILL_PERM;
break;
case Job_Priest:
skill "PR_REDEMPTIO",1,SKILL_PERM;
break;
case Job_Wizard:
skill "WZ_SIGHTBLASTER",1,SKILL_PERM;
break;
case Job_Blacksmith:
skill "BS_UNFAIRLYTRICK",1,SKILL_PERM;
skill "BS_GREED",1,SKILL_PERM;
break;
case Job_Hunter:
skill "HT_PHANTASMIC",1,SKILL_PERM;
break;
case Job_Assassin:
skill "AS_SONICACCEL",1,SKILL_PERM;
skill "AS_VENOMKNIFE",1,SKILL_PERM;
break;
case Job_Crusader:
skill "CR_SHRINK",1,SKILL_PERM;
break;
case Job_Monk:
skill "MO_KITRANSLATION",1,SKILL_PERM;
skill "MO_BALKYOUNG",1,SKILL_PERM;
break;
case Job_Sage:
skill "SA_CREATECON",1,SKILL_PERM;
skill "SA_ELEMENTWATER",1,SKILL_PERM;
skill "SA_ELEMENTGROUND",1,SKILL_PERM;
skill "SA_ELEMENTFIRE",1,SKILL_PERM;
skill "SA_ELEMENTWIND",1,SKILL_PERM;
break;
case Job_Rogue:
skill "RG_CLOSECONFINE",1,SKILL_PERM;
break;
case Job_Alchemist:
skill "AM_BIOETHICS",1,SKILL_PERM;
break;
case Job_Bard:
skill "BA_PANGVOICE",1,SKILL_PERM;
break;
case Job_Dancer:
skill "DC_WINKCHARM",1,SKILL_PERM;
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
.ThirdClass = 1; // Enable third classes? (1: yes / 0: no)
.SecondExpanded = 1; // Enable new expanded second classes: Ex. Super Novice, Kagerou/Oboro, Rebellion? (1: yes / 0: no)
.SNovice = 50; // Minimum base level to turn into Super Novice
.LastJob = 1; // Enforce linear class changes? (1: yes / 0: no)
.SkillPointCheck = 1; // Force player to use up all skill points? (1: yes / 0: no)
.Platinum = 1; // Get platinum skills automatically? (1: yes / 0: no)
end;
} // end jobmaster
Nvm guys, I got it working