[Service] NPC Scripts

Joined
Jun 23, 2012
Messages
554
Reaction score
70
My name is Jon, and I've been scripting as a hobby for several years now, starting at AngelMS (down), and then Midnight/TwilightMS(down).​

I'm also looking to script for pay. Skype is jonnguyens

I've seen service threads running around, but I've decided to open one of mine just in case anyone needs help because those have gone inactive. Now I have a pretty busy schedule, but I can most definitely help you out with your scripts if and only if you give me your script first.

I'm looking to script NPCs for a server for pay. If you want to talk, add me on skype: jonnguyens





  • Why do I have to give you a script first? Don't you know how to script?

Yes, yes I do. I basic functions and can create all those fancy scripts (infinite loop, ternaries, etc). It's just I want to see you try first (and maybe because my mind feels more at ease when I have something to fix, and not create). I want to show you any errors you may have created, or what you could have done to make it shorter. I'm not the best NPC scripter in the world, but I can say I'm a pretty good one.







  • Where's some proof of work?
This is an NPC help thread. If I'm not qualified you will most certainly see it within the first few scripts. But hey, if the script works everyone is happy, right?





Make sure to post your script in spoiler format (using spoiler tags). These tags are created by this ....

(spoiler) (php) PUT SCRIPT HERE (/php)(/spoiler)
- Replace the "(" and ")" with "[" and "]"


Also, if you have any special functions (such as cm.gainNX(), cm.getVote(), etc) you must tell me. I can't make you a script in which you don't have the functions for.​

Terms of Serivice:​
This is a declaration that I hold, that I will not code a non-playable character (NPC) for a person unless they post for help here on the thread. If someone contacts me outside this thread for help on an NPC, I will not provide assistance in any form. The only time I will provide my knowledge and help others is if, and only if, they ask for my help and have attempted to script it themselves. To further add to the conditions of my Terms of Service, I also require said person to provide a script they have attempted to write themselves. Also, I can, and will post the script I've completed on this thread so that it is public. I will not script a private NPC for someone's server. It is available for everyone to see and learn from. If you fulfill the conditions I listed above, require help, and post your request for help in the form I have below, then I will provide my services accordingly.



Format:​
  • Small Description
  • Specifics
  • Special Functions (cm.gainNx)
  • Script
 
Last edited:
PHP:
var status = -1;
var items = Array(5062000, 5062000, 5062000, 2022179, 2022179, 2022179, 2340000, 4020009, 1032062, 2043401, 2040804, 2040029, 2040532, 2040516, 2040513, 2040501, 2040025, 2040321, 2040301, 2040317, 5610000, 5610001, 5062001, 5062001, 5062001, 2045302, 2045304, 2045301, 2045303, 2045300, 2003516, 2003517);
var itemsq = Array(1, 10, 100, 1, 10, 100, 1, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 100, 1, 1, 1, 1, 1, 1, 1);
var itemsa = Array(1900, 18000, 150000, 2000, 20000, 200000, 50000, 10000, 20000, 18000, 16000, 16000, 15000, 15000, 16000, 16000, 18000, 18000, 18000, 18000, 15000, 10000, 7500, 74000, 700000, 3000, 4000, 5000, 6000, 1000, 10000, 20000);

function start() {
	action(1, 0, 0);
}

function action(mode, type, selection) {
	if (mode != 1) {
		cm.dispose();
		return;
	}
	status++;
	if (status == 0) {
		cm.sendSimple("Hi. I like #rA-Cash#k. You have #r#e" + cm.getPlayer().getCSPoints(1) + "#n#k #rA-Cash#k. I could sure use some...\r\n\r\n#b#L0#Give me #rA-Cash#b and I'll give you an item.#l#k");
	} else if (status == 1) {
		var selStr = "Maybe you could trade me some #rA-Cash#k? I have lots of great items for you...#b\r\n\r\n";
		for (var i = 0; i < items.length; i++) {
			selStr += "#L" + i + "##v" + items[i] + "##t" + items[i] + "# x " + itemsq[i] + " #r(" + itemsa[i] + " A-Cash)#b#l\r\n";
		}
		cm.sendSimple(selStr + "#k");
	} else if (status == 2) {
		if (cm.getPlayer().getCSPoints(1) < itemsa[selection]) {
			cm.sendOk("You don't have enough #rA-Cash#k.. I NEED #rA-CASH#k!");
		} else if (!cm.canHold(items[selection], itemsq[selection])) {
			cm.sendOk("You don't have the inventory space to hold it. I must be legit and make this a fair trade... so hurry up and free your inventory so I can get my #rA-Cash#k!");
		} else {
			cm.getPlayer().modifyCSPoints(1, -itemsa[selection], true);
			cm.gainItem(items[selection], itemsq[selection]);
			cm.sendOk("Thanks a lot for the #rA-Cash#k! Hehe...");
		}
		cm.dispose();
	}
}

