Beispiel #1
0
    public static AmmoBox GetFromDS(DataStructure part_data, DataStructure specific_data, Transform parent)
    {
        GameObject box_obj = Object.Instantiate(part_data.Get <GameObject>("source"));

        box_obj.transform.position = parent.position + parent.rotation * specific_data.Get <Vector3>("position");
        box_obj.transform.rotation = parent.rotation * specific_data.Get <Quaternion>("rotation");
        box_obj.transform.SetParent(parent, true);

        if (!Globals.ammunition_insts.ContainsKey(part_data.Get <string>("ammotype")))
        {
            throw new System.Exception(string.Format("No such ammo: {0}", part_data.Get <string>("ammotype")));
        }

        AmmoBox box_instance = new AmmoBox((float)part_data.Get <ushort>("hp"), box_obj, part_data.Get <float>("mass"))
        {
            AmmoType       = Globals.ammunition_insts[part_data.Get <string>("ammotype")],
            Ammunition     = part_data.Get <System.UInt16>("ammo"),
            description_ds = part_data,
        };

        box_instance.HP             = specific_data.Get("hp", box_instance.InitHP, quiet: true);
        box_instance.main_component = specific_data.Get("main component", true, quiet: true);

        box_instance.Ammunition = (uint)specific_data.Get("ammo", (int)box_instance.FullAmmunition, quiet: true);

        BulletCollisionDetection box_behaviour = Loader.EnsureComponent <BulletCollisionDetection>(box_obj);

        box_behaviour.Part = box_instance;

        return(box_instance);
    }
Beispiel #2
0
    void PlayerPhysicalMovement_OnCollidedWithSomething(GameObject e)
    {
        AmmoBox   box       = e.GetComponent <AmmoBox>();
        FoodCrate foodCrate = e.GetComponent <FoodCrate>();

        if (box != null)
        {
            bool needsToReload = false;
            if (Ammo == 0)
            {
                needsToReload = true;
            }
            Ammo += box.Ammo;
            GameObject.Destroy(box.gameObject);
            if (needsToReload)
            {
                OnReceivedAmmo(this);
            }
        }
        if (foodCrate != null)
        {
            Food += foodCrate.Food;
            GameObject.Destroy(foodCrate.gameObject);
        }
    }
Beispiel #3
0
    public void SpawnAmmoBox()
    {
        AmmoBox ammoBox = _ammoBoxScene.Instance() as AmmoBox;

        GetNode("AmmoBoxHolder").AddChild(ammoBox);
        ammoBox.Position = new Vector2(GD.Randi() % 2200, 400);
    }
Beispiel #4
0
 public void on_raycast_collision(RaycastHit hit)
 {
     if (hit.collider.tag == "Weapon" && weapon_slots.can_pickup())
     {
         weapon_slots.pick_up(hit.collider.gameObject);
         weapon_script = weapon_slots.get_script();
     }
     else if (hit.collider.tag == "Backpack" && backpack_slot.can_pickup())
     {
         backpack_slot.pick_up(hit.collider.gameObject);
     }
     else if (hit.collider.tag == "Ammo")
     {
         AmmoBox ammobox = hit.collider.gameObject.GetComponent <AmmoBox>();
         ammobox.on_pickup();
         player_inventory.pick_up(ammobox);         //w inventory musze wiedzieci ile mam ammo i usuwac puste pudelka (to juz chyba zrobione)
     }
     else if (hit.collider.tag == "Item")
     {
         Debug.Log("item hit");
         Item item = hit.collider.gameObject.GetComponent <Item>();
         item.on_pickup();
         player_inventory.pick_up(item);
     }
 }
Beispiel #5
0
        public static bool Prefix(AmmoBox __instance)
        {
            int[] ammoTypes = __instance._ccm.Classes.SafeGet(__instance._ccm.CurClass).ammoTypes;

            switch (EventHandlers.eventmode)
            {
            case SANYA_GAME_MODE.CLASSD_INSURGENCY:
            {
                if (__instance._ccm.CurClass == RoleType.ClassD && Configs.classd_insurgency_classd_ammo.Count > 0)
                {
                    ammoTypes = Configs.classd_insurgency_classd_ammo.ToArray();
                }
                break;
            }
            }

            __instance.Networkamount = string.Concat(new object[]
            {
                ammoTypes[0],
                ":",
                ammoTypes[1],
                ":",
                ammoTypes[2]
            });

            return(false);
        }
    void Start()
    {
        ammoBox   = GetComponent <AmmoBox>();
        healthBox = GetComponent <HealthBox>();

        traitComponent = GetComponent <TraitComponent>();

        UpdateParams();
    }
