Changed trader restocking to use a new object, added 20% boat speed to vynora, started on wood essence
This commit is contained in:
@@ -3,9 +3,11 @@ package mod.sin.wyvern;
|
||||
import com.wurmonline.server.*;
|
||||
import com.wurmonline.server.bodys.Wound;
|
||||
import com.wurmonline.server.creatures.Creature;
|
||||
import com.wurmonline.server.items.Item;
|
||||
import com.wurmonline.server.items.ItemTemplate;
|
||||
import com.wurmonline.server.items.SimpleCreationEntry;
|
||||
import com.wurmonline.server.creatures.CreatureTemplateIds;
|
||||
import com.wurmonline.server.creatures.Creatures;
|
||||
import com.wurmonline.server.deities.Deities;
|
||||
import com.wurmonline.server.economy.Economy;
|
||||
import com.wurmonline.server.items.*;
|
||||
import com.wurmonline.server.players.Player;
|
||||
import com.wurmonline.server.players.PlayerInfo;
|
||||
import com.wurmonline.server.players.PlayerInfoFactory;
|
||||
@@ -21,18 +23,21 @@ import javassist.bytecode.Descriptor;
|
||||
import javassist.expr.ExprEditor;
|
||||
import javassist.expr.FieldAccess;
|
||||
import javassist.expr.MethodCall;
|
||||
import mod.sin.items.ChaosCrystal;
|
||||
import mod.sin.items.EnchantersCrystal;
|
||||
import mod.sin.items.SealedMap;
|
||||
import mod.sin.kingdomoffices.ItemCreator;
|
||||
import mod.sin.lib.Util;
|
||||
import mod.sin.wyvern.util.TraderItem;
|
||||
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;
|
||||
import java.sql.SQLException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class MiscChanges {
|
||||
@@ -153,6 +158,18 @@ public class MiscChanges {
|
||||
return food.getFoodComplexity()*mult;
|
||||
}
|
||||
|
||||
public static float boatSpeedBonus(Creature captain) {
|
||||
if(captain.getDeity().getNumber() != Deities.DEITY_VYNORA) {
|
||||
return 1;
|
||||
}
|
||||
else {
|
||||
if(captain.getFaith() >= 60.0) {
|
||||
return (float)1.2;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
public static long getBedBonus(long secs, long bed){
|
||||
Optional<Item> beds = Items.getItemOptional(bed);
|
||||
if(beds.isPresent()) {
|
||||
@@ -182,6 +199,51 @@ public class MiscChanges {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void restockTrader(Creature trader) {
|
||||
try {
|
||||
if(trader.getTemplate().getTemplateId() != CreatureTemplateIds.SALESMAN_CID || Economy.getEconomy().getShop(trader).isPersonal()) {
|
||||
return;
|
||||
}
|
||||
int count = 0;
|
||||
Item item;
|
||||
// Hashset of trader items
|
||||
Set<TraderItem> toRestock = new HashSet<>();
|
||||
|
||||
// Sleep powder added
|
||||
toRestock.add(new TraderItem(ItemList.sleepPowder, 99, false, 99, 99, 20));
|
||||
logger.info("Adding sleep powder to trader restock list");
|
||||
// Kingdom tokens added
|
||||
toRestock.add(new TraderItem(ItemCreator.KINGDOM_TOKEN.getTemplateId(), 99, false, 99, 99, 20));
|
||||
logger.info("Adding kingdom tokens to trader restock list");
|
||||
// Sealed maps added, use ranom qualities between 10 and 100 (inclusive)
|
||||
toRestock.add(new TraderItem(SealedMap.templateId, 99, true, 10, 101, 3));
|
||||
logger.info("Adding sealed maps to trader restock list");
|
||||
toRestock.add(new TraderItem(EnchantersCrystal.templateId, 99, true, 10, 101, 10));
|
||||
logger.info("Adding enchant crystals to trader restock list");
|
||||
toRestock.add(new TraderItem(ChaosCrystal.templateId, 99, true, 10, 101, 10));
|
||||
logger.info("Adding chaos crystals to trader restock list");
|
||||
|
||||
|
||||
for (TraderItem tItem : toRestock) {
|
||||
logger.info("Counting number of " + ItemTemplateFactory.getInstance().getTemplate(tItem.getTemplateid()).getName() + " instances in trader inventory.");
|
||||
count = 0;
|
||||
for (Item i : trader.getInventory().getItemsAsArray()) {
|
||||
if (i.getTemplateId() == tItem.getTemplateid()) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
logger.info("Trader had " + count + " " + ItemTemplateFactory.getInstance().getTemplate(tItem.getTemplateid()).getName() + ".");
|
||||
while (count < tItem.getQuantity()) {
|
||||
item = Creature.createItem(tItem.getTemplateid(), tItem.getQuality());
|
||||
trader.getInventory().insertItem(item);
|
||||
count++;
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static int getNewFoodFill(float qlevel){
|
||||
float startPercent = 0.004f;
|
||||
float endPercent = 0.015f;
|
||||
@@ -715,6 +777,31 @@ public class MiscChanges {
|
||||
"}";
|
||||
Util.instrumentDeclared(thisClass, ctPlayer, "poll", "nextInt", replace);
|
||||
|
||||
CtClass ctShop = classPool.get("com.wurmonline.server.items.Trade");
|
||||
Util.setReason("Restock certain items after every trade with a trader");
|
||||
replace = "$_ = $proceed($$);" + MiscChanges.class.getName() + ".restockTrader($1);";
|
||||
Util.instrumentDeclared(thisClass, ctShop, "makeTrade", "getShop", replace);
|
||||
|
||||
CtClass ctVehicles = classPool.get("com.wurmonline.server.behaviours.VehicleBehaviour");
|
||||
Util.setReason("Allow preists of vynora to gain 20% boat speed above 60 faith.");
|
||||
replace = "$_ = $proceed($1, $2 * " + MiscChanges.class.getName() + ".boatSpeedBonus(Players.getInstance().getPlayer(this.pilotId)));";
|
||||
ctVehicles.getDeclaredMethod("calculateNewBoatSpeed").instrument(new ExprEditor() {
|
||||
private boolean first = true;
|
||||
|
||||
@Override
|
||||
public void edit(MethodCall m) throws CannotCompileException {
|
||||
if(m.getMethodName().equals("min")) {
|
||||
if(first) {
|
||||
first = false;
|
||||
}
|
||||
else {
|
||||
m.replace("$_ = $proceed($1, $2 * " + MiscChanges.class.getName() + ".boatSpeedBonus(Players.getInstance().getPlayer(this.pilotId)));");
|
||||
logger.info("Allowing preists of vynora to gain 20% boat speed above 60 faith.");
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
CtClass ctSimpleCreationEntry = classPool.get("com.wurmonline.server.items.SimpleCreationEntry");
|
||||
ctSimpleCreationEntry.getDeclaredMethod("run").instrument(new ExprEditor() {
|
||||
private boolean first = true;
|
||||
|
||||
Reference in New Issue
Block a user