Can help me look at this NPC? I get a runtime error when using it.=(

Edit:Nehmind..i found my problem.Sorry~
 
Last edited:
Upvote 0
Managed to fix some minor errors in the script you posted but I can't figure this error out. You can talk to the NPC but when selecting my jobs -> bandit/sin/db recruit. I get those errors.

.bat error - [Service] NPC Scripts - RaGEZONE Forums

PHP:
/* Notes: I'll leave a message here, as I am not sure what source you are using. Perhaps Lithium? Either way, I realize some functions I may be using are outdated (not compatible with your source), 
so what you must do is ctrl+h and replace all the special functions such as cm.getJobId, cm.getPlayer().changeJob, etc. I am also a big fan of ternaries, as you can see below. I'm actually so involved 
with them that sometimes I may even use them when unnecessary. 

1) This script contains Explorer, KoC, and Legends. It does not, however, contain Cannoneer and Resistance, as I do not know their IDs. If you can provide them, then I will be obliged 
to script it. 
2) If you encounter any errors, which I am fairly certain you will, please post it in spoiler form. This was a relatively long script despite whatever knowledge I have on condensing scripts. 
I did my best, although I completely averted from yours. I always prefer to start new scripts unless the one given is simple. 
3) I used multiple conditions inside a ternary for the first time. If that is not allowed in java script - although I feel that it damn right should be - I'm sorry. Just inform me and I'll make reparations. 
4) If everything turns out fine, give me a heads up. This was a fun, but somewhat tedious task. 

*/ 



var status; 
var first = [100, 200, 300, 400, 500]; // explorer job  
var second = [[110,120,130],[210,220,230],[310,320],[410,420,430],[510,520]]; // second job 
var secondname = [["Fighter", "Page", "Spearman"],["Fire-Poison", "Ice-Lightning", "Cleric"],["Hunter", "Crossbowman"],["Assassin", "Bandit", "Blade Recruit"],["Brawler", "Gunslinger"]]; // second job names 
var koc = [1100, 1200, 1300, 1400, 1500]; // koc job 
var legend = [2100,2300,2400, 3100]; // legend job 
var type; // just a variable 

/* 1st Job (Lv 10) ->     Rogue     
2nd Job (Lv 20) ->     Semi Dualer 
2nd Job + (Lv 30) -> Dualer     
3rd Job (Lv 55) ->     Dual Master 
3rd Job + (Lv 70) -> Slasher     
4th Job (Lv 120) -> Dual Blader */  

// the above was just to let me know what levels the Db were supposed to level up at. 

function start() { 
    status = -1; 
    action(1, 0, 0); 
} 

function action(mode, type, selection) { 
    if (mode == -1) { 
        cm.dispose(); 
        return; 
    } else { 
        (mode == 1 ? status++ : status--); 
    } 
    if (status == 0 ) { 
    // start of explorers 
    // first job 
        if (cm.getPlayer().getJob() == 0) { 
            (cm.getPlayer().getLevel() < 8 ? cm.sendOk("You must be at least #b8#k for an advancement.") : cm.getPlayer().getLevel() > 9 ? cm.sendSimple("Here's some jobs . . .\r\n\r\n#L0#Warrior\r\n#L1#Magician"+ 
            "\r\n#L2#Bowman\r\n#L3#Rogue\r\n#L4#Pirate") : cm.sendSimple("Here's some jobs . . .\r\n\r\n#L1#Magician")); // ternary. If you are below 8, tell them you need to at least be 8. If you are above 9, send regular job advancements for Explorers. If you are 8 or higher, the last ternary, you can become a mage 
    // second job 
        } else if (cm.getPlayer().getJob() == 100 || cm.getPlayer().getJob() == 200 || cm.getPlayer().getJob() == 300 || cm.getPlayer().getJob() == 400 || cm.getPlayer().getJob() == 500) { // first job check 
            if (cm.getPlayer().getJob() == 400) { // if you are rogue 
                if (cm.getPlayer().getLevel() < 20) { // if you are under 20 
                    cm.sendOk("Please come back at either #b20#k or #b30#k.");  
                    cm.dispose(); 
                } else { // otherwise 
                type = 3; // set variable 'type' to 3 
                cm.sendSimple("What do you want?\r\n"+(cm.getPlayer().getLevel() >= 30 ? "\r\n#L0#Assassin\r\n#L1#Bandit\r\n#L2#Blade Recruit" : "\r\n#L2#Blade Recruit")+""); // ternary. If you are higher than 30, send Bandit, Sin, and Db selections. Otherwise, just send Db selection. This will work because I had a previous check to ensure someone was above level 20. 
                } 
            } else { // if you are not rogue, but are other first jobs 
                (cm.getPlayer().getJob() == 100 ? type = 0 : cm.getPlayer().getJob() == 200 ? type = 1 : cm.getPlayer().getJob() == 300 ? type = 2 : type = 4); // sets different numbers for 'type'. I will be using a multiple array. 
                text = "Let's see what we have here . . .\r\n"; // infamous loop. 
                for (var i = 0; i < second[type].length; i++) 
                text += "\r\n#L"+i+"#"+secondname[type][i]+""; 
                cm.sendSimple(text); 
        } 
    // third job 
        } else if (cm.getPlayer().getJob() == 110 || cm.getPlayer().getJob() == 120 || cm.getPlayer().getJob() == 130 || cm.getPlayer().getJob() == 210 || cm.getPlayer().getJob() == 220 || cm.getPlayer().getJob() == 230 || cm.getPlayer().getJob() == 310 || cm.getPlayer().getJob() == 320 || cm.getPlayer().getJob() == 410 || cm.getPlayer().getJob() == 420 || cm.getPlayer().getJob() == 510 || cm.getPlayer().getJob() == 520) { 
                (cm.getPlayer().getLevel() < 70 ? cm.sendOk("You cannot job advance at this time.") : cm.getPlayer().changeJob(cm.getPlayer().getJob() + 1)); 
                cm.dispose(); 
    // fourth job 
        } else if (cm.getPlayer().getJob() == 111 || cm.getPlayer().getJob() == 121 || cm.getPlayer().getJob() == 131 || cm.getPlayer().getJob() == 211 || cm.getPlayer().getJob() == 221 || cm.getPlayer().getJob() == 231 || cm.getPlayer().getJob() == 311 || cm.getPlayer().getJob() == 321 || cm.getPlayer().getJob() == 411 || cm.getPlayer().getJob() == 421 || cm.getPlayer().getJob() == 511 || cm.getPlayer().getJob() == 521) { 
                (cm.getPlayer().getLevel() < 120 ? cm.sendOk("You cannot job advance at this time") : cm.getPlayer().changeJob(cm.getPlayer().getJob() + 1)); 
                cm.dispose(); 
    // dual blades 
        } else if (cm.getJobId()>=430 && cm.getJobId() <= 499) { 
            ((cm.getPlayer().getJob() == 430 && cm.getPlayer().getLevel()>=30) ? cm.getPlayer().changeJob(431) : (cm.getPlayer().getJob() == 431 && cm.getPlayer().getLevel()>=55) ? cm.getPlayer().changeJob(432) :  
            (cm.getPlayer().getJob() == 432 && cm.getPlayer().getLevel()>=70) ? cm.getPlayer().changeJob(433) : (cm.getPlayer().getJob() == 433 & cm.getPlayer().getLevel()>=120) ? cm.getPlayer().changeJob(434) :  
            cm.sendOk("You are not ready for a job advancement.")); 
    // end of explorers 
    // KoC 
        } else if (cm.getPlayer().getJob() == 1000) { 
            if (cm.getPlayer().getLevel() < 10) { 
                cm.sendOk("You must be level 10 for this."); 
                cm.dispose(); 
            } else { 
                cm.sendSimple("Here...\r\n#L0#Dawn Warrior\r\n#L1#Blaze Wizard\r\n#L2#Wind Archer\r\n#L3#Night Walker\r\n#L4#Thunder Breaker"); 
            }
        } else if (cm.getPlayer().getJob() == 1100 || cm.getPlayer().getJob() == 1200 || cm.getPlayer().getJob() == 1300 || cm.getPlayer().getJob() == 1400 || cm.getPlayer().getJob() == 1500) { 
                (cm.getPlayer().getLevel() < 30 ? cm.sendOk("You cannot job advance.") : cm.getPlayer().changeJob(cm.getPlayer().getJob() + 10)); 
                cm.dispose(); 
        } else if (cm.getPlayer().getJob() == 1110 || cm.getPlayer().getJob() == 1210 || cm.getPlayer().getJob() == 1310 || cm.getPlayer().getJob() == 1410 || cm.getPlayer().getJob() == 1510) { 
                (cm.getPlayer().getLevel() < 70 ? cm.sendOk("You cannot job advance.") : cm.getPlayer().changeJob(cm.getPlayer().getJob() + 1)); 
                cm.dispose(); 
    // end of koc 
    // legends 
    // not including Evan - special case - these include Aran, Phantom, DS, and Mercedes 
        } else if (cm.getPlayer().getJob() == 2000 || cm.getPlayer().getJob() == 2002 || cm.getPlayer().getJob() == 2003 || cm.getPlayer().getJob() == 3001) { 
                (cm.getPlayer().getJob() == 2000 ? type = 0 : cm.getPlayer().getJob() == 2002 ? type = 1 : cm.getPlayer().getJob() == 2003 ? type = 2 : type = 3); 
                (cm.getPlayer().getLevel() < 10 ? cm.sendOk("You are not eligible for a job advance.") : cm.getPlayer().changeJob(legend[type])); 
                cm.dispose(); 
        } else if (cm.getPlayer().getJob() == 2100 || cm.getPlayer().getJob() == 2300 || cm.getPlayer().getJob() == 2400 || cm.getPlayer().getJob() == 3100) { 
                (cm.getPlayer().getLevel() < 30 ? cm.sendOk("You are not eligible for this.") : cm.getPlayer().changeJob(cm.getPlayer().getJob()+10)); 
                cm.dispose(); 
        } else if (cm.getPlayer().getJob() == 2110 || cm.getPlayer().getJob() == 2310 || cm.getPlayer().getJob() == 2410 || cm.getPlayer().getJob() == 3110) { 
                (cm.getPlayer().getLevel() < 70 ? cm.sendOk("You are not able to advance.") : cm.getPlayer().changeJob(cm.getPlayer().getJob() + 1)); 
                cm.dispose(); 
        } else if (cm.getPlayer().getJob() == 2111 || cm.getPlayer().getJob() == 2311 || cm.getPlayer().getJob() == 2411 || cm.getPlayer().getJob() == 3111) { 
                (cm.getPlayer().getLevel() < 120 ? cm.sendOk("You are not able to do this.") : cm.getPlayer().changeJob(cm.getPlayer().getJob() + 1)); 
                cm.dispose(); 
    // Evan 
        } else if (cm.getJobId()>=2200 && cm.getJobId() < 2300) { 
                if (cm.getPlayer().getJob() == 2200) { 
                    (cm.getPlayer().getLevel() < 10 ? cm.sendOk("You cannot advance till level 10") : cm.getPlayer().changeJob(cm.getPlayer().getJob()+10)); 
                } else if (cm.getPlayer().getJob() == 2210 && cm.getPlayer().getLevel() >= 20 || cm.getPlayer().getJob() == 2211 && cm.getPlayer().getLevel() >= 30 || cm.getPlayer().getJob() == 2212 && cm.getPlayer().getLevel() >= 40 
                        || cm.getPlayer().getJob() == 2213 && cm.getPlayer().getLevel() >= 50 || cm.getPlayer().getJob() == 2214 && cm.getPlayer().getLevel() >= 60 || cm.getPlayer().getJob() == 2215 && cm.getPlayer().getLevel() >= 80 ||  
                        cm.getPlayer().getJob() == 2216 && cm.getPlayer().getLevel() >= 100 || cm.getPlayer().getJob() == 2217 && cm.getPlayer().getLevel() >= 120 || cm.getPlayer().getJob() == 2218 && cm.getPlayer().getLevel() >= 160) { // long Evan conditions. 
                    cm.getPlayer().changeJob(cm.getPlayer().getJob() + 1); 
                    cm.dispose(); 
                } else { 
                    cm.sendOk("You are not allowed to advance at this time."); 
                    cm.dispose(); 
    } 
    } 
    } else if (status == 1) { 
    // explorers - first job 
        if (cm.getPlayer().getJob() == 0) { 
            cm.getPlayer().changeJob(first[selection]); // array first, and your variable 'selection' picks from it. 
    // explorers - second job 
        } else if (cm.getPlayer().getJob() == 100 || cm.getPlayer().getJob() == 200 || cm.getPlayer().getJob() == 300 || cm.getPlayer().getJob() == 400 || cm.getPlayer().getJob() == 500) { 
            cm.sendOk("You have become a "+secondname[type][selection]+"."); 
            cm.getPlayer().changeJob(second[type][selection]); // multiple array - condenses second job choices by a bunch.  
	    cm.dispose();
    // koc - first job 
        } else if (cm.getPlayer().getJob() == 1000) { 
                cm.getPlayer().changeJob(koc[selection]);
		cm.dispose(); 
    } 
    cm.dispose(); // unstuck everyone 
    } 
    }
 
Upvote 0
PHP:
/* Notes: I'll leave a message here, as I am not sure what source you are using. Perhaps Lithium? Either way, I realize some functions I may be using are outdated (not compatible with your source), 
so what you must do is ctrl+h and replace all the special functions such as cm.getJobId, cm.getPlayer().changeJob, etc. I am also a big fan of ternaries, as you can see below. I'm actually so involved 
with them that sometimes I may even use them when unnecessary. 

1) This script contains Explorer, KoC, and Legends. It does not, however, contain Cannoneer and Resistance, as I do not know their IDs. If you can provide them, then I will be obliged 
to script it. 
2) If you encounter any errors, which I am fairly certain you will, please post it in spoiler form. This was a relatively long script despite whatever knowledge I have on condensing scripts. 
I did my best, although I completely averted from yours. I always prefer to start new scripts unless the one given is simple. 
3) I used multiple conditions inside a ternary for the first time. If that is not allowed in java script - although I feel that it damn right should be - I'm sorry. Just inform me and I'll make reparations. 
4) If everything turns out fine, give me a heads up. This was a fun, but somewhat tedious task. 

*/ 



var status; 
var first = [100, 200, 300, 400, 500]; // explorer job  
var second = [[110,120,130],[210,220,230],[310,320],[410,420,430],[510,520]]; // second job 
var secondname = [["Fighter", "Page", "Spearman"],["Fire-Poison", "Ice-Lightning", "Cleric"],["Hunter", "Crossbowman"],["Assassin", "Bandit", "Blade Recruit"],["Brawler", "Gunslinger"]]; // second job names 
var koc = [1100, 1200, 1300, 1400, 1500]; // koc job 
var legend = [2100,2300,2400, 3100]; // legend job 
var type; // just a variable 

/* 1st Job (Lv 10) ->     Rogue     
2nd Job (Lv 20) ->     Semi Dualer 
2nd Job + (Lv 30) -> Dualer     
3rd Job (Lv 55) ->     Dual Master 
3rd Job + (Lv 70) -> Slasher     
4th Job (Lv 120) -> Dual Blader */  

// the above was just to let me know what levels the Db were supposed to level up at. 

function start() { 
    status = -1; 
    action(1, 0, 0); 
} 

function action(mode, type, selection) { 
    if (mode == -1) { 
        cm.dispose(); 
        return; 
    } else { 
        (mode == 1 ? status++ : status--); 
    } 
    if (status == 0 ) { 
    // start of explorers 
    // first job 
        if (cm.getPlayer().getJob() == 0) { 
            (cm.getPlayer().getLevel() < 8 ? cm.sendOk("You must be at least #b8#k for an advancement.") : cm.getPlayer().getLevel() > 9 ? cm.sendSimple("Here's some jobs . . .\r\n\r\n#L0#Warrior\r\n#L1#Magician"+ 
            "\r\n#L2#Bowman\r\n#L3#Rogue\r\n#L4#Pirate") : cm.sendSimple("Here's some jobs . . .\r\n\r\n#L1#Magician")); // ternary. If you are below 8, tell them you need to at least be 8. If you are above 9, send regular job advancements for Explorers. If you are 8 or higher, the last ternary, you can become a mage 
    // second job 
        } else if (cm.getPlayer().getJob() == 100 || cm.getPlayer().getJob() == 200 || cm.getPlayer().getJob() == 300 || cm.getPlayer().getJob() == 400 || cm.getPlayer().getJob() == 500) { // first job check 
            if (cm.getPlayer().getJob() == 400) { // if you are rogue 
                if (cm.getPlayer().getLevel() < 20) { // if you are under 20 
                    cm.sendOk("Please come back at either #b20#k or #b30#k.");  
                    cm.dispose(); 
                } else { // otherwise 
                type = 3; // set variable 'type' to 3 
                cm.sendSimple("What do you want?\r\n"+(cm.getPlayer().getLevel() >= 30 ? "\r\n#L0#Assassin\r\n#L1#Bandit\r\n#L2#Blade Recruit" : "\r\n#L2#Blade Recruit")+""); // ternary. If you are higher than 30, send Bandit, Sin, and Db selections. Otherwise, just send Db selection. This will work because I had a previous check to ensure someone was above level 20. 
                } 
            } else { // if you are not rogue, but are other first jobs 
                (cm.getPlayer().getJob() == 100 ? type = 0 : cm.getPlayer().getJob() == 200 ? type = 1 : cm.getPlayer().getJob() == 300 ? type = 2 : type = 4); // sets different numbers for 'type'. I will be using a multiple array. 
                text = "Let's see what we have here . . .\r\n"; // infamous loop. 
                for (var i = 0; i < second[type].length; i++) 
                text += "\r\n#L"+i+"#"+secondname[type][i]+""; 
                cm.sendSimple(text); 
        } 
    // third job 
        } else if (cm.getPlayer().getJob() == 110 || cm.getPlayer().getJob() == 120 || cm.getPlayer().getJob() == 130 || cm.getPlayer().getJob() == 210 || cm.getPlayer().getJob() == 220 || cm.getPlayer().getJob() == 230 || cm.getPlayer().getJob() == 310 || cm.getPlayer().getJob() == 320 || cm.getPlayer().getJob() == 410 || cm.getPlayer().getJob() == 420 || cm.getPlayer().getJob() == 510 || cm.getPlayer().getJob() == 520) { 
                (cm.getPlayer().getLevel() < 70 ? cm.sendOk("You cannot job advance at this time.") : cm.getPlayer().changeJob(cm.getPlayer().getJob() + 1)); 
                cm.dispose(); 
    // fourth job 
        } else if (cm.getPlayer().getJob() == 111 || cm.getPlayer().getJob() == 121 || cm.getPlayer().getJob() == 131 || cm.getPlayer().getJob() == 211 || cm.getPlayer().getJob() == 221 || cm.getPlayer().getJob() == 231 || cm.getPlayer().getJob() == 311 || cm.getPlayer().getJob() == 321 || cm.getPlayer().getJob() == 411 || cm.getPlayer().getJob() == 421 || cm.getPlayer().getJob() == 511 || cm.getPlayer().getJob() == 521) { 
                (cm.getPlayer().getLevel() < 120 ? cm.sendOk("You cannot job advance at this time") : cm.getPlayer().changeJob(cm.getPlayer().getJob() + 1)); 
                cm.dispose(); 
    // dual blades 
        } else if (cm.getJobId()>=430 && cm.getJobId() <= 499) { 
            ((cm.getPlayer().getJob() == 430 && cm.getPlayer().getLevel()>=30) ? cm.getPlayer().changeJob(431) : (cm.getPlayer().getJob() == 431 && cm.getPlayer().getLevel()>=55) ? cm.getPlayer().changeJob(432) :  
            (cm.getPlayer().getJob() == 432 && cm.getPlayer().getLevel()>=70) ? cm.getPlayer().changeJob(433) : (cm.getPlayer().getJob() == 433 & cm.getPlayer().getLevel()>=120) ? cm.getPlayer().changeJob(434) :  
            cm.sendOk("You are not ready for a job advancement.")); 
    // end of explorers 
    // KoC 
        } else if (cm.getPlayer().getJob() == 1000) { 
            if (cm.getPlayer().getLevel() < 10) { 
                cm.sendOk("You must be level 10 for this."); 
                cm.dispose(); 
            } else { 
                cm.sendSimple("Here...\r\n#L0#Dawn Warrior\r\n#L1#Blaze Wizard\r\n#L2#Wind Archer\r\n#L3#Night Walker\r\n#L4#Thunder Breaker"); 
            }
        } else if (cm.getPlayer().getJob() == 1100 || cm.getPlayer().getJob() == 1200 || cm.getPlayer().getJob() == 1300 || cm.getPlayer().getJob() == 1400 || cm.getPlayer().getJob() == 1500) { 
                (cm.getPlayer().getLevel() < 30 ? cm.sendOk("You cannot job advance.") : cm.getPlayer().changeJob(cm.getPlayer().getJob() + 10)); 
                cm.dispose(); 
        } else if (cm.getPlayer().getJob() == 1110 || cm.getPlayer().getJob() == 1210 || cm.getPlayer().getJob() == 1310 || cm.getPlayer().getJob() == 1410 || cm.getPlayer().getJob() == 1510) { 
                (cm.getPlayer().getLevel() < 70 ? cm.sendOk("You cannot job advance.") : cm.getPlayer().changeJob(cm.getPlayer().getJob() + 1)); 
                cm.dispose(); 
    // end of koc 
    // legends 
    // not including Evan - special case - these include Aran, Phantom, DS, and Mercedes 
        } else if (cm.getPlayer().getJob() == 2000 || cm.getPlayer().getJob() == 2002 || cm.getPlayer().getJob() == 2003 || cm.getPlayer().getJob() == 3001) { 
                (cm.getPlayer().getJob() == 2000 ? type = 0 : cm.getPlayer().getJob() == 2002 ? type = 1 : cm.getPlayer().getJob() == 2003 ? type = 2 : type = 3); 
                (cm.getPlayer().getLevel() < 10 ? cm.sendOk("You are not eligible for a job advance.") : cm.getPlayer().changeJob(legend[type])); 
                cm.dispose(); 
        } else if (cm.getPlayer().getJob() == 2100 || cm.getPlayer().getJob() == 2300 || cm.getPlayer().getJob() == 2400 || cm.getPlayer().getJob() == 3100) { 
                (cm.getPlayer().getLevel() < 30 ? cm.sendOk("You are not eligible for this.") : cm.getPlayer().changeJob(cm.getPlayer().getJob()+10)); 
                cm.dispose(); 
        } else if (cm.getPlayer().getJob() == 2110 || cm.getPlayer().getJob() == 2310 || cm.getPlayer().getJob() == 2410 || cm.getPlayer().getJob() == 3110) { 
                (cm.getPlayer().getLevel() < 70 ? cm.sendOk("You are not able to advance.") : cm.getPlayer().changeJob(cm.getPlayer().getJob() + 1)); 
                cm.dispose(); 
        } else if (cm.getPlayer().getJob() == 2111 || cm.getPlayer().getJob() == 2311 || cm.getPlayer().getJob() == 2411 || cm.getPlayer().getJob() == 3111) { 
                (cm.getPlayer().getLevel() < 120 ? cm.sendOk("You are not able to do this.") : cm.getPlayer().changeJob(cm.getPlayer().getJob() + 1)); 
                cm.dispose(); 
    // Evan 
        } else if (cm.getJobId()>=2200 && cm.getJobId() < 2300) { 
                if (cm.getPlayer().getJob() == 2200) { 
                    (cm.getPlayer().getLevel() < 10 ? cm.sendOk("You cannot advance till level 10") : cm.getPlayer().changeJob(cm.getPlayer().getJob()+10)); 
                } else if (cm.getPlayer().getJob() == 2210 && cm.getPlayer().getLevel() >= 20 || cm.getPlayer().getJob() == 2211 && cm.getPlayer().getLevel() >= 30 || cm.getPlayer().getJob() == 2212 && cm.getPlayer().getLevel() >= 40 
                        || cm.getPlayer().getJob() == 2213 && cm.getPlayer().getLevel() >= 50 || cm.getPlayer().getJob() == 2214 && cm.getPlayer().getLevel() >= 60 || cm.getPlayer().getJob() == 2215 && cm.getPlayer().getLevel() >= 80 ||  
                        cm.getPlayer().getJob() == 2216 && cm.getPlayer().getLevel() >= 100 || cm.getPlayer().getJob() == 2217 && cm.getPlayer().getLevel() >= 120 || cm.getPlayer().getJob() == 2218 && cm.getPlayer().getLevel() >= 160) { // long Evan conditions. 
                    cm.getPlayer().changeJob(cm.getPlayer().getJob() + 1); 
                    cm.dispose(); 
                } else { 
                    cm.sendOk("You are not allowed to advance at this time."); 
                    cm.dispose(); 
    } 
    } 
    } else if (status == 1) { 
	var boom = type;
    // explorers - first job 
        if (cm.getPlayer().getJob() == 0) { 
            cm.getPlayer().changeJob(first[selection]); // array first, and your variable 'selection' picks from it. 
    // explorers - second job 
        } else if (cm.getPlayer().getJob() == 100 || cm.getPlayer().getJob() == 200 || cm.getPlayer().getJob() == 300 || cm.getPlayer().getJob() == 400 || cm.getPlayer().getJob() == 500) { 
            cm.sendOk("You have become a "+secondname[boom][selection]+"."); 
            cm.getPlayer().changeJob(second[boom][selection]); // multiple array - condenses second job choices by a bunch.  
        cm.dispose();
    // koc - first job 
        } else if (cm.getPlayer().getJob() == 1000) { 
                cm.getPlayer().changeJob(koc[selection]);
        cm.dispose(); 
    } 
    cm.dispose(); // unstuck everyone 
    } 
    }

Try this.

Edit: And what did you change? o.O
 
Upvote 0
I get this error in the .bat with the new script
PHP:
Error executing NPC script. NPC ID : 2121020:javax.script.ScriptException: sun.o
rg.mozilla.javascript.internal.EcmaError: TypeError: Cannot read property "2" fr
om undefined (<Unknown source>#133) in <Unknown source> at line number 133
Received data : (Unhandled)

& Just some minor changes like adding a missing bracket, changing the changejob function, and adding dispose to certain parts cause my character would get stuck if i pressed esc.
 
Upvote 0
Pretty sure there wasn't a mixing bracket. I have Notepad++ and regularly check brackets to make sure they're fine. Be careful not to perceive them wrongly. Do you script with Notepad++?


Edit: Just tested on my server. Works fine. If you changed anything, you probably misunderstood my scripting.
 
Upvote 0
PHP:
    // koc - first job 
        } else if (cm.getPlayer().getJob() == 1000) { 
                cm.changeJobById(koc[selection);   //<---------Missin bracket right?
    } 
    cm.dispose(); // unstuck everyone 
    } 
    }