Beispiel #7
0
 private void CheckAmmoBoxCollision()
 {
     if (AmmoBox == null || !AmmoBox.CollidePlayer(Player))
     {
         return;
     }
     Ammo   += 5;
     AmmoBox = null;
     OnCollideBonus(new ModelEventArgs());
 }
    override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        BotUtility botUtility = animator.GetComponentInParent <BotUtility>();
        AmmoBox    target     = botUtility.FindClosestAmmo();

        if (!botUtility.NavigateTo(target))
        {
            animator.SetTrigger("failed");
        }
    }
Beispiel #9
0
 private void MoveAmmoBox()
 {
     if (AmmoBox == null)
     {
         return;
     }
     AmmoBox.Move();
     if (AmmoBox.Y >= Height)
     {
         AmmoBox = null;
     }
 }
Beispiel #10
0
    private void SpawnAmmoBox()
    {
        // Spawn each type of ammo boxes
        // Create powerUP object
        AmmoBox box = Instantiate(AmmoManager.instance.ammoBoxes[UnityEngine.Random.Range(0, AmmoManager.instance.ammoBoxes.Length)], ammoBoxSpawnPoint.position, Quaternion.identity);

        // On pickup summon next
        box.OnPickUP += AmmoBoxPhase;

        // If player does not pick up in time - spawn new
        box.OnDestroy += AmmoBoxPhase;
    }
Beispiel #11
0
 public void PickAmmo(AmmoBox ammo)
 {
     if (inventoryAmmos.ContainsKey(ammo.ammoType))
     {
         inventoryAmmos[ammo.ammoType] += ammo.count;
     }
     else
     {
         inventoryAmmos.Add(ammo.ammoType, ammo.count);
     }
     state = AIState.WalkingOnPath;
 }
Beispiel #12
0
    public void AddAmmoFromBox(AmmoBox ammoBox)
    {
        int addToAmmo = ammoBox.GetAmmo();

        if (ammoBox.GetAmmoType() == WeaponAmmo.Pistol)
        {
            pistolAmmo += addToAmmo;
        }
        else
        {
            rifleAmmo += addToAmmo;
        }
    }
Beispiel #13
0
    void LateUpdate()
    {
        if (Owner.IsAlive == false)
        {
            return;
        }

        AmmoBox a = Mission.Instance.GameZone.GetNearestDroppedAmmoClip(Owner, 0.1f);

        if (a != null)
        {
            Owner.WeaponComponent.AddAmmoToWeapon(a);
        }
    }
Beispiel #14
0
    public void ServerDropAll()
    {
        foreach (Inventory.SyncItemInfo syncItemInfo in this.items)
        {
            this.SetPickup(syncItemInfo.id, syncItemInfo.durability, base.transform.position, this.kamera.transform.rotation, base.transform.rotation);
        }
        AmmoBox component = base.GetComponent <AmmoBox>();

        for (int i = 0; i < 3; i++)
        {
            if (component.GetAmmo(i) != 0)
            {
                this.SetPickup(component.types[i].inventoryID, (float)component.GetAmmo(i), base.transform.position, this.kamera.transform.rotation, base.transform.rotation);
            }
        }
        this.items.Clear();
        component.Networkamount = "0:0:0";
    }
