public SaveResult InsertOrUpdate(ref MinilandObjectDTO obj) { try { using (OpenNosContext context = DataAccessHelper.CreateContext()) { long id = obj.MinilandObjectId; MinilandObject entity = context.MinilandObject.FirstOrDefault(c => c.MinilandObjectId.Equals(id)); if (entity == null) { obj = Insert(obj, context); return(SaveResult.Inserted); } obj.MinilandObjectId = entity.MinilandObjectId; obj = Update(entity, obj, context); return(SaveResult.Updated); } } catch (Exception e) { Logger.Error(e); return(SaveResult.Error); } }
public void MinilandRemoveObject(RmvobjPacket packet) { ItemInstance minilandobject = Session.Character.Inventory.LoadBySlotAndType <ItemInstance>(packet.Slot, InventoryType.Miniland); if (minilandobject != null) { if (Session.Character.MinilandState == MinilandState.LOCK) { MinilandObject mo = Session.Character.MinilandObjects.FirstOrDefault(s => s.ItemInstanceId == minilandobject.Id); if (mo != null) { if (minilandobject.Item.IsMinilandObject) { Session.Character.WareHouseSize = 0; } Session.Character.MinilandObjects.Remove(mo); Session.SendPacket(mo.GenerateMinilandEffect(true)); Session.SendPacket(Session.Character.GenerateMinilandPoint()); Session.SendPacket(mo.GenerateMinilandObject(true)); } } else { Session.SendPacket(UserInterfaceHelper.Instance.GenerateMsg(Language.Instance.GetMessageFromKey("MINILAND_NEED_LOCK"), 0)); } } }
private void ExecuteHandler(ClientSession session) { ItemInstance minilandobject = session.Character.Inventory.LoadBySlotAndType <ItemInstance>(Slot, InventoryType.Miniland); if (minilandobject != null) { if (session.Character.MinilandState == MinilandState.Lock) { MinilandObject minilandObject = session.Character.MinilandObjects.Find(s => s.ItemInstanceId == minilandobject.Id); if (minilandObject != null) { if (minilandobject.Item.IsMinilandObject) { session.Character.WareHouseSize = 0; } session.Character.MinilandObjects.Remove(minilandObject); session.SendPacket(minilandObject.GenerateMinilandEffect(true)); session.SendPacket(session.Character.GenerateMinilandPoint()); session.SendPacket(minilandObject.GenerateMinilandObject(true)); } } else { session.SendPacket( UserInterfaceHelper.GenerateMsg(Language.Instance.GetMessageFromKey("MINILAND_NEED_LOCK"), 0)); } } }
private void ExecuteHandler(ClientSession session) { ClientSession client = ServerManager.Instance.Sessions.FirstOrDefault(s => s.Character?.Miniland == session.Character.MapInstance); ItemInstance minilandObjectItem = client?.Character.Inventory.LoadBySlotAndType <ItemInstance>(Slot, InventoryType.Miniland); if (minilandObjectItem != null) { MinilandObject minilandObject = client.Character.MinilandObjects.Find(s => s.ItemInstanceId == minilandObjectItem.Id); if (minilandObject != null) { if (!minilandObjectItem.Item.IsMinilandObject) { byte game = (byte)(minilandObject.ItemInstance.Item.EquipmentSlot == 0 ? 4 + (minilandObject.ItemInstance.ItemVNum % 10) : (int)minilandObject.ItemInstance.Item.EquipmentSlot / 3); const bool full = false; session.SendPacket( $"mlo_info {(client == session ? 1 : 0)} {minilandObjectItem.ItemVNum} {Slot} {session.Character.MinilandPoint} {(minilandObjectItem.DurabilityPoint < 1000 ? 1 : 0)} {(full ? 1 : 0)} 0 {SharedMinilandMethods.GetMinilandMaxPoint(game)[0]} {SharedMinilandMethods.GetMinilandMaxPoint(game)[0] + 1} {SharedMinilandMethods.GetMinilandMaxPoint(game)[1]} {SharedMinilandMethods.GetMinilandMaxPoint(game)[1] + 1} {SharedMinilandMethods.GetMinilandMaxPoint(game)[2]} {SharedMinilandMethods.GetMinilandMaxPoint(game)[2] + 2} {SharedMinilandMethods.GetMinilandMaxPoint(game)[3]} {SharedMinilandMethods.GetMinilandMaxPoint(game)[3] + 1} {SharedMinilandMethods.GetMinilandMaxPoint(game)[4]} {SharedMinilandMethods.GetMinilandMaxPoint(game)[4] + 1} {SharedMinilandMethods.GetMinilandMaxPoint(game)[5]}"); } else { session.SendPacket(session.Character.GenerateStashAll()); } } } }
private static MinilandObjectDTO Update(MinilandObject entity, MinilandObjectDTO respawn, OpenNosContext context) { if (entity != null) { Mapper.Mappers.MinilandObjectMapper.ToMinilandObject(respawn, entity); context.SaveChanges(); } if (Mapper.Mappers.MinilandObjectMapper.ToMinilandObjectDTO(entity, respawn)) { return(respawn); } return(null); }
protected override void Handle(Client client, MlObjLstPacket packet) { Character character = client.Character; var miniland = character.Map as Miniland; if (miniland == null) { _logger.Info("Not in miniland"); return; } miniland.Objects.Clear(); string[] minilandObjects = packet.Content.Split(' '); foreach (string obj in minilandObjects) { string[] objectInfo = obj.Split('.'); int slot = Convert.ToInt32(objectInfo[0]); bool used = objectInfo[1] == "1"; if (!used) { _logger.Info($"Miniland object {slot} is not used, skipping."); continue; } ItemInstance itemInstance = character.Inventory.Miniland.GetValueOrDefault(slot); if (itemInstance == null) { _logger.Info($"No miniland object found in inventory at slot {slot}"); continue; } var position = new Position(Convert.ToInt16(objectInfo[2]), Convert.ToInt16(objectInfo[3])); MinilandObject minilandObject = _minilandObjectFactory.CreateMinilandObject(itemInstance.Item, slot, position); if (minilandObject == null) { _logger.Debug("Not a miniland object"); continue; } miniland.Objects.Add(minilandObject); } }
public static bool ToMinilandObjectDTO(MinilandObject input, MinilandObjectDTO output) { if (input == null) { return(false); } output.CharacterId = input.CharacterId; output.ItemInstanceId = input.ItemInstanceId; output.Level1BoxAmount = input.Level1BoxAmount; output.Level2BoxAmount = input.Level2BoxAmount; output.Level3BoxAmount = input.Level3BoxAmount; output.Level4BoxAmount = input.Level4BoxAmount; output.Level5BoxAmount = input.Level5BoxAmount; output.MapX = input.MapX; output.MapY = input.MapY; output.MinilandObjectId = input.MinilandObjectId; return(true); }
private static MinilandObjectDTO Insert(MinilandObjectDTO obj, OpenNosContext context) { try { MinilandObject entity = new MinilandObject(); Mapper.Mappers.MinilandObjectMapper.ToMinilandObject(obj, entity); context.MinilandObject.Add(entity); context.SaveChanges(); if (Mapper.Mappers.MinilandObjectMapper.ToMinilandObjectDTO(entity, obj)) { return(obj); } return(null); } catch (Exception e) { Logger.Error(e); return(null); } }
public DeleteResult DeleteById(long id) { try { using (OpenNosContext context = DataAccessHelper.CreateContext()) { MinilandObject item = context.MinilandObject.First(i => i.MinilandObjectId.Equals(id)); if (item != null) { context.MinilandObject.Remove(item); context.SaveChanges(); } return(DeleteResult.Deleted); } } catch (Exception e) { Logger.Error(e); return(DeleteResult.Error); } }
public void UseMinilandObject(UseobjPacket packet) { ClientSession client = ServerManager.Instance.Sessions.FirstOrDefault(s => s.Character?.Miniland == Session.Character.MapInstance); ItemInstance minilandobject = client?.Character.Inventory.LoadBySlotAndType <ItemInstance>(packet.Slot, InventoryType.Miniland); if (minilandobject != null) { MinilandObject mlobj = client.Character.MinilandObjects.FirstOrDefault(s => s.ItemInstanceId == minilandobject.Id); if (mlobj != null) { if (!minilandobject.Item.IsMinilandObject) { byte game = (byte)(mlobj.ItemInstance.Item.EquipmentSlot == 0 ? 4 + mlobj.ItemInstance.ItemVNum % 10 : (int)mlobj.ItemInstance.Item.EquipmentSlot / 3); bool full = false; Session.SendPacket($"mlo_info {(client == Session ? 1 : 0)} {minilandobject.ItemVNum} {packet.Slot} {Session.Character.MinilandPoint} {(minilandobject.DurabilityPoint < 1000 ? 1 : 0)} {(full ? 1 : 0)} 0 {GetMinilandMaxPoint(game)[0]} {GetMinilandMaxPoint(game)[0] + 1} {GetMinilandMaxPoint(game)[1]} {GetMinilandMaxPoint(game)[1] + 1} {GetMinilandMaxPoint(game)[2]} {GetMinilandMaxPoint(game)[2] + 2} {GetMinilandMaxPoint(game)[3]} {GetMinilandMaxPoint(game)[3] + 1} {GetMinilandMaxPoint(game)[4]} {GetMinilandMaxPoint(game)[4] + 1} {GetMinilandMaxPoint(game)[5]}"); } else { Session.SendPacket(Session.Character.GenerateStashAll()); } } } }
private void ExecuteHandler(ClientSession session) { ItemInstance minilandobject = session.Character.Inventory.LoadBySlotAndType <ItemInstance>(Slot, InventoryType.Miniland); if (minilandobject != null) { if (session.Character.MinilandObjects.All(s => s.ItemInstanceId != minilandobject.Id)) { if (session.Character.MinilandState == MinilandState.Lock) { MinilandObject minilandobj = new MinilandObject { CharacterId = session.Character.CharacterId, ItemInstance = minilandobject, ItemInstanceId = minilandobject.Id, MapX = PositionX, MapY = PositionY, Level1BoxAmount = 0, Level2BoxAmount = 0, Level3BoxAmount = 0, Level4BoxAmount = 0, Level5BoxAmount = 0 }; if (minilandobject.Item.ItemType == ItemType.House) { switch (minilandobject.Item.ItemSubType) { case 2: minilandobj.MapX = 31; minilandobj.MapY = 3; break; case 0: minilandobj.MapX = 24; minilandobj.MapY = 7; break; case 1: minilandobj.MapX = 21; minilandobj.MapY = 4; break; } MinilandObject min = session.Character.MinilandObjects.Find(s => s.ItemInstance.Item.ItemType == ItemType.House && s.ItemInstance.Item.ItemSubType == minilandobject.Item.ItemSubType); if (min != null) { MinilandRemoveObject.HandlePacket(session, $"1 rmobj {Slot}"); } } if (minilandobject.Item.IsMinilandObject) { session.Character.WareHouseSize = minilandobject.Item.MinilandObjectPoint; } session.Character.MinilandObjects.Add(minilandobj); session.SendPacket(minilandobj.GenerateMinilandEffect(false)); session.SendPacket(session.Character.GenerateMinilandPoint()); session.SendPacket(minilandobj.GenerateMinilandObject(false)); } else { session.SendPacket( UserInterfaceHelper.GenerateMsg(Language.Instance.GetMessageFromKey("MINILAND_NEED_LOCK"), 0)); } } else { session.SendPacket( UserInterfaceHelper.GenerateMsg( Language.Instance.GetMessageFromKey("ALREADY_THIS_MINILANDOBJECT"), 0)); } } }
private void ExecuteHandler(ClientSession session) { ClientSession client = ServerManager.Instance.Sessions.FirstOrDefault(s => s.Character?.Miniland == session.Character.MapInstance); MinilandObject mlobj = client?.Character.MinilandObjects.Find(s => s.ItemInstance.ItemVNum == MinigameVNum); if (mlobj != null) { const bool full = false; byte game = (byte)(mlobj.ItemInstance.Item.EquipmentSlot); switch (Type) { //play case 1: if (mlobj.ItemInstance.DurabilityPoint <= 0) { session.SendPacket(UserInterfaceHelper.GenerateMsg( Language.Instance.GetMessageFromKey("NOT_ENOUGH_DURABILITY_POINT"), 0)); return; } if (session.Character.MinilandPoint <= 0) { session.SendPacket( $"qna #mg^1^7^3125^1^1 {Language.Instance.GetMessageFromKey("NOT_ENOUGH_MINILAND_POINT")}"); } session.Character.MapInstance.Broadcast( UserInterfaceHelper.GenerateGuri(2, 1, session.Character.CharacterId)); session.Character.CurrentMinigame = (short)(game == 0 ? 5102 : game == 1 ? 5103 : game == 2 ? 5105 : game == 3 ? 5104 : game == 4 ? 5113 : 5112); session.Character.MinigameLog = new MinigameLogDTO { CharacterId = session.Character.CharacterId, StartTime = DateTime.UtcNow.Ticks, Minigame = game }; session.SendPacket($"mlo_st {game}"); break; //stop case 2: session.Character.CurrentMinigame = 0; session.Character.MapInstance.Broadcast( UserInterfaceHelper.GenerateGuri(6, 1, session.Character.CharacterId)); break; case 3: session.Character.CurrentMinigame = 0; session.Character.MapInstance.Broadcast( UserInterfaceHelper.GenerateGuri(6, 1, session.Character.CharacterId)); if (Point.HasValue && session.Character.MinigameLog != null) { session.Character.MinigameLog.EndTime = DateTime.UtcNow.Ticks; session.Character.MinigameLog.Score = Point.Value; int level = -1; for (short i = 0; i < SharedMinilandMethods.GetMinilandMaxPoint(game).Length; i++) { if (Point.Value > SharedMinilandMethods.GetMinilandMaxPoint(game)[i]) { level = i; } else { break; } } session.SendPacket(level != -1 ? $"mlo_lv {level}" : $"mg 3 {game} {MinigameVNum} 0 0"); } break; // select gift case 4: if (session.Character.MinilandPoint >= 100 && session.Character.MinigameLog != null && Point.HasValue && Point.Value > 0 && SharedMinilandMethods.GetMinilandMaxPoint(game)[Point.Value - 1] < session.Character.MinigameLog.Score) { MinigameLogDTO dto = session.Character.MinigameLog; DAOFactory.MinigameLogDAO.InsertOrUpdate(ref dto); session.Character.MinigameLog = null; Gift obj = SharedMinilandMethods.GetMinilandGift(MinigameVNum, Point.Value); if (obj != null) { session.SendPacket($"mlo_rw {obj.VNum} {obj.Amount}"); session.SendPacket(session.Character.GenerateMinilandPoint()); List <ItemInstance> inv = session.Character.Inventory.AddNewToInventory(obj.VNum, obj.Amount); session.Character.MinilandPoint -= 100; if (inv.Count == 0) { session.Character.SendGift(session.Character.CharacterId, obj.VNum, obj.Amount, 0, 0, false); } if (client != session) { switch (Point.Value) { case 0: mlobj.Level1BoxAmount++; break; case 1: mlobj.Level2BoxAmount++; break; case 2: mlobj.Level3BoxAmount++; break; case 3: mlobj.Level4BoxAmount++; break; case 4: mlobj.Level5BoxAmount++; break; } } } } break; case 5: session.SendPacket(session.Character.GenerateMloMg(mlobj, MinigameVNum)); break; //refill case 6: if (!Point.HasValue || Point.Value < 0) { return; } if (session.Character.Gold > Point) { session.Character.Gold -= Point.Value; session.SendPacket(session.Character.GenerateGold()); mlobj.ItemInstance.DurabilityPoint += Point.Value / 100; session.SendPacket(UserInterfaceHelper.GenerateInfo( string.Format(Language.Instance.GetMessageFromKey("REFILL_MINIGAME"), Point.Value / 100))); session.SendPacket(session.Character.GenerateMloMg(mlobj, MinigameVNum)); } break; //gift case 7: session.SendPacket( $"mlo_pmg {MinigameVNum} {session.Character.MinilandPoint} {(mlobj.ItemInstance.DurabilityPoint < 1000 ? 1 : 0)} {(full ? 1 : 0)} {(mlobj.Level1BoxAmount > 0 ? $"392 {mlobj.Level1BoxAmount}" : "0 0")} {(mlobj.Level2BoxAmount > 0 ? $"393 {mlobj.Level2BoxAmount}" : "0 0")} {(mlobj.Level3BoxAmount > 0 ? $"394 {mlobj.Level3BoxAmount}" : "0 0")} {(mlobj.Level4BoxAmount > 0 ? $"395 {mlobj.Level4BoxAmount}" : "0 0")} {(mlobj.Level5BoxAmount > 0 ? $"396 {mlobj.Level5BoxAmount}" : "0 0")} 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"); break; //get gift case 8: if (!Point.HasValue) { return; } int amount = 0; switch (Point.Value) { case 0: amount = mlobj.Level1BoxAmount; break; case 1: amount = mlobj.Level2BoxAmount; break; case 2: amount = mlobj.Level3BoxAmount; break; case 3: amount = mlobj.Level4BoxAmount; break; case 4: amount = mlobj.Level5BoxAmount; break; } List <Gift> gifts = new List <Gift>(); for (int i = 0; i < amount; i++) { Gift gift = SharedMinilandMethods.GetMinilandGift(MinigameVNum, Point.Value); if (gift != null) { if (gifts.Any(o => o.VNum == gift.VNum)) { gifts.First(o => o.Amount == gift.Amount).Amount += gift.Amount; } else { gifts.Add(gift); } } } string str = string.Empty; for (int i = 0; i < 9; i++) { if (gifts.Count > i) { short itemVNum = gifts[i].VNum; byte itemAmount = gifts[i].Amount; List <ItemInstance> inv = session.Character.Inventory.AddNewToInventory(itemVNum, itemAmount); if (inv.Count > 0) { session.SendPacket(session.Character.GenerateSay( $"{Language.Instance.GetMessageFromKey("ITEM_ACQUIRED")}: {ServerManager.GetItem(itemVNum).Name} x {itemAmount}", 12)); } else { session.Character.SendGift(session.Character.CharacterId, itemVNum, itemAmount, 0, 0, false); } str += $" {itemVNum} {itemAmount}"; } else { str += " 0 0"; } } session.SendPacket( $"mlo_pmg {MinigameVNum} {session.Character.MinilandPoint} {(mlobj.ItemInstance.DurabilityPoint < 1000 ? 1 : 0)} {(full ? 1 : 0)} {(mlobj.Level1BoxAmount > 0 ? $"392 {mlobj.Level1BoxAmount}" : "0 0")} {(mlobj.Level2BoxAmount > 0 ? $"393 {mlobj.Level2BoxAmount}" : "0 0")} {(mlobj.Level3BoxAmount > 0 ? $"394 {mlobj.Level3BoxAmount}" : "0 0")} {(mlobj.Level4BoxAmount > 0 ? $"395 {mlobj.Level4BoxAmount}" : "0 0")} {(mlobj.Level5BoxAmount > 0 ? $"396 {mlobj.Level5BoxAmount}" : "0 0")}{str}"); break; //coupon case 9: List <ItemInstance> items = session.Character.Inventory .Where(s => s.ItemVNum == 1269 || s.ItemVNum == 1271).OrderBy(s => s.Slot).ToList(); if (items.Count > 0) { short itemVNum = items[0].ItemVNum; session.Character.Inventory.RemoveItemAmount(itemVNum); int point = itemVNum == 1269 ? 300 : 500; mlobj.ItemInstance.DurabilityPoint += point; session.SendPacket(UserInterfaceHelper.GenerateInfo( string.Format(Language.Instance.GetMessageFromKey("REFILL_MINIGAME"), point))); session.SendPacket(session.Character.GenerateMloMg(mlobj, MinigameVNum)); } break; } } }
public void MinigamePlay(MinigamePacket packet) { ClientSession client = ServerManager.Instance.Sessions.FirstOrDefault(s => s.Character?.Miniland == Session.Character.MapInstance); MinilandObject mlobj = client?.Character.MinilandObjects.FirstOrDefault(s => s.ItemInstance.ItemVNum == packet.MinigameVNum); if (mlobj != null) { bool full = false; byte game = (byte)(mlobj.ItemInstance.Item.EquipmentSlot == 0 ? 4 + mlobj.ItemInstance.ItemVNum % 10 : (int)mlobj.ItemInstance.Item.EquipmentSlot / 3); switch (packet.Type) { //play case 1: if (mlobj.ItemInstance.DurabilityPoint <= 0) { Session.SendPacket(UserInterfaceHelper.Instance.GenerateMsg(Language.Instance.GetMessageFromKey("NOT_ENOUGH_DURABILITY_POINT"), 0)); return; } if (Session.Character.MinilandPoint <= 0) { Session.SendPacket($"qna #mg^1^7^3125^1^1 {Language.Instance.GetMessageFromKey("NOT_ENOUGH_MINILAND_POINT")}"); } Session.Character.MapInstance.Broadcast(UserInterfaceHelper.Instance.GenerateGuri(2, 1, Session.Character.CharacterId)); Session.Character.CurrentMinigame = (short)(game == 0 ? 5102 : game == 1 ? 5103 : game == 2 ? 5105 : game == 3 ? 5104 : game == 4 ? 5113 : 5112); Session.SendPacket($"mlo_st {game}"); break; //stop case 2: Session.Character.CurrentMinigame = 0; Session.Character.MapInstance.Broadcast(UserInterfaceHelper.Instance.GenerateGuri(6, 1, Session.Character.CharacterId)); break; case 3: Session.Character.CurrentMinigame = 0; Session.Character.MapInstance.Broadcast(UserInterfaceHelper.Instance.GenerateGuri(6, 1, Session.Character.CharacterId)); int Level = -1; for (short i = 0; i < GetMinilandMaxPoint(game).Count(); i++) { if (packet.Point > GetMinilandMaxPoint(game)[i]) { Level = i; } else { break; } } Session.SendPacket(Level != -1 ? $"mlo_lv {Level}" : $"mg 3 {game} {packet.MinigameVNum} 0 0"); break; // select gift case 4: if (Session.Character.MinilandPoint >= 100) { Gift obj = GetMinilandGift(packet.MinigameVNum, (int)packet.Point); if (obj != null) { Session.SendPacket($"mlo_rw {obj.VNum} {obj.Amount}"); Session.SendPacket(Session.Character.GenerateMinilandPoint()); List <ItemInstance> inv = Session.Character.Inventory.AddNewToInventory(obj.VNum, obj.Amount); Session.Character.MinilandPoint -= 100; if (!inv.Any()) { Session.Character.SendGift(Session.Character.CharacterId, obj.VNum, obj.Amount, 0, 0, false); } if (client != Session) { switch (packet.Point) { case 0: mlobj.Level1BoxAmount++; break; case 1: mlobj.Level2BoxAmount++; break; case 2: mlobj.Level3BoxAmount++; break; case 3: mlobj.Level4BoxAmount++; break; case 4: mlobj.Level5BoxAmount++; break; } } } } break; case 5: Session.SendPacket(Session.Character.GenerateMloMg(mlobj, packet)); break; //refill case 6: if (packet.Point == null) { return; } if (Session.Character.Gold > packet.Point) { Session.Character.Gold -= (int)packet.Point; Session.SendPacket(Session.Character.GenerateGold()); mlobj.ItemInstance.DurabilityPoint += (int)(packet.Point / 100); Session.SendPacket(UserInterfaceHelper.Instance.GenerateInfo(Language.Instance.GetMessageFromKey(string.Format("REFILL_MINIGAME", (int)packet.Point / 100)))); Session.SendPacket(Session.Character.GenerateMloMg(mlobj, packet)); } break; //gift case 7: Session.SendPacket($"mlo_pmg {packet.MinigameVNum} {Session.Character.MinilandPoint} {(mlobj.ItemInstance.DurabilityPoint < 1000 ? 1 : 0)} {(full ? 1 : 0)} {(mlobj.Level1BoxAmount > 0 ? $"392 {mlobj.Level1BoxAmount}" : "0 0")} {(mlobj.Level2BoxAmount > 0 ? $"393 {mlobj.Level2BoxAmount}" : "0 0")} {(mlobj.Level3BoxAmount > 0 ? $"394 {mlobj.Level3BoxAmount}" : "0 0")} {(mlobj.Level4BoxAmount > 0 ? $"395 {mlobj.Level4BoxAmount}" : "0 0")} {(mlobj.Level5BoxAmount > 0 ? $"396 {mlobj.Level5BoxAmount}" : "0 0")} 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"); break; //get gift case 8: int amount = 0; switch (packet.Point) { case 0: amount = mlobj.Level1BoxAmount; break; case 1: amount = mlobj.Level2BoxAmount; break; case 2: amount = mlobj.Level3BoxAmount; break; case 3: amount = mlobj.Level4BoxAmount; break; case 4: amount = mlobj.Level5BoxAmount; break; } List <Gift> objlst = new List <Gift>(); for (int i = 0; i < amount; i++) { Gift s = GetMinilandGift(packet.MinigameVNum, (int)packet.Point); if (s != null) { if (objlst.Any(o => o.VNum == s.VNum)) { objlst.First(o => o.Amount == s.Amount).Amount += s.Amount; } else { objlst.Add(s); } } } string str = string.Empty; for (int i = 0; i < 9; i++) { if (objlst.Count > i) { List <ItemInstance> inv = Session.Character.Inventory.AddNewToInventory(objlst.ElementAt(i).VNum, objlst.ElementAt(i).Amount); if (inv.Any()) { Session.SendPacket(Session.Character.GenerateSay($"{Language.Instance.GetMessageFromKey("ITEM_ACQUIRED")}: {ServerManager.Instance.GetItem(objlst.ElementAt(i).VNum).Name} x {objlst.ElementAt(i).Amount}", 12)); } else { Session.Character.SendGift(Session.Character.CharacterId, objlst.ElementAt(i).VNum, objlst.ElementAt(i).Amount, 0, 0, false); } str += $" {objlst.ElementAt(i).VNum} {objlst.ElementAt(i).Amount}"; } else { str += " 0 0"; } } Session.SendPacket($"mlo_pmg {packet.MinigameVNum} {Session.Character.MinilandPoint} {(mlobj.ItemInstance.DurabilityPoint < 1000 ? 1 : 0)} {(full ? 1 : 0)} {(mlobj.Level1BoxAmount > 0 ? $"392 {mlobj.Level1BoxAmount}" : "0 0")} {(mlobj.Level2BoxAmount > 0 ? $"393 {mlobj.Level2BoxAmount}" : "0 0")} {(mlobj.Level3BoxAmount > 0 ? $"394 {mlobj.Level3BoxAmount}" : "0 0")} {(mlobj.Level4BoxAmount > 0 ? $"395 {mlobj.Level4BoxAmount}" : "0 0")} {(mlobj.Level5BoxAmount > 0 ? $"396 {mlobj.Level5BoxAmount}" : "0 0")}{str}"); break; //coupon case 9: List <ItemInstance> items = Session.Character.Inventory.GetAllItems().Where(s => s.ItemVNum == 1269 || s.ItemVNum == 1271).OrderBy(s => s.Slot).ToList(); if (items.Count > 0) { Session.Character.Inventory.RemoveItemAmount(items.ElementAt(0).ItemVNum); int point = items.ElementAt(0).ItemVNum == 1269 ? 300 : 500; mlobj.ItemInstance.DurabilityPoint += point; Session.SendPacket(UserInterfaceHelper.Instance.GenerateInfo(Language.Instance.GetMessageFromKey(string.Format("REFILL_MINIGAME", point)))); Session.SendPacket(Session.Character.GenerateMloMg(mlobj, packet)); } break; } } }
public void MinilandAddObject(AddobjPacket packet) { ItemInstance minilandobject = Session.Character.Inventory.LoadBySlotAndType <ItemInstance>(packet.Slot, InventoryType.Miniland); if (minilandobject != null) { if (Session.Character.MinilandObjects.All(s => s.ItemInstanceId != minilandobject.Id)) { if (Session.Character.MinilandState == MinilandState.LOCK) { MinilandObject mo = new MinilandObject { CharacterId = Session.Character.CharacterId, ItemInstance = minilandobject, ItemInstanceId = minilandobject.Id, MapX = packet.PositionX, MapY = packet.PositionY, Level1BoxAmount = 0, Level2BoxAmount = 0, Level3BoxAmount = 0, Level4BoxAmount = 0, Level5BoxAmount = 0 }; if (minilandobject.Item.ItemType == ItemType.House) { switch (minilandobject.Item.ItemSubType) { case 2: mo.MapX = 31; mo.MapY = 3; break; case 0: mo.MapX = 24; mo.MapY = 7; break; case 1: mo.MapX = 21; mo.MapY = 4; break; } MinilandObject min = Session.Character.MinilandObjects.FirstOrDefault(s => s.ItemInstance.Item.ItemType == ItemType.House && s.ItemInstance.Item.ItemSubType == minilandobject.Item.ItemSubType); if (min != null) { MinilandRemoveObject(new RmvobjPacket { Slot = min.ItemInstance.Slot }); } } if (minilandobject.Item.IsMinilandObject) { Session.Character.WareHouseSize = minilandobject.Item.MinilandObjectPoint; } Session.Character.MinilandObjects.Add(mo); Session.SendPacket(mo.GenerateMinilandEffect(false)); Session.SendPacket(Session.Character.GenerateMinilandPoint()); Session.SendPacket(mo.GenerateMinilandObject(false)); } else { Session.SendPacket(UserInterfaceHelper.Instance.GenerateMsg(Language.Instance.GetMessageFromKey("MINILAND_NEED_LOCK"), 0)); } } else { Session.SendPacket(UserInterfaceHelper.Instance.GenerateMsg(Language.Instance.GetMessageFromKey("ALREADY_THIS_MINILANDOBJECT"), 0)); } } }