Holiday mostly finished, added eternal orb to traders on restock. Disabled arcanite crafting for now.
This commit is contained in:
@@ -1,4 +0,0 @@
|
|||||||
package mod.sin.actions.items;
|
|
||||||
|
|
||||||
public class PermafrostTemperatureAction {
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
package mod.sin.actions.items.magicitems;
|
||||||
|
|
||||||
|
import com.wurmonline.server.Items;
|
||||||
|
import com.wurmonline.server.behaviours.Action;
|
||||||
|
import com.wurmonline.server.behaviours.ActionEntry;
|
||||||
|
import com.wurmonline.server.creatures.Creature;
|
||||||
|
import com.wurmonline.server.items.Item;
|
||||||
|
import com.wurmonline.server.items.TempStates;
|
||||||
|
import com.wurmonline.server.players.Player;
|
||||||
|
import mod.sin.items.CrystalPermaFrost;
|
||||||
|
import mod.sin.items.WandPermaFrost;
|
||||||
|
import org.gotti.wurmunlimited.modsupport.actions.ActionPerformer;
|
||||||
|
import org.gotti.wurmunlimited.modsupport.actions.ModActions;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
public class BlazeTemperatureActionPerformer implements ActionPerformer {
|
||||||
|
private static Logger logger = Logger.getLogger(BlazeTemperatureActionPerformer.class.getName());
|
||||||
|
|
||||||
|
private final short actionId;
|
||||||
|
public final ActionEntry actionEntry;
|
||||||
|
|
||||||
|
public BlazeTemperatureActionPerformer() {
|
||||||
|
actionId = (short) ModActions.getNextActionId();
|
||||||
|
actionEntry = ActionEntry.createEntry(
|
||||||
|
actionId,
|
||||||
|
"Heat up",
|
||||||
|
"heating",
|
||||||
|
new int[0]
|
||||||
|
);
|
||||||
|
ModActions.registerAction(actionEntry);
|
||||||
|
ModActions.registerActionPerformer(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean action(Action act, Creature performer, Item source, Item target, short action, float counter)
|
||||||
|
{
|
||||||
|
try{
|
||||||
|
if(performer instanceof Player){
|
||||||
|
if(source.getTemplateId() == CrystalPermaFrost.templateId) {
|
||||||
|
if(source.getQualityLevel() < 30) {
|
||||||
|
performer.getCommunicator().sendNormalServerMessage("The weakened crystal uses up the last of its power and shatters!");
|
||||||
|
Items.destroyItem(source.getWurmId());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
source.setQualityLevel(source.getQualityLevel() - 10);
|
||||||
|
performer.getCommunicator().sendNormalServerMessage("The crystal buzzes with power, working its magic. It feels weaker afterwards.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(source.getTemplateId() == WandPermaFrost.templateId) {
|
||||||
|
if(source.getAuxData() <= 0) {
|
||||||
|
performer.getCommunicator().sendNormalServerMessage("The wand isn't powerful enough to raise the temperature of the " + target.getName() + ".");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
source.setAuxData((byte)(source.getAuxData() - (byte)1));
|
||||||
|
performer.getCommunicator().sendNormalServerMessage("The wand glows with power, draining some charge.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
short oldTemp = target.getTemperature();
|
||||||
|
target.setTemperature((short) Short.MAX_VALUE);
|
||||||
|
Method tempChange = TempStates.class.getDeclaredMethod("checkForChange", Item.class, Item.class, short.class, short.class, float.class);
|
||||||
|
tempChange.setAccessible(true);
|
||||||
|
if(target.getParent() != null) {
|
||||||
|
tempChange.invoke(null, target.getParent(), target, oldTemp, target.getTemperature(), 1);
|
||||||
|
}
|
||||||
|
performer.getCommunicator().sendNormalServerMessage("You heat up the " + target.getName() + ", heating it until it's glowing.");
|
||||||
|
return true;
|
||||||
|
}else{
|
||||||
|
logger.info("Somehow a non-player used permafrost");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short getActionId() {
|
||||||
|
return actionId;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
package mod.sin.actions.items.magicitems;
|
||||||
|
|
||||||
|
import com.wurmonline.server.behaviours.ActionEntry;
|
||||||
|
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 mod.sin.items.CrystalPermaFrost;
|
||||||
|
import mod.sin.items.WandPermaFrost;
|
||||||
|
import mod.sin.wyvern.bonusoverhaul.MagicItemWrapper;
|
||||||
|
import mod.sin.wyvern.bonusoverhaul.MagicItems;
|
||||||
|
import org.gotti.wurmunlimited.modsupport.actions.BehaviourProvider;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class MagicItemMenuProvider implements BehaviourProvider {
|
||||||
|
private List<ActionEntry> menu;
|
||||||
|
ActionEntry permaFrost, blaze;
|
||||||
|
|
||||||
|
public MagicItemMenuProvider() {
|
||||||
|
permaFrost = new PermafrostTemperatureActionPerformer().actionEntry;
|
||||||
|
blaze = new BlazeTemperatureActionPerformer().actionEntry;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ActionEntry> getBehavioursFor(Creature performer, Item source, Item object) {
|
||||||
|
menu = new ArrayList<>();
|
||||||
|
if (canUse(performer, object) && source.getTemplateId() == CrystalPermaFrost.templateId || source.getTemplateId() == WandPermaFrost.templateId) {
|
||||||
|
menu.add(permaFrost);
|
||||||
|
}
|
||||||
|
if(canUse(performer, object) && performer.getPower() >= 5 && source.getTemplateId() == ItemList.wandDeity) {
|
||||||
|
menu.add(blaze);
|
||||||
|
}
|
||||||
|
if (performer instanceof Player && object != null && !menu.isEmpty()) {
|
||||||
|
menu.add(0, new ActionEntry((short) (-1 * menu.size()), "magic items", ""));
|
||||||
|
return menu;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean canUse(Creature performer, Item object) {
|
||||||
|
return performer.isPlayer() && object != null &&
|
||||||
|
!object.isInventory() && !object.isInventoryGroup() && !object.isTopParentPile() && !object.isBodyPart();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,28 +1,29 @@
|
|||||||
package mod.sin.actions.items;
|
package mod.sin.actions.items.magicitems;
|
||||||
|
|
||||||
import com.wurmonline.server.Items;
|
import com.wurmonline.server.Items;
|
||||||
import com.wurmonline.server.behaviours.Action;
|
import com.wurmonline.server.behaviours.Action;
|
||||||
import com.wurmonline.server.behaviours.ActionEntry;
|
import com.wurmonline.server.behaviours.ActionEntry;
|
||||||
import com.wurmonline.server.creatures.Creature;
|
import com.wurmonline.server.creatures.Creature;
|
||||||
import com.wurmonline.server.items.Item;
|
import com.wurmonline.server.items.Item;
|
||||||
|
import com.wurmonline.server.items.TempStates;
|
||||||
import com.wurmonline.server.players.Player;
|
import com.wurmonline.server.players.Player;
|
||||||
import mod.sin.items.Soul;
|
|
||||||
import mod.sin.wyvern.bonusoverhaul.Battery;
|
import mod.sin.wyvern.bonusoverhaul.Battery;
|
||||||
import mod.sin.wyvern.bonusoverhaul.ItemBonusOverhaul;
|
import mod.sin.wyvern.bonusoverhaul.ItemBonusOverhaul;
|
||||||
import mod.sin.wyvern.bonusoverhaul.ItemBonusWrapper;
|
import mod.sin.wyvern.bonusoverhaul.ItemBonusWrapper;
|
||||||
|
import mod.sin.wyvern.bonusoverhaul.MagicItems;
|
||||||
import org.gotti.wurmunlimited.modsupport.actions.*;
|
import org.gotti.wurmunlimited.modsupport.actions.*;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
public class ItemBonusRechargeAction implements ModAction, BehaviourProvider, ActionPerformer {
|
public class MagicItemRechargeAction implements ModAction, BehaviourProvider, ActionPerformer {
|
||||||
private static Logger logger = Logger.getLogger(ItemBonusRechargeAction.class.getName());
|
private static Logger logger = Logger.getLogger(MagicItemRechargeAction.class.getName());
|
||||||
|
|
||||||
private final short actionId;
|
private final short actionId;
|
||||||
private final ActionEntry actionEntry;
|
private final ActionEntry actionEntry;
|
||||||
|
|
||||||
public ItemBonusRechargeAction() {
|
public MagicItemRechargeAction() {
|
||||||
actionId = (short)ModActions.getNextActionId();
|
actionId = (short)ModActions.getNextActionId();
|
||||||
actionEntry = new ActionEntryBuilder(actionId, "Recharge magic item", "recharging").build();
|
actionEntry = new ActionEntryBuilder(actionId, "Recharge magic item", "recharging").build();
|
||||||
ModActions.registerAction(actionEntry);
|
ModActions.registerAction(actionEntry);
|
||||||
@@ -32,8 +33,7 @@ public class ItemBonusRechargeAction implements ModAction, BehaviourProvider, Ac
|
|||||||
@Override
|
@Override
|
||||||
public List<ActionEntry> getBehavioursFor(Creature performer, Item source, Item object)
|
public List<ActionEntry> getBehavioursFor(Creature performer, Item source, Item object)
|
||||||
{
|
{
|
||||||
ItemBonusWrapper wrapper = ItemBonusOverhaul.matchTemplateidToWrapper(object.getTemplateId());
|
if(performer instanceof Player && object != null && MagicItems.isRechargeable(object.getTemplateId()) && ItemBonusOverhaul.isValidBattery(source)) {
|
||||||
if(performer instanceof Player && object != null && wrapper != null && wrapper.isTimed() && ItemBonusOverhaul.isValidBattery(source)) {
|
|
||||||
return Collections.singletonList(actionEntry);
|
return Collections.singletonList(actionEntry);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
@@ -51,7 +51,7 @@ public class ItemBonusRechargeAction implements ModAction, BehaviourProvider, Ac
|
|||||||
try {
|
try {
|
||||||
Battery sourceBattery = ItemBonusOverhaul.getBatteryObject(source.getTemplateId());
|
Battery sourceBattery = ItemBonusOverhaul.getBatteryObject(source.getTemplateId());
|
||||||
ItemBonusWrapper wrapper = ItemBonusOverhaul.matchTemplateidToWrapper(target.getTemplateId());
|
ItemBonusWrapper wrapper = ItemBonusOverhaul.matchTemplateidToWrapper(target.getTemplateId());
|
||||||
if (wrapper == null || !wrapper.isTimed() || sourceBattery == null) {
|
if (!MagicItems.isRechargeable(target.getTemplateId()) || sourceBattery == null) {
|
||||||
performer.getCommunicator().sendNormalServerMessage("This cannot be charged.");
|
performer.getCommunicator().sendNormalServerMessage("This cannot be charged.");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
package mod.sin.actions.items.magicitems;
|
||||||
|
|
||||||
|
import com.wurmonline.server.Items;
|
||||||
|
import com.wurmonline.server.Server;
|
||||||
|
import com.wurmonline.server.behaviours.Action;
|
||||||
|
import com.wurmonline.server.behaviours.ActionEntry;
|
||||||
|
import com.wurmonline.server.creatures.Creature;
|
||||||
|
import com.wurmonline.server.items.Item;
|
||||||
|
import com.wurmonline.server.players.Player;
|
||||||
|
import mod.sin.items.CrystalPermaFrost;
|
||||||
|
import mod.sin.items.EternalReservoir;
|
||||||
|
import mod.sin.items.WandPermaFrost;
|
||||||
|
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.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
public class PermafrostTemperatureActionPerformer implements ActionPerformer {
|
||||||
|
private static Logger logger = Logger.getLogger(PermafrostTemperatureActionPerformer.class.getName());
|
||||||
|
|
||||||
|
private final short actionId;
|
||||||
|
public final ActionEntry actionEntry;
|
||||||
|
|
||||||
|
public PermafrostTemperatureActionPerformer() {
|
||||||
|
actionId = (short) ModActions.getNextActionId();
|
||||||
|
actionEntry = ActionEntry.createEntry(
|
||||||
|
actionId,
|
||||||
|
"Permafrost freeze",
|
||||||
|
"freezing",
|
||||||
|
new int[0]
|
||||||
|
);
|
||||||
|
ModActions.registerAction(actionEntry);
|
||||||
|
ModActions.registerActionPerformer(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean action(Action act, Creature performer, Item source, Item target, short action, float counter)
|
||||||
|
{
|
||||||
|
try{
|
||||||
|
if(performer instanceof Player){
|
||||||
|
if(source.getTemplateId() == CrystalPermaFrost.templateId) {
|
||||||
|
if(source.getQualityLevel() < 30) {
|
||||||
|
performer.getCommunicator().sendNormalServerMessage("The weakened crystal uses up the last of its power and shatters!");
|
||||||
|
Items.destroyItem(source.getWurmId());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
source.setQualityLevel(source.getQualityLevel() - 10);
|
||||||
|
performer.getCommunicator().sendNormalServerMessage("The crystal buzzes with power, working its magic. It feels weaker afterwards.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(source.getTemplateId() == WandPermaFrost.templateId) {
|
||||||
|
if(source.getAuxData() <= 0) {
|
||||||
|
performer.getCommunicator().sendNormalServerMessage("The wand isn't powerful enough to lower the temperature of the " + target.getName() + ".");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
source.setAuxData((byte)(source.getAuxData() - (byte)1));
|
||||||
|
performer.getCommunicator().sendNormalServerMessage("The wand glows with power, draining some charge.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
target.setTemperature((short)0);
|
||||||
|
performer.getCommunicator().sendNormalServerMessage("You freeze the " + target.getName() + ", dropping its temperature to zero.");
|
||||||
|
Server.getInstance().broadCastAction(performer.getName() + " freezes the " + target.getName() + " with magic.", performer, 5);
|
||||||
|
return true;
|
||||||
|
}else{
|
||||||
|
logger.info("Somehow a non-player used permafrost");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short getActionId() {
|
||||||
|
return actionId;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package mod.sin.actions.items.magicitems;
|
||||||
|
|
||||||
|
import org.gotti.wurmunlimited.modsupport.actions.ActionPerformer;
|
||||||
|
|
||||||
|
public class WaterToSnowActionPerformer implements ActionPerformer {
|
||||||
|
@Override
|
||||||
|
public short getActionId() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -49,8 +49,8 @@ public class ArcaniteNecklace implements ItemTypes, MiscConstants {
|
|||||||
logger.info("initCreationEntry()");
|
logger.info("initCreationEntry()");
|
||||||
if(templateId > 0){
|
if(templateId > 0){
|
||||||
logger.info("Creating "+name+" creation entry, ID = "+templateId);
|
logger.info("Creating "+name+" creation entry, ID = "+templateId);
|
||||||
CreationEntryCreator.createSimpleEntry(SkillList.SMITHING_GOLDSMITHING, ItemList.anvilSmall, ItemList.seryllBar,
|
//CreationEntryCreator.createSimpleEntry(SkillList.SMITHING_GOLDSMITHING, ItemList.anvilSmall, ItemList.seryllBar,
|
||||||
templateId, false, true, 0.0f, false, false, CreationCategories.JEWELRY);
|
//templateId, false, true, 0.0f, false, false, CreationCategories.JEWELRY);
|
||||||
//final AdvancedCreationEntry entry = CreationEntryCreator.createAdvancedEntry(SkillList.SMITHING_WEAPON_HEADS,
|
//final AdvancedCreationEntry entry = CreationEntryCreator.createAdvancedEntry(SkillList.SMITHING_WEAPON_HEADS,
|
||||||
// ItemList.ironBand, ItemList.shaft, templateId, false, false, 0f, true, false, CreationCategories.TOOLS);
|
// ItemList.ironBand, ItemList.shaft, templateId, false, false, 0f, true, false, CreationCategories.TOOLS);
|
||||||
//entry.addRequirement(new CreationRequirement(1, ItemList.woodenHandleSword, 2, true));
|
//entry.addRequirement(new CreationRequirement(1, ItemList.woodenHandleSword, 2, true));
|
||||||
|
|||||||
@@ -53,8 +53,8 @@ public class ArcaniteNecklaceFocus implements ItemTypes, MiscConstants {
|
|||||||
logger.info("Creating "+name+" creation entry, ID = "+templateId);
|
logger.info("Creating "+name+" creation entry, ID = "+templateId);
|
||||||
//CreationEntryCreator.createSimpleEntry(SkillList.SMITHING_GOLDSMITHING, ArcaniteNecklace.templateId, ItemList.rubyStar,
|
//CreationEntryCreator.createSimpleEntry(SkillList.SMITHING_GOLDSMITHING, ArcaniteNecklace.templateId, ItemList.rubyStar,
|
||||||
//templateId, true, true, 0.0f, false, false, CreationCategories.ARMOUR);
|
//templateId, true, true, 0.0f, false, false, CreationCategories.ARMOUR);
|
||||||
CreationEntryCreator.createAdvancedEntry(SkillList.SMITHING_GOLDSMITHING, ArcaniteNecklace.templateId, ItemList.rubyStar,
|
//CreationEntryCreator.createAdvancedEntry(SkillList.SMITHING_GOLDSMITHING, ArcaniteNecklace.templateId, ItemList.rubyStar,
|
||||||
templateId, true, false, 0.0f, true, false, CreationCategories.JEWELRY);
|
//templateId, true, false, 0.0f, true, false, CreationCategories.JEWELRY);
|
||||||
//final AdvancedCreationEntry entry = CreationEntryCreator.createAdvancedEntry(SkillList.SMITHING_WEAPON_HEADS,
|
//final AdvancedCreationEntry entry = CreationEntryCreator.createAdvancedEntry(SkillList.SMITHING_WEAPON_HEADS,
|
||||||
// ItemList.ironBand, ItemList.shaft, templateId, false, false, 0f, true, false, CreationCategories.TOOLS);
|
// ItemList.ironBand, ItemList.shaft, templateId, false, false, 0f, true, false, CreationCategories.TOOLS);
|
||||||
//entry.addRequirement(new CreationRequirement(1, ItemList.woodenHandleSword, 2, true));
|
//entry.addRequirement(new CreationRequirement(1, ItemList.woodenHandleSword, 2, true));
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ public class Gremlin implements ModCreature, CreatureTypes {
|
|||||||
builder.denName("gremlin hole");
|
builder.denName("gremlin hole");
|
||||||
builder.hasHands(true);
|
builder.hasHands(true);
|
||||||
builder.maxPercentOfCreatures(.06f);
|
builder.maxPercentOfCreatures(.06f);
|
||||||
|
builder.maxGroupAttackSize(100);
|
||||||
|
|
||||||
templateId = builder.getTemplateId();
|
templateId = builder.getTemplateId();
|
||||||
return builder;
|
return builder;
|
||||||
@@ -67,10 +68,9 @@ public class Gremlin implements ModCreature, CreatureTypes {
|
|||||||
}
|
}
|
||||||
// enable encounters when ready for event
|
// enable encounters when ready for event
|
||||||
|
|
||||||
|
new EncounterBuilder(Tiles.Tile.TILE_TREE.id)
|
||||||
/** new EncounterBuilder(Tiles.Tile.TILE_TREE.id)
|
|
||||||
.addCreatures(templateId, 5)
|
.addCreatures(templateId, 5)
|
||||||
.build(1);**/
|
.build(5);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package mod.sin.items;
|
|||||||
import com.wurmonline.server.MiscConstants;
|
import com.wurmonline.server.MiscConstants;
|
||||||
import com.wurmonline.server.items.*;
|
import com.wurmonline.server.items.*;
|
||||||
import com.wurmonline.server.skills.SkillList;
|
import com.wurmonline.server.skills.SkillList;
|
||||||
|
import mod.sin.wyvern.bonusoverhaul.MagicItems;
|
||||||
import org.gotti.wurmunlimited.modsupport.ItemTemplateBuilder;
|
import org.gotti.wurmunlimited.modsupport.ItemTemplateBuilder;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -39,6 +40,7 @@ public class CrystalPermaFrost implements MiscConstants, ItemTypes {
|
|||||||
|
|
||||||
ItemTemplate template = itemBuilder.build();
|
ItemTemplate template = itemBuilder.build();
|
||||||
templateId = template.getTemplateId();
|
templateId = template.getTemplateId();
|
||||||
|
MagicItems.registerMagicItem(templateId, false);
|
||||||
logger.info(name + " TemplateID: " + templateId);
|
logger.info(name + " TemplateID: " + templateId);
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,11 +3,16 @@ package mod.sin.items;
|
|||||||
import com.wurmonline.server.MiscConstants;
|
import com.wurmonline.server.MiscConstants;
|
||||||
import com.wurmonline.server.items.*;
|
import com.wurmonline.server.items.*;
|
||||||
import com.wurmonline.server.skills.SkillList;
|
import com.wurmonline.server.skills.SkillList;
|
||||||
|
import mod.sin.actions.items.magicitems.PermafrostTemperatureActionPerformer;
|
||||||
|
import mod.sin.wyvern.bonusoverhaul.ItemBonusOverhaul;
|
||||||
|
import mod.sin.wyvern.bonusoverhaul.MagicItemWrapper;
|
||||||
|
import mod.sin.wyvern.bonusoverhaul.MagicItems;
|
||||||
import mod.sin.wyvern.schematics.SchematicWrapper;
|
import mod.sin.wyvern.schematics.SchematicWrapper;
|
||||||
import mod.sin.wyvern.schematics.Schematics;
|
import mod.sin.wyvern.schematics.Schematics;
|
||||||
import org.gotti.wurmunlimited.modsupport.ItemTemplateBuilder;
|
import org.gotti.wurmunlimited.modsupport.ItemTemplateBuilder;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
public class WandPermaFrost implements MiscConstants {
|
public class WandPermaFrost implements MiscConstants {
|
||||||
@@ -41,6 +46,7 @@ public class WandPermaFrost implements MiscConstants {
|
|||||||
ItemTemplate template = itemBuilder.build();
|
ItemTemplate template = itemBuilder.build();
|
||||||
templateId = template.getTemplateId();
|
templateId = template.getTemplateId();
|
||||||
Schematics.schematics.add(new SchematicWrapper(templateId, 0, false, 0, 0));
|
Schematics.schematics.add(new SchematicWrapper(templateId, 0, false, 0, 0));
|
||||||
|
MagicItemWrapper wrapper = MagicItems.registerMagicItem(templateId, true);
|
||||||
logger.info(name + " TemplateID: " + templateId);
|
logger.info(name + " TemplateID: " + templateId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,12 @@
|
|||||||
package mod.sin.wyvern;
|
package mod.sin.wyvern;
|
||||||
|
|
||||||
|
import com.wurmonline.server.MiscConstants;
|
||||||
|
import com.wurmonline.server.creatures.Creature;
|
||||||
import com.wurmonline.server.players.Achievement;
|
import com.wurmonline.server.players.Achievement;
|
||||||
import com.wurmonline.server.players.AchievementTemplate;
|
import com.wurmonline.server.players.AchievementTemplate;
|
||||||
|
import com.wurmonline.server.players.Achievements;
|
||||||
|
import com.wurmonline.server.players.Titles;
|
||||||
|
import mod.sin.wyvern.mastercraft.Mastercraft;
|
||||||
import org.gotti.wurmunlimited.modloader.ReflectionUtil;
|
import org.gotti.wurmunlimited.modloader.ReflectionUtil;
|
||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
@@ -14,6 +19,7 @@ public class AchievementChanges {
|
|||||||
private static Logger logger = Logger.getLogger(AchievementChanges.class.getName());
|
private static Logger logger = Logger.getLogger(AchievementChanges.class.getName());
|
||||||
public static HashMap<Integer, AchievementTemplate> goodAchievements = new HashMap<>();
|
public static HashMap<Integer, AchievementTemplate> goodAchievements = new HashMap<>();
|
||||||
public static ArrayList<Integer> blacklist = new ArrayList<>();
|
public static ArrayList<Integer> blacklist = new ArrayList<>();
|
||||||
|
public static AchievementTemplate gremlinSlayer;
|
||||||
|
|
||||||
protected static int getNumber(String name){
|
protected static int getNumber(String name){
|
||||||
AchievementTemplate temp = Achievement.getTemplate(name);
|
AchievementTemplate temp = Achievement.getTemplate(name);
|
||||||
@@ -304,8 +310,31 @@ public class AchievementChanges {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Titles.Title getAwardedTitle(Achievement a) {
|
||||||
|
int count = a.getCounter();
|
||||||
|
if(a.getTemplate() == gremlinSlayer) {
|
||||||
|
if(count >= 100) {
|
||||||
|
return Titles.Title.getTitle(Mastercraft.GremlinSlayer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void triggerAchievement(Creature player, AchievementTemplate tpl) {
|
||||||
|
Achievements.triggerAchievement(player.getWurmId(), tpl.getNumber());
|
||||||
|
Achievements achievments = Achievements.getAchievementObject(player.getWurmId());
|
||||||
|
Achievement achievment = achievments.getAchievement(tpl.getNumber());
|
||||||
|
if (achievment != null) {
|
||||||
|
Titles.Title title = getAwardedTitle(achievment);
|
||||||
|
if (title != null) {
|
||||||
|
player.addTitle(title);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void onServerStarted(){
|
public static void onServerStarted(){
|
||||||
try {
|
try {
|
||||||
|
gremlinSlayer = addAchievement(4500, "A Gnoblin", "You slew a dastardly gremlin", "Slay a gremlin", false, 1, MiscConstants.A_TYPE_SILVER, false, false);
|
||||||
ConcurrentHashMap<Integer, AchievementTemplate> templates = ReflectionUtil.getPrivateField(Achievement.class, ReflectionUtil.getField(Achievement.class, "templates"));
|
ConcurrentHashMap<Integer, AchievementTemplate> templates = ReflectionUtil.getPrivateField(Achievement.class, ReflectionUtil.getField(Achievement.class, "templates"));
|
||||||
generateBlacklist();
|
generateBlacklist();
|
||||||
for(int i : templates.keySet()){
|
for(int i : templates.keySet()){
|
||||||
|
|||||||
@@ -108,6 +108,7 @@ public class Bounty {
|
|||||||
//+ "mod.sin.wyvern.bounty.MethodsBounty.checkBounty(player, this);"
|
//+ "mod.sin.wyvern.bounty.MethodsBounty.checkBounty(player, this);"
|
||||||
+ PlayerBounty.class.getName()+".checkPlayerBounty(player, this);"
|
+ PlayerBounty.class.getName()+".checkPlayerBounty(player, this);"
|
||||||
+ "$_ = $proceed($$);";
|
+ "$_ = $proceed($$);";
|
||||||
|
Util.setReason("Inserting playerloot check");
|
||||||
Util.instrumentDeclared(thisClass, ctCreature, "modifyFightSkill", "checkCoinAward", replace);
|
Util.instrumentDeclared(thisClass, ctCreature, "modifyFightSkill", "checkCoinAward", replace);
|
||||||
/*ctCreature.getDeclaredMethod("modifyFightSkill").instrument(new ExprEditor(){
|
/*ctCreature.getDeclaredMethod("modifyFightSkill").instrument(new ExprEditor(){
|
||||||
public void edit(MethodCall m) throws CannotCompileException {
|
public void edit(MethodCall m) throws CannotCompileException {
|
||||||
@@ -122,6 +123,7 @@ public class Bounty {
|
|||||||
replace = "$_ = $proceed($$);"
|
replace = "$_ = $proceed($$);"
|
||||||
//+ "mod.sin.wyvern.bounty.MethodsBounty.checkLootTable(this, corpse);";
|
//+ "mod.sin.wyvern.bounty.MethodsBounty.checkLootTable(this, corpse);";
|
||||||
+ LootBounty.class.getName()+".checkLootTable(this, corpse);";
|
+ LootBounty.class.getName()+".checkLootTable(this, corpse);";
|
||||||
|
Util.setReason("Inserting bodyloot check");
|
||||||
Util.instrumentDeclared(thisClass, ctCreature, "die", "setRotation", replace);
|
Util.instrumentDeclared(thisClass, ctCreature, "die", "setRotation", replace);
|
||||||
/*ctCreature.getDeclaredMethod("die").instrument(new ExprEditor(){
|
/*ctCreature.getDeclaredMethod("die").instrument(new ExprEditor(){
|
||||||
public void edit(MethodCall m) throws CannotCompileException {
|
public void edit(MethodCall m) throws CannotCompileException {
|
||||||
|
|||||||
@@ -6,14 +6,12 @@ import java.lang.reflect.Method;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import com.wurmonline.server.Servers;
|
import com.wurmonline.server.Servers;
|
||||||
import com.wurmonline.server.behaviours.Action;
|
import mod.sin.actions.items.magicitems.MagicItemMenuProvider;
|
||||||
import com.wurmonline.server.combat.ArmourTemplate;
|
import mod.sin.actions.items.magicitems.MagicItemRechargeAction;
|
||||||
import mod.sin.items.schematicitems.SchematicItems;
|
import mod.sin.items.schematicitems.SchematicItems;
|
||||||
import mod.sin.lib.Util;
|
|
||||||
import mod.sin.items.caches.*;
|
import mod.sin.items.caches.*;
|
||||||
import org.gotti.wurmunlimited.modloader.ReflectionUtil;
|
import org.gotti.wurmunlimited.modloader.ReflectionUtil;
|
||||||
import org.gotti.wurmunlimited.modloader.classhooks.HookManager;
|
import org.gotti.wurmunlimited.modloader.classhooks.HookManager;
|
||||||
@@ -219,8 +217,9 @@ public class ItemMod {
|
|||||||
ModActions.registerAction(new PipingKitAction());
|
ModActions.registerAction(new PipingKitAction());
|
||||||
ModActions.registerAction(new StableContractAction());
|
ModActions.registerAction(new StableContractAction());
|
||||||
ModActions.registerAction(new WoodEssenceAction());
|
ModActions.registerAction(new WoodEssenceAction());
|
||||||
ModActions.registerAction(new ItemBonusRechargeAction());
|
ModActions.registerAction(new MagicItemRechargeAction());
|
||||||
ModActions.registerAction(new ReadSchematicAction());
|
ModActions.registerAction(new ReadSchematicAction());
|
||||||
|
ModActions.registerBehaviourProvider(new MagicItemMenuProvider());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void initCreationEntries(){
|
public static void initCreationEntries(){
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ import javassist.expr.FieldAccess;
|
|||||||
import javassist.expr.MethodCall;
|
import javassist.expr.MethodCall;
|
||||||
import mod.sin.items.ChaosCrystal;
|
import mod.sin.items.ChaosCrystal;
|
||||||
import mod.sin.items.EnchantersCrystal;
|
import mod.sin.items.EnchantersCrystal;
|
||||||
|
import mod.sin.items.EternalOrb;
|
||||||
import mod.sin.items.SealedMap;
|
import mod.sin.items.SealedMap;
|
||||||
import mod.sin.kingdomoffices.ItemCreator;
|
import mod.sin.kingdomoffices.ItemCreator;
|
||||||
import mod.sin.lib.Util;
|
import mod.sin.lib.Util;
|
||||||
@@ -293,6 +294,7 @@ public class MiscChanges {
|
|||||||
logger.info("Adding enchant crystals to trader restock list");
|
logger.info("Adding enchant crystals to trader restock list");
|
||||||
toRestock.add(new TraderItem(ChaosCrystal.templateId, 99, true, 10, 31, 10));
|
toRestock.add(new TraderItem(ChaosCrystal.templateId, 99, true, 10, 31, 10));
|
||||||
logger.info("Adding chaos crystals to trader restock list");
|
logger.info("Adding chaos crystals to trader restock list");
|
||||||
|
toRestock.add(new TraderItem(EternalOrb.templateId, 99, false, 0, 0, 3));
|
||||||
|
|
||||||
|
|
||||||
for (TraderItem tItem : toRestock) {
|
for (TraderItem tItem : toRestock) {
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ implements WurmServerMod, Configurable, PreInitable, Initable, ItemTemplatesCrea
|
|||||||
private static Logger logger = Logger.getLogger(WyvernMods.class.getName());
|
private static Logger logger = Logger.getLogger(WyvernMods.class.getName());
|
||||||
public static boolean espCounter = false;
|
public static boolean espCounter = false;
|
||||||
public static boolean enableDepots = false;
|
public static boolean enableDepots = false;
|
||||||
|
public static boolean xmas2018 = true;
|
||||||
|
|
||||||
boolean bDebug = false;
|
boolean bDebug = false;
|
||||||
|
|
||||||
@@ -226,6 +227,7 @@ implements WurmServerMod, Configurable, PreInitable, Initable, ItemTemplatesCrea
|
|||||||
ModCreatures.addCreature(new IceCat());
|
ModCreatures.addCreature(new IceCat());
|
||||||
ModCreatures.addCreature(new FireGiant());
|
ModCreatures.addCreature(new FireGiant());
|
||||||
ModCreatures.addCreature(new GuardianMagranon());
|
ModCreatures.addCreature(new GuardianMagranon());
|
||||||
|
ModCreatures.addCreature(new Gremlin());
|
||||||
|
|
||||||
// Bosses:
|
// Bosses:
|
||||||
logger.info("Registering Custom Boss creatures.");
|
logger.info("Registering Custom Boss creatures.");
|
||||||
|
|||||||
@@ -692,6 +692,9 @@ public class MethodsBestiary {
|
|||||||
}else if(templateId == FireGiant.templateId){
|
}else if(templateId == FireGiant.templateId){
|
||||||
sendAddEffect(comm, creatureId, (byte) 1);
|
sendAddEffect(comm, creatureId, (byte) 1);
|
||||||
}
|
}
|
||||||
|
else if(templateId == Gremlin.templateId) {
|
||||||
|
sendRepaintEffect(comm, creatureId, (byte)0, (byte)200, (byte)0, (byte)255);
|
||||||
|
}
|
||||||
else if(templateId == CreatureTemplateFactory.UNICORN_CID) {
|
else if(templateId == CreatureTemplateFactory.UNICORN_CID) {
|
||||||
Random random = new Random();
|
Random random = new Random();
|
||||||
byte r = (byte)random.nextInt(257);
|
byte r = (byte)random.nextInt(257);
|
||||||
|
|||||||
@@ -105,7 +105,7 @@ public class ItemBonusOverhaul {
|
|||||||
wrapper = matchTemplateidToWrapper(item.getTemplateId());
|
wrapper = matchTemplateidToWrapper(item.getTemplateId());
|
||||||
if(wrapper != null) {
|
if(wrapper != null) {
|
||||||
if(wrapper.getEffect() == SpellEffectsEnum.ITEM_RING_SKILLGAIN && (!wrapper.isSkillRestricted() || wrapper.getRestrictedSkill() == skillid)) {
|
if(wrapper.getEffect() == SpellEffectsEnum.ITEM_RING_SKILLGAIN && (!wrapper.isSkillRestricted() || wrapper.getRestrictedSkill() == skillid)) {
|
||||||
bonus += wrapper.getValue() * item.getCurrentQualityLevel() * .01f;
|
bonus += wrapper.getValue() * item.getCurrentQualityLevel() * SKILLGAIN_BONUS_SCALE;
|
||||||
if(!wrapper.isStackable()) {
|
if(!wrapper.isStackable()) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,9 @@ public class ItemBonusWrapper {
|
|||||||
this.stackable = stackable;
|
this.stackable = stackable;
|
||||||
this.value = value;
|
this.value = value;
|
||||||
this.timed = timed;
|
this.timed = timed;
|
||||||
|
if(timed) {
|
||||||
|
MagicItems.registerMagicItem(templateid, true);
|
||||||
|
}
|
||||||
this.skillRestricted = false;
|
this.skillRestricted = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package mod.sin.wyvern.bonusoverhaul;
|
||||||
|
|
||||||
|
import com.wurmonline.server.behaviours.ActionEntry;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class MagicItemWrapper {
|
||||||
|
public int itemId;
|
||||||
|
public boolean rechargeable;
|
||||||
|
|
||||||
|
public MagicItemWrapper(int itemId, boolean rechargeable) {
|
||||||
|
this.itemId = itemId;
|
||||||
|
this.rechargeable = rechargeable;
|
||||||
|
}
|
||||||
|
}
|
||||||
39
src/main/java/mod/sin/wyvern/bonusoverhaul/MagicItems.java
Normal file
39
src/main/java/mod/sin/wyvern/bonusoverhaul/MagicItems.java
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
package mod.sin.wyvern.bonusoverhaul;
|
||||||
|
|
||||||
|
import com.wurmonline.server.behaviours.ActionEntry;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class MagicItems {
|
||||||
|
private static List<MagicItemWrapper> wrappers = new ArrayList<>();
|
||||||
|
|
||||||
|
|
||||||
|
public static MagicItemWrapper registerMagicItem(int itemId, boolean rechargeable) {
|
||||||
|
MagicItemWrapper wrapper = new MagicItemWrapper(itemId, rechargeable);
|
||||||
|
wrappers.add(wrapper);
|
||||||
|
return wrapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<MagicItemWrapper> getMagicItems() {
|
||||||
|
return wrappers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isMagicItem(int itemId) {
|
||||||
|
for(MagicItemWrapper wrapper : wrappers) {
|
||||||
|
if(wrapper.itemId == itemId) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isRechargeable(int itemId) {
|
||||||
|
for(MagicItemWrapper wrapper : wrappers) {
|
||||||
|
if(wrapper.itemId == itemId && wrapper.rechargeable) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -12,6 +12,7 @@ import com.wurmonline.server.creatures.CreatureTemplate;
|
|||||||
import com.wurmonline.server.creatures.CreatureTemplateFactory;
|
import com.wurmonline.server.creatures.CreatureTemplateFactory;
|
||||||
import com.wurmonline.server.creatures.Creatures;
|
import com.wurmonline.server.creatures.Creatures;
|
||||||
import com.wurmonline.server.items.*;
|
import com.wurmonline.server.items.*;
|
||||||
|
import com.wurmonline.server.players.Player;
|
||||||
import com.wurmonline.server.villages.Village;
|
import com.wurmonline.server.villages.Village;
|
||||||
import com.wurmonline.server.villages.Villages;
|
import com.wurmonline.server.villages.Villages;
|
||||||
import mod.piddagoras.duskombat.DamageEngine;
|
import mod.piddagoras.duskombat.DamageEngine;
|
||||||
@@ -21,11 +22,11 @@ import mod.sin.creatures.SpectralDrake;
|
|||||||
import mod.sin.items.AffinityOrb;
|
import mod.sin.items.AffinityOrb;
|
||||||
import mod.sin.items.FriyanTablet;
|
import mod.sin.items.FriyanTablet;
|
||||||
import mod.sin.items.HolidaySpirit;
|
import mod.sin.items.HolidaySpirit;
|
||||||
|
import mod.sin.items.WandPermaFrost;
|
||||||
import mod.sin.items.caches.*;
|
import mod.sin.items.caches.*;
|
||||||
import mod.sin.wyvern.Bounty;
|
import mod.sin.wyvern.*;
|
||||||
import mod.sin.wyvern.MiscChanges;
|
import mod.sin.wyvern.schematics.SchematicWrapper;
|
||||||
import mod.sin.wyvern.Arena;
|
import mod.sin.wyvern.schematics.Schematics;
|
||||||
import mod.sin.wyvern.Titans;
|
|
||||||
import mod.sin.wyvern.util.ItemUtil;
|
import mod.sin.wyvern.util.ItemUtil;
|
||||||
|
|
||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
@@ -315,6 +316,7 @@ public class LootBounty {
|
|||||||
|
|
||||||
public static void checkLootTable(Creature mob, Item corpse){
|
public static void checkLootTable(Creature mob, Item corpse){
|
||||||
if(mob.isReborn() || mob.isBred()){
|
if(mob.isReborn() || mob.isBred()){
|
||||||
|
logger.info("Mob " + mob.getName() + " was reborn or bred.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
double cretStr = Bounty.getCreatureStrength(mob);
|
double cretStr = Bounty.getCreatureStrength(mob);
|
||||||
@@ -390,7 +392,9 @@ public class LootBounty {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(mob.getTemplateId() == Gremlin.templateId) {
|
// Holiday event
|
||||||
|
if(mob.getTemplate().getTemplateId() == Gremlin.templateId && WyvernMods.xmas2018) {
|
||||||
|
logger.info("Gremlin died");
|
||||||
if(random.nextInt(100) < 20) {
|
if(random.nextInt(100) < 20) {
|
||||||
try {
|
try {
|
||||||
Item holidaySpirit = ItemFactory.createItem(HolidaySpirit.templateId, 20+(60*random.nextFloat()), "");
|
Item holidaySpirit = ItemFactory.createItem(HolidaySpirit.templateId, 20+(60*random.nextFloat()), "");
|
||||||
@@ -399,8 +403,19 @@ public class LootBounty {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(random.nextInt(100) < 1) {
|
||||||
|
try {
|
||||||
|
SchematicWrapper wrapper = Schematics.getSchematicFor(WandPermaFrost.templateId);
|
||||||
|
Item wandSchematic = ItemFactory.createItem(wrapper != null ? wrapper.schematicTemplateId : ItemList.charcoal, 50f, (byte)1, "Santa Claus");
|
||||||
|
corpse.insertItem(wandSchematic);
|
||||||
|
} catch (FailedException | NoSuchTemplateException | NullPointerException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
logger.info("ERROR: Schematic roll successful but failed to create.");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(mob.isUnique()){
|
if(mob.isUnique()){
|
||||||
|
logger.info("Mob " + mob.getName() + " was a unique.");
|
||||||
// Spawn random addy/glimmer veins throughout the world
|
// Spawn random addy/glimmer veins throughout the world
|
||||||
blessWorldWithMoonVeins(mob);
|
blessWorldWithMoonVeins(mob);
|
||||||
// Spawn 5-10 friyan tablets throughout the world.
|
// Spawn 5-10 friyan tablets throughout the world.
|
||||||
@@ -425,6 +440,9 @@ public class LootBounty {
|
|||||||
}*/
|
}*/
|
||||||
sendLootHelp = true;
|
sendLootHelp = true;
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
logger.info("Mob " + mob.getName() + " was not a unique");
|
||||||
|
}
|
||||||
if(mob.getStatus().isChampion()){
|
if(mob.getStatus().isChampion()){
|
||||||
// Champion mob loot
|
// Champion mob loot
|
||||||
handleChampionLoot(corpse);
|
handleChampionLoot(corpse);
|
||||||
|
|||||||
@@ -8,20 +8,19 @@ import java.util.Random;
|
|||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import com.wurmonline.server.FailedException;
|
import com.wurmonline.server.FailedException;
|
||||||
|
import com.wurmonline.server.Mailer;
|
||||||
import com.wurmonline.server.Server;
|
import com.wurmonline.server.Server;
|
||||||
import com.wurmonline.server.Servers;
|
import com.wurmonline.server.Servers;
|
||||||
import com.wurmonline.server.creatures.Creature;
|
import com.wurmonline.server.creatures.Creature;
|
||||||
import com.wurmonline.server.economy.Economy;
|
import com.wurmonline.server.economy.Economy;
|
||||||
import com.wurmonline.server.items.Item;
|
import com.wurmonline.server.items.*;
|
||||||
import com.wurmonline.server.items.ItemFactory;
|
|
||||||
import com.wurmonline.server.items.ItemTemplate;
|
|
||||||
import com.wurmonline.server.items.NoSuchTemplateException;
|
|
||||||
import com.wurmonline.server.players.Player;
|
import com.wurmonline.server.players.Player;
|
||||||
import com.wurmonline.server.players.Titles.Title;
|
import com.wurmonline.server.players.Titles.Title;
|
||||||
import com.wurmonline.server.skills.NoSuchSkillException;
|
import com.wurmonline.server.skills.NoSuchSkillException;
|
||||||
import com.wurmonline.server.skills.SkillList;
|
import com.wurmonline.server.skills.SkillList;
|
||||||
import mod.piddagoras.duskombat.DamageEngine;
|
import mod.piddagoras.duskombat.DamageEngine;
|
||||||
import mod.sin.armour.SpectralHide;
|
import mod.sin.armour.SpectralHide;
|
||||||
|
import mod.sin.creatures.Gremlin;
|
||||||
import mod.sin.creatures.Reaper;
|
import mod.sin.creatures.Reaper;
|
||||||
import mod.sin.creatures.SpectralDrake;
|
import mod.sin.creatures.SpectralDrake;
|
||||||
import mod.sin.items.AffinityOrb;
|
import mod.sin.items.AffinityOrb;
|
||||||
@@ -241,6 +240,10 @@ public class PlayerBounty {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
logger.info(player.getName()+" killed "+creature.getName());
|
logger.info(player.getName()+" killed "+creature.getName());
|
||||||
|
if(creature.getTemplate().getTemplateId() == Gremlin.templateId && WyvernMods.xmas2018) {
|
||||||
|
AchievementChanges.triggerAchievement(player, AchievementChanges.gremlinSlayer);
|
||||||
|
logger.info("Ticking gremlinslayer achievement for " + player.getName());
|
||||||
|
}
|
||||||
checkPlayerReward(player, creature);
|
checkPlayerReward(player, creature);
|
||||||
} catch (IllegalArgumentException | ClassCastException e) {
|
} catch (IllegalArgumentException | ClassCastException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import java.util.logging.Logger;
|
|||||||
|
|
||||||
public class Mastercraft {
|
public class Mastercraft {
|
||||||
private static Logger logger = Logger.getLogger(Mastercraft.class.getName());
|
private static Logger logger = Logger.getLogger(Mastercraft.class.getName());
|
||||||
|
public static int GremlinSlayer = 704;
|
||||||
public static double getNewDifficulty(Skill skill, double diff, Item item){
|
public static double getNewDifficulty(Skill skill, double diff, Item item){
|
||||||
if(skill.affinity > 0){
|
if(skill.affinity > 0){
|
||||||
diff -= skill.affinity;
|
diff -= skill.affinity;
|
||||||
@@ -99,6 +100,7 @@ public class Mastercraft {
|
|||||||
ExtendTitleEnum.getSingletonInstance().addExtendEntry("Spectral_Slayer", 701, "Spectral Warrior", "Spectral Warrior", -1, "NORMAL");
|
ExtendTitleEnum.getSingletonInstance().addExtendEntry("Spectral_Slayer", 701, "Spectral Warrior", "Spectral Warrior", -1, "NORMAL");
|
||||||
ExtendTitleEnum.getSingletonInstance().addExtendEntry("Holdstrong_Architect", 702, "Holdstrong Architect", "Holdstrong Architect", -1, "NORMAL");
|
ExtendTitleEnum.getSingletonInstance().addExtendEntry("Holdstrong_Architect", 702, "Holdstrong Architect", "Holdstrong Architect", -1, "NORMAL");
|
||||||
ExtendTitleEnum.getSingletonInstance().addExtendEntry("Stronghold_Architect", 703, "Stronghold Architect", "Stronghold Architect", -1, "NORMAL");
|
ExtendTitleEnum.getSingletonInstance().addExtendEntry("Stronghold_Architect", 703, "Stronghold Architect", "Stronghold Architect", -1, "NORMAL");
|
||||||
|
ExtendTitleEnum.getSingletonInstance().addExtendEntry("Gremlin_Slayer", GremlinSlayer, "Gremlin Slayer", "Gremlin Slayer", -1, "NORMAL");
|
||||||
|
|
||||||
// Donation titles
|
// Donation titles
|
||||||
ExtendTitleEnum.getSingletonInstance().addExtendEntry("Donator", 800, "Donator", "Donator", -1, "NORMAL");
|
ExtendTitleEnum.getSingletonInstance().addExtendEntry("Donator", 800, "Donator", "Donator", -1, "NORMAL");
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package mod.sin.wyvern.schematics;
|
package mod.sin.wyvern.schematics;
|
||||||
|
|
||||||
|
import com.wurmonline.server.Items;
|
||||||
import com.wurmonline.server.creatures.Creature;
|
import com.wurmonline.server.creatures.Creature;
|
||||||
import com.wurmonline.server.items.CreationEntry;
|
import com.wurmonline.server.items.CreationEntry;
|
||||||
import com.wurmonline.server.items.Item;
|
import com.wurmonline.server.items.Item;
|
||||||
@@ -63,7 +64,8 @@ public class Schematics {
|
|||||||
public static boolean checkSchematic(Creature performer, int product) {
|
public static boolean checkSchematic(Creature performer, int product) {
|
||||||
if(requiresASchematic(product)) {
|
if(requiresASchematic(product)) {
|
||||||
if(!playerKnowsSchematic(performer, product)) {
|
if(!playerKnowsSchematic(performer, product)) {
|
||||||
performer.getCommunicator().sendNormalServerMessage("You don't know how to make that. Try finding a schematic for the item.");
|
performer.getCommunicator().sendNormalServerMessage("You don't know how to make " + ItemTemplateFactory.getInstance().getTemplateName(product) +
|
||||||
|
". Try finding a schematic for the item.");
|
||||||
logger.info("Player " + performer.getName() + " does not have schematic for " + ItemTemplateFactory.getInstance().getTemplateName(product));
|
logger.info("Player " + performer.getName() + " does not have schematic for " + ItemTemplateFactory.getInstance().getTemplateName(product));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user