Beispiel #15
0
            private AmmoBox FindClosestAmmo(int ammoType)
            {
                distanceToAmmo = float.PositiveInfinity;
                AmmoBox closestBox = null;

                foreach (AmmoBox ammoBox in AmmoBox.ammoBoxes)
                {
                    if (ammoBox.enabled && ammoBox.ammoType == ammoType)
                    {
                        if (Vector3.Distance(ammoBox.transform.position, this.transform.position) < distanceToAmmo)
                        {
                            distanceToAmmo = Vector3.Distance(ammoBox.transform.position, this.transform.position);
                            closestBox     = ammoBox;
                        }
                    }
                }
                return(closestBox);
            }
    public override void AddAmmoToWeapon(AmmoBox a)
    {
        if (Owner.IsServer == false)
        {
            return;
        }

        if (Weapons.ContainsKey(a.ForWeaponType) && Weapons[a.ForWeaponType].IsFull == false)
        {
            Weapons[a.ForWeaponType].AddAmmo(a.Ammo);

            a.Disable();

            Owner.NetworkView.RPC("ClientSetAmmo",
                                  Owner.NetworkView.owner,
                                  a.ForWeaponType,
                                  Weapons[a.ForWeaponType].ClipAmmo,
                                  Weapons[a.ForWeaponType].WeaponAmmo);
        }
    }
        private static bool Prefix(AmmoBox __instance, int type, uint toDrop)
        {
            try
            {
                if (!__instance._iawRateLimit.CanExecute(true))
                {
                    return(false);
                }

                toDrop = Math.Min(toDrop, __instance.amount[type]);
                if (toDrop < 15u)
                {
                    return(false);
                }

                var player = __instance.GetPlayer();
                var item   = player.ItemInHand;

                SynapseController.Server.Events.Player.InvokePlayerDropAmmoEvent(player, item, ref toDrop, ref type, out var allow);
                if (item != null)
                {
                    SynapseController.Server.Events.Player.InvokePlayerItemUseEvent(player, item, Api.Events.SynapseEventArguments.ItemInteractState.Finalizing, ref allow);
                }

                if (!allow)
                {
                    return(false);
                }

                __instance.amount[type] -= toDrop;
                __instance._inv.SetPickup(__instance.types[type].inventoryID, toDrop, __instance.transform.position, __instance._inv.camera.transform.rotation, 0, 0, 0);
                return(false);
            }
            catch (Exception e)
            {
                Synapse.Api.Logger.Get.Error($"Synapse-Event: PlayerAmmoDrop failed!!\n{e}\nStackTrace:\n{e.StackTrace}");
                return(false);
            }
        }
Beispiel #18
0
    public void TakeAmmo(AmmoBox ammo)
    {
        int type = (int)ammo.ammoType;

        if (currentAmmo[type] >= maxAmmo[type])
        {
            return;
        }
        int cap = ammo.ammoCount + currentAmmo[type];

        if (cap <= maxAmmo[type])
        {
            currentAmmo[type] = cap;
            Destroy(ammo.gameObject);
        }
        else
        {
            currentAmmo[type] = maxAmmo[type];
            ammo.ammoCount    = cap - maxAmmo[type];
        }
        playerController.audioSource.PlayOneShot(ammoPickupSound);
        onAmmoChange();
    }
