Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

[Add-On] NisusMS Releases

Junior Spellweaver
Joined
Oct 31, 2008
Messages
149
Reaction score
45
My server (NisusMS) recently got DMCA'd, so I decided to release some of the things that we had. :/ I hope you find something you like in here.

Since this turned into a huge butt post, I'll give you a quick reference as to what is in here and in what order:

1. DPS (Damage Per Second) Ranking System

2. @Song Command

3. Custom Primitive PvP

4. Quest NPC - Equipment Sets

5. Quest NPC - Upgrade Exchange Quest

6. Ultimate Jump Quest

You can just search those titles to find what you want, since I just copy pasta'd them. Enjoy~

DPS (Damage Per Second) Ranking System:

Description: This makes it so players can test their own DPS. I put this into the player rankings on my site so if you don't have a site ranking you may want to add something that tells people what they're ranked.

In PlayerCommands add:

Code:
} else if (splitted[0].equals("testdps")) {
            final MapleCharacter chr = player;
            if(!chr.isTestingDPS()) {
            chr.toggleTestingDPS();
            chr.dropMessage("Attack the scarecrow for 15 seconds.");
            final MapleMonster mm = MapleLifeFactory.getMonster(9001007);
            int distance;
            int job = chr.getJob().getId();
            if((job >= 300 && job < 413) || (job >= 1300 && job < 1500) || (job >= 520 && job < 600))
                distance = 125;
            else
                distance = 50;
            Point p = new Point((int)chr.getPosition().getX()-distance, (int)chr.getPosition().getY());
            mm.setBelongTo(chr);
            int newhp = 100000000; //set it to what you want.
            MapleMonsterStats overrideStats = new MapleMonsterStats();
            overrideStats.setHp(newhp);
            mm.setHp(newhp);
            mm.setOverrideStats(overrideStats);
            chr.getMap().spawnMonsterOnGroudBelow(mm, p);
            TimerManager.getInstance().schedule(new Runnable() {
                public void run() {
                    int health = mm.getHp();
                    chr.getMap().killMonster(mm, chr, false);
                    int dps = (newhp - health)/15;
                    if(dps > chr.getDPS()) {
                        chr.dropMessage("NEW HIGHEST! Your damage per second is " + dps + ".");
                        chr.setDPS(dps);
                        chr.saveToDB(true);
                    } else
                        chr.dropMessage("Your damage per second is " + dps + ".");
                    chr.toggleTestingDPS();
                }
            }, 15000);
            }

In MapleMonster add:

Code:
private int belongsTo = -1;

public boolean belongsToSomeone() {
        return belongsTo != -1;
    }

    public int getBelongsTo() {
        return belongsTo;
    }

    public void setBelongTo(MapleCharacter chr) {
        belongsTo = chr.getId();
    }

In MapleCharacter add:

Code:
private boolean testingdps = false;
private int dps;

public void toggleTestingDPS(){
        this.testingdps = !testingdps;
    }
    
    public boolean isTestingDPS() {
        return testingdps;
    }

In AbstractDealDamageHandler add:

Code:
 if (monster.belongsToSomeone()) {
                    if(monster.getBelongsTo() != player.getId()) {
                        totDamage = 0;
                        return;
                    }
}

After:

Code:
totDamage += totDamageToOneMonster;

Modify loadCharFromDB and saveToDB so it has a value named "dps" in it. It should be fairly easy. Also, you'll need to add "dps" to your database in Characters. From there you can add it to your site rankings or do whatever you want with it.

@Song Command:

Description: This basically lets you make your own music using the solfedge notes from Orbis.

In PlayerCommands Add:

Code:
} else if (splitted[0].equals("song")) {
            if(splitted.length <= 1) {
                player.dropMessage("To use this, enter @song followed by do, re, mi, pa, sol, la, or si.\r\nExample: @song do re mi");
            } else {
                final String notes[] = splitted;
                final MapleCharacter musician = player;
                int delay = 0;
                for(int i = 1; i <= splitted.length + 1; i++) {
                    final int j = i;
                    TimerManager.getInstance().schedule(new Runnable() {
                                public void run() {
                                     if(notes[j].compareTo("do") == 0 || notes[j].compareTo("re") == 0 || notes[j].compareTo("mi") == 0 || notes[j].compareTo("pa") == 0 || notes[j].compareTo("sol") == 0 || notes[j].compareTo("la") == 0 || notes[j].compareTo("si") == 0)
                                        musician.getClient().announce(MaplePacketCreator.playSound("orbis/" + notes[j]));
                                }
                            }, delay);
                            delay += 1000;
                }
            }

Custom Primitive PvP:

Description: This is a fairly primitive PvP system I made in about a day. You challenge someone with @duel, they @accept, and then two straw dummies are spawned slightly behind them. As you move around, the dummies follow you around by spawning to the new position. It knows which side of the player to spawn on the dummy on too. I would just like to say that I am fully aware that this system is no where near the best, and still needs tinkering with as far as HP and damage are concerned as I only recently did this, but it works. The one advantage I would say this system has, is that it has tracking.

In PlayerCommands add:

Code:
} else if (splitted[0].equals("duel")) {
            MapleCharacter victim = c.getPlayer().getClient().getChannelServer().getPlayerStorage().getCharacterByName(splitted[1]);
            if(victim.getMapId() == player.getMapId()) {
                if(victim.getDueler() == null) {
                    player.setDueler(victim);
                    victim.setDueler(player);
                    victim.dropMessage("(/*Rbs." + player.getReborns() + " */Lv." + player.getLevel() + ") " + player.getName() + " would like to duel you, type @accept or @decline.");
                    player.dropMessage("You have challenged " + victim.getName() + ".");
                } else
                    player.dropMessage(victim.getName() + " has already being challenged or challenging someone.");
            } else
                player.dropMessage("Make sure the player is in the same map as you.");
        } else if (splitted[0].equals("accept")) {
            if(player.getDueler() != null && !player.isDueling()) {
                MapleCharacter mc = player.getDueler();
                mc.dropMessage(player.getName() + " accepts your duel. The duel has started.");
                player.dropMessage("The duel has started.");
                MapleMonster mm = MapleLifeFactory.getMonster(9001007);
                mm.setBelongTo(mc);
                int newhp = player.getHp() * 100;
                MapleMonsterStats overrideStats = new MapleMonsterStats();
                overrideStats.setHp(newhp);
                mm.setHp(newhp);
                mm.setOverrideStats(overrideStats);
                Point p1 = player.getPosition();
                Point p2 = mc.getPosition();
                if(p1.getX() < p2.getX()) {
                    p1.setLocation(p1.getX()-40, p1.getY());
                    p2.setLocation(p2.getX()+40, p2.getY());
                } else {
                    p1.setLocation(p1.getX()+40, p1.getY());
                    p2.setLocation(p2.getX()-40, p2.getY());
                }
                mc.getMap().spawnMonsterOnGroudBelow(mm, p1);
                player.setDuelMon(mm);
                MapleMonster mn = MapleLifeFactory.getMonster(9001007);
                mn.setBelongTo(player);
                newhp = mc.getHp() * 100;
                overrideStats = new MapleMonsterStats();
                overrideStats.setHp(newhp);
                mn.setHp(mc.getHp() * 100);
                mn.setOverrideStats(overrideStats);
                mc.getMap().spawnMonsterOnGroudBelow(mn, p2);
                mc.setDuelMon(mn);
                mc.setDueling(true);
                player.setDueling(true);
            } else
                player.dropMessage("You have not been challenged.");
        } else if (splitted[0].equals("decline")) {
            if(player.getDueler() != null  && !player.isDueling()) {
                MapleCharacter declined = player.getDueler();
                declined.dropMessage(player.getName() + " declined your duel.");
                declined.setDueler(null);
                player.dropMessage("You have declined " + declined.getName() + "'s duel.");
                player.setDueler(null);
            } else
                player.dropMessage("You have not been challenged.");

In MapleCharacter add:

Code:
private MapleCharacter dueler;
    private boolean dueling = false;
    private MapleMonster duelmon;
    private int pvpinc = 0;

public void setDueler(MapleCharacter mc) {
        dueler = mc;
    }

    public MapleCharacter getDueler() {
        return dueler;
    }

    public boolean isDueling() {
        return dueling;
    }

    public void setDueling(boolean d) {
        dueling = d;
    }

    public MapleMonster getDuelMon() {
        return duelmon;
    }

    public void setDuelMon(MapleMonster mm) {
        duelmon = mm;
    }

    public int getPvpInc() {
        return pvpinc;
    }

    public void incPvp() {
        pvpinc++;
    }

    public void resetPvp() {
        pvpinc = 0;
    }

In MapleMonster add:

Code:
private int belongsTo = -1;

public boolean belongsToSomeone() {
        return belongsTo != -1;
    }

    public int getBelongsTo() {
        return belongsTo;
    }

    public void setBelongTo(MapleCharacter chr) {
        belongsTo = chr.getId();
    }

In PlayerMoveHandler add:

Code:
if(c.getPlayer().isDueling()) {
                if(c.getPlayer().getPvpInc() == 1) {
                    MapleCharacter player = c.getPlayer();
                    MapleCharacter mc = player.getDueler();
                    Point m2 = mc.getDuelMon().getPosition();
                    Point p1 = player.getPosition();
                    if(p1.getX() < m2.getX()) {
                        p1.setLocation(p1.getX()-40, p1.getY());
                    } else if(p1.getX() > m2.getX()) {
                        p1.setLocation(p1.getX()+40, p1.getY());
                    }
                    player.getMap().killMonster(c.getPlayer().getDuelMon(), player, false, false, 0);
                    player.getDuelMon().setHp(player.getHp()*100);
                    player.getMap().spawnMonsterOnGroudBelow(player.getDuelMon(), p1);
                    player.resetPvp();
                } else {
                    c.getPlayer().incPvp();
                }
            }

After:

Code:
updatePosition(res, c.getPlayer(), 0);
            c.getPlayer().getMap().movePlayer(c.getPlayer(), c.getPlayer().getPosition());

In AbstractDealDamageHandler add:

Code:
if (monster.belongsToSomeone()) {
                    if(monster.getBelongsTo() != player.getId()) {
                        totDamage = 0;
                        return;
                    }
                    if (player.isDueling()) {
                        MapleCharacter hurt = player.getDueler();
                        int hp = hurt.getHp() - totDamage;
                        if(hp < 0) {
                            hp = 0;
                            MapleCharacter loser = hurt;
                            MapleCharacter winner = player;
                            loser.getMap().killMonster(loser.getDuelMon(), winner, false, false, 0);
                            loser.setHpMp(0);
                            loser.setDueler(null);
                            loser.setDuelMon(null);
                            loser.setDueling(false);
                            loser.dropMessage("You have lost the duel!");
                            winner.getMap().killMonster(winner.getDuelMon(), winner, false, false, 0);
                            winner.setDueler(null);
                            winner.setDuelMon(null);
                            winner.setDueling(false);
                            winner.dropMessage("You have won the duel!");
                        }
                        hurt.setHp(hp);
                        hurt.updateSingleStat(MapleStat.HP, hp);
                    }
                }

After:

Code:
totDamage += totDamageToOneMonster;

Quest NPC - Equipment Sets:

Description: Hooray, an NPC. >.> I thought putting this in with everything else would be okay. This is an NPC where you exchange Dex/Luk/Str/Wisdom/Dark(or Black I always get them mixed up) ores for Level 50 - Level 100 Equipment sets. This NPC will NOT be easy to modify and I know it's silly how it reestablishes some variables twice, but when I tried storing the variables as globals and only doing them once, it messed up for some reason and I had no idea why. Also I just finished this yesterday, so I wasn't finished with colouring text and such. Enjoy~

Code:
var status = 0;
var equips = [[[[1040089, 1060078, 1002028, 1082011, 1072135], [1040091, 1072149, 1060080, 1082061, 1002029], [1040103, 1060091, 1002030, 1082104, 1072155], [1050082, 1002339, 1082114, 1072211, 1000000], [1040112, 1060101, 1002529, 1082129, 1072197], [1072221, 1040121, 1082140, 1002378, 1060110]], [[1050047, 1002217, 1082081, 1072143, 1000000], [1050055, 1002245, 1082087, 1072138, 1000000], [1050067, 1002253, 1082099, 1072160, 1000000], [1050073, 1002273, 1082122, 1072178, 1000000], [1050094, 1002365, 1082133, 1072208, 1000000], [1050103, 1002399, 1082152, 1072224, 1000000]], [[1050052, 1002211, 1082084, 1072124, 1000000], [1050059, 1002269, 1082091, 1072145, 1000000], [1050063, 1002288, 1082107, 1072166, 1000000], [1050077, 1002277, 1082111, 1072184, 1000000], [1050090, 1002404, 1082126, 1072204, 1000000], [1050106, 1002408, 1082160, 1072229, 1000000]], [[1002207, 1082067, 1072130, 1040094, 1060083], [1002656, 1082094, 1072151, 1040099, 1060088], [1002284, 1082096, 1072162, 1040106, 1060094], [1002329, 1082120, 1072173, 1040109, 1060098], [1002325, 1082143, 1072194, 1040117, 1060106], [1002381, 1082135, 1072214, 1050097, 1000000]], [[1052116, 1002631, 1082198, 1072303, 1000000], [1052119, 1002634, 1082201, 1072306, 1000000], [1052122, 1002637, 1082204, 1072309, 1000000], [1052125, 1002640, 1082207, 1072312, 1000000], [1052128, 1002643, 1082210, 1072315, 1000000], [1052131, 1002646, 1082213, 1072318, 1000000]]], [[[1041087, 1061086, 1002028, 1082011, 1072135], [1041092, 1061091, 1002029, 1082061, 1072149], [1041097, 1061096, 1002030, 1082104, 1072155], [1051079, 1002339, 1082114, 1072211, 1000000], [1041120, 1061119, 1002529, 1082129, 1072197], [1072221, 1041123, 1082140, 1002378, 1061122]], [[1051034, 1002217, 1082081, 1072143, 1000000], [1051046, 1002245, 1082087, 1072138, 1000000], [1051052, 1002253, 1082099, 1072160, 1000000], [1051057, 1002273, 1082122, 1072178, 1000000], [1051096, 1002365, 1082133, 1072208, 1000000], [1051102, 1002399, 1082152, 1072224, 1000000]], [[1051037, 1002211, 1082084, 1072124, 1000000], [1051042, 1002269, 1082091, 1072145, 1000000], [1051064, 1002288, 1082107, 1072166, 1000000], [1051068, 1002277, 1082111, 1072184, 1000000], [1051084, 1002404, 1082126, 1072204, 1000000], [1051105, 1002408, 1082160, 1072229, 1000000]], [[1002207, 1082067, 1072130, 1041080, 1061079], [1002656, 1082094, 1072151, 1041094, 1061093], [1002284, 1082096, 1072162, 1041102, 1061101], [1002329, 1082120, 1072173, 1041106, 1061105], [1002325, 1082143, 1072194, 1041117, 1061116], [1002381, 1082135, 1072214, 1051091, 1000000]], [[1052116, 1002631, 1082198, 1072303, 1000000], [1052119, 1002634, 1082201, 1072306, 1000000], [1052122, 1002637, 1082204, 1072309, 1000000], [1052125, 1002640, 1082207, 1072312, 1000000], [1052128, 1002643, 1082210, 1072315, 1000000], [1052131, 1002646, 1082213, 1072318, 1000000]]]];
var weapon = [[1302010, 1302011, 1302012, 1302018, 1302023, 1302056], [1402003, 1402011, 1402012, 1402015, 1402016, 1402035], [1322041, 1322042, 1322043, 1322044, 1322029, 1322045], [1422005, 1422009, 1422010, 1422012, 1422013, 1422027], [1312022, 1312023, 1312024, 1312025, 1312015, 1312030], [1412003, 1412007, 1412008, 1412009, 1412010, 1412021], [1432004, 1432006, 1432007, 1432010, 1432011, 1432030], [1442005, 1442010, 1442008, 1442019, 1442020, 1442044], [1372007, 1372014, 1372015, 1372016, 1372009, 1372010], [1382001, 1382006, 1382007, 1382023, 1382008, 1382035], [1452008, 1452004, 1452011, 1452015, 1452026, 1452021], [1462007, 1462008, 1462009, 1462012, 1462021, 1462015], [1332003, 1332015, 1332018, 1332023, 1332027, 1332052], [1332054, 1332017, 1332019, 1332022, 1332026, 1332051], [1472021, 1472025, 1472029, 1472031, 1472033, 1472053], [1492007, 1492008, 1492009, 1492010, 1492011, 1492012], [1482007, 1482008, 1482009, 1482010, 1482011, 1482012]];
var ore = 0;
var gender = 0;
var job = 0;
var level = 0;
var amountneeded = 0;
var choice;
var choice2;
var jobid;
var weap = -1;

function start()  {
    status = -1;
    action(1, 0, 0)
}
	
function action(mode, type, selection) { 
    if (mode == 1) {
	status ++;
    } else {
        cm.dispose();
	status --;
    }
    if (status == 0) {
		jobid = cm.getPlayer().getJob().getId();
		var job = jobid;
		if(cm.getPlayer().getGender() == 0) {
			if((job >= 100 && job < 200) || (job >= 1100 && job < 1200) || (job > 2000))
				cm.sendSimple("#d#ePlease select the equipment you'd like:\r\n#b#L10#Level 50 Equipment#l\r\n#L11#Level 60 Equipment#l\r\n#L12#Level 70 Equipment#l\r\n#L13#Level 80 Equipment#l\r\n#L14#Level 90 Equipment#l\r\n#L15#Level 100 Equipment#l");
			else if((job >= 200 && job < 300) || (job >= 1200 && job < 1300))
				cm.sendSimple("#d#ePlease select the equipment you'd like:\r\n#b#L20#Level 50 Equipment#l\r\n#L21#Level 60 Equipment#l\r\n#L22#Level 70 Equipment#l\r\n#L23#Level 80 Equipment#l\r\n#L24#Level 90 Equipment#l\r\n#L25#Level 100 Equipment#l");
			else if((job >= 300 && job < 400) || (job >= 1300 && job < 1400))
				cm.sendSimple("#d#ePlease select the equipment you'd like:\r\n#b#L30#Level 50 Equipment#l\r\n#L31#Level 60 Equipment#l\r\n#L32#Level 70 Equipment#l\r\n#L33#Level 80 Equipment#l\r\n#L34#Level 90 Equipment#l\r\n#L35#Level 100 Equipment#l");
			else if((job >= 400 && job < 500) || (job >= 1400 && job < 1500))
				cm.sendSimple("#d#ePlease select the equipment you'd like:\r\n#b#L40#Level 50 Equipment#l\r\n#L41#Level 60 Equipment#l\r\n#L42#Level 70 Equipment#l\r\n#L43#Level 80 Equipment#l\r\n#L44#Level 90 Equipment#l\r\n#L45#Level 100 Equipment#l");
			else if((job >= 500 && job < 600) || (job >= 1500 && job < 1600))
				cm.sendSimple("#d#ePlease select the equipment you'd like:\r\n#b#L50#Level 50 Equipment#l\r\n#L51#Level 60 Equipment#l\r\n#L52#Level 70 Equipment#l\r\n#L53#Level 80 Equipment#l\r\n#L54#Level 90 Equipment#l\r\n#L55#Level 100 Equipment#l");	
		} else {
			if((job >= 100 && job < 200) || (job >= 1100 && job < 1200) || (job > 2000))
				cm.sendSimple("#d#ePlease select the equipment you'd like:\r\n#b#L110#Level 50 Equipment#l\r\n#L111#Level 60 Equipment#l\r\n#L112#Level 70 Equipment#l\r\n#L113#Level 80 Equipment#l\r\n#L114#Level 90 Equipment#l\r\n#L115#Level 100 Equipment#l");
			else if((job >= 200 && job < 300) || (job >= 1200 && job < 1300))
				cm.sendSimple("#d#ePlease select the equipment you'd like:\r\n#b#L120#Level 50 Equipment#l\r\n#L121#Level 60 Equipment#l\r\n#L122#Level 70 Equipment#l\r\n#L123#Level 80 Equipment#l\r\n#L124#Level 90 Equipment#l\r\n#L125#Level 100 Equipment#l");
			else if((job >= 300 && job < 400) || (job >= 1300 && job < 1400))
				cm.sendSimple("#d#ePlease select the equipment you'd like:\r\n#b#L130#Level 50 Equipment#l\r\n#L131#Level 60 Equipment#l\r\n#L132#Level 70 Equipment#l\r\n#L133#Level 80 Equipment#l\r\n#L134#Level 90 Equipment#l\r\n#L135#Level 100 Equipment#l");
			else if((job >= 400 && job < 500) || (job >= 1400 && job < 1500))
				cm.sendSimple("#d#ePlease select the equipment you'd like:\r\n#b#L140#Level 50 Equipment#l\r\n#L141#Level 60 Equipment#l\r\n#L142#Level 70 Equipment#l\r\n#L143#Level 80 Equipment#l\r\n#L144#Level 90 Equipment#l\r\n#L145#Level 100 Equipment#l");
			else if((job >= 500 && job < 600) || (job >= 1500 && job < 1600))
				cm.sendSimple("#d#ePlease select the equipment you'd like:\r\n#b#L150#Level 50 Equipment#l\r\n#L151#Level 60 Equipment#l\r\n#L152#Level 70 Equipment#l\r\n#L153#Level 80 Equipment#l\r\n#L154#Level 90 Equipment#l\r\n#L155#Level 100 Equipment#l");	
		}
	} else if (status == 1) {
		choice = selection;
		if(choice%10 == 0)
			cm.sendSimple("#dHow would you like to get this gear?\r\n\r\n#b#L200#Forge anew#l\r\n\r\nThis option not available for level 50 gear.");
		else
			cm.sendSimple("#dHow would you like to get this gear?\r\n\r\n#b#L200#Forge anew (Cost more ores)#l\r\n#L300#Upgrade older set (Cost less ores)#l");
	} else if (status == 2) {
		var amountupgrade = ((choice%10) * 2) * 10;
		var amountcreate;
		if(amountupgrade == 0)
			amountcreate = 10;
		else if (amountupgrade == 20)
			amountcreate = 30;
		else if (amountupgrade == 40)
			amountcreate = 60;
		else if (amountupgrade == 60)
			amountcreate = 100;
		else if (amountupgrade == 80)
			amountcreate = 150;
		else if (amountupgrade == 100)
			amountcreate = 210;
		var itemcheck = 0;
		var ore = (choice > 100) ? ore = 4004000 + ((choice-100)/10) - 1 : 4004000 + (choice/10) - 1;
		var gender = (choice < 100) ? 0 : 1;
		var job = (choice > 100) ? ((choice-100-(choice%10))/10) - 1 : ((choice-(choice%10))/10) - 1;
		var level = (choice > 100) ? (choice-100)%10: choice%10;
		var levelstr = (level * 10) + 50;
		if (level > 0) {
			for (var i = 0; i < 5; i++) {
				if(cm.itemQuantity(equips[gender][job][level-1][i]) > 0 || equips[gender][job][level-1][i] == 1000000)
					itemcheck++;
			}
		}
		amountneeded = (selection == 300) ? amountupgrade : amountcreate;
		if (cm.itemQuantity(ore) >= amountneeded) {
			if(selection == 300) {
				if(itemcheck == 5) {
					cm.sendSimple("Are you sure you want to upgrade your level " + (levelstr-10) + " gear into level " + levelstr + " gear using #r" + amountneeded + "#k #i" + ore + "#?\r\n#L301#Yes sir I do.#l\r\n#L302#Nope, I changed my mind.#l");
				} else {
					var str = "";
					for(var j = 0; j < 5; j++) {
						if(equips[gender][job][level-1][j] != 1000000)
							str += "#i" + equips[gender][job][level-1][j] + "#\r\n";
					}
					cm.sendOk("Please make sure you have have the level " + (levelstr-10) + " you got from this quest in your inventory. They should look like this:\r\n" + str);
					cm.dispose();
				}
			} else {
				cm.sendSimple("Are you sure you want to create " + levelstr + " gear using #r" + amountneeded + "#k #i" + ore + "#?\r\n#L201#Yes sir I do.#l\r\n#L202#Nope, I changed my mind.#l");
			}
		} else {
			cm.sendOk("#d#eYou need the following ore:\r\n\r\n#i" + ore + "# #B" + (cm.itemQuantity(ore)/amountneeded)*100 + "%#" + cm.itemQuantity(ore) + "/" + amountneeded);
			cm.dispose();
		}
	} else if (status == 3) {
		choice2 = selection;
		if(jobid >= 110 && jobid < 120) {
			cm.sendSimple("#d#eSelect which weapon you would like.\r\n#L400#1H Sword#l\r\n#L401#2H Sword#l\r\n#L404#1H Axe#l\r\n#L405#2H Axe#l");
		} else if(jobid >= 1110 && jobid < 1200) {
			cm.sendSimple("#d#eSelect which weapon you would like.\r\n#L400#1H Sword#l\r\n#L401#2H Sword#l");
		} else if(jobid >= 120 && jobid < 130) {
			cm.sendSimple("#d#eSelect which weapon you would like.\r\n#L400#1H Sword#l\r\n#L401#2H Sword#l\r\n#L402#1H Mace#l\r\n#L403#2H Mace#l");
		} else if(jobid >= 130 && jobid < 140) {
			cm.sendSimple("#d#eSelect which weapon you would like.\r\n#L406#Spear#l\r\n#L407#Polearm#l");
		} else if((jobid >= 200 && jobid < 300) || (jobid >= 1210 && jobid < 1300)) {
			cm.sendSimple("#d#eSelect which weapon you would like.\r\n#L408#Wand#l\r\n#L409#Staff#l");
		} else if((jobid >= 310 && jobid < 320) || (jobid >= 1310 && jobid < 1400)) {
			cm.sendNext("Weapon selection has been determined automatically, please hit next.");
			weap = 10;
		} else if(jobid >= 320 && jobid < 330) {
			cm.sendNext("Weapon selection has been determined automatically, please hit next.");
			weap = 11;
		} else if((jobid >= 410 && jobid < 420) || (jobid >= 1410 && jobid < 1500)) {
			cm.sendNext("Weapon selection has been determined automatically, please hit next.");
			weap = 14;
		} else if(jobid >= 420 && jobid < 430) {
			cm.sendSimple("#d#eSelect which weapon you would like.\r\n#L412#Luk Dagger#l\r\n#L413#Str Dagger#l");
		} else if((jobid >= 510 && jobid < 350) || (jobid >= 1510 && jobid < 1600)) {
			cm.sendNext("Weapon selection has been determined automatically, please hit next.");
			weap = 16;
		} else if(jobid >= 520 && jobid < 530) {
			cm.sendNext("Weapon selection has been determined automatically, please hit next.");
			weap = 15;
		} else if(jobid > 2000) {
			cm.sendNext("Weapon selection has been determined automatically, please hit next.");
			weap = 7;
		} else {
			cm.sendNext("Weapon selection has been determined automatically, please hit next.");
			weap = -2;
		}
	} else if (status == 4) {
		var amountupgrade = ((choice%10) * 2) * 10;
		var amountcreate;
		if(amountupgrade == 0)
			amountcreate = 10;
		else if (amountupgrade == 20)
			amountcreate = 30;
		else if (amountupgrade == 40)
			amountcreate = 60;
		else if (amountupgrade == 60)
			amountcreate = 100;
		else if (amountupgrade == 80)
			amountcreate = 150;
		else if (amountupgrade == 100)
			amountcreate = 210;
		var itemcheck = 0;
		var ore = (choice > 100) ? ore = 4004000 + ((choice-100)/10) - 1 : 4004000 + (choice/10) - 1;
		var gender = (choice < 100) ? 0 : 1;
		var job = (choice > 100) ? ((choice-100-(choice%10))/10) - 1 : ((choice-(choice%10))/10) - 1;
		var level = (choice > 100) ? (choice-100)%10: choice%10;
		var levelstr = (level * 10) + 50;
		if(weap == -1) {
			weap = selection - 400;
		}
		if(choice2 == 301) {
			cm.gainItem(ore, -amountupgrade);
			for(var j = 0; j < 5; j++) {
				if(equips[gender][job][level-1][j] != 1000000)
					cm.gainItem(equips[gender][job][level-1][j], -1);
			}
			for(var k = 0; k < 5; k++) {
				if(equips[gender][job][level][k] != 1000000)
					cm.gainItem(equips[gender][job][level][k]);
			}
			if(weap != -2) {
				cm.gainItem(weapon[weap][level]);
			}
			cm.sendOk("Enjoy.~");
			cm.dispose();
		} else if (choice2 == 201) {
			cm.gainItem(ore, -amountcreate);
			for(var k = 0; k < 5; k++) {
				if(equips[gender][job][level][k] != 1000000)
					cm.gainItem(equips[gender][job][level][k]);
			}
			if(weap != -2) {
				cm.gainItem(weapon[weap][level]);
			}
			cm.sendOk("Enjoy.~");
			cm.dispose();
		} else {
			cm.sendOk("Okay, well have a nice day.");
			cm.dispose();
		}
	}
}

Quest NPC - Upgrade Exchange Quest:

In MapleCharacter add:

Code:
    public boolean capeQuest() {
        if(getItemQuantity(1102053, true) + getItemQuantity(1102178, true) + getItemQuantity(1102147, true) + getItemQuantity(1102099, true) + getItemQuantity(1102064, true) + getItemQuantity(1102139, true) + getItemQuantity(1102046, true) + getItemQuantity(1102192, true) > 0)
            return true;
        else
            return false;
    }

    public boolean shoeQuest() {
        if(getItemQuantity(1072264, true) + getItemQuantity(1072366, true) + getItemQuantity(1072368, true) + getItemQuantity(1072369, true) + getItemQuantity(1072375, true) + getItemQuantity(1072376, true) + getItemQuantity(1072239, true) + getItemQuantity(1072238, true) > 0)
            return true;
        else
            return false;
    }

    public boolean gloveQuest() {
        if(getItemQuantity(1082244, true) + getItemQuantity(1082252, true) + getItemQuantity(1082179, true) + getItemQuantity(1082176, true) + getItemQuantity(1082254, true) + getItemQuantity(1082246, true) + getItemQuantity(1082174, true) + getItemQuantity(1082228, true) > 0)
            return true;
        else
            return false;
    }

In NPCConversationManager add:

Code:
public void npcItem(int id, short multiply, int slots) {
        MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
        IItem item = ii.getEquipById(id);
        MapleInventoryManipulator.addFromDrop(c, ii.npcItem((Equip) item, multiply, slots), true);
    }

In MapleItemInformationProvider add:

Code:
public IItem npcItem(Equip equip, short stat, int slots) {
        equip.setStr(stat);
        equip.setDex(stat);
        equip.setInt(stat);
        equip.setLuk(stat);
        equip.setMatk(stat);
        equip.setWatk(stat);
        equip.setUpgradeSlots(slots);
        equip.setVicious(2);
        return equip;
    }

NPC Code - Change currency to whatever item currency system you use. If you don't use one, get rid of all the places where currency is used and replace it with mesos. Also if your server doesn't have rebirths you'll want to readjust the level requirements. (Don't judge us for having rebirths, in our server your exp rate would get divided in half and you'd gain 1 less AP per level when you rebirthed.)

Glove NPC:

Code:
var status = 0;
var glove = -1;
var currency = 4031249;

function start()  {
	status = -1;
	action(1, 0, 0)
	}
	
function action(mode, type, selection) {
	if (mode == 1) {
		status ++;
	}
	else {
        cm.dispose();
		status --;
	}
	if (status == 0) {
		var level = cm.getPlayer().getLevel();
		var rb = cm.getRebirths();
		if(cm.getPlayer().gloveQuest() || cm.getPlayer().getItemQuantity(1082254, true) > 0) {
			if(cm.getPlayer().getItemQuantity(1082244, true) > 0) {
				if(cm.itemQuantity(4000042) >= 100 && cm.itemQuantity(4000021) >= 100 && cm.itemQuantity(currency) >= 1) {
					if(cm.itemQuantity(1082244) > 0) {
						cm.sendNext("Well done collecting all of the materials, I shall now upgrade your glove. Come talk to me again when you're ready for the next upgrade.");
						glove = 0;
					} else {
						cm.sendOk("Good job collecting all of the materials, but I'll need you to unequip the glove so I can upgrade it.");
					}
				} else {
					cm.sendOk("#d#eCollect the following:\r\n#k#nStirge Wings:\r\n#B" + cm.itemQuantity(4000042) + "%# " + cm.itemQuantity(4000042) + "/100\r\nLeather:\r\n#B" + cm.itemQuantity(4000021) + "%# " + cm.itemQuantity(4000021) + "/100\r\nRed Envelope:\r\n#B " + cm.itemQuantity(currency)*100 + "%# " + cm.itemQuantity(currency) + "/1");
				}
			} else if(cm.getPlayer().getItemQuantity(1082252, true) > 0) {
				if(level > 49 || rb > 0) {
					if(cm.itemQuantity(4000034) >= 200 && cm.itemQuantity(4000021) >= 50 && cm.itemQuantity(4003004) >= 100 && cm.itemQuantity(currency) >= 1) {
						if(cm.itemQuantity(1082252) > 0) {
							cm.sendNext("Well done collecting all of the materials, I shall now upgrade your glove. Come talk to me again when you're ready for the next upgrade.");
							glove = 1;
						} else {
							cm.sendOk("Good job collecting all of the materials, but I'll need you to unequip the glove so I can upgrade it.");
						}
					} else {
						cm.sendOk("#d#eCollect the following:\r\n#k#nJr. Necki Skin:\r\n#B" + cm.itemQuantity(4000034)/2 + "%# " + cm.itemQuantity(4000034) + "/200\r\nLeather:\r\n#B" + cm.itemQuantity(4000021)*2 + "%# " + cm.itemQuantity(4000021) + "/50\r\nStiff Feathers:\r\n#B" + cm.itemQuantity(4003004) + "%# " + cm.itemQuantity(4003004) + "/100\r\nRed Envelope:\r\n#B " + cm.itemQuantity(currency)*100 + "%# " + cm.itemQuantity(currency) + "/1");
					}
				} else {
					cm.sendOk("You need to be at least level 50 to be able to handle the next glove.");
					cm.dispose();
				}
			} else if(cm.getPlayer().getItemQuantity(1082179, true) > 0) {
				if(level > 69 || rb > 0) {
					if(cm.itemQuantity(4000036) >= 400 && cm.itemQuantity(4000021) >= 50 && cm.itemQuantity(4003004) >= 50 && cm.itemQuantity(4010001) >= 50 && cm.itemQuantity(currency) >= 1) {
						if(cm.itemQuantity(1082179) > 0) {
							cm.sendNext("Well done collecting all of the materials, I shall now upgrade your glove. Come talk to me again when you're ready for the next upgrade.");
							glove = 2;
						} else {
							cm.sendOk("Good job collecting all of the materials, but I'll need you to unequip the glove so I can upgrade it.");
						}
					} else {
						cm.sendOk("#d#eCollect the following:\r\n#k#nMedicine with Weird Vibes:\r\n#B" + cm.itemQuantity(4000036)/4 + "%# " + cm.itemQuantity(4000036) + "/400\r\nLeather:\r\n#B" + cm.itemQuantity(4000021)*2 + "%# " + cm.itemQuantity(4000021) + "/50\r\nStiff Feathers:\r\n#B" + cm.itemQuantity(4003004)*2 + "%# " + cm.itemQuantity(4003004) + "/50\r\nSteel Ores:\r\n#B" + cm.itemQuantity(4010001)*2 + "%# " + cm.itemQuantity(4010000) + "/50\r\nRed Envelope:\r\n#B " + cm.itemQuantity(currency)*100 + "%# " + cm.itemQuantity(currency) + "/1");
					}
				} else {
					cm.sendOk("You need to be at least level 70 to be able to handle the next glove.");
					cm.dispose();
				}
			} else if(cm.getPlayer().getItemQuantity(1082176, true) > 0) {
				if(level > 89 || rb > 0) {
					if(cm.itemQuantity(4000032) >= 800 && cm.itemQuantity(4000021) >= 50 && cm.itemQuantity(4003004) >= 50 && cm.itemQuantity(4010001) >= 25 && cm.itemQuantity(4010004) >= 50 && cm.itemQuantity(currency) >= 1) {
						if(cm.itemQuantity(1082176) > 0) {
							cm.sendNext("Well done collecting all of the materials, I shall now upgrade your glove. Come talk to me again when you're ready for the next upgrade.");
							glove = 3;
						} else {
							cm.sendOk("Good job collecting all of the materials, but I'll need you to unequip the glove so I can upgrade it.");
						}
					} else {
						cm.sendOk("#d#eCollect the following:\r\n#k#nLigator Skin:\r\n#B" + cm.itemQuantity(4000032)/8 + "%# " + cm.itemQuantity(4000032) + "/800\r\nLeather:\r\n#B" + cm.itemQuantity(4000021)*2 + "%# " + cm.itemQuantity(4000021) + "/50\r\nStiff Feathers:\r\n#B" + cm.itemQuantity(4003004)*2 + "%# " + cm.itemQuantity(4003004) + "/50\r\nSteel Ores:\r\n#B" + cm.itemQuantity(4010001)*4 + "%# " + cm.itemQuantity(4010000) + "/25\r\nSilver Ores:\r\n#B" + cm.itemQuantity(4010004)*2 + "%# " + cm.itemQuantity(4010004) + "/50\r\nRed Envelope:\r\n#B " + ((cm.itemQuantity(currency)/1)*100) + "%# " + cm.itemQuantity(currency) + "/1");
					}
				} else {
					cm.sendOk("You need to be at least level 90 to be able to handle the next glove.");
					cm.dispose();
				}
			} else if(cm.getPlayer().getItemQuantity(1082254, true) > 0) {
				if(level > 119 || rb > 0) {
					if(cm.itemQuantity(4000072) >= 400 && cm.itemQuantity(4000071) >= 400 && cm.itemQuantity(4000070) >= 400 && cm.itemQuantity(4000021) >= 50 && cm.itemQuantity(4003004) >= 50 && cm.itemQuantity(4010001) >= 25 && cm.itemQuantity(4010004) >= 25 && cm.itemQuantity(4010005) >= 50 && cm.itemQuantity(currency) >= 1) {
						if(cm.itemQuantity(1082254) > 0) {
							cm.sendNext("Well done collecting all of the materials, I shall now upgrade your glove. Come talk to me again when you're ready for the next upgrade.");
							glove = 4;
						} else {
							cm.sendOk("Good job collecting all of the materials, but I'll need you to unequip the glove so I can upgrade it.");
						}
					} else {
						cm.sendOk("#d#eCollect the following:\r\n#k#nGrupin Tails:\r\n#B" + cm.itemQuantity(4000072)/4 + "%# " + cm.itemQuantity(4000072) + "/400\r\nLioner Tails:\r\n#B" + cm.itemQuantity(4000071)/4 + "%# " + cm.itemQuantity(4000071) + "/400\r\nCellion Tails:\r\n#B" + cm.itemQuantity(4000070)/4 + "%# " + cm.itemQuantity(4000070) + "/400\r\nLeather:\r\n#B" + cm.itemQuantity(4000021)*2 + "%# " + cm.itemQuantity(4000021) + "/50\r\nStiff Feathers:\r\n#B" + cm.itemQuantity(4003004)*2 + "%# " + cm.itemQuantity(4003004) + "/50\r\nSteel Ores:\r\n#B" + cm.itemQuantity(4010001)*4 + "%# " + cm.itemQuantity(4010000) + "/25\r\nSilver Ores:\r\n#B" + cm.itemQuantity(4010004)*4 + "%# " + cm.itemQuantity(4010004) + "/25\r\nOrihalcon Ores:\r\n#B" + cm.itemQuantity(4010005)*2 + "%# " + cm.itemQuantity(4010005) + "/50\r\nRed Envelope:\r\n#B " + ((cm.itemQuantity(currency)/1)*100) + "%# " + cm.itemQuantity(currency) + "/1");
					}
				} else {
					cm.sendOk("You need to be at least level 120 to be able to handle the next glove.");
					cm.dispose();
				}
			} else if(cm.getPlayer().getItemQuantity(1082246, true) > 0) {
				if(level > 149 || rb > 0) {
					if(cm.itemQuantity(4000031) >= 2400 && cm.itemQuantity(4000021) >= 50 && cm.itemQuantity(4003004) >= 50 && cm.itemQuantity(4010001) >= 25 && cm.itemQuantity(4010004) >= 25 && cm.itemQuantity(4010005) >= 25 && cm.itemQuantity(4010002) >= 50 && cm.itemQuantity(currency) >= 1) {
						if(cm.itemQuantity(1082246) > 0) {
							cm.sendNext("Well done collecting all of the materials, I shall now upgrade your glove. Come talk to me again when you're ready for the next upgrade.");
							glove = 5;
						} else {
							cm.sendOk("Good job collecting all of the materials, but I'll need you to unequip the glove so I can upgrade it.");
						}
					} else {
						cm.sendOk("#d#eCollect the following:\r\n#k#nCursed Dolls:\r\n#B" + cm.itemQuantity(4000031)/24 + "%# " + cm.itemQuantity(4000031) + "/2400\r\nLeather:\r\n#B" + cm.itemQuantity(4000021)*2 + "%# " + cm.itemQuantity(4000021) + "/50\r\nStiff Feathers:\r\n#B" + cm.itemQuantity(4003004)*2 + "%# " + cm.itemQuantity(4003004) + "/50\r\nSteel Ores:\r\n#B" + cm.itemQuantity(4010001)*4 + "%# " + cm.itemQuantity(4010000) + "/25\r\nSilver Ores:\r\n#B" + cm.itemQuantity(4010004)*4 + "%# " + cm.itemQuantity(4010004) + "/25\r\nOrihalcon Ores:\r\n#B" + cm.itemQuantity(4010005)*4 + "%# " + cm.itemQuantity(4010005) + "/25\r\nMithril Ores:\r\n#B" + cm.itemQuantity(4010002)*2 + "%# " + cm.itemQuantity(4010002) + "/50\r\nRed Envelope:\r\n#B " + ((cm.itemQuantity(currency)/1)*100) + "%# " + cm.itemQuantity(currency) + "/1");
					}
				} else {
					cm.sendOk("You need to be at least level 150 to be able to handle the next glove.");
					cm.dispose();
				}
			} else if(cm.getPlayer().getItemQuantity(1082174, true) > 0) {
				if(level > 179 || rb > 0) {
					if(cm.itemQuantity(4032025) >= 3500 && cm.itemQuantity(4000021) >= 50 && cm.itemQuantity(4003004) >= 50 && cm.itemQuantity(4010001) >= 25 && cm.itemQuantity(4010004) >= 25 && cm.itemQuantity(4010005) >= 25 && cm.itemQuantity(4010002) >= 25 && cm.itemQuantity(4010003) >= 50 && cm.itemQuantity(currency) >= 1) {
						if(cm.itemQuantity(1082174) > 0) {
							cm.sendNext("Well done collecting all of the materials, I shall now upgrade your glove. Come talk to me again when you're ready for the next upgrade.");
							glove = 6;
						} else {
							cm.sendOk("Good job collecting all of the materials, but I'll need you to unequip the glove so I can upgrade it.");
						}
					} else {
						cm.sendOk("#d#eCollect the following:\r\n#k#nT-1 Socket Adapters:\r\n#B" + cm.itemQuantity(4032025)/35 + "%# " + cm.itemQuantity(4032025) + "/3500\r\nLeather:\r\n#B" + cm.itemQuantity(4000021)*2 + "%# " + cm.itemQuantity(4000021) + "/50\r\nStiff Feathers:\r\n#B" + cm.itemQuantity(4003004)*2 + "%# " + cm.itemQuantity(4003004) + "/50\r\nSteel Ores:\r\n#B" + cm.itemQuantity(4010001)*4 + "%# " + cm.itemQuantity(4010000) + "/25\r\nSilver Ores:\r\n#B" + cm.itemQuantity(4010004)*4 + "%# " + cm.itemQuantity(4010004) + "/25\r\nOrihalcon Ores:\r\n#B" + cm.itemQuantity(4010005)*4 + "%# " + cm.itemQuantity(4010005) + "/25\r\nMithril Ores:\r\n#B" + cm.itemQuantity(4010002)*4 + "%# " + cm.itemQuantity(4010002) + "/25\r\nAdamantium Ores:\r\n#B" + cm.itemQuantity(4010003)*2 + "%# " + cm.itemQuantity(4010003) + "/50\r\nRed Envelope:\r\n#B " + ((cm.itemQuantity(currency)/1)*100) + "%# " + cm.itemQuantity(currency) + "/1");
					}
				} else {
					cm.sendOk("You need to be at least level 180 to be able to handle the next glove.");
					cm.dispose();
				}
			} else if(cm.getPlayer().getItemQuantity(1082228, true) > 0) {
				if(rb > 0) {
					if(cm.itemQuantity(4000274) >= 1000 && cm.itemQuantity(4000273) >= 1000 && cm.itemQuantity(4000184) >= 500 && cm.itemQuantity(4000183) >= 500 && cm.itemQuantity(4000454) >= 250 && cm.itemQuantity(4000444) >= 250 && cm.itemQuantity(4000449) >= 250 && cm.itemQuantity(4000021) >= 50 && cm.itemQuantity(4003004) >= 50 && cm.itemQuantity(4010001) >= 25 && cm.itemQuantity(4010004) >= 25 && cm.itemQuantity(4010005) >= 25 && cm.itemQuantity(4010002) >= 25 && cm.itemQuantity(4010003) >= 25 && cm.itemQuantity(4010000) >= 50 && cm.itemQuantity(4001129) >= 10 && cm.itemQuantity(4001157) >= 2 && cm.itemQuantity(currency) >= 1) {
						if(cm.itemQuantity(1082228) > 0) {
							cm.sendNext("Well done collecting all of the materials, I shall now upgrade your glove. Come talk to me again when you're ready for the next upgrade.");
							glove = 7;
						} else {
							cm.sendOk("Good job collecting all of the materials, but I'll need you to unequip the glove so I can upgrade it.");
						}
					} else {
						cm.sendOk("#d#eCollect the following:\r\n#k#nBroken Horns:\r\n#B" + cm.itemQuantity(4000274)/10 + "%# " + cm.itemQuantity(4000274) + "/1000\r\nOld Neck Bones:\r\n#B" + cm.itemQuantity(4000273)/10 + "%# " + cm.itemQuantity(4000273) + "/1000\r\nButter-Toasted Squid:\r\n#B" + cm.itemQuantity(4000184)/5 + "%# " + cm.itemQuantity(4000184) + "/500\r\nInk Bottles:\r\n#B" + cm.itemQuantity(4000183)/5 + "%# " + cm.itemQuantity(4000183) + "/500\r\nRed Cloth:\r\n#B" + (cm.itemQuantity(4000454)/250)*100 + "%# " + cm.itemQuantity(4000454) + "/250\r\nGreen Cloth:\r\n#B" + (cm.itemQuantity(4000444)/250)*100 + "%# " + cm.itemQuantity(4000444) + "/250\r\nBlue Cloth:\r\n#B" + (cm.itemQuantity(4000449)/250)*100 + "%# " + cm.itemQuantity(4000449) + "/250\r\nLeather:\r\n#B" + cm.itemQuantity(4000021)*2 + "%# " + cm.itemQuantity(4000021) + "/50\r\nStiff Feathers:\r\n#B" + cm.itemQuantity(4003004)*2 + "%# " + cm.itemQuantity(4003004) + "/50\r\nSteel Ores:\r\n#B" + cm.itemQuantity(4010001)*4 + "%# " + cm.itemQuantity(4010000) + "/25\r\nSilver Ores:\r\n#B" + cm.itemQuantity(4010004)*4 + "%# " + cm.itemQuantity(4010004) + "/25\r\nOrihalcon Ores:\r\n#B" + cm.itemQuantity(4010005)*4 + "%# " + cm.itemQuantity(4010005) + "/25\r\nMithril Ores:\r\n#B" + cm.itemQuantity(4010002)*4 + "%# " + cm.itemQuantity(4010002) + "/25\r\nAdamantium Ores:\r\n#B" + cm.itemQuantity(4010003)*4 + "%# " + cm.itemQuantity(4010003) + "/25\r\nBronze Ores:\r\n#B" + cm.itemQuantity(4010003)*2 + "%# " + cm.itemQuantity(4010003) + "/50\r\nMaple Coins:\r\n#B" + cm.itemQuantity(401129)*10 + "%# " + cm.itemQuantity(4001129) + "/10\r\nStar Stamp:\r\n#B" + cm.itemQuantity(401157)*50 + "%# " + cm.itemQuantity(4001157) + "/2\r\nRed Envelope:\r\n#B " + ((cm.itemQuantity(currency)/1)*100) + "%# " + cm.itemQuantity(currency) + "/1");
					}
				} else {
					cm.sendOk("You need to have a rebirth to be able to handle the next glove.");
					cm.dispose();
				}
			}
		} else if (cm.getLevel() > 29){
			if(cm.getPlayer().getItemQuantity(1082232, true) == 0)
				cm.sendSimple("My name is Neve, I come from a family long known for it's passionate love making, I mean glove making. If you like, I could assist you into getting a super powerful glove. I will provide you with a basic glove and instructions on how to continue upgrading it, would you like to try?\r\n\r\n#L0#Sure, sounds fun!#l\r\n#L1#Thats okay, sounds too intense for me.#l");
			else
				cm.sendSimple("Would you like to start upgrading a new glove?\r\n\r\n#L0#Yeah, sure.#l\r\n#L1#Er, no thanks.#l");	
		} else {
			cm.sendOk("Come back to me when you are at least level 30.");
			cm.dispose();
		}
	} else if (status == 1) {
		if(selection == 0) {
			cm.sendOk("Here is the basic glove, to upgrade it collect 100 Stirge Wings, 100 Leathers and 1 Envelope");
			cm.gainItem(1082244);
		} else if (selection == 1)
			cm.sendOk("Suit yourself.");
		if(glove == 0) {
			cm.gainItem(1082244, -1);
			cm.gainItem(4000042, -100);
			cm.gainItem(4000021, -100);
			cm.gainItem(currency, -1);
			cm.npcItem(1082252, 2, 0);
			cm.showEffect("killing/clear");
		} else if(glove == 1) {
			cm.gainItem(1082252, -1);
			cm.gainItem(4000034, -200);
			cm.gainItem(4000021, -50);
			cm.gainItem(4003004, -100);
			cm.gainItem(currency, -1);
			cm.npcItem(1082179, 4, 0);
			cm.showEffect("killing/clear");
		} else if(glove == 2) {
			cm.gainItem(1082179, -1);
			cm.gainItem(4000036, -400);
			cm.gainItem(4000021, -50);
			cm.gainItem(4003004, -50);
			cm.gainItem(4010001, -50);
			cm.gainItem(currency, -1);
			cm.npcItem(1082176, 6, 0);
			cm.showEffect("killing/clear");
		} else if(glove == 3) {
			cm.gainItem(1082176, -1);
			cm.gainItem(4000032, -800);
			cm.gainItem(4000021, -50);
			cm.gainItem(4003004, -50);
			cm.gainItem(4010001, -25);
			cm.gainItem(4010004, -50);
			cm.gainItem(currency, -1);
			cm.npcItem(1082254, 8, 0);
			cm.showEffect("killing/clear");
		} else if(glove == 4) {
			cm.gainItem(1082254, -1);
			cm.gainItem(4000072, -400);
			cm.gainItem(4000071, -400);
			cm.gainItem(4000070, -400);
			cm.gainItem(4000021, -50);
			cm.gainItem(4003004, -50);
			cm.gainItem(4010001, -25);
			cm.gainItem(4010004, -25);
			cm.gainItem(4010005, -50);
			cm.gainItem(currency, -1);
			cm.npcItem(1082246, 10, 0);
			cm.showEffect("killing/clear");
		} else if(glove == 5) {
			cm.gainItem(1082246, -1);
			cm.gainItem(4000031, -2400);
			cm.gainItem(4000021, -50);
			cm.gainItem(4003004, -50);
			cm.gainItem(4010001, -25);
			cm.gainItem(4010004, -25);
			cm.gainItem(4010005, -25);
			cm.gainItem(4010002, -50);
			cm.gainItem(currency, -1);
			cm.npcItem(1082174, 12, 0);
			cm.showEffect("killing/clear");
		} else if(glove == 6) {
			cm.gainItem(1082174, -1);
			cm.gainItem(4032025, -3500);
			cm.gainItem(4000021, -50);
			cm.gainItem(4003004, -50);
			cm.gainItem(4010001, -25);
			cm.gainItem(4010004, -25);
			cm.gainItem(4010005, -25);
			cm.gainItem(4010002, -25);
			cm.gainItem(4010003, -50);
			cm.gainItem(currency, -1);
			cm.npcItem(1082228, 14, 0);
			cm.showEffect("killing/clear");
		} else if(glove == 7) {
			cm.gainItem(1082228, -1);
			cm.gainItem(4000274, -1000);
			cm.gainItem(4000273, -1000);
			cm.gainItem(4000184, -500);
			cm.gainItem(4000183, -500);
			cm.gainItem(4000454, -250);
			cm.gainItem(4000444, -250);
			cm.gainItem(4000449, -250);
			cm.gainItem(4000021, -50);
			cm.gainItem(4003004, -50);
			cm.gainItem(4010001, -25);
			cm.gainItem(4010004, -25);
			cm.gainItem(4010005, -25);
			cm.gainItem(4010002, -25);
			cm.gainItem(4010003, -25);
			cm.gainItem(4010000, -50);
			cm.gainItem(4001129, -10);
			cm.gainItem(4001157, -2);
			cm.gainItem(currency, -1);
			cm.npcItem(1082232, 16, 5);
		}
		cm.dispose();
	}
}

Shoe NPC:

Code:
var status = 0;
var shoe = -1;
var currency = 4031249;

function start()  {
	status = -1;
	action(1, 0, 0)
	}
	
function action(mode, type, selection) {
	if (mode == 1) {
		status ++;
	}
	else {
        cm.dispose();
		status --;
	}
	if (status == 0) {
		var level = cm.getPlayer().getLevel();
		var rb = cm.getRebirths();
		if(cm.getPlayer().shoeQuest()) {
			if(cm.getPlayer().getItemQuantity(1072264, true) > 0) {
				if(cm.itemQuantity(4000035) >= 100 && cm.itemQuantity(currency) >= 1) {
					if(cm.itemQuantity(1072264) > 0) {
						cm.sendNext("Well done collecting all of the materials, I shall now upgrade your shoe. Come talk to me again when you're ready for the next upgrade.");
						shoe = 0;
					} else {
						cm.sendOk("Good job collecting all of the materials, but I'll need you to unequip the shoe so I can upgrade it.");
					}
				} else {
					cm.sendOk("#d#eCollect the following:\r\n#k#nTablecloths:\r\n#B" + cm.itemQuantity(4000035) + "%# " + cm.itemQuantity(4000035) + "/100\r\nRed Envelope:\r\n#B " + cm.itemQuantity(currency)*100 + "%# " + cm.itemQuantity(currency) + "/1");
				}
			} else if(cm.getPlayer().getItemQuantity(1072366, true) > 0) {
				if(level > 49 || rb > 0) {
					if(cm.itemQuantity(4000276) >= 200 && cm.itemQuantity(4000040) >= 1 && cm.itemQuantity(currency) >= 1) {
						if(cm.itemQuantity(1072366) > 0) {
							cm.sendNext("Well done collecting all of the materials, I shall now upgrade your shoe. Come talk to me again when you're ready for the next upgrade.");
							shoe = 1;
						} else {
							cm.sendOk("Good job collecting all of the materials, but I'll need you to unequip the shoe so I can upgrade it.");
						}
					} else {
						cm.sendOk("#d#eCollect the following:\r\n#k#nAcorn:\r\n#B" + cm.itemQuantity(4000276)/2 + "%# " + cm.itemQuantity(4000276) + "/200\r\nMushmom Spore:\r\n#B" + cm.itemQuantity(4000040)*100 + "%# " + cm.itemQuantity(4000040) + "/1\r\nRed Envelope:\r\n#B " + cm.itemQuantity(currency)*100 + "%# " + cm.itemQuantity(currency) + "/1");
					}
				} else {
					cm.sendOk("You need to be at least level 50 to be able to handle the next shoe.");
					cm.dispose();
				}
			} else if(cm.getPlayer().getItemQuantity(1072368, true) > 0) {
				if(level > 69 || rb > 0) {
					if(cm.itemQuantity(4000222) >= 400 && cm.itemQuantity(4000176) >= 1 && cm.itemQuantity(currency) >= 1) {
						if(cm.itemQuantity(1072368) > 0) {
							cm.sendNext("Well done collecting all of the materials, I shall now upgrade your shoe. Come talk to me again when you're ready for the next upgrade.");
							shoe = 2;
						} else {
							cm.sendOk("Good job collecting all of the materials, but I'll need you to unequip the shoe so I can upgrade it.");
						}
					} else {
						cm.sendOk("#d#eCollect the following:\r\n#k#nWorn Paper Lanterns:\r\n#B" + cm.itemQuantity(4000222)/4 + "%# " + cm.itemQuantity(4000222) + "/400\r\nPoisonous Mushroom:\r\n#B" + cm.itemQuantity(4000176)*100 + "%# " + cm.itemQuantity(4000176) + "/1\r\nRed Envelope:\r\n#B " + cm.itemQuantity(currency)*100 + "%# " + cm.itemQuantity(currency) + "/1");
					}
				} else {
					cm.sendOk("You need to be at least level 70 to be able to handle the next shoe.");
					cm.dispose();
				}
			} else if(cm.getPlayer().getItemQuantity(1072369, true) > 0) {
				if(level > 89 || rb > 0) {
					if(cm.itemQuantity(4000048) >= 800 && cm.itemQuantity(4000040) >= 3 && cm.itemQuantity(4000176) >= 3 && cm.itemQuantity(currency) >= 1) {
						if(cm.itemQuantity(1072369) > 0) {
							cm.sendNext("Well done collecting all of the materials, I shall now upgrade your shoe. Come talk to me again when you're ready for the next upgrade.");
							shoe = 3;
						} else {
							cm.sendOk("Good job collecting all of the materials, but I'll need you to unequip the shoe so I can upgrade it.");
						}
					} else {
						cm.sendOk("#d#eCollect the following:\r\n#k#nJr. Yeti Skin:\r\n#B" + cm.itemQuantity(4000048)/8 + "%# " + cm.itemQuantity(4000048) + "/800\r\nMushmom Spores:\r\n#B" + (cm.itemQuantity(4000040)/3)*100 + "%# " + cm.itemQuantity(4000040) + "/3\r\nPoisonous Mushroom:\r\n#B" + (cm.itemQuantity(4000176)/3)*100 + "%# " + cm.itemQuantity(4000176) + "/3\r\nRed Envelope:\r\n#B " + ((cm.itemQuantity(currency)/1)*100) + "%# " + cm.itemQuantity(currency) + "/1");
					}
				} else {
					cm.sendOk("You need to be at least level 90 to be able to handle the next shoe.");
					cm.dispose();
				}
			} else if(cm.getPlayer().getItemQuantity(1072375, true) > 0) {
				if(level > 119 || rb > 0) {
					if(cm.itemQuantity(4000238) >= 1600 && cm.itemQuantity(4031196) >= 10 && cm.itemQuantity(currency) >= 1) {
						if(cm.itemQuantity(1072375) > 0) {
							cm.sendNext("Well done collecting all of the materials, I shall now upgrade your shoe. Come talk to me again when you're ready for the next upgrade.");
							shoe = 4;
						} else {
							cm.sendOk("Good job collecting all of the materials, but I'll need you to unequip the shoe so I can upgrade it.");
						}
					} else {
						cm.sendOk("#d#eCollect the following:\r\n#k#nHarp's Tail Feather:\r\n#B" + cm.itemQuantity(4000238)/16 + "%# " + cm.itemQuantity(4000238) + "/1600\r\nDark Tachions:\r\n#B" + cm.itemQuantity(4031196)*10 + "%# " + cm.itemQuantity(4031196) + "/10\r\nRed Envelope:\r\n#B " + ((cm.itemQuantity(currency)/1)*100) + "%# " + cm.itemQuantity(currency) + "/1");
					}
				} else {
					cm.sendOk("You need to be at least level 120 to be able to handle the next shoe.");
					cm.dispose();
				}
			} else if(cm.getPlayer().getItemQuantity(1072376, true) > 0) {
				if(level > 149 || rb > 0) {
					if(cm.itemQuantity(4000179) >= 3200 && cm.itemQuantity(4000175) >= 3 && cm.itemQuantity(currency) >= 1) {
						if(cm.itemQuantity(1072376) > 0) {
							cm.sendNext("Well done collecting all of the materials, I shall now upgrade your shoe. Come talk to me again when you're ready for the next upgrade.");
							shoe = 5;
						} else {
							cm.sendOk("Good job collecting all of the materials, but I'll need you to unequip the shoe so I can upgrade it.");
						}
					} else {
						cm.sendOk("#d#eCollect the following:\r\n#k#nA Bundle Of Goby:\r\n#B" + cm.itemQuantity(4000179)/32 + "%# " + cm.itemQuantity(4000179) + "/3200\r\nMiniture Pianus:\r\n#B" + (cm.itemQuantity(4000175)/3)*100 + "%# " + cm.itemQuantity(4000175) + "/3\r\nRed Envelope:\r\n#B " + ((cm.itemQuantity(currency)/1)*100) + "%# " + cm.itemQuantity(currency) + "/1");
					}
				} else {
					cm.sendOk("You need to be at least level 150 to be able to handle the next shoe.");
					cm.dispose();
				}
			} else if(cm.getPlayer().getItemQuantity(1072239, true) > 0) {
				if(level > 179 || rb > 0) {
					if(cm.itemQuantity(4000478) >= 5000 && cm.itemQuantity(4001157) >= 1 && cm.itemQuantity(1372049) >= 1 && cm.itemQuantity(currency) >= 1) {
						if(cm.itemQuantity(1072239) > 0) {
							cm.sendNext("Well done collecting all of the materials, I shall now upgrade your shoe. Come talk to me again when you're ready for the next upgrade.");
							shoe = 6;
						} else {
							cm.sendOk("Good job collecting all of the materials, but I'll need you to unequip the shoe so I can upgrade it.");
						}
					} else {
						cm.sendOk("#d#eCollect the following:\r\n#k#nWooden Pony Tail:\r\n#B" + cm.itemQuantity(4000478)/50 + "%# " + cm.itemQuantity(4000478) + "/5000\r\nStar Stamp:\r\n#B" + cm.itemQuantity(4001157) + "%# " + cm.itemQuantity(4001157)*100 + "/1\r\nZakum's Tree Branch:\r\n#B" + cm.itemQuantity(1372049) + "%# " + cm.itemQuantity(1372049)*100 + "/1\r\nRed Envelope:\r\n#B " + ((cm.itemQuantity(currency)/1)*100) + "%# " + cm.itemQuantity(currency) + "/1");
					}
				} else {
					cm.sendOk("You need to be at least level 180 to be able to handle the next shoe.");
					cm.dispose();
				}
			} else if(cm.getPlayer().getItemQuantity(1072238, true) > 0) {
				if(rb > 0) {
					if(cm.itemQuantity(1072228) >= 1 && cm.itemQuantity(1072223) >= 1 && cm.itemQuantity(1072318) >= 1 && cm.itemQuantity(1072215) >= 1 && cm.itemQuantity(1072220) >= 1 && cm.itemQuantity(4000040) >= 20 && cm.itemQuantity(4000176) >= 20 && cm.itemQuantity(4031196) >= 100 && cm.itemQuantity(4000175) >= 15 && cm.itemQuantity(4000243) >= 5 && cm.itemQuantity(4000235) >= 5 && cm.itemQuantity(4001157) >= 2 && cm.itemQuantity(4001094) >= 1 && cm.itemQuantity(currency) >= 1) {
						if(cm.itemQuantity(1072238) > 0) {
							cm.sendNext("Well done collecting all of the materials, I shall now upgrade your shoe to its final form. You may repeat this process again if you wish, just talk to me again.");
							shoe = 7;
						} else {
							cm.sendOk("Good job collecting all of the materials, but I'll need you to unequip the shoe so I can upgrade it.");
						}
					} else {
						cm.sendOk("#d#eCollect the following:\r\n#k#nBlue Arnah Shoes:\r\n#B" + cm.itemQuantity(1072228)*100 + "%# " + cm.itemQuantity(1072228) + "/1\r\nGreen Varr Shoes:\r\n#B" + cm.itemQuantity(1072223)*100 + "%# " + cm.itemQuantity(1072223) + "/1\r\nBlack Duke Barkin Shoes:\r\n#B" + cm.itemQuantity(1072318)*100 + "%# " + cm.itemQuantity(1072318) + "/1\r\nRed Katina Boots:\r\n#B" + cm.itemQuantity(1072215)*100 + "%# " + cm.itemQuantity(1072215) + "/1\r\nGreen Crescent Boots:\r\n#B" + cm.itemQuantity(1072220)*100 + "%# " + cm.itemQuantity(1072220) + "/1\r\nMushmom Spores:\r\n#B" + cm.itemQuantity(4000040)*5 + "%# " + cm.itemQuantity(4000040) + "/20\r\nPoisonous Mushrooms:\r\n#B" + cm.itemQuantity(4000176)*5 + "%# " + cm.itemQuantity(4000176) + "/20\r\nDark Tachions:\r\n#B" + cm.itemQuantity(4031196) + "%# " + cm.itemQuantity(4031196) + "/100\r\nMiniture Pianus:\r\n#B" + (cm.itemQuantity(4000175)/15)*100 + "%# " + cm.itemQuantity(4000175) + "/15\r\nGriffey's Horn:\r\n#B" + cm.itemQuantity(4000243)*20 + "%# " + cm.itemQuantity(4000243) + "/5\r\nManon's Tail:\r\n#B" + cm.itemQuantity(4000235)*20 + "%# " + cm.itemQuantity(4000235) + "/5\r\nStar Stamp:\r\n#B" + cm.itemQuantity(4001157) + "%# " + cm.itemQuantity(4001157)*50 + "/2\r\nNine Spirit's Egg:\r\n#B" + cm.itemQuantity(4001094) + "%# " + cm.itemQuantity(4001094)*100 + "/1\r\nRed Envelope:\r\n#B " + ((cm.itemQuantity(currency)/1)*100) + "%# " + cm.itemQuantity(currency) + "/1");
					}
				} else {
					cm.sendOk("You need to have a rebirth to be able to handle the next shoe.");
					cm.dispose();
				}
			}
		} else if (cm.getLevel() > 29){
			if(cm.getPlayer().getItemQuantity(1072427, true) == 0)
				cm.sendSimple("Hello sweetie, I'm Tara a humble shoe maker. If you like, I could assist you into getting a super powerful shoe. I will provide you with a basic shoe and instructions on how to continue upgrading it, would you like to try?\r\n\r\n#L0#Sure, sounds fun!#l\r\n#L1#Thats okay, sounds too intense for me.#l");
			else
				cm.sendSimple("Would you like to start upgrading a new shoe?\r\n\r\n#L0#Yeah, sure.#l\r\n#L1#Er, no thanks.#l");	
		} else {
			cm.sendOk("Come back to me when you are at least level 30.");
			cm.dispose();
		}
	} else if (status == 1) {
		if(selection == 0) {
			cm.sendOk("Here is the basic shoe, to upgrade it collect 100 Tableclothes and 1 Envelope");
			cm.gainItem(1072264);
			cm.dispose();
		} else if (selection == 1)
			cm.sendOk("Suit yourself.");
		if(shoe == 0) {
			cm.gainItem(1072264, -1);
			cm.gainItem(4000035, -100);
			cm.gainItem(currency, -1);
			cm.npcItem(1072366, 2, 0);
			cm.showEffect("killing/clear");
		} else if(shoe == 1) {
			cm.gainItem(1072366, -1);
			cm.gainItem(4000276, -200);
			cm.gainItem(4000040, -1);
			cm.gainItem(currency, -1);
			cm.npcItem(1072368, 4, 0);
			cm.showEffect("killing/clear");
		} else if(shoe == 2) {
			cm.gainItem(1072368, -1);
			cm.gainItem(4000222, -400);
			cm.gainItem(4000176, -1);
			cm.gainItem(currency, -1);
			cm.npcItem(1072369, 6, 0);
			cm.showEffect("killing/clear");
		} else if(shoe == 3) {
			cm.gainItem(1072369, -1);
			cm.gainItem(4000048, -800);
			cm.gainItem(4000040, -3);
			cm.gainItem(4000176, -3);
			cm.gainItem(currency, -1);
			cm.npcItem(1072375, 8, 0);
			cm.showEffect("killing/clear");
		} else if(shoe == 4) {
			cm.gainItem(1072375, -1);
			cm.gainItem(4000238, -1600);
			cm.gainItem(4031196, -10);
			cm.gainItem(currency, -1);
			cm.npcItem(1072376, 10, 0);
			cm.showEffect("killing/clear");
		} else if(shoe == 5) {
			cm.gainItem(1072376, -1);
			cm.gainItem(4000179, -3200);
			cm.gainItem(4000175, -3);
			cm.gainItem(currency, -1);
			cm.npcItem(1072239, 12, 0);
			cm.showEffect("killing/clear");
		} else if(shoe == 6) {
			cm.gainItem(1072239, -1);
			cm.gainItem(4000478, -5000);
			cm.gainItem(4001157, -1);
			cm.gainItem(1372049, -1);
			cm.gainItem(currency, -1);
			cm.npcItem(1072238, 14, 0);
			cm.showEffect("killing/clear");
		} else if(shoe == 7) {
			cm.gainItem(1072238, -1);
			cm.gainItem(1072228, -1);
			cm.gainItem(1072223, -1);
			cm.gainItem(1072318, -1);
			cm.gainItem(1072215, -1);
			cm.gainItem(1072220, -1);
			cm.gainItem(4000040, -20);
			cm.gainItem(4000176, -20);
			cm.gainItem(4031196, -100);
			cm.gainItem(4000175, -15);
			cm.gainItem(4000243, -5);
			cm.gainItem(4000235, -5);
			cm.gainItem(4001157, -2);
			cm.gainItem(4001094, -1);
			cm.gainItem(currency, -1);
			cm.npcItem(1072427, 16, 5);
		}
		cm.dispose();
	}
}

Cape NPC:

Code:
var status = 0;
var cape = -1;
var currency = 4031249;

function start()  {
	status = -1;
	action(1, 0, 0)
	}
	
function action(mode, type, selection) {
	if (mode == 1) {
		status ++;
	}
	else {
        cm.dispose();
		status --;
	}
	if (status == 0) {
		var level = cm.getPlayer().getLevel();
		var rb = cm.getRebirths();
		if(cm.getPlayer().capeQuest()) {
			if(cm.getPlayer().getItemQuantity(1102053, true) > 0) {
				if(cm.itemQuantity(4000114) >= 100 && cm.itemQuantity(4007005) >= 100 && cm.itemQuantity(currency) >= 1) {
					if(cm.itemQuantity(1102053) > 0) {
						cm.sendNext("Well done collecting all of the materials, I shall now upgrade your cape. Come talk to me again when you're ready for the next upgrade.");
						cape = 0;
					} else {
						cm.sendOk("Good job collecting all of the materials, but I'll need you to unequip the cape so I can upgrade it.");
					}
				} else {
					cm.sendOk("#d#eCollect the following:\r\n#k#nTable Clocks:\r\n#B" + cm.itemQuantity(4000114) + "%# " + cm.itemQuantity(4000114) + "/100\r\nMagic Powder (Purple):\r\n#B" + cm.itemQuantity(4007005) + "%# " + cm.itemQuantity(4007005) + "/100\r\nRed Envelope:\r\n#B " + ((cm.itemQuantity(currency)/1)*100) + "%# " + cm.itemQuantity(currency) + "/1");
				}
			} else if(cm.getPlayer().getItemQuantity(1102178, true) == 1) {
				if(level > 49 || rb > 0) {
					if(cm.itemQuantity(4000372) >= 250 && cm.itemQuantity(4007006) >= 100 && cm.itemQuantity(currency) >= 1) {
						if(cm.itemQuantity(1102178) > 0) {
							cm.sendNext("Well done collecting all of the materials, I shall now upgrade your cape. Come talk to me again when you're ready for the next upgrade.");
							cape = 1;
						} else {
							cm.sendOk("Good job collecting all of the materials, but I'll need you to unequip the cape so I can upgrade it.");
						}
					} else {
						cm.sendOk("#d#eCollect the following:\r\n#k#nFire Extinguishers:\r\n#B" + (cm.itemQuantity(4000372)/250)*100 + "%# " + cm.itemQuantity(4000372) + "/250\r\nMagic Powder (Red):\r\n#B" + cm.itemQuantity(4007006) + "%# " + cm.itemQuantity(4007006) + "/100\r\nRed Envelope:\r\n#B " + ((cm.itemQuantity(currency)/1)*100) + "%# " + cm.itemQuantity(currency) + "/1");
					}
				} else {
					cm.sendOk("You need to be at least level 50 to be able to handle the next cape.");
					cm.dispose();
				}
			} else if(cm.getPlayer().getItemQuantity(1102147, true) == 1) {
				if(level > 49 || rb > 0) {
					if(cm.itemQuantity(4000128) >= 500 && cm.itemQuantity(4007003) >= 100 && cm.itemQuantity(currency) >= 1) {
						if(cm.itemQuantity(1102147) > 0) {
							cm.sendNext("Well done collecting all of the materials, I shall now upgrade your cape. Come talk to me again when you're ready for the next upgrade.");
							cape = 2;
						} else {
							cm.sendOk("Good job collecting all of the materials, but I'll need you to unequip the cape so I can upgrade it.");
						}
					} else {
						cm.sendOk("#d#eCollect the following:\r\n#k#nBuffy Hats:\r\n#B" + (cm.itemQuantity(4000128)/500)*100 + "%# " + cm.itemQuantity(4000128) + "/500\r\nMagic Powder (Green):\r\n#B" + cm.itemQuantity(4007003) + "%# " + cm.itemQuantity(4007003) + "/100\r\nRed Envelope:\r\n#B " + ((cm.itemQuantity(currency)/1)*100) + "%# " + cm.itemQuantity(currency) + "/1");
					}
				} else {
					cm.sendOk("You need to be at least level 70 to be able to handle the next cape.");
					cm.dispose();
				}
			} else if(cm.getPlayer().getItemQuantity(1102099, true) == 1) {
				if(level > 89 || rb > 0) {
					if(cm.itemQuantity(4000061) >= 800 && cm.itemQuantity(4007004) >= 100 && cm.itemQuantity(currency) >= 1) {
						if(cm.itemQuantity(1102099) > 0) {
							cm.sendNext("Well done collecting all of the materials, I shall now upgrade your cape. Come talk to me again when you're ready for the next upgrade.");
							cape = 3;
						} else {
							cm.sendOk("Good job collecting all of the materials, but I'll need you to unequip the cape so I can upgrade it.");
						}
					} else {
						cm.sendOk("#d#eCollect the following:\r\n#k#nLuster Pixie's Sunpieces:\r\n#B" + (cm.itemQuantity(4000061)/800)*100 + "%# " + cm.itemQuantity(4000061) + "/800\r\nMagic Powder (Yellow):\r\n#B" + cm.itemQuantity(4007004) + "%# " + cm.itemQuantity(4007004) + "/100\r\nRed Envelope:\r\n#B " + ((cm.itemQuantity(currency)/1)*100) + "%# " + cm.itemQuantity(currency) + "/1");
					}
				} else {
					cm.sendOk("You need to be at least level 90 to be able to handle the next cape.");
					cm.dispose();
				}
			} else if(cm.getPlayer().getItemQuantity(1102064, true) == 1) {
				if(level > 119 || rb > 0) {
					if(cm.itemQuantity(4000262) >= 1000 && cm.itemQuantity(4007000) >= 100 && cm.itemQuantity(currency) >= 1) {
						if(cm.itemQuantity(1102064) > 0) {
							cm.sendNext("Well done collecting all of the materials, I shall now upgrade your cape. Come talk to me again when you're ready for the next upgrade.");
							cape = 4;
						} else {
							cm.sendOk("Good job collecting all of the materials, but I'll need you to unequip the cape so I can upgrade it.");
						}
					} else {
						cm.sendOk("#d#eCollect the following:\r\n#k#nCracked Shells:\r\n#B" + (cm.itemQuantity(4000262)/1000)*100 + "%# " + cm.itemQuantity(4000262) + "/1000\r\nMagic Powder (Brown):\r\n#B" + cm.itemQuantity(4007000) + "%# " + cm.itemQuantity(4007000) + "/100\r\nRed Envelope:\r\n#B " + ((cm.itemQuantity(currency)/1)*100) + "%# " + cm.itemQuantity(currency) + "/1");
					}
				} else {
					cm.sendOk("You need to be at least level 120 to be able to handle the next cape.");
					cm.dispose();
				}
			} else if(cm.getPlayer().getItemQuantity(1102139, true) == 1) {
				if(level > 149 || rb > 0) {
					if(cm.itemQuantity(4000181) >= 2000 && cm.itemQuantity(4007002) >= 100 && cm.itemQuantity(currency) >= 1) {
						if(cm.itemQuantity(1102139) > 0) {
							cm.sendNext("Well done collecting all of the materials, I shall now upgrade your cape. Come talk to me again when you're ready for the next upgrade.");
							cape = 5;
						} else {
							cm.sendOk("Good job collecting all of the materials, but I'll need you to unequip the cape so I can upgrade it.");
						}
					} else {
						cm.sendOk("#d#eCollect the following:\r\n#k#nFrozen Shark Fins:\r\n#B" + (cm.itemQuantity(4000181)/2000)*100 + "%# " + cm.itemQuantity(4000181) + "/2000\r\nMagic Powder (Blue):\r\n#B" + cm.itemQuantity(4007002) + "%# " + cm.itemQuantity(4007002) + "/100\r\nRed Envelope:\r\n#B " + ((cm.itemQuantity(currency)/1)*100) + "%# " + cm.itemQuantity(currency) + "/1");
					}
				} else {
					cm.sendOk("You need to be at least level 150 to be able to handle the next cape.");
					cm.dispose();
				}
			} else if(cm.getPlayer().getItemQuantity(1102046, true) == 1) {
				if(level > 179 || rb > 0) {
					if(cm.itemQuantity(4000272) >= 4000 && cm.itemQuantity(4007001) >= 100 && cm.itemQuantity(currency) >= 1) {
						if(cm.itemQuantity(1102046) > 0) {
							cm.sendNext("Well done collecting all of the materials, I shall now upgrade your cape. Come talk to me again when you're ready for the next upgrade.");
							cape = 6;
						} else {
							cm.sendOk("Good job collecting all of the materials, but I'll need you to unequip the cape so I can upgrade it.");
						}
					} else {
						cm.sendOk("#d#eCollect the following:\r\n#k#nEgg Shells:\r\n#B" + (cm.itemQuantity(4000272)/4000)*100 + "%# " + cm.itemQuantity(4000272) + "/4000\r\nMagic Powder (White):\r\n#B" + cm.itemQuantity(4007001) + "%# " + cm.itemQuantity(4007001) + "/100\r\nRed Envelope:\r\n#B " + ((cm.itemQuantity(currency)/1)*100) + "%# " + cm.itemQuantity(currency) + "/1");
					}
				} else {
					cm.sendOk("You need to be at least level 180 to be able to handle the next cape.");
					cm.dispose();
				}
			} else if(cm.getPlayer().getItemQuantity(1102192, true) == 1) {
				if(rb > 0) {
					if(cm.itemQuantity(4000459) >= 8000 && cm.itemQuantity(4007007) >= 100 && cm.itemQuantity(currency) >= 1) {
						if(cm.itemQuantity(1102192) > 0) {
							cm.sendNext("Well done collecting all of the materials, I shall now upgrade your cape to its final form. You may repeat this process again if you wish, just talk to me again.");
							cape = 7;
						} else {
							cm.sendOk("Good job collecting all of the materials, but I'll need you to unequip the cape so I can upgrade it.");
						}
					} else {
						cm.sendOk("#d#eCollect the following:\r\n#k#nBlack Armor Fragment:\r\n#B" + (cm.itemQuantity(4000459)/8000)*100 + "%# " + cm.itemQuantity(4000459) + "/8000\r\nMagic Powder (Black):\r\n#B" + cm.itemQuantity(4007007) + "%# " + cm.itemQuantity(4007007) + "/100\r\nRed Envelope:\r\n#B " + ((cm.itemQuantity(currency)/1)*100) + "%# " + cm.itemQuantity(currency) + "/1");
					}
				} else {
					cm.sendOk("You need to have a rebirth to be able to handle the next cape.");
					cm.dispose();
				}
			}
		} else if (cm.getLevel() > 24){
			if(cm.getPlayer().getItemQuantity(1102206, true) == 0)
				cm.sendSimple("I am Eleanor, a traveling cape expert. If you like, I could assist you into getting a super powerful cape. I will provide you with a basic cape and instructions on how to continue upgrading it, would you like to try?\r\n\r\n#L0#Sure, sounds fun!#l\r\n#L1#Thats okay, sounds too intense for me.#l");
			else
				cm.sendSimple("Would you like to start upgrading a new cape?\r\n\r\n#L0#Yeah, sure.#l\r\n#L1#Er, no thanks.#l");	
		} else {
			cm.sendOk("Come back to me when you are at least level 25.");
			cm.dispose();
		}
	} else if (status == 1) {
		if (cape == 0) {
			cm.gainItem(1102053, -1);
			cm.gainItem(4000114, -100);
			cm.gainItem(4007005, -100);
			cm.gainItem(currency, -1);
			cm.gainMeso(-1000000);
			cm.npcItem(1102178, 2, 0);
			cm.showEffect("killing/clear");
		} else if(cape == 1) {
			cm.gainItem(1102178, -1);
			cm.gainItem(4000372, -250);
			cm.gainItem(4007006, -100);
			cm.gainItem(currency, -1);
			cm.gainMeso(-1000000);
			cm.npcItem(1102147, 4, 0);
			cm.showEffect("killing/clear");
		} else if(cape == 2) {
			cm.gainItem(1102147, -1);
			cm.gainItem(4000128, -500);
			cm.gainItem(4007003, -100);
			cm.gainItem(currency, -1);
			cm.gainMeso(-1000000);
			cm.npcItem(1102099, 6, 0);
			cm.showEffect("killing/clear");
		} else if(cape == 3) {
			cm.gainItem(1102099, -1);
			cm.gainItem(4000061, -800);
			cm.gainItem(4007004, -100);
			cm.gainItem(currency, -1);
			cm.gainMeso(-1000000);
			cm.npcItem(1102064, 8, 0);
			cm.showEffect("killing/clear");
		} else if(cape == 4) {
			cm.gainItem(1102064, -1);
			cm.gainItem(4000262, -1000);
			cm.gainItem(4007000, -100);
			cm.gainItem(currency, -1);
			cm.gainMeso(-1000000);
			cm.npcItem(1102139, 10, 0);
			cm.showEffect("killing/clear");
		} else if(cape == 5) {
			cm.gainItem(1102139, -1);
			cm.gainItem(4000181, -2000);
			cm.gainItem(4007002, -100);
			cm.gainItem(currency, -1);
			cm.gainMeso(-1000000);
			cm.npcItem(1102046, 12, 0);
			cm.showEffect("killing/clear");
		} else if(cape == 6) {
			cm.gainItem(1102046, -1);
			cm.gainItem(4000272, -4000);
			cm.gainItem(4007001, -100);
			cm.gainItem(currency, -1);
			cm.gainMeso(-1000000);
			cm.npcItem(1102192, 14, 0);
			cm.showEffect("killing/clear");
		} else if(cape == 7) {
			cm.gainItem(1102192, -1);
			cm.gainItem(4000459, -8000);
			cm.gainItem(4007007, -100);
			cm.gainItem(currency, -1);
			cm.gainMeso(-1000000);
			cm.npcItem(1102206, 16, 5);
			cm.showEffect("killing/clear");
		} 
		if(selection == 0) {
			cm.sendOk("Here is the basic cape, to upgrade it collect 100 Table Clocks, 100 Purple Magic Powders and 1 million mesos");
			cm.gainItem(1102053);
		} else if (selection == 1)
			cm.sendOk("Suit yourself.");
		cm.dispose();
	}
}

Ultimate Jump Quest

Description: What I did was string 25 JQ maps together into a continuous chain. In order to get the prize of a Star Stamp you need to complete all 25 maps from start to finish with only 1 checkpoint. It also times you and keeps track of how many times you have done it so you can add rankings for it.

Order of Maps(Order is GMS Quest order):

Deep Forest of Patience 1
Deep Forest of Patience 2
Construction Site B1 Area 1
Construction Site B1 Area 2
Forest of Patience 1
Forest of Patience 2
Construction Site B2 Area 1
Construction Site B2 Area 2
Deep Forest of Patience 3
Deep Forest of Patience 4
Construction Site B3 Area 1
Construction Site B3 Area 2
Construction Site B3 Area 3
Forest of Patience 3
Forest of Patience 4
Forest of Patience 5
Deep Forest of Patience 5
Deep Forest of Patience 6
Deep Forest of Patience 7
Breath of Lava Stage 1
Breath of Lava Stage 2
Fitness Challenge Level 1
Fitness Challenge Level 2
Fitness Challenge Level 3
Fitness Challenge Level 4
BONUS STAGE: Chimney if you complete the rest in under an hour. Extra Star Stamp.

In MapleCharacter add:

Code:
    private Calendar ejqtime;
    private int ejqvics;
    private int ejqrec;

public boolean inJQ() {
        if((this.getMapId() >= 105040310 && this.getMapId() <= 105040316) || (this.getMapId() >= 103000900 && this.getMapId() <= 103000908) || (this.getMapId() >= 101000100 && this.getMapId() <= 101000104) || this.getMapId() == 280020000 || this.getMapId() == 280020001 || (this.getMapId() >= 109040000 && this.getMapId() <= 109040004) || this.getMapId() == 109050000 || this.getMapId() == 682000200)
            return true;
        else
            return false;
    }

public void enterJQ() {
        DecimalFormat num = new DecimalFormat("00");
        Calendar ejq = getEJQCalendar();
        long time = System.currentTimeMillis() - ejq.getTimeInMillis();
        int days = (int)time/86400000;
        time = time%86400000;
        int hours = (int)time/3600000;
        time = time%3600000;
        int mins = (int)time/60000;
        time = time%60000;
        int secs = (int)time/1000;
        if(days > 0)
            dropMessage("Your time is over a day and has expired. " + days);
	else
            dropMessage("Your current time is: " + num.format(hours) + ":" + num.format(mins) + ":" + num.format(secs));
        this.getClient().getSession().write(MaplePacketCreator.musicChange("Bgm16/FightingPinkBeen"));
        getClient().announce(MaplePacketCreator.playSound("Dojang/start"));
        getClient().announce(MaplePacketCreator.showEffect("dojang/start/stage"));
    }

public void enterMapMessage(MapleMap to) {
        DecimalFormat num = new DecimalFormat("00");
        if (to.getId() == 105040310) {
            Calendar ejq = getEJQCalendar();
            ejq.setTimeInMillis(System.currentTimeMillis());
            saveToDB(true);
            dropMessage("Welcome to Emily's Hell Jump Quest.");
            getClient().announce(MaplePacketCreator.playSound("Dojang/start"));
            getClient().announce(MaplePacketCreator.showEffect("dojang/start/stage"));
            getClient().announce(MaplePacketCreator.showEffect("dojang/start/number/1"));
            this.getClient().getSession().write(MaplePacketCreator.musicChange("Bgm16/FightingPinkBeen"));
        } else if (to.getId() == 105040311) {
            enterJQ();
            getClient().announce(MaplePacketCreator.showEffect("dojang/start/number/2"));
        } else if (to.getId() == 103000900) {
            enterJQ();
            getClient().announce(MaplePacketCreator.showEffect("dojang/start/number/3"));
        } else if (to.getId() == 103000901) {
            enterJQ();
            getClient().announce(MaplePacketCreator.showEffect("dojang/start/number/4"));
        } else if (to.getId() == 101000100) {
            enterJQ();
            getClient().announce(MaplePacketCreator.showEffect("dojang/start/number/5"));
        } else if (to.getId() == 101000101) {
            enterJQ();
            getClient().announce(MaplePacketCreator.showEffect("dojang/start/number/6"));
        } else if (to.getId() == 103000903) {
            enterJQ();
            getClient().announce(MaplePacketCreator.showEffect("dojang/start/number/7"));
        } else if (to.getId() == 103000904) {
            enterJQ();
            getClient().announce(MaplePacketCreator.showEffect("dojang/start/number/8"));
        } else if (to.getId() == 105040312) {
            enterJQ();
            getClient().announce(MaplePacketCreator.showEffect("dojang/start/number/9"));
        } else if (to.getId() == 105040313) {
            enterJQ();
            getClient().announce(MaplePacketCreator.showEffect("dojang/start/number/10"));
        } else if (to.getId() == 103000906) {
            enterJQ();
            getClient().announce(MaplePacketCreator.showEffect("dojang/start/number/11"));
        } else if (to.getId() == 103000907) {
            enterJQ();
            getClient().announce(MaplePacketCreator.showEffect("dojang/start/number/12"));
        } else if (to.getId() == 103000908) {
            enterJQ();
            getClient().announce(MaplePacketCreator.showEffect("dojang/start/number/13"));
        } else if (to.getId() == 101000102) {
            enterJQ();
            getClient().announce(MaplePacketCreator.showEffect("dojang/start/number/14"));
        } else if (to.getId() == 101000103) {
            enterJQ();
            getClient().announce(MaplePacketCreator.showEffect("dojang/start/number/15"));
        } else if (to.getId() == 101000104) {
            enterJQ();
            getClient().announce(MaplePacketCreator.showEffect("dojang/start/number/16"));
        } else if (to.getId() == 105040314) {
            enterJQ();
            getClient().announce(MaplePacketCreator.showEffect("dojang/start/number/17"));
        } else if (to.getId() == 105040315) {
            enterJQ();
            getClient().announce(MaplePacketCreator.showEffect("dojang/start/number/18"));
        } else if (to.getId() == 105040316) {
            enterJQ();
            getClient().announce(MaplePacketCreator.showEffect("dojang/start/number/19"));
        } else if (to.getId() == 280020000) {
            enterJQ();
            getClient().announce(MaplePacketCreator.showEffect("dojang/start/number/20"));
        } else if (to.getId() == 280020001) {
            enterJQ();
            getClient().announce(MaplePacketCreator.showEffect("dojang/start/number/21"));
        } else if (to.getId() == 109040000) {
            getMap().startEvent(this);
        } else if (to.getId() == 109040001) {
            enterJQ();
            getClient().announce(MaplePacketCreator.showEffect("dojang/start/number/22"));
        } else if (to.getId() == 109040002) {
            enterJQ();
            getClient().announce(MaplePacketCreator.showEffect("dojang/start/number/23"));
        } else if (to.getId() == 109040003) {
            enterJQ();
            getClient().announce(MaplePacketCreator.showEffect("dojang/start/number/24"));
        } else if (to.getId() == 109040004) {
            enterJQ();
            getClient().announce(MaplePacketCreator.showEffect("dojang/start/number/25"));
        } else if (to.getId() == 109050000) {
            Calendar ejq = getEJQCalendar();
            long time = System.currentTimeMillis() - ejq.getTimeInMillis();
            int days = (int)time/86400000;
            time = time%86400000;
            int hours = (int)time/3600000;
            time = time%3600000;
            int mins = (int)time/60000;
            time = time%60000;
            int secs = (int)time/1000;
            if(((((hours * 60) + mins) * 60) + secs < getEJQRec() || getEJQRec() == 0) && days <= 0) {
                setEJQRec((((hours * 60) + mins) * 60) + secs);
                saveToDB(true);
                dropMessage("It's a new personal record!");
            }
            incEJQVic();
            if(days > 0)
                dropMessage("Your time has expired.");
            else
                dropMessage("Your final time is: " + num.format(hours) + ":" + num.format(mins) + ":" + num.format(secs));
            getClient().announce(MaplePacketCreator.showEffect("quest/carnival/win"));
        }
    }

public boolean hasCheckPoint() {
        return checkpoints > 0;
    }

    public int getCheckPoint() {
        return checkpoints;
    }

    public void setCheckPoint(int cp) {
        checkpoints = cp;
        saveToDB(true);
    }

In changeMap in MapleCharacter add:

Code:
this.enterMapMessage(to);

after

Code:
if (to.getId() == 100000200 || to.getId() == 211000100 || to.getId() == 220000300) {
            changeMapInternal(to, pto.getPosition(), MaplePacketCreator.getWarpToMap(to, pto.getId() - 2, this));
        } else {
            changeMapInternal(to, pto.getPosition(), MaplePacketCreator.getWarpToMap(to, pto.getId(), this));
        }

In loadCharFromDB add:

Code:
            ret.ejqtime = getEJQCalendar(rs);
            ret.ejqvics = rs.getInt("ejqvics");
            ret.ejqrec = rs.getInt("ejqrec");

Still in MapleCharacter add:

Code:
private static Calendar getEJQCalendar(ResultSet rs) throws SQLException {
	Calendar Ejq = Calendar.getInstance();
	long blubb = rs.getLong("ejqtime");
	if (blubb == 0) { // basically if timestamp in db is 0000-00-00
            Ejq.setTimeInMillis(0);
            return Ejq;
	}
	Calendar today = Calendar.getInstance();
	Ejq.setTimeInMillis(rs.getTimestamp("ejqtime").getTime());
	if (today.getTimeInMillis() > Ejq.getTimeInMillis()) {
            return Ejq;
	}
        Ejq.setTimeInMillis(0);
	return Ejq;
    }

    public Calendar getEJQCalendar() {
	return ejqtime;
    }

    public static boolean eJQTime(int charid) {
        try {
            Connection con = DatabaseConnection.getConnection();
            PreparedStatement ps = con.prepareStatement("UPDATE characters SET ejqtime = ? WHERE id = ?");
            Timestamp TS = new Timestamp(System.currentTimeMillis());
            ps.setTimestamp(1, TS);
            ps.setInt(2, charid);
            ps.execute();
            ps.close();
            return true;
        } catch (SQLException ex) {}
        return false;
    }
    
    public int getEJQRec() {
        return ejqrec;
    }

    public void setEJQRec(int time) {
        ejqrec = time;
        saveToDB(true);
    }

    public void incEJQVic() {
        this.ejqvics++;
        saveToDB(true);
    }

Then add ejqvics and ejqrec to saveToDB in MapleCharacter. Then just add ejqvics, ejqrec, and ejqtime to your database. ejqvics and ejqrec are just INT(11)s, ejqtime is a Timestamp.

In NPCConversationManager add:

Code:
public void setEJQTime() {
        MapleCharacter.eJQTime(getPlayer().getId());
    }

public String showEJQTimeRanking(int num) {
        DecimalFormat form = new DecimalFormat("00");
	PreparedStatement ps = null;
	StringBuilder ret = new StringBuilder("#r=== Jump Quest of Hell Rankings ===#b");
	try {
		ps = DatabaseConnection.getConnection().prepareStatement("SELECT name, ejqrec FROM characters WHERE gm < 2 ORDER BY ejqrec asc LIMIT ?");
		ps.setInt(1,num);
		ResultSet rs = ps.executeQuery();
		num = 1;
		while (rs.next()) {
                        int time = rs.getInt("ejqrec");
                        int hours = time/3600;
                        time = time%3600;
                        int mins = time/60;
                        time = time%60;
                        int secs = time;
                        if(mins > 0 || hours > 0)
                            ret.append("\r\n").append(String.format("%d) %-15s | Time: %02d:%02d:%02d", num++, rs.getString("name"), hours, mins, secs));
                }
	} catch (Exception e1) {} finally {try {ps.close();} catch (Exception e2) {}}
	return ret.toString();
    }

    public String showEJQRanking(int num) {
	PreparedStatement ps = null;
	StringBuilder ret = new StringBuilder("#r=== Jump Quest of Hell Rankings ===#b");
	try {
            ps = DatabaseConnection.getConnection().prepareStatement("SELECT name, ejqvics FROM characters WHERE gm < 2 AND ejqvics > 0 ORDER BY ejqvics desc LIMIT ?");
            ps.setInt(1,num);
            ResultSet rs = ps.executeQuery();
            num = 1;
            while (rs.next()) {
                ret.append("\r\n").append(String.format("%d) %-20s | Completions: %d", num++, rs.getString("name"), rs.getInt("ejqvics")));
            }
	} catch (Exception e1) {} finally {try {ps.close();} catch (Exception e2) {}}
	return ret.toString();
    }

NPC Scripts for Jump Quest:

Gaga (Starts Jump Quest and shows Rankings):

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

function action(mode, type, selection) {
    if (mode == 1)
        status++;
    else {
        cm.dispose();
        return;
    }
	if (status == 0) {
		cm.sendSimple("#i4001157# This is an #r#eimpossible #dJQ#k#n that will reward you with a #d#eStar Stamp#n#k. what do you want to do?\r\n#b#L0#I want to go in.#l\r\n#L1#I want to check the rankings.#l");
	} else if (status == 1)  {
		if (selection == 0)  {
			if(cm.getLevel() >= 50 || cm.getRebirths() > 0) {
				if(!cm.getPlayer().hasCheckPoint())
					cm.sendSimple("You #e#rWILL NOT#k#n complete it #e#d#h ##k#n, I would just give up now rather then later.\r\n#b#L0#duck you hottie, I'm going.#l");
				else
					cm.sendSimple("You already have a #e#dcheckpoint#k#n, would you like to continue from this point?\r\n#b#L1#Yes, I want to start from my checkpoint.#l\r\n#L2#No, I want to start over.#l");
			} else {
				cm.sendOk("You must be at least #r#elevel 50#n#k to take on this challenge.");
				cm.dispose();
			}
		} else if (selection == 1) {
			cm.sendSimple("What #d#erankings#k#n would you like to see?\r\n#b#L3#Best Times#l\r\n#L4#Most Completions#l");
		}
	} else if (status == 2) {
		if (selection == 0 || selection == 2)  {
			cm.warp(105040310);
			cm.setEJQTime();
			cm.getPlayer().setCheckPoint(0);
			cm.dispose();
		} else if(selection == 1) {
			cm.warp(cm.getPlayer().getCheckPoint())
			cm.dispose();
		} else if (selection == 3) {
			cm.sendOk(cm.showEJQTimeRanking(999));
			cm.dispose();
		} else if (selection == 4) {
			cm.sendOk(cm.showEJQRanking(999));
			cm.dispose();
		}
	}
}

Pietro (Gives Star Stamps):

Code:
var status = 0;

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

function action(mode, type, selection) {
    if (mode == 1)
        status++;
    else {
        cm.dispose();
        return;
    }
	if (status == 0) {
		cm.sendNext("Wait, you beat it? But...How? I don't understand...");
	} else if (status == 1) {
			cm.sendNext("You'll be awarded a #bStar Stamp#k for winning, but don't win again!");
	} else if (status == 2) {
			cm.sendNext("The Star Stamp can be traded in at #rMia#k for very good prizes.");
	} else if (status == 3) {
		if (cm.canHold(4001157)) {
			var ejq = cm.getPlayer().getEJQCalendar();
			var d = new Date();
			var ms = d.getTime();
			var time = ms - ejq.getTimeInMillis();
			time = time/3600000;
			if(time <= 1 && cm.getPlayer().getCheckPoint() != -1)
				cm.sendSimple("Congratulations on beating it in under an hour. Would you like to complete Chimney for an additional Stamp\r\n(#rWARNING: ONCE INSIDE CHIMNEY YOU CAN NOT GET OUT UNTIL YOU COMPLETE IT#k)?\r\n\r\n#b#L0#Yeah sure.#l\r\n#L1#I'd rather die.#l");
			else if (cm.getPlayer().getCheckPoint() == -1) {
				cm.gainItem(4001157);
				cm.getPlayer().setCheckPoint(0);
				cm.warp(100000000);
				cm.showEffect("dojang/end/clear");
				cm.sendOk("Well done beating Chimney. Here is your bonus stamp. <3");
				cm.dispose();
			} else {
				cm.gainItem(4001157, 2);
				cm.getPlayer().setCheckPoint(0);
				cm.warp(100000000);
				cm.showEffect("dojang/end/clear");
				cm.sendOk("Here are your two star stamps. Sadly, you didn't beat it in under an hour so you wont' be allowed to complete the bonus stage.");
				cm.dispose();
			}
		} else {
			cm.sendOk("I think your Etc window is full. Please make room, then talk to me.");
			cm.dispose();
		}
    } else if (status == 4) {
		if(selection == 0) {
			cm.gainItem(4001157);
			cm.getPlayer().setCheckPoint(-1);
			cm.warp(682000200);
			cm.showEffect("killing/bonus/bonus");
		} else {
			cm.gainItem(4001157, 2);
			cm.getPlayer().setCheckPoint(0);
			cm.warp(100000000);
			cm.showEffect("dojang/end/clear");
		}
		cm.dispose();
	}
}

NPCs for warping out of the Jump Quest:

Put this NPC Script in for 1032004, 2030010, 1061007, and 1052011.

Code:
var status = 0;
var effect = 0;
 
function start() {
    if(cm.getPlayer().hasCheckPoint())
        cm.sendSimple("You have already used a checkpoint and will have to start over again. Would you still like to leave?\r\n\r\n#L0#I'll stay.#l\r\n#L1#I don't care, I'm done with this.#l");
    else
        cm.sendSimple("Would you like to leave and use your checkpoint?\r\n\r\n#L2#I'll stay.#l\r\n#L3#Yes, I would like to use my only checkpoint.#l");
}

function action(mode, type, selection) {
    status++;
    if (mode != 1){
        cm.dispose();
        return;
    }
    if (status == 1) {
        if (selection == 0 || selection == 2) {
            cm.sendNext("Wow, good luck.");
            effect = 1;
	} else if (selection == 1) {
            cm.sendNext("Gtfo my Jump Quest.");
            effect = 2;
	} else if (selection == 3) {
            cm.sendNext("Hope you come back to Hell. <3");
            effect = 3;
	}
    } else if (status == 2) {
	if(effect == 1)
            cm.showEffect("killing/first/start");
	else if (effect == 2) {
            cm.warp(100000000);
            cm.getPlayer().setCheckPoint(0);
            cm.showEffect("killing/fail");
        } else if (effect == 3) {
            cm.warp(100000000);
            cm.getPlayer().setCheckPoint(cm.getPlayer().getMapId());
            cm.showEffect("praid/timeout");
	}
    cm.dispose();
    }
}

NPC Scripts for warping to different segments:

For 1063000 put:

Code:
function start() {
    cm.warp(103000900, 0);
    cm.dispose();
}

For 1063001 put:

Code:
function start() {
    cm.warp(103000906, 0);
    cm.dispose();
}

For 1043000 put:

Code:
function start() {
    cm.warp(103000903, 0);
    cm.dispose();
}

For 1043001 put:

Code:
function start() {
    cm.warp(105040314, 0);
    cm.dispose();
}

For 1063002 put:

Code:
function start() {
    cm.warp(280020000, 0);
    cm.dispose();
}

For 2032003 put:

Code:
var status = 0;
 
function start() {
    cm.sendNext("You are almost done, you only have 4 more maps to complete.");
}
 
function action(mode, type, selection) {
    status++;
    if (mode != 1){
        cm.dispose();
        return;
    }
    if (status == 1)
            cm.sendYesNo("Past this point you will not be able to use a check point. Would you like to continue?");
    else if (status == 2) {
            cm.warp(109040000);
            cm.dispose();
    } else if (status == 3) {
	    cm.dispose();
    }
}

Final Step! Just need the XMLs for the maps with the adjusted portals:



Put those XMLs in their appropriate folder in Map.WZ. Now all you have to do is make your own rewards for the Star Stamps, or replace the Star Stamps with your own thing. Also use the inJQ() method to restrict people from warping out of the Jump Quest. Here's an example if you need one:

Code:
} else if (splitted[0].equals("henesys") || splitted[0].contains("hene")) {
    if(!player.inJQ()) {
				player.changeMap(cserv.getMapFactory().getMap(100000000));
				player.dropMessage("You've been warped.");
    } else 
				player.dropMessage("You can't do this here.");

Added my very long Jump Quest. If something is missing or you need help post and I'll see what I can do.
 
Last edited by a moderator:
Banned
Banned
Joined
Mar 27, 2011
Messages
76
Reaction score
2
Re: NisusMS Releases

Good release?
Don't know if these are in the release section or not.
 
Custom Title Activated
Loyal Member
Joined
Nov 27, 2009
Messages
1,905
Reaction score
948
Re: NisusMS Releases

What's a DPS?
 
Joined
Jul 2, 2008
Messages
467
Reaction score
40
Re: NisusMS Releases

I wonder why Nexon will DMCA a server ranked at 114 on topg.org,55 on ultimateprivateservers.com,47 on jagtoplist.com and I think no where else?
 
Junior Spellweaver
Joined
Jul 26, 2008
Messages
161
Reaction score
51
Re: NisusMS Releases

I wonder why Nexon will DMCA a server ranked at 114 on topg.org,55 on ultimateprivateservers.com,47 on jagtoplist.com and I think no where else?

iCris - [Add-On] NisusMS Releases - RaGEZONE Forums


I'm guessing it's because of the .wz edits.
 
Last edited:
Master Summoner
Loyal Member
Joined
Sep 28, 2008
Messages
599
Reaction score
291
Re: NisusMS Releases

Great release, I like your @song command, lol didn't thought of it.
 
Last edited:
Junior Spellweaver
Joined
Jan 30, 2011
Messages
106
Reaction score
21
Re: NisusMS Releases

Great release, I like your @song command, lol didn't thought of it.

Same as you, I never knew you can do this, and sorry for the bad news D=
 
offonline
Loyal Member
Joined
Aug 5, 2009
Messages
1,403
Reaction score
164
Re: NisusMS Releases

I wonder why Nexon will DMCA a server ranked at 114 on topg.org,55 on ultimateprivateservers.com,47 on jagtoplist.com and I think no where else?

My server isn't very popular and we got an DMCA, confirmed real.
I had to change webhost, that's it.
 
Last edited:
Junior Spellweaver
Joined
Oct 31, 2008
Messages
149
Reaction score
45
Re: NisusMS Releases

Thanks for the kind words. Added my pretty crappy PvP system and some of our Quest NPCs rofl. Also I missed two things in the DPS Rankings. If something is missing or you need help post and I'll see what I can do.
 

Bud

Initiate Mage
Joined
Mar 25, 2011
Messages
2
Reaction score
0
Re: NisusMS Releases

Holy air penis sucking maggot waffles! I suppose i can find use for this, shank you.

- Bud :D
 
Experienced Elementalist
Joined
Aug 27, 2008
Messages
256
Reaction score
81
Re: NisusMS Releases

Holy air penis sucking maggot waffles! I suppose i can find use for this, shank you.

- Bud :D

Can you... Not do this please? Thanks.


OnTopic: Looks really nice. I've been working on a lot of ranking and stuff of that nature and I'm surprised I didn't think of the DPS testing thing. Impressive. Nice job, and my condolences for your server.
 
Junior Spellweaver
Joined
Oct 31, 2008
Messages
149
Reaction score
45
Re: NisusMS Releases

Added my Jump Quest to the original post. It's more to add then I thought it would be. o-o
 
Junior Spellweaver
Joined
Oct 31, 2008
Messages
149
Reaction score
45
Re: NisusMS Releases

Forgot about hasCheckPoint()

I knew I'd leave something out lol. Added.

Also made a small list of what is actually in that first post since it got so damn long.
 
Last edited:
Initiate Mage
Joined
Dec 25, 2008
Messages
1
Reaction score
0
Re: NisusMS Releases

In the testdps scripts. You forgot to add setDPS() and getDPS().


---------------- EDIT ---------------------
I think i just fixed it
Code:
    public int getDPS() {
        return dps;
    }

    public void setDPS(int dps) {
        this.dps = dps;
    }

But now, I just realized, there is no setOverrideStats in MapleMonster.
 
Last edited:
Newbie Spellweaver
Joined
Apr 25, 2008
Messages
6
Reaction score
0
Re: NisusMS Releases

Thanks for this bro. This should help me come up with ways to implement player ideas. Good job. :3
 
Back
Top