diff --git a/src/engine/devcmd/cmds/AddNPCCmd.java b/src/engine/devcmd/cmds/AddNPCCmd.java index 495d2517..7011fb37 100644 --- a/src/engine/devcmd/cmds/AddNPCCmd.java +++ b/src/engine/devcmd/cmds/AddNPCCmd.java @@ -13,6 +13,7 @@ import engine.Enum.GameObjectType; import engine.InterestManagement.WorldGrid; import engine.devcmd.AbstractDevCmd; import engine.gameManager.*; +import engine.math.Vector3fImmutable; import engine.objects.*; import org.pmw.tinylog.Logger; @@ -31,7 +32,6 @@ public class AddNPCCmd extends AbstractDevCmd { int contractID; String name = ""; int level = 0; - if (words.length < 2) { this.sendUsage(pc); return; @@ -39,59 +39,54 @@ public class AddNPCCmd extends AbstractDevCmd { try { contractID = Integer.parseInt(words[0]); level = Integer.parseInt(words[1]); - for (int i = 2; i < words.length; i++) { name += words[i]; if (i + 1 < words.length) name += ""; } - } catch (NumberFormatException e) { throwbackError(pc, "Failed to parse supplied contractID or level to an Integer."); return; // NaN } - Contract contract = DbManager.ContractQueries.GET_CONTRACT(contractID); - if (contract == null || level < 1 || level > 75) { throwbackError(pc, "Invalid addNPC Command. Need contract ID, and level"); return; // NaN } - // Pick a random name if (name.isEmpty()) name = NPCManager.getPirateName(contract.getMobbaseID()); - Zone zone = ZoneManager.findSmallestZone(pc.getLoc()); - if (zone == null) { throwbackError(pc, "Failed to find zone to place npc in."); return; } - + Building building = null; if (target != null) if (target.getObjectType() == GameObjectType.Building) { - Building parentBuilding = (Building) target; - BuildingManager.addHirelingForWorld(parentBuilding, pc, parentBuilding.getLoc(), parentBuilding.getParentZone(), contract, level); - return; + building = (Building)target; } - - NPC npc = NPC.createNPC(name, contractID, - pc.getLoc(), null, zone, (short) level, null); - - if (npc != null) { - WorldGrid.addObject(npc, pc); - ChatManager.chatSayInfo(pc, - "NPC with ID " + npc.getDBID() + " added"); - this.setResult(String.valueOf(npc.getDBID())); - } else { - throwbackError(pc, "Failed to create npc of contract type " - + contractID); - Logger.error( - "Failed to create npc of contract type " + contractID); + NPC created; + Guild guild = null; + Vector3fImmutable loc; + if(building != null){ + guild = building.getGuild(); + loc = building.loc; + } else{ + loc = pc.loc; + } + created = NPC.createNPC(name, contractID, loc, guild, zone, (short)level, building); + created.bindLoc = loc; + if(building != null) { + created.buildingUUID = building.getObjectUUID(); + created.building = building; + NPCManager.slotCharacterInBuilding(created); } + created.setLoc(created.bindLoc); + created.updateDatabase(); + throwbackInfo(pc, "Created NPC with UUID: " + created.getObjectUUID()); } @Override diff --git a/src/engine/net/client/ClientMessagePump.java b/src/engine/net/client/ClientMessagePump.java index 14a02850..3c1158d3 100644 --- a/src/engine/net/client/ClientMessagePump.java +++ b/src/engine/net/client/ClientMessagePump.java @@ -560,12 +560,19 @@ public class ClientMessagePump implements NetMsgHandler { if (!itemManager.inventoryContains(i)) return; + //cannot delete gold + if(i.getItemBaseID() == 7) + return; + if (i.isCanDestroy()) - if (itemManager.delete(i) == true) { - int goldValue = i.getItemBase().getBaseValue(); + if (itemManager.delete(i)) { + int goldValue = i.getBaseValue(); if(i.getItemBase().isRune()) goldValue = 500000; + if(i.getItemBaseID() == 980066) + goldValue = 0; + if(goldValue > 0) itemManager.addGoldToInventory(goldValue,false); @@ -1251,6 +1258,8 @@ public class ClientMessagePump implements NetMsgHandler { cost = sell.getBaseValue(); + if(sell.getItemBaseID() == 980066) + cost = 0; //apply damaged value reduction float durabilityCurrent = sell.getDurabilityCurrent(); @@ -1450,7 +1459,7 @@ public class ClientMessagePump implements NetMsgHandler { if(me.getItemBase().getType().equals(ItemType.RESOURCE) && npc.getContractID() == 900){ handleResourcePurchase(me,itemMan,sourcePlayer,ib); }else { - buy = Item.createItemForPlayer(sourcePlayer, ib); + buy = Item.createItemForPlayer(sourcePlayer, ib, me.fromNoob); if (buy != null) { me.transferEnchants(buy); itemMan.addItemToInventory(buy); @@ -1584,7 +1593,7 @@ public class ClientMessagePump implements NetMsgHandler { } } if(!stacked){ - Item buy = Item.createItemForPlayer(sourcePlayer, ib); + Item buy = Item.createItemForPlayer(sourcePlayer, ib, false); if (buy != null) { me.transferEnchants(buy); itemMan.addItemToInventory(buy); diff --git a/src/engine/objects/Contract.java b/src/engine/objects/Contract.java index 581c3319..0077eab0 100644 --- a/src/engine/objects/Contract.java +++ b/src/engine/objects/Contract.java @@ -214,6 +214,7 @@ public class Contract extends AbstractGameObject { } } } + if(this.getObjectUUID() == 1202){ //rune merchant for(MobEquipment me : this.sellInventory){ switch(me.getItemBase().getUUID()){ @@ -272,6 +273,7 @@ public class Contract extends AbstractGameObject { } } } + if(this.getObjectUUID() == 1201){ //disc merchant for(MobEquipment me : this.sellInventory){ if(me.getItemBase().getName().equals("Prospector")){ @@ -281,6 +283,12 @@ public class Contract extends AbstractGameObject { } } } + + if(this.getObjectUUID() == 1502041) {//noob helper{ + for(MobEquipment me : this.sellInventory){ + me.magicValue = 1; + } + } return this.sellInventory; } diff --git a/src/engine/objects/Item.java b/src/engine/objects/Item.java index ef044c56..f9c5f0f8 100644 --- a/src/engine/objects/Item.java +++ b/src/engine/objects/Item.java @@ -233,7 +233,6 @@ public class Item extends AbstractWorldObject { this.value = rs.getInt("item_value"); this.customName = rs.getString("item_name"); - } public static void _serializeForClientMsg(Item item, ByteBufferWriter writer) @@ -609,7 +608,7 @@ public class Item extends AbstractWorldObject { writer.putIntAt(serialized, indexPosition); } - public static Item createItemForPlayer(PlayerCharacter pc, ItemBase ib) { + public static Item createItemForPlayer(PlayerCharacter pc, ItemBase ib, boolean fromNoob) { Item item = null; byte charges = 0; @@ -1206,6 +1205,7 @@ public class Item extends AbstractWorldObject { } public int getBaseValue() { + if (this.getItemBase() != null) return this.getItemBase().getBaseValue(); return 0; diff --git a/src/engine/objects/MobEquipment.java b/src/engine/objects/MobEquipment.java index db22066e..6d25896a 100644 --- a/src/engine/objects/MobEquipment.java +++ b/src/engine/objects/MobEquipment.java @@ -35,6 +35,7 @@ public class MobEquipment extends AbstractGameObject { private int pValue; private int sValue; int magicValue; + public boolean fromNoob = false; private float dropChance = 0; @@ -106,7 +107,6 @@ public class MobEquipment extends AbstractGameObject { public static void serializeForVendor(MobEquipment mobEquipment, ByteBufferWriter writer, float percent) throws SerializationException { _serializeForClientMsg(mobEquipment, writer, false); - int baseValue = mobEquipment.itemBase.getBaseValue() + mobEquipment.itemBase.getMagicValue(); writer.putInt(mobEquipment.magicValue); writer.putInt(mobEquipment.magicValue); }