Beispiel #19
0
    void Osuma(PhysicsObject ammus, PhysicsObject kohde)
    {
        bool tuhotaankoAmmus = true;

        rynkky.Ammo.Value--;

        pisteLaskuri.Value = rynkky.Ammo.Value;
        if (kohde.Tag.Equals("vihu"))
        {
            Random ohi    = new Random();
            int    dodged = ohi.Next(1, 10);
            if (dodged > 6)
            {
                kohde.Tag = "dodged";
            }
            else
            {
                kohde.Tag = "osui";
            }

            int      monsterinSijainti = 0;
            Monsteri jotain            = vihut[monsterinSijainti];
            while (monsterinSijainti < vihut.Capacity)
            {
                if (vihut[monsterinSijainti].Tag.Equals("dodged"))
                {
                    jotain = vihut[monsterinSijainti];

                    break;
                }
                if (vihut[monsterinSijainti].Tag.Equals("osui"))
                {
                    jotain = vihut[monsterinSijainti];

                    break;
                }

                monsterinSijainti++;
            }

            if (jotain.Tag.Equals("dodged"))
            {
                tuhotaankoAmmus = false;
                jotain.nopeus  += 30;
                FollowerBrain VihunAivot = new FollowerBrain(pelaaja1)
                {
                    Speed         = jotain.nopeus,
                    DistanceFar   = 900,
                    DistanceClose = 10
                };
                jotain.Brain = VihunAivot;
            }
            if (jotain.Tag.Equals("osui"))
            {
                jotain.Elamat -= 25;
                if (jotain.Elamat <= 0)
                {
                    vihollisteMaara--;
                    vihut.Remove(vihut[monsterinSijainti]);
                    jotain.Destroy();
                    rynkky.Ammo.Value += 10;
                    pisteLaskuri.Value = rynkky.Ammo.Value;

                    //vihun taposta ammobox
                    ammo       = new AmmoBox(30, 30);
                    ammo.Tag   = "Ammo";
                    ammo.Image = ammoBox;

                    AddCollisionHandler(pelaaja1, ammo, Keraa);
                    if (ammo.ammoBoxiKentalla == false)
                    {
                        ammo.ammoBoxiKentalla = true;
                        ammo.Position         = jotain.Position;
                        Add(ammo);
                    }
                }
            }
            jotain.Tag = "vihu";
        }
        //pisteLaskuri.Value--;
        if (tuhotaankoAmmus)
        {
            ammus.Destroy();
        }



        if (vihollisteMaara == 0)
        {
            Kierros();
        }
    }
 public static void Reload(this IAmmoBoxReloadable firearm, AmmoBox ammo)
 {
 }
 void OpenAmmoBox(AmmoBox ammoBox)
 {
     ammoBox.OpenBox();
     playerInventory.AddAmmoFromBox(ammoBox);
     CollisionInteraction?.Invoke(null);
 }
    public void Initialize(int pregiven_id = -1)
    {
        //Read the data
        DataStructure data = data_ == null ? data_ = DataStructure.Load(config_path, "data", null) : data_;

        // Variables used to place weapons
        Dictionary <string, Turret[]> weapon_arrays = new Dictionary <string, Turret[]> ();

        //First set up some basic things
        Ship own_ship = new Ship(gameObject, friendly, data.Get <string>("name"), pregiven_id);

        ShipControl ship_control = Loader.EnsureComponent <ShipControl> (gameObject);
        RCSFiring   rcs_comp     = Loader.EnsureComponent <RCSFiring> (gameObject);

        own_ship.control_script = ship_control;
        own_ship.rcs_script     = rcs_comp;
        own_ship.config_path    = config_path;
        own_ship.TurretAim      = own_ship.Target = Target.None;

        ship_control.myship = own_ship;

        // AI
        LowLevelAI ai = Loader.EnsureComponent <LowLevelAI>(gameObject);

        ai.Start_();
        ai.HasHigherAI = !player;

        HighLevelAI high_ai = own_ship.high_ai;

        //high_ai.Load(child.GetChild("ai data"));

        high_ai.low_ai = ai;

        // Instantiates normal UI marker
        TgtMarker.Instantiate(own_ship, 1);

        foreach (KeyValuePair <string, DataStructure> child_pair in data_.children)
        {
            // Do this for each "command" in the datafile
            DataStructure child     = child_pair.Value;
            string        comp_name = child.Name;

            DataStructure part_data;
            if (child.Contains <string>("part"))
            {
                string part_name = child.Get <string>("part");
                part_data = Globals.parts.Get <DataStructure>(part_name);
            }
            else
            {
                part_data = child;
            }
            switch (comp_name)
            {
            case "rcs":
                ship_control.RCS_ISP = child.Get <float>("isp");

                rcs_comp.rcs_mesh           = child.Get <GameObject>("mesh");
                rcs_comp.strength           = child.Get <float>("thrust");
                rcs_comp.angular_limitation = child.Get <float>("angular limitation", 1);
                rcs_comp.positions          = child.Get <Vector3[]>("positions");
                rcs_comp.directions         = child.Get <Quaternion[]>("orientations");
                break;

            case "ship":
                if (rcs_comp != null)
                {
                    rcs_comp.center_of_mass = child.Get <Vector3>("centerofmass");
                }
                own_ship.offset = child.Get <Vector3>("centerofmass");
                break;

            case "AI":
                high_ai.Load(child.GetChild("ai data"));
                break;

            case "engine":
                if (!include_parts)
                {
                    break;
                }
                Engine.GetFromDS(part_data, child, transform);
                break;

            case "tank":
                if (!include_parts)
                {
                    break;
                }
                FuelTank.GetFromDS(part_data, child, transform);
                break;

            case "fix weapon":
                if (!include_parts)
                {
                    break;
                }
                Weapon.GetFromDS(part_data, child, transform);
                break;

            case "ammobox":
                if (!include_parts)
                {
                    break;
                }
                AmmoBox.GetFromDS(part_data, child, transform);
                break;

            case "missiles":
                if (!include_parts)
                {
                    break;
                }
                MissileLauncher.GetFromDS(part_data, child, transform);
                break;

            case "armor":
                if (!include_parts)
                {
                    break;
                }
                Armor.GetFromDS(child, own_ship);
                break;

            default:
                if (comp_name.StartsWith("turr-"))
                {
                    if (!include_parts)
                    {
                        break;
                    }
                    var tg = TurretGroup.Load(child, own_ship);
                    weapon_arrays [comp_name.Substring(5)] = tg.TurretArray;
                    ship_control.turretgroup_list.Add(new TurretGroup(Target.None, tg.TurretArray, tg.name)
                    {
                        own_ship = own_ship
                    });
                }
                break;
            }
        }

        // Initializes parts
        foreach (BulletCollisionDetection part in GetComponentsInChildren <BulletCollisionDetection>())
        {
            part.Initialize();
        }
        ship_control.turrets = weapon_arrays;
    }
