Beispiel #1
0
        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;
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
            }
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
 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;
 }
Beispiel #6
0
 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;
 }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        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;
        }
Beispiel #9
0
 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;
        }
Beispiel #11
0
        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();
         });
     }
 }