public override void DoAction(NWPlayer player, string pageName, int responseID) { if (player.Gold < 50) { player.FloatingText("You don't have enough credits to retrieve that item."); return; } var response = GetResponseByID("MainPage", responseID); Guid pcImpoundedItemID = (Guid)response.CustomData; var item = DataService.PCImpoundedItem.GetByID(pcImpoundedItemID); if (item.DateRetrieved != null) { player.FloatingText("You have already retrieved that item."); return; } item.DateRetrieved = DateTime.UtcNow; DataService.SubmitDataChange(item, DatabaseActionType.Update); SerializationService.DeserializeItem(item.ItemObject, player); _.TakeGoldFromCreature(50, player, TRUE); LoadMainPage(); }
private void LoadSalvagePage() { var player = GetPC(); var model = CraftService.GetPlayerCraftingData(player); NWPlaceable tempStorage = _.GetObjectByTag("TEMP_ITEM_STORAGE"); var item = SerializationService.DeserializeItem(model.SerializedSalvageItem, tempStorage); var componentType = DataService.ComponentType.GetByID(model.SalvageComponentTypeID); string header = ColorTokenService.Green("Item: ") + item.Name + "\n\n"; header += "Reassembling this item will create the following " + ColorTokenService.Green(componentType.Name) + " component(s). Chance to create depends on your perks, skills, and harvesting bonus on items.\n\n"; // Always create one item with zero bonuses. header += componentType.Name + " (No Bonuses) [RL: 0] " + GetChanceColor(100) + "\n"; // Now check specific custom properties which are stored as local variables on the item. header += ProcessPropertyDetails(item.HarvestingBonus, componentType.Name, "Harvesting Bonus", 3); header += ProcessPropertyDetails(item.PilotingBonus, componentType.Name, "Piloting Bonus", 3); header += ProcessPropertyDetails(item.ScanningBonus, componentType.Name, "Scanning Bonus", 3); header += ProcessPropertyDetails(item.ScavengingBonus, componentType.Name, "Scavenging Bonus", 3); header += ProcessPropertyDetails(item.CooldownRecovery, componentType.Name, "Cooldown Recovery", 3); header += ProcessPropertyDetails(item.CraftBonusArmorsmith, componentType.Name, "Armorsmith", 3); header += ProcessPropertyDetails(item.CraftBonusWeaponsmith, componentType.Name, "Weaponsmith", 3); header += ProcessPropertyDetails(item.CraftBonusCooking, componentType.Name, "Cooking", 3); header += ProcessPropertyDetails(item.CraftBonusEngineering, componentType.Name, "Engineering", 3); header += ProcessPropertyDetails(item.CraftBonusFabrication, componentType.Name, "Fabrication", 3); header += ProcessPropertyDetails(item.HPBonus, componentType.Name, "HP", 5, 0.5f); header += ProcessPropertyDetails(item.FPBonus, componentType.Name, "FP", 5, 0.5f); header += ProcessPropertyDetails(item.EnmityRate, componentType.Name, "Enmity", 3); header += ProcessPropertyDetails(item.LuckBonus, componentType.Name, "Luck", 3); header += ProcessPropertyDetails(item.MeditateBonus, componentType.Name, "Meditate", 3); header += ProcessPropertyDetails(item.RestBonus, componentType.Name, "Rest", 3); header += ProcessPropertyDetails(item.MedicineBonus, componentType.Name, "Medicine", 3); header += ProcessPropertyDetails(item.HPRegenBonus, componentType.Name, "HP Regen", 3); header += ProcessPropertyDetails(item.FPRegenBonus, componentType.Name, "FP Regen", 3); header += ProcessPropertyDetails(item.BaseAttackBonus, componentType.Name, "Base Attack Bonus", 3, 6f); header += ProcessPropertyDetails(item.StructureBonus, componentType.Name, "Structure Bonus", 3); header += ProcessPropertyDetails(item.SneakAttackBonus, componentType.Name, "Sneak Attack", 3); header += ProcessPropertyDetails(item.DamageBonus, componentType.Name, "Damage", 3); header += ProcessPropertyDetails(item.StrengthBonus, componentType.Name, "STR", 3); header += ProcessPropertyDetails(item.DexterityBonus, componentType.Name, "DEX", 3); header += ProcessPropertyDetails(item.ConstitutionBonus, componentType.Name, "CON", 3); header += ProcessPropertyDetails(item.WisdomBonus, componentType.Name, "WIS", 3); header += ProcessPropertyDetails(item.IntelligenceBonus, componentType.Name, "INT", 3); header += ProcessPropertyDetails(item.CharismaBonus, componentType.Name, "CHA", 3); header += ProcessPropertyDetails(item.DurationBonus, componentType.Name, "Duration", 3); SetPageHeader("SalvagePage", header); // Remove the temporary copy from the game world. item.Destroy(); }
private void ManageMarketListingDetailsResponses(int responseID) { var player = GetPC(); var model = MarketService.GetPlayerMarketData(player); switch (responseID) { case 1: // Refresh LoadManageMarketListingDetailsPage(); break; case 2: // Remove Listing var listing = DataService.PCMarketListing.GetByID(model.ManageListingID); // Start by verifying the item is still in a valid state. if (listing.DateRemoved != null || listing.DateSold != null) { player.FloatingText("That item is no longer available. It may have been sold or removed from the listing."); ClearModelData(); LoadManageMarketListingsPage(); NavigationStack.Pop(); // Remove the duplicate "Back" page, since we're redirecting already. ChangePage("MarketListingsPage", false); return; } if (model.IsConfirming) { SetResponseText("MarketListingDetailsPage", 2, ColorTokenService.Red("Remove Listing")); model.IsConfirming = false; SerializationService.DeserializeItem(listing.ItemObject, player); listing.DateRemoved = DateTime.UtcNow; DataService.SubmitDataChange(listing, DatabaseActionType.Update); ClearModelData(); LoadManageMarketListingsPage(); NavigationStack.Pop(); // Remove the duplicate "Back" page, since we're redirecting already. ChangePage("MarketListingsPage", false); } else { SetResponseText("MarketListingDetailsPage", 2, ColorTokenService.Red("CONFIRM REMOVE LISTING")); model.IsConfirming = true; } break; } }
public void Main() { NWPlaceable container = (NWGameObject.OBJECT_SELF); NWPlayer oPC = (_.GetLastOpenedBy()); var items = DataService.PCOverflowItem.GetAllByPlayerID(oPC.GlobalID); foreach (PCOverflowItem item in items) { NWItem oItem = SerializationService.DeserializeItem(item.ItemObject, container); oItem.SetLocalString("TEMP_OVERFLOW_ITEM_ID", item.ID.ToString()); } container.IsUseable = false; }
public void Main() { NWPlaceable chest = (NWGameObject.OBJECT_SELF); Guid structureID = new Guid(chest.GetLocalString("PC_BASE_STRUCTURE_ID")); var structure = DataService.PCBaseStructure.GetByID(structureID); var items = DataService.PCBaseStructureItem.GetAllByPCBaseStructureID(structure.ID); foreach (var item in items) { SerializationService.DeserializeItem(item.ItemObject, chest); } chest.IsUseable = false; }
public bool Run(params object[] args) { NWPlaceable container = (Object.OBJECT_SELF); NWPlayer oPC = (_.GetLastOpenedBy()); var items = DataService.Where <PCOverflowItem>(x => x.PlayerID == oPC.GlobalID).ToList(); foreach (PCOverflowItem item in items) { NWItem oItem = SerializationService.DeserializeItem(item.ItemObject, container); oItem.SetLocalString("TEMP_OVERFLOW_ITEM_ID", item.ID.ToString()); } container.IsUseable = false; return(true); }
private void ReturnSellingItem() { var player = GetPC(); var model = MarketService.GetPlayerMarketData(player); if (!model.IsSellingItem) { return; // Prevent the "Manage Listings" page from firing this. } if (!string.IsNullOrWhiteSpace(model.ItemObject)) { SerializationService.DeserializeItem(model.ItemObject, player); } ClearModelData(); }
public bool Run(params object[] args) { NWPlaceable chest = (Object.OBJECT_SELF); Guid structureID = new Guid(chest.GetLocalString("PC_BASE_STRUCTURE_ID")); var structure = DataService.Single <PCBaseStructure>(x => x.ID == structureID); var items = DataService.Where <PCBaseStructureItem>(x => x.PCBaseStructureID == structure.ID); foreach (var item in items) { SerializationService.DeserializeItem(item.ItemObject, chest); } chest.IsUseable = false; return(true); }
public bool Run(params object[] args) { NWPlayer player = _.GetLastOpenedBy(); if (!player.IsPlayer) { return(false); } NWPlaceable terminal = Object.OBJECT_SELF; NWArea area = terminal.Area; int bankID = terminal.GetLocalInt("BANK_ID"); if (bankID <= 0) { Console.WriteLine("WARNING: Bank ID is not set on bank in area: " + area.Name); return(false); } Data.Entity.Bank entity = DataService.SingleOrDefault <Data.Entity.Bank>(x => x.ID == bankID); if (entity == null) { entity = new Data.Entity.Bank { AreaName = area.Name, AreaResref = area.Resref, AreaTag = area.Tag, ID = bankID }; DataService.SubmitDataChange(entity, DatabaseActionType.Insert); } var bankItems = DataService.Where <BankItem>(x => x.PlayerID == player.GlobalID && x.BankID == entity.ID); foreach (BankItem item in bankItems.Where(x => x.PlayerID == player.GlobalID)) { SerializationService.DeserializeItem(item.ItemObject, terminal); } terminal.IsLocked = true; player.SendMessage("Walk away from the terminal when you are finished banking."); return(true); }
private void OpenResourceBay() { NWPlaceable tower = (NWPlaceable)GetDialogTarget(); NWPlayer oPC = GetPC(); NWPlaceable bay = tower.GetLocalObject("CONTROL_TOWER_RESOURCE_BAY"); if (bay.IsValid) { NWObject accessor = bay.GetLocalObject("BAY_ACCESSOR"); if (!accessor.IsValid) { bay.Destroy(); } else { oPC.FloatingText("Someone else is already accessing that structure's inventory. Please wait."); return; } } Guid structureID = new Guid(tower.GetLocalString("PC_BASE_STRUCTURE_ID")); var structureItems = DataService.PCBaseStructureItem.GetAllByPCBaseStructureID(structureID); Location location = oPC.Location; bay = _.CreateObject(ObjectType.Placeable, "resource_bay", location); tower.SetLocalObject("CONTROL_TOWER_RESOURCE_BAY", bay.Object); bay.SetLocalObject("CONTROL_TOWER_PARENT", tower.Object); bay.SetLocalString("PC_BASE_STRUCTURE_ID", structureID.ToString()); foreach (var item in structureItems) { SerializationService.DeserializeItem(item.ItemObject, bay); } oPC.AssignCommand(() => _.ActionInteractObject(bay.Object)); }
private void ItemDetailsPageResponses(int responseID) { var buyer = GetPC(); var model = MarketService.GetPlayerMarketData(buyer); var listing = DataService.PCMarketListing.GetByIDOrDefault(model.BrowseListingID); NWPlaceable terminal = GetDialogTarget().Object; // Item was removed, sold, or expired. if (listing == null || listing.DateSold != null || listing.DateExpires <= DateTime.UtcNow) { LoadItemListPage(); ChangePage("ItemListPage", false); buyer.FloatingText("Unfortunately, that item is no longer available."); return; } switch (responseID) { case 1: // Examine Item _.CreateItemOnObject("exit_preview", terminal); NWItem item = SerializationService.DeserializeItem(listing.ItemObject, terminal); item.IsCursed = true; OpenTerminalInventory(); break; case 2: // Buy Item / Confirm Buy Item if (model.IsConfirming) { // Player no longer has enough gold to buy the item. // Set back to no longer confirming and hide the "Buy Item" option. Notify them. if (buyer.Gold < listing.Price) { model.IsConfirming = false; SetResponseText("ItemDetailsPage", 2, "Buy Item"); SetResponseVisible("ItemDetailsPage", 2, false); buyer.FloatingText("You do not have enough credits to purchase that item."); return; } // Take gold from buyer. _.TakeGoldFromCreature(listing.Price, buyer, TRUE); // Give gold to seller. MarketService.GiveMarketGoldToPlayer(listing.SellerPlayerID, listing.Price); // Give the item to the buyer. SerializationService.DeserializeItem(listing.ItemObject, buyer); // Mark the listing as sold. listing.DateSold = DateTime.UtcNow; listing.BuyerPlayerID = buyer.GlobalID; DataService.SubmitDataChange(listing, DatabaseActionType.Update); model.IsConfirming = false; SetResponseText("ItemDetailsPage", 2, "Buy Item"); LoadItemListPage(); NavigationStack.Pop(); // Assume the previous page was the ItemListPage, which we're about to send the player back to now. Remove it from the stack. ChangePage("ItemListPage", false); } else { model.IsConfirming = true; SetResponseText("ItemDetailsPage", 2, "CONFIRM BUY ITEM"); } break; } }
private void HandleLoadOutfit(int responseID) { DialogResponse response = GetResponseByID("LoadOutfitPage", responseID); NWPlayer oPC = GetPC(); if (!CanModifyClothes()) { oPC.FloatingText("You cannot modify your currently equipped clothes."); return; } int outfitID = (int)response.CustomData; PCOutfit entity = GetPlayerOutfits(GetPC()); NWPlaceable oTempStorage = (_.GetObjectByTag("OUTFIT_BARREL")); NWItem oClothes = oPC.Chest; NWItem storedClothes = null; oClothes.SetLocalString("TEMP_OUTFIT_UUID", oPC.GlobalID.ToString()); if (outfitID == 1) { storedClothes = SerializationService.DeserializeItem(entity.Outfit1, oTempStorage); } else if (outfitID == 2) { storedClothes = SerializationService.DeserializeItem(entity.Outfit2, oTempStorage); } else if (outfitID == 3) { storedClothes = SerializationService.DeserializeItem(entity.Outfit3, oTempStorage); } else if (outfitID == 4) { storedClothes = SerializationService.DeserializeItem(entity.Outfit4, oTempStorage); } else if (outfitID == 5) { storedClothes = SerializationService.DeserializeItem(entity.Outfit5, oTempStorage); } else if (outfitID == 6) { storedClothes = SerializationService.DeserializeItem(entity.Outfit6, oTempStorage); } else if (outfitID == 7) { storedClothes = SerializationService.DeserializeItem(entity.Outfit7, oTempStorage); } else if (outfitID == 8) { storedClothes = SerializationService.DeserializeItem(entity.Outfit8, oTempStorage); } else if (outfitID == 9) { storedClothes = SerializationService.DeserializeItem(entity.Outfit9, oTempStorage); } else if (outfitID == 10) { storedClothes = SerializationService.DeserializeItem(entity.Outfit10, oTempStorage); } if (storedClothes == null) { throw new Exception("Unable to locate stored clothes."); } NWGameObject oCopy = _.CopyItem(oClothes.Object, oTempStorage.Object, TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LBICEP, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LBICEP), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_LBICEP, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_LBICEP), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_BELT, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_BELT), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_BELT, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_BELT), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LFOOT, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LFOOT), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_LFOOT, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_LFOOT), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LFOREARM, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LFOREARM), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_LFOREARM, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_LFOREARM), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LHAND, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LHAND), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_LHAND, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_LHAND), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LSHIN, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LSHIN), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_LSHIN, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_LSHIN), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LSHOULDER, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LSHOULDER), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_LSHOULDER, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_LSHOULDER), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LTHIGH, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_LTHIGH), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_LTHIGH, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_LTHIGH), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_NECK, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_NECK), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_NECK, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_NECK), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_PELVIS, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_PELVIS), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_PELVIS, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_PELVIS), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RBICEP, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RBICEP), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_RBICEP, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_RBICEP), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RFOOT, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RFOOT), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_RFOOT, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_RFOOT), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RFOREARM, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RFOREARM), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_RFOREARM, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_RFOREARM), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RHAND, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RHAND), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_RHAND, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_RHAND), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_ROBE, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_ROBE), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_ROBE, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_ROBE), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RSHIN, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RSHIN), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_RSHIN, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_RSHIN), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RSHOULDER, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RSHOULDER), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_RSHOULDER, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_RSHOULDER), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RTHIGH, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_RTHIGH), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_RTHIGH, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_RTHIGH), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_TORSO, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_TORSO), TRUE); oCopy = _.CopyItemAndModify(oCopy, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_TORSO, _.GetItemAppearance(storedClothes.Object, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_MODEL_TORSO), TRUE); NWItem oFinal = (_.CopyItem(oCopy, oPC.Object, TRUE)); oFinal.DeleteLocalString("TEMP_OUTFIT_UUID"); _.DestroyObject(oCopy); oClothes.Destroy(); storedClothes.Destroy(); oPC.AssignCommand(() => _.ActionEquipItem(oFinal.Object, INVENTORY_SLOT_CHEST)); foreach (NWItem item in oTempStorage.InventoryItems) { if (item.GetLocalString("TEMP_OUTFIT_UUID") == oPC.GlobalID.ToString()) { item.Destroy(); } } ShowLoadOutfitOptions(); }
private void HandleLoadWeapon(int responseID) { DialogResponse response = GetResponseByID("LoadWeaponPage", responseID); NWPlayer oPC = GetPC(); if (!CanModifyWeapon()) { oPC.FloatingText("You cannot modify your currently equipped Weapon."); return; } int outfitID = (int)response.CustomData; PCWeapon entity = GetPlayerWeapons(GetPC()); if (entity == null) { return; } NWPlaceable oTempStorage = (GetObjectByTag("OUTFIT_BARREL")); NWItem oClothes = oPC.RightHand; NWItem storedClothes = null; oClothes.SetLocalString("TEMP_OUTFIT_UUID", oPC.GlobalID.ToString()); if (outfitID == 1) { storedClothes = SerializationService.DeserializeItem(entity.Weapon1, oTempStorage); } else if (outfitID == 2) { storedClothes = SerializationService.DeserializeItem(entity.Weapon2, oTempStorage); } else if (outfitID == 3) { storedClothes = SerializationService.DeserializeItem(entity.Weapon3, oTempStorage); } else if (outfitID == 4) { storedClothes = SerializationService.DeserializeItem(entity.Weapon4, oTempStorage); } else if (outfitID == 5) { storedClothes = SerializationService.DeserializeItem(entity.Weapon5, oTempStorage); } else if (outfitID == 6) { storedClothes = SerializationService.DeserializeItem(entity.Weapon6, oTempStorage); } else if (outfitID == 7) { storedClothes = SerializationService.DeserializeItem(entity.Weapon7, oTempStorage); } else if (outfitID == 8) { storedClothes = SerializationService.DeserializeItem(entity.Weapon8, oTempStorage); } else if (outfitID == 9) { storedClothes = SerializationService.DeserializeItem(entity.Weapon9, oTempStorage); } else if (outfitID == 10) { storedClothes = SerializationService.DeserializeItem(entity.Weapon10, oTempStorage); } if (storedClothes == null) { throw new Exception("Unable to locate stored Weapon."); } uint oCopy = CopyItem(oClothes.Object, oTempStorage.Object, true); var baseItemType = GetBaseItemType(oCopy); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.SimpleModel, 0, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.SimpleModel, 0), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.WeaponModel, 0, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.WeaponModel, 0), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.WeaponColor, 0, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.WeaponModel, 0), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.WeaponModel, 1, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.WeaponModel, 1), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.WeaponColor, 1, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.WeaponColor, 1), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.WeaponModel, 2, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.WeaponModel, 2), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.WeaponColor, 2, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.WeaponColor, 2), true); NWItem oFinal = (CopyItem(oCopy, oPC.Object, true)); oFinal.DeleteLocalString("TEMP_OUTFIT_UUID"); DestroyObject(oCopy); oClothes.Destroy(); storedClothes.Destroy(); oPC.AssignCommand(() => ActionEquipItem(oFinal.Object, InventorySlot.RightHand)); foreach (NWItem item in oTempStorage.InventoryItems) { if (item.GetLocalString("TEMP_OUTFIT_UUID") == oPC.GlobalID.ToString()) { item.Destroy(); } } ShowLoadWeaponOptions(); }
private void HandleLoadOutfit(int responseID) { DialogResponse response = GetResponseByID("LoadOutfitPage", responseID); NWPlayer oPC = GetPC(); if (!CanModifyClothes()) { oPC.FloatingText("You cannot modify your currently equipped clothes."); return; } int outfitID = (int)response.CustomData; PCOutfit entity = GetPlayerOutfits(GetPC()); if (entity == null) { return; } NWPlaceable oTempStorage = (GetObjectByTag("OUTFIT_BARREL")); NWItem oClothes = oPC.Chest; NWItem storedClothes = null; oClothes.SetLocalString("TEMP_OUTFIT_UUID", oPC.GlobalID.ToString()); if (outfitID == 1) { storedClothes = SerializationService.DeserializeItem(entity.Outfit1, oTempStorage); } else if (outfitID == 2) { storedClothes = SerializationService.DeserializeItem(entity.Outfit2, oTempStorage); } else if (outfitID == 3) { storedClothes = SerializationService.DeserializeItem(entity.Outfit3, oTempStorage); } else if (outfitID == 4) { storedClothes = SerializationService.DeserializeItem(entity.Outfit4, oTempStorage); } else if (outfitID == 5) { storedClothes = SerializationService.DeserializeItem(entity.Outfit5, oTempStorage); } else if (outfitID == 6) { storedClothes = SerializationService.DeserializeItem(entity.Outfit6, oTempStorage); } else if (outfitID == 7) { storedClothes = SerializationService.DeserializeItem(entity.Outfit7, oTempStorage); } else if (outfitID == 8) { storedClothes = SerializationService.DeserializeItem(entity.Outfit8, oTempStorage); } else if (outfitID == 9) { storedClothes = SerializationService.DeserializeItem(entity.Outfit9, oTempStorage); } else if (outfitID == 10) { storedClothes = SerializationService.DeserializeItem(entity.Outfit10, oTempStorage); } if (storedClothes == null) { throw new Exception("Unable to locate stored clothes."); } uint oCopy = CopyItem(oClothes.Object, oTempStorage.Object, true); oCopy = CopyItemAndModify(oCopy, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.LeftBicep, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.LeftBicep), true); oCopy = CopyItemAndModify(oCopy, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.LeftBicep, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.LeftBicep), true); oCopy = CopyItemAndModify(oCopy, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.Belt, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.Belt), true); oCopy = CopyItemAndModify(oCopy, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.Belt, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.Belt), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.LeftFoot, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.LeftFoot), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.LeftFoot, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.LeftFoot), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.LeftForearm, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.LeftForearm), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.LeftForearm, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.LeftForearm), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.LeftHand, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.LeftHand), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.LeftHand, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.LeftHand), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.LeftShin, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.LeftShin), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.LeftShin, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.LeftShin), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.LeftShoulder, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.LeftShoulder), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.LeftShoulder, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.LeftShoulder), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.LeftThigh, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.LeftThigh), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.LeftThigh, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.LeftThigh), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.Neck, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.Neck), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.Neck, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.Neck), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.Pelvis, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.Pelvis), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.Pelvis, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.Pelvis), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.RightBicep, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.RightBicep), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.RightBicep, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.RightBicep), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.RightFoot, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.RightFoot), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.RightFoot, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.RightFoot), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.RightForearm, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.RightForearm), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.RightForearm, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.RightForearm), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.RightHand, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.RightHand), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.RightHand, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.RightHand), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.Robe, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.Robe), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.Robe, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.Robe), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.RightShin, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.RightShin), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.RightShin, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.RightShin), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.RightShoulder, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.RightShoulder), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.RightShoulder, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.RightShoulder), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.RightThigh, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.RightThigh), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.RightThigh, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.RightThigh), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.Torso, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorModel, (int)AppearanceArmor.Torso), true); oCopy = _.CopyItemAndModify(oCopy, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.Torso, (int)GetItemAppearance(storedClothes.Object, ItemAppearanceType.ArmorColor, (int)AppearanceArmor.Torso), true); NWItem oFinal = (CopyItem(oCopy, oPC.Object, true)); oFinal.DeleteLocalString("TEMP_OUTFIT_UUID"); DestroyObject(oCopy); oClothes.Destroy(); storedClothes.Destroy(); oPC.AssignCommand(() => ActionEquipItem(oFinal.Object, InventorySlot.Chest)); foreach (NWItem item in oTempStorage.InventoryItems) { if (item.GetLocalString("TEMP_OUTFIT_UUID") == oPC.GlobalID.ToString()) { item.Destroy(); } } ShowLoadOutfitOptions(); }
// New component items will be spawned and the appropriate properties from the base item will be transferred. public bool Run(params object[] args) { _player = (NWPlayer)args[0]; int xp = 100; // Always grant at least this much XP to player. // Remove the immobilization effect foreach (var effect in _player.Effects) { if (_.GetEffectTag(effect) == "CRAFTING_IMMOBILIZATION") { _.RemoveEffect(_player, effect); } } // Check for a fuel cell in the player's inventory again. If it doesn't exist, we exit early with an error message. NWItem fuel = _.GetItemPossessedBy(_player, "ass_power"); if (!fuel.IsValid) { _player.SendMessage(ColorTokenService.Red("A 'Reassembly Fuel Cell' was not found in your inventory. Reassembly failed.")); return(false); } // Otherwise the fuel cell was found. Destroy it and continue on with the process. fuel.Destroy(); _playerItemStats = PlayerStatService.GetPlayerItemEffectiveStats(_player); string serializedSalvageItem = (string)args[1]; NWPlaceable tempStorage = _.GetObjectByTag("TEMP_ITEM_STORAGE"); NWItem item = SerializationService.DeserializeItem(serializedSalvageItem, tempStorage); int salvageComponentTypeID = (int)args[2]; _componentType = DataService.Get <ComponentType>(salvageComponentTypeID); // Create an item with no bonuses every time. _.CreateItemOnObject(_componentType.ReassembledResref, _player); // Now check specific custom properties which are stored as local variables on the item. xp += ProcessProperty(item.HarvestingBonus, 3, ComponentBonusType.HarvestingUp); xp += ProcessProperty(item.PilotingBonus, 3, ComponentBonusType.PilotingUp); xp += ProcessProperty(item.ScanningBonus, 3, ComponentBonusType.ScanningUp); xp += ProcessProperty(item.ScavengingBonus, 3, ComponentBonusType.ScavengingUp); xp += ProcessProperty(item.CooldownRecovery, 3, ComponentBonusType.CooldownRecoveryUp); xp += ProcessProperty(item.CraftBonusArmorsmith, 3, ComponentBonusType.ArmorsmithUp); xp += ProcessProperty(item.CraftBonusWeaponsmith, 3, ComponentBonusType.WeaponsmithUp); xp += ProcessProperty(item.CraftBonusCooking, 3, ComponentBonusType.CookingUp); xp += ProcessProperty(item.CraftBonusEngineering, 3, ComponentBonusType.EngineeringUp); xp += ProcessProperty(item.CraftBonusFabrication, 3, ComponentBonusType.FabricationUp); xp += ProcessProperty(item.HPBonus, 5, ComponentBonusType.HPUp, 0.5f); xp += ProcessProperty(item.FPBonus, 5, ComponentBonusType.FPUp, 0.5f); xp += ProcessProperty(item.EnmityRate, 3, ComponentBonusType.EnmityUp); xp += ProcessProperty(item.LuckBonus, 3, ComponentBonusType.LuckUp); xp += ProcessProperty(item.MeditateBonus, 3, ComponentBonusType.MeditateUp); xp += ProcessProperty(item.RestBonus, 3, ComponentBonusType.RestUp); xp += ProcessProperty(item.MedicineBonus, 3, ComponentBonusType.MedicineUp); xp += ProcessProperty(item.HPRegenBonus, 3, ComponentBonusType.HPRegenUp); xp += ProcessProperty(item.FPRegenBonus, 3, ComponentBonusType.FPRegenUp); xp += ProcessProperty(item.BaseAttackBonus, 3, ComponentBonusType.BaseAttackBonusUp, 6f); xp += ProcessProperty(item.StructureBonus, 3, ComponentBonusType.StructureBonusUp); xp += ProcessProperty(item.SneakAttackBonus, 3, ComponentBonusType.SneakAttackUp); xp += ProcessProperty(item.DamageBonus, 3, ComponentBonusType.DamageUp); xp += ProcessProperty(item.StrengthBonus, 3, ComponentBonusType.StrengthUp); xp += ProcessProperty(item.DexterityBonus, 3, ComponentBonusType.DexterityUp); xp += ProcessProperty(item.ConstitutionBonus, 3, ComponentBonusType.ConstitutionUp); xp += ProcessProperty(item.WisdomBonus, 3, ComponentBonusType.WisdomUp); xp += ProcessProperty(item.IntelligenceBonus, 3, ComponentBonusType.IntelligenceUp); xp += ProcessProperty(item.CharismaBonus, 3, ComponentBonusType.CharismaUp); xp += ProcessProperty(item.DurationBonus, 3, ComponentBonusType.DurationUp); item.Destroy(); SkillService.GiveSkillXP(_player, SkillType.Harvesting, xp); return(true); }
// New component items will be spawned and the appropriate properties from the base item will be transferred. public bool Run(params object[] args) { _player = (NWPlayer)args[0]; _playerItemStats = PlayerStatService.GetPlayerItemEffectiveStats(_player); int xp = 100; // Always grant at least this much XP to player. // Remove the immobilization effect foreach (var effect in _player.Effects) { if (_.GetEffectTag(effect) == "CRAFTING_IMMOBILIZATION") { _.RemoveEffect(_player, effect); } } string serializedSalvageItem = (string)args[1]; NWPlaceable tempStorage = _.GetObjectByTag("TEMP_ITEM_STORAGE"); NWItem item = SerializationService.DeserializeItem(serializedSalvageItem, tempStorage); int salvageComponentTypeID = (int)args[2]; _componentType = DataService.Get <ComponentType>(salvageComponentTypeID); // Create an item with no bonuses every time. _.CreateItemOnObject(_componentType.ReassembledResref, _player); // First check is for attack bonuses foreach (var prop in item.ItemProperties) { int propTypeID = _.GetItemPropertyType(prop); if (propTypeID == _.ITEM_PROPERTY_ATTACK_BONUS) { // Get the amount of Attack Bonus int amount = _.GetItemPropertyCostTableValue(prop); xp += ProcessProperty(amount, 3, ComponentBonusType.AttackBonusUp); } } // Now check specific custom properties which are stored as local variables on the item. xp += ProcessProperty(item.CustomAC, 3, ComponentBonusType.ACUp); xp += ProcessProperty(item.HarvestingBonus, 3, ComponentBonusType.HarvestingUp); xp += ProcessProperty(item.PilotingBonus, 3, ComponentBonusType.PilotingUp); xp += ProcessProperty(item.ScanningBonus, 3, ComponentBonusType.ScanningUp); xp += ProcessProperty(item.ScavengingBonus, 3, ComponentBonusType.ScavengingUp); xp += ProcessProperty(item.CastingSpeed, 3, ComponentBonusType.CastingSpeedUp); xp += ProcessProperty(item.CraftBonusArmorsmith, 3, ComponentBonusType.ArmorsmithUp); xp += ProcessProperty(item.CraftBonusWeaponsmith, 3, ComponentBonusType.WeaponsmithUp); xp += ProcessProperty(item.CraftBonusCooking, 3, ComponentBonusType.CookingUp); xp += ProcessProperty(item.CraftBonusEngineering, 3, ComponentBonusType.EngineeringUp); xp += ProcessProperty(item.CraftBonusFabrication, 3, ComponentBonusType.FabricationUp); xp += ProcessProperty(item.HPBonus, 5, ComponentBonusType.HPUp, 0.5f); xp += ProcessProperty(item.FPBonus, 5, ComponentBonusType.FPUp, 0.5f); xp += ProcessProperty(item.EnmityRate, 3, ComponentBonusType.EnmityUp); xp += ProcessProperty(item.ForcePotencyBonus, 3, ComponentBonusType.ForcePotencyUp); xp += ProcessProperty(item.ForceAccuracyBonus, 3, ComponentBonusType.ForceAccuracyUp); xp += ProcessProperty(item.ForceDefenseBonus, 3, ComponentBonusType.ForceDefenseUp); xp += ProcessProperty(item.ElectricalPotencyBonus, 3, ComponentBonusType.ElectricalPotencyUp); xp += ProcessProperty(item.MindPotencyBonus, 3, ComponentBonusType.MindPotencyUp); xp += ProcessProperty(item.LightPotencyBonus, 3, ComponentBonusType.LightPotencyUp); xp += ProcessProperty(item.DarkPotencyBonus, 3, ComponentBonusType.DarkPotencyUp); xp += ProcessProperty(item.ElectricalDefenseBonus, 3, ComponentBonusType.ElectricalDefenseUp); xp += ProcessProperty(item.MindDefenseBonus, 3, ComponentBonusType.MindDefenseUp); xp += ProcessProperty(item.LightDefenseBonus, 3, ComponentBonusType.LightDefenseUp); xp += ProcessProperty(item.DarkDefenseBonus, 3, ComponentBonusType.DarkDefenseUp); xp += ProcessProperty(item.LuckBonus, 3, ComponentBonusType.LuckUp); xp += ProcessProperty(item.MeditateBonus, 3, ComponentBonusType.MeditateUp); xp += ProcessProperty(item.RestBonus, 3, ComponentBonusType.RestUp); xp += ProcessProperty(item.MedicineBonus, 3, ComponentBonusType.MedicineUp); xp += ProcessProperty(item.HPRegenBonus, 3, ComponentBonusType.HPRegenUp); xp += ProcessProperty(item.FPRegenBonus, 3, ComponentBonusType.FPRegenUp); xp += ProcessProperty(item.BaseAttackBonus, 3, ComponentBonusType.BaseAttackBonusUp, 6f); xp += ProcessProperty(item.StructureBonus, 3, ComponentBonusType.StructureBonusUp); xp += ProcessProperty(item.SneakAttackBonus, 3, ComponentBonusType.SneakAttackUp); xp += ProcessProperty(item.DamageBonus, 3, ComponentBonusType.DamageUp); xp += ProcessProperty(item.StrengthBonus, 3, ComponentBonusType.StrengthUp); xp += ProcessProperty(item.DexterityBonus, 3, ComponentBonusType.DexterityUp); xp += ProcessProperty(item.ConstitutionBonus, 3, ComponentBonusType.ConstitutionUp); xp += ProcessProperty(item.WisdomBonus, 3, ComponentBonusType.WisdomUp); xp += ProcessProperty(item.IntelligenceBonus, 3, ComponentBonusType.IntelligenceUp); xp += ProcessProperty(item.CharismaBonus, 3, ComponentBonusType.CharismaUp); xp += ProcessProperty(item.DurationBonus, 3, ComponentBonusType.DurationUp); item.Destroy(); SkillService.GiveSkillXP(_player, SkillType.Harvesting, xp); return(true); }
private void LoadSalvagePage() { var player = GetPC(); var model = CraftService.GetPlayerCraftingData(player); NWPlaceable tempStorage = _.GetObjectByTag("TEMP_ITEM_STORAGE"); var item = SerializationService.DeserializeItem(model.SerializedSalvageItem, tempStorage); var componentType = DataService.Get <ComponentType>(model.SalvageComponentTypeID); string header = ColorTokenService.Green("Item: ") + item.Name + "\n\n"; header += "Reassembling this item will create the following " + ColorTokenService.Green(componentType.Name) + " component(s). Chance to create depends on your perks, skills, and harvesting bonus on items.\n\n"; // Always create one item with zero bonuses. header += componentType.Name + " (No Bonuses) [RL: 0] " + GetChanceColor(100) + "\n"; // Start by checking attack bonus since we're not storing this value as a local variable on the item. foreach (var prop in item.ItemProperties) { int propTypeID = _.GetItemPropertyType(prop); if (propTypeID == ITEM_PROPERTY_ATTACK_BONUS) { // Get the amount of Attack Bonus int amount = _.GetItemPropertyCostTableValue(prop); header += ProcessPropertyDetails(amount, componentType.Name, "Attack Bonus", 3); } } // Now check specific custom properties which are stored as local variables on the item. header += ProcessPropertyDetails(item.CustomAC, componentType.Name, "AC", 3); header += ProcessPropertyDetails(item.HarvestingBonus, componentType.Name, "Harvesting Bonus", 3); header += ProcessPropertyDetails(item.PilotingBonus, componentType.Name, "Piloting Bonus", 3); header += ProcessPropertyDetails(item.ScanningBonus, componentType.Name, "Scanning Bonus", 3); header += ProcessPropertyDetails(item.ScavengingBonus, componentType.Name, "Scavenging Bonus", 3); header += ProcessPropertyDetails(item.CastingSpeed, componentType.Name, "Activation Speed", 3); header += ProcessPropertyDetails(item.CraftBonusArmorsmith, componentType.Name, "Armorsmith", 3); header += ProcessPropertyDetails(item.CraftBonusWeaponsmith, componentType.Name, "Weaponsmith", 3); header += ProcessPropertyDetails(item.CraftBonusCooking, componentType.Name, "Cooking", 3); header += ProcessPropertyDetails(item.CraftBonusEngineering, componentType.Name, "Engineering", 3); header += ProcessPropertyDetails(item.CraftBonusFabrication, componentType.Name, "Fabrication", 3); header += ProcessPropertyDetails(item.HPBonus, componentType.Name, "HP", 5, 0.5f); header += ProcessPropertyDetails(item.FPBonus, componentType.Name, "FP", 5, 0.5f); header += ProcessPropertyDetails(item.EnmityRate, componentType.Name, "Enmity", 3); header += ProcessPropertyDetails(item.ForcePotencyBonus, componentType.Name, "Force Potency", 3); header += ProcessPropertyDetails(item.ForceAccuracyBonus, componentType.Name, "Force Accuracy", 3); header += ProcessPropertyDetails(item.ForceDefenseBonus, componentType.Name, "Force Defense", 3); header += ProcessPropertyDetails(item.ElectricalPotencyBonus, componentType.Name, "Electrical Potency", 3); header += ProcessPropertyDetails(item.MindPotencyBonus, componentType.Name, "Mind Potency", 3); header += ProcessPropertyDetails(item.LightPotencyBonus, componentType.Name, "Light Potency", 3); header += ProcessPropertyDetails(item.DarkPotencyBonus, componentType.Name, "Dark Potency", 3); header += ProcessPropertyDetails(item.ElectricalDefenseBonus, componentType.Name, "Electrical Defense", 3); header += ProcessPropertyDetails(item.MindDefenseBonus, componentType.Name, "Mind Defense", 3); header += ProcessPropertyDetails(item.LightDefenseBonus, componentType.Name, "Light Defense", 3); header += ProcessPropertyDetails(item.DarkDefenseBonus, componentType.Name, "Dark Defense", 3); header += ProcessPropertyDetails(item.LuckBonus, componentType.Name, "Luck", 3); header += ProcessPropertyDetails(item.MeditateBonus, componentType.Name, "Meditate", 3); header += ProcessPropertyDetails(item.RestBonus, componentType.Name, "Rest", 3); header += ProcessPropertyDetails(item.MedicineBonus, componentType.Name, "Medicine", 3); header += ProcessPropertyDetails(item.HPRegenBonus, componentType.Name, "HP Regen", 3); header += ProcessPropertyDetails(item.FPRegenBonus, componentType.Name, "FP Regen", 3); header += ProcessPropertyDetails(item.BaseAttackBonus, componentType.Name, "BAB", 3, 6); header += ProcessPropertyDetails(item.StructureBonus, componentType.Name, "Structure Bonus", 3); header += ProcessPropertyDetails(item.SneakAttackBonus, componentType.Name, "Sneak Attack", 3); header += ProcessPropertyDetails(item.DamageBonus, componentType.Name, "Damage", 3); header += ProcessPropertyDetails(item.StrengthBonus, componentType.Name, "STR", 3); header += ProcessPropertyDetails(item.DexterityBonus, componentType.Name, "DEX", 3); header += ProcessPropertyDetails(item.ConstitutionBonus, componentType.Name, "CON", 3); header += ProcessPropertyDetails(item.WisdomBonus, componentType.Name, "WIS", 3); header += ProcessPropertyDetails(item.IntelligenceBonus, componentType.Name, "INT", 3); header += ProcessPropertyDetails(item.CharismaBonus, componentType.Name, "CHA", 3); header += ProcessPropertyDetails(item.DurationBonus, componentType.Name, "Duration", 3); SetPageHeader("SalvagePage", header); // Remove the temporary copy from the game world. item.Destroy(); }