Beispiel #23
0
        private static bool Prefix(CharacterClassManager __instance, bool lite = false, bool escape = false)
        {
            Role role = __instance.Classes.SafeGet(__instance.CurClass);

            if (!__instance._wasAnytimeAlive && __instance.CurClass != RoleType.Spectator && __instance.CurClass != RoleType.None)
            {
                __instance._wasAnytimeAlive = true;
            }

            __instance.InitSCPs();
            __instance.AliveTime = 0f;
            switch (role.team)
            {
            case Team.MTF:
                AchievementManager.Achieve("arescue");
                break;

            case Team.CHI:
                AchievementManager.Achieve("chaos");
                break;

            case Team.RSC:
            case Team.CDP:
                __instance.EscapeStartTime = (int)Time.realtimeSinceStartup;
                break;
            }

            __instance.GetComponent <Inventory>();
            try
            {
                __instance.GetComponent <FootstepSync>().SetLoudness(role.team, role.roleId.Is939());
            }
            catch
            {
            }

            if (NetworkServer.active)
            {
                Handcuffs component = __instance.GetComponent <Handcuffs>();
                component.ClearTarget();
                component.NetworkCufferId = -1;
            }

            if (role.team != Team.RIP)
            {
                if (NetworkServer.active && !lite)
                {
                    Vector3 constantRespawnPoint = NonFacilityCompatibility.currentSceneSettings.constantRespawnPoint;
                    if (constantRespawnPoint != Vector3.zero)
                    {
                        __instance._pms.OnPlayerClassChange(constantRespawnPoint, 0f);
                    }
                    else
                    {
                        GameObject randomPosition = CharacterClassManager._spawnpointManager.GetRandomPosition(__instance.CurClass);
                        Vector3    spawnPoint;
                        float      rotY;

                        if (randomPosition != null)
                        {
                            spawnPoint = randomPosition.transform.position;
                            rotY       = randomPosition.transform.rotation.eulerAngles.y;
                            AmmoBox component1 = __instance.GetComponent <AmmoBox>();
                            if (escape && __instance.KeepItemsAfterEscaping)
                            {
                                Inventory component2 = PlayerManager.localPlayer.GetComponent <Inventory>();
                                for (ushort index = 0; index < 3; ++index)
                                {
                                    if (component1[index] >= 15U)
                                    {
                                        component2.SetPickup(component1.types[index].inventoryID, component1[index], randomPosition.transform.position, randomPosition.transform.rotation, 0, 0, 0);
                                    }
                                }
                            }

                            component1.ResetAmmo();
                        }
                        else
                        {
                            spawnPoint = __instance.DeathPosition;
                            rotY       = 0f;
                        }

                        var ev = new SpawningEventArgs(API.Features.Player.Get(__instance.gameObject), __instance.CurClass, spawnPoint, rotY);

                        Player.OnSpawning(ev);

                        __instance._pms.OnPlayerClassChange(ev.Position, ev.RotationY);
                    }

                    if (!__instance.SpawnProtected && __instance.EnableSP && __instance.SProtectedTeam.Contains((int)role.team))
                    {
                        __instance.GodMode        = true;
                        __instance.SpawnProtected = true;
                        __instance.ProtectedTime  = Time.time;
                    }
                }

                if (!__instance.isLocalPlayer)
                {
                    __instance.GetComponent <PlayerStats>().maxHP = role.maxHP;
                }
            }

            __instance.Scp0492.iAm049_2 = __instance.CurClass == RoleType.Scp0492;
            __instance.Scp106.iAm106    = __instance.CurClass == RoleType.Scp106;
            __instance.Scp173.iAm173    = __instance.CurClass == RoleType.Scp173;
            __instance.Scp939.iAm939    = __instance.CurClass.Is939();
            __instance.RefreshPlyModel();

            return(false);
        }
 void Awake()
 {
     ammoBox        = GetComponent <AmmoBox>();
     healthBox      = GetComponent <HealthBox>();
     traitComponent = GetComponent <Collectible>();
 }
