Minor update that freezes.

This commit is contained in:
Sindusk
2018-04-02 03:39:36 -04:00
parent 7f3733295f
commit 05aa3c1950
3 changed files with 78 additions and 174 deletions

View File

@@ -5,6 +5,7 @@ version "1.0"
repositories { repositories {
mavenCentral() mavenCentral()
maven { url "http://jcenter.bintray.com" }
maven { url "http://gotti.no-ip.org/maven/repository" } maven { url "http://gotti.no-ip.org/maven/repository" }
maven { url 'https://jitpack.io' } maven { url 'https://jitpack.io' }
} }
@@ -12,6 +13,8 @@ repositories {
dependencies { dependencies {
compile 'org.gotti.wurmunlimited:server-modlauncher:0.33-beta1' compile 'org.gotti.wurmunlimited:server-modlauncher:0.33-beta1'
compile 'com.github.Sindusk:sindusklibrary:v1.0' compile 'com.github.Sindusk:sindusklibrary:v1.0'
compile 'com.github.Sindusk:DiscordRelay:v1.1'
compile 'com.github.Sindusk:TreasureHunting:1.1.4'
} }
jar { jar {

View File

@@ -1,33 +1,9 @@
package mod.sin.wyvern; package mod.sin.wyvern;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Objects;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.gotti.wurmunlimited.modloader.ReflectionUtil;
import org.gotti.wurmunlimited.modloader.classhooks.HookException;
import org.gotti.wurmunlimited.modloader.classhooks.HookManager;
import org.gotti.wurmunlimited.modloader.classhooks.InvocationHandlerFactory;
import org.nyxcode.wurm.discordrelay.DiscordRelay;
import com.wurmonline.mesh.Tiles; import com.wurmonline.mesh.Tiles;
import com.wurmonline.server.Items; import com.wurmonline.server.*;
import com.wurmonline.server.NoSuchItemException;
import com.wurmonline.server.NoSuchPlayerException;
import com.wurmonline.server.Players;
import com.wurmonline.server.Server;
import com.wurmonline.server.Servers;
import com.wurmonline.server.TimeConstants;
import com.wurmonline.server.WurmId;
import com.wurmonline.server.bodys.Wound; import com.wurmonline.server.bodys.Wound;
import com.wurmonline.server.creatures.Creature; import com.wurmonline.server.creatures.*;
import com.wurmonline.server.creatures.CreatureTemplate;
import com.wurmonline.server.creatures.CreatureTemplateFactory;
import com.wurmonline.server.creatures.MovementScheme;
import com.wurmonline.server.creatures.NoSuchCreatureException;
import com.wurmonline.server.items.Item; import com.wurmonline.server.items.Item;
import com.wurmonline.server.items.ItemList; import com.wurmonline.server.items.ItemList;
import com.wurmonline.server.modifiers.DoubleValueModifier; import com.wurmonline.server.modifiers.DoubleValueModifier;
@@ -39,28 +15,25 @@ import com.wurmonline.server.zones.NoSuchZoneException;
import com.wurmonline.server.zones.Zone; import com.wurmonline.server.zones.Zone;
import com.wurmonline.server.zones.Zones; import com.wurmonline.server.zones.Zones;
import com.wurmonline.shared.constants.Enchants; import com.wurmonline.shared.constants.Enchants;
import javassist.*;
import javassist.CannotCompileException;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtConstructor;
import javassist.CtMethod;
import javassist.NotFoundException;
import javassist.bytecode.Descriptor; import javassist.bytecode.Descriptor;
import javassist.expr.ExprEditor; import javassist.expr.ExprEditor;
import javassist.expr.FieldAccess; import javassist.expr.FieldAccess;
import javassist.expr.MethodCall; import javassist.expr.MethodCall;
import mod.sin.creatures.Avenger; import mod.sin.creatures.*;
import mod.sin.creatures.Charger;
import mod.sin.creatures.SpiritTroll;
import mod.sin.creatures.WyvernBlack;
import mod.sin.creatures.WyvernGreen;
import mod.sin.creatures.WyvernRed;
import mod.sin.creatures.WyvernWhite;
import mod.sin.items.SealedMap; import mod.sin.items.SealedMap;
import mod.sin.lib.Util; import mod.sin.lib.Util;
import mod.sin.wyvern.arena.Arena; import mod.sin.wyvern.arena.Arena;
import mod.sin.wyvern.bestiary.MethodsBestiary; import mod.sin.wyvern.bestiary.MethodsBestiary;
import org.gotti.wurmunlimited.modloader.ReflectionUtil;
import org.gotti.wurmunlimited.modloader.classhooks.HookException;
import org.gotti.wurmunlimited.modloader.classhooks.HookManager;
import org.nyxcode.wurm.discordrelay.DiscordRelay;
import java.util.HashMap;
import java.util.Objects;
import java.util.logging.Level;
import java.util.logging.Logger;
public class MiscChanges { public class MiscChanges {
public static Logger logger = Logger.getLogger(MiscChanges.class.getName()); public static Logger logger = Logger.getLogger(MiscChanges.class.getName());
@@ -78,7 +51,7 @@ public class MiscChanges {
return ctype; return ctype;
} }
protected static HashMap<Creature, Double> defDamage = new HashMap<Creature, Double>(); protected static HashMap<Creature, Double> defDamage = new HashMap<>();
public static void setDefDamage(Creature cret, double damage){ public static void setDefDamage(Creature cret, double damage){
defDamage.put(cret, damage); defDamage.put(cret, damage);
} }
@@ -92,18 +65,12 @@ public class MiscChanges {
return 0d; return 0d;
} }
public static void sendRumour(Creature creature){
DiscordRelay.sendToDiscord("rumors", "Rumours of " + creature.getName() + " are starting to spread.");
}
public static int getNewVillageTiles(int tiles){ public static int getNewVillageTiles(int tiles){
float power = 2f; float power = 2f;
float changeRate = 1000; float changeRate = 1000;
float maxNumTiles = 50000; float maxNumTiles = 50000;
float tilesFloat = tiles; // =(C2) * (1-POW(C2/$C$16, $A$24)) + (SQRT(C2)*$A$26) * POW(C2/$C$16, $A$24)
// =(C2) * (1-POW(C2/$C$16, $A$24)) + (SQRT(C2)*$A$26) * POW(C2/$C$16, $A$24) return (int) ((float) tiles * (1-Math.pow((float) tiles /maxNumTiles, power)) + (Math.sqrt((float) tiles)*changeRate) * Math.pow((float) tiles /maxNumTiles, power));
int newTiles = (int) (tilesFloat * (1-Math.pow(tilesFloat/maxNumTiles, power)) + (Math.sqrt(tilesFloat)*changeRate) * Math.pow(tilesFloat/maxNumTiles, power));
return newTiles;
} }
private static final float PRICE_MARKUP = 1f/1.4f; private static final float PRICE_MARKUP = 1f/1.4f;
@@ -116,15 +83,14 @@ public class MiscChanges {
float baseCost = 100000f; float baseCost = 100000f;
float power = 11.0f; float power = 11.0f;
// =((10+B2/4.5)*(1-POW(A2/100, $A$27)) + B2*POW(A2/100, $A$27)) * ((100 - $A$29) / 100) // =((10+B2/4.5)*(1-POW(A2/100, $A$27)) + B2*POW(A2/100, $A$27)) * ((100 - $A$29) / 100)
int newValue = (int) (((baseCost+(initialValue/4.5f)) * (1f-Math.pow(qual/100f, power)) + initialValue*Math.pow(qual/100f, power)) * ((100f-dam)/100f) * PRICE_MARKUP); return (int) (((baseCost+(initialValue/4.5f)) * (1f-Math.pow(qual/100f, power)) + initialValue*Math.pow(qual/100f, power)) * ((100f-dam)/100f) * PRICE_MARKUP);
return newValue;
} }
return -10; return -10;
} }
public static void checkEnchantedBreed(Creature creature){ public static void checkEnchantedBreed(Creature creature){
int tile = Server.surfaceMesh.getTile(creature.getTileX(), creature.getTileY()); int tile = Server.surfaceMesh.getTile(creature.getTileX(), creature.getTileY());
byte type = Tiles.decodeType((int)tile); byte type = Tiles.decodeType(tile);
if (type == Tiles.Tile.TILE_ENCHANTED_GRASS.id){ if (type == Tiles.Tile.TILE_ENCHANTED_GRASS.id){
logger.info("Creature "+creature.getName()+" was born on enchanted grass, and has a negative trait removed!"); logger.info("Creature "+creature.getName()+" was born on enchanted grass, and has a negative trait removed!");
Server.getInstance().broadCastAction(creature.getName()+" was born on enchanted grass, and feels more healthy!", creature, 10); Server.getInstance().broadCastAction(creature.getName()+" was born on enchanted grass, and feels more healthy!", creature, 10);
@@ -136,11 +102,10 @@ public class MiscChanges {
int templateId = creature.getTemplate().getTemplateId(); int templateId = creature.getTemplate().getTemplateId();
if(templateId == Avenger.templateId){ if(templateId == Avenger.templateId){
return true; return true;
}else if(Arena.isTitan(creature)){ }else{
return true; return Arena.isTitan(creature);
} }
return false; }
}
public static boolean insertItemIntoVehicle(Item item, Item vehicle, Creature performer) { public static boolean insertItemIntoVehicle(Item item, Item vehicle, Creature performer) {
// If can put into crates, try that // If can put into crates, try that
@@ -224,7 +189,6 @@ public class MiscChanges {
e.printStackTrace(); e.printStackTrace();
} }
} }
return;
} }
public static void setNewMoveLimits(Creature cret){ public static void setNewMoveLimits(Creature cret){
@@ -243,7 +207,7 @@ public class MiscChanges {
ReflectionUtil.setPrivateField(moveScheme, ReflectionUtil.getField(moveScheme.getClass(), "stealthMod"), stealthMod); ReflectionUtil.setPrivateField(moveScheme, ReflectionUtil.getField(moveScheme.getClass(), "stealthMod"), stealthMod);
} }
catch (NoSuchSkillException | IllegalArgumentException | IllegalAccessException | ClassCastException | NoSuchFieldException nss) { catch (NoSuchSkillException | IllegalArgumentException | IllegalAccessException | ClassCastException | NoSuchFieldException nss) {
logger.log(Level.WARNING, "No strength skill for " + cret, (Throwable)((Object)nss)); logger.log(Level.WARNING, "No strength skill for " + cret, nss);
} }
} }
@@ -265,11 +229,10 @@ public class MiscChanges {
public static boolean isGhostCorpse(Creature creature){ public static boolean isGhostCorpse(Creature creature){
if(creature.getTemplate().getTemplateId() == Avenger.templateId){ if(creature.getTemplate().getTemplateId() == Avenger.templateId){
return true; return true;
}else if(creature.getTemplate().getTemplateId() == SpiritTroll.templateId){ }else{
return true; return creature.getTemplate().getTemplateId() == SpiritTroll.templateId;
} }
return false; }
}
public static void doLifeTransfer(Creature creature, Item attWeapon, double defdamage, float armourMod){ public static void doLifeTransfer(Creature creature, Item attWeapon, double defdamage, float armourMod){
Wound[] w; Wound[] w;
@@ -291,35 +254,31 @@ public class MiscChanges {
public static void sendServerTabMessage(final String message, final int red, final int green, final int blue){ public static void sendServerTabMessage(final String message, final int red, final int green, final int blue){
DiscordRelay.sendToDiscord("event", message); DiscordRelay.sendToDiscord("event", message);
Runnable r = new Runnable(){ Runnable r = () -> {
public void run(){ Message mess;
com.wurmonline.server.Message mess; for(Player rec : Players.getInstance().getPlayers()){
for(Player rec : Players.getInstance().getPlayers()){ mess = new Message(rec, (byte)16, "Server", message, red, green, blue);
mess = new com.wurmonline.server.Message(rec, (byte)16, "Server", message, red, green, blue); rec.getCommunicator().sendMessage(mess);
rec.getCommunicator().sendMessage(mess); }
}
}
}; };
r.run(); r.run();
} }
public static void sendGlobalFreedomChat(final Creature sender, final String message, final int red, final int green, final int blue){ public static void sendGlobalFreedomChat(final Creature sender, final String message, final int red, final int green, final int blue){
Runnable r = new Runnable(){ Runnable r = () -> {
public void run(){ Message mess;
com.wurmonline.server.Message mess; for(Player rec : Players.getInstance().getPlayers()){
for(Player rec : Players.getInstance().getPlayers()){ mess = new Message(sender, (byte)10, "GL-Freedom", "<"+sender.getNameWithoutPrefixes()+"> "+message, red, green, blue);
mess = new com.wurmonline.server.Message(sender, (byte)10, "GL-Freedom", "<"+sender.getNameWithoutPrefixes()+"> "+message, red, green, blue); rec.getCommunicator().sendMessage(mess);
rec.getCommunicator().sendMessage(mess); }
} if (message.trim().length() > 1) {
if (message.trim().length() > 1) { WcKingdomChat wc = new WcKingdomChat(WurmId.getNextWCCommandId(), sender.getWurmId(), sender.getNameWithoutPrefixes(), message, false, (byte) 4, red, green, blue);
WcKingdomChat wc = new WcKingdomChat(WurmId.getNextWCCommandId(), sender.getWurmId(), sender.getNameWithoutPrefixes(), message, false, (byte) 4, red, green, blue); if (!Servers.isThisLoginServer()) {
if (!Servers.isThisLoginServer()) { wc.sendToLoginServer();
wc.sendToLoginServer(); } else {
} else { wc.sendFromLoginServer();
wc.sendFromLoginServer();
}
} }
} }
}; };
r.run(); r.run();
} }
@@ -344,18 +303,16 @@ public class MiscChanges {
CtMethod m = ctPlayers.getDeclaredMethod("sendStartGlobalKingdomChat"); CtMethod m = ctPlayers.getDeclaredMethod("sendStartGlobalKingdomChat");
String infoTabTitle = "Server"; String infoTabTitle = "Server";
// Initial messages: // Initial messages:
String[] infoTabLine = {"Server Thread: https://forum.wurmonline.com/index.php?/topic/155981-wyvern-reborn-modded-pve-pvp-3x5x/", String[] infoTabLine = {"Server Thread: https://forum.wurmonline.com/index.php?/topic/162067-revenant-modded-pvepvp-3x-action-new-skillgain/",
"Custom Server Data: https://goo.gl/QRVJyC", "Server Discord: https://discord.gg/r8QNXAC",
"Server Discord: https://discordapp.com/invite/wxEeS7d", "Server Maps: Coming Soon..."};
"Server Maps: https://www.sarcasuals.com/"}; StringBuilder str = new StringBuilder("{"
String str = "{" + " com.wurmonline.server.Message mess;");
+ " com.wurmonline.server.Message mess;"; for (String anInfoTabLine : infoTabLine) {
for(int i = 0; i < infoTabLine.length; i++){ str.append(" mess = new com.wurmonline.server.Message(player, (byte)16, \"").append(infoTabTitle).append("\",\"").append(anInfoTabLine).append("\", 0, 255, 0);").append(" player.getCommunicator().sendMessage(mess);");
str = str + " mess = new com.wurmonline.server.Message(player, (byte)16, \"" + infoTabTitle + "\",\"" + infoTabLine[i] + "\", 0, 255, 0);"
+ " player.getCommunicator().sendMessage(mess);";
} }
str = str + "}"; str.append("}");
m.insertAfter(str); m.insertAfter(str.toString());
// - Enable bridges to be built inside/over/through houses - // // - Enable bridges to be built inside/over/through houses - //
CtClass ctPlanBridgeChecks = classPool.get("com.wurmonline.server.structures.PlanBridgeChecks"); CtClass ctPlanBridgeChecks = classPool.get("com.wurmonline.server.structures.PlanBridgeChecks");
@@ -365,13 +322,6 @@ public class MiscChanges {
+ " return new com.wurmonline.server.structures.PlanBridgeCheckResult(false);" + " return new com.wurmonline.server.structures.PlanBridgeCheckResult(false);"
+ "}");*/ + "}");*/
// - Allow mailboxes and bell towers to be loaded - //
// [Disabled 10/30 by Sindusk] - Added to ItemMod using reflection instead of editing the method.
/*CtClass ctItemTemplate = classPool.get("com.wurmonline.server.items.ItemTemplate");
ctItemTemplate.getDeclaredMethod("isTransportable").setBody("{"
+ " return this.isTransportable || (this.getTemplateId() >= 510 && this.getTemplateId() <= 513) || this.getTemplateId() == 722 || this.getTemplateId() == 670;"
+ "}");*/
// - Disable mailboxes from being used while loaded - // // - Disable mailboxes from being used while loaded - //
CtClass ctItem = classPool.get("com.wurmonline.server.items.Item"); CtClass ctItem = classPool.get("com.wurmonline.server.items.Item");
replace = "$_ = $proceed($$);" replace = "$_ = $proceed($$);"
@@ -427,9 +377,10 @@ public class MiscChanges {
//ctPlayer.getDeclaredMethod("getRarity").setBody("{ return mod.sin.wyvern.MiscChanges.newGetPlayerRarity(this); }"); //ctPlayer.getDeclaredMethod("getRarity").setBody("{ return mod.sin.wyvern.MiscChanges.newGetPlayerRarity(this); }");
// - Add Facebreyker to the list of spawnable uniques - // // - Add Facebreyker to the list of spawnable uniques - //
CtClass ctDens = classPool.get("com.wurmonline.server.zones.Dens"); // TODO: Re-enable after Facebreyker initialized.
/*CtClass ctDens = classPool.get("com.wurmonline.server.zones.Dens");
replace = "com.wurmonline.server.zones.Dens.checkTemplate(2147483643, whileRunning);"; replace = "com.wurmonline.server.zones.Dens.checkTemplate(2147483643, whileRunning);";
Util.insertBeforeDeclared(thisClass, ctDens, "checkDens", replace); Util.insertBeforeDeclared(thisClass, ctDens, "checkDens", replace);*/
//ctDens.getDeclaredMethod("checkDens").insertAt(0, "com.wurmonline.server.zones.Dens.checkTemplate(2147483643, whileRunning);"); //ctDens.getDeclaredMethod("checkDens").insertAt(0, "com.wurmonline.server.zones.Dens.checkTemplate(2147483643, whileRunning);");
// - Announce player titles in the Server tab - // // - Announce player titles in the Server tab - //
@@ -484,58 +435,9 @@ public class MiscChanges {
+ " return temp;" + " return temp;"
+ "}");*/ + "}");*/
// - Make food/drink affinities based on Item ID instead of creature ID - //
// [3/27] Removed: Merged to ServerTweaks
/*CtClass ctAffinitiesTimed = classPool.get("com.wurmonline.server.skills.AffinitiesTimed");
replace = "if(item.getCreatorName() != null){"
+ " $_ = $proceed("+MiscChanges.class.getName()+".getTimedAffinitySeed(item));"
+ "}else{"
+ " $_ = $proceed($$);"
+ "}";
Util.instrumentDeclared(thisClass, ctAffinitiesTimed, "getTimedAffinitySkill", "setSeed", replace);
CtClass ctItemBehaviour = classPool.get("com.wurmonline.server.behaviours.ItemBehaviour");
replace = "$_ = $proceed($1, $2, $3, $4, performer.getName());";
Util.instrumentDeclared(thisClass, ctItemBehaviour, "handleRecipe", "createItem", replace);
replace = "$_ = $proceed($1, $2, $3, $4, com.wurmonline.server.players.PlayerInfoFactory.getPlayerName(lastowner));";
Util.instrumentDeclared(thisClass, ctItem, "pollFermenting", "createItem", replace);
Util.instrumentDeclared(thisClass, ctItem, "pollDistilling", "createItem", replace);
CtClass ctTempStates = classPool.get("com.wurmonline.server.items.TempStates");
Util.instrumentDeclared(thisClass, ctTempStates, "checkForChange", "createItem", replace);*/
// - Fix de-priesting when gaining faith below 30 - //
// [Disabled 10/30 Sindusk] - Added to SpellCraft.SpellcraftTweaks
/*CtClass ctDbPlayerInfo = classPool.get("com.wurmonline.server.players.DbPlayerInfo");
ctDbPlayerInfo.getDeclaredMethod("setFaith").instrument(new ExprEditor(){
public void edit(MethodCall m) throws CannotCompileException {
if (m.getMethodName().equals("min")) {
m.replace("if($2 == 20.0f && $1 < 30){"
+ " $_ = $proceed(30.0f, lFaith);"
+ "}else{"
+ " $_ = $proceed($$);"
+ "}");
return;
}
}
});
ctDbPlayerInfo.getDeclaredMethod("setFaith").instrument(new ExprEditor(){
public void edit(MethodCall m) throws CannotCompileException {
if (m.getMethodName().equals("setPriest")) {
m.replace("$_ = $proceed(true);");
return;
}
}
});
ctDbPlayerInfo.getDeclaredMethod("setFaith").instrument(new ExprEditor(){
public void edit(MethodCall m) throws CannotCompileException {
if (m.getMethodName().equals("sendAlertServerMessage")) {
m.replace("$_ = null;");
return;
}
}
});*/
// - Removal of eye/face shots to headshots instead - // // - Removal of eye/face shots to headshots instead - //
HookManager.getInstance().registerHook("com.wurmonline.server.combat.Armour", "getArmourPosForPos", "(I)I", new InvocationHandlerFactory() { // [4/2/18] Removed: Unnecessary - WU 1.6 update resolves the reason it was done.
/*HookManager.getInstance().registerHook("com.wurmonline.server.combat.Armour", "getArmourPosForPos", "(I)I", new InvocationHandlerFactory() {
@Override @Override
public InvocationHandler createInvocationHandler() { public InvocationHandler createInvocationHandler() {
@@ -554,7 +456,7 @@ public class MiscChanges {
} }
}; };
} }
}); });*/
// - Remove requirement to bless for Libila taming - // // - Remove requirement to bless for Libila taming - //
CtClass ctMethodsCreatures = classPool.get("com.wurmonline.server.behaviours.MethodsCreatures"); CtClass ctMethodsCreatures = classPool.get("com.wurmonline.server.behaviours.MethodsCreatures");
@@ -577,7 +479,6 @@ public class MiscChanges {
if (m.getMethodName().equals("isFatigue")) { if (m.getMethodName().equals("isFatigue")) {
m.replace("$_ = false;"); m.replace("$_ = false;");
logger.info("Set isFatigue to false in action constructor."); logger.info("Set isFatigue to false in action constructor.");
return;
} }
} }
}); });
@@ -644,10 +545,11 @@ public class MiscChanges {
Util.insertBeforeDescribed(thisClass, ctCreature, "doNew", desc1, replace); Util.insertBeforeDescribed(thisClass, ctCreature, "doNew", desc1, replace);
// - Send rumour messages to discord - // // - Send rumour messages to discord - //
Util.setReason("Send rumour messages to Discord."); // [4/1/18] Removed: Merged to DiscordRelay.
/*Util.setReason("Send rumour messages to Discord.");
replace = MiscChanges.class.getName()+".sendRumour(toReturn);" replace = MiscChanges.class.getName()+".sendRumour(toReturn);"
+ "$proceed($$);"; + "$proceed($$);";
Util.instrumentDescribed(thisClass, ctCreature, "doNew", desc1, "broadCastSafe", replace); Util.instrumentDescribed(thisClass, ctCreature, "doNew", desc1, "broadCastSafe", replace);*/
// - Allow custom creatures to be given special names when bred - // // - Allow custom creatures to be given special names when bred - //
replace = "$_ = "+MiscChanges.class.getName()+".shouldBreedName(this);"; replace = "$_ = "+MiscChanges.class.getName()+".shouldBreedName(this);";
@@ -700,7 +602,6 @@ public class MiscChanges {
if (m.getMethodName().equals("isGhost")) { if (m.getMethodName().equals("isGhost")) {
m.replace("$_ = false;"); m.replace("$_ = false;");
logger.info("Enabled archery against ghost targets in archery attack method."); logger.info("Enabled archery against ghost targets in archery attack method.");
return;
} }
} }
}); });
@@ -937,7 +838,7 @@ public class MiscChanges {
Util.instrumentDeclared(thisClass, ctCombatHandler, "setDamage", "getBattle", replace);*/ Util.instrumentDeclared(thisClass, ctCombatHandler, "setDamage", "getBattle", replace);*/
} catch (CannotCompileException | NotFoundException | IllegalArgumentException | ClassCastException e) { } catch (CannotCompileException | NotFoundException | IllegalArgumentException | ClassCastException e) {
throw new HookException((Throwable)e); throw new HookException(e);
} }
} }
} }