This is the script you posted a couple posts ago. I added a bracket after selection. That's correct isn't it? o-o. That's so weird, I copied that EXACT script, nothing changed. But it still doesn't work.
 
Last edited:
Upvote 0
You don't add a bracket after cm.changeJobById o.O It's not even a conditional statement.

I'll add an extra " else " in case the player doesn't fit any of the conditions.
PHP:
/* Notes: I'll leave a message here, as I am not sure what source you are using. Perhaps Lithium? Either way, I realize some functions I may be using are outdated (not compatible with your source), 
so what you must do is ctrl+h and replace all the special functions such as cm.getJobId, cm.getPlayer().changeJob, etc. I am also a big fan of ternaries, as you can see below. I'm actually so involved 
with them that sometimes I may even use them when unnecessary. 

1) This script contains Explorer, KoC, and Legends. It does not, however, contain Cannoneer and Resistance, as I do not know their IDs. If you can provide them, then I will be obliged 
to script it. 
2) If you encounter any errors, which I am fairly certain you will, please post it in spoiler form. This was a relatively long script despite whatever knowledge I have on condensing scripts. 
I did my best, although I completely averted from yours. I always prefer to start new scripts unless the one given is simple. 
3) I used multiple conditions inside a ternary for the first time. If that is not allowed in java script - although I feel that it damn right should be - I'm sorry. Just inform me and I'll make reparations. 
4) If everything turns out fine, give me a heads up. This was a fun, but somewhat tedious task. 

*/ 