Beispiel #25
0
        public override void Update(float deltaTime)
        {
            base.Update(deltaTime);

            parallax.Update(deltaTime);
            deltaTimes = deltaTime;
            time      += deltaTime;
            // Make it shoot the bullets from the ai at the player
            if (time >= 1.5)
            {
                if (tank2.tankObject != null && tank2.ammo > 0)
                {
                    Bullet bullet = new Bullet();
                    bullet.SetUpAI(tank2, tank);
                    bullets2.AddObject(bullet);
                    tank2.ammo -= 1;
                }
                time = 0;
            }

            // End Of Test

            if (tank2.tankObject != null)
            {
                bullets2.Update(deltaTime);
                tank2.MoveAI(deltaTime, tank, ammoBox);
                bullets2.Update(deltaTime);
                bullets2.Des(ref tank);
                if (ammoBox.IsOnAmmo(tank2.collider))
                {
                    tank2.ammo += ammoBox.ammo;
                    ammoBox     = new AmmoBox(1, 30);
                    ammoBox.Inits();
                }
            }
            else
            {
                if (!explodedTank2 && !tankAni.isActive)

                {
                    // Loads win level
                    if (aniTime >= 1)
                    {
                        ChangeLevel("02");
                    }
                    else
                    {
                        aniTime += deltaTime;
                    }
                }
                if (tankAni.isActive)
                {
                    explodedTank2 = true;
                }
            }
            if (tank.tankObject != null)
            {
                tank.Move(deltaTime);

                bullets.Des(ref tank2);
                bullets.Update(deltaTime);
                if (ammoBox.IsOnAmmo(tank.collider))
                {
                    tank.ammo += ammoBox.ammo;
                    ammoBox    = new AmmoBox(1, 30);
                    ammoBox.Inits();
                }
            }
            else
            {
                if (!explodedTank && !tankAni.isActive)
                {
                    // Loads win level
                    if (aniTime >= 1)
                    {
                        ChangeLevel("lose");
                    }
                    else
                    {
                        aniTime += deltaTime;
                    }
                }
                if (tankAni.isActive)
                {
                    explodedTank = true;
                }
            }
            if (IsMouseButtonPressed(MouseButton.MOUSE_LEFT_BUTTON) && !tank.stopTank)
            {
                if (tank.tankObject != null && tank.ammo > 0)
                {
                    Bullet bullet = new Bullet();

                    bullet.SetUp(tank);
                    bullets.AddObject(bullet);
                    tank.ammo -= 1;
                }
            }
        }
 public static void Reload(this IBoxAmmo firearm, AmmoBox ammo)
 {
 }
Beispiel #27
0
 public virtual void AddAmmoToWeapon(AmmoBox a)
 {
     //do nothing, only on server
 }
