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); } }
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(); }
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); }
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(); }