示例#1
0
        private void CheckKillDownedEnemyWithRock(object o)
        {
            EnemyHealth enemyHealth = (EnemyHealth)o;

            if (enemyHealth && enemyHealth.targetSwitcher && enemyHealth.targetSwitcher.currentAttackerGo == LocalPlayer.GameObject && LocalPlayer.Inventory.HasInSlot(Item.EquipmentSlot.RightHand, this._rockItemId))
            {
                targetStats componentInParent = enemyHealth.GetComponentInParent <targetStats>();
                if (componentInParent && componentInParent.targetDown)
                {
                    EventRegistry.Achievements.Publish(TfEvent.Achievements.DownedEnemyRockKill, null);
                    EventRegistry.Enemy.Unsubscribe(TfEvent.KilledEnemy, new EventRegistry.SubscriberCallback(this.CheckKillDownedEnemyWithRock));
                }
            }
        }
示例#2
0
 public void OnTriggerEnter(Collider other)
 {
     if (other.gameObject.CompareTag("enemyRoot"))
     {
         targetStats component = other.GetComponent <targetStats>();
         if (component && component.targetDown && !component.inNooseTrap)
         {
             return;
         }
         if (!this.netPrefab)
         {
             LocalPlayer.FpCharacter.clampVelocityTowardEnemy(other.transform.position);
         }
     }
 }
示例#3
0
 private bool validateTriggerForCoop()
 {
     for (int i = 0; i < Scene.SceneTracker.allPlayers.Count; i++)
     {
         targetStats component = Scene.SceneTracker.allPlayers[i].GetComponent <targetStats>();
         if (Scene.SceneTracker.allPlayers[i] && Scene.SceneTracker.allPlayers[i].CompareTag("PlayerNet") && component && component.onRope)
         {
             float sqrMagnitude = (Scene.SceneTracker.allPlayers[i].transform.position - base.transform.position).sqrMagnitude;
             if (sqrMagnitude < 6.25f)
             {
                 return(false);
             }
         }
     }
     return(true);
 }
示例#4
0
        private IEnumerator OldSaveCompat()
        {
            if (!CoopPeerStarter.DedicatedHost && LocalPlayer.Inventory)
            {
                yield return(null);

                yield return(null);

                if (LocalPlayer.PassengerManifest)
                {
                    if (!LocalPlayer.PassengerManifest.gameObject.activeSelf)
                    {
                        LocalPlayer.PassengerManifest.gameObject.SetActive(true);
                    }
                    if (GameSetup.IsSavedGame)
                    {
                        LocalPlayer.PassengerManifest.SendMessage("OnDeserialized");
                    }
                }
                if (!LocalPlayer.GameObject.GetComponent <targetStats>())
                {
                    targetStats targetStats = LocalPlayer.GameObject.AddComponent <targetStats>();
                    targetStats.setPlayerType = true;
                }
                if (!LocalPlayer.GameObject.GetComponent <visRangeSetup>())
                {
                    visRangeSetup visRangeSetup = LocalPlayer.GameObject.AddComponent <visRangeSetup>();
                    visRangeSetup.host         = true;
                    visRangeSetup.testDist     = 32f;
                    visRangeSetup.offsetFactor = 1.05f;
                    this._vis       = visRangeSetup;
                    LocalPlayer.Vis = visRangeSetup;
                }
                while (!LocalPlayer.Inventory.enabled)
                {
                    yield return(null);
                }
                if (!LocalPlayer.GameObject.GetComponent <CoopVoice>())
                {
                    CoopVoice coopVoice = LocalPlayer.GameObject.AddComponent <CoopVoice>();
                    int       id        = ItemDatabase.ItemByName("WalkyTalky")._id;
                    coopVoice.WalkieTalkie = LocalPlayer.Inventory.InventoryItemViewsCache[id][0]._held.GetComponent <BatteryBasedTalkyWalky>();
                }
            }
            yield break;
        }
示例#5
0
 private void checkDistances()
 {
     if (Scene.SceneTracker.allPlayers.Count > 0 && Scene.SceneTracker.allPlayers[0] != null)
     {
         this.spawnDist = Vector3.Distance(this.spawner.transform.position, this.tr.position);
         targetStats component = Scene.SceneTracker.GetClosestPlayerFromPos(this.tr.position).GetComponent <targetStats>();
         if (component && component.inWater && this.typeShark && !this.attackCoolDown && this.spawnDist < 70f && Scene.SceneTracker.GetClosestPlayerDistanceFromPos(this.tr.position) < 40f)
         {
             this.switchToAttack();
         }
         if (this.spawnDist > 65f)
         {
             this.tempPos   = this.spawner.transform.position;
             this.tempPos.y = this.tr.position.y;
             this.direction = (this.tempPos - this.tr.position).normalized;
             this.home      = true;
             base.Invoke("resetHomeBool", 5f);
         }
     }
 }
示例#6
0
 private void Awake()
 {
     this.animator    = base.transform.GetComponentInChildren <Animator>();
     this.getParams   = base.GetComponent <getAnimatorParams>();
     this.setup       = base.transform.GetComponentInChildren <mutantScriptSetup>();
     this.ai          = base.transform.GetComponentInChildren <mutantAI>();
     this.props       = base.transform.GetComponentInChildren <mutantPropManager>();
     this.propsFemale = base.transform.GetComponentInChildren <setupBodyVariation>();
     this.health      = base.transform.GetComponentInChildren <EnemyHealth>();
     this.followSetup = base.transform.GetComponent <mutantFollowerFunctions>();
     this.dayCycle    = base.transform.GetComponentInChildren <mutantDayCycle>();
     this.controlGo   = Scene.MutantControler.gameObject;
     if (this.controlGo)
     {
         this.mutantControl = Scene.MutantControler;
     }
     this.spawnManager = this.controlGo.GetComponent <mutantSpawnManager>();
     this.stats        = base.transform.GetComponent <targetStats>();
     this.waterLayer   = LayerMask.NameToLayer("Water");
 }