View File

@@ -157,7 +157,7 @@ implements WurmServerMod, Configurable, PreInitable, Initable, ItemTemplatesCrea
// Epic: // Epic:
logger.info("Registering Epic creatures."); logger.info("Registering Epic creatures.");
ModCreatures.addCreature(new LavaFiend()); ModCreatures.addCreature(new LavaFiend());
ModCreatures.addCreature(new SolDemon()); //ModCreatures.addCreature(new SolDemon());
ModCreatures.addCreature(new Worg()); ModCreatures.addCreature(new Worg());
// Wyverns: // Wyverns:
@@ -168,17 +168,17 @@ implements WurmServerMod, Configurable, PreInitable, Initable, ItemTemplatesCrea
// Flavor Mobs: // Flavor Mobs:
ModCreatures.addCreature(new Avenger()); ModCreatures.addCreature(new Avenger());
ModCreatures.addCreature(new Charger()); //ModCreatures.addCreature(new Charger());
ModCreatures.addCreature(new ForestSpider()); ModCreatures.addCreature(new ForestSpider());
ModCreatures.addCreature(new Giant()); ModCreatures.addCreature(new Giant());
ModCreatures.addCreature(new HornedPony()); //ModCreatures.addCreature(new HornedPony());
ModCreatures.addCreature(new LargeBoar()); //ModCreatures.addCreature(new LargeBoar());
ModCreatures.addCreature(new SpiritTroll()); ModCreatures.addCreature(new SpiritTroll());
// Bosses: // Bosses:
logger.info("Registering Custom Boss creatures."); logger.info("Registering Custom Boss creatures.");
ModCreatures.addCreature(new Reaper()); //ModCreatures.addCreature(new Reaper());
ModCreatures.addCreature(new SpectralDrake()); //ModCreatures.addCreature(new SpectralDrake());
// Uniques: // Uniques:
ModCreatures.addCreature(new Facebreyker()); ModCreatures.addCreature(new Facebreyker());
@@ -193,8 +193,8 @@ implements WurmServerMod, Configurable, PreInitable, Initable, ItemTemplatesCrea
// NPC's // NPC's
logger.info("Registering Custom NPC creatures."); logger.info("Registering Custom NPC creatures.");
ModCreatures.addCreature(new RobZombie()); //ModCreatures.addCreature(new RobZombie());
ModCreatures.addCreature(new MacroSlayer()); //ModCreatures.addCreature(new MacroSlayer());
Bounty.init(); Bounty.init();