merge latest version, fix up gradle depends

This commit is contained in:
mstoppelli
2018-12-07 01:38:09 -05:00
56 changed files with 3892 additions and 386 deletions

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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() + "]");