示例#7
0
 public override void Attached()
 {
     base.state.Transform.SetTransforms(base.transform);
     if (base.entity.isOwner)
     {
         base.state.PlayerVariation     = LocalPlayer.Stats.PlayerVariation;
         base.state.PlayerVariationHair = LocalPlayer.Stats.PlayerVariationHair;
         base.Invoke("InitClothingMpSync", 0.1f);
         base.Invoke("RefreshPlayerMaterials", 0.1f);
         this.FindHands();
         if (base.entity.isOwner && BoltNetwork.isClient && Scene.TriggerCutScene.clientPlayerOnPlaneGo != null)
         {
             Scene.TriggerCutScene.clientPlayerOnPlaneGo.SendMessage("PlayerVariationSetupClean", base.state.PlayerVariation, SendMessageOptions.DontRequireReceiver);
             Scene.TriggerCutScene.clientCutScenePlayerGo.SendMessage("PlayerVariationSetup", base.state.PlayerVariation, SendMessageOptions.DontRequireReceiver);
         }
     }
     else
     {
         base.state.AddCallback("PlayerVariation", new PropertyCallbackSimple(this.PlayerVariationSetup));
         base.state.AddCallback("PlayerVariationHair", new PropertyCallbackSimple(this.PlayerVariationSetup));
         base.state.AddCallback("PlayerClothingIds[]", new PropertyCallbackSimple(this.PlayerVariationSetup));
         base.state.AddCallback("Bloody", new PropertyCallbackSimple(this.RefreshPlayerMaterials));
         base.state.AddCallback("Muddy", new PropertyCallbackSimple(this.RefreshPlayerMaterials));
         base.state.AddCallback("RedPaint", new PropertyCallbackSimple(this.RefreshPlayerMaterials));
         base.state.AddCallback("Cold", new PropertyCallbackSimple(this.RefreshPlayerMaterials));
         this.PlayerVariationSetup();
         this.RefreshPlayerMaterials();
         if (BoltNetwork.isServer && CoopTreeGrid.TodoPlayerSweeps.Contains(base.entity.source))
         {
             CoopTreeGrid.TodoPlayerSweeps.Remove(base.entity.source);
             CoopTreeGrid.SweepGrid();
         }
         Transform   playerTr = base.transform;
         PlayerName  pn       = base.GetComponentInChildren <PlayerName>();
         targetStats ts       = base.GetComponent <targetStats>();
         base.state.AddCallback("name", delegate
         {
             pn.Init(this.state.name);
         });
         this.plasticTorch = base.GetComponentsInChildren <BatteryBasedLight>(true).FirstOrDefault <BatteryBasedLight>();
         if (BoltNetwork.isClient && Scene.SceneTracker)
         {
             if (!Scene.SceneTracker.allPlayers.Contains(base.gameObject))
             {
                 Scene.SceneTracker.allPlayers.Add(base.entity.gameObject);
             }
             if (!Scene.SceneTracker.allPlayerEntities.Contains(base.entity))
             {
                 Scene.SceneTracker.allPlayerEntities.Add(base.entity);
             }
             if (!Scene.SceneTracker.allClients.Contains(base.gameObject))
             {
                 Scene.SceneTracker.allClients.Add(base.entity.gameObject);
             }
         }
         base.state.AddCallback("CurrentView", delegate
         {
             if (this.state.CurrentView == 7 != this.RespawnDeadTrigger.activeSelf)
             {
                 if (!ts || !ts.inWater)
                 {
                     this.RespawnDeadTrigger.SetActive(!this.RespawnDeadTrigger.activeSelf);
                 }
             }
             pn.OnCurrentViewChanged();
             if (this.state.CurrentView == 8)
             {
                 if (Scene.SceneTracker.allPlayers.Contains(this.gameObject))
                 {
                     Scene.SceneTracker.allPlayers.Remove(this.gameObject);
                 }
                 if (Scene.SceneTracker.allPlayerEntities.Contains(this.entity))
                 {
                     Scene.SceneTracker.allPlayerEntities.Remove(this.entity);
                 }
                 for (int i = playerTr.childCount - 1; i >= 0; i--)
                 {
                     Transform child = playerTr.GetChild(i);
                     if (!child.GetComponent <Animator>())
                     {
                         UnityEngine.Object.Destroy(child.gameObject);
                     }
                     else
                     {
                         for (int j = child.childCount - 1; j >= 0; j--)
                         {
                             UnityEngine.Object.Destroy(child.GetChild(j).gameObject);
                         }
                         Component[] components = child.GetComponents(typeof(MonoBehaviour));
                         foreach (Component component in components)
                         {
                             if (!(component is Animator))
                             {
                                 UnityEngine.Object.DestroyImmediate(component);
                             }
                         }
                     }
                 }
                 Component[] components2 = this.GetComponents(typeof(MonoBehaviour));
                 foreach (Component component2 in components2)
                 {
                     if (!(component2 is BoltEntity))
                     {
                         UnityEngine.Object.DestroyImmediate(component2);
                     }
                 }
                 StealItemTrigger stealItemTrigger        = UnityEngine.Object.Instantiate <StealItemTrigger>(Prefabs.Instance.DeadBackpackPrefab);
                 stealItemTrigger._entity                 = this.entity;
                 stealItemTrigger.transform.parent        = playerTr;
                 stealItemTrigger.transform.localPosition = Vector3.zero;
             }
         });
         base.state.AddCallback("BatteryTorchEnabled", delegate
         {
             this.plasticTorch.SetEnabled(this.state.BatteryTorchEnabled);
         });
         base.state.AddCallback("BatteryTorchColor", delegate
         {
             this.plasticTorch.SetColor(this.state.BatteryTorchColor);
         });
         base.state.AddCallback("BatteryTorchIntensity", delegate
         {
             this.plasticTorch.SetIntensity(this.state.BatteryTorchIntensity);
         });
     }
 }
        protected override void OnTriggerEnter(Collider other)
        {
            try
            {
                currState = animator.GetCurrentAnimatorStateInfo(0);
                nextState = animator.GetNextAnimatorStateInfo(0);
                if (currState.tagHash != damagedHash && currState.tagHash != staggerHash && currState.tagHash != hitStaggerHash && currState.tagHash != deathHash && nextState.tagHash != damagedHash && nextState.tagHash != staggerHash && nextState.tagHash != hitStaggerHash && nextState.tagHash != deathHash)
                {
                    if (other.gameObject.CompareTag("trapTrigger"))
                    {
                        other.gameObject.SendMessage("CutRope", SendMessageOptions.DontRequireReceiver);
                    }
                    if (!netPrefab && LocalPlayer.Animator && LocalPlayer.Animator.GetBool("deathBool"))
                    {
                        return;
                    }
                    if (other.gameObject.CompareTag("playerHitDetect") && mainTrigger)
                    {
                        if (!Scene.SceneTracker.hasAttackedPlayer)
                        {
                            Scene.SceneTracker.hasAttackedPlayer = true;
                            Scene.SceneTracker.Invoke("resetHasAttackedPlayer", Random.Range(120, 240));
                        }
                        targetStats component = other.transform.root.GetComponent <targetStats>();
                        if (component && component.targetDown)
                        {
                            return;
                        }
                        Animator componentInParent = other.gameObject.GetComponentInParent <Animator>();
                        Vector3  position          = rootTr.position;
                        position.y += 3.3f;
                        Vector3 direction = other.transform.position - position;
                        if (!Physics.Raycast(position, direction, out hit, direction.magnitude, enemyHitMask, QueryTriggerInteraction.Ignore))
                        {
                            bool doParry = SpellActions.ParryAnythingIsTimed;
                            if (doParry || (!creepy_male && !creepy && !creepy_baby && !creepy_fat && events))
                            {
                                if (componentInParent)
                                {
                                    bool flag = InFront(other.gameObject);
                                    if (doParry || ((!BoltNetwork.isServer || !netPrefab) && flag && events.parryBool && ((componentInParent.GetNextAnimatorStateInfo(1).tagHash == blockHash || componentInParent.GetCurrentAnimatorStateInfo(1).tagHash == blockHash))))
                                    {
                                        SpellActions.DoParry(transform.position);
                                        ModAPI.Console.Write("Parrying successful");

                                        if ((!creepy_male && !creepy && !creepy_baby && !creepy_fat && events))
                                        {
                                            int parryDir = events != null ? events.parryDir : 1;
                                            BoltSetReflectedShim.SetIntegerReflected(animator, "parryDirInt", parryDir);
                                            if (BoltNetwork.isClient && netPrefab)
                                            {
                                                BoltSetReflectedShim.SetTriggerReflected(animator, "ClientParryTrigger");
                                                hitPrediction.StartParryPrediction();
                                                FMODCommon.PlayOneshot(parryEvent, base.transform);
                                                parryEnemy parryEnemy = parryEnemy.Create(GlobalTargets.OnlyServer);
                                                parryEnemy.Target = transform.root.GetComponent <BoltEntity>();
                                                parryEnemy.Send();
                                            }
                                            else
                                            {
                                                BoltSetReflectedShim.SetTriggerReflected(animator, "parryTrigger");
                                            }
                                            events.StartCoroutine("disableAllWeapons");
                                            playerHitReactions componentInParent2 = other.gameObject.GetComponentInParent <playerHitReactions>();
                                            if (componentInParent2 != null)
                                            {
                                                componentInParent2.enableParryState();
                                            }
                                            FMODCommon.PlayOneshotNetworked(parryEvent, base.transform, FMODCommon.NetworkRole.Server);
                                            events.parryBool = false;
                                        }
                                        return;
                                    }
                                }
                            }
                            if ((bool)events)
                            {
                                events.parryBool = false;
                            }
                            other.transform.root.SendMessage("getHitDirection", rootTr.position, SendMessageOptions.DontRequireReceiver);
                            float num = 0;
                            if (maleSkinny || femaleSkinny)
                            {
                                if (pale)
                                {
                                    num = ((!skinned) ? Mathf.Floor(10f * GameSettings.Ai.skinnyDamageRatio) : Mathf.Floor(10f * GameSettings.Ai.skinnyDamageRatio * GameSettings.Ai.skinMaskDamageRatio));
                                }
                                else
                                {
                                    num = Mathf.Floor(13f * GameSettings.Ai.skinnyDamageRatio);
                                    if (maleSkinny && props.regularStick.activeSelf && events.leftHandWeapon)
                                    {
                                        num = Mathf.Floor(num * 1.35f);
                                    }
                                }
                            }
                            else if (male && pale)
                            {
                                num = ((!skinned) ? Mathf.Floor(22f * GameSettings.Ai.largePaleDamageRatio) : Mathf.Floor(22f * GameSettings.Ai.largePaleDamageRatio * GameSettings.Ai.skinMaskDamageRatio));
                            }
                            else if (male && !firemanMain)
                            {
                                num = ((!painted) ? Mathf.Floor(20f * GameSettings.Ai.regularMaleDamageRatio) : Mathf.Floor(20f * GameSettings.Ai.regularMaleDamageRatio * GameSettings.Ai.paintedDamageRatio));
                            }
                            else if (female)
                            {
                                num = Mathf.Floor(17f * GameSettings.Ai.regularFemaleDamageRatio);
                            }
                            else if (creepy)
                            {
                                num = ((!pale) ? Mathf.Floor(28f * GameSettings.Ai.creepyDamageRatio) : Mathf.Floor(35f * GameSettings.Ai.creepyDamageRatio));
                            }
                            else if (creepy_male)
                            {
                                num = ((!pale) ? Mathf.Floor(60f * GameSettings.Ai.creepyDamageRatio) : Mathf.Floor(120f * GameSettings.Ai.creepyDamageRatio));
                            }
                            else if (creepy_baby)
                            {
                                num = Mathf.Floor(26f * GameSettings.Ai.creepyBabyDamageRatio);
                            }
                            else if (firemanMain)
                            {
                                num = Mathf.Floor(12f * GameSettings.Ai.regularMaleDamageRatio);
                                if (events && !enemyAtStructure && !events.noFireAttack)
                                {
                                    if (BoltNetwork.isRunning && netPrefab)
                                    {
                                        other.gameObject.SendMessageUpwards("Burn", SendMessageOptions.DontRequireReceiver);
                                    }
                                    else
                                    {
                                        other.gameObject.SendMessageUpwards("Burn", SendMessageOptions.DontRequireReceiver);
                                    }
                                }
                            }
                            if (!female && male)
                            {
                                if (holdingRegularWeapon() && events.leftHandWeapon)
                                {
                                    num += 7;
                                }
                                else if (holdingAdvancedWeapon() && events.leftHandWeapon)
                                {
                                    num += 15;
                                }
                            }
                            if (setup && setup.health.poisoned)
                            {
                                num = Mathf.Floor(num / 2);
                            }

                            //COTF additional code
                            try
                            {
                                if (GameSetup.IsMpClient)
                                {
                                    if (other.transform.root == LocalPlayer.Transform.root)
                                    {
                                        var x = EnemyManager.clientEnemies[entity.networkId.PackedValue];
                                        num = x.damagemult + num - 20f;
                                        if (x.abilities.Contains(EnemyProgression.Abilities.RainEmpowerment))
                                        {
                                            if (Scene.WeatherSystem.Raining)
                                            {
                                                num *= 5;
                                            }
                                        }
                                        hitDamage = num;
                                        if (x.abilities.Contains(EnemyProgression.Abilities.Poisonous))
                                        {
                                            BuffDB.AddBuff(3, 32, Mathf.Sqrt(num / 10) / 7, poisonDuration);
                                        }
                                        if (x.abilities.Contains(EnemyProgression.Abilities.Basher))
                                        {
                                            ModdedPlayer.instance.Stun(stunDuration);
                                        }
                                        if (ModdedPlayer.Stats.TotalThornsDamage > 0)
                                        {
                                            if (ModdedPlayer.Stats.TotalThornsArmorPiercing > 0)
                                            {
                                                EnemyProgression.ReduceArmor(entity, ModdedPlayer.Stats.TotalThornsArmorPiercing);
                                            }

                                            PlayerHitEnemy playerHitEnemy = PlayerHitEnemy.Create(GlobalTargets.OnlyServer);
                                            playerHitEnemy.Target = entity;
                                            //this integer make the attack not stagger the enemy
                                            playerHitEnemy.getAttackerType = 2000000;
                                            playerHitEnemy.Hit             = DamageMath.GetSendableDamage(ModdedPlayer.Stats.TotalThornsDamage);
                                            playerHitEnemy.Send();
                                        }
                                    }
                                }
                                else
                                {
                                    if (other.transform.root == LocalPlayer.Transform.root && EnemyManager.enemyByTransform.ContainsKey(this.rootTr))
                                    {
                                        if (EnemyProg == null)
                                        {
                                            EnemyProg = EnemyManager.enemyByTransform[this.rootTr];
                                        }
                                        num = EnemyProg.DamageAmp * EnemyProg.DebuffDmgMult + num - 20f;

                                        hitDamage = num;
                                        CotfUtils.Log($"Damage dealt to player: d{hitDamage}  amp{EnemyProg.DamageAmp}  lv{EnemyProg.level}  php{hitDamage*100 / ModdedPlayer.Stats.TotalMaxHealth}%", true);

                                        //POISON ATTACKS
                                        if (EnemyProg.abilities.Contains(EnemyProgression.Abilities.Poisonous))
                                        {
                                            BuffDB.AddBuff(3, 32, Mathf.Sqrt(num / 10) / 10, poisonDuration);
                                        }

                                        //STUN ON HIT
                                        if (EnemyProg.abilities.Contains(EnemyProgression.Abilities.Basher))
                                        {
                                            ModdedPlayer.instance.Stun(stunDuration);
                                        }

                                        if (ModdedPlayer.Stats.TotalThornsDamage > 0)
                                        {
                                            EnemyProg.HitPhysicalSilent(ModdedPlayer.Stats.TotalThornsDamage);
                                            if (ModdedPlayer.Stats.TotalThornsArmorPiercing > 0)
                                            {
                                                EnemyProg.ReduceArmor(ModdedPlayer.Stats.TotalThornsArmorPiercing);
                                            }
                                        }
                                    }
                                }
                            }
                            catch (System.Exception ex)
                            {
                                ModAPI.Log.Write(ex.ToString());
                            }
                            PlayerStats component2 = other.transform.root.GetComponent <PlayerStats>();
                            if (male || female || creepy_male || creepy_fat || creepy || creepy_baby)
                            {
                                netId component3 = other.transform.GetComponent <netId>();
                                if (BoltNetwork.isServer && component3)
                                {
                                    other.transform.root.SendMessage("StartPrediction", SendMessageOptions.DontRequireReceiver);
                                    return;
                                }
                                if (BoltNetwork.isClient && netPrefab && !(bool)component3)
                                {
                                    other.transform.root.SendMessage("setCurrentAttacker", this, SendMessageOptions.DontRequireReceiver);
                                    other.transform.root.SendMessage("hitFromEnemy", Mathf.RoundToInt(num), SendMessageOptions.DontRequireReceiver);
                                    other.transform.root.SendMessage("StartPrediction", SendMessageOptions.DontRequireReceiver);
                                }
                                else if (BoltNetwork.isServer)
                                {
                                    if (!(bool)component3)
                                    {
                                        other.transform.root.SendMessage("setCurrentAttacker", this, SendMessageOptions.DontRequireReceiver);
                                        other.transform.root.SendMessage("hitFromEnemy", Mathf.RoundToInt(num), SendMessageOptions.DontRequireReceiver);
                                    }
                                }
                                else if (!BoltNetwork.isRunning && component2)
                                {
                                    component2.setCurrentAttacker(this);
                                    component2.hitFromEnemy(Mathf.RoundToInt(num));
                                }
                            }
                            else if (!netPrefab && component2)
                            {
                                component2.setCurrentAttacker(this);
                                component2.hitFromEnemy(Mathf.RoundToInt(num));
                            }

                            goto IL_092f;
                        }
                        return;
                    }
                    goto IL_092f;
                }

                return;

IL_092f:
                if (other.gameObject.CompareTag("enemyCollide") && mainTrigger && bodyCollider && !enemyAtStructure)
                {
                    setupAttackerType();
                    if (other.gameObject != bodyCollider)
                    {
                        other.transform.SendMessageUpwards("getAttackDirection", Random.Range(0, 2), SendMessageOptions.DontRequireReceiver);
                        other.transform.SendMessageUpwards("getCombo", Random.Range(1, 4), SendMessageOptions.DontRequireReceiver);
                        other.transform.SendMessage("getAttackerType", attackerType, SendMessageOptions.DontRequireReceiver);
                        other.transform.SendMessage("getAttacker", rootTr.gameObject, SendMessageOptions.DontRequireReceiver);
                        other.transform.SendMessageUpwards("HitPhysical", Random.Range(30f, 50f) * Mathf.Pow(ModdedPlayer.Stats.explosionDamage, 1.25f), SendMessageOptions.DontRequireReceiver);
                        FMODCommon.PlayOneshotNetworked(weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
                    }
                }
                if (other.gameObject.CompareTag("BreakableWood") || (other.gameObject.CompareTag("BreakableRock") && mainTrigger))
                {
                    other.transform.SendMessage("Hit", 50, SendMessageOptions.DontRequireReceiver);
                    other.SendMessage("LocalizedHit", new LocalizedHitData(base.transform.position, 50f), SendMessageOptions.DontRequireReceiver);
                    FMODCommon.PlayOneshotNetworked(weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
                }
                if (other.gameObject.CompareTag("SmallTree") && !mainTrigger)
                {
                    other.SendMessage("Hit", 2, SendMessageOptions.DontRequireReceiver);
                }
                if (other.gameObject.CompareTag("Fire") && mainTrigger && firemanMain && !events.noFireAttack)
                {
                    other.SendMessage("Burn", SendMessageOptions.DontRequireReceiver);
                }
                if (other.gameObject.CompareTag("Tree") && mainTrigger && creepy_male)
                {
                    other.SendMessage("Explosion", 5f, SendMessageOptions.DontRequireReceiver);
                    FMODCommon.PlayOneshotNetworked(weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
                }
                if (!other.gameObject.CompareTag("structure") && !other.gameObject.CompareTag("SLTier1") && !other.gameObject.CompareTag("SLTier2") && !other.gameObject.CompareTag("SLTier3") && !other.gameObject.CompareTag("jumpObject") && !other.gameObject.CompareTag("UnderfootWood"))
                {
                    return;
                }
                if (!mainTrigger)
                {
                    return;
                }
                getStructureStrength component4 = other.gameObject.GetComponent <getStructureStrength>();
                bool flag2 = component4 == null;
                enemyAtStructure = true;
                int num2;
                if (!creepy_male && !creepy && !creepy_fat && !creepy_baby)
                {
                    if (!flag2)
                    {
                        num2 = ((maleSkinny || femaleSkinny) ? ((component4._strength == getStructureStrength.strength.weak) ? Mathf.FloorToInt(8f * GameSettings.Ai.regularStructureDamageRatio) : 0) : ((pale || painted || skinned) ? ((component4._strength != getStructureStrength.strength.veryStrong) ? Mathf.FloorToInt(16f * GameSettings.Ai.regularStructureDamageRatio) : 0) : ((component4._strength != getStructureStrength.strength.veryStrong) ? Mathf.FloorToInt(12f * GameSettings.Ai.regularStructureDamageRatio) : 0)));
                        goto IL_0d63;
                    }
                    return;
                }
                num2 = ((!creepy_baby) ? Mathf.FloorToInt(30f * GameSettings.Ai.creepyStructureDamageRatio) : Mathf.FloorToInt(10f * GameSettings.Ai.creepyStructureDamageRatio));
                goto IL_0d63;
IL_0d63:
                if (setup && setup.health.poisoned)
                {
                    num2 /= 2;
                }
                other.SendMessage("Hit", num2, SendMessageOptions.DontRequireReceiver);
                other.SendMessage("LocalizedHit", new LocalizedHitData(base.transform.position, num2), SendMessageOptions.DontRequireReceiver);
                FMODCommon.PlayOneshotNetworked(weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
            }
            catch (System.Exception ee)
            {
                ModAPI.Log.Write(ee.ToString());
            }
        }
        protected override void OnTriggerEnter(Collider other)
        {
            try
            {
                currState = animator.GetCurrentAnimatorStateInfo(0);
                nextState = animator.GetNextAnimatorStateInfo(0);
                if (currState.tagHash != damagedHash && currState.tagHash != staggerHash && currState.tagHash != hitStaggerHash && currState.tagHash != deathHash && nextState.tagHash != damagedHash && nextState.tagHash != staggerHash && nextState.tagHash != hitStaggerHash && nextState.tagHash != deathHash)
                {
                    if (other.gameObject.CompareTag("trapTrigger"))
                    {
                        other.gameObject.SendMessage("CutRope", SendMessageOptions.DontRequireReceiver);
                    }
                    if (!netPrefab && LocalPlayer.Animator && LocalPlayer.Animator.GetBool("deathBool"))
                    {
                        return;
                    }
                    if (other.gameObject.CompareTag("playerHitDetect") && mainTrigger)
                    {
                        if (!Scene.SceneTracker.hasAttackedPlayer)
                        {
                            Scene.SceneTracker.hasAttackedPlayer = true;
                            Scene.SceneTracker.Invoke("resetHasAttackedPlayer", Random.Range(120, 240));
                        }
                        targetStats component = other.transform.root.GetComponent <targetStats>();
                        if (component && component.targetDown)
                        {
                            return;
                        }
                        Animator componentInParent = other.gameObject.GetComponentInParent <Animator>();
                        Vector3  position          = rootTr.position;
                        position.y += 3.3f;
                        Vector3 direction = other.transform.position - position;
                        if (!Physics.Raycast(position, direction, out hit, direction.magnitude, enemyHitMask, QueryTriggerInteraction.Ignore))
                        {
                            if (!creepy_male && !creepy && !creepy_baby && !creepy_fat && events && componentInParent)
                            {
                                bool flag = InFront(other.gameObject);
                                if ((!BoltNetwork.isServer || !netPrefab) && flag && events.parryBool && (componentInParent.GetNextAnimatorStateInfo(1).tagHash == blockHash || componentInParent.GetCurrentAnimatorStateInfo(1).tagHash == blockHash))
                                {
                                    int parryDir = events.parryDir;
                                    BoltSetReflectedShim.SetIntegerReflected(animator, "parryDirInt", parryDir);
                                    if (BoltNetwork.isClient && netPrefab)
                                    {
                                        BoltSetReflectedShim.SetTriggerReflected(animator, "ClientParryTrigger");
                                        hitPrediction.StartParryPrediction();
                                        parryEnemy parryEnemy = parryEnemy.Create(GlobalTargets.OnlyServer);
                                        parryEnemy.Target = transform.root.GetComponent <BoltEntity>();
                                        parryEnemy.Send();
                                        FMODCommon.PlayOneshot(parryEvent, base.transform);
                                    }
                                    else
                                    {
                                        BoltSetReflectedShim.SetTriggerReflected(animator, "parryTrigger");
                                    }
                                    events.StartCoroutine("disableAllWeapons");
                                    playerHitReactions componentInParent2 = other.gameObject.GetComponentInParent <playerHitReactions>();
                                    if (componentInParent2 != null)
                                    {
                                        componentInParent2.enableParryState();
                                    }
                                    FMODCommon.PlayOneshotNetworked(parryEvent, base.transform, FMODCommon.NetworkRole.Server);
                                    events.parryBool = false;
                                    return;
                                }
                            }
                            if ((bool)events)
                            {
                                events.parryBool = false;
                            }
                            other.transform.root.SendMessage("getHitDirection", rootTr.position, SendMessageOptions.DontRequireReceiver);
                            int num = 0;
                            if (maleSkinny || femaleSkinny)
                            {
                                if (pale)
                                {
                                    num = ((!skinned) ? Mathf.FloorToInt(10f * GameSettings.Ai.skinnyDamageRatio) : Mathf.FloorToInt(10f * GameSettings.Ai.skinnyDamageRatio * GameSettings.Ai.skinMaskDamageRatio));
                                }
                                else
                                {
                                    num = Mathf.FloorToInt(13f * GameSettings.Ai.skinnyDamageRatio);
                                    if (maleSkinny && props.regularStick.activeSelf && events.leftHandWeapon)
                                    {
                                        num = Mathf.FloorToInt(num * 1.35f);
                                    }
                                }
                            }
                            else if (male && pale)
                            {
                                num = ((!skinned) ? Mathf.FloorToInt(22f * GameSettings.Ai.largePaleDamageRatio) : Mathf.FloorToInt(22f * GameSettings.Ai.largePaleDamageRatio * GameSettings.Ai.skinMaskDamageRatio));
                            }
                            else if (male && !firemanMain)
                            {
                                num = ((!painted) ? Mathf.FloorToInt(20f * GameSettings.Ai.regularMaleDamageRatio) : Mathf.FloorToInt(20f * GameSettings.Ai.regularMaleDamageRatio * GameSettings.Ai.paintedDamageRatio));
                            }
                            else if (female)
                            {
                                num = Mathf.FloorToInt(17f * GameSettings.Ai.regularFemaleDamageRatio);
                            }
                            else if (creepy)
                            {
                                num = ((!pale) ? Mathf.FloorToInt(28f * GameSettings.Ai.creepyDamageRatio) : Mathf.FloorToInt(35f * GameSettings.Ai.creepyDamageRatio));
                            }
                            else if (creepy_male)
                            {
                                num = ((!pale) ? Mathf.FloorToInt(30f * GameSettings.Ai.creepyDamageRatio) : Mathf.FloorToInt(40f * GameSettings.Ai.creepyDamageRatio));
                            }
                            else if (creepy_baby)
                            {
                                num = Mathf.FloorToInt(26f * GameSettings.Ai.creepyBabyDamageRatio);
                            }
                            else if (firemanMain)
                            {
                                num = Mathf.FloorToInt(12f * GameSettings.Ai.regularMaleDamageRatio);
                                if (events && !enemyAtStructure && !events.noFireAttack)
                                {
                                    if (BoltNetwork.isRunning && netPrefab)
                                    {
                                        other.gameObject.SendMessageUpwards("Burn", SendMessageOptions.DontRequireReceiver);
                                    }
                                    else
                                    {
                                        other.gameObject.SendMessageUpwards("Burn", SendMessageOptions.DontRequireReceiver);
                                    }
                                }
                            }
                            if (!female && male)
                            {
                                if (holdingRegularWeapon() && events.leftHandWeapon)
                                {
                                    num += 7;
                                }
                                else if (holdingAdvancedWeapon() && events.leftHandWeapon)
                                {
                                    num += 15;
                                }
                            }
                            if (setup && setup.health.poisoned)
                            {
                                num = Mathf.FloorToInt(num / 1.6f);
                            }

                            //My additional code
                            try
                            {
                                if (EnemyProg == null)
                                {
                                    EnemyProg = setup.health.gameObject.GetComponent <EnemyProgression>();
                                }
                                num = Mathf.RoundToInt(num * EnemyProg.DamageAmp);
                                BoltEntity bo = other.transform.root.GetComponent <BoltEntity>();
                                if (bo == null)
                                {
                                    bo = other.transform.root.GetComponentInChildren <BoltEntity>();
                                }


                                //POISON ATTACKS
                                if (EnemyProg.abilities.Contains(EnemyProgression.Abilities.Poisonous))
                                {
                                    if (BoltNetwork.isRunning)
                                    {
                                        if (BoltNetwork.isServer)
                                        {
                                            if (other.transform.root == LocalPlayer.Transform.root)
                                            {
                                                BuffDB.AddBuff(3, 32, num / 20, poisonDuration);
                                            }
                                            else
                                            {
                                                if (bo != null)
                                                {
                                                    Network.NetworkManager.SendLine("PO" + bo.networkId.PackedValue + ";32;" + num / 20 + ";" + poisonDuration, bo.controller);
                                                }
                                            }
                                        }
                                    }
                                    else
                                    {
                                        BuffDB.AddBuff(3, 32, num / 20, poisonDuration);
                                    }
                                }

                                //STUN ON HIT
                                if (EnemyProg.abilities.Contains(EnemyProgression.Abilities.Basher))
                                {
                                    if (BoltNetwork.isRunning)
                                    {
                                        if (BoltNetwork.isServer)
                                        {
                                            if (other.transform.root == LocalPlayer.Transform.root)
                                            {
                                                ModdedPlayer.instance.Stun(stunDuration);
                                            }
                                            else
                                            {
                                                if (bo != null)
                                                {
                                                    Network.NetworkManager.SendLine("ST" + bo.networkId.PackedValue + ";" + stunDuration + ";", bo.controller);
                                                }
                                            }
                                        }
                                    }
                                    else
                                    {
                                        ModdedPlayer.instance.Stun(stunDuration);
                                    }
                                }
                            }
                            catch (System.Exception ex)
                            {
                                ModAPI.Log.Write(ex.ToString());
                            }


                            PlayerStats component2 = other.transform.root.GetComponent <PlayerStats>();
                            if (male || female || creepy_male || creepy_fat || creepy || creepy_baby)
                            {
                                netId component3 = other.transform.GetComponent <netId>();
                                if (BoltNetwork.isServer && component3)
                                {
                                    other.transform.root.SendMessage("StartPrediction", SendMessageOptions.DontRequireReceiver);
                                    return;
                                }
                                if (BoltNetwork.isClient && netPrefab && !(bool)component3)
                                {
                                    other.transform.root.SendMessage("setCurrentAttacker", this, SendMessageOptions.DontRequireReceiver);
                                    other.transform.root.SendMessage("hitFromEnemy", num, SendMessageOptions.DontRequireReceiver);
                                    other.transform.root.SendMessage("StartPrediction", SendMessageOptions.DontRequireReceiver);
                                }
                                else if (BoltNetwork.isServer)
                                {
                                    if (!(bool)component3)
                                    {
                                        other.transform.root.SendMessage("setCurrentAttacker", this, SendMessageOptions.DontRequireReceiver);
                                        other.transform.root.SendMessage("hitFromEnemy", num, SendMessageOptions.DontRequireReceiver);
                                    }
                                }
                                else if (!BoltNetwork.isRunning && component2)
                                {
                                    component2.setCurrentAttacker(this);
                                    component2.hitFromEnemy(num);
                                }
                            }
                            else if (!netPrefab && component2)
                            {
                                component2.setCurrentAttacker(this);
                                component2.hitFromEnemy(num);
                            }



                            goto IL_092f;
                        }
                        return;
                    }
                    goto IL_092f;
                }
                return;

IL_092f:
                if (other.gameObject.CompareTag("enemyCollide") && mainTrigger && bodyCollider && !enemyAtStructure)
                {
                    setupAttackerType();
                    if (other.gameObject != bodyCollider)
                    {
                        other.transform.SendMessageUpwards("getAttackDirection", Random.Range(0, 2), SendMessageOptions.DontRequireReceiver);
                        other.transform.SendMessageUpwards("getCombo", Random.Range(1, 4), SendMessageOptions.DontRequireReceiver);
                        other.transform.SendMessage("getAttackerType", attackerType, SendMessageOptions.DontRequireReceiver);
                        other.transform.SendMessage("getAttacker", rootTr.gameObject, SendMessageOptions.DontRequireReceiver);
                        other.transform.SendMessageUpwards("Hit", 6, SendMessageOptions.DontRequireReceiver);
                        FMODCommon.PlayOneshotNetworked(weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
                    }
                }
                if (other.gameObject.CompareTag("BreakableWood") || (other.gameObject.CompareTag("BreakableRock") && mainTrigger))
                {
                    other.transform.SendMessage("Hit", 50, SendMessageOptions.DontRequireReceiver);
                    other.SendMessage("LocalizedHit", new LocalizedHitData(base.transform.position, 50f), SendMessageOptions.DontRequireReceiver);
                    FMODCommon.PlayOneshotNetworked(weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
                }
                if (other.gameObject.CompareTag("SmallTree") && !mainTrigger)
                {
                    other.SendMessage("Hit", 2, SendMessageOptions.DontRequireReceiver);
                }
                if (other.gameObject.CompareTag("Fire") && mainTrigger && firemanMain && !events.noFireAttack)
                {
                    other.SendMessage("Burn", SendMessageOptions.DontRequireReceiver);
                }
                if (other.gameObject.CompareTag("Tree") && mainTrigger && creepy_male)
                {
                    other.SendMessage("Explosion", 5f, SendMessageOptions.DontRequireReceiver);
                    FMODCommon.PlayOneshotNetworked(weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
                }
                if (!other.gameObject.CompareTag("structure") && !other.gameObject.CompareTag("SLTier1") && !other.gameObject.CompareTag("SLTier2") && !other.gameObject.CompareTag("SLTier3") && !other.gameObject.CompareTag("jumpObject") && !other.gameObject.CompareTag("UnderfootWood"))
                {
                    return;
                }
                if (!mainTrigger)
                {
                    return;
                }
                getStructureStrength component4 = other.gameObject.GetComponent <getStructureStrength>();
                bool flag2 = false;
                if (component4 == null)
                {
                    flag2 = true;
                }
                enemyAtStructure = true;
                int num2 = 0;
                if (!creepy_male && !creepy && !creepy_fat && !creepy_baby)
                {
                    if (!flag2)
                    {
                        num2 = ((maleSkinny || femaleSkinny) ? ((component4._strength == getStructureStrength.strength.weak) ? Mathf.FloorToInt(8f * GameSettings.Ai.regularStructureDamageRatio) : 0) : ((pale || painted || skinned) ? ((component4._strength != getStructureStrength.strength.veryStrong) ? Mathf.FloorToInt(16f * GameSettings.Ai.regularStructureDamageRatio) : 0) : ((component4._strength != getStructureStrength.strength.veryStrong) ? Mathf.FloorToInt(12f * GameSettings.Ai.regularStructureDamageRatio) : 0)));
                        goto IL_0d63;
                    }
                    return;
                }
                num2 = ((!creepy_baby) ? Mathf.FloorToInt(30f * GameSettings.Ai.creepyStructureDamageRatio) : Mathf.FloorToInt(10f * GameSettings.Ai.creepyStructureDamageRatio));
                goto IL_0d63;
IL_0d63:
                if (setup && setup.health.poisoned)
                {
                    num2 /= 2;
                }
                other.SendMessage("Hit", num2, SendMessageOptions.DontRequireReceiver);
                other.SendMessage("LocalizedHit", new LocalizedHitData(base.transform.position, num2), SendMessageOptions.DontRequireReceiver);
                FMODCommon.PlayOneshotNetworked(weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
            }
            catch (System.Exception ee)
            {
                ModAPI.Log.Write(ee.ToString());
            }
        }
示例#10
0
    private void Update()
    {
        if (this.allPlayers.Count == 0)
        {
            return;
        }
        if (this.target == null && this.allPlayers.Count > 0 && this.allPlayers[0] != null)
        {
            this.target = this.allPlayers[0].transform;
        }
        if (this.setup.hitReactions && !this.setup.hitReactions.onStructure && this.setup.pmCombat)
        {
            this.setup.pmCombat.FsmVariables.GetFsmBool("attackBelowBool").Value = false;
        }
        if (this.target)
        {
            this.fsmTarget.Value = this.target.gameObject;
            if (this.setup.pmCombat && this.setup.search.currentTarget)
            {
                this.fsmCurrentAttackerGo.Value = this.setup.search.currentTarget;
            }
            if ((this.target.gameObject.CompareTag("Player") || this.target.gameObject.CompareTag("PlayerNet")) && this.setup.pmBrain)
            {
                targetStats component = this.target.GetComponent <targetStats>();
                if (component && this.targetDist < 40f)
                {
                    if (component.isRed && !this.setup.collisionDetect.fsmFearOverrideBool.Value && !this.fsmBrainPlayerRedBool.Value)
                    {
                        this.setup.pmBrain.SendEvent("toSetFearful");
                        this.setup.aiManager.flee = true;
                        this.setup.pmBrain.FsmVariables.GetFsmGameObject("fearTargetGo").Value = this.target.gameObject;
                        this.fsmBrainPlayerRedBool.Value = true;
                        base.Invoke("resetPlayerRedReaction", 9f);
                    }
                    else if (!component.isRed && this.setup.pmBrain.FsmVariables.GetFsmBool("playerIsRed").Value)
                    {
                        this.resetPlayerRedReaction();
                    }
                }
            }
        }
        if (LocalPlayer.Transform != null)
        {
            LocalPlayer.Transform.position.y = this.thisTr.position.y;
            if (this.allPlayers[0])
            {
                if (this.allPlayers[0] != null)
                {
                    this.mainPlayerHeight = this.thisTr.position.y - this.allPlayers[0].transform.position.y;
                    this.mainPlayerDist   = Vector3.Distance(this.thisTr.position, this.allPlayers[0].transform.position);
                    this.tempTarget       = this.thisTr.InverseTransformPoint(this.allPlayers[0].transform.position);
                    this.mainPlayerAngle  = Mathf.Atan2(this.tempTarget.x, this.tempTarget.z) * 57.29578f;
                }
            }
            else
            {
                this.mainPlayerHeight = this.thisTr.position.y - LocalPlayer.Transform.position.y;
                this.mainPlayerDist   = Vector3.Distance(this.thisTr.position, LocalPlayer.Transform.position);
                this.tempTarget       = this.thisTr.InverseTransformPoint(LocalPlayer.Transform.position);
                this.mainPlayerAngle  = Mathf.Atan2(this.tempTarget.x, this.tempTarget.z) * 57.29578f;
            }
        }
        if (this.creepy_boss)
        {
            this.avatar.SetFloat("playerDist", this.mainPlayerDist);
            this.avatar.SetFloat("playerAngle", this.mainPlayerAngle);
        }
        if (this.setup.search.currentTarget)
        {
            this.playerDist   = Vector3.Distance(this.setup.search.currentTarget.transform.position, this.thisTr.position);
            this.playerTarget = this.thisTr.InverseTransformPoint(this.setup.search.currentTarget.transform.position);
            if (this.avatar.enabled)
            {
                this.playerAngle = Mathf.Atan2(this.playerTarget.x, this.playerTarget.z) * 57.29578f;
                if (this.creepy_boss)
                {
                    this.fsmPlayerAngle.Value = this.playerAngle;
                }
                else
                {
                    this.fsmPlayerAngle.Value = this.playerAngle;
                }
            }
            else
            {
                this.playerAngle          = 0f;
                this.fsmPlayerAngle.Value = this.playerAngle;
            }
            if (this.avatar.enabled)
            {
                if (this.creepy_fat || this.creepy_boss)
                {
                    if (this.creepy_boss)
                    {
                        this.avatar.SetFloatReflected("playerAngle", this.mainPlayerAngle);
                    }
                    else
                    {
                        this.avatar.SetFloatReflected("playerAngle", this.mainPlayerAngle);
                    }
                }
                else
                {
                    this.avatar.SetFloatReflected("playerAngle", this.playerAngle);
                }
            }
        }
        if (this.creepy || this.creepy_male || this.creepy_baby || this.creepy_fat)
        {
            this.fsmPlayerDist.Value = this.mainPlayerDist;
        }
        else
        {
            this.fsmClosestPlayerHeight.Value = this.mainPlayerHeight;
            this.fsmClosestPlayerDist.Value   = this.mainPlayerDist;
            this.fsmPlayerDist.Value          = this.playerDist;
        }
        if (this.setup.search.currentTarget && !this.awayFromPlayer)
        {
            Collider currentTargetCollider = this.setup.search.currentTargetCollider;
            if (this.setup.headJoint)
            {
                if (currentTargetCollider)
                {
                    this.playerDir = currentTargetCollider.bounds.center - this.setup.headJoint.transform.position;
                }
                else
                {
                    this.playerDir = this.setup.search.currentTarget.transform.position - this.setup.headJoint.transform.position;
                }
                this.fsmPlayerDir.Value = this.playerDir;
            }
            else if (currentTargetCollider)
            {
                this.playerDir          = currentTargetCollider.bounds.center - this.thisTr.position;
                this.fsmPlayerDir.Value = this.playerDir;
            }
        }
        float num = this.targetAngle;

        if (this.target)
        {
            this.localTarget = this.thisTr.InverseTransformPoint(this.target.position + this.targetOffset);
            this.targetAngle = Mathf.Atan2(this.localTarget.x, this.localTarget.z) * 57.29578f;
        }
        if (this.avatar.enabled)
        {
            this.avatar.SetFloatReflected("TargetDir", this.targetAngle);
            this.fsmTargetDir.Value = this.targetAngle;
        }
        else
        {
            this.avatar.SetFloatReflected("TargetDir", 0f);
            this.fsmTargetDir.Value = 0f;
        }
        if (this.target)
        {
            this.targetDist = Vector3.Distance(this.target.position + this.targetOffset, this.thisTr.position);
        }
        this.fsmTargetDist.Value = this.targetDist;
        if (this.setup.pmBrain)
        {
            this.fsmBrainPlayerAngle.Value  = this.playerAngle;
            this.fsmBrainPlayerDist.Value   = this.mainPlayerDist;
            this.fsmBrainPlayerDist2D.Value = this.mainPlayerDist;
            this.fsmBrainTargetDist.Value   = this.targetDist;
            this.fsmBrainTargetDir.Value    = this.targetAngle;
        }
    }
示例#11
0
 public void OnPathComplete(Path p)
 {
     if (!p.error)
     {
         if (this.path != null)
         {
             this.path.Release(this, false);
         }
         this.path = p;
         this.path.Claim(this);
         if (this.groundNode != null && this.target != null && this.groundNode.Walkable && !this.setup.search.fsmInCave.Value && !this.creepy && !this.creepy_baby && !this.creepy_male && !this.creepy_fat)
         {
             uint         area         = this.groundNode.Area;
             NNConstraint nnconstraint = new NNConstraint();
             nnconstraint.constrainArea = true;
             int area2 = (int)area;
             nnconstraint.area = area2;
             this.targetNode   = this.rg.GetNearest(this.target.position, NNConstraint.Default).node;
             bool        flag        = false;
             targetStats targetStats = null;
             if (this.target.gameObject.CompareTag("Player") || this.target.gameObject.CompareTag("PlayerNet"))
             {
                 targetStats = this.target.GetComponent <targetStats>();
                 if (targetStats.inWater || targetStats.onRaft)
                 {
                     flag = true;
                 }
             }
             if (this.targetNode != null || flag)
             {
                 if (flag)
                 {
                     GraphNode node     = this.rg.GetNearest(this.target.position, nnconstraint).node;
                     Vector3   position = this.target.position;
                     if (node == null)
                     {
                         node = this.groundNode;
                     }
                     this.lastPlayerTarget = this.target;
                     position = new Vector3((float)(node.position[0] / 1000), (float)(node.position[1] / 1000), (float)(node.position[2] / 1000));
                     this.setup.search.updateCurrentWaypoint(position);
                     this.setup.search.setToWaypoint();
                     if (this.setup.pmCombat)
                     {
                         this.setup.pmCombat.SendEvent("noValidPath");
                     }
                     if (this.setup.pmEncounter)
                     {
                         this.setup.pmEncounter.SendEvent("noValidPath");
                     }
                     if (this.setup.pmSearchScript)
                     {
                         this.setup.pmSearchScript._validPath = false;
                     }
                     if (this.setup.pmCombat)
                     {
                         this.setup.pmCombat.FsmVariables.GetFsmBool("playerWasOffNav").Value = true;
                     }
                 }
                 else if (this.targetNode.Area != this.groundNode.Area)
                 {
                     GraphNode node2     = this.rg.GetNearest(this.target.position, nnconstraint).node;
                     Vector3   position2 = this.target.position;
                     if (node2 != null)
                     {
                         position2 = new Vector3((float)(node2.position[0] / 1000), (float)(node2.position[1] / 1000), (float)(node2.position[2] / 1000));
                     }
                     float num = this.target.position.y - position2.y;
                     if (!this.target.gameObject.CompareTag("Player") && !this.target.gameObject.CompareTag("PlayerNet"))
                     {
                         this.setup.search.updateCurrentWaypoint(base.transform.position);
                     }
                     if (Vector3.Distance(position2, this.target.position) > 10f)
                     {
                         if (this.target.gameObject.CompareTag("Player") || (this.target.gameObject.CompareTag("PlayerNet") && num > 2f))
                         {
                             if (!targetStats || targetStats.onStructure)
                             {
                             }
                             if (!this.climbingWallCooDown && !this.doneClimbCoolDown && !this.setup.hitReactions.onStructure)
                             {
                                 base.StartCoroutine(this.findCloseClimbingWall(this.target, this.targetNode));
                                 this.lastPlayerTarget    = this.target;
                                 this.climbingWallCooDown = true;
                             }
                             if (this.setup.pmBrain && !this.doingClimbWall)
                             {
                                 this.setup.pmBrain.SendEvent("toSetPassive");
                             }
                         }
                         this.setup.search.updateCurrentWaypoint(position2);
                         if (!this.setup.hitReactions.onStructure && !this.fsmOnWallBool.Value)
                         {
                             if (this.setup.pmCombat)
                             {
                                 this.setup.pmCombat.SendEvent("noValidPath");
                             }
                             if (this.setup.pmEncounter)
                             {
                                 this.setup.pmEncounter.SendEvent("noValidPath");
                             }
                             if (this.setup.pmSearchScript)
                             {
                                 this.setup.pmSearchScript._validPath = false;
                             }
                         }
                     }
                 }
                 if (this.target.gameObject.CompareTag("Player") || this.target.gameObject.CompareTag("PlayerNet"))
                 {
                     if (this.setup.hitReactions.onStructure && this.thisTr.position.y - this.target.position.y > 3f)
                     {
                         if (this.setup.pmCombat)
                         {
                             this.setup.pmCombat.FsmVariables.GetFsmBool("attackBelowBool").Value = true;
                         }
                     }
                     else if (this.setup.pmCombat)
                     {
                         this.setup.pmCombat.FsmVariables.GetFsmBool("attackBelowBool").Value = false;
                     }
                 }
             }
         }
         if (this.setup.pmCombat)
         {
             this.setup.pmCombat.SendEvent("validPath");
         }
         if (this.setup.pmEncounter)
         {
             this.setup.pmEncounter.SendEvent("validPath");
         }
         if (this.setup.pmSearchScript)
         {
             this.setup.pmSearchScript._validPath = true;
         }
         this.currentWaypoint = 1;
         return;
     }
     if (this.setup.pmCombat)
     {
         this.setup.pmCombat.SendEvent("noValidPath");
     }
     if (this.setup.pmEncounter)
     {
         this.setup.pmEncounter.SendEvent("noValidPath");
     }
     if (this.setup.pmSearchScript)
     {
         this.setup.pmSearchScript._validPath = false;
     }
 }
示例#12
0
 private void doAwake()
 {
     if (this.disableAiForDebug)
     {
         this.disableForDebug();
     }
     this.allFSM = base.gameObject.GetComponents<PlayMakerFSM>();
     PlayMakerFSM[] array = this.allFSM;
     for (int i = 0; i < array.Length; i++)
     {
         PlayMakerFSM playMakerFSM = array[i];
         if (playMakerFSM.FsmName == "action_combatFSM")
         {
             this.pmCombat = playMakerFSM;
             this.actionFSM.Add(playMakerFSM);
         }
         if (playMakerFSM.FsmName == "action_inTreeFSM")
         {
             this.pmTree = playMakerFSM;
             this.actionFSM.Add(playMakerFSM);
         }
         if (playMakerFSM.FsmName == "global_visionFSM")
         {
             this.pmVision = playMakerFSM;
         }
         if (playMakerFSM.FsmName == "action_searchFSM")
         {
             this.pmSearch = playMakerFSM;
             this.actionFSM.Add(playMakerFSM);
         }
         if (playMakerFSM.FsmName == "action_stalkingFSM")
         {
             this.pmStalk = playMakerFSM;
             this.actionFSM.Add(playMakerFSM);
         }
         if (playMakerFSM.FsmName == "global_motorFSM")
         {
             this.pmMotor = playMakerFSM;
         }
         if (playMakerFSM.FsmName == "action_sleepingFSM")
         {
             this.pmSleep = playMakerFSM;
             this.actionFSM.Add(playMakerFSM);
         }
         if (playMakerFSM.FsmName == "global_brainFSM")
         {
             this.pmBrain = playMakerFSM;
         }
         if (playMakerFSM.FsmName == "global_alertManagerFSM")
         {
             this.pmAlert = playMakerFSM;
         }
         if (playMakerFSM.FsmName == "action_encounterFSM")
         {
             this.pmEncounter = playMakerFSM;
             this.actionFSM.Add(playMakerFSM);
         }
         if (playMakerFSM.FsmName == "global_targetManagerFSM")
         {
             this.pmTargetManager = playMakerFSM;
         }
     }
     this.thisGo = base.gameObject;
     this.rootTr = base.transform.root.transform;
     this.rotateTr = base.transform;
     this.familyFunctions = base.transform.parent.GetComponent<mutantFamilyFunctions>();
     this.animator = base.GetComponent<Animator>();
     this.ai = base.GetComponent<mutantAI>();
     this.aiManager = base.GetComponent<mutantAiManager>();
     this.typeSetup = base.transform.parent.GetComponent<mutantTypeSetup>();
     this.health = base.GetComponent<EnemyHealth>();
     this.dayCycle = base.GetComponentInChildren<mutantDayCycle>();
     this.enemyEvents = base.transform.GetComponent<enemyAnimEvents>();
     this.controller = base.transform.root.GetComponent<CharacterController>();
     this.hashs = base.transform.GetComponent<mutantMaleHashId>();
     this.propManager = base.transform.GetComponent<mutantPropManager>();
     this.bodyVariation = base.transform.GetComponentInChildren<setupBodyVariation>();
     this.collisionDetect = base.transform.GetComponentInChildren<mutantCollisionDetect>();
     this.hitReceiver = base.transform.GetComponentInChildren<mutantHitReceiver>();
     this.animControl = base.transform.GetComponentInChildren<mutantAnimatorControl>();
     if (!this.disableAiForDebug)
     {
         this.sceneInfo = Scene.SceneTracker;
     }
     this.search = base.GetComponent<mutantSearchFunctions>();
     this.worldSearch = base.transform.parent.GetComponent<mutantWorldSearchFunctions>();
     this.mutantStats = base.transform.parent.GetComponent<targetStats>();
     Transform[] componentsInChildren = base.transform.parent.GetComponentsInChildren<Transform>();
     Transform[] array2 = componentsInChildren;
     for (int j = 0; j < array2.Length; j++)
     {
         Transform transform = array2[j];
         if (transform.name == "char_Head")
         {
             this.headJoint = transform.gameObject;
         }
         if (transform.name == "char_LeftHandWeapon")
         {
             this.charLeftWeaponGo = transform.gameObject;
         }
         if (transform.name == "currentWaypoint")
         {
             this.currentWaypoint = transform.gameObject;
         }
         if (transform.name == "lastPlayerSighting")
         {
             this.lastSighting = transform.gameObject;
         }
         if (transform.name == "tempLookat")
         {
             this.lookatTr = transform;
         }
         if (transform.name == "char_club_mesh1")
         {
             this.weapon = transform.gameObject;
         }
         if (transform.name == "FireStick")
         {
             this.fireWeapon = transform.gameObject;
         }
         if (transform.name == "char_RightHand")
         {
             this.clawsWeapon = transform.gameObject;
         }
         if (transform.name == "weaponLeftGO")
         {
             this.leftWeapon = transform.gameObject;
         }
         if (transform.name == "weaponLeftGO1")
         {
             this.leftWeapon1 = transform.gameObject;
         }
         if (transform.name == "weaponRightGO")
         {
             this.rightWeapon = transform.gameObject;
         }
         if (transform.name == "mainHitTrigger")
         {
             this.mainWeapon = transform.gameObject;
         }
         if (transform.name == "fireBomb")
         {
             this.fireBombGo = transform.gameObject;
         }
         if (transform.name == "dragPointGo")
         {
             this.familyFunctions.dragPoint = transform.gameObject;
         }
         if (transform.name == "bodyCollision")
         {
             if (this.pmCombat)
             {
                 this.pmCombat.FsmVariables.GetFsmGameObject("bodyCollisionGo").Value = transform.gameObject;
             }
             this.bodyCollisionCollider = transform.GetComponent<CapsuleCollider>();
         }
         if (transform.name == "char_LeftFoot")
         {
             this.leftFoot = transform;
         }
         if (transform.name == "headCollision")
         {
             this.headColliderGo = transform.gameObject;
         }
     }
 }
示例#13
0
        protected override void OnTriggerEnter(Collider other)
        {
            try
            {
                if (GameSetup.IsMpClient)
                {
                    if (entity == null && !EnemyManager.clientEnemies.ContainsKey(entity.networkId.PackedValue))
                    {
                        return;
                    }
                    else if (EnemyManager.clientEnemies[entity.networkId.PackedValue].Outdated)
                    {
                        LastReqTime = Time.time;
                        using (System.IO.MemoryStream answerStream = new System.IO.MemoryStream())
                        {
                            using (System.IO.BinaryWriter w = new System.IO.BinaryWriter(answerStream))
                            {
                                w.Write(29);
                                w.Write(entity.networkId.PackedValue);
                                w.Close();
                            }
                            ChampionsOfForest.Network.NetworkManager.SendLine(answerStream.ToArray(), ChampionsOfForest.Network.NetworkManager.Target.OnlyServer);
                            answerStream.Close();
                        }
                    }
                }

                currState = animator.GetCurrentAnimatorStateInfo(0);
                nextState = animator.GetNextAnimatorStateInfo(0);
                if (currState.tagHash != damagedHash && currState.tagHash != staggerHash && currState.tagHash != hitStaggerHash && currState.tagHash != deathHash && nextState.tagHash != damagedHash && nextState.tagHash != staggerHash && nextState.tagHash != hitStaggerHash && nextState.tagHash != deathHash)
                {
                    if (other.gameObject.CompareTag("trapTrigger"))
                    {
                        other.gameObject.SendMessage("CutRope", SendMessageOptions.DontRequireReceiver);
                    }
                    if (!netPrefab && LocalPlayer.Animator && LocalPlayer.Animator.GetBool("deathBool"))
                    {
                        return;
                    }
                    if (other.gameObject.CompareTag("playerHitDetect") && mainTrigger)
                    {
                        if (!Scene.SceneTracker.hasAttackedPlayer)
                        {
                            Scene.SceneTracker.hasAttackedPlayer = true;
                            Scene.SceneTracker.Invoke("resetHasAttackedPlayer", Random.Range(120, 240));
                        }
                        targetStats component = other.transform.root.GetComponent <targetStats>();
                        if (component && component.targetDown)
                        {
                            return;
                        }
                        Animator componentInParent = other.gameObject.GetComponentInParent <Animator>();
                        Vector3  position          = rootTr.position;
                        position.y += 3.3f;
                        Vector3 direction = other.transform.position - position;
                        if (!Physics.Raycast(position, direction, out hit, direction.magnitude, enemyHitMask, QueryTriggerInteraction.Ignore))
                        {
                            ModAPI.Console.Write("Starting to get hit");
                            if (((!creepy_male && !creepy && !creepy_baby && !creepy_fat) || ModdedPlayer.instance.ParryAnything) && events)
                            {
                                ModAPI.Console.Write("events exists");

                                if (componentInParent)
                                {
                                    ModAPI.Console.Write("componentInParent exists");

                                    bool flag = InFront(other.gameObject);
                                    ModAPI.Console.Write("in front: " + flag +
                                                         "\nevents.parryBool: " + events.parryBool +
                                                         "\nnext tagHash: " + (componentInParent.GetNextAnimatorStateInfo(1).tagHash == blockHash) +
                                                         "\ncurrent tagHash" + (componentInParent.GetCurrentAnimatorStateInfo(1).tagHash == blockHash) +
                                                         "\nfirst condition" + (!BoltNetwork.isServer || !netPrefab));
                                    if ((!BoltNetwork.isServer || !netPrefab) && flag && events.parryBool && ((componentInParent.GetNextAnimatorStateInfo(1).tagHash == blockHash || componentInParent.GetCurrentAnimatorStateInfo(1).tagHash == blockHash) || ModdedPlayer.instance.ParryAnything))
                                    {
                                        ModAPI.Console.Write("Parrying successful");
                                        int parryDir = events.parryDir;
                                        BoltSetReflectedShim.SetIntegerReflected(animator, "parryDirInt", parryDir);
                                        if (BoltNetwork.isClient && netPrefab)
                                        {
                                            BoltSetReflectedShim.SetTriggerReflected(animator, "ClientParryTrigger");
                                            hitPrediction.StartParryPrediction();
                                            parryEnemy parryEnemy = parryEnemy.Create(GlobalTargets.OnlyServer);
                                            parryEnemy.Target = transform.root.GetComponent <BoltEntity>();
                                            parryEnemy.Send();
                                            FMODCommon.PlayOneshot(parryEvent, base.transform);
                                        }
                                        else
                                        {
                                            BoltSetReflectedShim.SetTriggerReflected(animator, "parryTrigger");
                                        }
                                        SpellActions.DoParry(transform.position);
                                        events.StartCoroutine("disableAllWeapons");
                                        playerHitReactions componentInParent2 = other.gameObject.GetComponentInParent <playerHitReactions>();
                                        if (componentInParent2 != null)
                                        {
                                            componentInParent2.enableParryState();
                                        }
                                        FMODCommon.PlayOneshotNetworked(parryEvent, base.transform, FMODCommon.NetworkRole.Server);
                                        events.parryBool = false;
                                        return;
                                    }
                                }
                            }
                            if ((bool)events)
                            {
                                events.parryBool = false;
                            }
                            other.transform.root.SendMessage("getHitDirection", rootTr.position, SendMessageOptions.DontRequireReceiver);
                            int num = 0;
                            if (maleSkinny || femaleSkinny)
                            {
                                if (pale)
                                {
                                    num = ((!skinned) ? Mathf.FloorToInt(10f * GameSettings.Ai.skinnyDamageRatio) : Mathf.FloorToInt(10f * GameSettings.Ai.skinnyDamageRatio * GameSettings.Ai.skinMaskDamageRatio));
                                }
                                else
                                {
                                    num = Mathf.FloorToInt(13f * GameSettings.Ai.skinnyDamageRatio);
                                    if (maleSkinny && props.regularStick.activeSelf && events.leftHandWeapon)
                                    {
                                        num = Mathf.FloorToInt(num * 1.35f);
                                    }
                                }
                            }
                            else if (male && pale)
                            {
                                num = ((!skinned) ? Mathf.FloorToInt(22f * GameSettings.Ai.largePaleDamageRatio) : Mathf.FloorToInt(22f * GameSettings.Ai.largePaleDamageRatio * GameSettings.Ai.skinMaskDamageRatio));
                            }
                            else if (male && !firemanMain)
                            {
                                num = ((!painted) ? Mathf.FloorToInt(20f * GameSettings.Ai.regularMaleDamageRatio) : Mathf.FloorToInt(20f * GameSettings.Ai.regularMaleDamageRatio * GameSettings.Ai.paintedDamageRatio));
                            }
                            else if (female)
                            {
                                num = Mathf.FloorToInt(17f * GameSettings.Ai.regularFemaleDamageRatio);
                            }
                            else if (creepy)
                            {
                                num = ((!pale) ? Mathf.FloorToInt(28f * GameSettings.Ai.creepyDamageRatio) : Mathf.FloorToInt(35f * GameSettings.Ai.creepyDamageRatio));
                            }
                            else if (creepy_male)
                            {
                                num = ((!pale) ? Mathf.FloorToInt(60f * GameSettings.Ai.creepyDamageRatio) : Mathf.FloorToInt(120f * GameSettings.Ai.creepyDamageRatio));
                            }
                            else if (creepy_baby)
                            {
                                num = Mathf.FloorToInt(26f * GameSettings.Ai.creepyBabyDamageRatio);
                            }
                            else if (firemanMain)
                            {
                                num = Mathf.FloorToInt(12f * GameSettings.Ai.regularMaleDamageRatio);
                                if (events && !enemyAtStructure && !events.noFireAttack)
                                {
                                    if (BoltNetwork.isRunning && netPrefab)
                                    {
                                        other.gameObject.SendMessageUpwards("Burn", SendMessageOptions.DontRequireReceiver);
                                    }
                                    else
                                    {
                                        other.gameObject.SendMessageUpwards("Burn", SendMessageOptions.DontRequireReceiver);
                                    }
                                }
                            }
                            if (!female && male)
                            {
                                if (holdingRegularWeapon() && events.leftHandWeapon)
                                {
                                    num += 7;
                                }
                                else if (holdingAdvancedWeapon() && events.leftHandWeapon)
                                {
                                    num += 15;
                                }
                            }
                            if (setup && setup.health.poisoned)
                            {
                                num = Mathf.FloorToInt(num / 1.6f);
                            }

                            //My additional code
                            try
                            {
                                if (GameSetup.IsMpClient)
                                {
                                    if (other.transform.root == LocalPlayer.Transform.root)
                                    {
                                        var x = EnemyManager.clientEnemies[entity.networkId.PackedValue];
                                        num = Mathf.RoundToInt(num * x.damagemult);
                                        if (x.abilities.Contains(EnemyProgression.Abilities.RainEmpowerement))
                                        {
                                            if (TheForest.Utils.Scene.WeatherSystem.Raining)
                                            {
                                                num *= 5;
                                            }
                                        }
                                        if (x.abilities.Contains(EnemyProgression.Abilities.Poisonous))
                                        {
                                            BuffDB.AddBuff(3, 32, Mathf.Sqrt(num / 10) / 7, poisonDuration);
                                        }
                                        if (x.abilities.Contains(EnemyProgression.Abilities.Basher))
                                        {
                                            ModdedPlayer.instance.Stun(stunDuration);
                                        }
                                        if (ModdedPlayer.instance.thornsDamage > 0)
                                        {
                                            DamageMath.DamageClamp(ModdedPlayer.instance.thornsDamage, out int dmg, out int reps);
                                            PlayerHitEnemy playerHitEnemy = PlayerHitEnemy.Create(GlobalTargets.OnlyServer);
                                            playerHitEnemy.Target = entity;
                                            playerHitEnemy.Hit    = dmg;
                                            AsyncHit.SendPlayerHitEnemy(playerHitEnemy, reps, 0.1f);
                                        }
                                    }
                                }
                                else
                                {
                                    if (other.transform.root == LocalPlayer.Transform.root)
                                    {
                                        if (EnemyProg == null)
                                        {
                                            EnemyProg = setup.health.gameObject.GetComponent <EnemyProgression>();
                                        }
                                        num = Mathf.RoundToInt(num * EnemyProg.DamageAmp * EnemyProg.DebuffDmgMult);
                                        BoltEntity bo = other.transform.root.GetComponent <BoltEntity>();
                                        if (bo == null)
                                        {
                                            bo = other.transform.root.GetComponentInChildren <BoltEntity>();
                                        }


                                        //POISON ATTACKS
                                        if (EnemyProg.abilities.Contains(EnemyProgression.Abilities.Poisonous))
                                        {
                                            BuffDB.AddBuff(3, 32, Mathf.Sqrt(num / 10) / 10, poisonDuration);
                                        }

                                        //STUN ON HIT
                                        if (EnemyProg.abilities.Contains(EnemyProgression.Abilities.Basher))
                                        {
                                            ModdedPlayer.instance.Stun(stunDuration);
                                        }

                                        if (ModdedPlayer.instance.thornsDamage > 0)
                                        {
                                            Invoke("HitEnemeyDelayed", 0.1f);
                                        }
                                    }
                                }
                            }
                            catch (System.Exception ex)
                            {
                                ModAPI.Log.Write(ex.ToString());
                            }


                            PlayerStats component2 = other.transform.root.GetComponent <PlayerStats>();
                            if (male || female || creepy_male || creepy_fat || creepy || creepy_baby)
                            {
                                netId component3 = other.transform.GetComponent <netId>();
                                if (BoltNetwork.isServer && component3)
                                {
                                    other.transform.root.SendMessage("StartPrediction", SendMessageOptions.DontRequireReceiver);
                                    return;
                                }
                                if (BoltNetwork.isClient && netPrefab && !(bool)component3)
                                {
                                    other.transform.root.SendMessage("setCurrentAttacker", this, SendMessageOptions.DontRequireReceiver);
                                    other.transform.root.SendMessage("hitFromEnemy", num, SendMessageOptions.DontRequireReceiver);
                                    other.transform.root.SendMessage("StartPrediction", SendMessageOptions.DontRequireReceiver);
                                }
                                else if (BoltNetwork.isServer)
                                {
                                    if (!(bool)component3)
                                    {
                                        other.transform.root.SendMessage("setCurrentAttacker", this, SendMessageOptions.DontRequireReceiver);
                                        other.transform.root.SendMessage("hitFromEnemy", num, SendMessageOptions.DontRequireReceiver);
                                    }
                                }
                                else if (!BoltNetwork.isRunning && component2)
                                {
                                    component2.setCurrentAttacker(this);
                                    component2.hitFromEnemy(num);
                                }
                            }
                            else if (!netPrefab && component2)
                            {
                                component2.setCurrentAttacker(this);
                                component2.hitFromEnemy(num);
                            }



                            goto IL_092f;
                        }
                        return;
                    }
                    goto IL_092f;
                }
                return;

IL_092f:
                if (other.gameObject.CompareTag("enemyCollide") && mainTrigger && bodyCollider && !enemyAtStructure)
                {
                    setupAttackerType();
                    if (other.gameObject != bodyCollider)
                    {
                        other.transform.SendMessageUpwards("getAttackDirection", Random.Range(0, 2), SendMessageOptions.DontRequireReceiver);
                        other.transform.SendMessageUpwards("getCombo", Random.Range(1, 4), SendMessageOptions.DontRequireReceiver);
                        other.transform.SendMessage("getAttackerType", attackerType, SendMessageOptions.DontRequireReceiver);
                        other.transform.SendMessage("getAttacker", rootTr.gameObject, SendMessageOptions.DontRequireReceiver);
                        other.transform.SendMessageUpwards("Hit", 6, SendMessageOptions.DontRequireReceiver);
                        FMODCommon.PlayOneshotNetworked(weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
                    }
                }
                if (other.gameObject.CompareTag("BreakableWood") || (other.gameObject.CompareTag("BreakableRock") && mainTrigger))
                {
                    other.transform.SendMessage("Hit", 50, SendMessageOptions.DontRequireReceiver);
                    other.SendMessage("LocalizedHit", new LocalizedHitData(base.transform.position, 50f), SendMessageOptions.DontRequireReceiver);
                    FMODCommon.PlayOneshotNetworked(weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
                }
                if (other.gameObject.CompareTag("SmallTree") && !mainTrigger)
                {
                    other.SendMessage("Hit", 2, SendMessageOptions.DontRequireReceiver);
                }
                if (other.gameObject.CompareTag("Fire") && mainTrigger && firemanMain && !events.noFireAttack)
                {
                    other.SendMessage("Burn", SendMessageOptions.DontRequireReceiver);
                }
                if (other.gameObject.CompareTag("Tree") && mainTrigger && creepy_male)
                {
                    other.SendMessage("Explosion", 5f, SendMessageOptions.DontRequireReceiver);
                    FMODCommon.PlayOneshotNetworked(weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
                }
                if (!other.gameObject.CompareTag("structure") && !other.gameObject.CompareTag("SLTier1") && !other.gameObject.CompareTag("SLTier2") && !other.gameObject.CompareTag("SLTier3") && !other.gameObject.CompareTag("jumpObject") && !other.gameObject.CompareTag("UnderfootWood"))
                {
                    return;
                }
                if (!mainTrigger)
                {
                    return;
                }
                getStructureStrength component4 = other.gameObject.GetComponent <getStructureStrength>();
                bool flag2 = false;
                if (component4 == null)
                {
                    flag2 = true;
                }
                enemyAtStructure = true;
                int num2 = 0;
                if (!creepy_male && !creepy && !creepy_fat && !creepy_baby)
                {
                    if (!flag2)
                    {
                        num2 = ((maleSkinny || femaleSkinny) ? ((component4._strength == getStructureStrength.strength.weak) ? Mathf.FloorToInt(8f * GameSettings.Ai.regularStructureDamageRatio) : 0) : ((pale || painted || skinned) ? ((component4._strength != getStructureStrength.strength.veryStrong) ? Mathf.FloorToInt(16f * GameSettings.Ai.regularStructureDamageRatio) : 0) : ((component4._strength != getStructureStrength.strength.veryStrong) ? Mathf.FloorToInt(12f * GameSettings.Ai.regularStructureDamageRatio) : 0)));
                        goto IL_0d63;
                    }
                    return;
                }
                num2 = ((!creepy_baby) ? Mathf.FloorToInt(30f * GameSettings.Ai.creepyStructureDamageRatio) : Mathf.FloorToInt(10f * GameSettings.Ai.creepyStructureDamageRatio));
                goto IL_0d63;
IL_0d63:
                if (setup && setup.health.poisoned)
                {
                    num2 /= 2;
                }
                other.SendMessage("Hit", num2, SendMessageOptions.DontRequireReceiver);
                other.SendMessage("LocalizedHit", new LocalizedHitData(base.transform.position, num2), SendMessageOptions.DontRequireReceiver);
                FMODCommon.PlayOneshotNetworked(weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
            }
            catch (System.Exception ee)
            {
                ModAPI.Log.Write(ee.ToString());
            }
        }
示例#14
0
 private void OnTriggerEnter(Collider other)
 {
     this.currState = this.animator.GetCurrentAnimatorStateInfo(0);
     this.nextState = this.animator.GetNextAnimatorStateInfo(0);
     if (this.currState.tagHash == this.damagedHash || this.currState.tagHash == this.staggerHash || this.currState.tagHash == this.hitStaggerHash || this.currState.tagHash == this.deathHash || this.nextState.tagHash == this.damagedHash || this.nextState.tagHash == this.staggerHash || this.nextState.tagHash == this.hitStaggerHash || this.nextState.tagHash == this.deathHash)
     {
         return;
     }
     if (other.gameObject.CompareTag("trapTrigger"))
     {
         other.gameObject.SendMessage("CutRope", SendMessageOptions.DontRequireReceiver);
     }
     if (!this.netPrefab && LocalPlayer.Animator && LocalPlayer.Animator.GetBool("deathBool"))
     {
         return;
     }
     if (other.gameObject.CompareTag("SmallTree"))
     {
         other.SendMessage("Hit", 10, SendMessageOptions.DontRequireReceiver);
         other.SendMessage("Hit", 10, SendMessageOptions.DontRequireReceiver);
     }
     if (other.gameObject.CompareTag("playerHitDetect") && this.mainTrigger)
     {
         if (!Scene.SceneTracker.hasAttackedPlayer)
         {
             Scene.SceneTracker.hasAttackedPlayer = true;
             Scene.SceneTracker.Invoke("resetHasAttackedPlayer", (float)UnityEngine.Random.Range(120, 240));
         }
         targetStats component = other.transform.root.GetComponent <targetStats>();
         if (component && component.targetDown)
         {
             return;
         }
         Animator componentInParent = other.gameObject.GetComponentInParent <Animator>();
         Vector3  position          = this.rootTr.position;
         position.y += 3.3f;
         Vector3 direction = other.transform.position - position;
         if (Physics.Raycast(position, direction, out this.hit, direction.magnitude, this.enemyHitMask, QueryTriggerInteraction.Ignore))
         {
             return;
         }
         if (!this.creepy_male && !this.creepy && !this.creepy_baby && !this.creepy_fat && this.events && componentInParent)
         {
             bool flag = this.InFront(other.gameObject);
             if (!BoltNetwork.isServer || !this.netPrefab)
             {
                 if (flag && this.events.parryBool && (componentInParent.GetNextAnimatorStateInfo(1).tagHash == this.blockHash || componentInParent.GetCurrentAnimatorStateInfo(1).tagHash == this.blockHash))
                 {
                     int parryDir = this.events.parryDir;
                     this.animator.SetIntegerReflected("parryDirInt", parryDir);
                     if (BoltNetwork.isClient && this.netPrefab)
                     {
                         this.animator.SetTriggerReflected("ClientParryTrigger");
                         this.hitPrediction.StartParryPrediction();
                         parryEnemy parryEnemy = parryEnemy.Create(GlobalTargets.OnlyServer);
                         parryEnemy.Target = base.transform.root.GetComponent <BoltEntity>();
                         parryEnemy.Send();
                         FMODCommon.PlayOneshot(this.parryEvent, base.transform);
                     }
                     else
                     {
                         this.animator.SetTriggerReflected("parryTrigger");
                     }
                     this.events.StartCoroutine("disableAllWeapons");
                     playerHitReactions componentInParent2 = other.gameObject.GetComponentInParent <playerHitReactions>();
                     if (componentInParent2 != null)
                     {
                         componentInParent2.enableParryState();
                     }
                     FMODCommon.PlayOneshotNetworked(this.parryEvent, base.transform, FMODCommon.NetworkRole.Server);
                     this.events.parryBool = false;
                     return;
                 }
             }
         }
         if (this.events)
         {
             this.events.parryBool = false;
         }
         other.transform.root.SendMessage("getHitDirection", this.rootTr.position, SendMessageOptions.DontRequireReceiver);
         int num = 0;
         if (this.maleSkinny || this.femaleSkinny)
         {
             if (this.pale)
             {
                 if (this.skinned)
                 {
                     num = Mathf.FloorToInt(10f * GameSettings.Ai.skinnyDamageRatio * GameSettings.Ai.skinMaskDamageRatio);
                 }
                 else
                 {
                     num = Mathf.FloorToInt(10f * GameSettings.Ai.skinnyDamageRatio);
                 }
             }
             else
             {
                 num = Mathf.FloorToInt(13f * GameSettings.Ai.skinnyDamageRatio);
                 if (this.maleSkinny && this.props.regularStick.activeSelf && this.events.leftHandWeapon)
                 {
                     num = Mathf.FloorToInt((float)num * 1.35f);
                 }
             }
         }
         else if (this.male && this.pale)
         {
             if (this.skinned)
             {
                 num = Mathf.FloorToInt(22f * GameSettings.Ai.largePaleDamageRatio * GameSettings.Ai.skinMaskDamageRatio);
             }
             else
             {
                 num = Mathf.FloorToInt(22f * GameSettings.Ai.largePaleDamageRatio);
             }
         }
         else if (this.male && !this.firemanMain)
         {
             if (this.painted)
             {
                 num = Mathf.FloorToInt(20f * GameSettings.Ai.regularMaleDamageRatio * GameSettings.Ai.paintedDamageRatio);
             }
             else
             {
                 num = Mathf.FloorToInt(20f * GameSettings.Ai.regularMaleDamageRatio);
             }
         }
         else if (this.female)
         {
             num = Mathf.FloorToInt(17f * GameSettings.Ai.regularFemaleDamageRatio);
         }
         else if (this.creepy)
         {
             if (this.pale)
             {
                 num = Mathf.FloorToInt(35f * GameSettings.Ai.creepyDamageRatio);
             }
             else
             {
                 num = Mathf.FloorToInt(28f * GameSettings.Ai.creepyDamageRatio);
             }
         }
         else if (this.creepy_male)
         {
             if (this.pale)
             {
                 num = Mathf.FloorToInt(40f * GameSettings.Ai.creepyDamageRatio);
             }
             else
             {
                 num = Mathf.FloorToInt(30f * GameSettings.Ai.creepyDamageRatio);
             }
         }
         else if (this.creepy_baby)
         {
             num = Mathf.FloorToInt(26f * GameSettings.Ai.creepyBabyDamageRatio);
         }
         else if (this.firemanMain)
         {
             num = Mathf.FloorToInt(12f * GameSettings.Ai.regularMaleDamageRatio);
             if (this.events && !this.enemyAtStructure && !this.events.noFireAttack)
             {
                 if (BoltNetwork.isRunning && this.netPrefab)
                 {
                     other.gameObject.SendMessageUpwards("Burn", SendMessageOptions.DontRequireReceiver);
                 }
                 else
                 {
                     other.gameObject.SendMessageUpwards("Burn", SendMessageOptions.DontRequireReceiver);
                 }
             }
         }
         if (!this.female && this.male)
         {
             if (this.holdingRegularWeapon() && this.events.leftHandWeapon)
             {
                 num += 7;
             }
             else if (this.holdingAdvancedWeapon() && this.events.leftHandWeapon)
             {
                 num += 15;
             }
         }
         if (this.setup && this.setup.health.poisoned)
         {
             num = Mathf.FloorToInt((float)num / 1.6f);
         }
         PlayerStats component2 = other.transform.root.GetComponent <PlayerStats>();
         if (this.male || this.female || this.creepy_male || this.creepy_fat || this.creepy || this.creepy_baby)
         {
             netId component3 = other.transform.GetComponent <netId>();
             if (BoltNetwork.isServer && component3)
             {
                 other.transform.root.SendMessage("StartPrediction", SendMessageOptions.DontRequireReceiver);
                 return;
             }
             if (BoltNetwork.isClient && this.netPrefab && !component3)
             {
                 other.transform.root.SendMessage("setCurrentAttacker", this, SendMessageOptions.DontRequireReceiver);
                 other.transform.root.SendMessage("hitFromEnemy", num, SendMessageOptions.DontRequireReceiver);
                 other.transform.root.SendMessage("StartPrediction", SendMessageOptions.DontRequireReceiver);
             }
             else if (BoltNetwork.isServer)
             {
                 if (!component3)
                 {
                     other.transform.root.SendMessage("setCurrentAttacker", this, SendMessageOptions.DontRequireReceiver);
                     other.transform.root.SendMessage("hitFromEnemy", num, SendMessageOptions.DontRequireReceiver);
                 }
             }
             else if (!BoltNetwork.isRunning && component2)
             {
                 component2.setCurrentAttacker(this);
                 component2.hitFromEnemy(num);
             }
         }
         else if (!this.netPrefab && component2)
         {
             component2.setCurrentAttacker(this);
             component2.hitFromEnemy(num);
         }
     }
     if (other.gameObject.CompareTag("enemyCollide") && this.mainTrigger && this.bodyCollider && !this.enemyAtStructure)
     {
         this.setupAttackerType();
         if (other.gameObject != this.bodyCollider)
         {
             other.transform.SendMessageUpwards("getAttackDirection", UnityEngine.Random.Range(0, 2), SendMessageOptions.DontRequireReceiver);
             other.transform.SendMessageUpwards("getCombo", UnityEngine.Random.Range(1, 4), SendMessageOptions.DontRequireReceiver);
             other.transform.SendMessage("getAttackerType", this.attackerType, SendMessageOptions.DontRequireReceiver);
             other.transform.SendMessage("getAttacker", this.rootTr.gameObject, SendMessageOptions.DontRequireReceiver);
             other.transform.SendMessageUpwards("Hit", 6, SendMessageOptions.DontRequireReceiver);
             FMODCommon.PlayOneshotNetworked(this.weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
         }
     }
     if (other.gameObject.CompareTag("BreakableWood") || (other.gameObject.CompareTag("BreakableRock") && this.mainTrigger))
     {
         other.transform.SendMessage("Hit", 50, SendMessageOptions.DontRequireReceiver);
         other.SendMessage("LocalizedHit", new LocalizedHitData(base.transform.position, 50f), SendMessageOptions.DontRequireReceiver);
         FMODCommon.PlayOneshotNetworked(this.weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
     }
     if (other.gameObject.CompareTag("SmallTree"))
     {
         other.SendMessage("Hit", 5, SendMessageOptions.DontRequireReceiver);
         other.SendMessage("Hit", 5, SendMessageOptions.DontRequireReceiver);
     }
     if (other.gameObject.CompareTag("Fire") && this.mainTrigger && this.firemanMain && !this.events.noFireAttack)
     {
         other.SendMessage("Burn", SendMessageOptions.DontRequireReceiver);
     }
     if (other.gameObject.CompareTag("Tree") && this.mainTrigger && (this.creepy_male || this.boss))
     {
         other.SendMessage("Explosion", 5f, SendMessageOptions.DontRequireReceiver);
         FMODCommon.PlayOneshotNetworked(this.weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
     }
     if ((other.gameObject.CompareTag("structure") || other.gameObject.CompareTag("SLTier1") || other.gameObject.CompareTag("SLTier2") || other.gameObject.CompareTag("SLTier3") || other.gameObject.CompareTag("jumpObject") || other.gameObject.CompareTag("UnderfootWood")) && this.mainTrigger)
     {
         getStructureStrength component4 = other.gameObject.GetComponent <getStructureStrength>();
         bool flag2 = false;
         if (component4 == null)
         {
             flag2 = true;
         }
         this.enemyAtStructure = true;
         int num2;
         if (this.creepy_male || this.creepy || this.creepy_fat || this.creepy_baby)
         {
             if (this.creepy_baby)
             {
                 num2 = Mathf.FloorToInt(10f * GameSettings.Ai.creepyStructureDamageRatio);
             }
             else
             {
                 num2 = Mathf.FloorToInt(30f * GameSettings.Ai.creepyStructureDamageRatio);
             }
         }
         else
         {
             if (flag2)
             {
                 return;
             }
             if (this.maleSkinny || this.femaleSkinny)
             {
                 if (component4._strength == getStructureStrength.strength.weak)
                 {
                     num2 = Mathf.FloorToInt(8f * GameSettings.Ai.regularStructureDamageRatio);
                 }
                 else
                 {
                     num2 = 0;
                 }
             }
             else if (this.pale || this.painted || this.skinned)
             {
                 if (component4._strength == getStructureStrength.strength.veryStrong)
                 {
                     num2 = 0;
                 }
                 else
                 {
                     num2 = Mathf.FloorToInt(16f * GameSettings.Ai.regularStructureDamageRatio);
                 }
             }
             else if (component4._strength == getStructureStrength.strength.veryStrong)
             {
                 num2 = 0;
             }
             else
             {
                 num2 = Mathf.FloorToInt(12f * GameSettings.Ai.regularStructureDamageRatio);
             }
         }
         if (this.setup && this.setup.health.poisoned)
         {
             num2 /= 2;
         }
         other.SendMessage("Hit", num2, SendMessageOptions.DontRequireReceiver);
         other.SendMessage("LocalizedHit", new LocalizedHitData(base.transform.position, (float)num2), SendMessageOptions.DontRequireReceiver);
         FMODCommon.PlayOneshotNetworked(this.weaponHitEvent, base.transform, FMODCommon.NetworkRole.Server);
     }
 }
示例#15
0
 private void doAwake()
 {
     if (this.disableAiForDebug)
     {
         this.disableForDebug();
     }
     this.allFSM = base.gameObject.GetComponents <PlayMakerFSM>();
     PlayMakerFSM[] array = this.allFSM;
     for (int i = 0; i < array.Length; i++)
     {
         PlayMakerFSM playMakerFSM = array[i];
         if (playMakerFSM.FsmName == "action_combatFSM")
         {
             this.pmCombat = playMakerFSM;
             this.actionFSM.Add(playMakerFSM);
         }
         if (playMakerFSM.FsmName == "action_inTreeFSM")
         {
             this.pmTree = playMakerFSM;
             this.actionFSM.Add(playMakerFSM);
         }
         if (playMakerFSM.FsmName == "global_visionFSM")
         {
             this.pmVision = playMakerFSM;
         }
         if (playMakerFSM.FsmName == "action_searchFSM")
         {
             this.pmSearch = playMakerFSM;
             this.actionFSM.Add(playMakerFSM);
         }
         if (playMakerFSM.FsmName == "action_stalkingFSM")
         {
             this.pmStalk = playMakerFSM;
             this.actionFSM.Add(playMakerFSM);
         }
         if (playMakerFSM.FsmName == "global_motorFSM")
         {
             this.pmMotor = playMakerFSM;
         }
         if (playMakerFSM.FsmName == "action_sleepingFSM")
         {
             this.pmSleep = playMakerFSM;
             this.actionFSM.Add(playMakerFSM);
         }
         if (playMakerFSM.FsmName == "global_brainFSM")
         {
             this.pmBrain = playMakerFSM;
         }
         if (playMakerFSM.FsmName == "global_alertManagerFSM")
         {
             this.pmAlert = playMakerFSM;
         }
         if (playMakerFSM.FsmName == "action_encounterFSM")
         {
             this.pmEncounter = playMakerFSM;
             this.actionFSM.Add(playMakerFSM);
         }
         if (playMakerFSM.FsmName == "global_targetManagerFSM")
         {
             this.pmTargetManager = playMakerFSM;
         }
     }
     this.thisGo          = base.gameObject;
     this.rootTr          = base.transform.root.transform;
     this.rotateTr        = base.transform;
     this.familyFunctions = base.transform.parent.GetComponent <mutantFamilyFunctions>();
     this.animator        = base.GetComponent <Animator>();
     this.ai              = base.GetComponent <mutantAI>();
     this.aiManager       = base.GetComponent <mutantAiManager>();
     this.typeSetup       = base.transform.parent.GetComponent <mutantTypeSetup>();
     this.health          = base.GetComponent <EnemyHealth>();
     this.dayCycle        = base.GetComponentInChildren <mutantDayCycle>();
     this.enemyEvents     = base.transform.GetComponent <enemyAnimEvents>();
     this.controller      = base.transform.root.GetComponent <CharacterController>();
     this.hashs           = base.transform.GetComponent <mutantMaleHashId>();
     this.propManager     = base.transform.GetComponent <mutantPropManager>();
     this.bodyVariation   = base.transform.GetComponentInChildren <setupBodyVariation>();
     this.collisionDetect = base.transform.GetComponentInChildren <mutantCollisionDetect>();
     this.hitReceiver     = base.transform.GetComponentInChildren <mutantHitReceiver>();
     this.animControl     = base.transform.GetComponentInChildren <mutantAnimatorControl>();
     if (!this.disableAiForDebug)
     {
         this.sceneInfo = Scene.SceneTracker;
     }
     this.search      = base.GetComponent <mutantSearchFunctions>();
     this.worldSearch = base.transform.parent.GetComponent <mutantWorldSearchFunctions>();
     this.mutantStats = base.transform.parent.GetComponent <targetStats>();
     Transform[] componentsInChildren = base.transform.parent.GetComponentsInChildren <Transform>();
     Transform[] array2 = componentsInChildren;
     for (int j = 0; j < array2.Length; j++)
     {
         Transform transform = array2[j];
         if (transform.name == "char_Head")
         {
             this.headJoint = transform.gameObject;
         }
         if (transform.name == "char_LeftHandWeapon")
         {
             this.charLeftWeaponGo = transform.gameObject;
         }
         if (transform.name == "currentWaypoint")
         {
             this.currentWaypoint = transform.gameObject;
         }
         if (transform.name == "lastPlayerSighting")
         {
             this.lastSighting = transform.gameObject;
         }
         if (transform.name == "tempLookat")
         {
             this.lookatTr = transform;
         }
         if (transform.name == "char_club_mesh1")
         {
             this.weapon = transform.gameObject;
         }
         if (transform.name == "FireStick")
         {
             this.fireWeapon = transform.gameObject;
         }
         if (transform.name == "char_RightHand")
         {
             this.clawsWeapon = transform.gameObject;
         }
         if (transform.name == "weaponLeftGO")
         {
             this.leftWeapon = transform.gameObject;
         }
         if (transform.name == "weaponLeftGO1")
         {
             this.leftWeapon1 = transform.gameObject;
         }
         if (transform.name == "weaponRightGO")
         {
             this.rightWeapon = transform.gameObject;
         }
         if (transform.name == "mainHitTrigger")
         {
             this.mainWeapon = transform.gameObject;
         }
         if (transform.name == "fireBomb")
         {
             this.fireBombGo = transform.gameObject;
         }
         if (transform.name == "dragPointGo")
         {
             this.familyFunctions.dragPoint = transform.gameObject;
         }
         if (transform.name == "bodyCollision")
         {
             if (this.pmCombat)
             {
                 this.pmCombat.FsmVariables.GetFsmGameObject("bodyCollisionGo").Value = transform.gameObject;
             }
             this.bodyCollisionCollider = transform.GetComponent <CapsuleCollider>();
         }
         if (transform.name == "char_LeftFoot")
         {
             this.leftFoot = transform;
         }
         if (transform.name == "headCollision")
         {
             this.headColliderGo = transform.gameObject;
         }
     }
 }