示例#1
0
    IEnumerator EnterPortalCo()
    {
        var player = PlayableCharacters.GetPlayerInScene();

        player.SetIsHumanControlled(false, constraints: RigidbodyConstraints2D.None, showChangeEffect: false);
        player.DisableCollider();

        float   effectTime   = 1.0f;
        float   timeEnd      = Time.unscaledTime + effectTime;
        Vector3 portalCenter = transform.position + Vector3.up * 1.5f;

        collider_.enabled = false;
        enterSound_.Play();

        var baseScale = player.transform.localScale;

        while (Time.unscaledTime < timeEnd)
        {
            float t    = Mathf.Clamp01(1.0f - ((timeEnd - Time.unscaledTime) / effectTime));
            float negT = 1.0f - t;
            cameraShake_.SetMinimumShake(1);

            var playerPos = player.transform.position;
            var direction = portalCenter - playerPos;
            player.SetForce(direction * 20);
            player.transform.localScale    = baseScale * negT;
            player.transform.localRotation = Quaternion.Euler(0, 0, t * 360 * 5);

            yield return(null);
        }

        GameEvents.RaisePlayerEnteredPortal();
        OnPlayerEnter?.Invoke();
    }
示例#2
0
        //Add the item's functionality down here! I stole most of this from the Stuffed Star active item code!

        protected override void DoEffect(PlayerController user)
        {
            //Activates the effect
            PlayableCharacters characterIdentity = user.characterIdentity;

            if (characterIdentity != PlayableCharacters.Robot)
            {
                AkSoundEngine.PostEvent("Play_VO_lichA_cackle_01", base.gameObject);
                float MaxHP2 = user.stats.GetBaseStatValue(PlayerStats.StatType.Health);
                MaxHP2 -= 1;
                user.stats.SetBaseStatValue(PlayerStats.StatType.Health, MaxHP2, user);
                float currentCurse = user.stats.GetBaseStatValue(PlayerStats.StatType.Curse);
                currentCurse += 1f;
                user.stats.SetBaseStatValue(PlayerStats.StatType.Curse, currentCurse, user);
                float currentDamage = user.stats.GetBaseStatValue(PlayerStats.StatType.Damage);
                currentDamage *= 1.20f;
                user.stats.SetBaseStatValue(PlayerStats.StatType.Damage, currentDamage, user);
            }
            else if (characterIdentity == PlayableCharacters.Robot)
            {
                AkSoundEngine.PostEvent("Play_VO_lichA_cackle_01", base.gameObject);
                user.healthHaver.Armor = user.healthHaver.Armor - 2;
                float currentCurse = user.stats.GetBaseStatValue(PlayerStats.StatType.Curse);
                currentCurse += 1f;
                user.stats.SetBaseStatValue(PlayerStats.StatType.Curse, currentCurse, user);
                float currentDamage = user.stats.GetBaseStatValue(PlayerStats.StatType.Damage);
                currentDamage *= 1.20f;
                user.stats.SetBaseStatValue(PlayerStats.StatType.Damage, currentDamage, user);
            }

            //start a coroutine which calls the EndEffect method when the item's effect duration runs out
        }