var status; 
var first = [100, 200, 300, 400, 500]; // explorer job  
var second = [[110,120,130],[210,220,230],[310,320],[410,420,430],[510,520]]; // second job 
var secondname = [["Fighter", "Page", "Spearman"],["Fire-Poison", "Ice-Lightning", "Cleric"],["Hunter", "Crossbowman"],["Assassin", "Bandit", "Blade Recruit"],["Brawler", "Gunslinger"]]; // second job names 
var koc = [1100, 1200, 1300, 1400, 1500]; // koc job 
var legend = [2100,2300,2400, 3100]; // legend job 
var type; // just a variable 

/* 1st Job (Lv 10) ->     Rogue     
2nd Job (Lv 20) ->     Semi Dualer 
2nd Job + (Lv 30) -> Dualer     
3rd Job (Lv 55) ->     Dual Master 
3rd Job + (Lv 70) -> Slasher     
4th Job (Lv 120) -> Dual Blader */  

// the above was just to let me know what levels the Db were supposed to level up at. 

function start() { 
    status = -1; 
    action(1, 0, 0); 
} 

function action(mode, type, selection) { 
    if (mode == -1) { 
        cm.dispose(); 
        return; 
    } else { 
        (mode == 1 ? status++ : status--); 
    } 
    if (status == 0 ) { 
    // start of explorers 
    // first job 
        if (cm.getPlayer().getJob() == 0) { 
            (cm.getPlayer().getLevel() < 8 ? cm.sendOk("You must be at least #b8#k for an advancement.") : cm.getPlayer().getLevel() > 9 ? cm.sendSimple("Here's some jobs . . .\r\n\r\n#L0#Warrior\r\n#L1#Magician"+ 
            "\r\n#L2#Bowman\r\n#L3#Rogue\r\n#L4#Pirate") : cm.sendSimple("Here's some jobs . . .\r\n\r\n#L1#Magician")); // ternary. If you are below 8, tell them you need to at least be 8. If you are above 9, send regular job advancements for Explorers. If you are 8 or higher, the last ternary, you can become a mage 
    // second job 
        } else if (cm.getPlayer().getJob() == 100 || cm.getPlayer().getJob() == 200 || cm.getPlayer().getJob() == 300 || cm.getPlayer().getJob() == 400 || cm.getPlayer().getJob() == 500) { // first job check 
            if (cm.getPlayer().getJob() == 400) { // if you are rogue 
                if (cm.getPlayer().getLevel() < 20) { // if you are under 20 
                    cm.sendOk("Please come back at either #b20#k or #b30#k.");  
                    cm.dispose(); 
                } else { // otherwise 
                type = 3; // set variable 'type' to 3 
                cm.sendSimple("What do you want?\r\n"+(cm.getPlayer().getLevel() >= 30 ? "\r\n#L0#Assassin\r\n#L1#Bandit\r\n#L2#Blade Recruit" : "\r\n#L2#Blade Recruit")+""); // ternary. If you are higher than 30, send Bandit, Sin, and Db selections. Otherwise, just send Db selection. This will work because I had a previous check to ensure someone was above level 20. 
                } 
            } else { // if you are not rogue, but are other first jobs 
                (cm.getPlayer().getJob() == 100 ? type = 0 : cm.getPlayer().getJob() == 200 ? type = 1 : cm.getPlayer().getJob() == 300 ? type = 2 : type = 4); // sets different numbers for 'type'. I will be using a multiple array. 
                text = "Let's see what we have here . . .\r\n"; // infamous loop. 
                for (var i = 0; i < second[type].length; i++) 
                text += "\r\n#L"+i+"#"+secondname[type][i]+""; 
                cm.sendSimple(text); 
        } 
    // third job 
        } else if (cm.getPlayer().getJob() == 110 || cm.getPlayer().getJob() == 120 || cm.getPlayer().getJob() == 130 || cm.getPlayer().getJob() == 210 || cm.getPlayer().getJob() == 220 || cm.getPlayer().getJob() == 230 || cm.getPlayer().getJob() == 310 || cm.getPlayer().getJob() == 320 || cm.getPlayer().getJob() == 410 || cm.getPlayer().getJob() == 420 || cm.getPlayer().getJob() == 510 || cm.getPlayer().getJob() == 520) { 
                (cm.getPlayer().getLevel() < 70 ? cm.sendOk("You cannot job advance at this time.") : cm.getPlayer().changeJob(cm.getPlayer().getJob() + 1)); 
                cm.dispose(); 
    // fourth job 
        } else if (cm.getPlayer().getJob() == 111 || cm.getPlayer().getJob() == 121 || cm.getPlayer().getJob() == 131 || cm.getPlayer().getJob() == 211 || cm.getPlayer().getJob() == 221 || cm.getPlayer().getJob() == 231 || cm.getPlayer().getJob() == 311 || cm.getPlayer().getJob() == 321 || cm.getPlayer().getJob() == 411 || cm.getPlayer().getJob() == 421 || cm.getPlayer().getJob() == 511 || cm.getPlayer().getJob() == 521) { 
                (cm.getPlayer().getLevel() < 120 ? cm.sendOk("You cannot job advance at this time") : cm.getPlayer().changeJob(cm.getPlayer().getJob() + 1)); 
                cm.dispose(); 
    // dual blades 
        } else if (cm.getJobId()>=430 && cm.getJobId() <= 499) { 
            ((cm.getPlayer().getJob() == 430 && cm.getPlayer().getLevel()>=30) ? cm.getPlayer().changeJob(431) : (cm.getPlayer().getJob() == 431 && cm.getPlayer().getLevel()>=55) ? cm.getPlayer().changeJob(432) :  
            (cm.getPlayer().getJob() == 432 && cm.getPlayer().getLevel()>=70) ? cm.getPlayer().changeJob(433) : (cm.getPlayer().getJob() == 433 & cm.getPlayer().getLevel()>=120) ? cm.getPlayer().changeJob(434) :  
            cm.sendOk("You are not ready for a job advancement.")); 
    // end of explorers 
    // KoC 
        } else if (cm.getPlayer().getJob() == 1000) { 
            if (cm.getPlayer().getLevel() < 10) { 
                cm.sendOk("You must be level 10 for this."); 
                cm.dispose(); 
            } else { 
                cm.sendSimple("Here...\r\n#L0#Dawn Warrior\r\n#L1#Blaze Wizard\r\n#L2#Wind Archer\r\n#L3#Night Walker\r\n#L4#Thunder Breaker"); 
            }
        } else if (cm.getPlayer().getJob() == 1100 || cm.getPlayer().getJob() == 1200 || cm.getPlayer().getJob() == 1300 || cm.getPlayer().getJob() == 1400 || cm.getPlayer().getJob() == 1500) { 
                (cm.getPlayer().getLevel() < 30 ? cm.sendOk("You cannot job advance.") : cm.getPlayer().changeJob(cm.getPlayer().getJob() + 10)); 
                cm.dispose(); 
        } else if (cm.getPlayer().getJob() == 1110 || cm.getPlayer().getJob() == 1210 || cm.getPlayer().getJob() == 1310 || cm.getPlayer().getJob() == 1410 || cm.getPlayer().getJob() == 1510) { 
                (cm.getPlayer().getLevel() < 70 ? cm.sendOk("You cannot job advance.") : cm.getPlayer().changeJob(cm.getPlayer().getJob() + 1)); 
                cm.dispose(); 
    // end of koc 
    // legends 
    // not including Evan - special case - these include Aran, Phantom, DS, and Mercedes 
        } else if (cm.getPlayer().getJob() == 2000 || cm.getPlayer().getJob() == 2002 || cm.getPlayer().getJob() == 2003 || cm.getPlayer().getJob() == 3001) { 
                (cm.getPlayer().getJob() == 2000 ? type = 0 : cm.getPlayer().getJob() == 2002 ? type = 1 : cm.getPlayer().getJob() == 2003 ? type = 2 : type = 3); 
                (cm.getPlayer().getLevel() < 10 ? cm.sendOk("You are not eligible for a job advance.") : cm.getPlayer().changeJob(legend[type])); 
                cm.dispose(); 
        } else if (cm.getPlayer().getJob() == 2100 || cm.getPlayer().getJob() == 2300 || cm.getPlayer().getJob() == 2400 || cm.getPlayer().getJob() == 3100) { 
                (cm.getPlayer().getLevel() < 30 ? cm.sendOk("You are not eligible for this.") : cm.getPlayer().changeJob(cm.getPlayer().getJob()+10)); 
                cm.dispose(); 
        } else if (cm.getPlayer().getJob() == 2110 || cm.getPlayer().getJob() == 2310 || cm.getPlayer().getJob() == 2410 || cm.getPlayer().getJob() == 3110) { 
                (cm.getPlayer().getLevel() < 70 ? cm.sendOk("You are not able to advance.") : cm.getPlayer().changeJob(cm.getPlayer().getJob() + 1)); 
                cm.dispose(); 
        } else if (cm.getPlayer().getJob() == 2111 || cm.getPlayer().getJob() == 2311 || cm.getPlayer().getJob() == 2411 || cm.getPlayer().getJob() == 3111) { 
                (cm.getPlayer().getLevel() < 120 ? cm.sendOk("You are not able to do this.") : cm.getPlayer().changeJob(cm.getPlayer().getJob() + 1)); 
                cm.dispose(); 
    // Evan 
        } else if (cm.getJobId()>=2200 && cm.getJobId() < 2300) { 
                if (cm.getPlayer().getJob() == 2200) { 
                    (cm.getPlayer().getLevel() < 10 ? cm.sendOk("You cannot advance till level 10") : cm.getPlayer().changeJob(cm.getPlayer().getJob()+10)); 
                } else if (cm.getPlayer().getJob() == 2210 && cm.getPlayer().getLevel() >= 20 || cm.getPlayer().getJob() == 2211 && cm.getPlayer().getLevel() >= 30 || cm.getPlayer().getJob() == 2212 && cm.getPlayer().getLevel() >= 40 
                        || cm.getPlayer().getJob() == 2213 && cm.getPlayer().getLevel() >= 50 || cm.getPlayer().getJob() == 2214 && cm.getPlayer().getLevel() >= 60 || cm.getPlayer().getJob() == 2215 && cm.getPlayer().getLevel() >= 80 ||  
                        cm.getPlayer().getJob() == 2216 && cm.getPlayer().getLevel() >= 100 || cm.getPlayer().getJob() == 2217 && cm.getPlayer().getLevel() >= 120 || cm.getPlayer().getJob() == 2218 && cm.getPlayer().getLevel() >= 160) { // long Evan conditions. 
                    cm.getPlayer().changeJob(cm.getPlayer().getJob() + 1); 
                    cm.dispose(); 
                } else { 
                    cm.sendOk("You are not allowed to advance at this time."); 
                    cm.dispose(); 
    }
	} else {
		cm.sendOk("I am a Job Advancer.");
		cm.dispose();
    } 
    } else if (status == 1) { 
    var boom = type;
    // explorers - first job 
        if (cm.getPlayer().getJob() == 0) { 
            cm.getPlayer().changeJob(first[selection]); // array first, and your variable 'selection' picks from it. 
    // explorers - second job 
        } else if (cm.getPlayer().getJob() == 100 || cm.getPlayer().getJob() == 200 || cm.getPlayer().getJob() == 300 || cm.getPlayer().getJob() == 400 || cm.getPlayer().getJob() == 500) { 
            cm.sendOk("You have become a "+secondname[boom][selection]+"."); 
            cm.getPlayer().changeJob(second[boom][selection]); // multiple array - condenses second job choices by a bunch.  
        cm.dispose();
    // koc - first job 
        } else if (cm.getPlayer().getJob() == 1000) { 
                cm.getPlayer().changeJob(koc[selection]);
        cm.dispose(); 
    } 
    cm.dispose(); // unstuck everyone 
    } 
    }
 