Beispiel #28
0
    public void TriggerScript()
    {
        Ray posit = cam.ScreenPointToRay(Input.mousePosition);

        RaycastHit hit;

        if (Physics.Raycast(posit, out hit, 5f))
        {
            // get object that player is currenlty aiming at
            if (hit.collider.GetComponent <Rigidbody>() != null)
            {
                // and apply its script
                Rigidbody col = hit.collider.GetComponent <Rigidbody>();
                if (col.GetComponent <PickUp>() != null && !pickedUpItem)
                {
                    puItem = col.GetComponent <PickUp>();
                    puItem.PickUpItem();
                    pickedUpItem = true;
                }
                else if (col.GetComponent <AmmoBox>() != null && reloadReady)
                {
                    AmmoBox oc = col.GetComponent <AmmoBox>();
                    oc.Reload();
                    reloadReady = false;
                }
                else if (col.GetComponent <Bell>() != null && !rangBell)
                {
                    Bell bell = col.GetComponent <Bell>();
                    bell.RingBell();
                    rangBell = true;
                }
                else if (col.GetComponent <BridgeCranck>() != null && !bridgeUp)
                {
                    BridgeCranck bc = col.GetComponent <BridgeCranck>();
                    bc.CranckIt();
                    bridgeUp = true;
                }
                else if (col.GetComponent <BazookaMechanics>() != null)
                //else if (hand.transform.childCount == 0 && col.GetComponent<BazookaMechanics>() != null)
                {
                    BazookaMechanics  bm = col.GetComponent <BazookaMechanics>();
                    DynamiteMechanics dm = player.GetComponent <DynamiteMechanics>();
                    dm.DisableRestrictions();
                    player.GetComponent <DynamiteMechanics>().enabled = false;
                    bm.PickUp();
                }
                else if (col.name.Contains("Dynamite"))
                {
                    if (hand.transform.childCount > 0)
                    {
                        hand.transform.DetachChildren();
                    }
                    //restrict gravity and position object into players hands
                    col.transform.GetComponent <CapsuleCollider>().enabled = false;
                    col.transform.SetParent(GameObject.Find("RightHand").transform);
                    col.GetComponent <Rigidbody>().constraints          = RigidbodyConstraints.FreezeAll;
                    col.transform.GetComponent <Rigidbody>().useGravity = false;
                    col.transform.position         = hand.transform.position;
                    col.transform.localEulerAngles = new Vector3(-90, 0, 0);
                    player.GetComponent <DynamiteMechanics>().enabled = true;

                    Destroy(GameObject.Find("DynamiteObject"));
                }
                else if (col.GetComponent <GrenadeLauncher>() != null)
                {
                    GrenadeLauncher   gl = col.GetComponent <GrenadeLauncher>();
                    DynamiteMechanics dm = player.GetComponent <DynamiteMechanics>();
                    dm.DisableRestrictions();
                    player.GetComponent <DynamiteMechanics>().enabled = false;
                    gl.PickUp();
                }
            }
        }
    }
        private void BlastCorpsViewer_MouseUp(object sender, MouseEventArgs e)
        {
            if (level != null && e.Button == System.Windows.Forms.MouseButtons.Left)
            {
                switch (Mode)
                {
                case MouseMode.Move:
                    if (dragItem != null)
                    {
                        selectedItem = dragItem;
                        OnSelectionChangedEvent(new SelectionChangedEventArgs(selectedItem, false, false));
                        dragItem = null;
                        Invalidate();
                    }
                    break;

                case MouseMode.Add:
                    Int16 x = (Int16)levelX(e.X);
                    Int16 z = (Int16)levelZ(e.Y);
                    if (AddType == typeof(AmmoBox))
                    {
                        AmmoBox box = new AmmoBox(x, level.carrier.y, z, 0);
                        selectedItem = box;
                        level.ammoBoxes.Add(box);
                    }
                    else if (AddType == typeof(CommPoint))
                    {
                        CommPoint comm = new CommPoint(x, level.carrier.y, z, 0);
                        selectedItem = comm;
                        level.commPoints.Add(comm);
                    }
                    else if (AddType == typeof(RDU))
                    {
                        RDU rdu = new RDU(x, level.carrier.y, z);
                        selectedItem = rdu;
                        level.rdus.Add(rdu);
                    }
                    else if (AddType == typeof(TNTCrate))
                    {
                        TNTCrate tnt = new TNTCrate(x, level.carrier.y, z, 0, 0, 0, 0);
                        selectedItem = tnt;
                        level.tntCrates.Add(tnt);
                    }
                    else if (AddType == typeof(SquareBlock))
                    {
                        SquareBlock block = new SquareBlock(x, level.carrier.y, z, SquareBlock.Type.Block, SquareBlock.Shape.Square);
                        selectedItem = block;
                        level.squareBlocks.Add(block);
                    }
                    else if (AddType == typeof(Vehicle))
                    {
                        Vehicle vehicle = new Vehicle(0, x, level.carrier.y, z, 0);
                        selectedItem = vehicle;
                        level.vehicles.Add(vehicle);
                    }
                    else if (AddType == typeof(Building))
                    {
                        Building building = new Building(x, level.carrier.y, z, 0, 0, 0, 0, 0);
                        selectedItem = building;
                        level.buildings.Add(building);
                    }
                    OnSelectionChangedEvent(new SelectionChangedEventArgs(selectedItem, true, false));
                    Invalidate();
                    break;
                }
            }
        }