示例#3
0
        // Token: 0x06000060 RID: 96 RVA: 0x000054A4 File Offset: 0x000036A4
        public void Interact(PlayerController interactor)
        {
            bool flag = TextBoxManager.HasTextBox(this.talkPoint);

            if (!flag)
            {
                this.m_canUse = ((this.CanUse != null) ? this.CanUse(interactor, base.gameObject) : this.m_canUse);
                bool flag2 = !this.m_canUse;
                if (flag2)
                {
                    //TextBoxManager.ShowTextBox(this.talkPoint.position, this.talkPoint, 2f, "Please come back later", interactor.characterAudioSpeechTag, false, TextBoxManager.BoxSlideOrientation.NO_ADJUSTMENT, false, false);/*
                    PlayableCharacters characterIdentity = interactor.characterIdentity;
                    bool flag3 = characterIdentity == PlayableCharacters.Robot;
                    if (flag3)
                    {
                        TextBoxManager.ShowTextBox(this.talkPoint.position, this.talkPoint, 2f, "Hey! You're not the right robot get out of here!", interactor.characterAudioSpeechTag, false, TextBoxManager.BoxSlideOrientation.NO_ADJUSTMENT, false, false);
                    }
                    else
                    {
                        TextBoxManager.ShowTextBox(this.talkPoint.position, this.talkPoint, 2f, "The guy who programmed me was to lazy to let you undo this...", interactor.characterAudioSpeechTag, false, TextBoxManager.BoxSlideOrientation.NO_ADJUSTMENT, false, false);
                    }

                    base.spriteAnimator.PlayForDuration("talk", 2f, "idle", false);
                }
                else
                {
                    base.StartCoroutine(this.HandleConversation(interactor));
                }
            }
        }
        public static bool AddNewCharacter(string prefix, PlayableCharacters character)
        {
            bool status = false;

            if (ETGModMainBehaviour.Instance?.gameObject != null)
            {
                foreach (Component component in ETGModMainBehaviour.Instance.gameObject.GetComponents <Component>())
                {
                    if (component.GetType().ToString().ToLower().Contains("charapihivemind"))
                    {
                        var _characters = (Dictionary <PlayableCharacters, string>)ReflectionHelper.GetValue(component.GetType().GetField("characters"), component);
                        var _modPrefix  = (string)ReflectionHelper.GetValue(component.GetType().GetField("modPrefix"), component);


                        if (_characters.ContainsKey(character))
                        {
                            Debug.LogError($"CharApi ({prefix}): Warning! two characters have the same id ({(int)character})! this is very very bad please inform {prefix}/{_characters[character]}");
                        }
                        else
                        {
                            _characters.Add(character, prefix);
                            status = true;
                        }
                    }
                }
            }
            return(status);
        }
示例#5
0
 /// <summary>
 /// Sets <paramref name="character"/>'s <paramref name="flag"/> value
 /// </summary>
 /// <param name="character">Target character</param>
 /// <param name="flag">Target flag</param>
 /// <param name="value">Value to set</param>
 public static void SetCharacterSpecificFlag(PlayableCharacters character, CustomCharacterSpecificGungeonFlags flag, bool value)
 {
     if (AdvancedGameStatsManager.HasInstance)
     {
         AdvancedGameStatsManager.Instance.SetCharacterSpecificFlag(flag, value);
     }
 }
示例#6
0
    void StartGame()
    {
        var stringPath = HumanPlayerController.TrackedPath.AsString();

        PlayerPrefs.SetString("LatestCampPath", stringPath);
        PlayerPrefs.Save();

        // Init the run data
        var player = PlayableCharacters.GetPlayerInScene();

        CurrentRunData.StartNewRun();
        CurrentRunData.Instance.MaxLife              = player.MaxLife;
        CurrentRunData.Instance.Life                 = player.Life;
        CurrentRunData.Instance.CurrentWeapon        = player.CurrentWeapon.Id;
        CurrentRunData.Instance.BulletAmmo           = 999;
        CurrentRunData.Instance.ShellAmmo            = 999;
        CurrentRunData.Instance.StartingCharacterTag = player.tag;
        CurrentRunData.Instance.HasPlayerData        = true;

        GameProgressData.CurrentProgress.QuestProgress.ApplyAllRewards();
        CurrentRunData.StoreState();

        HumanPlayerController.CanShoot = true;
        SceneManager.LoadScene(EnterPortalSceneName, LoadSceneMode.Single);
    }