Upvote 0
You don't add a bracket after cm.changeJobById o.O It's not even a conditional statement.

I'll add an extra " else " in case the player doesn't fit any of the conditions.
PHP:
/* Notes: I'll leave a message here, as I am not sure what source you are using. Perhaps Lithium? Either way, I realize some functions I may be using are outdated (not compatible with your source), 
so what you must do is ctrl+h and replace all the special functions such as cm.getJobId, cm.getPlayer().changeJob, etc. I am also a big fan of ternaries, as you can see below. I'm actually so involved 
with them that sometimes I may even use them when unnecessary. 

1) This script contains Explorer, KoC, and Legends. It does not, however, contain Cannoneer and Resistance, as I do not know their IDs. If you can provide them, then I will be obliged 
to script it. 
2) If you encounter any errors, which I am fairly certain you will, please post it in spoiler form. This was a relatively long script despite whatever knowledge I have on condensing scripts. 
I did my best, although I completely averted from yours. I always prefer to start new scripts unless the one given is simple. 
3) I used multiple conditions inside a ternary for the first time. If that is not allowed in java script - although I feel that it damn right should be - I'm sorry. Just inform me and I'll make reparations. 
4) If everything turns out fine, give me a heads up. This was a fun, but somewhat tedious task. 

*/ 



