public void HandlePlayerDeath(PlayerMobile victim) { VvVPlayerEntry ventry = GetPlayerEntry <VvVPlayerEntry>(victim); if (ventry != null && ventry.Active) { List <DamageEntry> list = victim.DamageEntries.OrderBy(d => - d.DamageGiven).ToList(); List <Mobile> handled = new List <Mobile>(); bool statloss = false; for (int i = 0; i < list.Count; i++) { Mobile dam = list[i].Damager; if (dam is BaseCreature && ((BaseCreature)dam).GetMaster() is PlayerMobile) { dam = ((BaseCreature)dam).GetMaster(); } bool isEnemy = IsEnemy(victim, dam); if (isEnemy && dam != null && Battle.IsInActiveBattle(dam, victim)) { VvVPlayerEntry kentry = GetPlayerEntry <VvVPlayerEntry>(dam); if (kentry != null && !handled.Contains(dam)) { if (i == 0) { Battle.Update(ventry, kentry, UpdateType.Kill); } else { Battle.Update(ventry, kentry, UpdateType.Assist); } handled.Add(dam); } } if (!statloss && isEnemy) { statloss = true; } } if (statloss) { Faction.ApplySkillLoss(victim); } ColUtility.Free(list); ColUtility.Free(handled); } }
public override void OnDoubleClick(Mobile m) { if (IsChildOf(m.Backpack)) { VvVBattle battle = ViceVsVirtueSystem.Instance.Battle; if (!ViceVsVirtueSystem.IsVvV(m)) { m.SendLocalizedMessage(1155496); // This item can only be used by VvV participants! } else if (battle == null || !battle.OnGoing || !battle.IsInActiveBattle(m)) { m.SendLocalizedMessage(1155406); // This item can only be used in an active VvV battle region! } else if (battle.TurretCount > VvVBattle.MaxTurrets) { m.SendLocalizedMessage(1155502); // The turret limit for this battle has been reached! } else { CannonTurret t = new CannonTurret(m); t.MoveToWorld(m.Location, m.Map); battle.Turrets.Add(t); Delete(); } } }
public void HandlePlayerDeath(PlayerMobile victim) { VvVPlayerEntry ventry = GetPlayerEntry <VvVPlayerEntry>(victim); if (ventry != null && ventry.Active) { List <DamageEntry> list = victim.DamageEntries.OrderBy(d => - d.DamageGiven).ToList(); List <Mobile> handled = new List <Mobile>(); bool statloss = false; for (int i = 0; i < list.Count; i++) { Mobile dam = list[i].Damager; if (dam == victim || dam == null) { continue; } if (dam is BaseCreature creature && creature.GetMaster() is PlayerMobile) { dam = creature.GetMaster(); } bool isEnemy = IsEnemy(victim, dam); if (isEnemy) { VvVPlayerEntry kentry = GetPlayerEntry <VvVPlayerEntry>(dam); if (kentry != null && kentry.Active && !handled.Contains(dam)) { if (Battle.IsInActiveBattle(dam, victim)) { if (i == 0) { Battle.Update(ventry, kentry, UpdateType.Kill); } else { Battle.Update(ventry, kentry, UpdateType.Assist); } } handled.Add(dam); kentry.TotalKills++; if (EnhancedRules) { kentry.AwardSilver(victim); } } if (!handled.Contains(victim)) { ventry.TotalDeaths++; handled.Add(victim); } } if (!statloss && isEnemy) { statloss = true; } } if (statloss) { ApplySkillLoss(victim); } ColUtility.Free(list); ColUtility.Free(handled); } }
public override void OnDoubleClick(Mobile m) { if (IsChildOf(m.Backpack)) { VvVBattle battle = ViceVsVirtueSystem.Instance.Battle; if (!ViceVsVirtueSystem.IsVvV(m)) { m.SendLocalizedMessage(1155496); // This item can only be used by VvV participants! } else if (battle == null || battle.Region == null || !battle.OnGoing || !battle.IsInActiveBattle(m)) { m.SendLocalizedMessage(1155406); // This item can only be used in an active VvV battle region! } else if (battle.NextManaSpike > DateTime.UtcNow) { m.SendLocalizedMessage(1155497); // The ground is too charged to use a mana spike! } else if (m.Mana < 50) { m.SendLocalizedMessage(1155509); // You lack the mana required to use this. } else { m.FixedParticles(0x37C4, 1, 8, 9916, 39, 3, EffectLayer.CenterFeet); m.FixedParticles(0x37C4, 1, 8, 9502, 39, 4, EffectLayer.CenterFeet); m.PlaySound(0x210); m.PrivateOverheadMessage(Network.MessageType.Regular, 1154, 1155499, m.NetState); // *You drive the spike into the ground!* Timer.DelayCall(TimeSpan.FromMilliseconds(250), () => { if (m.Mana < 50) // Another mana check! { m.SendLocalizedMessage(1155509); // You lack the mana required to use this. return; } m.Mana = 0; battle.NextManaSpike = DateTime.UtcNow + TimeSpan.FromMinutes(5); battle.ManaSpikeEndEffects = DateTime.UtcNow + TimeSpan.FromMinutes(2); // TODO: Duration? foreach (Mobile mobile in battle.Region.GetEnumeratedMobiles()) { if (ViceVsVirtueSystem.IsEnemy(mobile, m)) { mobile.RevealingAction(); mobile.BoltEffect(0); AOS.Damage(mobile, m, Utility.RandomMinMax(50, 75), 0, 0, 0, 0, 100); mobile.PrivateOverheadMessage(Network.MessageType.Regular, 1154, 1155498, mobile.NetState); // *Your body convulses as energy surges through it!* } } Delete(); }); } } else { m.SendLocalizedMessage(1042004); // That must be in your pack for you to use it. } }