// Start is called before the first frame update void Start() { playerModifiers = playerModifiersGameObject.GetComponent <PlayerModifiers>(); foreach (GameObject LaserGun in laserGuns) { playerLaserGuns.Add(LaserGun.GetComponent <LaserGun>()); laserGunTemplate = LaserGun.GetComponent <LaserGun>(); } playerFirestormX = firestormX.GetComponent <FirestormX>(); playerRenderer = GetComponent <SpriteRenderer>(); energyStatusBar = EnergyBar.GetComponent <UIStatusBar>(); firestormXStatusBar = FirestormXBar.GetComponent <UIStatusBar>(); playerStatus = playerStatusGameObject.GetComponent <PlayerStatus>(); upgradesDisplay = upgradesIcons.GetComponent <UIDisplayUpgrades>(); deathSound = deathSoundObject.GetComponent <AudioSource>(); newPositionDirection = 1; duplicateCount = 1; spawnCount = 0; constantNewPositionDifference = playerModifiers.newPositionDifference; pointsDisplay = pointsUI.GetComponent <UIDisplayNumbers>(); PlayerCollision.onEnemyHit += substractEnergy; PlayerCollision.onEnemyHit += RemoveUpgrades; PlayerCollision.onEnergyCollected = RecoverEnergy; PlayerCollision.onRocketCollected = addCannon; GameManager.onRoundEnd += disableUI; GameManager.onRoundEnd += disableCollision; GameManager.onRoundEnd += disableGuns; }
private void RingModsList_SelectedIndexChanged(object sender, EventArgs e) { // Adjusts the informationd displayed when a different mod is slected PlayerModifiers mod; if (Enum.TryParse(nModsList.SelectedValue.ToString(), out mod)) { switch (mod) { case PlayerModifiers.Health: ringModsLbl.Text = "Health Modifier:"; break; case PlayerModifiers.Magic: ringModsLbl.Text = "Magic Modifier:"; break; case PlayerModifiers.Speed: ringModsLbl.Text = "Speed Modifier:"; break; } // Updates the text box value of the mod if it exsists, else place a 0 in ringModsTextBox.Text = PlayerModifiersDict.ContainsKey(mod) ? PlayerModifiersDict[mod].ToString() : "0"; ringModsSaved.Text = "Saved"; ringModsSaved.ForeColor = Color.DarkGreen; lastPMod = mod; } else { nModsLbl.Text = "Error: mod not found in Enum"; } }
private string GetShortItemDesc(ItemBase item) { switch (item) { case Armor i: return($"ARM: {i.BaseArmor}\tDUR: {i.Durability}\tARM-MODs: {(i.ArmorModifiers.Count > 0 ? "YES" : "NO")}"); case Weapon i: return($"DMG: {i.BaseDamage}\tDUR: {i.Durability}\tDMG-MODs: {(i.WeaponDamageModifers.Count > 0 ? "YES" : "NO" )}"); case Necklace i: PlayerModifiers mod = i.Modifiers.First(x => x.Value == i.Modifiers.Values.Max()).Key; return($"{ItemBase.GetModifierShorthandString(mod, i.Modifiers[mod])} + {(i.Modifiers.Count != 1 ? (i.Modifiers.Count - 1).ToString() + "P-MODs" : "")}"); case Ring i: PlayerModifiers mod2 = i.Modifiers.First(x => x.Value == i.Modifiers.Values.Max()).Key; return($"{ItemBase.GetModifierShorthandString(mod2, i.Modifiers[mod2])} + {(i.Modifiers.Count != 1 ? (i.Modifiers.Count - 1).ToString() + "P-MODs" : "")}"); case Resource i: return($"VAL: {i.Value.ToString("{0:n0}")}"); case Consumable i: return(i.GetInfoString()); } return(""); }
public void zombie(IUser u) { IPlayer p = u.GetPlayer(); PlayerModifiers m = p.GetModifiers(); m.SprintSpeedModifier = Zomb_Sprint_Speed; m.RunSpeedModifier = Zomb_Run_Speed; m.MeleeDamageDealtModifier = Zomb_Melee_Damage; m.MeleeForceModifier = Zomb_Melee_Force; m.MaxHealth = Zomb_Max_Health; m.CurrentHealth = Zomb_Max_Health; m.SizeModifier = Zomb_Size; p.SetModifiers(m); // IProfile pr = u.GetProfile(); // pr.Skin = new IProfileClothingItem("Zombie", " "); // pr.Accesory = null; // pr.Head = null; // pr.ChestOver = null; // pr.ChestUnder = null; // pr.Hands = null; // pr.Waist = null; // pr.Legs = null; // pr.Feet = null; // p.SetProfile(pr); }
static FunnymanBot_Controller() { RunningModifiers = GetInfo(BotType.Funnyman).Modifiers; RunningModifiers.RunSpeedModifier = Speed.Fast; RunningModifiers.SprintSpeedModifier = Speed.Fast; RunningModifiers.EnergyConsumptionModifier = 0; }
// set modifiers without changing current health and energy public void SetModifiers(PlayerModifiers modifiers, bool permanent = false) { modifiers.CurrentHealth = Player.GetHealth(); modifiers.CurrentEnergy = Player.GetEnergy(); Player.SetModifiers(modifiers); if (permanent) { Info.Modifiers = modifiers; } }
// Run code on map restart (or script disabled). public void OnShutdown() { IPlayer[] players = Game.GetPlayers(); foreach (IPlayer plr in players) { plr.SetTeam(PlayerTeam.Independent); PlayerModifiers plrModifier = new PlayerModifiers(false); plr.SetModifiers(plrModifier); } // Game.LocalStorage.Clear(); }
public void OnPlayerCreated() { IPlayer pl = User.GetPlayer(); PlayerModifiers mods = pl.GetModifiers(); mods.ProjectileCritChanceTakenModifier = 0; mods.ProjectileCritChanceDealtModifier = 0; mods.ProjectileDamageTakenModifier = ProjectileDamageFactor * Armor.ProjectileDamageFactor; mods.ExplosionDamageTakenModifier = ExplosionDamageFactor * Armor.ExplosionDamageFactor; mods.FireDamageTakenModifier = FireDamageFactor * Armor.FireDamageFactor; mods.MeleeDamageTakenModifier = MeleeDamageFactor * Armor.MeleeDamageFactor; mods.ImpactDamageTakenModifier = FallDamageFactor * Armor.FallDamageFactor; mods.MaxHealth = 10000; pl.SetModifiers(mods); }
/// <summary> /// Gets the shorthand modifier string for a Player Modification /// </summary> /// <param name="mod">Player Mod</param> /// <param name="val">Value of the player mod</param> /// <returns>Shorthand string</returns> public static string GetModifierShorthandString(PlayerModifiers mod, int val) { switch (mod) { case PlayerModifiers.Health: return($"HP: {(val >= 0 ? "" : "-")}{val}"); case PlayerModifiers.Magic: return($"MP: {(val >= 0 ? "" : "-")}{val}"); case PlayerModifiers.Speed: return($"SP: {(val >= 0 ? "" : "-")}{val}"); } return(""); }
public void SetHaleModifiers(ref PlayerModifiers modify, int HP, float sprintSpeed, float runSpeed, float meleeForce, float meleeDamageDealt, float meleeDamageTaken) { // First the general modifiers for every HALE modify.MaxHealth = HP; modify.CurrentHealth = HP; modify.MaxEnergy = 9999; modify.CurrentEnergy = 9999; modify.EnergyRechargeModifier = 100; modify.SizeModifier = 2f; // Then the HALE-specific modifiers modify.SprintSpeedModifier = sprintSpeed; modify.RunSpeedModifier = runSpeed; modify.MeleeForceModifier = meleeForce; modify.MeleeDamageDealtModifier = meleeDamageDealt; modify.MeleeDamageTakenModifier = meleeDamageTaken; }
public string Convert(PlayerModifiers playerModifiers, int indentSize = 0) { if (playerModifiers == null) { return(""); } var sb = new StringBuilder(); var indent = new string(' ', indentSize); sb.AppendLine(indent + "new PlayerModifiers()"); sb.AppendLine(indent + "{"); sb.AppendLine(indent + " MaxHealth = " + V(playerModifiers.MaxHealth) + ","); sb.AppendLine(indent + " MaxEnergy = " + V(playerModifiers.MaxEnergy) + ","); sb.AppendLine(indent + " CurrentHealth = " + V(playerModifiers.CurrentHealth) + ","); sb.AppendLine(indent + " CurrentEnergy = " + V(playerModifiers.CurrentEnergy) + ","); sb.AppendLine(indent + " EnergyConsumptionModifier = " + V(playerModifiers.EnergyConsumptionModifier) + ","); sb.AppendLine(indent + " ExplosionDamageTakenModifier = " + V(playerModifiers.ExplosionDamageTakenModifier) + ","); sb.AppendLine(indent + " ProjectileDamageTakenModifier = " + V(playerModifiers.ProjectileDamageTakenModifier) + ","); sb.AppendLine(indent + " ProjectileCritChanceTakenModifier = " + V(playerModifiers.ProjectileCritChanceTakenModifier) + ","); sb.AppendLine(indent + " FireDamageTakenModifier = " + V(playerModifiers.FireDamageTakenModifier) + ","); sb.AppendLine(indent + " MeleeDamageTakenModifier = " + V(playerModifiers.MeleeDamageTakenModifier) + ","); sb.AppendLine(indent + " ImpactDamageTakenModifier = " + V(playerModifiers.ImpactDamageTakenModifier) + ","); sb.AppendLine(indent + " ProjectileDamageDealtModifier = " + V(playerModifiers.ProjectileDamageDealtModifier) + ","); sb.AppendLine(indent + " ProjectileCritChanceDealtModifier = " + V(playerModifiers.ProjectileCritChanceDealtModifier) + ","); sb.AppendLine(indent + " MeleeDamageDealtModifier = " + V(playerModifiers.MeleeDamageDealtModifier) + ","); sb.AppendLine(indent + " MeleeForceModifier = " + V(playerModifiers.MeleeForceModifier) + ","); sb.AppendLine(indent + " MeleeStunImmunity = " + V(playerModifiers.MeleeStunImmunity) + ","); sb.AppendLine(indent + " CanBurn = " + V(playerModifiers.CanBurn) + ","); sb.AppendLine(indent + " RunSpeedModifier = " + V(playerModifiers.RunSpeedModifier) + ","); sb.AppendLine(indent + " SprintSpeedModifier = " + V(playerModifiers.SprintSpeedModifier) + ","); sb.AppendLine(indent + " EnergyRechargeModifier = " + V(playerModifiers.EnergyRechargeModifier) + ","); sb.AppendLine(indent + " SizeModifier = " + V(playerModifiers.SizeModifier) + ","); sb.AppendLine(indent + " InfiniteAmmo = " + V(playerModifiers.InfiniteAmmo) + ","); sb.AppendLine(indent + " ItemDropMode = " + V(playerModifiers.ItemDropMode) + ","); sb.AppendLine(indent + "};"); return(sb.ToString()); }
public void Update() { if (!IsActive()) { return; } for (int i = 0; i < Equipment.Count; i++) { if (Equipment[i].Id == 0) { Equipment.RemoveAt(i); i--; } else { Equipment[i].Update(this); } } IPlayer pl = null; if (User != null) { pl = User.GetPlayer(); } if (pl != null && (pl.RemovalInitiated || pl.IsRemoved)) { pl = null; } if (pl != null && pl.GetProfile().Name == "CPU") { pl.Remove(); ActiveStatus = false; return; } if (pl != null) { Position = pl.GetWorldPosition(); WeaponTrackingUpdate(false); var heavyWeapon = pl.CurrentPrimaryWeapon.WeaponItem; if (ExtraHeavyAmmoWeapon.Contains(heavyWeapon) && pl.CurrentPrimaryWeapon.CurrentAmmo < (pl.CurrentPrimaryWeapon.MaxTotalAmmo / 2) && HasExtraHeavyAmmo) { pl.GiveWeaponItem(heavyWeapon); HasExtraHeavyAmmo = false; } } if (pl != null && Status >= 0) { if (Status == 0) { StatusDisplay.SetWorldPosition(Position + new Vector2(0, 37)); } else { StatusDisplay.SetWorldPosition(Position + new Vector2(0, 15)); } pl.SetNametagVisible(InSmoke <= 0); bool wasBleeding = Bleeding; IPlayerStatistics stat = pl.Statistics; float lastHp = Hp; if (ProjectileDamageTaken < stat.TotalProjectileDamageTaken) { float ch = stat.TotalProjectileDamageTaken - ProjectileDamageTaken; ProjectileDamageTaken = stat.TotalProjectileDamageTaken; //ch *= ProjectileDamageFactor * Armor.ProjectileDamageFactor; if (InSmoke > 0) { ch *= 0.25f; } if (ch < Armor.MaxProjectileDamageCut && ch > Armor.MaxProjectileDamage) { ch = Armor.MaxProjectileDamage; } if (ch >= StartBleedingProjectile) { Bleeding = true; } Hp -= ch; if (InSmoke <= 0) { BreakWeapon(false); } } if (MeleeDamageTaken < stat.TotalMeleeDamageTaken) { float ch = stat.TotalMeleeDamageTaken - MeleeDamageTaken; MeleeDamageTaken = stat.TotalMeleeDamageTaken; //ch *= MeleeDamageFactor * Armor.MeleeDamageFactor; if (ch > Armor.MaxMeleeDamage) { ch = Armor.MaxMeleeDamage; } if (ch >= StartBleedingMelee) { Bleeding = true; } Hp -= ch; } if (ExplosionDamageTaken < stat.TotalExplosionDamageTaken) { float ch = stat.TotalExplosionDamageTaken - ExplosionDamageTaken; ExplosionDamageTaken = stat.TotalExplosionDamageTaken; //ch *= ExplosionDamageFactor * Armor.ExplosionDamageFactor; if (ch >= StartBleedingProjectile) { Bleeding = true; } Hp -= ch; BreakWeapon(true); } if (FallDamageTaken < stat.TotalFallDamageTaken) { float ch = stat.TotalFallDamageTaken - FallDamageTaken; FallDamageTaken = stat.TotalFallDamageTaken; //ch *= FallDamageFactor * Armor.FallDamageFactor; Hp -= ch; } if (Armor.FireProtect) { if (pl.IsBurning) { pl.ClearFire(); } } else { if (pl.IsBurning) { pl.SetMaxFire(); } if (FireDamageTaken < stat.TotalFireDamageTaken) { float ch = stat.TotalFireDamageTaken - FireDamageTaken; FireDamageTaken = stat.TotalFireDamageTaken; //ch *= FireDamageFactor * Armor.FireDamageFactor; Hp -= ch; } } if (Bleeding) { if (!wasBleeding && Hp > 0) { GlobalGame.PlayEffect("CFTXT", pl.GetWorldPosition(), "BLEEDING"); } if (pl.IsSprinting || pl.IsRolling || pl.IsDiving || pl.IsClimbing || pl.IsMeleeAttacking || pl.IsKicking || pl.IsJumpKicking || pl.IsJumpAttacking) { Hp -= HardBleeding; } else { Hp -= EasyBleeding; } if (JumpCount < stat.TotalJumps) { int ch = stat.TotalJumps - JumpCount; Hp -= ch * JumpBleeding; } if (BleedingEffectTimer == 0) { Vector2 effPos = pl.GetWorldPosition(); effPos.Y += 6; GlobalGame.PlayEffect("BLD", effPos); BleedingEffectTimer = BleedingEffectPeriod; } if (BleedingEffectTimer > 0) { BleedingEffectTimer--; } } if (IsDiving && !pl.IsDiving) { IsDiving = false; if (DiveTime >= 45) { float diff = DiveHeight - pl.GetWorldPosition().Y; diff -= MinDivingHeight * DivingDamageFactor * FallDamageFactor; if (diff > 0) { Hp -= diff; } } } else if (!IsDiving && pl.IsDiving) { IsDiving = true; DiveTime = 0; DiveHeight = pl.GetWorldPosition().Y; } else if (IsDiving && pl.IsDiving) { DiveTime++; } if (IsAdrenaline) { float ch = (lastHp - Hp) * AdrenalineDamageFactor; DelayedDamage += (lastHp - Hp) - ch; Hp = lastHp - ch; } else if (DelayedDamage > 0) { if (DamageDelaySpeed > DelayedDamage) { Hp -= DelayedDamage; DelayedDamage = 0; } else { Hp -= DamageDelaySpeed; DelayedDamage -= DamageDelaySpeed; } } WeaponItem heavyWeapon = pl.CurrentPrimaryWeapon.WeaponItem; if (heavyWeapon == WeaponItem.M60 || heavyWeapon == WeaponItem.GRENADE_LAUNCHER || heavyWeapon == WeaponItem.BAZOOKA || heavyWeapon == WeaponItem.SNIPER || Armor.Heavy) { IsSlow = true; } else { IsSlow = false; } if (IsSlow) { PlayerModifiers mods = pl.GetModifiers(); mods.MaxEnergy = 0; mods.MeleeStunImmunity = 1; mods.EnergyRechargeModifier = 0; if (Armor.Heavy) { mods.SizeModifier = 1.15f; } pl.SetModifiers(mods); } if (IsSlow && ((heavyWeapon == WeaponItem.M60 || heavyWeapon == WeaponItem.GRENADE_LAUNCHER || heavyWeapon == WeaponItem.BAZOOKA || heavyWeapon == WeaponItem.SNIPER) && Armor.Heavy)) { PlayerModifiers mods = pl.GetModifiers(); mods.MaxEnergy = 0; mods.MeleeStunImmunity = 1; mods.EnergyRechargeModifier = 0; mods.RunSpeedModifier = 0.5f; mods.MeleeForceModifier = 2f; mods.SizeModifier = 2.6f; pl.SetModifiers(mods); if (pl.IsRolling || pl.IsDiving) { Vector2 vel = pl.GetLinearVelocity() / 3; vel.Y = 0; pl.SetWorldPosition(Position - vel); if (SlowEffectTimer == 0) { SlowEffectTimer = -1; } } if (SlowTimer == 0 && pl.IsSprinting) { SlowTimer = 4; if (SlowEffectTimer == 0) { SlowEffectTimer = -1; } } if (SlowTimer <= 2) { pl.SetInputEnabled(true); } else { pl.SetInputEnabled(false); } if (SlowEffectTimer == -1) { GlobalGame.PlayEffect("CFTXT", pl.GetWorldPosition(), "TOO HEAVY"); SlowEffectTimer = 100; } if (SlowEffectTimer > 0) { SlowEffectTimer--; } if (SlowTimer > 0) { SlowTimer--; } } else if (!pl.IsInputEnabled) { pl.SetInputEnabled(true); } JumpCount = stat.TotalJumps; if (Status == 0) { if (StunTime > 0 && Status != 4) { Status = 4; pl.Kill(); } if (Hp > 0 && StunTime <= 0) { pl.SetHealth(pl.GetMaxHealth() * Hp / 100.0f); //if (Hp < lastHp) pl.SetHealth(99 + GlobalRandom.Next(100) / 100.0f); //else pl.SetHealth(100); if (pl.IsWalking && !pl.IsManualAiming && !pl.IsClimbing && !pl.IsLedgeGrabbing && !pl.IsInMidAir && !pl.IsRolling) { if (CurrentEquipment < Equipment.Count) { Equipment[CurrentEquipment].Use(this); } } else if (Equipment.Count > 1 && pl.CurrentWeaponDrawn == WeaponItemType.NONE) { if (pl.IsMeleeAttacking || pl.IsJumpAttacking) { CurrentEquipment = 0; } else if (pl.IsKicking || pl.IsJumpKicking) { CurrentEquipment = 1; } } } else if (Hp <= 0) { if (!IsActive()) { Status = -1; } else if (!pl.IsBurning || Armor.FireProtect) { int rnd = GlobalRandom.Next(0, 100); Bleeding = false; if (rnd < OvercomeChance) { Hp = OvercomeHealth; Status = 3; } else if (rnd < AliveChance) { Hp = StableHealth; Status = 2; } else if (rnd < DyingChance) { Hp = DyingHealth; Status = 1; } else { Status = -1; } pl.Kill(); } else { Status = -1; pl.Kill(); } } } else if (Status == 1 || Status == 2 || Status == 3) { if (pl.IsBurnedCorpse && !Armor.FireProtect) { Hp = 0; } if (Hp <= 0) { Status = -1; } else if (Hp <= DyingHealth) { Status = 1; } else if (Hp <= StableHealth) { Status = 2; } else if (Hp <= ReviveHealth) { Status = 3; } } if (Status == 0) { StatusDisplay.SetTextColor(Color.White); } else { if (Team == PlayerTeam.Team1) { StatusDisplay.SetTextColor(new Color(128, 128, 255)); } else { StatusDisplay.SetTextColor(new Color(255, 128, 128)); } } if (Status == 0) { if (CurrentEquipment < Equipment.Count && InSmoke <= 0) { StatusDisplay.SetText(Equipment[CurrentEquipment].GetName()); } else { StatusDisplay.SetText(""); } } else if (Status == 1) { StatusDisplay.SetText("DYING"); Hp -= DyingSpeed; } else if (Status == 2) { StatusDisplay.SetText("STABLE"); } else if (Status == 3) { StatusDisplay.SetText("OVERCOMING"); Hp += OvercomeSpeed; } else if (Status == 4) { StatusDisplay.SetText("STUN"); StunTime--; } if (Status == 3 && Hp >= ReviveHealth) { Revive(Hp); } else if (Status == 4 && StunTime <= 0) { Revive(Hp, Bleeding); } } else if (pl == null && Status >= 0) { Status = -1; } if (InSmoke > 0) { InSmoke--; } if (Status == -1) { Status = -2; OnDead(); StatusDisplay.SetText(""); } }
public BulletManager CreateManager(Transform bulletParent, Transform barrelEnd, IBulletContainer bulletContainer, EntityTeamManager teamManager, BulletSliderManager bulletSliderManager, PlayerModifiers playerModifiers) { BulletManager manager = bulletManager.Create(bulletParent, barrelEnd, this, bulletContainer, teamManager, bulletSliderManager, playerModifiers); managers.Add(manager); return(manager); }
public virtual BulletManager Create(Transform bulletParent, Transform barrelEnd, BulletInfo bulletInfo, IBulletContainer bulletContainer, EntityTeamManager teamManager, BulletSliderManager bulletSliderManager, PlayerModifiers playerModifiers) { BulletManager bulletManager = (BulletManager)CreateInstance(GetType()); bulletManager.Initialize(bulletParent, barrelEnd, bulletInfo, bulletContainer, teamManager, bulletSliderManager, playerModifiers); return(bulletManager); }
private void Initialize(Transform bulletParent, Transform barrelEnd, BulletInfo bulletInfo, IBulletContainer bulletContianer, EntityTeamManager teamManager, BulletSliderManager bulletUI, PlayerModifiers playerModifiers) { this.playerModifiers = playerModifiers; Initialize(bulletParent, barrelEnd, bulletInfo, bulletContianer, teamManager, bulletUI); }
/// <summary> /// Update loop (must be enabled in the OnStartup() function or AfterStartup() function). /// </summary> /// <param name="elapsed">Time elapsed</param> public void OnUpdate(float elapsed) { try { if (GameState == 0) { try { RefreshPlayerMenus(); } catch (Exception e) { DebugLogger.DebugOnlyDialogLog("CAUSED BY REFRESHPLAYERMENUS" + e.StackTrace, CameraPosition); DebugLogger.DebugOnlyDialogLog(e.Message, CameraPosition); var st = new System.Diagnostics.StackTrace(e, true); var frame = st.GetFrame(0); var line = frame.GetFileLineNumber(); DebugLogger.DebugOnlyDialogLog("METHOD: " + e.TargetSite.Name + " LINE: " + line, CameraPosition); } foreach (var p in PlayerList) { if (p == null) { continue; } if (p.User == null) { continue; } var player = p.User.GetPlayer(); if (player == null) { continue; } PlayerModifiers mods = player.GetModifiers(); mods.MaxEnergy = 0; mods.MeleeStunImmunity = 1; mods.EnergyRechargeModifier = 0; player.SetModifiers(mods); } for (int i = 0; i < PlayerMenuList.Count; i++) { PlayerMenuList[i].Update(); } } else if (GameState == 1) { if (TimeToStart > 0) { return; } GlobalGame.SetCurrentCameraMode(CameraMode.Static); GameState = 2; AirPlayerList.Clear(); ThrownTrackingList.Clear(); PreWeaponTrackingUpdate(); PostWeaponTrackingUpdate(); RemoveObjects(); RemoveTurrets(); RemoveShieldGenerators(); ResetElectronicWarfare(); RespawnUnknownObjects(); ResetEffects(); RemoveWeapons(); MapPartList[CurrentMapPartIndex].Start(); TimeToStart = AreaTime; if (!IsDebug && PlayerList.Count < 2) { Game.SetGameOver("NOT ENOUGH PLAYERS"); GameState = 100; return; } } else if (GameState == 2) { if (Game.GetCameraArea().Left == CameraPosition.X && Game.GetCameraArea().Top == CameraPosition.Y) { if (IsFirstMatch) { TeamBalance(); } Game.RunCommand("MSG BATTLE BEGINS"); GameState = 3; } } else if (GameState == 3) { int areaStatus = MapPartList[CurrentMapPartIndex].Update(); int capturedBy = MapPartList[CurrentMapPartIndex].CapturedBy; UpdateEffects(); ThrownWeaponUpdate(); PreWeaponTrackingUpdate(); for (int i = 0; i < PlayerList.Count; i++) { PlayerList[i].Update(); } PostWeaponTrackingUpdate(); UpdateTurrets(); UpdateShieldGenerators(); ThrowingUpdate(); if (IsAllPlayerDead()) { GameState = 6; TimeToStart = 5; } else if (TimeToStart <= 0) { if (capturedBy == 0) { SpawnDrone(4, PlayerTeam.Team3); } else if (capturedBy == 1) { SpawnDrone(5, PlayerTeam.Team1); } else if (capturedBy == 2) { SpawnDrone(5, PlayerTeam.Team2); } TimeToStart = 30; } int teamStatus = IsOneTeamDead(); if (teamStatus != 0 || GameState == 6) { for (int i = 0; i < PlayerList.Count; i++) { PlayerList[i].Stop(); } for (int i = 0; i < TurretList.Count; i++) { TurretList[i].StopMovement(); } } if (areaStatus == 1) { Game.RunCommand("MSG BLUE TEAM CAPTURED ALL POINTS"); SpawnDrone(4, PlayerTeam.Team1); TimeToStart = 30; } else if (areaStatus == 2) { Game.RunCommand("MSG RED TEAM CAPTURED ALL POINTS"); SpawnDrone(4, PlayerTeam.Team2); TimeToStart = 30; } if (teamStatus == 1) { TimeToStart = 5; GameState = 7; } else if (teamStatus == 2) { TimeToStart = 5; GameState = 8; } } else if (GameState == 4) { var mapPart = MapPartList[CurrentMapPartIndex]; mapPart.BlueRoundsWon++; MapPartList[CurrentMapPartIndex].Restart(); AddTeamExp(10, 3, PlayerTeam.Team1, false); if (mapPart.CurrentRound < RoundsPerMapPart && mapPart.BlueRoundsWon != RoundsPerMapPart - 1) { // won this round, but not enough to advance RemoveWeapons(); GameState = 1; TimeToStart = 5; AddTeamExp(10, 4, PlayerTeam.Team1, false); IsFirstMatch = false; Game.RunCommand("MSG BLUE WON THIS ROUND!"); Game.RunCommand("MSG RED: " + mapPart.RedRoundsWon + " - BLUE: " + mapPart.BlueRoundsWon); mapPart.CurrentRound++; Game.RunCommand("MSG STARTING NEXT ROUND (" + MapPartList[CurrentMapPartIndex].CurrentRound + "/" + RoundsPerMapPart + ")"); } else { // won this round, and it's enough to advance if (RoundsPerMapPart > 1) { // more than one win was needed to advance Game.RunCommand("MSG BLUE WAS THE BEST OF " + RoundsPerMapPart + "!"); mapPart.RedRoundsWon = 0; mapPart.BlueRoundsWon = 0; TimeToStart = 5; } if (CurrentMapPartIndex > 0) { CurrentMapPartIndex--; IsFirstMatch = false; GameState = 1; } else { AddTeamExp(30 + RoundsPerMapPart, 4, PlayerTeam.Team1, false); GameState = -1; } } } else if (GameState == 5) { var mapPart = MapPartList[CurrentMapPartIndex]; mapPart.RedRoundsWon++; mapPart.Restart(); AddTeamExp(10, 3, PlayerTeam.Team2, false); if (mapPart.CurrentRound < RoundsPerMapPart && mapPart.RedRoundsWon != RoundsPerMapPart - 1) { RemoveWeapons(); GameState = 1; TimeToStart = 5; IsFirstMatch = false; AddTeamExp(10, 4, PlayerTeam.Team2, false); Game.RunCommand("MSG RED TEAM WON THIS ROUND!"); Game.RunCommand("MSG RED: " + mapPart.RedRoundsWon + " - BLUE: " + mapPart.BlueRoundsWon); mapPart.CurrentRound++; Game.RunCommand("MSG STARTING NEXT ROUND (" + MapPartList[CurrentMapPartIndex].CurrentRound + "/" + RoundsPerMapPart + ")"); } else { // won this round, and it's enough to advance if (RoundsPerMapPart > 1) { // more than one win was needed to advance Game.RunCommand("MSG RED TEAM WAS THE BEST OF " + RoundsPerMapPart + "!"); mapPart.RedRoundsWon = 0; mapPart.BlueRoundsWon = 0; TimeToStart = 5; } if (CurrentMapPartIndex < MapPartList.Count - 1) { CurrentMapPartIndex++; IsFirstMatch = false; GameState = 1; } else { AddTeamExp(30 + RoundsPerMapPart, 4, PlayerTeam.Team2, false); GameState = -2; } } } else if (GameState == 6) { if (TimeToStart <= 0) { var mapPart = MapPartList[CurrentMapPartIndex]; mapPart.Restart(); TimeToStart = 5; Game.RunCommand("MSG NOBODY CAPTURED THE AREA!"); GameState = 1; } } else if (GameState == 7) { if (TimeToStart <= 0) { GameState = 4; } } else if (GameState == 8) { if (TimeToStart <= 0) { GameState = 5; } } else if (GameState == -1 || GameState == -2) { var menuCameraPosition = GlobalGame.GetSingleObjectByCustomId("MenuCameraPosition").GetWorldPosition(); CameraPosition.X = menuCameraPosition.X; CameraPosition.Y = menuCameraPosition.Y; for (int i = 0; i < PlayerMenuList.Count; i++) { PlayerMenuList[i].ShowExp(); } GlobalGame.SetWeatherType(WeatherType.None); GameState -= 2; } else if (GameState == -3) { if (!IsDataSaved) { SaveData(); } if (TimeToStart <= 0) { Game.SetGameOver("BLUE TEAM WINS!"); } } else if (GameState == -4) { if (!IsDataSaved) { SaveData(); } if (TimeToStart <= 0) { Game.SetGameOver("RED TEAM WINS!"); } } UpdateCamera(); } catch (Exception e) { DebugLogger.DebugOnlyDialogLog(e.StackTrace, CameraPosition); DebugLogger.DebugOnlyDialogLog(e.Message, CameraPosition); var st = new System.Diagnostics.StackTrace(e, true); var frame = st.GetFrame(0); var line = frame.GetFileLineNumber(); DebugLogger.DebugOnlyDialogLog("METHOD: " + e.TargetSite.Name + " LINE: " + line, CameraPosition); } }
private void SetHale() { IPlayer[] players = Game.GetPlayers(); foreach (IPlayer plr in players) { plr.SetTeam(PlayerTeam.Team1); PlayerModifiers plrmodifier = plr.GetModifiers(); plrmodifier.MaxHealth = -2; plrmodifier.MaxEnergy = -2; plrmodifier.CurrentHealth = -2; plrmodifier.EnergyRechargeModifier = -2; plrmodifier.SizeModifier = -2; plrmodifier.SprintSpeedModifier = -2; plrmodifier.RunSpeedModifier = -2; plrmodifier.MeleeForceModifier = -2; plrmodifier.MeleeDamageDealtModifier = -2; plrmodifier.MeleeDamageTakenModifier = -2; plr.SetModifiers(plrmodifier); } // Check if Local Storage contains needed items (halecandidates and last_hale) if (!Game.LocalStorage.ContainsKey("halecandidates")) { Game.RunCommand("/MSG " + "Local storage doesn't contain the 'halecandidates' key, so let's add it."); SetHaleCandidates(); } if (!Game.LocalStorage.ContainsKey("last_hale")) { Game.RunCommand("/MSG " + "Local storage doesn't contain the 'last_hale' key, so let's add it"); Game.LocalStorage.SetItem("last_hale", players[0].Name); } string[] haleCandidates = (string[])Game.LocalStorage.GetItem("halecandidates"); // Synchronize haleCandidates queue to the players currently in server SynchronizeHaleCandidates(players, haleCandidates); string next_hale_name = haleCandidates[(m_rnd.Next(((int)DateTime.Now.Millisecond * (int)DateTime.Now.Minute * 1000)) + (int)DateTime.Now.Millisecond) % haleCandidates.Length]; IPlayer next_hale = players[0]; int next_type = (m_rnd.Next(0, ((int)DateTime.Now.Millisecond * (int)DateTime.Now.Minute * 1000)) + (int)DateTime.Now.Millisecond) % (HALENAMES.Length); int random_index = 0; if (!MODE) { // Check if storage contains last_hale. If it does make sure that same person isn't hale again. bool chooseAgain = false; do { chooseAgain = false; next_hale_name = haleCandidates[(m_rnd.Next(((int)DateTime.Now.Millisecond * (int)DateTime.Now.Minute * 1000) + random_index) + (int)DateTime.Now.Millisecond) % haleCandidates.Length]; if ((string)Game.LocalStorage.GetItem("last_hale") == next_hale_name) { Game.RunCommand("/MSG " + "Sama hale kuin viimeksi --> vaihtoon"); chooseAgain = true; } foreach (IPlayer plr in players) { if (plr.Name == next_hale_name) { next_hale = plr; } } random_index++; } while (chooseAgain & random_index < 10); // Delete new hale from halecandidates and update 'last_hale' in localstorage EraseFromHaleCandidates(next_hale_name); } HALE = next_hale; HALETYPE = next_type; HALETYPE = 4; HALE.SetTeam(PlayerTeam.Team2); // Calculating hale HP based on playeramount and getting the modifier for HALE to apply changes PlayerModifiers modify = HALE.GetModifiers(); int haleHP; int hpConstant = 150; if (MODE) { haleHP = 500; } else { if (players.Length <= 4) { haleHP = (players.Length - 1) * hpConstant; } else { haleHP = 4 * hpConstant + (players.Length - 4) * hpConstant / 2; } } lastHaleHp = haleHP; Game.RunCommand("/MSG " + " - - - Minä olen hirmuinen " + HALENAMES[HALETYPE] + " - - - "); // Setting HALE modifiers switch (HALETYPE) { // SetHaleModifiers( modify, HP, sprintSpeed, runSpeed, meleeForce, meleeDamageDealt, meleeDamageTaken ) // Saxton Fale; case 0: SetHaleClothing(ref HALE); SetHaleModifiers(ref modify, haleHP, 1.5f, 1.5f, 3f, 8f, 2f); HALE.SetModifiers(modify); break; // Sin Feaster case 1: SetSinClothing(ref HALE); tpEnabled = true; tpCooldown = 20000; SetHaleModifiers(ref modify, haleHP, 1.2f, 1.2f, 2f, 5f, 1.5f); HALE.SetModifiers(modify); break; // Speedy Fale case 2: SetSpeedClothing(ref HALE); SetHaleModifiers(ref modify, haleHP, 2f, 2f, 6f, 0.001f, 1f); HALE.SetModifiers(modify); break; // DIO case 3: warudoEnabled = true; warudoCooldown = 10000; SetDIOClothing(ref HALE); SetHaleModifiers(ref modify, haleHP, 1.2f, 1.2f, 3f, 3f, 2f); HALE.SetModifiers(modify); break; // Sick F**k case 4: SetTeam(HALETYPE); zombifyHumansOnDeath = true; SetSickClothing(ref HALE); SetHaleModifiers(ref modify, haleHP / 2, 1.5f, 1.5f, 2f, 3f, 1.5f); HALE.SetModifiers(modify); ReanimateTrigger.Trigger(); break; } // Activate HALE triggers if (MODE) { Game.RunCommand("/INFINITE_AMMO 1"); Game.RunCommand("/GIVE 0 shuriken"); } else { HALE.SetInputEnabled(false); HaleStartCooldown.Trigger(); RemoveHaleItemsTimer.Trigger(); } DisplayHaleStatusTimer.Trigger(); }