示例#7
0
        private void ModifyIncomingDamage(HealthHaver source, HealthHaver.ModifyDamageEventArgs args)
        {
            PlayableCharacters characterIdentity = Owner.characterIdentity;

            if (characterIdentity != PlayableCharacters.Robot)
            {
                if (DoIReplace == true)
                {
                    if (args.ModifiedDamage >= source.GetCurrentHealth())
                    {
                        PlayerController player = GameManager.Instance.PrimaryPlayer;
                        AkSoundEngine.PostEvent("Play_VO_lichA_cackle_01", base.gameObject);
                        args.ModifiedDamage = 0f;
                        float CurrentHealth = Owner.stats.GetStatValue(PlayerStats.StatType.Health);
                        this.ImprovedMindControl(player);
                    }
                }
                else
                {
                    if (Owner.healthHaver.Armor == 1)
                    {
                        if (DoIReplace == true)
                        {
                            PlayerController player = GameManager.Instance.PrimaryPlayer;
                            AkSoundEngine.PostEvent("Play_VO_lichA_cackle_01", base.gameObject);
                            args.ModifiedDamage = 0f;
                            this.ImprovedMindControl(player);
                        }
                    }
                }
            }
        }
示例#8
0
 void Awake()
 {
     if (instance == null)
     {
         instance = this;
     }
 }
示例#9
0
 private void PickStats()
 {
     if (hasPicked)
     {
         return;
     }
     else
     {
         PlayableCharacters characterIdentity = Owner.characterIdentity;
         Effect             effect            = BraveUtility.RandomElement(statEffects);
         statEffects.Remove(effect);
         if (effect.modifyMethod == StatModifier.ModifyMethod.MULTIPLICATIVE)
         {
             AddStat(effect.statToEffect, effect.amount, StatModifier.ModifyMethod.MULTIPLICATIVE);
         }
         else
         {
             if (effect.statToEffect == PlayerStats.StatType.Health && characterIdentity == PlayableCharacters.Robot)
             {
                 LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(120).gameObject, Owner);
             }
             AddStat(effect.statToEffect, effect.amount, StatModifier.ModifyMethod.ADDITIVE);
         }
         Owner.stats.RecalculateStats(Owner, true, false);
         hasPicked = true;
     }
 }
示例#10
0
    void StatSetCurrentCharacter(string[] args)
    {
        if (!_VerifyStatSetEnabled("stat set"))
        {
            return;
        }
        if (!ArgCount(args, 2))
        {
            return;
        }
        TrackedStats?stat = _GetStatFromString(args[0].ToUpper());

        if (!stat.HasValue)
        {
            Log("The stat isn't a real TrackedStat");
            return;
        }
        float value;

        if (!float.TryParse(args[1], out value))
        {
            Log("The value isn't a proper number");
            return;
        }
        PlayableCharacters currentCharacter = GameManager.Instance.PrimaryPlayer.characterIdentity;

        GameStatsManager.Instance.m_characterStats[currentCharacter].SetStat(stat.Value, value);
    }
 /// <summary>
 /// Stringify the character so it can be used "elsewhere".
 /// </summary>
 /// <param name="character">Character to stringify.</param>
 /// <returns>"Player" + character.ToString()</returns>
 public static new string smethod_0(PlayableCharacters character)
 {
     if (character == PlayableCharacters.Pilot)
     {
         return("PlayerRogue");
     }
     return("Player" + character.ToString());
 }
示例#12
0
        // Token: 0x060004F2 RID: 1266 RVA: 0x0002A553 File Offset: 0x00028753
        protected override void DoEffect(PlayerController user)
        {
            AkSoundEngine.PostEvent("Play_OBJ_power_up_01", base.gameObject);
            PlayableCharacters characterIdentity = user.characterIdentity;

            this.StealthEffect();
            base.StartCoroutine(ItemBuilder.HandleDuration(this, 1f, user, new Action <PlayerController>(this.BreakStealth)));
        }
示例#13
0
    public void AddPlayerHealthEvent(int amount, string source)
    {
        var player = PlayableCharacters.GetPlayerInScene();

        HealthEvents.Add(new PlayerHealthEvent {
            MaxHealth = player.MaxLife, HealthBefore = player.Life, HealthChange = amount, ChangeSource = source, Time = Time.unscaledTime
        });
    }
