public InventoryData(LootableCorpse corpse) { for (int i = 0; i < corpse.containers.Length; i++) { items.AddRange(GetItems(corpse.containers[i], (ContainerType)i)); } }
private object CanLootEntity(BasePlayer player, LootableCorpse corpse) { if (CanLootCorpse) { return(null); } if (CheckHelper(player, corpse as BaseEntity)) { return(null); } if (IsFriend(corpse.playerSteamID, player.userID)) { return(null); } if (UsePermission && !permission.UserHasPermission(corpse.playerSteamID.ToString(), CorpsePerm)) { return(null); } if (corpse.playerSteamID < 76561197960265728L || player.userID == corpse.playerSteamID) { return(null); } SendReply(player, lang.GetMessage("OnTryLootCorpse", this, player.UserIDString)); return(true); }
public virtual void SetupCorpse(BaseCorpse corpse) { corpse.flags = flags; LootableCorpse component = corpse.GetComponent <LootableCorpse>(); if ((bool)component) { component.TakeFrom(inventory); } }
private void OnEntitySpawned(BaseNetworkable entity) { LootableCorpse corpse = entity?.GetComponent <LootableCorpse>(); if (corpse == null || corpse is NPCPlayerCorpse) { return; } TakePlayerItems(corpse); }
private object CanLootEntity(BasePlayer player, LootableCorpse corpse) { if (!(corpse is PlayerCorpse)) { return(null); } if (player.serverInput.IsDown(BUTTON.FIRE_PRIMARY) == false) { return(null); } PlayerData.Get(player).StartDragingCorpse(corpse); return(false); }
private void DropBodyOfPlayer(BasePlayer player) { BaseCorpse corpse = player.DropCorpse("assets/prefabs/player/player_corpse.prefab"); if (corpse != null) { LootableCorpse lootable = corpse as LootableCorpse; if (lootable != null) { ItemContainer[] source = new ItemContainer[] { player.inventory?.containerMain, player.inventory?.containerWear, player.inventory?.containerBelt }; lootable.TakeFrom(source); lootable.playerName = player.displayName; lootable.playerSteamID = player.userID; } corpse.SpawnAsMapEntity(); } }
private void OnEntitySpawned(LootableCorpse corpse) { if (corpse == null || corpse.IsDestroyed) { return; } foreach (var container in corpse.containers) { if (container == null) { continue; } foreach (var item in container.itemList.ToArray()) { item.GetHeldEntity()?.Kill(); item.DoRemove(); } } corpse.Kill(); }
public void StartInspecting(BasePlayer p, BasePlayer t) { player = p; target = t; var corpse = GameManager.server.CreateEntity("assets/prefabs/player/player_corpse.prefab") as BaseCorpse; if (corpse == null) { return; } corpse.parentEnt = null; corpse.transform.position = new Vector3(player.transform.position.x, -100, player.transform.position.z); corpse.CancelInvoke("RemoveCorpse"); view = corpse as LootableCorpse; if (view == null) { return; } var source = new[] { target.inventory.containerMain, target.inventory.containerWear, target.inventory.containerBelt }; view.containers = new ItemContainer[source.Length]; for (var i = 0; i < source.Length; i++) { view.containers[i] = source[i]; view.containers[i].playerOwner = target; } view.playerName = $"Inspecting {target.displayName}"; view.playerSteamID = 0; view.enableSaving = false; view.Spawn(); view.GetComponentInChildren <Rigidbody>().useGravity = false; BeginLooting(); InvokeRepeating("Inspect", 0f, 0.1f); }
private void ProcessItems(LootableCorpse corpse, int container) { string cont = ""; switch (container) { case 1: cont = "wear"; break; case 2: cont = "belt"; break; default: cont = "main"; break; } ulong ID = corpse.playerSteamID; var plyrInv = playerInv[ID]; var items = corpse.containers[container].itemList; var percentage = GetPercentage(ID); double amount = (float)(items.Count * percentage) / 100; amount = items.Count - amount; if (percentage == 0) { amount = items.Count; } amount = Math.Round(Convert.ToDouble(amount), 0, MidpointRounding.AwayFromZero); for (int i = 0; i < amount; i++) { var num = UnityEngine.Random.Range(0, items.Count); var item = items[num]; var savedItem = ProcessItem(item, cont); plyrInv.Add(savedItem); items.Remove(item); } ; }
private void RemoveInfiniteComponentsFromCorpse(LootableCorpse corpse) { //TODO : WTF how compo + map are removed if nothing is available here ???????????????? Debug($"Corpse"); //var container = corpse.containers[0]; ////var containerList = new List<Item>(); //Debug($"Remove comp : Corpse {container.capacity} slots"); ////containerList.AddRange(container.itemList.Where(item => !_compo.Contains(item.info.itemid))); //container.itemList.AddRange(container.itemList.Where(item => _compo.Contains(item.info.itemid))); ////container.itemList.Clear(); ////container.capacity = BasicInventorySlots; //foreach (var item in container.itemList) //{ // item.position = item.position - _compo.Count; // //container.Take(null, componentToRemove, container.GetAmount(componentToRemove, false)); //} ////container.itemList = containerList; }
void CloseInventoryView(BasePlayer player, LootableCorpse view) { if (onlinePlayers[player].View == null) { return; } for (int i = 0; i < view.containers.Length; i++) { view.containers[i] = new ItemContainer(); } if (player.inventory.loot.IsLooting()) { player.SendConsoleCommand("inventory.endloot", null); } onlinePlayers[player].View = null; onlinePlayers[player].Target = null; view.KillMessage(); }
void Awake() { corpse = GetComponent <LootableCorpse>(); container = corpse.containers[0]; container.onItemAddedRemoved += (item, insert) => { if (!insert) { return; } var batteryCount = instance.batteries[cupboardId]; if (batteryCount >= instance.maxBatteryCount) { return; } int maxAccept = Convert.ToInt32(instance.maxBatteryCount - batteryCount); if (item.amount > maxAccept) { batteryCount = instance.maxBatteryCount; item.amount -= maxAccept; if (!item.MoveToContainer(player.inventory.containerMain)) { item.Drop(player.GetDropPosition(), player.GetDropVelocity()); } instance.NextTick(Close); } else { batteryCount += item.amount; item.Remove(); } instance.batteries[cupboardId] = batteryCount; instance.UpdateSelected(cupboardId); }; container.canAcceptItem += item => item.info.shortname == "battery.small"; }
private object CanLootEntity(BasePlayer player, LootableCorpse corpse) { return(CanLoot(corpse.ShortPrefabName, player)); }
public void StartDragingCorpse(LootableCorpse corpse) { Corpse = corpse; _timer?.Destroy(); _timer = _plugin.timer.Every(0.1f, TimerLoop); }
private void TakePlayerItems(LootableCorpse corpse) { Dictionary <ContainerType, float> lossPercentage = GetLossPercentage(corpse.playerSteamID); if (lossPercentage == null || lossPercentage.Sum(x => x.Value) == 300) { return; } if (lossPercentage.Sum(x => x.Value) == 0) { storedData.AddData(corpse); foreach (ItemContainer container in corpse.containers) { StripContainer(container); } } else { StoredData.InventoryData inventoryData = new StoredData.InventoryData(); for (int i = 0; i < corpse.containers.Length; i++) { ItemContainer container = corpse.containers[i]; float percentage = Mathf.Clamp(lossPercentage[(ContainerType)i], 0, 100); if (container.itemList.Count == 0) { return; } if (percentage == 0) { for (int y = container.itemList.Count - 1; y >= 0; y--) { Item item = container.itemList[y]; inventoryData.AddItem(item, (ContainerType)i); item.RemoveFromContainer(); item.Remove(); container.itemList.Remove(item); } } else { int amount = container.itemList.Count - Convert.ToInt32(((float)container.itemList.Count * (float)percentage) / 100); for (int y = 0; y < amount; y++) { Item item = container.itemList.GetRandom(); inventoryData.AddItem(item, (ContainerType)i); item.RemoveFromContainer(); item.Remove(); container.itemList.Remove(item); } } } storedData.AddData(corpse.playerSteamID, inventoryData); } ItemManager.DoRemoves(); }
public void AddData(LootableCorpse corpse) => storedInventory[corpse.playerSteamID] = new InventoryData(corpse);
void Awake() { corpse = GetComponent <LootableCorpse>(); container = corpse.containers[0]; container.onItemAddedRemoved += (item, b) => { if (b == false) { if (!removed) { removed = true; return; } container.itemList.ToList().ForEach(p => { removed = false; p.RemoveFromContainer(); p.Remove(); }); if (ammo > 0) { ((BaseProjectile)item.GetHeldEntity()).primaryMagazine.contents = ammo; ammo = -1; } if (mods != null) { foreach (var mod in mods) { mod.MoveToContainer(item.contents); } mods = null; } insert = false; removed = false; canAccept = true; if (ui && player != null) { instance.DestroyUI(player); ui = false; } } else { if (!insert) { page = 0; def = item.info; item.RemoveFromContainer(); insert = true; skins = instance.GetSkins(def); if (skins.Count > 1) { if (!ui) { instance.DrawUI(player); ui = true; } else if (ui) { instance.DestroyUI(player); ui = false; } } container.capacity = 19; var heldEntity = item.GetHeldEntity() as BaseProjectile; if (heldEntity?.primaryMagazine != null) { ammo = heldEntity.primaryMagazine.contents; heldEntity.primaryMagazine.contents = 0; } item.amount = 1; if (item.contents != null && item.contents.itemList.Count > 0) { mods = new List <Item>(); for (int i = item.contents.itemList.Count - 1; i >= 0; i--) { var mod = item.contents.itemList[i]; if (mod == null) { continue; } mod.RemoveFromContainer(); mods.Add(mod); } } for (int i = 0; i < skins[0].Count; i++) { var skin = skins[0][i]; insertItem = InventoryUtils.CloneItem(item, skin); insertItem.MoveToContainer(container, i, false); } this.item = item; insertItem = null; canAccept = false; removed = true; } } }; container.canAcceptItem += item => { if (insertItem != item && instance.GetSkins(item.info)[0].Count <= 1) { return(false); } return(canAccept || insertItem == item); }; }