Exemplo n.º 1
0
 private static void DeleteItemInHand(Player sender, Player target)
 {
     try
     {
         if (target.ActiveCharacter.ItemInHand == null)
         {
             throw new Exception("Le joueur n'a pas d'objet en main.");
         }
         if (target.ActiveCharacter.ItemInHand is Gun)
         {
             target.ResetWeapons();
         }
         ItemHelper.DeleteItem(target.ActiveCharacter.ItemInHand);
         Chat.AdminChat(sender, "L'objet de la main du joueur " + Constants.Chat.USERNAME + target.ActiveCharacter.Name + Color.White + " a bien été supprimé");
         Chat.ClientChat(target, Constants.Chat.USERNAME + sender.AccountData.Nickname + Color.White + " a supprimé l'objet que vous aviez dans la main.");
     }
     catch (Exception e)
     {
         Chat.ErrorChat(sender, e.Message);
     }
 }
Exemplo n.º 2
0
        private void shutdown(Session session)
        {
            session.WriteLine("Destroying NPC's and their items...");

            // call NonPlayer.Die(true) for every nonplayer object
            foreach (var npc in Server.Current.Database.GetAll <NonPlayer>())
            {
                npc.Die(true);
            }

            session.WriteLine("Destroying items on floor, corpses, etc...");
            foreach (var room in Server.Current.Database.GetAll <Room>())
            {
                foreach (var item in room.Items)
                {
                    ItemHelper.DeleteItem(item.Key);
                    Server.Current.Log(string.Format("deleted item: {0}", item.Key));
                }
            }

            session.WriteLine("Shutting down now.");

            Server.Current.Stop();
        }
Exemplo n.º 3
0
        public CombatRound Die(bool shutdown = false)
        {
            var round = new CombatRound();

            if (!shutdown)
            {
                // create a corpse item with .ContainsItems equal to whatever was held/equipped
                var corpseTemplate = Server.Current.Database.Get <Template>("corpse");
                var dupedCorpse    = Mapper.Map <PlayerItem>(corpseTemplate);
                foreach (var item in Inventory
                         .Select(i => new KeyValuePair <string, string>(i.Key, i.Value))
                         .Union(Equipped.Values.Select(e => new KeyValuePair <string, string>(e.Key, e.Name))))
                {
                    var corpseItem = Server.Current.Database.Get <PlayerItem>(item.Key);
                    dupedCorpse.ContainedItems[corpseItem.Key] = corpseItem.Name;
                }

                dupedCorpse.Name        = string.Format("The corpse of {0}", Name);
                dupedCorpse.Description = string.Format("The corpse of {0}", Name.ToLower());
                dupedCorpse.Keywords    = new List <string>()
                {
                    "corpse", Name
                }.ToArray();
                dupedCorpse.WearLocation = Wearlocation.Corpse;
                dupedCorpse.Gold         = getRandomGold(Gold);

                // put corpse in room
                var room = RoomHelper.GetPlayerRoom(Location);
                room.AddItem(dupedCorpse);
                Console.WriteLine("NEW CORPSE: {0}", dupedCorpse.Key);
                room.CorpseQueue[dupedCorpse.Key] = DateTime.Now.AddMilliseconds(Server.CorpseDecayTime);

                // must cache since we're not saving
                Server.Current.Database.Put(dupedCorpse);

                // delete mob
                room.RemoveNpc(this);
                Server.Current.Database.Delete <NonPlayer>(Key);

                round.AddText(null, string.Format("`R{0} is DEAD!!!", Name), CombatTextType.Room);

                // get area from this.RespawnRoom
                var area = Server.Current.Areas.FirstOrDefault(a => a.Key == room.Area);

                // add to .RepopQueue
                area.RepopQueue.Add(MobTemplateKey);
            }
            else
            {
                // delete inventory/equipped items' .db files
                foreach (var key in Inventory.Keys.Union(Equipped.Values.Select(e => e.Key)))
                {
                    ItemHelper.DeleteItem(key);
                }
            }

            // delete .db file
            Server.Current.Database.Delete <NonPlayer>(Key);

            return(round);
        }
Exemplo n.º 4
0
        private void DoRepop(object sender, ElapsedEventArgs e)
        {
            _timer.Stop();

            foreach (var area in Server.Current.Areas)
            {
                if ((DateTime.Now - area.LastRepop).TotalMilliseconds > area.RepopTime)
                {
                    try
                    {
                        // broadcast repop message to players in area
                        foreach (var roomKey in area.Rooms)
                        {
                            var room = RoomHelper.GetPlayerRoom(roomKey);
                            room.RepopItems();
                            foreach (var player in room.GetPlayers())
                            {
                                player.Send(area.RepopMessage, null);
                            }
                        }


                        foreach (var key in area.RepopQueue.ToArray())
                        {
                            var mob       = Server.Current.Database.Get <MobTemplate>(key);
                            var npc       = Mapper.Map <NonPlayer>(mob);
                            var repopRoom = npc.GetRespawnRoom();
                            npc.Location = repopRoom;
                            RoomHelper.GetPlayerRoom(repopRoom).AddNpc(npc);
                            area.RepopQueue.Remove(key);
                        }

                        area.LastRepop = DateTime.Now;
                    }
                    catch (Exception ex)
                    {
                        var log = string.Format("Respawn Error: {0}", ex.StackTrace);
                        Console.WriteLine(log);
                        Server.Current.Log(LogType.Error, log);
                    }
                }

                // handle corpses
                foreach (var key in area.Rooms)
                {
                    var room = Server.Current.Database.Get <Room>(key);
                    foreach (var corpse in room.CorpseQueue.Where(k => k.Value < DateTime.Now).ToArray())
                    {
                        var corpseItem = Server.Current.Database.Get <PlayerItem>(corpse.Key);

                        room.SendPlayers(string.Format("{0} withers and blows away...", corpseItem.Name), null, null, null);

                        room.CorpseQueue.Remove(corpse.Key);
                        room.Items.Remove(corpse.Key);

                        // delete corpse and all items in it
                        ItemHelper.DeleteItem(corpseItem.Key);
                    }
                }
            }

            // fixme: this is going to get dead/old npc's as well
            foreach (var npc in Server.Current.Database.GetAll <NonPlayer>())
            {
                npc.TalkOrWalk();
            }

            _timer.Start();
        }