private void SendHitFromEnemy() { float sqrMagnitude = (LocalPlayer.Transform.position - transform.position).sqrMagnitude; if (sqrMagnitude < radius * radius) { int dmg = (int)(damage * (1 - ModdedPlayer.Stats.magicDamageTaken)); if (isArcane) { //negative armor BuffDB.AddBuff(21, 63, -dmg * 2, 30); BuffDB.AddBuff(1, 64, 0.2f, 10); BuffDB.AddBuff(2, 65, 0.2f, 10); dmg *= 2; } else { BuffDB.AddBuff(1, 64, 0.7f, 6); BuffDB.AddBuff(2, 65, 0.7f, 6); LocalPlayer.Stats.Burn(); } LocalPlayer.Stats.Hit((int)(dmg * (1 - ModdedPlayer.Stats.magicDamageTaken)), false, PlayerStats.DamageType.Drowning); } }
public static void Effect() { if (!active) { return; } LocalPlayer.Stats.Energy = ModdedPlayer.Stats.TotalMaxEnergy; LocalPlayer.Stats.Stamina = LocalPlayer.Stats.Energy; if (ModdedPlayer.Stats.i_setcount_BerserkSet >= 4) { float timeSpan = Time.time - castTimestamp; int bonus = Mathf.CeilToInt(timeSpan); if (bonus > setbonusAmount) { setbonusAmount = bonus; float buff = 0.35f * bonus + 1; BuffDB.ForceEndBuff(106); BuffDB.AddBuff(9, 106, buff, 3f); if (ModdedPlayer.Stats.i_setcount_BerserkSet >= 5) { if (bonus <= 15) { BuffDB.ForceEndBuff(107); } BuffDB.AddBuff(14, 107, 0.3f * bonus, ModdedPlayer.Stats.spell_berserkDuration - bonus); } } } }
private void OnTriggerEnter(Collider other) { float distance = Vector3.Distance(LocalPlayer.Transform.position, this.transform.position); if (distance < 100) { soundEmitter.PlayExplosionSound(); LocalPlayer.HitReactions.enableFootShake(1, Math.Min(30 / distance, 0.5f)); } if (other.CompareTag("suitCase") || other.CompareTag("metalProp") || other.CompareTag("animalCollide") || other.CompareTag("Fish") || other.CompareTag("Tree") || other.CompareTag("MidTree") || other.CompareTag("suitCase") || other.CompareTag("SmallTree")) { other.SendMessage("Hit", Damage, SendMessageOptions.DontRequireReceiver); other.SendMessage("Explosion", 0.1f, SendMessageOptions.DontRequireReceiver); } else if (other.transform.root == LocalPlayer.Transform.root) { LocalPlayer.Stats.Hit(Damage, false, PlayerStats.DamageType.Fire); ModdedPlayer.instance.Stun(3f); BuffDB.AddBuff(21, 69, Damage / 3, 60); other.SendMessage("Burn", SendMessageOptions.DontRequireReceiver); } else if (other.CompareTag("BreakableWood") || other.CompareTag("BreakableRock") || other.CompareTag("BreakableRock") || other.CompareTag("structure")) { other.SendMessage("Hit", Damage, SendMessageOptions.DontRequireReceiver); other.SendMessage("LocalizedHit", new LocalizedHitData(transform.position, Damage), SendMessageOptions.DontRequireReceiver); } }
public IEnumerator DoAction() { while (true) { RaycastHit[] hits = Physics.BoxCastAll(transform.position, Vector3.one * 0.5f, transform.forward, transform.rotation, 50); foreach (RaycastHit hit in hits) { if (hit.transform != null) { if (hit.transform.CompareTag("Player") || hit.transform.CompareTag("PlayerNet")) { if (hit.transform.root == LocalPlayer.Transform.root) { LocalPlayer.Stats.Hit((int)(dmg * 0.3f * (1 - ModdedPlayer.instance.MagicResistance)), false, PlayerStats.DamageType.Fire); BuffDB.AddBuff(10, 67, 0.5f, 15); BuffDB.AddBuff(2, 66, 0.5f, 15); BuffDB.AddBuff(3, 68, dmg / 13, 5); hit.transform.SendMessage("Burn", SendMessageOptions.DontRequireReceiver); } } else if (hit.transform.CompareTag("structure"))// && (!BoltNetwork.isRunning || BoltNetwork.isServer || !BoltNetwork.isClient || !PlayerPreferences.NoDestructionRemote)) { hit.transform.SendMessage("Hit", dmg / 2, SendMessageOptions.DontRequireReceiver); hit.transform.SendMessage("LocalizedHit", new LocalizedHitData(hit.point, dmg / 2), SendMessageOptions.DontRequireReceiver); } } } yield return(new WaitForSeconds(0.1f)); } }
private void Update() { if (gameObject.layer != DesiredLayer) { gameObject.layer = DesiredLayer; } if (effectReady) { lifetime += Time.deltaTime; if (duration < lifetime) { Pause(); } if ((LocalPlayer.Transform.position - transform.position).sqrMagnitude < effectRadius * effectRadius) { if (fromEnemy) { LocalPlayer.Stats.HealthChange(-damageAmount * Time.deltaTime * (ModdedPlayer.Stats.magicDamageTaken) * ModdedPlayer.Stats.allDamageTaken); BuffDB.AddBuff(1, 5, slowAmount, 20); LocalPlayer.Stats.Burn(); } else { LocalPlayer.Stats.Health += healAmount * Time.deltaTime; LocalPlayer.Stats.HealthTarget += healAmount * 1.5f * Time.deltaTime; BuffDB.AddBuff(5, 6, boostAmount, 30); BuffDB.AddBuff(26, 94, 0.5f, 10); } } } }
private static void PurgeLocalPlayer(bool heal, bool bonusDamage) { int[] keys = BuffDB.activeBuffs.Keys.ToArray(); int a = heal ? 1 : 0; for (int i = 0; i < keys.Length; i++) { if (BuffDB.activeBuffs[keys[i]].isNegative) { BuffDB.activeBuffs[keys[i]].ForceEndBuff(keys[i]); } } ModdedPlayer.instance.StunDuration = 0; ModdedPlayer.instance.RootDuration = 0; BuffDB.AddBuff(7, 98, 1, 3f); if (heal) { float healAmount = (ModdedPlayer.Stats.TotalMaxHealth - LocalPlayer.Stats.Health); if (bonusDamage) { float buffAmount = 1 + (healAmount / ModdedPlayer.Stats.TotalMaxHealth) * 3; BuffDB.AddBuff(9, 90, buffAmount, 6.5f); } healAmount *= 0.4f * ModdedPlayer.Stats.allRecoveryMult; LocalPlayer.Stats.Health += healAmount; LocalPlayer.Stats.HealthTarget += healAmount; LocalPlayer.Stats.Energy += (ModdedPlayer.Stats.TotalMaxEnergy - LocalPlayer.Stats.Energy) * 0.5f; } }
protected override void CheckDeath() { if (Cheats.GodMode) { return; } if (this.Health <= 0f && !this.Dead) { COTFEvents.Instance.OnTakeLethalDamage.Invoke(); } if (this.Health <= 0f && !this.Dead) { if (ModdedPlayer.Stats.perk_nearDeathExperienceUnlocked && !ModdedPlayer.Stats.perk_nearDeathExperienceTriggered) { Health = ModdedPlayer.Stats.TotalMaxHealth; BuffDB.AddBuff(20, 61, 0, 600); BuffDB.AddBuff(6, 82, 1, 10); BuffDB.AddBuff(26, 83, 0.1f, 10); //90% damage reduction BuffDB.AddBuff(25, 99, 35, 10); //+35 hp/s BuffDB.AddBuff(11, 100, 10, 10); //+10 ep/s return; } if (LocalPlayer.AnimControl.swimming) { COTFEvents.Instance.OnDeath.Invoke(); switch (ModSettings.dropsOnDeath) { case ModSettings.DropsOnDeathMode.All: Inventory.Instance.DropAll(); break; case ModSettings.DropsOnDeathMode.Equipped: Inventory.Instance.DropEquipped(); break; case ModSettings.DropsOnDeathMode.NonEquipped: Inventory.Instance.DropNonEquipped(); break; } this.DeathInWater(0); return; } this.Dead = true; this.Player.enabled = false; if (ModSettings.killOnDowned) { TheForest.Save.PlayerRespawnMP.KillPlayer(); } else { this.FallDownDead(); } } }
public static void OnDisable() { active = false; ModdedPlayer.instance.AttackSpeedMult /= 1.2f; ModdedPlayer.instance.DamageOutputMult /= 1.2f; ModdedPlayer.instance.MoveSpeedMult /= 1.3f; ModdedPlayer.instance.DamageReduction /= 2f; BuffDB.AddBuff(18, 51, LocalPlayer.Stats.Energy, 20); }
public static void OnDisable() { active = false; ModdedPlayer.Stats.attackSpeed.Divide(1.25f); ModdedPlayer.Stats.allDamage.Divide(1.25f); ModdedPlayer.Stats.movementSpeed.Divide(1.35f); ModdedPlayer.Stats.allDamageTaken.Divide(5f); BuffDB.AddBuff(18, 51, LocalPlayer.Stats.Energy, 15); }
protected override void fireProjectile() { if (ModdedPlayer.instance.IsSmokeysQuiver) { BuffDB.AddBuff(14, 81, 2.5f, 8); } StartCoroutine(RCoroutines.i.AsyncCrossbowFire(_ammoId, _ammoSpawnPosGo, _boltProjectile, this)); }
private void Update() { transform.position = followTarget.position; //copies position of the caster transform.Rotate(Vector3.up * 720 * Time.deltaTime, Space.World); //rotates if ((LocalPlayer.Transform.position - transform.position).sqrMagnitude < _radius * _radius) //if player is in range, slows him { BuffDB.AddBuff(1, 30, 0.6f, 5); BuffDB.AddBuff(2, 31, 0.6f, 5); } }
protected override void fireProjectile() { if (ModdedPlayer.Stats.i_SmokeyCrossbowQuiver.value) { BuffDB.AddBuff(14, 81, 2.5f, 8); } COTFEvents.Instance.OnAttackRanged.Invoke(); COTFEvents.Instance.OnAttackRangedCrossbow.Invoke(); StartCoroutine(RCoroutines.i.AsyncCrossbowFire(_ammoId, _ammoSpawnPosGo, _boltProjectile, this)); }
private void Update() { if ((LocalPlayer.Transform.position - transform.position).sqrMagnitude < radius * radius) { LocalPlayer.Stats.HealthTarget += healing * Time.deltaTime; LocalPlayer.Stats.Health += healing * Time.deltaTime; if (GrantImmunity) { BuffDB.AddBuff(4, 40, 0, 0.1f); } } }
public static void GiveEffect(bool giveEffect2, bool giveEffect3, int ArmorAmount = 1) { BuffDB.AddBuff(5, 45, 1.25f, 120); BuffDB.AddBuff(14, 46, 1.25f, 120); if (giveEffect2) { BuffDB.AddBuff(9, 47, 1.25f, 120); } if (giveEffect3) { BuffDB.AddBuff(15, 48, ArmorAmount, 120); } }
public static void GiveEffect(float speed, float damage, bool giveEffect2, bool giveEffect3, int ArmorAmount = 1) { BuffDB.AddBuff(5, 45, speed, 120); BuffDB.AddBuff(14, 46, speed, 120); if (giveEffect2) { BuffDB.AddBuff(9, 47, damage, 120); } if (giveEffect3) { BuffDB.AddBuff(15, 48, ArmorAmount, 120); } }
private void Update() { if (IsOn) { SpellCaster.RemoveStamina(Cost * Time.deltaTime); if (LocalPlayer.Stats.Stamina < 10) { Toggle(); } if (GiveDamageBuff) { BuffDB.AddBuff(13, 44, 1.1f, 0.1f); } } }
public override void Hit(int damage, bool ignoreArmor, DamageType type) { var hitEventContext = new COTFEvents.GotHitParams(damage, ignoreArmor); COTFEvents.Instance.OnGetHit.Invoke(hitEventContext); if (type == DamageType.Physical) { COTFEvents.Instance.OnGetHitPhysical.Invoke(hitEventContext); if (UnityEngine.Random.value > ModdedPlayer.Stats.getHitChance) { COTFEvents.Instance.OnDodge.Invoke(); if (ModdedPlayer.Stats.i_isWindArmor) { //grant buffs; BuffDB.AddBuff(5, 84, 1.2f, 30); BuffDB.AddBuff(9, 85, 1.35f, 10); BuffDB.AddBuff(15, 86, 2000, 10); HealthTarget += ModdedPlayer.Stats.TotalMaxHealth * 0.05f; } Sfx.PlayWhoosh(); return; } } else { COTFEvents.Instance.OnGetHitNonPhysical.Invoke(hitEventContext); } float f = damage * ModdedPlayer.Stats.allDamageTaken; if (!ignoreArmor) { f *= 1 - ModReferences.DamageReduction(Mathf.Max(0, ModdedPlayer.Stats.armor - (int)ModdedPlayer.instance.lostArmor)); } if (type == DamageType.Fire) { f *= 0.01f * ModdedPlayer.Stats.TotalMaxHealth; f *= UnityEngine.Random.Range(0.9f, 1.4f); //f *= 1-ModdedPlayer.Stats.magicDamageTaken; f *= ModdedPlayer.Stats.fireDamageTaken; } if (ModdedPlayer.Stats.i_KingQruiesSword) { BuffDB.AddBuff(22, 80, f, 1); } CotfUtils.Log("Tanked damage: " + f, true); base.Hit(damage, ignoreArmor, type); }
static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); MemoryAddresses.Init("memory_addresses.xml"); BuffDB.Init("buffdb.xml"); Dics.Init(); GlobalKeyboard.Init(); KeySetting.Init(); TaskDB.Init(); ProfileDB.Init(); GUI = new GUI(); ProcessManager.Init(); Application.Run(GUI); }
protected override void CheckDeath() { if (global::Cheats.GodMode) { return; } if (this.Health <= 0f && !this.Dead) { if (ModdedPlayer.instance.NearDeathExperienceUnlocked && !ModdedPlayer.instance.NearDeathExperience) { Health = ModdedPlayer.instance.MaxHealth; BuffDB.AddBuff(20, 61, 0, 600); BuffDB.AddBuff(6, 82, 0, 10); BuffDB.AddBuff(26, 83, 0, 10); return; } switch (ModSettings.dropsOnDeath) { case ModSettings.DropsOnDeathMode.All: Inventory.Instance.DropAll(); break; case ModSettings.DropsOnDeathMode.Equipped: Inventory.Instance.DropEquipped(); break; } if (TheForest.Utils.LocalPlayer.AnimControl.swimming) { this.DeathInWater(0); return; } this.Dead = true; this.Player.enabled = false; if (ModSettings.killOnDowned) { TheForest.Save.PlayerRespawnMP.KillPlayer(); } else { this.FallDownDead(); } } }
public static void Init() { TwitchMod.Register("randomitem", s => ChampionsOfForest.Network.NetworkManager.SendItemDrop(ItemDataBase.GetRandomItem(Random.value * 2000), LocalPlayer.Transform.position + Vector3.up * 3f)); TwitchMod.Register("buff", s => { int r = Random.Range(0, positiveBuffs.Length); BuffDB.AddBuff(positiveBuffs[r], 90000, positiveBuffs_amounts[r], 10); }); TwitchMod.Register("debuff", s => { int r = Random.Range(0, negativeBuffs.Length); BuffDB.AddBuff(negativeBuffs[r], 90001, negativeBuffs_amounts[r], 10); }); TwitchMod.Register("meteors", s => Meteor.CreateEnemy(LocalPlayer.Transform.position, Random.Range(0, 1000000))); TwitchMod.Register("laser", s => EnemyLaser.CreateLaser(LocalPlayer.Transform.position - LocalPlayer.Transform.forward * 10, LocalPlayer.Transform.forward)); TwitchMod.Register("cataclysm", s => Cataclysm.Create(LocalPlayer.Transform.position, 7, 100, 5, Cataclysm.TornadoType.Fire, true)); }
public static void ResistDeath() { if (ResistDeathTimeStamp < Time.time) { if (ResistDeathTimeStamp + 60 <= Time.time) { ResistDeathTimeStamp = Time.time; LocalPlayer.Stats.Health = ModdedPlayer.Stats.TotalMaxHealth; BuffDB.AddBuff(6, 82, 1, 5); BuffDB.AddBuff(26, 108, 0.02f, 5); //98% damage reduction BuffDB.AddBuff(25, 99, 35, 5); //+35 hp/s } } else { ResistDeathTimeStamp = 0; } }
private void Update() { if (isOn) { if ((LocalPlayer.Transform.position - transform.position).sqrMagnitude < 49) { float dmgPerTick = Time.deltaTime * damage * ModdedPlayer.Stats.allDamageTaken * ModdedPlayer.Stats.magicDamageTaken * ModReferences.DamageReduction((int)ModdedPlayer.Stats.TotalArmor); if (LocalPlayer.Stats.Health - 1 > dmgPerTick) { LocalPlayer.Stats.Health -= dmgPerTick; } BuffDB.AddBuff(10, 72, 0.7f, 5); BuffDB.AddBuff(21, 73, Time.deltaTime * damage / 30, 15); } } }
private void Update() { transform.position = followTarget.position; //copies position of the caster transform.Rotate(Vector3.up * 720 * Time.deltaTime, Space.World); //rotates if ((LocalPlayer.Transform.position - transform.position).sqrMagnitude < _radius * _radius) //if player is in range, slows him { if (ModdedPlayer.Stats.perk_blizzardSlowReduced) { BuffDB.AddBuff(1, 30, 0.8f, 1); BuffDB.AddBuff(2, 31, 0.9f, 1); BuffDB.AddBuff(21, 70, armorReduction * Time.deltaTime / 2, 10); } else { BuffDB.AddBuff(1, 30, 0.5f, 6); BuffDB.AddBuff(2, 31, 0.25f, 6); BuffDB.AddBuff(21, 70, armorReduction * Time.deltaTime, 20); } } }
private void Update() { timeShift += Time.deltaTime * 2.3f; transform.localScale = Vector3.one * (radius + Mathf.Sin(timeShift * 3.14f * 4f)); if ((LocalPlayer.Transform.position - transform.position).sqrMagnitude < radius * radius) { LocalPlayer.Stats.HealthTarget += healing * Time.deltaTime; LocalPlayer.Stats.Health += healing * Time.deltaTime; if (GrantImmunity) { BuffDB.AddBuff(4, 40002, 0, 3f); BuffDB.AddBuff(6, 40001, 0, 3f); } if (regenEnergy) { LocalPlayer.Stats.Energy += healing * Time.deltaTime / 10; } } }
private void Update() { if (IsOn) { if (ModdedPlayer.instance.DanceOfFiregod) { SpellCaster.RemoveStamina(Cost * 10 * Time.deltaTime); } else { SpellCaster.RemoveStamina(Cost * Time.deltaTime); } if (LocalPlayer.Stats.Stamina < 5) { Toggle(); } if (GiveDamageBuff) { BuffDB.AddBuff(13, 44, 1.6f, 1f); } } }
public override void Hit(int damage, bool ignoreArmor, DamageType type) { if (type == DamageType.Physical) { if (UnityEngine.Random.value > ModdedPlayer.Stats.getHitChance) { if (ModdedPlayer.Stats.i_isWindArmor) { //grant buffs; BuffDB.AddBuff(5, 84, 1.2f, 30); BuffDB.AddBuff(9, 85, 1.35f, 10); BuffDB.AddBuff(15, 86, 2000, 10); HealthTarget += ModdedPlayer.Stats.TotalMaxHealth * 0.05f; } Sfx.PlayWhoosh(); return; } } float f = damage * ModdedPlayer.Stats.allDamageTaken; if (!ignoreArmor) { f *= 1 - ModReferences.DamageReduction(Mathf.Max(0, ModdedPlayer.Stats.armor - (int)ModdedPlayer.instance.lostArmor)); } if (type == DamageType.Fire) { f *= 0.01f * ModdedPlayer.Stats.TotalMaxHealth; f *= UnityEngine.Random.Range(0.9f, 1.4f); //f *= 1-ModdedPlayer.Stats.magicDamageTaken; f *= ModdedPlayer.Stats.fireDamageTaken; } if (ModdedPlayer.Stats.i_KingQruiesSword) { BuffDB.AddBuff(22, 80, f, 1); } base.Hit(damage, ignoreArmor, type); }
public override void Hit(int damage, bool ignoreArmor, DamageType type) { if (type == DamageType.Physical) { if (UnityEngine.Random.value < ModdedPlayer.instance.DodgeChance) { if (ModdedPlayer.instance.isWindArmor) { //grant buffs; BuffDB.AddBuff(5, 84, 1.1f, 10); BuffDB.AddBuff(9, 85, 1.15f, 10); BuffDB.AddBuff(15, 86, 1500, 10); } return; } } float f = damage * ModdedPlayer.instance.DamageReductionTotal; if (!ignoreArmor) { f *= 1 - ModdedPlayer.instance.ArmorDmgRed; } if (type == DamageType.Fire) { f *= 0.01f * ModdedPlayer.instance.MaxHealth; f *= UnityEngine.Random.Range(0.9f, 1.4f); //f *= 1-ModdedPlayer.instance.MagicResistance; f *= ModdedPlayer.instance.FireDamageTakenMult; } damage = Mathf.RoundToInt(f); if (ModdedPlayer.instance.KingQruiesSpecial) { BuffDB.AddBuff(22, 80, damage / 2, 4); } base.Hit(damage, ignoreArmor, type); }
public static void Initialize() { try { ModSettings.DifficultyChoosen = false; if (SceneManager.GetActiveScene().name == "TitleScene") { new GameObject("Resource Manager").AddComponent <Res.ResourceLoader>(); Res.ResourceLoader.InMainMenu = true; } else { Res.ResourceLoader.InMainMenu = false; new GameObject("NetworkManagerObj").AddComponent <Network.NetworkManager>(); GameObject go = new GameObject("Playerobj"); go.AddComponent <ModdedPlayer>(); go.AddComponent <Inventory>(); go.AddComponent <ModReferences>(); go.AddComponent <SpellCaster>(); go.AddComponent <ClinetItemPicker>(); go.AddComponent <MeteorSpawner>(); BuffDB.FillBuffList(); ItemDataBase.Initialize(); SpellDataBase.Initialize(); EnemyManager.Initialize(); new GameObject("MainMenuObj").AddComponent <MainMenu>(); Network.NetworkManager.instance.onGetMessage += Network.CommandReader.OnCommand; Res.Buildings.InitBuildings(); Perk.FillPerkList(); } } catch (Exception ex) { ModAPI.Log.Write(ex.ToString()); } }
private void Update() { transform.Rotate((transform.forward + transform.up + Vector3.right) * rotSpeed * Time.deltaTime); Lifetime += Time.deltaTime; if (caughtPlayer && ModdedPlayer.Stats.stunImmunity == 0 && playerTransform != null) { var mag = (playerTransform.position - transform.position).sqrMagnitude; if (mag > Radius * Radius) { playerTransform.position = Vector3.MoveTowards(playerTransform.position, transform.position, mag / 2 * Time.deltaTime); BuffDB.AddBuff(5, 71, 0.6f, 5); BuffDB.AddBuff(10, 72, 0.6f, 5); } } else { caughtPlayer = false; } if (Lifetime < Duration) { if ((LocalPlayer.Transform.root.position - transform.position).sqrMagnitude < Radius * Radius - 2) { caughtPlayer = true; playerTransform = LocalPlayer.Transform.root; } } else { transform.localScale -= Vector3.one * Time.deltaTime * 2; Radius -= Time.deltaTime * 2; if (transform.localScale.x < 0.002f) { Destroy(gameObject); } } }
public static void Cast() { BuffDB.AddBuff(17, 50, 0, 30); }