- 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)
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
)
-------------------------------------------------------------------------------------------------------------------
Version 1:
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: