public static void Prefix(MicroHID __instance)
 {
     if (!timers.ContainsKey(__instance))
     {
         timers.Add(__instance, 0f);
     }
     if (__instance.refHub.inventory.curItem == ItemType.MicroHID && __instance.NetworkCurrentHidState == MicroHID.MicroHidState.Idle)
     {
         timers[__instance] += Time.deltaTime;
         if (timers[__instance] >= MicroHIDPlugin.instance.Config.mhid_charge_interval)
         {
             timers[__instance] = 0f;
             __instance.ChangeEnergy(__instance.GetEnergy() + MicroHIDPlugin.instance.Config.mhid_charge_rate);
             __instance.Energy        = __instance.GetEnergy();
             __instance.NetworkEnergy = __instance.GetEnergy();
         }
     }
     if (__instance.refHub.inventory.curItem == ItemType.MicroHID && (__instance.NetworkCurrentHidState == MicroHID.MicroHidState.Discharge || __instance.NetworkCurrentHidState == MicroHID.MicroHidState.Spinning))
     {
         timers[__instance] += Time.deltaTime;
         if (timers[__instance] >= MicroHIDPlugin.instance.Config.mhid_charge_use_interval)
         {
             timers[__instance] = 0f;
             __instance.ChangeEnergy(__instance.GetEnergy() + MicroHIDPlugin.instance.Config.mhid_charge_use_rate);
             __instance.Energy        = __instance.GetEnergy();
             __instance.NetworkEnergy = __instance.GetEnergy();
         }
     }
 }
        public static IEnumerator <float> BigHitmark(MicroHID microHID)
        {
            yield return(Timing.WaitForSeconds(0.1f));

            microHID.TargetSendHitmarker(false);
            yield break;
        }
示例#3
0
 public static void Prefix(MicroHID __instance)
 {
     if (MicroHIDPlugin.instance.Config.mhid_damage_per_second == -1)
     {
         return;
     }
     __instance.damagePerSecond = MicroHIDPlugin.instance.Config.mhid_damage_per_second;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="ChangingMicroHIDStateEventArgs"/> class.
 /// </summary>
 /// <param name="player"><inheritdoc cref="Player"/></param>
 /// <param name="microHID"><inheritdoc cref="MicroHID"/></param>
 /// <param name="oldState"><inheritdoc cref="OldState"/></param>
 /// <param name="newState"><inheritdoc cref="NewState"/></param>
 /// <param name="isAllowed"><inheritdoc cref="IsAllowed"/></param>
 public ChangingMicroHIDStateEventArgs(Player player, MicroHID microHID, MicroHID.MicroHidState oldState, MicroHID.MicroHidState newState, bool isAllowed = true)
 {
     Player    = player;
     MicroHID  = microHID;
     OldState  = oldState;
     NewState  = newState;
     IsAllowed = isAllowed;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="UsingMicroHIDEnergyEventArgs"/> class.
 /// </summary>
 /// <param name="player"><inheritdoc cref="Player"/></param>
 /// <param name="microHID"><inheritdoc cref="MicroHID"/></param>
 /// <param name="currentState"><inheritdoc cref="CurrentState"/></param>
 /// <param name="oldValue"><inheritdoc cref="OldValue"/></param>
 /// <param name="newValue"><inheritdoc cref="NewValue"/></param>
 /// <param name="isAllowed"><inheritdoc cref="IsAllowed"/></param>
 public UsingMicroHIDEnergyEventArgs(Player player, MicroHID microHID, MicroHID.MicroHidState currentState, float oldValue, float newValue, bool isAllowed = true)
 {
     Player       = player;
     MicroHID     = microHID;
     CurrentState = currentState;
     OldValue     = oldValue;
     NewValue     = newValue;
     IsAllowed    = isAllowed;
 }
示例#6
0
 public static bool Prefix(MicroHID __instance)
 {
     if (__instance.refHub.TryGetComponent(out InfiniteAmmoComponent infAmmo) && __instance.refHub.inventory.curItem == ItemType.MicroHID)
     {
         __instance.ChangeEnergy(1);
         __instance.NetworkEnergy = 1;
     }
     return(true);
 }
示例#7
0
        private static void Prefix(MicroHID __instance)
        {
            var ply = Player.Get(__instance.gameObject);

            if (SameThings.Instance.Config.InfiniteMicroAmmo && ply.CurrentItem.id == ItemType.MicroHID)
            {
                __instance.ChangeEnergy(1);
                __instance.NetworkEnergy = 1;
            }
        }
        private static bool Prefix(MicroHID __instance)
        {
            if (!__instance.refHub.TryGetComponent(out InfiniteAmmoComponent infAmmo) ||
                __instance.refHub.inventory.curItem != ItemType.MicroHID)
            {
                return(true);
            }

            __instance.ChangeEnergy(1);
            __instance.NetworkEnergy = 1;
            return(true);
        }
示例#9
0
 public static void Prefix(MicroHID __instance)
 {
     __instance.chargeupTime   = MicroHIDPlugin.instance.Config.chargeupTime;
     __instance.chargedownTime = MicroHIDPlugin.instance.Config.chargedownTime;
     if (MicroHIDPlugin.instance.Config.disablePreDischarge)
     {
         __instance.soundEffectPause = 1.5f;
     }
     if (!timers.ContainsKey(__instance))
     {
         timers.Add(__instance, 0f);
     }
     if (__instance.refHub.inventory.curItem == ItemType.MicroHID && __instance.NetworkCurrentHidState == MicroHID.MicroHidState.Idle)
     {
         timers[__instance] += Time.deltaTime;
         if (timers[__instance] >= MicroHIDPlugin.instance.Config.mhid_charge_interval)
         {
             timers[__instance] = 0f;
             __instance.ChangeEnergy(__instance.GetEnergy() + MicroHIDPlugin.instance.Config.mhid_charge_rate);
             __instance.NetworkEnergy = __instance.GetEnergy();
         }
     }
     if (__instance.refHub.inventory.curItem == ItemType.MicroHID && __instance.NetworkCurrentHidState == MicroHID.MicroHidState.Discharge)
     {
         timers[__instance] += Time.deltaTime;
         if (timers[__instance] >= MicroHIDPlugin.instance.Config.mhid_charge_use_interval)
         {
             timers[__instance] = 0f;
             __instance.ChangeEnergy(__instance.GetEnergy() + MicroHIDPlugin.instance.Config.mhid_charge_use_rate);
             __instance.NetworkEnergy = __instance.GetEnergy();
         }
     }
     if (__instance.refHub.inventory.curItem == ItemType.MicroHID && __instance.NetworkCurrentHidState == MicroHID.MicroHidState.Spinning)
     {
         timers[__instance] += Time.deltaTime;
         if (timers[__instance] >= MicroHIDPlugin.instance.Config.mhid_charge_use_idle_interval)
         {
             timers[__instance] = 0f;
             __instance.ChangeEnergy(__instance.GetEnergy() + MicroHIDPlugin.instance.Config.mhid_charge_use_idle_rate);
             __instance.NetworkEnergy = __instance.GetEnergy();
         }
     }
 }
示例#10
0
        private static bool Prefix(MicroHID __instance, ref float value)
        {
            // NetworkEnergy is set each frame, so this is to prevent calling the method each frame.
            if (__instance.NetworkEnergy == value)
            {
                return(true);
            }

            var ev = new UsingMicroHIDEnergyEventArgs(Player.Get(__instance.gameObject), __instance, __instance.CurrentHidState, __instance.Energy, value);

            Handlers.Player.OnUsingMicroHIDEnergy(ev);

            if (!ev.IsAllowed)
            {
                return(false);
            }

            value = ev.NewValue;

            return(true);
        }
示例#11
0
        private static bool Prefix(MicroHID __instance, ref MicroHID.MicroHidState value)
        {
            // NetworkCurrentHid state is set each frame, so this  is to prevent calling the method each frame.
            if (__instance.CurrentHidState == value)
            {
                return(true);
            }

            var ev = new ChangingMicroHIDStateEventArgs(Player.Get(__instance.gameObject), __instance, __instance.CurrentHidState, value);

            Handlers.Player.OnChangingMicroHIDState(ev);

            if (!ev.IsAllowed)
            {
                return(false);
            }

            value = ev.NewState;

            return(true);
        }
        private static bool Prefix(MicroHID __instance)
        {
            try
            {
                if (!NetworkServer.active)
                {
                    return(false);
                }

                if (__instance.refHub.inventory.curItem == ItemType.MicroHID && __instance.GetEnergy() != __instance.Energy)
                {
                    __instance.ChangeEnergy(__instance.Energy);
                }

                else
                {
                    foreach (var item in __instance.refHub.inventory.items)
                    {
                        if (item.id == ItemType.MicroHID)
                        {
                            __instance.NetworkEnergy = item.durability;
                        }
                    }
                }

                if (__instance.keyAntiSpamCooldown > 0f)
                {
                    __instance.keyAntiSpamCooldown -= Time.deltaTime;
                }

                if (__instance.refHub.inventory.curItem == ItemType.MicroHID || __instance.chargeup > 0f)
                {
                    if (__instance.CurrentHidState != MicroHID.MicroHidState.Idle)
                    {
                        __instance.refHub.weaponManager.scp268.ServerDisable();
                        __instance._visionController.MakeNoise(__instance.CurrentHidState == MicroHID.MicroHidState.Discharge ? 20 : 75);
                    }

                    MicroHID.MicroHidState state = MicroHID.MicroHidState.Idle;

                    if (__instance.refHub.inventory.curItem == ItemType.MicroHID)
                    {
                        if (__instance.Energy > 0f && __instance.chargeup >= 1f && __instance.SyncKeyCode == 2)
                        {
                            state = MicroHID.MicroHidState.Discharge;
                        }
                        else if (__instance.Energy > 0f && __instance.chargeup < 1f && __instance.SyncKeyCode != 0 && __instance.CurrentHidState != MicroHID.MicroHidState.RampDown)
                        {
                            state = MicroHID.MicroHidState.RampUp;
                        }
                        else if (__instance.chargeup > 0f && (__instance.SyncKeyCode == 0 || __instance.Energy <= 0f || __instance.CurrentHidState == MicroHID.MicroHidState.RampDown))
                        {
                            state = MicroHID.MicroHidState.RampDown;
                        }
                        else if (__instance.chargeup <= 0f && (__instance.SyncKeyCode == 0 || __instance.Energy <= 0f || __instance.CurrentHidState == MicroHID.MicroHidState.RampDown))
                        {
                            state = MicroHID.MicroHidState.Idle;
                        }
                        else if (__instance.chargeup >= 1f)
                        {
                            state = MicroHID.MicroHidState.Spinning;
                        }
                    }
                    else
                    {
                        state = MicroHID.MicroHidState.RampDown;
                    }

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

                    SynapseController.Server.Events.Player.InvokeMicroUse(player, item, ref state);
                    //ItemUseEvent Invoke
                    if (state != MicroHID.MicroHidState.Idle)
                    {
                        var itemstate = ItemState.Initiating;
                        switch (state)
                        {
                        case MicroHID.MicroHidState.Spinning:
                        case MicroHID.MicroHidState.Discharge:
                            itemstate = ItemState.Finalizing;
                            break;

                        case MicroHID.MicroHidState.RampUp:
                            itemstate = ItemState.Initiating;
                            break;

                        case MicroHID.MicroHidState.RampDown:
                            itemstate = ItemState.Stopping;
                            break;
                        }
                        var allow = true;
                        SynapseController.Server.Events.Player.InvokePlayerItemUseEvent(player, item, itemstate, ref allow);
                        if (!allow)
                        {
                            state = MicroHID.MicroHidState.Idle;
                        }
                    }

                    switch (state)
                    {
                    case MicroHID.MicroHidState.Discharge:
                        if (__instance.soundEffectPause >= 1f)
                        {
                            __instance.NetworkEnergy = Mathf.Clamp01(__instance.Energy - Time.deltaTime * __instance.dischargeEnergyLoss);
                            __instance.DealDamage();
                        }
                        else
                        {
                            __instance.NetworkEnergy = Mathf.Clamp01(__instance.Energy - Time.deltaTime * __instance.speedBasedEnergyLoss.Evaluate(1f));
                        }
                        break;

                    case MicroHID.MicroHidState.RampUp:
                        __instance.chargeup      = Mathf.Clamp01(__instance.chargeup + Time.deltaTime / __instance.chargeupTime);
                        __instance.NetworkEnergy = Mathf.Clamp01(__instance.Energy - Time.deltaTime * __instance.speedBasedEnergyLoss.Evaluate(__instance.chargeup));
                        break;

                    case MicroHID.MicroHidState.RampDown:
                        __instance.chargeup = Mathf.Clamp01(__instance.chargeup - Time.deltaTime / __instance.chargedownTime);
                        break;

                    case MicroHID.MicroHidState.Spinning:
                        __instance.NetworkEnergy = Mathf.Clamp01(__instance.Energy - Time.deltaTime * __instance.speedBasedEnergyLoss.Evaluate(__instance.chargeup));
                        break;

                        //Idle does nothing
                    }

                    __instance.NetworkCurrentHidState = state;
                }

                if (__instance.Energy <= 0.05f)
                {
                    __instance.NetworkEnergy = 0f;
                }

                return(false);
            }
            catch (Exception e)
            {
                Logger.Get.Error($"Synapse-Event: PlayerUseMicro failed!!\n{e}\nStackTrace:\n{e.StackTrace}");
                return(true);
            }
        }
        public static bool Prefix(MicroHID __instance)
        {
            if (!NetworkServer.active)
            {
                return(false);
            }

            var baseObj = (NetworkBehaviour)__instance;

            __instance.damagePause += Time.deltaTime;
            if (__instance.damagePause < 0.2f)
            {
                return(false);
            }
            __instance.damagePause -= 0.2f;
            global::ReferenceHub referenceHub = __instance.refHub;

            __instance.beamStart.localRotation = Quaternion.Euler(referenceHub.playerMovementSync.Rotations.x, 0f, 0f);
            foreach (GameObject gameObject in global::PlayerManager.players)
            {
                if (gameObject != null && gameObject != baseObj.gameObject && Vector3.Distance(baseObj.transform.position, gameObject.transform.position) <= __instance.beamLength)
                {
                    Vector3    normalized = (__instance.beamStart.position - gameObject.transform.position).normalized;
                    RaycastHit raycastHit;
                    if (Vector3.Dot(__instance.beamStart.forward, normalized) < -0.95f && Physics.Raycast(new Ray(__instance.beamStart.position, -normalized), out raycastHit, __instance.beamLength, __instance.beamMask))
                    {
                        if (raycastHit.collider != __instance.lastVictim)
                        {
                            __instance.lastVictim     = raycastHit.collider;
                            __instance.lastVictimRefs = raycastHit.collider.GetComponentInParent <global::ReferenceHub>();
                        }
                        global::ReferenceHub referenceHub2 = __instance.lastVictimRefs;
                        if (referenceHub2 != null && referenceHub2.gameObject != baseObj.gameObject && referenceHub.weaponManager.GetShootPermission(referenceHub2.characterClassManager, false))
                        {
                            int damage = 0;
                            if (MicroHIDPlugin.instance.Config.mhid_damage_per_hit == -1)
                            {
                                float num = UnityEngine.Random.Range(-__instance.maxDamageVariationPercent, __instance.maxDamageVariationPercent) / 100f * __instance.damagePerSecond;
                                damage = Mathf.RoundToInt((__instance.damagePerSecond + num) * 0.2f);
                            }
                            else
                            {
                                damage = MicroHIDPlugin.instance.Config.mhid_damage_per_hit;
                            }
                            bool isAchievement = referenceHub2.characterClassManager.CurRole.team == global::Team.SCP;
                            if (!referenceHub.playerStats.HurtPlayer(new global::PlayerStats.HitInfo((float)damage, referenceHub.LoggedNameFromRefHub(), global::DamageTypes.MicroHid, referenceHub.queryProcessor.PlayerId), gameObject, false))
                            {
                                isAchievement = false;
                            }
                            __instance.TargetSendHitmarker(isAchievement);
                        }
                    }
                }
            }
            RaycastHit raycastHit2;

            if (Physics.Raycast(new Ray(__instance.beamStart.position, __instance.beamStart.forward), out raycastHit2, __instance.beamLength, __instance.beamMask))
            {
                global::BreakableWindow componentInParent = raycastHit2.collider.GetComponentInParent <global::BreakableWindow>();
                if (componentInParent != null && !componentInParent.isBroken)
                {
                    float num3 = UnityEngine.Random.Range(-__instance.maxDamageVariationPercent, __instance.maxDamageVariationPercent) / 100f * __instance.damagePerSecond;
                    int   num4 = Mathf.RoundToInt((__instance.damagePerSecond + num3) * 0.2f);
                    componentInParent.ServerDamageWindow((float)num4);
                }
            }

            return(false);
        }