/// <summary> /// A player interacts to a networked object. /// </summary> /// <param name="value">Incoming message</param> private void OnInteract(string[] value) { Interactor.Interact readMessage = SNet_Network.SNetMessage.ReadMessage <Interactor.Interact>(value[0]); readMessage.s = ulong.Parse(value[1]); SNet_Identity id = null; if ( SNet_Identity.find(readMessage.i, out id)) { // sender interacts the item. SNet_Identity sender = null; if (SNet_Identity.find(readMessage.s, out sender)) { switch (id.gameObject.tag) { case "Item": // Loot weapon or something Item item = id.GetComponent <Item>(); if (item != null && sender.controller != null) { Item.PlayerItem pi = sender.controller.GetComponent <PlayerInventory>().inv.l.Find(x => x.prefabName == item.item.prefabName); if (pi != null && pi.maxammo <= pi.ammo) { return; // Maximum ammo reached. } item.item.looter = sender.controller.GetComponent <SNet_Identity>().identity; SNet_Network.instance.Send_Message(item.item); Destroy(item.gameObject); } break; case "Vehicle": // Get into a vehicle SNet_Vehicle vehicle = id.GetComponent <SNet_Vehicle>(); int vIndex = vehicle.vehicle.p.FindIndex(x => x == sender.identity); if (vIndex != -1) { vehicle.vehicle.p [vIndex] = 0; vehicle.VehicleUpdate(); return; } vIndex = vehicle.vehicle.p.FindIndex(x => x == 0); // Empty seat if (!sender.controller.isDead && vIndex != -1 && !vehicle.vehicle.p.Contains(sender.identity)) { vehicle.vehicle.p[vIndex] = sender.identity; vehicle.VehicleUpdate(); } break; } } } }
public void AddItem(Item.PlayerItem item) { Item.PlayerItem current = inv.l.Find(x => x.prefabName == item.prefabName); if (current != null) { current.ammo = (ushort)Mathf.Clamp(current.ammo + item.ammo, 0, item.maxammo); } else { inv.l.Add(item); /* * EQUIP IF IT's THE FIRST ITEM * */ if (isLocalPlayer) { if (inv.l.Count == 1) { Request_Equip(item.prefabName); } } } if (isLocalPlayer && InventorySelector.current != null) { if (!UpdateCurrentAmmo()) { InventorySelector.current.UpdateInventory(); InventorySelector.current.OnEnable(); // Update ammos SyncInventory(); } } }
public void OnEnable() { UpdateInventory(); /* * UPDATE AMMO * */ foreach (Transform t in holder) { if (t.gameObject.activeSelf) { Item.PlayerItem pi = PlayerInventory.localPlayer.inv.l.Find(x => x.prefabName == t.name); Text ammo = t.GetComponentInChildren <Text>(); ammo.enabled = pi.ammo > 0; ammo.text = PlayerInventory.localPlayer.inv.l.Find(x => x.prefabName == t.name).ammo.ToString(); } } }
/// <summary> /// Item looted by player. /// </summary> /// <param name="value">Incoming message</param> private void OnPlayerItem(string[] value) { Item.PlayerItem readMessage = SNet_Network.SNetMessage.ReadMessage <Item.PlayerItem>(value[0]); readMessage.s = ulong.Parse(value[1]); if (!SNet_Network.instance.isHost(readMessage.s)) { return; // only host can send this } SNet_Identity id = null; if ( SNet_Identity.find(readMessage.looter, out id)) { if (id.controller != null && id.controller.inventory != null) { id.controller.inventory.AddItem(readMessage); } } }
public void Equip(string prefabName) { if (prefab != null) { if (prefab.item.prefabName == prefabName) { return; } prefab.SendMessage("Detach"); Destroy(prefab.gameObject); } if (string.IsNullOrEmpty(prefabName)) { if (prefab != null) { Destroy(prefab.gameObject); } } Item.PlayerItem willEquip = inv.l.Find(x => x.prefabName == prefabName); if (willEquip == null) { willEquip = new Item.PlayerItem(); } inv.ci = willEquip; identity.controller.isShooting = false; prefab = null; if (!string.IsNullOrEmpty(prefabName)) { Transform Tprefab = ResourcesLoader.prefabs.Find(x => x.name == prefabName); Transform tBone = identity.animator.animator.GetBoneTransform(Tprefab.GetComponent <Item>().item.targetBone); prefab = Instantiate(Tprefab, tBone).GetComponent <Item>(); prefab.name = prefabName; Destroy(prefab.GetComponent <CustomScale>()); Destroy(prefab.GetComponent <Snet_SceneObject_AutoSpawn>()); Collider cldr = prefab.GetComponent <Collider>(); if (cldr != null) { cldr.enabled = false; } Rigidbody rb = prefab.GetComponent <Rigidbody>(); if (rb != null) { rb.isKinematic = true; } DestroyIn dIn = prefab.GetComponent <DestroyIn>(); if (dIn != null) { dIn.enabled = false; } IKWeapon attacher = prefab.GetComponent <IKWeapon>(); if (attacher != null) { attacher.Attach(); } } SetState(); if (isLocalPlayer) { if (Crosshair.instance == null || Crosshair.instance.normal == null) { return; } foreach (Transform t in Crosshair.instance.normal.transform) { t.GetComponent <UIVisibility>().Open(t.name == inv.ci.crossHair_Normal); } foreach (Transform t in Crosshair.instance.aimed.transform) { t.GetComponent <UIVisibility>().Open(t.name == inv.ci.crossHair_Aimed); } if (!UpdateCurrentAmmo()) { SyncInventory(); } } }