Achievements System

Status
Not open for further replies.
Newbie Spellweaver
Joined
Mar 21, 2009
Messages
63
Reaction score
1
So, um, yeah. Is there a more efficient way to do this? I thought it got kind of repetitive.

Instructions:
1. Create a package in sf.odinms.net.channel called achievements
2. Make a .java file Achievements.
3. Copy and paste this code into the file.

Want to make it work? Adapt it to your leveling, job changing, etc. functions.

Update:
Updated gainAchievementNX() and gainAchievementMesos() that allows for a globally broadcasted message if you want.
(Requested by ridekink08)
Code:
    public void gainAchievementMesos(MapleClient c, String achievement, boolean global) {
        MapleCharacter player = c.getPlayer();
        player.gainMeso(getAchievementMesos(achievement), false, true, true);
        if (!global) {
            player.dropMessage(5, "[Achievement!]" + "Description: " + getAchievementDesc(achievement) + " Reward: " + formatNumber(getAchievementMesos(achievement)) + " mesos.");
        } else {
            player.getClient().getChannelServer().broadcastPacket(MaplePacketCreator.serverNotice(0, "[Achievement!] Congratulations to " + player.getName() + "! Achievement: " + getAchievementDesc(achievement) + " Reward: " + formatNumber(getAchievementMesos(achievement)) + " mesos."));
        }
    }


    public void gainAchievementNX(MapleClient c, String achievement, boolean global) {
        MapleCharacter player = c.getPlayer();
        player.modifyCSPoints(1, getAchievementNX(achievement));
        if (!global) {
            player.dropMessage(5, "[Achievement!]" + "Description: " + getAchievementDesc(achievement) + " Reward: " + formatNumber(getAchievementNX(achievement)) + " NX Cash.");
        } else  {
            player.getClient().getChannelServer().broadcastPacket(MaplePacketCreator.serverNotice(0, "[Achievement!] Congratulations to " + player.getName() + "! Achievement: " + getAchievementDesc(achievement) + " Reward: " + formatNumber(getAchievementNX(achievement)) + " NX cash."));
        }
    }

Version 2: made everything a bit neater (thanks to X-Stasis. Trying to figure out how to loop through a string array and select a specific element, but I forgot D:))

Code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package sf.odinms.net.channel.achievements;

import java.util.HashMap;
import java.util.Map;
import net.sf.odinms.client.MapleCharacter;
import net.sf.odinms.client.MapleClient;
import net.sf.odinms.tools.MaplePacketCreator;

/**
 *
 * @author iGoofy
 */
public class Achievements {
    private int[] levelAchievements = {10, 20, 30, 35, 40, 50, 55, 60, 70, 75, 80, 85, 90, 120};
    private int[] levelMesos = {10000, 35000, 50000, 100000, 220000, 250000, 300000, 350000, 400000, 460000, 470000, 480000, 490000, 500000, 1000000, 100050, 1000550};
    private int[] levelNX = {5000, 5000, 6000, 5000, 5500, 6000, 5000, 5000, 7000, 5000, 5000, 5000, 4500, 4400, 4500, 6000};
        public String getAchievementDesc(String which) { 
            Map<String, String> achievement = new HashMap<String, String>(); 
                for(int i : levelAchievements) {
                    achievement.put("Level " + i, "Reached level " + i); 
                }
                achievement.put("1st job", "Gained the 1st job"); 
                achievement.put("2nd job", "Gained the 2nd job"); 
                achievement.put("3rd job", "Gained the 3rd job"); 
                return achievement.get(which); 
        }
    

    public Integer getAchievementMesos(String which) {
        Map<String, Integer> achievement = new HashMap<String, Integer>();
                for(int i : levelAchievements) {
                    achievement.put("Level " + i, levelMesos[i]); 
                }
                achievement.put("1st Job", 35000);
                achievement.put("2nd Job", 15000);
                achievement.put("3rd Job", 47000);
                achievement.put("4th job", 200000);

                return achievement.get(which);
    }

        public Integer getAchievementNX(String which) {
        Map<String, Integer> achievements = new HashMap<String, Integer>();
                for(int i : levelAchievements) {
                    achievements.put("Level " + i, levelNX[i]); 
                }
                achievements.put("1st job", 10000);
                achievements.put("2nd job", 20000);
                achievements.put("3rd job", 30000);
                achievements.put("4th job", 40000);

                return achievements.get(which);
    }

    public void gainAchievementMesos(MapleClient c, String achievement, boolean global) {
        MapleCharacter player = c.getPlayer();
        player.gainMeso(getAchievementMesos(achievement), false, true, true);
        if (!global) {
            player.dropMessage(5, "[Achievement!]" + "Description: " + getAchievementDesc(achievement) + " Reward: " + formatNumber(getAchievementMesos(achievement)) + " mesos.");
        } else {
            player.getClient().getChannelServer().broadcastPacket(MaplePacketCreator.serverNotice(0, "[Achievement!] Congratulations to " + player.getName() + "! Achievement: " + getAchievementDesc(achievement) + " Reward: " + formatNumber(getAchievementMesos(achievement)) + " mesos."));
        }
    }


