merge latest version, fix up gradle depends
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
package com.wurmonline.server.questions;
|
||||
|
||||
import com.wurmonline.server.Items;
|
||||
import com.wurmonline.server.Server;
|
||||
import com.wurmonline.server.creatures.Creature;
|
||||
import com.wurmonline.server.items.Item;
|
||||
import com.wurmonline.server.players.Player;
|
||||
import com.wurmonline.server.skills.Affinities;
|
||||
import com.wurmonline.server.skills.Affinity;
|
||||
import com.wurmonline.server.skills.SkillSystem;
|
||||
import net.coldie.tools.BmlForm;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Properties;
|
||||
import java.util.Random;
|
||||
|
||||
public class AffinityOrbQuestion extends Question {
|
||||
protected Item affinityOrb;
|
||||
|
||||
public AffinityOrbQuestion(Creature aResponder, String aTitle, String aQuestion, long aTarget, Item orb){
|
||||
super(aResponder, aTitle, aQuestion, 79, aTarget);
|
||||
this.affinityOrb = orb;
|
||||
}
|
||||
|
||||
public HashMap<Integer, Integer> affinityMap = new HashMap<>();
|
||||
|
||||
@Override
|
||||
public void answer(Properties answer) {
|
||||
boolean accepted = answer.containsKey("accept") && answer.get("accept") == "true";
|
||||
if (accepted) {
|
||||
logger.info("Accepted AffinityOrb");
|
||||
int entry = Integer.parseInt(answer.getProperty("affinity"));
|
||||
int skillNum = affinityMap.get(entry);
|
||||
if(affinityOrb == null || affinityOrb.getOwnerId() != this.getResponder().getWurmId()){
|
||||
this.getResponder().getCommunicator().sendNormalServerMessage("You must own an affinity orb to obtain an affinity.");
|
||||
}else{
|
||||
if(this.getResponder() instanceof Player) {
|
||||
Player player = (Player) this.getResponder();
|
||||
//logger.info("Converting "+player.getName()+" to " + Deities.getDeityName(deity));
|
||||
String skillName = SkillSystem.getNameFor(skillNum);
|
||||
logger.info("Adding affinity for skill "+skillName+" to "+player.getName());
|
||||
Items.destroyItem(affinityOrb.getWurmId());
|
||||
|
||||
Affinity[] affs = Affinities.getAffinities(player.getWurmId());
|
||||
boolean found = false;
|
||||
for (Affinity affinity : affs) {
|
||||
if (affinity.getSkillNumber() != skillNum) continue;
|
||||
if (affinity.getNumber() >= 5){
|
||||
player.getCommunicator().sendSafeServerMessage("You already have the maximum amount of affinities for "+skillName);
|
||||
return;
|
||||
}
|
||||
Affinities.setAffinity(player.getWurmId(), skillNum, affinity.getNumber() + 1, false);
|
||||
found = true;
|
||||
Items.destroyItem(affinityOrb.getWurmId());
|
||||
player.getCommunicator().sendSafeServerMessage("Vynora infuses you with an affinity for " + skillName + "!");
|
||||
break;
|
||||
}
|
||||
if (!found) {
|
||||
Affinities.setAffinity(player.getWurmId(), skillNum, 1, false);
|
||||
Items.destroyItem(affinityOrb.getWurmId());
|
||||
player.getCommunicator().sendSafeServerMessage("Vynora infuses you with an affinity for " + skillName + "!");
|
||||
}
|
||||
}else{
|
||||
logger.info("Non-player used a "+affinityOrb.getName()+"?");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public String getAffinities(){
|
||||
String builder = "";
|
||||
Random rand = new Random();
|
||||
if(affinityOrb.getAuxData() == 0){
|
||||
logger.info("Orb has no affinity set, creating random seed now.");
|
||||
affinityOrb.setAuxData((byte) ((1+Server.rand.nextInt(120))*(Server.rand.nextBoolean() ? 1 : -1)));
|
||||
}
|
||||
rand.setSeed(affinityOrb.getAuxData());
|
||||
logger.info("Seed set to "+affinityOrb.getAuxData());
|
||||
affinityMap.clear();
|
||||
int i = 0;
|
||||
while(i < 10){
|
||||
int num = rand.nextInt(SkillSystem.getNumberOfSkillTemplates());
|
||||
if(!affinityMap.containsValue(num)) {
|
||||
builder = builder + SkillSystem.getSkillTemplateByIndex(num).getName();
|
||||
affinityMap.put(i, SkillSystem.getSkillTemplateByIndex(num).getNumber());
|
||||
i++;
|
||||
if (i < 10) {
|
||||
builder = builder + ",";
|
||||
}
|
||||
}
|
||||
}
|
||||
return builder;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendQuestion() {
|
||||
if(affinityOrb == null || affinityOrb.getOwnerId() != this.getResponder().getWurmId()){
|
||||
this.getResponder().getCommunicator().sendNormalServerMessage("You must own an affinity orb before being infused.");
|
||||
return;
|
||||
}
|
||||
BmlForm f = new BmlForm("");
|
||||
f.addHidden("id", String.valueOf(this.id));
|
||||
f.addBoldText("Select the affinity you would like to obtain\n", new String[0]);
|
||||
f.addRaw("harray{label{text='Select Affinity:'}dropdown{id='affinity';options='");
|
||||
f.addRaw(getAffinities());
|
||||
f.addRaw("'}}");
|
||||
f.addText("\n\n", new String[0]);
|
||||
f.beginHorizontalFlow();
|
||||
f.addButton("Accept", "accept");
|
||||
f.endHorizontalFlow();
|
||||
this.getResponder().getCommunicator().sendBml(400, 300, true, true, f.toString(), 255, 255, 255, this.title);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,128 @@
|
||||
package com.wurmonline.server.questions;
|
||||
|
||||
import com.wurmonline.server.DbConnector;
|
||||
import com.wurmonline.server.creatures.Creature;
|
||||
import com.wurmonline.server.deities.Deities;
|
||||
import com.wurmonline.server.players.AchievementTemplate;
|
||||
import com.wurmonline.server.skills.SkillList;
|
||||
import com.wurmonline.server.utils.DbUtilities;
|
||||
import mod.sin.wyvern.AchievementChanges;
|
||||
import net.coldie.tools.BmlForm;
|
||||
import org.gotti.wurmunlimited.modsupport.ModSupportDb;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Properties;
|
||||
|
||||
public class LeaderboardAchievementQuestion extends Question {
|
||||
protected int achievementNum;
|
||||
protected AchievementTemplate template;
|
||||
|
||||
public LeaderboardAchievementQuestion(Creature aResponder, String aTitle, String aQuestion, long aTarget, int achievementNum){
|
||||
super(aResponder, aTitle, aQuestion, 79, aTarget);
|
||||
this.achievementNum = achievementNum;
|
||||
this.template = AchievementChanges.goodAchievements.get(achievementNum);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void answer(Properties answer) {
|
||||
boolean accepted = answer.containsKey("okay") && answer.get("okay") == "true";
|
||||
if (accepted) {
|
||||
LeaderboardQuestion lbq = new LeaderboardQuestion(this.getResponder(), "Leaderboard", "Which leaderboard would you like to view?", this.getResponder().getWurmId());
|
||||
lbq.sendQuestion();
|
||||
}
|
||||
}
|
||||
|
||||
protected HashMap<String, Integer> optIn = new HashMap<>();
|
||||
protected void identifyOptIn(){
|
||||
String name;
|
||||
int opted;
|
||||
Connection dbcon;
|
||||
PreparedStatement ps;
|
||||
ResultSet rs;
|
||||
try {
|
||||
dbcon = ModSupportDb.getModSupportDb();
|
||||
ps = dbcon.prepareStatement("SELECT * FROM LeaderboardOpt");
|
||||
rs = ps.executeQuery();
|
||||
while (rs.next()) {
|
||||
name = rs.getString("name");
|
||||
opted = rs.getInt("OPTIN");
|
||||
optIn.put(name, opted);
|
||||
}
|
||||
rs.close();
|
||||
ps.close();
|
||||
}
|
||||
catch (SQLException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendQuestion() {
|
||||
BmlForm f = new BmlForm("");
|
||||
f.addHidden("id", String.valueOf(this.id));
|
||||
ArrayList<String> names = new ArrayList<>();
|
||||
ArrayList<Integer> counts = new ArrayList<>();
|
||||
//ArrayList<Integer> deities = new ArrayList<>();
|
||||
String name;
|
||||
int counter;
|
||||
int deity;
|
||||
String extra = "";
|
||||
|
||||
// Populates HashMap with latest opt-in data.
|
||||
identifyOptIn();
|
||||
|
||||
Connection dbcon;
|
||||
PreparedStatement ps;
|
||||
ResultSet rs;
|
||||
try {
|
||||
dbcon = DbConnector.getPlayerDbCon();
|
||||
//ps = dbcon.prepareStatement("SELECT players.name, skills.value, players.deity FROM skills JOIN players ON skills.owner = players.wurmid WHERE skills.number = " + skillNum + " AND (players.power = 0) ORDER BY skills.value DESC LIMIT 20");
|
||||
ps = dbcon.prepareStatement("SELECT players.name, achievements.counter FROM achievements JOIN players ON achievements.player = players.wurmid WHERE achievements.achievement = " + achievementNum + " AND achievements.counter > 0 AND players.power = 0 ORDER BY achievements.counter DESC LIMIT 20");
|
||||
rs = ps.executeQuery();
|
||||
while(rs.next()){
|
||||
name = rs.getString(1);
|
||||
counter = rs.getInt(2);
|
||||
//deity = rs.getInt(3);
|
||||
names.add(name);
|
||||
counts.add(counter);
|
||||
//deities.add(deity);
|
||||
}
|
||||
DbUtilities.closeDatabaseObjects(ps, rs);
|
||||
}
|
||||
catch (SQLException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
f.addBoldText("Top 20 players with achievement "+this.getQuestion(), new String[0]);
|
||||
f.addBoldText(template.getRequirement(), new String[0]);
|
||||
f.addText("\n\n", new String[0]);
|
||||
int i = 0;
|
||||
DecimalFormat df = new DecimalFormat(".000");
|
||||
while(i < names.size() && i < counts.size()){
|
||||
name = names.get(i);
|
||||
if(!optIn.containsKey(name)){
|
||||
name = "Unknown";
|
||||
}else if(optIn.get(name).equals(0)){
|
||||
name = "Unknown";
|
||||
}
|
||||
if(names.get(i).equals(this.getResponder().getName())){
|
||||
name = names.get(i);
|
||||
f.addBoldText(counts.get(i) + " - " + name + extra);
|
||||
}else{
|
||||
f.addText(counts.get(i) + " - " + name + extra);
|
||||
}
|
||||
i++;
|
||||
}
|
||||
f.addText(" \n", new String[0]);
|
||||
f.beginHorizontalFlow();
|
||||
f.addButton("Ok", "okay");
|
||||
f.endHorizontalFlow();
|
||||
f.addText(" \n", new String[0]);
|
||||
this.getResponder().getCommunicator().sendBml(400, 500, true, true, f.toString(), 150, 150, 200, this.title);
|
||||
}
|
||||
}
|
||||
@@ -12,9 +12,7 @@ import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.text.DecimalFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Properties;
|
||||
import java.util.*;
|
||||
|
||||
public class LeaderboardCustomQuestion extends Question {
|
||||
protected int entryNum;
|
||||
@@ -132,6 +130,149 @@ public class LeaderboardCustomQuestion extends Question {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
protected void topAffinities(int limit){
|
||||
Connection dbcon;
|
||||
PreparedStatement ps;
|
||||
ResultSet rs;
|
||||
String name;
|
||||
int skillNum;
|
||||
double affinities;
|
||||
try {
|
||||
dbcon = DbConnector.getPlayerDbCon();
|
||||
ps = dbcon.prepareStatement("SELECT players.name, sum(affinities.number) as Count FROM affinities JOIN players ON affinities.wurmid = players.wurmid WHERE players.power = 0 GROUP BY players.name ORDER BY Count DESC LIMIT "+limit);
|
||||
rs = ps.executeQuery();
|
||||
while(rs.next()){
|
||||
name = rs.getString(1);
|
||||
affinities = rs.getDouble(2);
|
||||
names.add(name);
|
||||
values.add(affinities);
|
||||
}
|
||||
DbUtilities.closeDatabaseObjects(ps, rs);
|
||||
}
|
||||
catch (SQLException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
protected void topUniqueAchievements(int limit){
|
||||
Connection dbcon;
|
||||
PreparedStatement ps;
|
||||
ResultSet rs;
|
||||
String name;
|
||||
int skillNum;
|
||||
double achievements;
|
||||
try {
|
||||
dbcon = DbConnector.getPlayerDbCon();
|
||||
ps = dbcon.prepareStatement("SELECT players.name, count(*) AS theCount FROM achievements JOIN players ON achievements.player = players.wurmid WHERE players.power = 0 GROUP BY players.name ORDER BY theCount DESC LIMIT "+limit);
|
||||
rs = ps.executeQuery();
|
||||
while(rs.next()){
|
||||
name = rs.getString(1);
|
||||
achievements = rs.getDouble(2);
|
||||
names.add(name);
|
||||
values.add(achievements);
|
||||
}
|
||||
DbUtilities.closeDatabaseObjects(ps, rs);
|
||||
}
|
||||
catch (SQLException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
protected HashMap<Long, String> structureNames = new HashMap<>();
|
||||
protected HashMap<Long, String> structurePlanners = new HashMap<>();
|
||||
protected HashMap<Long, Integer> structureWalls = new HashMap<>();
|
||||
protected HashMap<Long, Integer> structureFloors = new HashMap<>();
|
||||
protected void calculateStructureWalls(){
|
||||
Connection dbcon;
|
||||
PreparedStatement ps;
|
||||
ResultSet rs;
|
||||
String name;
|
||||
long wurmid;
|
||||
int walls;
|
||||
String planner;
|
||||
try {
|
||||
dbcon = DbConnector.getZonesDbCon();
|
||||
ps = dbcon.prepareStatement("SELECT structures.wurmid, structures.name, count(*), structures.planner FROM walls JOIN structures ON structures.wurmid = walls.structure WHERE structures.finished = 1 AND walls.state > 1 GROUP BY walls.structure ORDER BY count(*) DESC");
|
||||
rs = ps.executeQuery();
|
||||
while(rs.next()){
|
||||
wurmid = rs.getLong(1);
|
||||
name = rs.getString(2);
|
||||
walls = rs.getInt(3);
|
||||
planner = rs.getString(4);
|
||||
structureNames.put(wurmid, name);
|
||||
structurePlanners.put(wurmid, planner);
|
||||
structureWalls.put(wurmid, walls);
|
||||
}
|
||||
DbUtilities.closeDatabaseObjects(ps, rs);
|
||||
}
|
||||
catch (SQLException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
protected void calculateStructureFloors(){
|
||||
Connection dbcon;
|
||||
PreparedStatement ps;
|
||||
ResultSet rs;
|
||||
String name;
|
||||
long wurmid;
|
||||
int floors;
|
||||
String planner;
|
||||
try {
|
||||
dbcon = DbConnector.getZonesDbCon();
|
||||
ps = dbcon.prepareStatement("SELECT structures.wurmid, structures.name, count(*), structures.planner FROM floors JOIN structures ON structures.wurmid = floors.structure WHERE structures.finished = 1 AND floors.state > 1 GROUP BY floors.structure ORDER BY count(*) DESC");
|
||||
rs = ps.executeQuery();
|
||||
while(rs.next()){
|
||||
wurmid = rs.getLong(1);
|
||||
name = rs.getString(2);
|
||||
floors = rs.getInt(3);
|
||||
planner = rs.getString(4);
|
||||
structureNames.put(wurmid, name);
|
||||
structurePlanners.put(wurmid, planner);
|
||||
structureFloors.put(wurmid, floors);
|
||||
}
|
||||
DbUtilities.closeDatabaseObjects(ps, rs);
|
||||
}
|
||||
catch (SQLException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
protected void topStructureSizes(int limit){
|
||||
calculateStructureWalls();
|
||||
calculateStructureFloors();
|
||||
HashMap<Long, Integer> structureTotals = new HashMap<>();
|
||||
for(long wurmid : structureWalls.keySet()){
|
||||
structureTotals.put(wurmid, structureWalls.get(wurmid));
|
||||
}
|
||||
for(long wurmid : structureFloors.keySet()){
|
||||
if(structureTotals.containsKey(wurmid)){
|
||||
int current = structureTotals.get(wurmid);
|
||||
structureTotals.put(wurmid, current + structureFloors.get(wurmid));
|
||||
}else{
|
||||
structureTotals.put(wurmid, structureFloors.get(wurmid));
|
||||
}
|
||||
}
|
||||
LinkedList<Map.Entry<Long, Integer>> list = new LinkedList<>(structureTotals.entrySet());
|
||||
list.sort((o1, o2) -> ((Comparable) o1.getValue())
|
||||
.compareTo(((Map.Entry) (o2)).getValue()));
|
||||
Collections.reverse(list);
|
||||
HashMap<Long, Integer> sortedHashMap = new LinkedHashMap<>();
|
||||
for (Iterator it = list.iterator(); it.hasNext();) {
|
||||
Map.Entry<Long, Integer> entry = (Map.Entry<Long, Integer>) it.next();
|
||||
sortedHashMap.put(entry.getKey(), entry.getValue());
|
||||
}
|
||||
Set set2 = sortedHashMap.entrySet();
|
||||
Iterator iterator2 = set2.iterator();
|
||||
int i = 0;
|
||||
long wurmid;
|
||||
while(iterator2.hasNext()) {
|
||||
Map.Entry me2 = (Map.Entry)iterator2.next();
|
||||
if(i < limit){
|
||||
wurmid = (long) me2.getKey();
|
||||
names.add(structureNames.get(wurmid));
|
||||
values.add((double) (int) me2.getValue());
|
||||
extra.add(structurePlanners.get(wurmid));
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
protected void topPlayerStats(String statName, int limit){
|
||||
Connection dbcon;
|
||||
PreparedStatement ps;
|
||||
@@ -155,6 +296,33 @@ public class LeaderboardCustomQuestion extends Question {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
protected void mostCitizens(int limit){
|
||||
Connection dbcon;
|
||||
PreparedStatement ps;
|
||||
ResultSet rs;
|
||||
String name;
|
||||
int skillNum;
|
||||
String mayor;
|
||||
double stat;
|
||||
try {
|
||||
dbcon = DbConnector.getZonesDbCon();
|
||||
ps = dbcon.prepareStatement("SELECT name, maxcitizens, mayor FROM villages WHERE disbanded = 0 ORDER BY maxcitizens DESC LIMIT "+limit);
|
||||
rs = ps.executeQuery();
|
||||
while(rs.next()){
|
||||
name = rs.getString(1);
|
||||
stat = rs.getInt(2);
|
||||
mayor = rs.getString(3);
|
||||
stat++; // Add one citizen to account for mayor.
|
||||
names.add(name);
|
||||
values.add(stat);
|
||||
extra.add(mayor);
|
||||
}
|
||||
DbUtilities.closeDatabaseObjects(ps, rs);
|
||||
}
|
||||
catch (SQLException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendQuestion() {
|
||||
@@ -193,24 +361,42 @@ public class LeaderboardCustomQuestion extends Question {
|
||||
ignoreOpt = true;
|
||||
break;
|
||||
case 5:
|
||||
limit = 20;
|
||||
topAffinities(limit);
|
||||
break;
|
||||
case 6:
|
||||
limit = 20;
|
||||
topUniqueAchievements(limit);
|
||||
break;
|
||||
case 7:
|
||||
limit = 20;
|
||||
topStructureSizes(limit);
|
||||
ignoreOpt = true;
|
||||
break;
|
||||
case 8:
|
||||
limit = 100;
|
||||
mostCitizens(limit);
|
||||
ignoreOpt = true;
|
||||
break;
|
||||
case 9:
|
||||
limit = 10;
|
||||
topPlayerStats("kills", limit);
|
||||
ignoreOpt = true;
|
||||
break;
|
||||
case 6:
|
||||
case 10:
|
||||
limit = 10;
|
||||
topPlayerStats("deaths", limit);
|
||||
ignoreOpt = true;
|
||||
break;
|
||||
case 7:
|
||||
case 11:
|
||||
limit = 10;
|
||||
topPlayerStats("depots", limit);
|
||||
ignoreOpt = true;
|
||||
break;
|
||||
}
|
||||
|
||||
f.addBoldText("Top "+limit+" players in "+this.getQuestion(), new String[0]);
|
||||
f.addText("\n\n", new String[0]);
|
||||
f.addBoldText("Top "+limit+" players in "+this.getQuestion());
|
||||
f.addText("\n\n");
|
||||
int i = 0;
|
||||
DecimalFormat df = new DecimalFormat(".000");
|
||||
if(!format){
|
||||
@@ -238,11 +424,11 @@ public class LeaderboardCustomQuestion extends Question {
|
||||
}
|
||||
i++;
|
||||
}
|
||||
f.addText(" \n", new String[0]);
|
||||
f.addText(" \n");
|
||||
f.beginHorizontalFlow();
|
||||
f.addButton("Ok", "okay");
|
||||
f.endHorizontalFlow();
|
||||
f.addText(" \n", new String[0]);
|
||||
f.addText(" \n");
|
||||
this.getResponder().getCommunicator().sendBml(400, 500, true, true, f.toString(), 150, 150, 200, this.title);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,8 +2,10 @@ package com.wurmonline.server.questions;
|
||||
|
||||
import com.wurmonline.server.Servers;
|
||||
import com.wurmonline.server.creatures.Creature;
|
||||
import com.wurmonline.server.players.AchievementTemplate;
|
||||
import com.wurmonline.server.skills.SkillSystem;
|
||||
import com.wurmonline.server.skills.SkillTemplate;
|
||||
import mod.sin.wyvern.AchievementChanges;
|
||||
import net.coldie.tools.BmlForm;
|
||||
import org.gotti.wurmunlimited.modsupport.ModSupportDb;
|
||||
|
||||
@@ -11,10 +13,7 @@ import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.Properties;
|
||||
import java.util.*;
|
||||
|
||||
public class LeaderboardQuestion extends Question {
|
||||
|
||||
@@ -38,15 +37,21 @@ public class LeaderboardQuestion extends Question {
|
||||
|
||||
@Override
|
||||
public void answer(Properties answer) {
|
||||
boolean accepted = answer.containsKey("accept") && answer.get("accept") == "true";
|
||||
boolean skill = answer.containsKey("accept") && answer.get("accept") == "true";
|
||||
boolean achievements = answer.containsKey("achievements") && answer.get("achievements") == "true";
|
||||
boolean custom = answer.containsKey("custom") && answer.get("custom") == "true";
|
||||
if (accepted) {
|
||||
if (skill) {
|
||||
int entry = Integer.parseInt(answer.getProperty("leaderboard"));
|
||||
String val = skillMap.get(entry);
|
||||
int skillNum = skillIdMap.get(entry);
|
||||
//this.getResponder().getCommunicator().sendNormalServerMessage("Received response: "+val);
|
||||
LeaderboardSkillQuestion lbsq = new LeaderboardSkillQuestion(this.getResponder(), "Leaderboard", val, this.getResponder().getWurmId(), skillNum);
|
||||
lbsq.sendQuestion();
|
||||
}else if(achievements){
|
||||
int entry = Integer.parseInt(answer.getProperty("achievementboard"));
|
||||
String val = achievementMap.get(entry);
|
||||
int achievementNum = achievementIdMap.get(entry);
|
||||
LeaderboardAchievementQuestion lbaq = new LeaderboardAchievementQuestion(this.getResponder(), "Leaderboard", val, this.getResponder().getWurmId(), achievementNum);
|
||||
lbaq.sendQuestion();
|
||||
}else if(custom){
|
||||
int entry = Integer.parseInt(answer.getProperty("customboard"));
|
||||
String val = customMap.get(entry);
|
||||
@@ -94,6 +99,34 @@ public class LeaderboardQuestion extends Question {
|
||||
return builder;
|
||||
}
|
||||
|
||||
protected HashMap<Integer, String> achievementMap = new HashMap<>();
|
||||
protected HashMap<Integer, Integer> achievementIdMap = new HashMap<>();
|
||||
|
||||
public String getAchievementOptions(){
|
||||
String builder = "";
|
||||
Collection<AchievementTemplate> achievements = AchievementChanges.goodAchievements.values();
|
||||
List<AchievementTemplate> sortedAchievements = new ArrayList<>(achievements);
|
||||
sortedAchievements.sort(new Comparator<AchievementTemplate>() {
|
||||
public int compare(AchievementTemplate o1, AchievementTemplate o2) {
|
||||
return o1.getName().compareTo(o2.getName());
|
||||
}
|
||||
});
|
||||
int i = 0;
|
||||
int index = 0;
|
||||
achievementMap.clear();
|
||||
while(i < sortedAchievements.size()){
|
||||
builder = builder + sortedAchievements.get(i).getName();
|
||||
achievementMap.put(i, sortedAchievements.get(i).getName());
|
||||
achievementIdMap.put(i, sortedAchievements.get(i).getNumber());
|
||||
i++;
|
||||
if(i < sortedAchievements.size()){
|
||||
builder = builder + ",";
|
||||
}
|
||||
}
|
||||
builder = builder.replaceAll("'", "");
|
||||
return builder;
|
||||
}
|
||||
|
||||
public String getCustomOptions(){
|
||||
String builder = "Total Skill";
|
||||
customMap.put(0, "Total Skill");
|
||||
@@ -105,13 +138,21 @@ public class LeaderboardQuestion extends Question {
|
||||
customMap.put(3, "Uniques Slain");
|
||||
builder = builder + ",Titans Slain";
|
||||
customMap.put(4, "Titans Slain");
|
||||
builder = builder + ",Most Affinities";
|
||||
customMap.put(5, "Most Affinities");
|
||||
builder = builder + ",Most Unique Achievements";
|
||||
customMap.put(6, "Most Unique Achievements");
|
||||
builder = builder + ",Largest Structures";
|
||||
customMap.put(7, "Largest Structures");
|
||||
builder = builder + ",Most Populated Villages";
|
||||
customMap.put(8, "Most Populated Villages");
|
||||
if(Servers.localServer.PVPSERVER || this.getResponder().getPower() >= 5){
|
||||
builder = builder + ",PvP Kills";
|
||||
customMap.put(5, "PvP Kills");
|
||||
customMap.put(9, "PvP Kills");
|
||||
builder = builder + ",PvP Deaths";
|
||||
customMap.put(6, "PvP Deaths");
|
||||
customMap.put(10, "PvP Deaths");
|
||||
builder = builder + ",Depots Captured";
|
||||
customMap.put(7, "PvP Depots Captured");
|
||||
customMap.put(11, "PvP Depots Captured");
|
||||
}
|
||||
return builder;
|
||||
}
|
||||
@@ -136,6 +177,7 @@ public class LeaderboardQuestion extends Question {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
f.addBoldText("You are currently " + (opted == 0 ? "not " : "") + "opted into the leaderboard system.\n\n", new String[0]);
|
||||
f.addBoldText("Skill Leaderboards");
|
||||
f.addRaw("harray{label{text='View leaderboard:'}dropdown{id='leaderboard';options='");
|
||||
f.addRaw(getSkillOptions());
|
||||
f.addRaw("'}}");
|
||||
@@ -143,19 +185,27 @@ public class LeaderboardQuestion extends Question {
|
||||
f.addButton("Accept", "accept");
|
||||
f.endHorizontalFlow();
|
||||
f.addText(" \n\n", new String[0]);
|
||||
f.addBoldText("Opt into or out of the Leaderboard system.");
|
||||
f.addBoldText("Achievement Leaderboards");
|
||||
f.addRaw("harray{label{text='View leaderboard:'}dropdown{id='achievementboard';options='");
|
||||
f.addRaw(getAchievementOptions());
|
||||
f.addRaw("'}}");
|
||||
f.beginHorizontalFlow();
|
||||
f.addButton("Opt In", "optin");
|
||||
f.addButton("Opt Out", "optout");
|
||||
f.addButton("Accept", "achievements");
|
||||
f.endHorizontalFlow();
|
||||
f.addText(" \n\n", new String[0]);
|
||||
f.addBoldText("Special leaderboards are available below.");
|
||||
f.addBoldText("Special Leaderboards");
|
||||
f.addRaw("harray{label{text='View leaderboard:'}dropdown{id='customboard';options='");
|
||||
f.addRaw(getCustomOptions());
|
||||
f.addRaw("'}}");
|
||||
f.beginHorizontalFlow();
|
||||
f.addButton("Accept", "custom");
|
||||
f.endHorizontalFlow();
|
||||
f.addText(" \n\n", new String[0]);
|
||||
f.addBoldText("Opt into or out of the Leaderboard system.");
|
||||
f.beginHorizontalFlow();
|
||||
f.addButton("Opt In", "optin");
|
||||
f.addButton("Opt Out", "optout");
|
||||
f.endHorizontalFlow();
|
||||
this.getResponder().getCommunicator().sendBml(400, 500, true, true, f.toString(), 150, 150, 200, this.title);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,8 +4,6 @@ import com.wurmonline.server.DbConnector;
|
||||
import com.wurmonline.server.creatures.Creature;
|
||||
import com.wurmonline.server.deities.Deities;
|
||||
import com.wurmonline.server.skills.SkillList;
|
||||
import com.wurmonline.server.skills.SkillSystem;
|
||||
import com.wurmonline.server.skills.SkillTemplate;
|
||||
import com.wurmonline.server.utils.DbUtilities;
|
||||
import net.coldie.tools.BmlForm;
|
||||
import org.gotti.wurmunlimited.modsupport.ModSupportDb;
|
||||
@@ -36,6 +34,29 @@ public class LeaderboardSkillQuestion extends Question {
|
||||
}
|
||||
}
|
||||
|
||||
public int[] getSkilLevelColors(double skill){
|
||||
int[] colors = new int[3];
|
||||
colors[0] = 0; // No red value
|
||||
if(skill >= 90){
|
||||
double percentTowards100 = 1-((100-skill)*0.1); // Division by 10
|
||||
double greenPower = 128 + (128*percentTowards100);
|
||||
colors[1] = (int) Math.min(255, greenPower);
|
||||
colors[2] = (int) Math.max(0, 255-greenPower);
|
||||
}else if(skill >= 50){
|
||||
double percentTowards90 = 1-((90-skill)*0.025); // Division by 40
|
||||
double greenPower = percentTowards90*128;
|
||||
colors[1] = (int) Math.max(128, greenPower);
|
||||
colors[2] = (int) Math.min(255, 255-greenPower);
|
||||
}else{
|
||||
double percentTowards50 = 1-((50-skill)*0.02); // Division by 50
|
||||
double otherPower = 255 - (percentTowards50*255);
|
||||
colors[0] = (int) Math.min(255, otherPower);
|
||||
colors[1] = (int) Math.min(255, Math.max(128, otherPower));
|
||||
colors[2] = 255;
|
||||
}
|
||||
return colors;
|
||||
}
|
||||
|
||||
protected HashMap<String, Integer> optIn = new HashMap<>();
|
||||
protected void identifyOptIn(){
|
||||
String name;
|
||||
@@ -95,8 +116,8 @@ public class LeaderboardSkillQuestion extends Question {
|
||||
catch (SQLException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
f.addBoldText("Top 20 players in "+this.getQuestion(), new String[0]);
|
||||
f.addText("\n\n", new String[0]);
|
||||
f.addBoldText("Top 20 players in "+this.getQuestion());
|
||||
f.addText("\n\n");
|
||||
int i = 0;
|
||||
DecimalFormat df = new DecimalFormat(".000");
|
||||
while(i < names.size() && i < skills.size()){
|
||||
@@ -109,19 +130,20 @@ public class LeaderboardSkillQuestion extends Question {
|
||||
if(skillNum == SkillList.CHANNELING){
|
||||
extra = " ("+ Deities.getDeityName(deities.get(i))+")";
|
||||
}
|
||||
int[] color = getSkilLevelColors(skills.get(i));
|
||||
if(names.get(i).equals(this.getResponder().getName())){
|
||||
name = names.get(i);
|
||||
f.addBoldText(df.format(skills.get(i)) + " - " + name + extra);
|
||||
f.addBoldColoredText(df.format(skills.get(i)) + " - " + name + extra, color[0], color[1], color[2]);
|
||||
}else{
|
||||
f.addText(df.format(skills.get(i)) + " - " + name + extra);
|
||||
f.addColoredText(df.format(skills.get(i)) + " - " + name + extra, color[0], color[1], color[2]);
|
||||
}
|
||||
i++;
|
||||
}
|
||||
f.addText(" \n", new String[0]);
|
||||
f.addText(" \n");
|
||||
f.beginHorizontalFlow();
|
||||
f.addButton("Ok", "okay");
|
||||
f.endHorizontalFlow();
|
||||
f.addText(" \n", new String[0]);
|
||||
f.addText(" \n");
|
||||
this.getResponder().getCommunicator().sendBml(400, 500, true, true, f.toString(), 150, 150, 200, this.title);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,9 @@ package com.wurmonline.server.questions;
|
||||
|
||||
import com.wurmonline.mesh.Tiles;
|
||||
import com.wurmonline.server.*;
|
||||
import com.wurmonline.server.behaviours.AutoEquipMethods;
|
||||
import com.wurmonline.server.creatures.Creature;
|
||||
import com.wurmonline.server.items.Item;
|
||||
import com.wurmonline.server.players.Player;
|
||||
import com.wurmonline.server.players.Spawnpoint;
|
||||
import com.wurmonline.server.villages.Village;
|
||||
@@ -58,16 +60,30 @@ public class NewSpawnQuestion extends Question {
|
||||
}else{
|
||||
boolean transfer = answer.containsKey("transfer") && answer.get("transfer") == "true";
|
||||
if(transfer) {
|
||||
logger.info("Respawning player before transfer.");
|
||||
Spawnpoint spawn = spawns.get(0);
|
||||
this.spawn((Player) this.getResponder(), spawn);
|
||||
logger.info("Spawn complete, beginning to unequip all items into inventory.");
|
||||
for(Item equip : this.getResponder().getBody().getAllItems()){
|
||||
AutoEquipMethods.unequip(equip, this.getResponder());
|
||||
}
|
||||
if(!this.getResponder().getPrimWeapon().isBodyPartAttached()){
|
||||
AutoEquipMethods.unequip(this.getResponder().getPrimWeapon(), this.getResponder());
|
||||
}
|
||||
logger.info("Unequip method complete. Beginning transfer.");
|
||||
try {
|
||||
ServerEntry targetServer = Servers.localServer.serverSouth;
|
||||
Player player = Players.getInstance().getPlayer(this.getResponder().getWurmId());
|
||||
if(targetServer == null){
|
||||
player.getCommunicator().sendNormalServerMessage("Error: Something went wrong [TARGETSERVER=NULL].");
|
||||
return;
|
||||
}
|
||||
if (!targetServer.isAvailable(player.getPower(), true)) {
|
||||
player.getCommunicator().sendNormalServerMessage(targetServer.name + " is not currently available.");
|
||||
} else {
|
||||
player.sendTransfer(Server.getInstance(), targetServer.EXTERNALIP, Integer.parseInt(targetServer.EXTERNALPORT), targetServer.INTRASERVERPASSWORD, targetServer.getId(), -1, -1, true, false, player.getKingdomId());
|
||||
int tilex = 1010;
|
||||
int tiley = 1010;
|
||||
player.sendTransfer(Server.getInstance(), targetServer.EXTERNALIP, Integer.parseInt(targetServer.EXTERNALPORT), targetServer.INTRASERVERPASSWORD, targetServer.getId(), tilex, tiley, true, false, player.getKingdomId());
|
||||
}
|
||||
} catch (NoSuchPlayerException e) {
|
||||
logger.info("Could not find player for WurmId " + this.getResponder().getWurmId() + " [" + this.getResponder().getName() + "]");
|
||||
|
||||
Reference in New Issue
Block a user