initial
This commit is contained in:
8
.idea/artifacts/wyvern_jar.xml
generated
Normal file
8
.idea/artifacts/wyvern_jar.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="wyvern:jar">
|
||||
<output-path>$PROJECT_DIR$/classes/artifacts/wyvern_jar</output-path>
|
||||
<root id="archive" name="WyvernMods_main.jar">
|
||||
<element id="module-output" name="WyvernMods_main" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,7 +1,7 @@
|
||||
<component name="libraryTable">
|
||||
<library name="Gradle: com.github.Sindusk:sindusklibrary:v1.0">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.github.Sindusk/sindusklibrary/v1.0/95e8659b53f48d87c063664020727bc52a298b3d/sindusklibrary-v1.0.jar!/" />
|
||||
<root url="jar://$USER_HOME$/wurm_modding/mods/SinduskLibrary/SinduskLibrary.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<component name="libraryTable">
|
||||
<library name="Gradle: org.gotti.wurmunlimited:common:2613165">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.gotti.wurmunlimited/common/2613165/53b86d78248ca55a4fc0b41ee327366157671c3d/common-2613165.jar!/" />
|
||||
<root url="jar://$USER_HOME$/wurm_modding/common.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<component name="libraryTable">
|
||||
<library name="Gradle: org.gotti.wurmunlimited:server:2613165">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.gotti.wurmunlimited/server/2613165/f4850f94c5db9b248cb4b0ea930ee997b0cbe903/server-2613165.jar!/" />
|
||||
<root url="jar://$USER_HOME$/wurm_modding/server.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
<component name="libraryTable">
|
||||
<library name="Gradle: org.gotti.wurmunlimited:server-modlauncher:0.33-beta1">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.gotti.wurmunlimited/server-modlauncher/0.33-beta1/98381bf8fb866aea2878faecf33f6d646fe965cb/server-modlauncher-0.33-beta1.jar!/" />
|
||||
<root url="jar://$USER_HOME$/wurm_modding/modlauncher.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.gotti.wurmunlimited/server-modlauncher/0.33-beta1/5e86c45328c834e303d3369cc64efc10f0a11bb9/server-modlauncher-0.33-beta1-sources.jar!/" />
|
||||
</SOURCES>
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
||||
@@ -1,11 +1,9 @@
|
||||
<component name="libraryTable">
|
||||
<library name="Gradle: org.javassist:javassist:3.20.0-GA">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.javassist/javassist/3.20.0-GA/a9cbcdfb7e9f86fbc74d3afae65f2248bfbf82a0/javassist-3.20.0-GA.jar!/" />
|
||||
<root url="jar://$USER_HOME$/wurm_modding/javassist.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES>
|
||||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.javassist/javassist/3.20.0-GA/d8fdc08a455bc0b28bc0bed1f0d032d935cee8e1/javassist-3.20.0-GA-sources.jar!/" />
|
||||
</SOURCES>
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
||||
11
.idea/libraries/KingdomOffices.xml
generated
Normal file
11
.idea/libraries/KingdomOffices.xml
generated
Normal file
@@ -0,0 +1,11 @@
|
||||
<component name="libraryTable">
|
||||
<library name="KingdomOffices">
|
||||
<CLASSES>
|
||||
<root url="jar://$USER_HOME$/wurm_modding/offices/kingdomoffices/classes/artifacts/kingdomoffices_jar/kingdomoffices.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES>
|
||||
<root url="file://$USER_HOME$/wurm_modding/offices/kingdomoffices/src/main/java" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
||||
2
.idea/modules/WyvernMods_main.iml
generated
2
.idea/modules/WyvernMods_main.iml
generated
@@ -14,5 +14,7 @@
|
||||
<orderEntry type="library" name="Gradle: org.gotti.wurmunlimited:common:2613165" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.gotti.wurmunlimited:server:2613165" level="project" />
|
||||
<orderEntry type="library" name="Gradle: org.javassist:javassist:3.20.0-GA" level="project" />
|
||||
<orderEntry type="library" name="TreasureHunting" level="project" />
|
||||
<orderEntry type="library" name="KingdomOffices" level="project" />
|
||||
</component>
|
||||
</module>
|
||||
121
src/main/java/mod/sin/actions/items/PipingKitAction.java
Normal file
121
src/main/java/mod/sin/actions/items/PipingKitAction.java
Normal file
@@ -0,0 +1,121 @@
|
||||
package mod.sin.actions.items;
|
||||
|
||||
import com.wurmonline.server.Items;
|
||||
import com.wurmonline.server.behaviours.Action;
|
||||
import com.wurmonline.server.behaviours.ActionEntry;
|
||||
import com.wurmonline.server.behaviours.Actions;
|
||||
import com.wurmonline.server.behaviours.NoSuchActionException;
|
||||
import com.wurmonline.server.creatures.Creature;
|
||||
import com.wurmonline.server.items.Item;
|
||||
import com.wurmonline.server.items.ItemList;
|
||||
import com.wurmonline.server.players.Player;
|
||||
import com.wurmonline.server.skills.NoSuchSkillException;
|
||||
import com.wurmonline.server.skills.Skill;
|
||||
import com.wurmonline.server.skills.SkillList;
|
||||
import mod.sin.items.PipingKit;
|
||||
import org.gotti.wurmunlimited.modloader.ReflectionUtil;
|
||||
import org.gotti.wurmunlimited.modsupport.actions.ActionPerformer;
|
||||
import org.gotti.wurmunlimited.modsupport.actions.BehaviourProvider;
|
||||
import org.gotti.wurmunlimited.modsupport.actions.ModAction;
|
||||
import org.gotti.wurmunlimited.modsupport.actions.ModActions;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class PipingKitAction implements ModAction {
|
||||
private static Logger logger = Logger.getLogger(EnchantOrbAction.class.getName());
|
||||
|
||||
private final short actionId;
|
||||
private final ActionEntry actionEntry;
|
||||
|
||||
public PipingKitAction() {
|
||||
logger.log(Level.WARNING, "PipingKitAction()");
|
||||
|
||||
actionId = (short) ModActions.getNextActionId();
|
||||
actionEntry = ActionEntry.createEntry(
|
||||
actionId,
|
||||
"Pipe well",
|
||||
"piping",
|
||||
new int[0]
|
||||
//new int[] { 6 /* ACTION_TYPE_NOMOVE */ } // 6 /* ACTION_TYPE_NOMOVE */, 48 /* ACTION_TYPE_ENEMY_ALWAYS */, 36 /* ACTION_TYPE_ALWAYS_USE_ACTIVE_ITEM */
|
||||
);
|
||||
ModActions.registerAction(actionEntry);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public BehaviourProvider getBehaviourProvider()
|
||||
{
|
||||
//int[] fillables = new int[] {ItemList.stoneWell, ItemList.stoneFountain, ItemList.stoneFountain2};
|
||||
return new BehaviourProvider() {
|
||||
// Menu with activated object
|
||||
@Override
|
||||
public List<ActionEntry> getBehavioursFor(Creature performer, Item source, Item object)
|
||||
{
|
||||
if(performer instanceof Player && source != null && object != null && source.getTemplateId() == PipingKit.templateId && source != object && object.canBeAutoFilled()) {
|
||||
return Arrays.asList(actionEntry);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public ActionPerformer getActionPerformer()
|
||||
{
|
||||
return new ActionPerformer() {
|
||||
|
||||
@Override
|
||||
public short getActionId() {
|
||||
return actionId;
|
||||
}
|
||||
|
||||
// With activated object
|
||||
@Override
|
||||
public boolean action(Action act, Creature performer, Item source, Item target, short action, float counter)
|
||||
{
|
||||
try {
|
||||
if (performer instanceof Player) {
|
||||
Player player = (Player) performer;
|
||||
if (source.getTemplate().getTemplateId() != PipingKit.templateId) {
|
||||
player.getCommunicator().sendNormalServerMessage("You must use a Piping Kit to pipe wells.");
|
||||
return true;
|
||||
}
|
||||
if (source.getWurmId() == target.getWurmId()) {
|
||||
player.getCommunicator().sendNormalServerMessage("You cannot pipe the kit with itself!");
|
||||
return true;
|
||||
}
|
||||
if (target.isAutoFilled()) {
|
||||
player.getCommunicator().sendNormalServerMessage("That object is already autofilled!");
|
||||
return true;
|
||||
}
|
||||
if(counter == 1.0f) {
|
||||
player.getCommunicator().sendNormalServerMessage("You begin to pipe the " + target.getName());
|
||||
Skill combineSkill = performer.getSkills().getSkill(SkillList.MIND_LOGICAL);
|
||||
int time = Actions.getStandardActionTime(performer, combineSkill, source, 0d);
|
||||
act.setTimeLeft(time);
|
||||
performer.sendActionControl("Piping", true, act.getTimeLeft());
|
||||
}
|
||||
else if (counter * 10.0f > performer.getCurrentAction().getTimeLeft()) {
|
||||
performer.getCommunicator().sendNormalServerMessage("You finish attatching the pipes. The " + target.getName() + " will now be autofilled with water!");
|
||||
target.setIsAutoFilled(true);
|
||||
Items.destroyItem(source.getWurmId());
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
logger.info("Somehow a non-player activated a piping kit...");
|
||||
}
|
||||
return false;
|
||||
} catch (NoSuchSkillException | NoSuchActionException e) {
|
||||
e.printStackTrace();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}; // ActionPerformer
|
||||
}
|
||||
}
|
||||
113
src/main/java/mod/sin/actions/items/StableContractAction.java
Normal file
113
src/main/java/mod/sin/actions/items/StableContractAction.java
Normal file
@@ -0,0 +1,113 @@
|
||||
package mod.sin.actions.items;
|
||||
|
||||
import com.wurmonline.server.Items;
|
||||
import com.wurmonline.server.behaviours.Action;
|
||||
import com.wurmonline.server.behaviours.ActionEntry;
|
||||
import com.wurmonline.server.behaviours.NoSuchActionException;
|
||||
import com.wurmonline.server.creatures.Creature;
|
||||
import com.wurmonline.server.creatures.CreatureTemplateFactory;
|
||||
import com.wurmonline.server.creatures.Creatures;
|
||||
import com.wurmonline.server.items.Item;
|
||||
import com.wurmonline.server.players.Player;
|
||||
import com.wurmonline.server.villages.Village;
|
||||
import mod.sin.items.StableContract;
|
||||
import mod.sin.wyvern.bestiary.MethodsBestiary;
|
||||
import org.gotti.wurmunlimited.modsupport.actions.*;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class StableContractAction implements ModAction, BehaviourProvider, ActionPerformer {
|
||||
private static Logger logger = Logger.getLogger(StableContractAction.class.getName());
|
||||
|
||||
private final short actionId;
|
||||
private final ActionEntry actionEntry;
|
||||
|
||||
public StableContractAction() {
|
||||
// Get the action id
|
||||
actionId = (short) ModActions.getNextActionId();
|
||||
// Create the action entry
|
||||
actionEntry = new ActionEntryBuilder(actionId, "Summon stablemaster",
|
||||
"summoning").build();
|
||||
// Register the action entry
|
||||
ModActions.registerAction(actionEntry);
|
||||
}
|
||||
|
||||
// Menu with activated object
|
||||
@Override
|
||||
public List<ActionEntry> getBehavioursFor(Creature performer, Item source, Item object)
|
||||
{
|
||||
return this.getBehavioursFor(performer, object);
|
||||
}
|
||||
|
||||
// Menu without activated object
|
||||
@Override
|
||||
public List<ActionEntry> getBehavioursFor(Creature performer, Item object)
|
||||
{
|
||||
if(performer instanceof Player && object != null && object.getTemplateId() == StableContract.templateId) {
|
||||
return Collections.singletonList(actionEntry);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public short getActionId() {
|
||||
return actionId;
|
||||
}
|
||||
|
||||
// without item
|
||||
@Override
|
||||
public boolean action(Action act, Creature performer, Item target, short action, float counter) {
|
||||
try {
|
||||
if(target.getTemplate().getTemplateId() != StableContract.templateId) {
|
||||
performer.getCommunicator().sendNormalServerMessage("You cannot summon the stable master right now!");
|
||||
return true;
|
||||
}
|
||||
if(counter == 1.0f) {
|
||||
performer.getCommunicator().sendNormalServerMessage("You begin reading the contract...");
|
||||
final int time = 5;
|
||||
performer.getCurrentAction().setTimeLeft(time);
|
||||
performer.sendActionControl("Reading contract", true, time);
|
||||
}
|
||||
else {
|
||||
int time = 0;
|
||||
time = performer.getCurrentAction().getTimeLeft();
|
||||
|
||||
if(counter * 10.0f > time) {
|
||||
int stablemasterID = CreatureTemplateFactory.getInstance().getTemplate("Stable master").getTemplateId();
|
||||
float x = performer.getPosX();
|
||||
float y = performer.getPosY();
|
||||
byte gender = (byte)new Random().nextInt(2);
|
||||
String name = "Stable master " + (gender == 0 ? MethodsBestiary.generateGuardMaleName() : MethodsBestiary.generateGuardFemaleName());
|
||||
|
||||
|
||||
Creature stablemaster = Creature.doNew(stablemasterID, x, y, 180.0f, performer.getLayer(), name, gender, performer.getKingdomId());
|
||||
Items.destroyItem(target.getWurmId());
|
||||
performer.getCommunicator().sendNormalServerMessage("A stable master appears from the air!");
|
||||
Village village = performer.getCurrentVillage();
|
||||
if(village != null) {
|
||||
village.addCitizen(stablemaster, village.getRoleForStatus((byte) 3));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
catch (Exception e) {
|
||||
performer.getCommunicator().sendNormalServerMessage("Something went wrong!");
|
||||
e.printStackTrace();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// with
|
||||
@Override
|
||||
public boolean action(Action act, Creature performer, Item source, Item target, short action, float counter)
|
||||
{
|
||||
return this.action(act, performer, target, action, counter);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -89,11 +89,11 @@ public class Charger implements ModCreature, CreatureTypes {
|
||||
vehicle.setSeatFightMod(0, 0.8f, 1.1f);
|
||||
vehicle.setSeatOffset(0, 0.0f, 0.0f, 0.0f);
|
||||
vehicle.setCreature(true);
|
||||
vehicle.setSkillNeeded(Servers.localServer.PVPSERVER ? 25.0f : 37.0f);
|
||||
vehicle.setSkillNeeded(Servers.localServer.PVPSERVER ? 25.0f : 41.0f);
|
||||
vehicle.setName(creature.getName());
|
||||
vehicle.setMaxHeightDiff(0.06f);
|
||||
vehicle.setMaxDepth(-1.7f);
|
||||
vehicle.setMaxSpeed(Servers.localServer.PVPSERVER ? 32.0f : 34.0f);
|
||||
vehicle.setMaxSpeed(Servers.localServer.PVPSERVER ? 32.0f : 35.0f);
|
||||
vehicle.setCommandType((byte) 3);
|
||||
vehicle.setCanHaveEquipment(true);
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ public class AffinityOrb implements ItemTypes, MiscConstants {
|
||||
itemBuilder.weightGrams(500);
|
||||
itemBuilder.material(Materials.MATERIAL_CRYSTAL);
|
||||
itemBuilder.value(1000000);
|
||||
itemBuilder.isTraded(true);
|
||||
itemBuilder.isTraded(false);
|
||||
|
||||
ItemTemplate template = itemBuilder.build();
|
||||
templateId = template.getTemplateId();
|
||||
|
||||
@@ -35,7 +35,7 @@ public class BookOfConversion implements ItemTypes, MiscConstants {
|
||||
itemBuilder.weightGrams(500);
|
||||
itemBuilder.material(Materials.MATERIAL_PAPER);
|
||||
itemBuilder.value(50000);
|
||||
itemBuilder.isTraded(true);
|
||||
itemBuilder.isTraded(false);
|
||||
|
||||
ItemTemplate template = itemBuilder.build();
|
||||
templateId = template.getTemplateId();
|
||||
|
||||
@@ -42,8 +42,8 @@ public class ChaosCrystal implements ItemTypes, MiscConstants {
|
||||
itemBuilder.difficulty(5.0f);
|
||||
itemBuilder.weightGrams(250);
|
||||
itemBuilder.material(Materials.MATERIAL_CRYSTAL);
|
||||
itemBuilder.value(5000);
|
||||
itemBuilder.isTraded(true);
|
||||
itemBuilder.value(500000);
|
||||
itemBuilder.isTraded(false);
|
||||
|
||||
ItemTemplate template = itemBuilder.build();
|
||||
templateId = template.getTemplateId();
|
||||
|
||||
@@ -42,8 +42,8 @@ public class EnchantersCrystal implements ItemTypes, MiscConstants {
|
||||
itemBuilder.difficulty(5.0f);
|
||||
itemBuilder.weightGrams(250);
|
||||
itemBuilder.material(Materials.MATERIAL_CRYSTAL);
|
||||
itemBuilder.value(5000);
|
||||
itemBuilder.isTraded(true);
|
||||
itemBuilder.value(500000);
|
||||
itemBuilder.isTraded(false);
|
||||
|
||||
ItemTemplate template = itemBuilder.build();
|
||||
templateId = template.getTemplateId();
|
||||
|
||||
@@ -40,6 +40,7 @@ public class HugeCrate implements ItemTypes, MiscConstants {
|
||||
itemBuilder.combatDamage(0);
|
||||
itemBuilder.decayTime(9072000);
|
||||
itemBuilder.dimensions(140, 140, 140);
|
||||
itemBuilder.maxItemCount(500);
|
||||
itemBuilder.primarySkill((int) NOID);
|
||||
itemBuilder.bodySpaces(EMPTY_BYTE_PRIMITIVE_ARRAY);
|
||||
itemBuilder.modelName("model.container.crate.large.");
|
||||
|
||||
44
src/main/java/mod/sin/items/PipingKit.java
Normal file
44
src/main/java/mod/sin/items/PipingKit.java
Normal file
@@ -0,0 +1,44 @@
|
||||
package mod.sin.items;
|
||||
|
||||
import com.wurmonline.server.MiscConstants;
|
||||
import com.wurmonline.server.items.ItemTemplate;
|
||||
import com.wurmonline.server.items.ItemTypes;
|
||||
import com.wurmonline.server.items.Materials;
|
||||
import org.gotti.wurmunlimited.modsupport.ItemTemplateBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class PipingKit implements ItemTypes, MiscConstants {
|
||||
public static Logger logger = Logger.getLogger(PipingKit.class.getName());
|
||||
public static int templateId;
|
||||
|
||||
public void createTemplate() throws IOException {
|
||||
String name = "piping kit";
|
||||
ItemTemplateBuilder itemBuilder = new ItemTemplateBuilder("mod.item.piping.kit");
|
||||
itemBuilder.name(name, "piping kit", "A tool kit for directing pipes into a source of water.");
|
||||
itemBuilder.descriptions("excellent", "good", "ok", "poor");
|
||||
itemBuilder.itemTypes(new short[]{ // {108, 146, 44, 21, 147, 113} - War Arrow
|
||||
ItemTypes.ITEM_TYPE_FULLPRICE,
|
||||
ItemTypes.ITEM_TYPE_NOSELLBACK,
|
||||
ItemTypes.ITEM_TYPE_ALWAYS_BANKABLE
|
||||
});
|
||||
itemBuilder.imageNumber((short) 760);
|
||||
itemBuilder.behaviourType((short) 1);
|
||||
itemBuilder.combatDamage(0);
|
||||
itemBuilder.decayTime(Long.MAX_VALUE);
|
||||
itemBuilder.dimensions(15, 15, 50);
|
||||
itemBuilder.primarySkill((int) NOID);
|
||||
itemBuilder.bodySpaces(MiscConstants.EMPTY_BYTE_PRIMITIVE_ARRAY);
|
||||
itemBuilder.modelName("model.container.quiver.");
|
||||
itemBuilder.difficulty(300.0f);
|
||||
itemBuilder.weightGrams(4500);
|
||||
itemBuilder.material(Materials.MATERIAL_STEEL);
|
||||
itemBuilder.value(50000);
|
||||
itemBuilder.isTraded(false);
|
||||
|
||||
ItemTemplate template = itemBuilder.build();
|
||||
templateId = template.getTemplateId();
|
||||
logger.info(name+" TemplateID: "+templateId);
|
||||
}
|
||||
}
|
||||
@@ -36,7 +36,7 @@ public class SealedMap implements ItemTypes, MiscConstants {
|
||||
itemBuilder.weightGrams(500);
|
||||
itemBuilder.material(Materials.MATERIAL_MAGIC);
|
||||
itemBuilder.value(2000000);
|
||||
itemBuilder.isTraded(true);
|
||||
itemBuilder.isTraded(false);
|
||||
|
||||
ItemTemplate template = itemBuilder.build();
|
||||
templateId = template.getTemplateId();
|
||||
|
||||
44
src/main/java/mod/sin/items/StableContract.java
Normal file
44
src/main/java/mod/sin/items/StableContract.java
Normal file
@@ -0,0 +1,44 @@
|
||||
package mod.sin.items;
|
||||
|
||||
import com.wurmonline.server.MiscConstants;
|
||||
import com.wurmonline.server.items.ItemTemplate;
|
||||
import com.wurmonline.server.items.ItemTypes;
|
||||
import com.wurmonline.server.items.Materials;
|
||||
import org.gotti.wurmunlimited.modsupport.ItemTemplateBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class StableContract implements ItemTypes, MiscConstants {
|
||||
public static Logger logger = Logger.getLogger(PipingKit.class.getName());
|
||||
public static int templateId;
|
||||
|
||||
public void createTemplate() throws IOException {
|
||||
String name = "stable master contract";
|
||||
ItemTemplateBuilder itemBuilder = new ItemTemplateBuilder("mod.item.stable.master.contract");
|
||||
itemBuilder.name(name, "stable master contract", "A contract for hiring a stable master.");
|
||||
itemBuilder.descriptions("excellent", "good", "ok", "poor");
|
||||
itemBuilder.itemTypes(new short[]{ // {108, 146, 44, 21, 147, 113} - War Arrow
|
||||
ItemTypes.ITEM_TYPE_FULLPRICE,
|
||||
ItemTypes.ITEM_TYPE_NOSELLBACK,
|
||||
ItemTypes.ITEM_TYPE_ALWAYS_BANKABLE
|
||||
});
|
||||
itemBuilder.imageNumber((short) 324);
|
||||
itemBuilder.behaviourType((short) 1);
|
||||
itemBuilder.combatDamage(0);
|
||||
itemBuilder.decayTime(Long.MAX_VALUE);
|
||||
itemBuilder.dimensions(1, 10, 10);
|
||||
itemBuilder.primarySkill((int) NOID);
|
||||
itemBuilder.bodySpaces(MiscConstants.EMPTY_BYTE_PRIMITIVE_ARRAY);
|
||||
itemBuilder.modelName("model.writ.trader.");
|
||||
itemBuilder.difficulty(300.0f);
|
||||
itemBuilder.weightGrams(0);
|
||||
itemBuilder.material(Materials.MATERIAL_PAPER);
|
||||
itemBuilder.value(100000);
|
||||
itemBuilder.isTraded(false);
|
||||
|
||||
ItemTemplate template = itemBuilder.build();
|
||||
templateId = template.getTemplateId();
|
||||
logger.info(name+" TemplateID: "+templateId);
|
||||
}
|
||||
}
|
||||
@@ -23,7 +23,6 @@ import mod.sin.items.caches.*;
|
||||
import mod.sin.lib.Util;
|
||||
import org.gotti.wurmunlimited.modloader.classhooks.HookException;
|
||||
import org.gotti.wurmunlimited.modloader.classhooks.HookManager;
|
||||
import org.nyxcode.wurm.discordrelay.DiscordRelay;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -82,9 +81,6 @@ public class Arena {
|
||||
nsq.sendQuestion();
|
||||
}
|
||||
|
||||
public static void sendHotaMessage(String message){
|
||||
DiscordRelay.sendToDiscord("arena", message, true);
|
||||
}
|
||||
|
||||
public static void createNewHotaPrize(Village v, int winStreak){
|
||||
try {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package mod.sin.wyvern;
|
||||
|
||||
import com.wurmonline.server.items.Item;
|
||||
import com.wurmonline.server.items.ItemTemplateFactory;
|
||||
import com.wurmonline.server.villages.GuardPlan;
|
||||
import com.wurmonline.server.villages.Village;
|
||||
import com.wurmonline.server.villages.Villages;
|
||||
|
||||
@@ -10,6 +10,8 @@ import java.util.Map;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.wurmonline.server.Servers;
|
||||
import com.wurmonline.server.behaviours.Action;
|
||||
import mod.sin.lib.Util;
|
||||
import org.gotti.wurmunlimited.modloader.ReflectionUtil;
|
||||
import org.gotti.wurmunlimited.modloader.classhooks.HookManager;
|
||||
import org.gotti.wurmunlimited.modloader.classhooks.InvocationHandlerFactory;
|
||||
@@ -95,6 +97,10 @@ public class ItemMod {
|
||||
public static GlimmerscaleHose GLIMMERSCALE_HOSE = new GlimmerscaleHose();
|
||||
public static GlimmerscaleSleeve GLIMMERSCALE_SLEEVE = new GlimmerscaleSleeve();
|
||||
public static GlimmerscaleVest GLIMMERSCALE_VEST = new GlimmerscaleVest();
|
||||
|
||||
//Ocnoc
|
||||
public static PipingKit PIPING_KIT = new PipingKit();
|
||||
public static StableContract STABLE_CONTRACT = new StableContract();
|
||||
|
||||
public static void createItems(){
|
||||
logger.info("createItems()");
|
||||
@@ -126,6 +132,9 @@ public class ItemMod {
|
||||
TREASURE_BOX.createTemplate();
|
||||
WARHAMMER.createTemplate();
|
||||
WARHAMMER_HEAD.createTemplate();
|
||||
PIPING_KIT.createTemplate();
|
||||
STABLE_CONTRACT.createTemplate();
|
||||
|
||||
|
||||
// Arena Fragments
|
||||
KEY_FRAGMENT.createTemplate();
|
||||
@@ -178,6 +187,8 @@ public class ItemMod {
|
||||
ModActions.registerAction(new SealedMapAction());
|
||||
ModActions.registerAction(new SupplyDepotAction());
|
||||
ModActions.registerAction(new TreasureBoxAction());
|
||||
ModActions.registerAction(new PipingKitAction());
|
||||
ModActions.registerAction(new StableContractAction());
|
||||
}
|
||||
|
||||
public static void initCreationEntries(){
|
||||
@@ -198,6 +209,7 @@ public class ItemMod {
|
||||
//STATUETTE_CYBERHUSKY.initCreationEntry();
|
||||
WARHAMMER.initCreationEntry();
|
||||
WARHAMMER_HEAD.initCreationEntry();
|
||||
//HUGE_CRATE.initCreationEntry();
|
||||
|
||||
// Spectral set
|
||||
/*SPECTRAL_BOOT.initCreationEntry();
|
||||
@@ -326,9 +338,21 @@ public class ItemMod {
|
||||
ItemTemplate goldMirror = ItemTemplateFactory.getInstance().getTemplate(ItemList.goldenMirror);
|
||||
ReflectionUtil.setPrivateField(goldMirror, ReflectionUtil.getField(goldMirror.getClass(), "value"), 1000000);
|
||||
|
||||
// Set transmutation rod to 2 gold instead of 50 silver.
|
||||
//ItemTemplate transmutationRod = ItemTemplateFactory.getInstance().getTemplate(668);
|
||||
//ReflectionUtil.setPrivateField(transmutationRod, ReflectionUtil.getField(transmutationRod.getClass(), "value"), 2000000);
|
||||
// Set sculpting wand to be 25 silver
|
||||
ItemTemplate sculptingWand = ItemTemplateFactory.getInstance().getTemplate(ItemList.wandSculpting);
|
||||
ReflectionUtil.setPrivateField(sculptingWand, ReflectionUtil.getField(sculptingWand.getClass(), "value"), 250000);
|
||||
ReflectionUtil.setPrivateField(sculptingWand, ReflectionUtil.getField(sculptingWand.getClass(), "nodrop"), false);
|
||||
|
||||
// Set mysteryEgg to be 5 silver
|
||||
int mysteryEggID = ItemTemplateFactory.getInstance().getTemplate("mystery egg").getTemplateId();
|
||||
ItemTemplate mysteryEgg = ItemTemplateFactory.getInstance().getTemplate(mysteryEggID);
|
||||
ReflectionUtil.setPrivateField(mysteryEgg, ReflectionUtil.getField(mysteryEgg.getClass(), "value"), 50000);
|
||||
ReflectionUtil.setPrivateField(mysteryEgg, ReflectionUtil.getField(mysteryEgg.getClass(), "fullprice"), true);
|
||||
|
||||
//Set transmutation rod to 2 gold instead of 50 silver.
|
||||
ItemTemplate transmutationRod = ItemTemplateFactory.getInstance().getTemplate(ItemList.rodTransmutation);
|
||||
ReflectionUtil.setPrivateField(transmutationRod, ReflectionUtil.getField(transmutationRod.getClass(), "value"), 2000000);
|
||||
|
||||
|
||||
// " return this.isTransportable || (this.getTemplateId() >= 510 && this.getTemplateId() <= 513) || this.getTemplateId() == 722 || this.getTemplateId() == 670;"
|
||||
// Make mailboxes loadable (PvE Only)
|
||||
@@ -380,6 +404,7 @@ public class ItemMod {
|
||||
ReflectionUtil.setPrivateField(marbleKeystone, ReflectionUtil.getField(marbleKeystone.getClass(), "decoration"), true);
|
||||
ItemTemplate skull = ItemTemplateFactory.getInstance().getTemplate(ItemList.skull);
|
||||
ReflectionUtil.setPrivateField(skull, ReflectionUtil.getField(skull.getClass(), "decoration"), true);
|
||||
// Still need to override the method for getting spaceLeft
|
||||
|
||||
createCustomWeapons();
|
||||
createCustomArmours();
|
||||
|
||||
@@ -25,7 +25,6 @@ import mod.sin.lib.Util;
|
||||
import org.gotti.wurmunlimited.modloader.classhooks.HookException;
|
||||
import org.gotti.wurmunlimited.modloader.classhooks.HookManager;
|
||||
import org.gotti.wurmunlimited.modsupport.ModSupportDb;
|
||||
import org.nyxcode.wurm.discordrelay.DiscordRelay;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
@@ -46,7 +45,6 @@ public class MiscChanges {
|
||||
}
|
||||
|
||||
public static void sendServerTabMessage(String channel, final String message, final int red, final int green, final int blue){
|
||||
DiscordRelay.sendToDiscord(channel, message, true);
|
||||
// WARNING: Never change this from a new Runnable. Lambdas are a lie and will break everything.
|
||||
Runnable r = new Runnable() {
|
||||
public void run() {
|
||||
@@ -84,7 +82,6 @@ public class MiscChanges {
|
||||
sendGlobalFreedomChat(player, slayMessage+slayers, 200, 25, 25);
|
||||
addPlayerStatsDeath(player.getName());
|
||||
addPlayerStatsKill(slayers);
|
||||
DiscordRelay.sendToDiscord("deaths", player.getName()+" "+slayMessage+slayers, true);
|
||||
}
|
||||
|
||||
public static void addPlayerStat(String playerName, String stat){
|
||||
@@ -314,8 +311,8 @@ public class MiscChanges {
|
||||
|
||||
// - Enable creature custom colors - (Used for creating custom color creatures eg. Lilith) - //
|
||||
CtClass ctCreature = classPool.get("com.wurmonline.server.creatures.Creature");
|
||||
replace = "{ return true; }";
|
||||
Util.setBodyDeclared(thisClass, ctCreature, "hasCustomColor", replace);
|
||||
/** replace = "{ return true; }";
|
||||
Util.setBodyDeclared(thisClass, ctCreature, "hasCustomColor", replace);**/
|
||||
|
||||
// - Increase the amount of checks for new unique spawns by 5x - //
|
||||
CtClass ctServer = classPool.get("com.wurmonline.server.Server");
|
||||
@@ -626,10 +623,16 @@ public class MiscChanges {
|
||||
"}";
|
||||
Util.instrumentDeclared(thisClass, ctAffinitiesTimed, "add", "getExpires", replace);
|
||||
|
||||
Util.setReason("Make weaponsmithing oils actually help with weaponsmithing");
|
||||
replace = "if($1 == 1016){" +
|
||||
"return $0.getSpellEffectPower((byte)77);" +
|
||||
"}";
|
||||
Util.insertBeforeDeclared(thisClass, ctItem, "getSkillSpellImprovement", replace);
|
||||
|
||||
Util.setReason("Make bed QL affect sleep bonus timer.");
|
||||
CtClass ctPlayerInfo = classPool.get("com.wurmonline.server.players.PlayerInfo");
|
||||
replace = "secs = "+MiscChanges.class.getName()+".getBedBonus(secs, this.bed);" +
|
||||
"$_ = $proceed($$);";
|
||||
replace = "long secs2 = "+MiscChanges.class.getName()+".getBedBonus(secs, this.bed);" +
|
||||
"$_ = $proceed((int)(this.sleep + secs2));";
|
||||
Util.instrumentDeclared(thisClass, ctPlayerInfo, "calculateSleep", "setSleep", replace);
|
||||
|
||||
Util.setReason("Fix intrateleport block bug.");
|
||||
|
||||
@@ -1,17 +1,19 @@
|
||||
package mod.sin.wyvern;
|
||||
|
||||
import com.wurmonline.server.FailedException;
|
||||
import com.wurmonline.server.Items;
|
||||
import com.wurmonline.server.NoSuchItemException;
|
||||
import com.wurmonline.server.NoSuchPlayerException;
|
||||
import com.wurmonline.server.creatures.Creature;
|
||||
import com.wurmonline.server.creatures.NoSuchCreatureException;
|
||||
import com.wurmonline.server.items.Item;
|
||||
import com.wurmonline.server.items.ItemList;
|
||||
import com.wurmonline.server.items.*;
|
||||
import com.wurmonline.server.skills.Skill;
|
||||
import com.wurmonline.server.zones.NoSuchZoneException;
|
||||
import javassist.ClassPool;
|
||||
import javassist.CtClass;
|
||||
import javassist.NotFoundException;
|
||||
import javassist.bytecode.Descriptor;
|
||||
import mod.sin.items.HugeCrate;
|
||||
import mod.sin.lib.Util;
|
||||
import org.gotti.wurmunlimited.modloader.classhooks.HookException;
|
||||
import org.gotti.wurmunlimited.modloader.classhooks.HookManager;
|
||||
@@ -53,6 +55,7 @@ public class QualityOfLife {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static Item getVehicleSafe(Creature pilot) {
|
||||
try {
|
||||
if (pilot.getVehicle() != -10)
|
||||
@@ -126,6 +129,7 @@ public class QualityOfLife {
|
||||
QualityOfLife.class.getName()+".vehicleHook(performer, $0);";
|
||||
Util.instrumentDescribed(thisClass, ctTileRockBehaviour, "action", desc2, "setDataXY", replace);*/
|
||||
|
||||
|
||||
Util.setReason("Allow players to surface mine directly into vehicles.");
|
||||
CtClass ctTileRockBehaviour = classPool.get("com.wurmonline.server.behaviours.TileRockBehaviour");
|
||||
replace = "$_ = $proceed($$);" +
|
||||
@@ -148,6 +152,18 @@ public class QualityOfLife {
|
||||
replace = "$_ = false;";
|
||||
Util.instrumentDeclared(thisClass, ctMethodsCreatures, "tame", "isPriest", replace);
|
||||
|
||||
Util.setReason("Allow dirt to add up to 100 dirt to a container.");
|
||||
CtClass ctDirt = classPool.get("com.wurmonline.server.spells.Dirt");
|
||||
replace = "$1 = 100;"
|
||||
+ "$_ = $proceed($$);";
|
||||
Util.instrumentDeclared(thisClass, ctDirt, "doEffect", "min", replace);
|
||||
|
||||
Util.setReason("Rescale Wild Growth to work up to an 8x8 area");
|
||||
CtClass ctWildGrowth = classPool.get("com.wurmonline.server.spells.WildGrowth");
|
||||
replace = "$2 = (power / 10.0); $_ = $proceed($$);";
|
||||
Util.instrumentDeclared(thisClass, ctWildGrowth, "doEffect", "max", replace);
|
||||
|
||||
|
||||
Util.setReason("Send gems, source crystals, flint, etc. into vehicle.");
|
||||
CtClass[] params2 = {
|
||||
CtClass.intType,
|
||||
|
||||
@@ -3,6 +3,8 @@ package mod.sin.wyvern;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.lang.reflect.InvocationHandler;
|
||||
import java.lang.reflect.Method;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.file.Paths;
|
||||
import java.sql.Connection;
|
||||
@@ -16,13 +18,18 @@ import java.util.logging.Logger;
|
||||
import java.util.logging.SimpleFormatter;
|
||||
|
||||
import com.wurmonline.server.Items;
|
||||
import com.wurmonline.server.Server;
|
||||
import com.wurmonline.server.creatures.Communicator;
|
||||
import com.wurmonline.server.creatures.Creature;
|
||||
import com.wurmonline.server.items.*;
|
||||
import javassist.bytecode.Descriptor;
|
||||
import mod.sin.items.*;
|
||||
import mod.sin.kingdomoffices.ItemCreator;
|
||||
import mod.sin.lib.Util;
|
||||
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.gotti.wurmunlimited.modloader.interfaces.*;
|
||||
import org.gotti.wurmunlimited.modsupport.ModSupportDb;
|
||||
import org.gotti.wurmunlimited.modsupport.actions.ModActions;
|
||||
@@ -259,6 +266,65 @@ implements WurmServerMod, Configurable, PreInitable, Initable, ItemTemplatesCrea
|
||||
} catch (NoSuchTemplateException | IllegalArgumentException | IllegalAccessException | ClassCastException | NoSuchFieldException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
try {
|
||||
logger.info("Attempting Shop Hook...");
|
||||
logger.info("Creating Hook Descriptor...");
|
||||
String descriptor = Descriptor.ofMethod(CtClass.voidType, new CtClass[] {
|
||||
HookManager.getInstance().getClassPool().get("com.wurmonline.server.creatures.Creature")
|
||||
});
|
||||
logger.info("Hooking createShop...");
|
||||
HookManager.getInstance().registerHook("com.wurmonline.server.economy.Shop", "createShop", descriptor, new InvocationHandlerFactory()
|
||||
{
|
||||
@Override
|
||||
public InvocationHandler createInvocationHandler() {
|
||||
return new InvocationHandler() {
|
||||
@Override
|
||||
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
|
||||
Object result = method.invoke(proxy, args);
|
||||
Item inventory = ((Creature)args[0]).getInventory();
|
||||
for(int x = 0; x < 3; ++x) {
|
||||
// this is our item...
|
||||
Item item;
|
||||
// Book of conversion
|
||||
item = Creature.createItem(BookOfConversion.templateId, 50.0f);
|
||||
inventory.insertItem(item);
|
||||
// Common mystery egg
|
||||
int mysteryEggID = ItemTemplateFactory.getInstance().getTemplate("mystery egg").getTemplateId();
|
||||
item = Creature.createItem(mysteryEggID, 100);
|
||||
inventory.insertItem(item);
|
||||
// Affinity orb
|
||||
item = Creature.createItem(AffinityOrb.templateId, 50 + Server.rand.nextInt(50));
|
||||
inventory.insertItem(item);
|
||||
// Chaos crystal
|
||||
item = Creature.createItem(ChaosCrystal.templateId, 5);
|
||||
inventory.insertItem(item);
|
||||
// Enchanter's Crystal
|
||||
item = Creature.createItem(EnchantersCrystal.templateId, 1 + Server.rand.nextInt(99));
|
||||
inventory.insertItem(item);
|
||||
// Sealed map
|
||||
item = Creature.createItem(SealedMap.templateId, 1 + Server.rand.nextInt(99));
|
||||
inventory.insertItem(item);
|
||||
// Sculpting wand
|
||||
item = Creature.createItem(ItemList.wandSculpting, 50);
|
||||
inventory.insertItem(item);
|
||||
// Piping kit
|
||||
item = Creature.createItem(PipingKit.templateId, 50);
|
||||
inventory.insertItem(item);
|
||||
// Stable master contract
|
||||
item = Creature.createItem(StableContract.templateId, 50);
|
||||
inventory.insertItem(item);
|
||||
// Kingdom token
|
||||
item = Creature.createItem(ItemCreator.KINGDOM_TOKEN.getTemplateId(), 50);
|
||||
inventory.insertItem(item);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
};
|
||||
}
|
||||
});
|
||||
} catch ( IllegalArgumentException | ClassCastException | NotFoundException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -341,8 +407,8 @@ implements WurmServerMod, Configurable, PreInitable, Initable, ItemTemplatesCrea
|
||||
logger.info("Registering Arena actions.");
|
||||
ModActions.registerAction(new SorceryCombineAction());
|
||||
//ModActions.registerAction(new VillageTeleportAction()); // [3/28/18] Disabled - Highway Portals added instead.
|
||||
ModActions.registerAction(new ArenaTeleportAction());
|
||||
ModActions.registerAction(new ArenaEscapeAction());
|
||||
//ModActions.registerAction(new ArenaTeleportAction());
|
||||
//ModActions.registerAction(new ArenaEscapeAction());
|
||||
logger.info("Registering Dev actions.");
|
||||
ModActions.registerAction(new MissionAddAction());
|
||||
ModActions.registerAction(new MissionRemoveAction());
|
||||
|
||||
@@ -113,6 +113,22 @@ public class MethodsBestiary {
|
||||
return (byte)127;
|
||||
}
|
||||
|
||||
public static String generateGuardMaleName() {
|
||||
final int rand = Server.rand.nextInt(50);
|
||||
final String[] firstPart = { "Carl", "John", "Bil", "Strong", "Dare", "Grave", "Hard", "Marde", "Verde", "Vold", "Tolk", "Roe", "Bee", "Har", "Rol", "Ma", "Lo", "Claw", "Drag", "Hug", "Te", "Two", "Fu", "Ji", "La", "Ze", "Jal", "Milk", "War", "Wild", "Hang", "Just", "Fan", "Cloclo", "Buy", "Bought", "Sard", "Smart", "Slo", "Shield", "Dark", "Hung", "Sed", "Sold", "Swing", "Gar", "Dig", "Bur", "Angel", "Sorrow" };
|
||||
final int rand2 = Server.rand.nextInt(50);
|
||||
final String[] secondPart = { "ho", "john", "fish", "tree", "ooy", "olli", "tack", "rank", "sy", "moy", "dangly", "tok", "rich", "do", "mark", "stuf", "sin", "nyt", "wer", "mor", "emort", "vaar", "salm", "holm", "wyr", "zah", "ty", "fast", "der", "mar", "star", "bark", "oo", "flifil", "innow", "shoo", "husk", "eric", "ic", "o", "moon", "little", "ien", "strong", "arm", "hope", "slem", "tro", "rot", "heart" };
|
||||
return firstPart[rand] + secondPart[rand2];
|
||||
}
|
||||
|
||||
public static String generateGuardFemaleName() {
|
||||
final int rand = Server.rand.nextInt(50);
|
||||
final String[] firstPart = { "Too", "Sand", "Tree", "Whisper", "Lore", "Yan", "Van", "Vard", "Nard", "Oli", "Ala", "Krady", "Whe", "Har", "Zizi", "Zaza", "Lyn", "Claw", "Mali", "High", "Bright", "Star", "Nord", "Jala", "Yna", "Ze", "Jal", "Milk", "War", "Wild", "Fine", "Sweet", "Witty", "Cloclo", "Lory", "Tran", "Vide", "Lax", "Quick", "Shield", "Dark", "Light", "Cry", "Sold", "Juna", "Tear", "Cheek", "Ani", "Angel", "Sorro" };
|
||||
final int rand2 = Server.rand.nextInt(50);
|
||||
final String[] secondPart = { "peno", "hag", "maiden", "woman", "loy", "oa", "dei", "sai", "nai", "nae", "ane", "aei", "peno", "doa", "ela", "hofaire", "sina", "nyta", "wera", "more", "emorta", "vaara", "salma", "holmi", "wyre", "zahe", "tya", "faste", "dere", "mara", "stare", "barkia", "ooa", "fila", "innowyn", "shoein", "huskyn", "erica", "ica", "oa", "moonie", "littly", "ieny", "strongie", "ermy", "hope", "steam", "high", "wind", "heart" };
|
||||
return firstPart[rand] + secondPart[rand2];
|
||||
}
|
||||
|
||||
protected static boolean isUsuallyHitched(int templateId){
|
||||
if(templateId == Charger.templateId){
|
||||
return true;
|
||||
@@ -485,7 +501,9 @@ public class MethodsBestiary {
|
||||
|
||||
public static byte newCreatureType(int templateid, byte ctype) throws Exception{
|
||||
CreatureTemplate template = CreatureTemplateFactory.getInstance().getTemplate(templateid);
|
||||
if(ctype == 0 && (template.isAggHuman() || template.getBaseCombatRating() > 10) && !template.isUnique() && !Titans.isTitan(templateid)){
|
||||
// Disallow this from occuring to minipets, it crashes
|
||||
int minipetid = CreatureTemplateFactory.getInstance().getTemplate("Mini Pet").getTemplateId();
|
||||
if(ctype == 0 && (template.isAggHuman() || template.getBaseCombatRating() > 10) && !template.isUnique() && !Titans.isTitan(templateid) && !(templateid == minipetid)) {
|
||||
if(Server.rand.nextInt(5) == 0){
|
||||
ctype = (byte) (Server.rand.nextInt(11)+1);
|
||||
if(Server.rand.nextInt(50) == 0){
|
||||
|
||||
@@ -21,9 +21,14 @@ import com.wurmonline.server.villages.Villages;
|
||||
import mod.sin.armour.SpectralHide;
|
||||
import mod.sin.creatures.Reaper;
|
||||
import mod.sin.creatures.SpectralDrake;
|
||||
import mod.sin.items.AffinityOrb;
|
||||
import mod.sin.items.ChaosCrystal;
|
||||
import mod.sin.items.EnchantersCrystal;
|
||||
import mod.sin.items.FriyanTablet;
|
||||
import mod.sin.items.caches.GemCache;
|
||||
import mod.sin.items.caches.RiftCache;
|
||||
import mod.sin.items.caches.ToolCache;
|
||||
import mod.sin.items.caches.TreasureMapCache;
|
||||
import mod.sin.wyvern.Bounty;
|
||||
import mod.sin.wyvern.MiscChanges;
|
||||
import mod.sin.wyvern.Arena;
|
||||
@@ -219,6 +224,21 @@ public class LootBounty {
|
||||
if(random.nextInt(100) < 75){
|
||||
corpse.insertItem(ItemFactory.createItem((random.nextBoolean() ? ItemList.adamantineBar : ItemList.glimmerSteelBar), 30+(30*random.nextFloat()), ""));
|
||||
}
|
||||
if(random.nextInt(100) < 25) {
|
||||
Item item = ItemFactory.createItem(ItemUtil.getMysteryEggID(), 50, "");
|
||||
item.setRarity((byte)1);
|
||||
corpse.insertItem(item);
|
||||
}
|
||||
if(random.nextInt(100) < 5) {
|
||||
int[] caches = {
|
||||
TreasureMapCache.templateId,
|
||||
GemCache.templateId,
|
||||
RiftCache.templateId
|
||||
};
|
||||
int cacheSelected = random.nextInt(3);
|
||||
Item item = ItemFactory.createItem(caches[cacheSelected], 20 + random.nextInt(40), "");
|
||||
corpse.insertItem(item);
|
||||
}
|
||||
if(random.nextInt(100) < 5){
|
||||
//int[] maskTemplates = {973, 974, 975, 976, 977, 978, 1099};
|
||||
int[] maskTemplates = {
|
||||
@@ -270,7 +290,8 @@ public class LootBounty {
|
||||
if(templateId == Reaper.templateId || templateId == SpectralDrake.templateId){
|
||||
Server.getInstance().broadCastAlert("The "+mob.getName()+" has been slain. A new creature shall enter the realm shortly.");
|
||||
sendLootHelp = true;
|
||||
}else if(Titans.isTitan(mob)){
|
||||
}
|
||||
else if(Titans.isTitan(mob)){
|
||||
Server.getInstance().broadCastAlert("The Titan "+mob.getName()+" has been defeated!");
|
||||
MiscChanges.sendGlobalFreedomChat(mob, "The Titan "+mob.getName()+" has been defeated!", 255, 105, 180);
|
||||
MiscChanges.sendServerTabMessage("titan", "The Titan "+mob.getName()+" has been defeated!", 255, 105, 180);
|
||||
@@ -310,7 +331,21 @@ public class LootBounty {
|
||||
blessWorldWithMoonVeins(mob);
|
||||
// Spawn 5-10 friyan tablets throughout the world.
|
||||
spawnFriyanTablets();
|
||||
|
||||
|
||||
try {
|
||||
// guaranteed rare egg, 15% chance it's fantastic
|
||||
Item item = ItemFactory.createItem(ItemUtil.getMysteryEggID(), 50, "");
|
||||
item.setRarity((byte)1);
|
||||
if(random.nextInt( 100) < 15) {
|
||||
item.setRarity((byte)3);
|
||||
}
|
||||
corpse.insertItem(item);
|
||||
|
||||
//free affinity orb
|
||||
item = ItemFactory.createItem(AffinityOrb.templateId, 50, "");
|
||||
} catch (FailedException | NoSuchTemplateException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
// Spawn Spectral Drake
|
||||
/*if (mob.isDragon()) { // Spawn the spectral drake and add extra hide/scale
|
||||
handleDragonLoot(mob, corpse);
|
||||
|
||||
@@ -18,14 +18,13 @@ import com.wurmonline.server.items.ItemTemplate;
|
||||
import com.wurmonline.server.items.NoSuchTemplateException;
|
||||
import com.wurmonline.server.players.Player;
|
||||
import com.wurmonline.server.players.Titles.Title;
|
||||
import com.wurmonline.server.skills.NoSuchSkillException;
|
||||
import com.wurmonline.server.skills.SkillList;
|
||||
import mod.sin.armour.SpectralHide;
|
||||
import mod.sin.creatures.Reaper;
|
||||
import mod.sin.creatures.SpectralDrake;
|
||||
import mod.sin.items.AffinityOrb;
|
||||
import mod.sin.items.caches.RiftCache;
|
||||
import mod.sin.items.caches.TitanCache;
|
||||
import mod.sin.kingdomoffices.ItemCreator;
|
||||
import mod.sin.wyvern.*;
|
||||
import mod.sin.wyvern.util.ItemUtil;
|
||||
|
||||
@@ -141,6 +140,7 @@ public class PlayerBounty {
|
||||
}*/
|
||||
if(mob.isUnique()){
|
||||
MiscChanges.addPlayerStat(player.getName(), "UNIQUES");
|
||||
rewardPowerfulLoot(player, mob);
|
||||
}
|
||||
if(RareSpawns.isRareCreature(mob)){
|
||||
Item riftCache = ItemFactory.createItem(RiftCache.templateId, 50f+(30f*Server.rand.nextFloat()), mob.getName());
|
||||
@@ -199,6 +199,9 @@ public class PlayerBounty {
|
||||
strBuilder += " for slaying the " + mob.getName() + ".";
|
||||
player.getCommunicator().sendSafeServerMessage(strBuilder);
|
||||
long playerSteamId = steamIdMap.get(player.getName());
|
||||
Item creatureToken = ItemFactory.createItem(ItemCreator.CREATURE_TOKEN.getTemplateId(), 50, (byte)0, "");
|
||||
inventory.insertItem(creatureToken);
|
||||
player.getCommunicator().sendSafeServerMessage("You also receive a " + creatureToken.getName() + "!");
|
||||
if(playersRewarded.containsKey(mobWurmId)){
|
||||
playersRewarded.get(mobWurmId).add(playerSteamId);
|
||||
}else{
|
||||
|
||||
@@ -23,7 +23,7 @@ public class Mastercraft {
|
||||
diff -= skill.affinity;
|
||||
}
|
||||
if(skill.getKnowledge() > 99.0d){
|
||||
diff -= 2d-((100d-skill.getKnowledge())*2d);
|
||||
diff -= 4d-((100d-skill.getKnowledge())*4d);
|
||||
}
|
||||
if(skill.getKnowledge() > 90.0d){
|
||||
diff -= 2d-((100d-skill.getKnowledge())*0.2d);
|
||||
@@ -33,7 +33,7 @@ public class Mastercraft {
|
||||
diff -= item.getRarity();
|
||||
}
|
||||
if(item.getCurrentQualityLevel() > 99.0f){
|
||||
diff -= 1d-((100d-item.getCurrentQualityLevel())*1d);
|
||||
diff -= 3d-((100d-item.getCurrentQualityLevel())*3d);
|
||||
}
|
||||
if(item.getCurrentQualityLevel() > 90.0f){
|
||||
diff -= 1d-((100d-item.getCurrentQualityLevel())*0.1d);
|
||||
|
||||
@@ -119,6 +119,11 @@ public class ItemUtil {
|
||||
}
|
||||
item.setDescription(item.getDescription()+eff.getName().substring(0,1)+Math.round(power));
|
||||
}
|
||||
|
||||
public static int getMysteryEggID() {
|
||||
return ItemTemplateFactory.getInstance().getTemplate("mystery egg").getTemplateId();
|
||||
}
|
||||
|
||||
public static Item createRandomSorcery(byte charges){
|
||||
try {
|
||||
Item sorcery = ItemFactory.createItem(sorceryIds[Server.rand.nextInt(sorceryIds.length)], 90+(10*Server.rand.nextFloat()), null);
|
||||
|
||||
Reference in New Issue
Block a user