public static PlayerZombieProfile EnsureProfile(PlayerMobile pm) { PlayerZombieProfile p; if (!PlayerProfiles.TryGetValue(pm, out p)) { PlayerProfiles.Add(pm, p = new PlayerZombieProfile(pm)); } else if (p == null) { PlayerProfiles[pm] = p = new PlayerZombieProfile(pm); } return p; }
public static PlayerZombieProfile EnsureProfile(PlayerMobile pm) { PlayerZombieProfile p; if (!PlayerProfiles.TryGetValue(pm, out p)) { PlayerProfiles.Add(pm, p = new PlayerZombieProfile(pm)); } else if (p == null) { PlayerProfiles[pm] = p = new PlayerZombieProfile(pm); } return(p); }
public void HandleMobDeath(BaseCreature mob, ZombieAvatar avatar) { if (mob is ZombieZEvent) { _ZombiesLoc1.Remove(mob); _ZombiesLoc2.Remove(mob); _ZombiesLoc3.Remove(mob); _ZombiesLoc4.Remove(mob); } else if (mob is DaemonZombieEvent) { Daemons.Remove(mob); } else if (mob is TreeFellow) { TreeFellows.Remove(mob); } else if (mob is ZombieSpider) { ZombieSpiders.Remove(mob); } else if (mob is FeyWarrior) { FeyWarriors.Remove(mob); } else if (mob is Vitriol) { FeyWarriors.Remove(mob); } else if (mob is Bird) { FeyWarriors.Remove(mob); } else if (mob is HorrifyingTentacle) { HorrifyingTentacles.Remove(mob); } else if (mob is GoreFiendZombieEvent) { GoreFiends.Remove(mob); } if (avatar.Owner != null) { PlayerZombieProfile profile = ZombieEvent.EnsureProfile(avatar.Owner); profile.AddKill(mob); } }
private static bool DeserializePlayerProfiles(GenericReader reader) { reader.GetVersion(); reader.ReadBlockDictionary( () => { var e = reader.ReadMobile <PlayerMobile>(); var p = new PlayerZombieProfile(reader); return(new KeyValuePair <PlayerMobile, PlayerZombieProfile>(e, p)); }, PlayerProfiles); return(true); }
public ZombieEventRewardsUI( PlayerMobile user, PlayerZombieProfile profile, Gump parent = null, int?x = null, int?y = null, string title = null, string html = null, int icon = 7004, Action <GumpButton> onAccept = null, Action <GumpButton> onCancel = null) : base(user, parent, 0, 0, title, html, icon, onAccept, onCancel) { CanMove = true; Closable = true; Modal = false; UserProfile = profile; }
public ZombieEventRewardsUI( PlayerMobile user, PlayerZombieProfile profile, Gump parent = null, int? x = null, int? y = null, string title = null, string html = null, int icon = 7004, Action<GumpButton> onAccept = null, Action<GumpButton> onCancel = null) : base(user, parent, 0, 0, title, html, icon, onAccept, onCancel) { CanMove = true; Closable = true; Modal = false; UserProfile = profile; }
public bool HandleAvatarDeath(PlayerZombieProfile profile, Mobile lastkiller) { ZombieAvatar avatar = profile.ZombieAvatar; profile.Deaths++; if (lastkiller is ZombieAvatar) { var enemyavatar = lastkiller as ZombieAvatar; if (enemyavatar.Owner != null) { PlayerZombieProfile enemyprofile = ZombieEvent.EnsureProfile(enemyavatar.Owner); enemyprofile.Kills++; } } Effects.SendIndividualFlashEffect(avatar, FlashType.LightFlash); avatar.DropHolding(); var corpse = CreatePlayerCorpse(avatar) as Corpse; if (corpse != null) { Effects.PlaySound(avatar, avatar.Map, avatar.GetDeathSound()); ZombieEvent.ZombieDeathAnim(avatar, corpse); corpse.MoveToWorld(avatar.Location, Map.ZombieLand); } avatar.MoveToWorld(GetRandomLocation(), Map.ZombieLand); if (avatar.Backpack != null) { avatar.EquipItem(new Dagger { Speed = 1 }); avatar.Backpack.DropItem(new Bandage(7)); ZombieEvent.RandomClothing(avatar); } avatar.Hits = avatar.HitsMax; avatar.Stam = avatar.StamMax; avatar.Poison = null; return(false); }
public void JoinZombieInstance(PlayerMobile player) { PlayerZombieProfile profile = ZombieEvent.EnsureProfile(player); ZombieAvatar avatar = profile.ZombieAvatar; profile.Active = true; if (avatar == null) { avatar = profile.CreateAvatar(); } if (profile.ZombieSavePoint == Point3D.Zero && avatar != null && DateTime.UtcNow > (profile.DisconnectTime + TimeSpan.FromMinutes(2))) { if (avatar.Backpack != null && avatar.Items.Count <= 1) { avatar.EquipItem(new Dagger { Speed = 1 }); avatar.Backpack.DropItem(new Bandage(7)); ZombieEvent.RandomClothing(avatar); } avatar.MoveToWorld(GetRandomLocation(), Map.ZombieLand); } CreaturePossession.ForcePossessCreature(null, player, avatar); if (avatar != null) { avatar.Blessed = false; avatar.Hidden = false; avatar.IgnoreMobiles = false; avatar.CantWalk = false; } player.LogoutLocation = player.Location; player.Map = Map.Internal; player.LogoutMap = Map.Felucca; }
public void LeaveZombieInstance(PlayerZombieProfile profile) { if (profile.LeaveEventTimer == null || !profile.LeaveEventTimer.Running) { profile.ZombieAvatar.SendMessage(54, "You will log out in one minute. Your location and items wil be saved upon a successful logout."); profile.LeaveEventTimer = Timer.DelayCall(TimeSpan.FromMinutes(1), () => { profile.Active = false; profile.ZombieSavePoint = profile.ZombieAvatar.Location; profile.ZombieAvatar.SendMessage(54, "You have successfully logged out of the Zombie Event. Your location and items have been saved. You will now be disconnected."); profile.ZombieAvatar.Blessed = true; profile.ZombieAvatar.Hidden = true; profile.ZombieAvatar.IgnoreMobiles = true; profile.ZombieAvatar.CantWalk = true; if (profile.ZombieAvatar.NetState != null) { profile.ZombieAvatar.NetState.Dispose(); } }); } }
private static bool DeserializePlayerProfiles(GenericReader reader) { reader.GetVersion(); reader.ReadBlockDictionary( () => { var e = reader.ReadMobile<PlayerMobile>(); var p = new PlayerZombieProfile(reader); return new KeyValuePair<PlayerMobile, PlayerZombieProfile>(e, p); }, PlayerProfiles); return true; }
private static void CSInvoke() { CommandUtility.Register( "Zombieland", AccessLevel.Player, e => { PlayerMobile player = null; ZombieAvatar avatar = null; if (e.Mobile is PlayerMobile) { player = e.Mobile as PlayerMobile; } else if (e.Mobile is ZombieAvatar) { avatar = e.Mobile as ZombieAvatar; if (avatar.Owner != null) { player = ((ZombieAvatar)e.Mobile).Owner; } } if (player != null) { PlayerZombieProfile profile = EnsureProfile(player); ZombieInstance instance = GetInstance(); if (instance != null || player.AccessLevel >= AccessLevel.GameMaster) { new ZombieEventUI(player, e.Mobile as ZombieAvatar, instance, profile).Send(); } else { player.SendMessage(54, "Zombieland is currently inactive."); } } }); CommandUtility.Register( "ZombieRewards", AccessLevel.Player, e => { PlayerMobile player = null; if (e.Mobile is PlayerMobile) { player = e.Mobile as PlayerMobile; } else if (e.Mobile is ZombieAvatar) { e.Mobile.SendMessage(54, "You can only claim prizes in your player form!"); return; } if (player != null) { PlayerZombieProfile profile = EnsureProfile(player); new ZombieEventRewardsUI(player, profile).Send(); } }); CommandUtility.Register( "RecalculatePoints", AccessLevel.Developer, e => { foreach (PlayerZombieProfile playerZombieProfile in PlayerProfiles.Values) { playerZombieProfile.RecalculatePoints(); } }); CommandUtility.Register( "FixInstance", AccessLevel.Developer, e => { PlayerZombieProfile profile = PlayerProfiles.Values.FirstOrDefault(x => x.OverallScore >= 1); var instance = new ZombieInstance(profile.ZombieKills.Keys.FirstOrDefault()); ZombieEvents.Add(instance.Uid, instance); instance.init(); }); CommandUtility.Register( "ZombieRespawn", AccessLevel.Developer, e => { ZombieInstance instance = GetInstance(); instance.RespawnEvent(); }); CommandUtility.Register( "ZombiePause", AccessLevel.Developer, e => { ZombieInstance instance = GetInstance(); if (instance != null) { PauseEvent(); } }); CommandUtility.Register( "ZombieUnpause", AccessLevel.Developer, e => { ZombieInstance instance = GetPausedInstance(); if (instance != null) { UnpauseEvent(); } }); CommandUtility.Register( "ResetZombieScore", AccessLevel.Developer, e => { if (!(e.Mobile is PlayerMobile)) { return; } if (e.Arguments.Length < 1) { e.Mobile.SendMessage(0x22, "Format: <PlayerName>"); return; } string name = e.Arguments[0]; Mobile mobile = World.Mobiles.Values.FirstOrDefault(x => x.RawName == name && x is PlayerMobile); if (mobile is PlayerMobile) { PlayerZombieProfile profile = EnsureProfile(mobile as PlayerMobile); profile.SpendablePoints = 0; profile.OverallScore = 0; mobile.SendMessage(54, "Your spendable zombie points and zombie score have been wiped by " + e.Mobile.RawName + "."); } }); CommandUtility.Register( "RewardtheCure", AccessLevel.Developer, e => { ZombieInstance instance = GetPausedInstance(); if (instance != null) { if (instance.CureWinner != null) { if (instance.CureWinner.BankBox != null) { var thecure = new TheCure(); instance.CureWinner.BankBox.DropItem(thecure); } var invalid = new List <PlayerMobile>(); foreach (PlayerMobile mobile in instance.CureCompleters.ToList()) { PlayerZombieProfile profile = EnsureProfile(mobile); if (invalid.Contains(mobile) || instance.CureWinner == mobile) { instance.CureCompleters.Remove(mobile); profile.OverallScore -= 800; profile.SpendablePoints -= 800; } else { invalid.Add(mobile); } } if (instance.CureCompleters != null && instance.CureCompleters.Count > 0) { foreach (PlayerMobile mobile in instance.CureCompleters) { var thecure = new TheCure(); if (mobile != null && mobile.BankBox != null) { mobile.BankBox.DropItem(thecure); } } } } } }); CommandUtility.Register( "GrantZombiePointsAll", AccessLevel.Developer, e => { if (!(e.Mobile is PlayerMobile)) { return; } if (e.Arguments.Length < 1) { e.Mobile.SendMessage(0x22, "Format: <Points>"); return; } int value; if (!Int32.TryParse(e.Arguments[0], out value)) { e.Mobile.SendMessage(0x22, "Format: <PlayerName> <Points>"); return; } if (e.Arguments.Length > 1) { e.Mobile.SendMessage(0x22, "Format: <Points>"); return; } foreach (PlayerZombieProfile profile in PlayerProfiles.Values) { profile.Owner.SendMessage(54, "You have been granted " + value + " spendable zombie points by " + e.Mobile.RawName + "."); profile.SpendablePoints += value; } }); CommandUtility.RegisterAlias("Zombieland", "z"); CommandUtility.Register( "GrantZombiePoints", AccessLevel.Developer, e => { if (!(e.Mobile is PlayerMobile)) { return; } if (e.Arguments.Length < 2) { e.Mobile.SendMessage(0x22, "Format: <PlayerName> <Points>"); return; } string name = e.Arguments[0]; int value; if (!Int32.TryParse(e.Arguments[1], out value)) { e.Mobile.SendMessage(0x22, "Format: <PlayerName> <Points>"); return; } if (e.Arguments.Length > 2) { e.Mobile.SendMessage(0x22, "Format: <PlayerName> <Points>"); return; } Mobile mobile = World.Mobiles.Values.FirstOrDefault(x => x.RawName == name && x is PlayerMobile); if (mobile is PlayerMobile) { PlayerZombieProfile profile = EnsureProfile(mobile as PlayerMobile); profile.SpendablePoints += value; mobile.SendMessage(54, "You have been granted " + value + " zombie points by " + e.Mobile.RawName + "."); e.Mobile.SendMessage(54, "You have granted " + value + " zombie points to " + mobile.RawName + "."); } }); foreach ( ZombieInstance instance in ZombieEvents.Values.Where(instance => instance.Status == ZombieEventStatus.Running)) { instance.init(); } }
public bool HandleAvatarDeath(PlayerZombieProfile profile, Mobile lastkiller) { ZombieAvatar avatar = profile.ZombieAvatar; profile.Deaths++; if (lastkiller is ZombieAvatar) { var enemyavatar = lastkiller as ZombieAvatar; if (enemyavatar.Owner != null) { PlayerZombieProfile enemyprofile = ZombieEvent.EnsureProfile(enemyavatar.Owner); enemyprofile.Kills++; } } Effects.SendIndividualFlashEffect(avatar, FlashType.LightFlash); avatar.DropHolding(); var corpse = CreatePlayerCorpse(avatar) as Corpse; if (corpse != null) { Effects.PlaySound(avatar, avatar.Map, avatar.GetDeathSound()); ZombieEvent.ZombieDeathAnim(avatar, corpse); corpse.MoveToWorld(avatar.Location, Map.ZombieLand); } avatar.MoveToWorld(GetRandomLocation(), Map.ZombieLand); if (avatar.Backpack != null) { avatar.EquipItem(new Dagger {Speed = 1}); avatar.Backpack.DropItem(new Bandage(7)); ZombieEvent.RandomClothing(avatar); } avatar.Hits = avatar.HitsMax; avatar.Stam = avatar.StamMax; avatar.Poison = null; return false; }
public void LeaveZombieInstance(PlayerZombieProfile profile) { if (profile.LeaveEventTimer == null || !profile.LeaveEventTimer.Running) { profile.ZombieAvatar.SendMessage(54, "You will log out in one minute. Your location and items wil be saved upon a successful logout."); profile.LeaveEventTimer = Timer.DelayCall(TimeSpan.FromMinutes(1), () => { profile.Active = false; profile.ZombieSavePoint = profile.ZombieAvatar.Location; profile.ZombieAvatar.SendMessage(54, "You have successfully logged out of the Zombie Event. Your location and items have been saved. You will now be disconnected."); profile.ZombieAvatar.Blessed = true; profile.ZombieAvatar.Hidden = true; profile.ZombieAvatar.IgnoreMobiles = true; profile.ZombieAvatar.CantWalk = true; if (profile.ZombieAvatar.NetState != null) profile.ZombieAvatar.NetState.Dispose(); }); } }