Beispiel #30
0
        public static bool Prefix(CharacterClassManager __instance, bool lite = false, bool escape = false)
        {
            if (EventPlugin.PlayerSpawnEventPatchDisable)
            {
                return(true);
            }

            try
            {
                Role role = __instance.Classes.SafeGet(__instance.CurClass);
                if (!__instance._wasAnytimeAlive && __instance.CurClass != RoleType.Spectator && __instance.CurClass != RoleType.None)
                {
                    __instance._wasAnytimeAlive = true;
                }
                __instance.InitSCPs();
                __instance.AliveTime = 0f;
                switch (role.team)
                {
                case Team.MTF:
                    AchievementManager.Achieve("arescue");
                    break;

                case Team.CHI:
                    AchievementManager.Achieve("chaos");
                    break;

                case Team.RSC:
                case Team.CDP:
                    __instance.EscapeStartTime = (int)Time.realtimeSinceStartup;
                    break;
                }
                __instance.GetComponent <Inventory>();
                try
                {
                    __instance.GetComponent <FootstepSync>().SetLoudness(role.team, role.roleId.Is939());
                }
                catch
                {
                }
                if (NetworkServer.active)
                {
                    Handcuffs component = __instance.GetComponent <Handcuffs>();
                    component.ClearTarget();
                    component.NetworkCufferId = -1;
                }
                if (role.team != Team.RIP)
                {
                    if (NetworkServer.active && !lite)
                    {
                        Vector3 constantRespawnPoint = NonFacilityCompatibility.currentSceneSettings.constantRespawnPoint;
                        if (constantRespawnPoint != Vector3.zero)
                        {
                            __instance._pms.OnPlayerClassChange(constantRespawnPoint, 0f);
                        }
                        else
                        {
                            GameObject randomPosition = CharacterClassManager.SpawnpointManager.GetRandomPosition(__instance.CurClass);
                            Vector3    spawnPoint     = new Vector3(0f, 0f, 0f);
                            float      rotY           = 0f;
                            if (randomPosition != null)
                            {
                                spawnPoint = randomPosition.transform.position;
                                rotY       = randomPosition.transform.rotation.eulerAngles.y;
                                AmmoBox component2 = __instance.GetComponent <AmmoBox>();
                                if (escape && __instance.KeepItemsAfterEscaping)
                                {
                                    Inventory component3 = PlayerManager.localPlayer.GetComponent <Inventory>();
                                    for (ushort num = 0; num < 3; num += 1)
                                    {
                                        if (component2.GetAmmo(num) >= 15)
                                        {
                                            component3.SetPickup(component2.types[num].inventoryID, component2.GetAmmo(num), randomPosition.transform.position, randomPosition.transform.rotation, 0, 0, 0);
                                        }
                                    }
                                }
                                component2.SetAmmoAmount();
                            }
                            else
                            {
                                spawnPoint = __instance.DeathPosition;
                                rotY       = 0f;
                            }
                            Events.InvokePlayerSpawn(__instance, __instance.CurClass, ref spawnPoint, ref rotY);
                            __instance._pms.OnPlayerClassChange(spawnPoint, rotY);
                        }
                        if (!__instance.SpawnProtected && __instance.EnableSP && __instance.SProtectedTeam.Contains((int)role.team))
                        {
                            __instance.GodMode        = true;
                            __instance.SpawnProtected = true;
                            __instance.ProtectedTime  = Time.time;
                        }
                    }
                    if (!__instance.isLocalPlayer)
                    {
                        __instance.GetComponent <PlayerStats>().maxHP = role.maxHP;
                    }
                }
                __instance.Scp049.iAm049    = (__instance.CurClass == RoleType.Scp049);
                __instance.Scp0492.iAm049_2 = (__instance.CurClass == RoleType.Scp0492);
                __instance.Scp096.iAm096    = (__instance.CurClass == RoleType.Scp096);
                __instance.Scp106.iAm106    = (__instance.CurClass == RoleType.Scp106);
                __instance.Scp173.iAm173    = (__instance.CurClass == RoleType.Scp173);
                __instance.Scp939.iAm939    = __instance.CurClass.Is939();
                __instance.RefreshPlyModel();

                return(false);
            }
            catch (Exception exception)
            {
                Log.Error($"PlayerSpawnEvent error: {exception}");
                return(true);
            }
        }