var status; 
var first = [100, 200, 300, 400, 500]; // explorer job  
var second = [[110,120,130],[210,220,230],[310,320],[410,420,430],[510,520]]; // second job 
var secondname = [["Fighter", "Page", "Spearman"],["Fire-Poison", "Ice-Lightning", "Cleric"],["Hunter", "Crossbowman"],["Assassin", "Bandit", "Blade Recruit"],["Brawler", "Gunslinger"]]; // second job names 
var koc = [1100, 1200, 1300, 1400, 1500]; // koc job 
var legend = [2100,2300,2400, 3100]; // legend job 
var type; // just a variable 

/* 1st Job (Lv 10) ->     Rogue     
2nd Job (Lv 20) ->     Semi Dualer 
2nd Job + (Lv 30) -> Dualer     
3rd Job (Lv 55) ->     Dual Master 
3rd Job + (Lv 70) -> Slasher     
4th Job (Lv 120) -> Dual Blader */  

// the above was just to let me know what levels the Db were supposed to level up at. 

function start() { 
    status = -1; 
    action(1, 0, 0); 
} 

function action(mode, type, selection) { 
    if (mode == -1) { 
        cm.dispose(); 
        return; 
    } else { 
        (mode == 1 ? status++ : status--); 
    } 
    if (status == 0 ) { 
    // start of explorers 
    // first job 
        if (cm.getPlayer().getJob() == 0) { 
            (cm.getPlayer().getLevel() < 8 ? cm.sendOk("You must be at least #b8#k for an advancement.") : cm.getPlayer().getLevel() > 9 ? cm.sendSimple("Here's some jobs . . .\r\n\r\n#L0#Warrior\r\n#L1#Magician"+ 
            "\r\n#L2#Bowman\r\n#L3#Rogue\r\n#L4#Pirate") : cm.sendSimple("Here's some jobs . . .\r\n\r\n#L1#Magician")); // ternary. If you are below 8, tell them you need to at least be 8. If you are above 9, send regular job advancements for Explorers. If you are 8 or higher, the last ternary, you can become a mage 
    // second job 
        } else if (cm.getPlayer().getJob() == 100 || cm.getPlayer().getJob() == 200 || cm.getPlayer().getJob() == 300 || cm.getPlayer().getJob() == 400 || cm.getPlayer().getJob() == 500) { // first job check 
            if (cm.getPlayer().getJob() == 400) { // if you are rogue 
                if (cm.getPlayer().getLevel() < 20) { // if you are under 20 
                    cm.sendOk("Please come back at either #b20#k or #b30#k.");  
                    cm.dispose(); 
                } else { // otherwise 
                type = 3; // set variable 'type' to 3 
                cm.sendSimple("What do you want?\r\n"+(cm.getPlayer().getLevel() >= 30 ? "\r\n#L0#Assassin\r\n#L1#Bandit\r\n#L2#Blade Recruit" : "\r\n#L2#Blade Recruit")+""); // ternary. If you are higher than 30, send Bandit, Sin, and Db selections. Otherwise, just send Db selection. This will work because I had a previous check to ensure someone was above level 20. 
                } 
            } else { // if you are not rogue, but are other first jobs 
                (cm.getPlayer().getJob() == 100 ? type = 0 : cm.getPlayer().getJob() == 200 ? type = 1 : cm.getPlayer().getJob() == 300 ? type = 2 : type = 4); // sets different numbers for 'type'. I will be using a multiple array. 
                text = "Let's see what we have here . . .\r\n"; // infamous loop. 
                for (var i = 0; i < second[type].length; i++) 
                text += "\r\n#L"+i+"#"+secondname[type][i]+""; 
                cm.sendSimple(text); 
        } 
    // third job 
        } else if (cm.getPlayer().getJob() == 110 || cm.getPlayer().getJob() == 120 || cm.getPlayer().getJob() == 130 || cm.getPlayer().getJob() == 210 || cm.getPlayer().getJob() == 220 || cm.getPlayer().getJob() == 230 || cm.getPlayer().getJob() == 310 || cm.getPlayer().getJob() == 320 || cm.getPlayer().getJob() == 410 || cm.getPlayer().getJob() == 420 || cm.getPlayer().getJob() == 510 || cm.getPlayer().getJob() == 520) { 
                (cm.getPlayer().getLevel() < 70 ? cm.sendOk("You cannot job advance at this time.") : cm.getPlayer().changeJob(cm.getPlayer().getJob() + 1)); 
                cm.dispose(); 
    // fourth job 
        } else if (cm.getPlayer().getJob() == 111 || cm.getPlayer().getJob() == 121 || cm.getPlayer().getJob() == 131 || cm.getPlayer().getJob() == 211 || cm.getPlayer().getJob() == 221 || cm.getPlayer().getJob() == 231 || cm.getPlayer().getJob() == 311 || cm.getPlayer().getJob() == 321 || cm.getPlayer().getJob() == 411 || cm.getPlayer().getJob() == 421 || cm.getPlayer().getJob() == 511 || cm.getPlayer().getJob() == 521) { 
                (cm.getPlayer().getLevel() < 120 ? cm.sendOk("You cannot job advance at this time") : cm.getPlayer().changeJob(cm.getPlayer().getJob() + 1)); 
                cm.dispose(); 
    // dual blades 
        } else if (cm.getJobId()>=430 && cm.getJobId() <= 499) { 
            ((cm.getPlayer().getJob() == 430 && cm.getPlayer().getLevel()>=30) ? cm.getPlayer().changeJob(431) : (cm.getPlayer().getJob() == 431 && cm.getPlayer().getLevel()>=55) ? cm.getPlayer().changeJob(432) :  
            (cm.getPlayer().getJob() == 432 && cm.getPlayer().getLevel()>=70) ? cm.getPlayer().changeJob(433) : (cm.getPlayer().getJob() == 433 & cm.getPlayer().getLevel()>=120) ? cm.getPlayer().changeJob(434) :  
            cm.sendOk("You are not ready for a job advancement.")); 
    // end of explorers 
    // KoC 
        } else if (cm.getPlayer().getJob() == 1000) { 
            if (cm.getPlayer().getLevel() < 10) { 
                cm.sendOk("You must be level 10 for this."); 
                cm.dispose(); 
            } else { 
                cm.sendSimple("Here...\r\n#L0#Dawn Warrior\r\n#L1#Blaze Wizard\r\n#L2#Wind Archer\r\n#L3#Night Walker\r\n#L4#Thunder Breaker"); 
            }
        } else if (cm.getPlayer().getJob() == 1100 || cm.getPlayer().getJob() == 1200 || cm.getPlayer().getJob() == 1300 || cm.getPlayer().getJob() == 1400 || cm.getPlayer().getJob() == 1500) { 
                (cm.getPlayer().getLevel() < 30 ? cm.sendOk("You cannot job advance.") : cm.getPlayer().changeJob(cm.getPlayer().getJob() + 10)); 
                cm.dispose(); 
        } else if (cm.getPlayer().getJob() == 1110 || cm.getPlayer().getJob() == 1210 || cm.getPlayer().getJob() == 1310 || cm.getPlayer().getJob() == 1410 || cm.getPlayer().getJob() == 1510) { 
                (cm.getPlayer().getLevel() < 70 ? cm.sendOk("You cannot job advance.") : cm.getPlayer().changeJob(cm.getPlayer().getJob() + 1)); 
                cm.dispose(); 
    // end of koc 
    // legends 
    // not including Evan - special case - these include Aran, Phantom, DS, and Mercedes 
        } else if (cm.getPlayer().getJob() == 2000 || cm.getPlayer().getJob() == 2002 || cm.getPlayer().getJob() == 2003 || cm.getPlayer().getJob() == 3001) { 
                (cm.getPlayer().getJob() == 2000 ? type = 0 : cm.getPlayer().getJob() == 2002 ? type = 1 : cm.getPlayer().getJob() == 2003 ? type = 2 : type = 3); 
                (cm.getPlayer().getLevel() < 10 ? cm.sendOk("You are not eligible for a job advance.") : cm.getPlayer().changeJob(legend[type])); 
                cm.dispose(); 
        } else if (cm.getPlayer().getJob() == 2100 || cm.getPlayer().getJob() == 2300 || cm.getPlayer().getJob() == 2400 || cm.getPlayer().getJob() == 3100) { 
                (cm.getPlayer().getLevel() < 30 ? cm.sendOk("You are not eligible for this.") : cm.getPlayer().changeJob(cm.getPlayer().getJob()+10)); 
                cm.dispose(); 
        } else if (cm.getPlayer().getJob() == 2110 || cm.getPlayer().getJob() == 2310 || cm.getPlayer().getJob() == 2410 || cm.getPlayer().getJob() == 3110) { 
                (cm.getPlayer().getLevel() < 70 ? cm.sendOk("You are not able to advance.") : cm.getPlayer().changeJob(cm.getPlayer().getJob() + 1)); 
                cm.dispose(); 
        } else if (cm.getPlayer().getJob() == 2111 || cm.getPlayer().getJob() == 2311 || cm.getPlayer().getJob() == 2411 || cm.getPlayer().getJob() == 3111) { 
                (cm.getPlayer().getLevel() < 120 ? cm.sendOk("You are not able to do this.") : cm.getPlayer().changeJob(cm.getPlayer().getJob() + 1)); 
                cm.dispose(); 
    // Evan 
        } else if (cm.getJobId()>=2200 && cm.getJobId() < 2300) { 
                if (cm.getPlayer().getJob() == 2200) { 
                    (cm.getPlayer().getLevel() < 10 ? cm.sendOk("You cannot advance till level 10") : cm.getPlayer().changeJob(cm.getPlayer().getJob()+10)); 
                } else if (cm.getPlayer().getJob() == 2210 && cm.getPlayer().getLevel() >= 20 || cm.getPlayer().getJob() == 2211 && cm.getPlayer().getLevel() >= 30 || cm.getPlayer().getJob() == 2212 && cm.getPlayer().getLevel() >= 40 
                        || cm.getPlayer().getJob() == 2213 && cm.getPlayer().getLevel() >= 50 || cm.getPlayer().getJob() == 2214 && cm.getPlayer().getLevel() >= 60 || cm.getPlayer().getJob() == 2215 && cm.getPlayer().getLevel() >= 80 ||  
                        cm.getPlayer().getJob() == 2216 && cm.getPlayer().getLevel() >= 100 || cm.getPlayer().getJob() == 2217 && cm.getPlayer().getLevel() >= 120 || cm.getPlayer().getJob() == 2218 && cm.getPlayer().getLevel() >= 160) { // long Evan conditions. 
                    cm.getPlayer().changeJob(cm.getPlayer().getJob() + 1); 
                    cm.dispose(); 
                } else { 
                    cm.sendOk("You are not allowed to advance at this time."); 
                    cm.dispose(); 
    }
	} else {
		cm.sendOk("I am a Job Advancer.");
		cm.dispose();
    } 
    } else if (status == 1) { 
    var boom = type;
    // explorers - first job 
        if (cm.getPlayer().getJob() == 0) { 
            cm.getPlayer().changeJob(first[selection]); // array first, and your variable 'selection' picks from it. 
    // explorers - second job 
        } else if (cm.getPlayer().getJob() == 100 || cm.getPlayer().getJob() == 200 || cm.getPlayer().getJob() == 300 || cm.getPlayer().getJob() == 400 || cm.getPlayer().getJob() == 500) { 
            cm.sendOk("You have become a "+secondname[boom][selection]+"."); 
            cm.getPlayer().changeJob(second[boom][selection]); // multiple array - condenses second job choices by a bunch.  
        cm.dispose();
    // koc - first job 
        } else if (cm.getPlayer().getJob() == 1000) { 
                cm.getPlayer().changeJob(koc[selection]);
        cm.dispose(); 
    } 
    cm.dispose(); // unstuck everyone 
    } 
    }

