[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:
Could you help me? I coded an NPC that's supposed to update my server to v114.9 but when i click on the npc it does nothing.
here's the script.
PHP:
function start {
cm.dispose();
}
According to your terms of service as long as i provide a script you can halp meh fix it.
 
Upvote 0
I managed to get majority of the DB job adv. to work how I want them to. However, I'm just stumped on how to make it so that at level 20, it will check for job 400 and if you're under level 30, the NPC will allow you to advance to a Blade recruit. As you can see I've attempted to do so but at level 20 it would just show "Become a Bandit or Assassin" options. It would be nice if you could also help me adjust the script so that the Mercedes and Demon slayer option would show up at level 10 for the beginners.

Any help would be appreciated.
PHP:
/*
 * Job Advancer
 * Creator: Aristocat
 */


var job = [
[[100, "Warrior"], [200, "Magician"], [300, "Bowman"], [400, "Thief"], [500, "Pirate"]],
[[1100, "Dawn Warrior"], [1200, "Blaze Wizard"], [1300, "Wind Archer"], [1400, "Night Walker"], [1500, "Thunder Breaker"]],
[[3200, "Battle Mage"], [3300, "Wild Hunter"], [3500, "Mechanic"]],
[[110, "Fighter"], [120, "Page"], [130, "Spearman"]],
[[210, "Wizard (F/P)"], [220, "Wizard (I/L)"], [230, "Cleric"]],
[[310, "Hunter"], [320, "Crossbow Man"]],
[[410, "Assassin"], [420, "Bandit"]],
[[510, "Brawler"], [520, "Gunslinger"]]];
var status = 0;
var select;

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

function action(mode, type, selection) {
    if (mode == 1)
        status++;
    else if (mode == -1)
        status--;
    else {
        cm.dispose();
        return;
    }
    if (status == 0) {
        if (cm.getPlayer().getLevel() >= 10 && (cm.getPlayer().getJob() % 1000 == 0 || cm.getPlayer().getJob() == 3001 || cm.getPlayer().getJob() >= 2001 && cm.getPlayer().getJob() <= 2003) || cm.getPlayer().getLevel() >= 30 && cm.getPlayer().getJob() % 1000 > 0 && cm.getPlayer().getJob() % 100 == 0 || cm.getPlayer().getLevel() >= 70 && cm.getPlayer().getJob() % 10 == 0 && cm.getPlayer().getJob() % 100 != 0 || cm.getPlayer().getLevel() >= 120 && cm.getPlayer().getJob() % 10 == 1 || cm.getPlayer().getLevel() >= 20 && cm.getPlayer().getJob() == 400 || cm.getPlayer().getLevel() >= 55 && cm.getPlayer().getJob() == 430 || cm.getPlayer().getLevel() >= 70 && cm.getPlayer().getJob() == 431 || cm.getPlayer().getLevel() >= 120 && cm.getPlayer().getJob() == 432 || cm.getPlayer().getLevel() >= 160 && cm.getPlayer().getJob() == 433)
            cm.sendYesNo("Would you like to job advance?");
        else {
            cm.sendOk("You may not advance at the current state.");
            cm.dispose();            
        }
    } else if (status == 1) {
        switch (cm.getPlayer().getJob()) {
            //Jobs with selections
            case 0: // Beginner
                jobSelection(0);
                break;
            case 100: // Warrior
                jobSelection(3);
                break;
            case 200: // Magician
                jobSelection(4);
                break;
            case 300: // Bowman
                jobSelection(5);
                break;
            case 400: // Thief
                jobSelection(6);
                break;
            case 500: // Pirate
                jobSelection(7);
                break;
            case 1000: // Noblesse
                jobSelection(1);
                break;
            case 3000: // Citizen
                jobSelection(2);
                break;
            //Special Jobs
            case 501: // Pirate(Cannoneer)
                cm.getPlayer().changeJob(530);
                cm.dispose();
                break;
            case 508: // Pirate(Jett)
                cm.getPlayer().changeJob(570);
                cm.dispose();
                break;
            case 2000: // Legend(Aran)
                cm.getPlayer().changeJob(2100);
                cm.dispose();
                break;
            case 2001: // Farmer(Evan)
                cm.getPlayer().changeJob(2200);
                cm.dispose();
                break;
            case 2002: // Mercedes
                cm.getPlayer().changeJob(2300);
                cm.dispose();
                break;
            case 2003: // Phantom Jr.
                cm.getPlayer().changeJob(2400);
                cm.dispose();
                break;
            case 3001: // Demon Slayer
                cm.getPlayer().changeJob(3100);
                cm.dispose();
                break;
            // Dual Blader
            case 430: // Blade Reqruit
            case 431: // Blade Acolyte
            case 432: // Blade Specialist
            case 433: // Blade Lord
                cm.getPlayer().changeJob(cm.getPlayer().getJob() + 1);
                cm.dispose();
                break;
            case 2002: // Mercedes
                cm.changeJob(2300);
                cm.dispose();
                break;
            case 2003: // Phantom Jr.
                cm.changeJob(2400);
                cm.dispose();
                break;
            case 3001: // Demon Slayer
                cm.changeJob(3100);
                cm.dispose();
                break;
            // Dual Blader
            case 430: // Blade Reqruit
                cm.changeJob(431);
                break;
            case 431: // Blade Acolyte
                cm.changeJob(432);
                break;
            case 432: // Blade Specialist
                cm.changeJob(433);
                break;
            case 433: // Blade Lord
                cm.changeJob(434);
                break;
            //1st Job
            case 1100: // Dawn Warrior
            case 1200: // Blaze Wizard
            case 1300: // Wind Archer
            case 1400: // Night Walker
            case 1500: // Thunder Breaker
            case 2100: // Aran
            case 2300: // Mercedes
            case 2400: // Phantom
            case 3100: // Demon Slayer
            case 3200: // Battle Mage
            case 3300: // Wild Hunter
            case 3500: // Mechanic
                cm.getPlayer().changeJob(cm.getPlayer().getJob() + 10);
                cm.dispose();
                break;
            //2nd Job
            case 110: // Fighter
            case 120: // Page
            case 130: // Spearman
            case 210: // Wizard(F/P)
            case 220: // Wizard(I/L)
            case 230: // Cleric
            case 310: // Hunter
            case 320: // Crossbow man
            case 410: // Assassin
            case 420: // Bandit
            case 510: // Brawler
            case 520: // Gunslinger
            case 530: // Cannoneer
            case 570: // Jett
            case 1110: // Dawn Warrior
            case 1210: // Blaze Wizard
            case 1310: // Wind Archer
            case 1410: // Night Walker
            case 1510: // Thunder Breaker
            case 2110: // Aran
            case 2310: // Mercedes
            case 2410: // Phantom
            case 3110: // Demon Slayer
            case 3210: // Battle Mage
            case 3310: // Wild Hunter
            case 3510: // Mechanic
            //3rd Job
            case 111: // Crusader
            case 121: // White Knight
            case 131: // Dragon Knight
            case 211: // Mage(F/P)
            case 221: // Mage(I/L)
            case 231: // Priest
            case 311: // Ranger
            case 321: // Sniper
            case 411: // Hermit
            case 421: // Chief Bandit
            case 511: // Marauder
            case 521: // Outlaw
            case 531: // Cannon Trooper
            case 571: // Jett
            case 1111: // Dawn Warrior
            case 1211: // Blaze Wizard
            case 1311: // Wind Archer
            case 1411: // Night Walker
            case 1511: // Thunder Breaker
            case 2111: // Aran
            case 2311: // Mercedes
            case 2411: // Phantom
            case 3111: // Demon Slayer
            case 3211: // Battle Mage
            case 3311: // Wild Hunter
            case 3511: // Mechanic
                cm.getPlayer().changeJob(cm.getPlayer().getJob() + 1);
                cm.dispose();
                break;
            default:
                cm.sendOk("You may not advance at the current state.");
                cm.dispose();
        }
    } else if (status == 2) {
        select = selection;
        cm.sendYesNo("Are you sure you want to Job Advance?");
    } else if (status == 3) {
        cm.getPlayer().changeJob(select);
        cm.dispose();
    }
}

function jobSelection(index) {
    var choose = "Please, select your job:"
    for (var i = 0; i < job[index].length; i++)
        choose += "\r\n#L" + job[index][i][0] + "#" + job[index][i][1] + "#l";
    cm.sendSimple(choose);
}
 
Upvote 0
Hey Thane, I'm looking to get a boss summoner NPC, with different levels (Noob, intermediate, expert, legendary), and different requirements, so noob is free for all, can't access it above 20 rebirths, intermediate is 10 rebirths+, expert 50+, legendary 100+. I don't have any code, as I can't code NPC's for ****, but I want to learn. I just need the basis for the NPC started, like, have the different menus, and just a few generic bosses, then I can make modifications. Message me if you are willing.
 
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.changeJobById, 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.getJobId()==0) {
			(cm.getLevel() < 8 ? cm.sendOk("You must be at least #b8#k for an advancement.") : cm.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.getJobId()==100 || cm.getJobId()==200 || cm.getJobId()==300 || cm.getJobId()==400 || cm.getJobId()==500) { // first job check
			if (cm.getJobId()==400) { // if you are rogue
				if (cm.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.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.getJobId()==100 ? type = 0 : cm.getJobId()==200 ? type = 1 : cm.getJobId()==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.getJobId()==110 || cm.getJobId()==120 || cm.getJobId()==130 || cm.getJobId()==210 || cm.getJobId()==220 || cm.getJobId()==230 || cm.getJobId()==310 || cm.getJobId()==320 || cm.getJobId()==410 || cm.getJobId()==420 || cm.getJobId()==510 || cm.getJobId()==520) {
				(cm.getLevel() < 70 ? cm.sendOk("You cannot job advance at this time.") : cm.changeJobById(cm.getJobId() + 1));
				cm.dispose();
	// fourth job
		} else if (cm.getJobId()==111 || cm.getJobId()==121 || cm.getJobId()==131 || cm.getJobId()==211 || cm.getJobId()==221 || cm.getJobId()==231 || cm.getJobId()==311 || cm.getJobId()==321 || cm.getJobId()==411 || cm.getJobId()==421 || cm.getJobId()==511 || cm.getJobId()==521) {
				(cm.getLevel() < 120 ? cm.sendOk("You cannot job advance at this time") : cm.changeJobById(cm.getJobId() + 1));
				cm.dispose();
	// dual blades
		} else if (cm.getJobId()>=430 && cm.getJobId() <= 499) {
			((cm.getJobId()==430 && cm.getLevel()>=30) ? cm.changeJobById(431) : (cm.getJobId()==431 && cm.getLevel()>=55) ? cm.changeJobById(432) : 
			(cm.getJobId()==432 && cm.getLevel()>=70) ? cm.changeJobById(433) : (cm.getJobId()==433 & cm.getLevel()>=120) ? cm.changeJobById(434) : 
			cm.sendOk("You are not ready for a job advancement."));
	// end of explorers
	// KoC
		} else if (cm.getJobId()==1000) {
			if (cm.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.getJobId()==1100 || cm.getJobId()==1200 || cm.getJobId()==1300 || cm.getJobId()==1400 || cm.getJobId()==1500) {
				(cm.getLevel() < 30 ? cm.sendOk("You cannot job advance.") : cm.changeJobById(cm.getJobId() + 10));
				cm.dispose();
		} else if (cm.getJobId()==1110 || cm.getJobId()==1210 || cm.getJobId()==1310 || cm.getJobId()==1410 || cm.getJobId()==1510) {
				(cm.getLevel() < 70 ? cm.sendOk("You cannot job advance.") : cm.changeJobById(cm.getJobId() + 1));
				cm.dispose();
	// end of koc
	// legends
		}
	// not including Evan - special case - these include Aran, Phantom, DS, and Mercedes
		} else if (cm.getJobId()==2000 || cm.getJobId()==2002 || cm.getJobId()==2003 || cm.getJobId()==3001) {
				(cm.getJobId()==2000 ? type = 0 : cm.getJobId()==2002 ? type = 1 : cm.getJobId()==2003 ? type = 2 : type = 3);
				(cm.getLevel() < 10 ? cm.sendOk("You are not eligible for a job advance.") : cm.changeJobById(legend[type]));
				cm.dispose();
		} else if (cm.getJobId()==2100 || cm.getJobId()==2300 || cm.getJobId()==2400 || cm.getJobId()==3100) {
				(cm.getLevel() < 30 ? cm.sendOk("You are not eligible for this.") : cm.changeJobById(cm.getJobId()+10));
				cm.dispose();
		} else if (cm.getJobId()==2110 || cm.getJobId()==2310 || cm.getJobId()==2410 || cm.getJobId()==3110) {
				(cm.getLevel() < 70 ? cm.sendOk("You are not able to advance.") : cm.changeJobById(cm.getJobId() + 1));
				cm.dispose();
		} else if (cm.getJobId()==2111 || cm.getJobId()==2311 || cm.getJobId()==2411 || cm.getJobId()==3111) {
				(cm.getLevel() < 120 ? cm.sendOk("You are not able to do this.") : cm.changeJobById(cm.getJobId() + 1));
				cm.dispose();
	// Evan
		} else if (cm.getJobId()>=2200 && cm.getJobId() < 2300) {
				if (cm.getJobId()==2200) {
					(cm.getLevel() < 10 ? cm.sendOk("You cannot advance till level 10") : cm.changeJobById(cm.getJobId()+10));
				} else if (cm.getJobId()==2210 && cm.getLevel() >= 20 || cm.getJobId()==2211 && cm.getLevel() >= 30 || cm.getJobId()==2212 && cm.getLevel() >= 40
						|| cm.getJobId()==2213 && cm.getLevel() >= 50 || cm.getJobId()==2214 && cm.getLevel() >= 60 || cm.getJobId()==2215 && cm.getLevel() >= 80 || 
						cm.getJobId()==2216 && cm.getLevel() >= 100 || cm.getJobId()==2217 && cm.getLevel() >= 120 || cm.getJobId()==2218 && cm.getLevel() >= 160) { // long Evan conditions.
					cm.changeJobById(cm.getJobId() + 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.getJobId()==0) {
			cm.changeJobById(first[selection]); // array first, and your variable 'selection' picks from it.
	// explorers - second job
		} else if (cm.getJobId()==100 || cm.getJobId()==200 || cm.getJobId()==300 || cm.getJobId()==400 || cm.getJobId()==500) {
			cm.sendOk("You have become a "+secondname[type][selection]+".");
			cm.changeJobById(second[type][selection]); // multiple array - condenses second job choices by a bunch. 
	// koc - first job
		} else if (cm.getJobId()==1000) {
				cm.changeJobById(koc[selection);
	}
	cm.dispose(); // unstuck everyone
	}
	}

See if this works.
 
Last edited:
Upvote 0
Thane, I'm looking to get a boss summoner NPC, with different levels (Noob, intermediate, expert, legendary), and different requirements, so noob is free for all, can't access it above 20 rebirths, intermediate is 10 rebirths+, expert 50+, legendary 100+. I don't have any code, as I can't code NPC's for ****, but I want to learn. I just need the basis for the NPC started, like, have the different menus, and just a few generic bosses, then I can make modifications. Message me if you are willing.
 
Upvote 0
Your request is denied. Please refer to the ToS on the first page.


Edit: I understand you want to learn, but perhaps you should start at an easier place. Look up Shawn's tutorial. It should teach you a lot.
 
Upvote 0
I tried to edit as instructed in the script but in the .bat it keeps directing me to line 89. I've no idea what's wrong with it and yes, I use Lithium. I really appreciate the help!

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.changeJobById, 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.changeJobById(431) : (cm.getPlayer().getJob() == 431 && cm.getPlayer().getLevel()>=55) ? cm.changeJobById(432) : 
            (cm.getPlayer().getJob() == 432 && cm.getPlayer().getLevel()>=70) ? cm.changeJobById(433) : (cm.getPlayer().getJob() == 433 & cm.getPlayer().getLevel()>=120) ? cm.changeJobById(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.changeJobById(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.changeJobById(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.changeJobById(second[type][selection]); // multiple array - condenses second job choices by a bunch. 
    // koc - first job
        } else if (cm.getPlayer().getJob() == 1000) {
                cm.changeJobById(koc[selection);
    }
    cm.dispose(); // unstuck everyone
    }
    }
 
Upvote 0
Post the bat error. The line seems fine to me.


Edit: Try this. A bracket was missing in either your edited script, or mine.
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.changeJobById, 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.changeJobById(431) : (cm.getPlayer().getJob() == 431 && cm.getPlayer().getLevel()>=55) ? cm.changeJobById(432) :  
            (cm.getPlayer().getJob() == 432 && cm.getPlayer().getLevel()>=70) ? cm.changeJobById(433) : (cm.getPlayer().getJob() == 433 & cm.getPlayer().getLevel()>=120) ? cm.changeJobById(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.changeJobById(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.changeJobById(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.changeJobById(second[type][selection]); // multiple array - condenses second job choices by a bunch.  
    // koc - first job 
        } else if (cm.getPlayer().getJob() == 1000) { 
                cm.changeJobById(koc[selection); 
    } 
    cm.dispose(); // unstuck everyone 
    } 
    }
 
Upvote 0
hey jon , this is my Mob Spanwer Script :

var status = 0;

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

function action(mode, type, selection) {

if (mode == -1) {
cm.dispose();
}
else {
if (status >= 2 && mode == 0) {
cm.sendOk("Goodbye");
cm.dispose();
return;
}

if (mode == 1) {
status++;
}
else {
status--;
}

if (status == 0) {
cm.sendNext("I summon Bosses for #bTranceStory#l. I summon 10 monsters at a time for free.");
}
else if (status == 1) {
cm.sendSimple("Please remember I will summon 10. \r\nPlease choose #b\r\n#L0#Papulatus clock#l\r\n#L1#Headless Horseman#l\r\n#L2#Black Crow#l\r\n#L3#Anego#l\r\n#L4#Rooster#l\r\n#L5#BigFoot#l\r\n#L6#MushMom#l#r\r\n#L7#Clear Drops#l\r\n#L8#Kill All Monsters#l");
}
else if (status == 2) {

if (selection == 0) {
cm.summonMob(8500001, 23000000, 596000, 10);
cm.dispose();
}

else if (selection == 1) {
cm.summonMob(9400549, 3500000, 300000, 10);
cm.dispose();
}
else if (selection == 2) {
cm.summonMob(9400014, 35000000, 1780000, 10);
cm.dispose();
}
else if (selection == 3) {
cm.summonMob(9400121, 75000000, 3900000, 10);
cm.dispose();
}
else if (selection == 4) {
cm.summonMob(9600001, 340, 33, 10);
cm.dispose();
}
else if (selection == 5) {
cm.summonMob(9400575, 32000000, 2660000, 10);
cm.dispose();
}
else if (selection == 6) {
cm.summonMob(9500124, 20000, 1200, 10);
cm.dispose();
}
else if (selection == 7) {
cm.cleardrops();
cm.dispose();
}
else if (selection == 8) {
cm.killAllMonsters(true);
cm.dispose();
}
}
}
}

The Cleardrops and my Kill Monsters , do not work
any help ? , and can u add this monster inside ? 8820001 ( Monster ID)
 
Upvote 0
Back