示例#14
0
 /// <summary>
 /// Gets <paramref name="character"/>'s <paramref name="stat"/> value.
 /// </summary>
 /// <param name="stat">Target stat</param>
 /// <param name="character">The character</param>
 /// <returns><paramref name="character"/>'s <paramref name="stat"/> value or 0 if <see cref="AdvancedGameStatsManager"/> doesn't have an instance</returns>
 public static float GetCharacterStatValue(PlayableCharacters character, CustomTrackedStats stat)
 {
     if (AdvancedGameStatsManager.HasInstance)
     {
         return(AdvancedGameStatsManager.Instance.GetCharacterStatValue(character, stat));
     }
     return(0f);
 }
示例#15
0
 /// <summary>
 /// Gets <paramref name="character"/>'s <paramref name="flag"/> value
 /// </summary>
 /// <param name="character">Target character</param>
 /// <param name="flag">The character-specific flag to check</param>
 /// <returns><paramref name="character"/>'s <paramref name="flag"/> value or 0 if <see cref="AdvancedGameStatsManager"/> doesn't have an instance</returns>
 public static bool GetCharacterSpecificFlag(PlayableCharacters character, CustomCharacterSpecificGungeonFlags flag)
 {
     if (AdvancedGameStatsManager.HasInstance)
     {
         return(AdvancedGameStatsManager.Instance.GetCharacterSpecificFlag(character, flag));
     }
     return(false);
 }
示例#16
0
    void Start()
    {
        enemy_    = Enemy.GetComponent <IEnemy>();
        player_   = PlayableCharacters.GetPlayerInScene();
        playerGO_ = player_.gameObject;
        system_   = GetComponent <ParticleSystem>();

        Timing.RunCoroutine(EmitCo().CancelWith(this.gameObject));
    }
示例#17
0
    public void OnPickup()
    {
        var player = PlayableCharacters.GetPlayerInScene();

        weaponObj_.SetActive(true);
        FloatingTextSpawner.Instance.Spawn(player.transform.position + Vector3.up * 0.5f, weapon_.Name, Color.white);
        player.EquipWeapon(weaponObj_);
        Destroy(this.gameObject);
    }
示例#18
0
        public override void Pickup(PlayerController player)
        {
            PlayableCharacters characterIdentity = player.characterIdentity;
            bool flag = characterIdentity == PlayableCharacters.Robot;

            if (flag)
            {
                player.healthHaver.Armor += 1f;
            }
            base.Pickup(player);
        }
示例#19
0
    public static void SetCameraPositionToActivePlayer()
    {
        var playerInScene = PlayableCharacters.GetPlayerInScene();

        if (playerInScene == null)
        {
            return;
        }

        SceneGlobals.Instance.CameraPositioner.SetPosition(playerInScene.transform.position);
    }
 public static new string GetCharacterPathFromIdentity(PlayableCharacters character)
 {
     if (character == PlayableCharacters.Pilot)
     {
         return("PlayerRogue");
     }
     if (character == PlayableCharacters.Soldier)
     {
         return("PlayerMarine");
     }
     return("Player" + character);
 }
示例#21
0
        public override bool CanBeUsed(PlayerController user)
        {
            PlayableCharacters characterIdentity = user.characterIdentity;

            if (characterIdentity == PlayableCharacters.Robot)
            {
                return(user.healthHaver.Armor > 2);
            }
            else
            {
                return(user.healthHaver.GetMaxHealth() > 1f);
            }
        }
示例#22
0
        public override void Pickup(PlayerController player)
        {
            PlayableCharacters characterIdentity = player.characterIdentity;

            if (characterIdentity == PlayableCharacters.Robot)
            {
                bool hasntAlreadyBeenCollected = !this.m_pickedUpThisRun;
                if (hasntAlreadyBeenCollected)
                {
                    player.healthHaver.Armor += 3;
                }
            }
            base.Pickup(player);
        }