Huh? Isn't it supposed to be like
" cm.changeJobById(koc[selection]);" .
and not
" cm.changeJobById(koc[selection);" ?
I tried the script and i still get the same error. Just a reminder, this error ONLY shows up on 2nd job for rogues. But after exploring some more it seems like not only does this happen for rogues but any job for 2nd job advancement. Also, you get the option to advance to 2nd job even though you're under level 30. If any of this explanation is confusing please let me know, i'll try my best to rephrase it. Thanks!
 
Upvote 0
The npc alone works fine. it advances for majority of the classes. Only problems are the one stated in my previous post. It gives me an error when I try to select any 2nd job advancement.
 
Upvote 0
If you are still in business i would like to make a proposal
I need a Seller for
Potential Scrolls : 1,000 Mesos Each
Enhancement Scrolls : 10,000 Mesos Each
and Magnifying Glasses : 500 Mesos Each << all can be premium or top magnifying glasses

Thanks for this (if you can do)
 
Upvote 0
That can be easily made, but did you even attempt to create the script? o.O

Edit: Also, I'll need the IDs on any items you want. I'm unfamiliar with these items, since the latest version I've coded is v83. I don't know potential scrolls by heart.


Edit2: I made the script, despite my ToS. I was bored.
PHP:
var status;
var name = ["Potential Scroll", "Enhancement Scroll", "Magnifying Glass"]; // names
var cost [1000,10000,5000]; // costs
var item = [potentialid, enhanceid, magnifyid]; // ids of the items you wanna sell
var sel;