    public void gainAchievementNX(MapleClient c, String achievement, boolean global) {
        MapleCharacter player = c.getPlayer();
        player.modifyCSPoints(1, getAchievementNX(achievement));
        if (!global) {
            player.dropMessage(5, "[Achievement!]" + "Description: " + getAchievementDesc(achievement) + " Reward: " + formatNumber(getAchievementNX(achievement)) + " NX Cash.");
        } else  {
            player.getClient().getChannelServer().broadcastPacket(MaplePacketCreator.serverNotice(0, "[Achievement!] Congratulations to " + player.getName() + "! Achievement: " + getAchievementDesc(achievement) + " Reward: " + formatNumber(getAchievementNX(achievement)) + " NX cash."));
        }
    }

        //Credits: Howei from RaGEZONE
    	private String formatNumber(int x) {
		//Format Number by Howei...took me awhile with my limited Java knowledge :( (I wrote in C++ first then translated)
		String before = Integer.toString(x);
		String result = "";
		int n = 0;
		for (int i = 0; i < before.length(); i++) {
			result = before.charAt((before.length() - 1) - i) + result;
			if (n == 2 && (i + 1) != before.length()) {
				result = "," + result;
				n = -1;
			}
			n++;
		}
		return result;
	}

}

-------------------------------------------------------------------------------------------------------------------

Version 1:


Code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package sf.odinms.net.channel.achievements;

import java.util.HashMap;
import java.util.Map;
import net.sf.odinms.client.MapleCharacter;
import net.sf.odinms.client.MapleClient;

/**
 *
 * @author iGoofy
 */
public class Achievements {

            public String getAchievementDesc(String which) {
        Map<String, String> achievements = new HashMap<String, String>();
                achievements.put("Level 10", "Reached level 10");
                achievements.put("1st job", "Gained the 1st job");
                achievements.put("Level 20", "Reached level 20");
                achievements.put("Level 30", "Reached level 30");
                achievements.put("2nd job", "Gained the 2nd job");
                achievements.put("Level 35", "Reached level 35");
                achievements.put("Level 40", "Reached level 40");
                achievements.put("Level 50", "Reached level 50");
                achievements.put("Level 55", "Reached level 55");
                achievements.put("Level 60", "Reached level 60");
                achievements.put("Level 70", "Reached level 70");
                achievements.put("3rd job", "Gained the 3rd job");
                achievements.put("Level 75", "Reached level 75");
                achievements.put("Level 80", "Reached level 80");
                achievements.put("Level 85", "Reached level 85");
                achievements.put("Level 90", "Reached level 90");
                achievements.put("Level 100", "Reached level 100");
                achievements.put("Level 110", "Reached level 110");
                achievements.put("Level 120", "Reached level 120");

                return achievements.get(which);
    }

    public Integer getAchievementMesos(String which) {
        Map<String, Integer> achievements = new HashMap<String, Integer>();
                achievements.put("Level 10", 10000);
                achievements.put("1st Job", 35000);
                achievements.put("Level 20", 50000);
                achievements.put("Level 30", 100000);
                achievements.put("2nd Job", 150000);
                achievements.put("Level 35", 220000);
                achievements.put("Level 40", 250000);
                achievements.put("Level 50", 300000);
                achievements.put("Level 55", 350000);
                achievements.put("Level 60", 400000);
                achievements.put("Level 70", 460000);
                achievements.put("3rd Job", 470000);
                achievements.put("Level 75", 470000);
                achievements.put("Level 80", 480000);
                achievements.put("Level 85", 490000);
                achievements.put("Level 90", 500000);
                achievements.put("Level 100", 1000000);
                achievements.put("Level 110", 1000500);
                achievements.put("Level 120", 1005500);

                return achievements.get(which);
    }

        public Integer getAchievementNX(String which) {
        Map<String, Integer> achievements = new HashMap<String, Integer>();
                achievements.put("Level 10", 5000);
                achievements.put("1st job", 10000);
                achievements.put("Level 20", 5000);
                achievements.put("Level 30", 6000);
                achievements.put("2nd job", 20000);
                achievements.put("Level 35", 5000);
                achievements.put("Level 40", 5500);
                achievements.put("Level 50", 6000);
                achievements.put("Level 55", 5000);
                achievements.put("Level 60", 5000);
                achievements.put("Level 70", 7000);
                achievements.put("Level 75", 5000);
                achievements.put("Level 80", 5000);
                achievements.put("Level 85", 5000);
                achievements.put("Level 90", 4500);
                achievements.put("Level 100", 4400);
                achievements.put("Level 110", 4500);
                achievements.put("Level 120", 6000);

                return achievements.get(which);
    }