示例#23
0
        /// <summary>
        /// Gets <paramref name="character"/>'s <paramref name="stat"/> value.
        /// </summary>
        /// <param name="stat">Target stat</param>
        /// <param name="character">The character</param>
        /// <returns><paramref name="character"/>'s <paramref name="stat"/> value</returns>
        public float GetCharacterStatValue(PlayableCharacters character, CustomTrackedStats stat)
        {
            float num = 0f;

            if (this.m_sessionCharacter == character)
            {
                num += this.m_sessionStats.GetStatValue(stat);
            }
            if (this.m_characterStats.ContainsKey(character))
            {
                num += this.m_characterStats[character].GetStatValue(stat);
            }
            return(num);
        }
        private void applyWeirdHealing()
        {
            PlayableCharacters characterIdentity = LastOwner.characterIdentity;

            if (characterIdentity != PlayableCharacters.Robot)
            {
                LastOwner.healthHaver.ApplyHealing(2);
            }
            else if (characterIdentity == PlayableCharacters.Robot)
            {
                LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(120).gameObject, LastOwner);
                LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(120).gameObject, LastOwner);
            }
        }
示例#25
0
    IEnumerator <float> LevelUpCo(int newLevel)
    {
        var playerPos = AiBlackboard.Instance.PlayerPosition + Vector3.up * 0.5f;

        AudioManager.Instance.PlaySfxClip(LevelUpSound, 1);
        var player = PlayableCharacters.GetPlayerInScene();

        if (player.Life == 1)
        {
            LootDropScript.Instance.SpawnHealth(1, playerPos, 5);
        }
        FloatingTextSpawner.Instance.Spawn(playerPos, "Level Up!", Color.yellow, 0.1f, 3);
        LightingImageEffect.Instance.FlashColor(LevelUpLightingSettings, LevelUpFlashCurve, 0.2f);
        yield return(0);
    }
示例#26
0
        private static bool CanUse(PlayerController player, GameObject npc)
        {
            //return false;
            PlayableCharacters characterIdentity = player.characterIdentity;
            bool flag = characterIdentity == PlayableCharacters.Robot;

            if (flag)
            {
                return(false);
            }
            else
            {
                return(player != NuclearShrine.storedPlayer);
            }
        }
        protected override void DoEffect(PlayerController user)
        {
            //Activates the effect
            PlayableCharacters characterIdentity = user.characterIdentity;

            if (characterIdentity != PlayableCharacters.Robot)
            {
                AkSoundEngine.PostEvent("Play_OBJ_goldkey_pickup_01", base.gameObject);
                if (user.HasPickupID(423))
                {
                    amountToHeal = 2f;
                }
                else
                {
                    amountToHeal = 1f;
                }
                //float healthPercentLog = user.healthHaver.GetCurrentHealthPercentage();
                //ETGModConsole.Log("User Health Percentage is supposedly at:" + healthPercentLog);
                user.PlayEffectOnActor(ResourceCache.Acquire("Global VFX/vfx_healing_sparkles_001") as GameObject, Vector3.zero, true, false, false);
                user.healthHaver.ApplyHealing(amountToHeal);
                if (user.HasPickupID(166) && UnityEngine.Random.value < .50f)
                {
                    keysToTake = 0;
                }
                else
                {
                    keysToTake = 1;
                }
                user.carriedConsumables.KeyBullets -= keysToTake;
            }
            else if (characterIdentity == PlayableCharacters.Robot)
            {
                AkSoundEngine.PostEvent("Play_OBJ_goldkey_pickup_01", base.gameObject);
                if (user.HasPickupID(423))
                {
                    amountToHeal = 2f;
                }
                else
                {
                    amountToHeal = 1f;
                }
                user.PlayEffectOnActor(ResourceCache.Acquire("Global VFX/vfx_healing_sparkles_001") as GameObject, Vector3.zero, true, false, false);
                user.healthHaver.Armor              = user.healthHaver.Armor + amountToHeal;
                user.carriedConsumables.KeyBullets -= 1;
            }

            //start a coroutine which calls the EndEffect method when the item's effect duration runs out
        }