function start() {
	status =-1;
	action(1, 0, 0);
}

function action(mode, type, selection) {
	if (mode < 1) {
		cm.dispose();
		return;
	} else {
		status++;
	}
	if (status == 0) {
		cm.sendSimple("Hey, I sell potential scrolls, enhancement scrolls, and magnifying glasses. What would you like to buy?#b\r\n\r\n#L0#Potential Scrolls\r\n#L1#Enhancement Scrolls\r\n"+
		"#L2#Magnifying Glasses"); // basic selection
	} else if (status == 1) {
		sel = selection. // sets sel = selection
		cm.sendGetText("Each #e"+name[sel]+"#n costs#e "+cost[sel]+"#n. How many would you like to buy?"); // allows them to input how much they want
	} else if (status == 2) {
		answer = cm.getText(); // sets variable answer to the number they inputed
		meso = answer*(cost[sel]); // their answer * the array COST[sel] to calculate the amount of mesos they need.
		if (cm.getMeso() < meso) { // if they dont have enough mesos
			cm.sendOk("You do not have enough mesos for this transaction.");
		} else {
			cm.sendOk("You have gained #b"+answer+"#k #i"+item[sel]+"# and have lost #b"+cost[sel]+"#k mesos."); // simple calling of variables and costs
			cm.gainItem(item[sel], answer); // gain item based of how many he wanted
			cm.gainMeso(-cost[answer]); // lose mesos depending on how many of the item he wanted
		}
	cm.dispose(); // reset character
	}
}
 
Last edited:
Upvote 0
Back