    public void gainAchievementMesos(MapleClient c, String achievement) {
        MapleCharacter player = c.getPlayer();
        player.gainMeso(getAchievementMesos(achievement), false, true, true);
        player.dropMessage(5, "[Achievement!]" + "Description: " + getAchievementDesc(achievement) + " Reward: " + formatNumber(getAchievementMesos(achievement)) + " mesos.");
    }


    public void gainAchievementNX(MapleClient c, String achievement) {
        MapleCharacter player = c.getPlayer();
        player.modifyCSPoints(1, getAchievementNX(achievement));
        player.dropMessage(5, "[Achievement!]" + "Description: " + getAchievementDesc(achievement) + " Reward: " + formatNumber(getAchievementNX(achievement)) + " NX Cash.");
    }

        //Credits: Howei from RaGEZONE
    	private String formatNumber(int x) {
		//Format Number by Howei...took me awhile with my limited Java knowledge :( (I wrote in C++ first then translated)
		String before = Integer.toString(x);
		String result = "";
		int n = 0;
		for (int i = 0; i < before.length(); i++) {
			result = before.charAt((before.length() - 1) - i) + result;
			if (n == 2 && (i + 1) != before.length()) {
				result = "," + result;
				n = -1;
			}
			n++;
		}
		return result;
	}

}
 
Last edited:
Awesome but those are really easy to achieve :P Maybe not just leveling up. Not sure though. Probably would only wanna use this for levels 30, 70 and maybe 100+ or there will be alot of announcements.
 
The announcements only occur for the player, not the entire world/channel/other, so that's a moot point. :P You can add or change any of the achievements, so yeah.

Also, before anyone asks, you'll have to adapt this to your leveling up, job changing, and whatever else functions to make these work.
 
Lol.

Stop copying DestinyMS. >>'

Wow, what? Get over yourself, Quasar, I've never even seen the DestinyMS source. I am allowed to code and release whatever I want the last time I checked.

@ridekink08
Here's are altered functions. If global is true, then it'll broadcast a message to the entire server, if not, then only the player who achieved something will see the message.

Code:
    public void gainAchievementMesos(MapleClient c, String achievement, boolean global) {
        MapleCharacter player = c.getPlayer();
        player.gainMeso(getAchievementMesos(achievement), false, true, true);
        if (!global) {
            player.dropMessage(5, "[Achievement!]" + "Description: " + getAchievementDesc(achievement) + " Reward: " + formatNumber(getAchievementMesos(achievement)) + " mesos.");
        } else {
            player.getClient().getChannelServer().broadcastPacket(MaplePacketCreator.serverNotice(0, "[Achievement!] Congratulations to " + player.getName() + "! Achievement: " + getAchievementDesc(achievement) + " Reward: " + formatNumber(getAchievementMesos(achievement)) + " mesos."));
        }
    }


    public void gainAchievementNX(MapleClient c, String achievement, boolean global) {
        MapleCharacter player = c.getPlayer();
        player.modifyCSPoints(1, getAchievementNX(achievement));
        if (!global) {
            player.dropMessage(5, "[Achievement!]" + "Description: " + getAchievementDesc(achievement) + " Reward: " + formatNumber(getAchievementNX(achievement)) + " NX Cash.");
        } else  {            
            player.getClient().getChannelServer().broadcastPacket(MaplePacketCreator.serverNotice(0, "[Achievement!] Congratulations to " + player.getName() + "! Achievement: " + getAchievementDesc(achievement) + " Reward: " + formatNumber(getAchievementNX(achievement)) + " NX cash."));
        }
    }
 
PHP:
    int[] poop = {10,20,30,35,40,50,55,60,70,75,80,85,90,********120};
        public String getAchievementDesc(String which) {
            Map<String, String> achievements = new HashMap<String, String>();
			    for(int i : poop)
                    achievements.put("Level " + i, "Reached level " + i);
                achievements.put("1st job", "Gained the 1st job");
                achievements.put("2nd job", "Gained the 2nd job");
                achievements.put("3rd job", "Gained the 3rd job");
                return achievements.get(which);
        }
 
PHP:
    int[] poop = {10,20,30,35,40,50,55,60,70,75,80,85,90,********120};
        public String getAchievementDesc(String which) {
            Map<String, String> achievements = new HashMap<String, String>();
			    for(int i : poop)
                    achievements.put("Level " + i, "Reached level " + i);
                achievements.put("1st job", "Gained the 1st job");
                achievements.put("2nd job", "Gained the 2nd job");
                achievements.put("3rd job", "Gained the 3rd job");
                return achievements.get(which);
        }

Ya next time use the
Code:
 bb code..
 
Not everyone plays DMS and it's unlekly he did copy it.

Very awesome release.
Hopefully this will get into more servers as Achievements make games more fun :)

EDIT:
It was their idea, but if you're saying you weren't aware, good thinking.

You do know Achievements wern't invented by them right?
From what i know of Half-life 2 Episode 2 was the first game to have them. Then other games started bringing them out. (Wow has them too)
 
Status
Not open for further replies.
Back