示例#28
0
        private void ModifyIncomingDamage(HealthHaver source, HealthHaver.ModifyDamageEventArgs args)
        {
            PlayableCharacters characterIdentity = Owner.characterIdentity;

            if (characterIdentity != PlayableCharacters.Robot)
            {
                if (source.Armor <= 0f)
                {
                    if (args.ModifiedDamage >= source.GetCurrentHealth())
                    {
                        if (source.GetMaxHealth() > 1f)
                        {
                            if (args.ModifiedDamage != 0)
                            {
                                if (source.IsVulnerable == true)
                                {
                                    AkSoundEngine.PostEvent("Play_CHR_major_damage_01", base.gameObject);
                                    args.ModifiedDamage = 0f;
                                    StatModifier hpdown = new StatModifier();
                                    hpdown.statToBoost = PlayerStats.StatType.Health;
                                    hpdown.amount      = -1;
                                    hpdown.modifyType  = StatModifier.ModifyMethod.ADDITIVE;
                                    Owner.ownerlessStatModifiers.Add(hpdown);
                                    Owner.stats.RecalculateStats(Owner, false, false);
                                    Owner.healthHaver.TriggerInvulnerabilityPeriod();

                                    if (this.m_owner.PlayerHasActiveSynergy("Terrible Person"))
                                    {
                                        Owner.healthHaver.ApplyHealing(0.5f);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                int bighead = UnityEngine.Random.Range(1, 8);
                if (bighead == 1)
                {
                    args.ModifiedDamage = 0f;
                    Owner.healthHaver.TriggerInvulnerabilityPeriod();
                }
            }
        }
示例#29
0
        public static FoyerCharacterSelectFlag GetFlagFromIdentity(PlayableCharacters character, List <FoyerCharacterSelectFlag> sortedByX)
        {
            string path;

            foreach (var flag in sortedByX)
            {
                path = flag.CharacterPrefabPath.ToLower();
                if (character == PlayableCharacters.Eevee && flag.IsEevee)
                {
                    return(flag);
                }
                if (character == PlayableCharacters.Gunslinger && flag.IsGunslinger)
                {
                    return(flag);
                }

                if (character == PlayableCharacters.Bullet && path.Contains("bullet"))
                {
                    return(flag);
                }
                if (character == PlayableCharacters.Convict && path.Contains("convict"))
                {
                    return(flag);
                }
                if (character == PlayableCharacters.Guide && path.Contains("guide"))
                {
                    return(flag);
                }
                if (character == PlayableCharacters.Soldier && path.Contains("marine"))
                {
                    return(flag);
                }
                if (character == PlayableCharacters.Robot && path.Contains("robot"))
                {
                    return(flag);
                }
                if (character == PlayableCharacters.Pilot && path.Contains("rogue"))
                {
                    return(flag);
                }
            }
            ToolsCharApi.PrintError("Couldn't find foyer select flag for: " + character);
            ToolsCharApi.PrintError("    Have you unlocked them yet?");
            return(sortedByX[1]);
        }
示例#30
0
        public static GameObject GetPlayerPrefab(PlayableCharacters character)
        {
            string resourceName;

            if (character == PlayableCharacters.Soldier)
            {
                resourceName = "marine";
            }
            else if (character == PlayableCharacters.Pilot)
            {
                resourceName = "rogue";
            }
            else
            {
                resourceName = character.ToString().ToLower();
            }

            return((GameObject)BraveResources.Load("player" + resourceName));
        }
示例#31
0
 public GameData(int vol, PlayableCharacters species)
 {
     _playerSpecies = species;
 }