public override void Compose(Yupi.Protocol.ISender session, FloorItem item, List <FloorItem> items, int delay, string extraInfo, int unknown) { using (ServerMessage message = Pool.GetMessageBuffer(Id)) { message.AppendBool(false); message.AppendInteger(unknown); message.AppendInteger(items.Count); // TODO Won't work properly. Must implement composer correctly... foreach (FloorItem current in items) { message.AppendInteger(current.Id); } throw new NotImplementedException(); //message.AppendInteger(item.BaseItem.SpriteId); message.AppendInteger(item.Id); message.AppendString(extraInfo); message.AppendInteger(1); message.AppendInteger(delay); message.AppendInteger(1); message.AppendInteger(3); message.AppendInteger(0); message.AppendInteger(0); session.Send(message); } }
public override void Compose(Yupi.Protocol.ISender session, FloorItem item, string extraInfo, int delay, List <FloorItem> list = null) { using (ServerMessage message = Pool.GetMessageBuffer(Id)) { message.AppendBool(false); message.AppendInteger(5); // TODO Probably won't work correctly. Must rewrite the entire composer... if (list == null) { message.AppendInteger(0); } else { message.AppendInteger(list.Count); foreach (FloorItem current in list) { message.AppendInteger(current.Id); } } throw new NotImplementedException(); //message.AppendInteger(item.BaseItem.SpriteId); message.AppendInteger(item.Id); message.AppendString(extraInfo); message.AppendInteger(1); message.AppendInteger(delay); message.AppendInteger(0); message.AppendInteger(20); message.AppendInteger(0); message.AppendInteger(0); session.Send(message); } }
public void AddFloorItem(FloorItem item) { item.id = FloorItems.Count; FloorItems.Add(item); this.CoolerApiEvent(-1, "CreateItem", item, item.id); }
public override void Compose(Yupi.Protocol.ISender session, FloorItem item, List <FloorItem> list, string extraString) { // TODO Won't work properly. Must implement composer correctly... using (ServerMessage message = Pool.GetMessageBuffer(Id)) { message.AppendBool(false); message.AppendInteger(5); if (list == null) { list = new List <FloorItem>(); } message.AppendInteger(list.Count); foreach (FloorItem current20 in list) { message.AppendInteger(current20.Id); } throw new NotImplementedException(); //message.AppendInteger(item.BaseItem.SpriteId); message.AppendInteger(item.Id); message.AppendString(extraString); message.AppendInteger(3); message.AppendInteger(0); message.AppendInteger(0); message.AppendInteger(0); message.AppendInteger(0); message.AppendInteger(0); session.Send(message); } }
private static void AbortJobs(FloorItem drop) { foreach (var job in drop.Jobs) { job.Cancelled = true; } drop.Jobs.Clear(); }
private static void AddCountdown(FloorItem floorItem) { for (var i = 9; i >= 0; i--) { var number = i; floorItem.Jobs.Add(YiScheduler.Instance.DoReturn(TimeSpan.FromSeconds(89 - number), () => floorItem.Countdown(number))); } }
public override void Compose(Yupi.Protocol.ISender session, FloorItem item) { using (ServerMessage message = Pool.GetMessageBuffer(Id)) { throw new NotImplementedException(); //item.Serialize(message); session.Send(message); } }
public MsgMapItem(FloorItem aItem, Action aAction) : base(20) { Id = aItem.Id; Type = aItem.Item.Type; PosX = aItem.X; PosY = aItem.Y; _Action = aAction; }
private void SetLoot(Item drop, GameObject loot) { SpriteRenderer spriteRenderer = loot.GetComponent <SpriteRenderer>(); spriteRenderer.sprite = drop.Icon; FloorItem pickupItem = loot.GetComponent <FloorItem>(); pickupItem.item = drop; }
private void PlantMonsterplant(IRouter router, Yupi.Protocol.ISender session, FloorItem <MonsterPlantBaseItem> mopla, RoomData room) { /* * int rarity = 0, internalRarity; * * if (room == null || mopla == null) * return; * * if ((mopla.GetBaseItem().InteractionType != Interaction.Moplaseed) && * (mopla.GetBaseItem().InteractionType != Interaction.RareMoplaSeed)) * return; * * if (string.IsNullOrEmpty(mopla.ExtraData) || mopla.ExtraData == "0") * rarity = 1; * * if (!string.IsNullOrEmpty(mopla.ExtraData) && mopla.ExtraData != "0") * rarity = int.TryParse(mopla.ExtraData, out internalRarity) ? internalRarity : 1; * * int getX = mopla.X; * int getY = mopla.Y; * * room.GetRoomItemHandler().RemoveFurniture(session, mopla.Id, false); * * Pet pet = CatalogManager.CreatePet(session.GetHabbo().Id, "Monsterplant", "pet_monster", "0", "0", rarity); * * router.GetComposer<SendMonsterplantIdMessageComposer> ().Compose (session, pet.PetId); * * using (IQueryAdapter queryReactor = Yupi.GetDatabaseManager().GetQueryReactor()) { * queryReactor.SetQuery("UPDATE pets_data SET room_id = @room, x = @x, y = @y WHERE id = @id"); * queryReactor.AddParameter("x", getX); * queryReactor.AddParameter("y", getY); * queryReactor.AddParameter("id", pet.PetId); * queryReactor.RunQuery (); * } * * pet.PlacedInRoom = true; * pet.RoomId = room.RoomId; * * RoomBot bot = new RoomBot(pet.PetId, pet.OwnerId, pet.RoomId, AiType.Pet, "freeroam", pet.Name, "", pet.Look, getX, getY, 0.0, 4, null, null, "", 0, ""); * * room.GetRoomUserManager().DeployBot(bot, pet); * * if (pet.DbState != DatabaseUpdateState.NeedsInsert) * pet.DbState = DatabaseUpdateState.NeedsUpdate; * * using (IQueryAdapter queryreactor2 = Yupi.GetDatabaseManager().GetQueryReactor()) * { * queryreactor2.SetQuery("DELETE FROM items_rooms WHERE id = @id"); * queryreactor2.AddParameter("id", mopla.Id); * queryreactor2.RunQuery (); * * room.GetRoomUserManager().SavePets(queryreactor2); * }*/ throw new NotImplementedException(); }
public override void Compose(Yupi.Protocol.ISender session, FloorItem item, int pickerId) { using (ServerMessage message = Pool.GetMessageBuffer(Id)) { message.AppendString(item.Id.ToString()); message.AppendBool(false); //expired message.AppendInteger(pickerId); message.AppendInteger(0); // delay session.Send(message); } }
public override void Compose(Yupi.Protocol.ISender room, FloorItem item) { using (ServerMessage message = Pool.GetMessageBuffer(Id)) { /* * item.Serialize(message); * message.AppendString(room.Data.Owner.Name); */ throw new NotImplementedException(); room.Send(message); } }
private static List <FloorItem> GetFloors(Prepaid.Repositories.IRoomRespository roomRepository, string buildingNo, int floorCount) { List <FloorItem> floors = new List <FloorItem>(); for (int i = 1; i <= floorCount; i++) { FloorItem floor = new FloorItem(); floor.Floor = i; floor.RoomNos = from item in roomRepository.GetAll("", buildingNo, "", i.ToString()) select item.RoomNo; floors.Add(floor); } return(floors); }
public virtual void Drop() { DropInfo DInfo; ItemObject FloorItem; int Rate; for (int I = 0; I < MI.DropList.Count; I++) { DInfo = MI.DropList[I]; Interlocked.Increment(ref DInfo.TotalCount); //for (int S = 0; S < 40; S++) Rate = (int)(DInfo.Rate / Settings.DropRate); if (Rate < 1) { Rate = 1; } if (Envir.Rand.Next(Rate) == 0) { if (DInfo.Group != 0) { List <DropInfo> TempList = MI.DropList.Where(D => D.Group == DInfo.Group && D.TriggerCount < DInfo.TriggerCount).ToList(); if (TempList.Count != 0) { DInfo = TempList[Envir.Rand.Next(TempList.Count)]; } } Interlocked.Increment(ref DInfo.TriggerCount); if (DInfo.Item == MirDB.GoldItem) { if (DInfo.Amount <= 0) { continue; } else { FloorItem = new ItemObject(Envir.Rand.Next(DInfo.Amount / 2, DInfo.Amount + DInfo.Amount / 2), this); } } else { FloorItem = new ItemObject(MirDB.NewItem(DInfo.Item), this); } FloorItem.Drop(); } } }
public static byte[] Create(FloorItem item, MsgFloorItemType type) { var packet = new MsgFloorItem { Size = (ushort)sizeof(MsgFloorItem), Id = 1101, UniqueId = item.UniqueId, X = item.Location.X, Y = item.Location.Y, ItemId = item.Original?.ItemId ?? (int)item.Look, MsgFloorItemType = type, }; return(packet); }
public Model Generate(Model model) { model.generatorData = this.SaveToDict(); GenerateMap(model); GenerateEntities(model); // FloorItem item = (FloorItem)GD.Load<CSharpScript>("res://Crawler/Model/FloorItem.cs").New(); // item.position = (4, 0); // model.AddFloorItem(item); FloorItem item2 = (FloorItem)GD.Load <CSharpScript>("res://Crawler/Model/FloorItem.cs").New(); item2.position = (-16, -7); model.AddFloorItem(item2); return(model); }
public static void Drop(YiObj owner, YiObj dropper, Item drop) { var floorItem = new FloorItem { Original = drop, Owner = owner, MapId = dropper.MapId, DropTime = DateTime.UtcNow, Jobs = new List <Job>() }; floorItem.UniqueId = UniqueIdGenerator.GetNext(EntityType.FloorItem); floorItem.Location.X = dropper.Location.X; floorItem.Location.Y = dropper.Location.Y; QueueDrop(floorItem); }
public List <GameObject> bitchCreats = new List <GameObject>(); //批量创建列表 //批量创建工具 - 给定起点与终点,平铺当前item public void BatchCreat(Vector3Int from, Vector3Int to) { bitchCreats.Clear(); for (int x = from.x; x < to.x; x++) { for (int z = from.z; z < to.z; z++) { GameObject go = Instantiate(gameObject); go.name = gameObject.name + "(" + x + "," + z + ")"; FloorItem item = go.GetComponent <FloorItem>(); item.X = x; item.Z = z; item.ApplyPosFromInput(); bitchCreats.Add(go); } } }
public bool DropItem(Int32 aItemType, Int32 aOwnerId) { if (aItemType == 0) { return(true); } UInt16 x = X, y = Y; if (Map.FindFloorItemCell(ref x, ref y, 2)) // TODO MONSTERDROPITEM_RANGE { UInt16 dura = ItemHandler.GetMaxDura(aItemType); Item item = Item.Create(0, 254, aItemType, 0, 0, 0, 0, 0, 2, 0, dura, dura); FloorItem floorItem = new FloorItem(item, 0, aOwnerId, Map, x, y); World.FloorThread.AddToQueue(floorItem); } return(true); }
private static void QueueDrop(FloorItem drop) { YiScheduler.Instance.Do(SchedulerPriority.Medium, () => { for (var i = 0; i < 10; i++) { if (!GameWorld.Maps[drop.MapId].ItemValid(drop.Location.X, drop.Location.Y)) { drop.Location.X += (ushort)YiCore.Random.Next(-1, 2); drop.Location.Y += (ushort)YiCore.Random.Next(-1, 2); } else { AddCountdown(drop); ScheduleDestruction(drop); ScheduleOwnerRemove(drop); ScreenSystem.Create(drop); FloorItems.AddOrUpdate(drop.UniqueId, drop); GameWorld.Maps[drop.MapId].Enter(drop); if (drop.Original != null && drop.Owner is Player player) { var packet = MsgItem.Create(drop.Original.UniqueId, drop.Original.UniqueId, drop.Original.UniqueId, MsgItemType.RemoveInventory); player.Send(packet); } ScreenSystem.Send(drop, MsgFloorItem.Create(drop, MsgFloorItemType.Create), true); drop.AddStatusEffect(StatusEffect.SuperMan); return; } } if (drop.Original != null && drop.Owner is Player owner) { owner.Inventory.AddOrUpdate(drop.Original.UniqueId, drop.Original); owner.Send(new MsgItemInformation(drop.Original, MsgItemPosition.Inventory)); } else { drop.Owner.Money += drop.Amount; } }); }
public static void DropMoney(YiObj owner, YiObj dropper, int amount) { var floorItem = new FloorItem { Original = Item.Factory.CreateMoney(amount), Owner = owner is Player ? owner : null, MapId = dropper.MapId, Amount = amount, DropTime = DateTime.UtcNow, Jobs = new List <Job>() }; if (floorItem.Amount > 0 && dropper is Player powner) { powner.Money -= floorItem.Amount; } floorItem.UniqueId = UniqueIdGenerator.GetNext(EntityType.FloorItem); floorItem.Location.X = dropper.Location.X; floorItem.Location.Y = dropper.Location.Y; QueueDrop(floorItem); }
/// <summary> /// The task of the worker thread. It will destroy floor items. /// </summary> private static void Process(Object aSender) { ItemDestroyer thread = (aSender as ItemDestroyer); BlockingCollection <FloorItem> queue = thread.mQueue; while (!Program.Exiting || queue.Count == 0) { FloorItem item = queue.Take(); if (item == null) { continue; } if (item.Destroyed) { continue; } while (!item.Destroyed && (DateTime.UtcNow - item.DroppedTime).TotalSeconds < 30) { Thread.Sleep(100); } try { if (!item.Destroyed) { item.Destroy(true); } } catch (Exception exc) { sLogger.Error("Something wrong happened while destroying an item !\nException: {0}", exc); } } }
private static void ScheduleOwnerRemove(FloorItem floorItem) => floorItem.Jobs.Add(YiScheduler.Instance.DoReturn(TimeSpan.FromSeconds(30), () => floorItem.Owner = null));
/// <summary> /// Process the message for the specified client. /// </summary> /// <param name="aClient">The client who sent the message.</param> public override void Process(Client aClient) { if (aClient == null) { return; } switch (_Action) { case Action.Pick: { if (!World.AllFloorItems.ContainsKey(Id)) { return; } FloorItem floorItem = World.AllFloorItems[Id]; Player player = aClient.Player; if (floorItem.X != PosX || floorItem.Y != PosY) { return; } if (MyMath.GetDistance(player.X, player.Y, PosX, PosY) > 0) { player.SendSysMsg(StrRes.STR_FAR_CANNOT_PICK); return; } if (!player.IsAlive()) { return; } if (floorItem.Money == 0 && player.ItemInInventory() >= 40) { player.SendSysMsg(StrRes.STR_FULL_CANNOT_PICK); return; } if (floorItem.OwnerUID != 0) { if (floorItem.OwnerUID != player.UniqId) { if ((DateTime.UtcNow - floorItem.DroppedTime).TotalSeconds < 10) { if (player.Team != null && player.Team.IsTeamMember(floorItem.OwnerUID)) { if (floorItem.Money > 0 && player.Team.MoneyForbidden) { player.SendSysMsg(StrRes.STR_OTHERS_ITEM); return; } else { if (player.Team.ItemForbidden) { player.SendSysMsg(StrRes.STR_OTHERS_ITEM); return; } else if (floorItem.Item.Type == 1088000 || floorItem.Item.Type == 1088001) //DB || Met { player.SendSysMsg(StrRes.STR_OTHERS_ITEM); return; } } } else { player.SendSysMsg(StrRes.STR_OTHERS_ITEM); return; } } } } if (floorItem.Money > 0) { if (player.Money + floorItem.Money > Player._MAX_MONEYLIMIT) { player.SendSysMsg(StrRes.STR_TOOMUCH_MONEY); return; } player.Money += floorItem.Money; player.Send(new MsgUserAttrib(player, player.Money, MsgUserAttrib.AttributeType.Money)); if (floorItem.Money > 1000) { player.Send(new Msg1029(floorItem.Money)); World.BroadcastRoomMsg(player, new MsgAction(player, floorItem.Money, MsgAction.Action.GetMoney), true); } player.SendSysMsg(StrRes.STR_PICK_MONEY, floorItem.Money); } else { player.AddItem(floorItem.Item, true); player.SendSysMsg(StrRes.STR_GOT_ITEM, floorItem.Item.Name); floorItem.Item.Save(); } World.BroadcastRoomMsg(player, this, false); floorItem.Destroy(floorItem.Money > 0); break; } default: { sLogger.Error("Action {0} is not implemented for MsgMapItem.", (UInt32)_Action); break; } } }
private void Drop(Int32 KillerUID) { // TODO Type == 1 and Id != 7006 if (this.AIType != (Byte)AI_Type.Normal && this.Id != 7006) { return; } Player Killer = null; World.AllPlayers.TryGetValue(KillerUID, out Killer); Double Bonus = 1.0; if (Killer != null && Killer.LuckyTime > 0) { Bonus = 1.2; } //Money Drop if (DropMoney != 0 && MyMath.Success(50)) { UInt32 Money = 0; SByte DropTimes = 1; if (MyMath.Success(50)) { DropTimes = (SByte)MyMath.Generate(1, 3); } for (SByte i = 0; i < DropTimes; i++) { Money = (UInt32)MyMath.Generate((int)(DropMoney * Bonus), (int)(DropMoney * 2 * Bonus)); if (MyMath.Success(90)) { Money = (UInt32)MyMath.Generate(DropMoney, DropMoney * 3); } if (MyMath.Success(70)) { Money = (UInt32)MyMath.Generate(DropMoney, DropMoney * 5); } if (MyMath.Success(50)) { Money = (UInt32)MyMath.Generate(DropMoney, DropMoney * 7); } if (MyMath.Success(30)) { Money = (UInt32)MyMath.Generate(DropMoney, DropMoney * 8); } if (MyMath.Success(15)) { Money = (UInt32)MyMath.Generate(DropMoney, DropMoney * 10); } Item Item = null; if (Money <= 10) //Silver { Item = Item.CreateMoney(1090000); } else if (Money <= 100) //Sycee { Item = Item.CreateMoney(1090010); } else if (Money <= 1000) //Gold { Item = Item.CreateMoney(1090020); } else if (Money <= 2000) //GoldBullion { Item = Item.CreateMoney(1091000); } else if (Money <= 5000) //GoldBar { Item = Item.CreateMoney(1091010); } else if (Money > 5000) //GoldBars { Item = Item.CreateMoney(1091020); } else //Error { Item = Item.CreateMoney(1090000); } UInt16 ItemX = (UInt16)(X + MyMath.Generate(-1, 1)); UInt16 ItemY = (UInt16)(Y + MyMath.Generate(-1, 1)); for (SByte Try = 0; Try < 5; Try++) { if (Map.GetFloorAccess(ItemX, ItemY)) { FloorItem FloorItem = new FloorItem(Item, Money, KillerUID, Map, ItemX, ItemY); World.FloorThread.AddToQueue(FloorItem); break; } else { ItemX = (UInt16)(X + MyMath.Generate(-1, 1)); ItemY = (UInt16)(Y + MyMath.Generate(-1, 1)); } } } } //Potion Drop if (DropHP != 0 && MyMath.Success(5)) { Item Item = Item.Create(0, 254, DropHP, 0, 0, 0, 0, 0, 2, 0, ItemHandler.GetMaxDura(DropHP), ItemHandler.GetMaxDura(DropHP)); UInt16 ItemX = (UInt16)(X + MyMath.Generate(-1, 1)); UInt16 ItemY = (UInt16)(Y + MyMath.Generate(-1, 1)); for (SByte Try = 0; Try < 5; Try++) { if (Map.GetFloorAccess(ItemX, ItemY)) { FloorItem FloorItem = new FloorItem(Item, 0, KillerUID, Map, ItemX, ItemY); World.FloorThread.AddToQueue(FloorItem); break; } else { ItemX = (UInt16)(X + MyMath.Generate(-1, 1)); ItemY = (UInt16)(Y + MyMath.Generate(-1, 1)); } } } if (DropMP != 0 && MyMath.Success(5)) { Item Item = Item.Create(0, 254, DropMP, 0, 0, 0, 0, 0, 2, 0, ItemHandler.GetMaxDura(DropMP), ItemHandler.GetMaxDura(DropMP)); UInt16 ItemX = (UInt16)(X + MyMath.Generate(-1, 1)); UInt16 ItemY = (UInt16)(Y + MyMath.Generate(-1, 1)); for (SByte Try = 0; Try < 5; Try++) { if (Map.GetFloorAccess(ItemX, ItemY)) { FloorItem FloorItem = new FloorItem(Item, 0, KillerUID, Map, ItemX, ItemY); World.FloorThread.AddToQueue(FloorItem); break; } else { ItemX = (UInt16)(X + MyMath.Generate(-1, 1)); ItemY = (UInt16)(Y + MyMath.Generate(-1, 1)); } } } //Item Drop //Drop Meteor double meteorRate = 0.072 * ((double)(Level + 25) / 17.00); if (MyMath.Success(meteorRate * Bonus)) { Item Item = Item.Create(0, 254, 1088001, 0, 0, 0, 0, 0, 2, 0, ItemHandler.GetMaxDura(1088001), ItemHandler.GetMaxDura(1088001)); UInt16 ItemX = (UInt16)(X + MyMath.Generate(-1, 1)); UInt16 ItemY = (UInt16)(Y + MyMath.Generate(-1, 1)); for (SByte Try = 0; Try < 5; Try++) { if (Map.GetFloorAccess(ItemX, ItemY)) { FloorItem FloorItem = new FloorItem(Item, 0, KillerUID, Map, ItemX, ItemY); World.FloorThread.AddToQueue(FloorItem); break; } else { ItemX = (UInt16)(X + MyMath.Generate(-1, 1)); ItemY = (UInt16)(Y + MyMath.Generate(-1, 1)); } } } //Drop DragonBall double dragonBallRate = 0.00356 * ((double)(Level + 25) / 17.00); if (MyMath.Success(dragonBallRate * Bonus)) { Item Item = Item.Create(0, 254, 1088000, 0, 0, 0, 0, 0, 2, 0, ItemHandler.GetMaxDura(1088000), ItemHandler.GetMaxDura(1088000)); UInt16 ItemX = (UInt16)(X + MyMath.Generate(-1, 1)); UInt16 ItemY = (UInt16)(Y + MyMath.Generate(-1, 1)); for (SByte Try = 0; Try < 5; Try++) { if (Map.GetFloorAccess(ItemX, ItemY)) { FloorItem FloorItem = new FloorItem(Item, 0, KillerUID, Map, ItemX, ItemY); World.FloorThread.AddToQueue(FloorItem); if (Killer != null) { World.BroadcastMsg(new MsgTalk("SYSTEM", "ALLUSERS", String.Format(StrRes.STR_GOT_DRAGONBALL, Killer.Name), Channel.System, Color.Red)); } break; } else { ItemX = (UInt16)(X + MyMath.Generate(-1, 1)); ItemY = (UInt16)(Y + MyMath.Generate(-1, 1)); } } } //Drop Equip if (MyMath.Success(60)) { byte quality = 0; uint value = (uint)MyMath.Generate(DropMoney, DropMoney * 2); int rate = (int)MyMath.Generate(0, 100); if (rate < 1) // 1% got super { quality = 9; } else if (rate < 3) // 3% got elite { quality = 8; } else if (rate < 7) // 7% got unique { quality = 7; } else if (rate < 15) // 15% got refined { quality = 6; } Item Item = null; if (Item.Create(out Item, value, this, quality)) { UInt16 ItemX = (UInt16)(X + MyMath.Generate(-1, 1)); UInt16 ItemY = (UInt16)(Y + MyMath.Generate(-1, 1)); for (SByte Try = 0; Try < 5; Try++) { if (Map.GetFloorAccess(ItemX, ItemY)) { FloorItem FloorItem = new FloorItem(Item, 0, KillerUID, Map, ItemX, ItemY); World.FloorThread.AddToQueue(FloorItem); break; } else { ItemX = (UInt16)(X + MyMath.Generate(-1, 1)); ItemY = (UInt16)(Y + MyMath.Generate(-1, 1)); } } } } }
/// <summary> /// Add a floor item to the destroyer queue. /// </summary> /// <param name="aItem">The floor item to add.</param> public void AddToQueue(FloorItem aItem) { mQueue.Add(aItem); }
//从世界坐标转逻辑坐标 static Vector3Int GetPosFromPosition(FloorItem l_floorItem) { Vector3Int pos = GetPosFromPosition(l_floorItem.transform.position); return(pos); }
public virtual void Compose(Yupi.Protocol.ISender session, FloorItem item, List <FloorItem> items, int delay, string extraInfo, int unknown) { // Do nothing by default. }
private void ParseFloorItems(DataInterceptedEventArgs e) { Invoke((MethodInvoker) delegate { txtFurni.Text = ""; }); LogText("---------------------------------------"); var ownersCount = e.Packet.ReadInteger(); for (var i = 0; i < ownersCount; i++) { LogText($"Owner - ID: {e.Packet.ReadInteger()} | Name: {e.Packet.ReadString()}"); } //if (chkSqlOnly.Checked) //LogText("INSERT INTO items (user_id, room_id, item_id, x, y, z, rot, extra_data) VALUES", true); //string output = ""; //var room = new Room(); room.RoomId = txtRoomId.Text; room.OwnerId = txtOwnerId.Text; var furniCount = e.Packet.ReadInteger(); for (var i = 0; i < furniCount; i++) { var furniItem = new FloorItem(); var furniId = e.Packet.ReadInteger(); var baseId = e.Packet.ReadInteger(); var x = e.Packet.ReadInteger(); var y = e.Packet.ReadInteger(); var rot = e.Packet.ReadInteger(); var height = e.Packet.ReadString(); var stackheight = e.Packet.ReadString(); Tuple <string, int, string> floorItem = floorData.Where(t => t.Item2 == baseId).First(); furniItem.Id = furniId; furniItem.BaseId = baseId; furniItem.X = x; furniItem.Y = y; furniItem.Rotation = rot; furniItem.Height = height; furniItem.OwnerId = txtOwnerId.Text; furniItem.RoomId = txtRoomId.Text; furniItem.ItemName = floorItem.Item1; furniItem.InteractionType = floorItem.Item3; e.Packet.ReadInteger(); // nobody has a f*****g clue what this is for apparently // this should be a mask, but w/e, we don't care about the value (see above) bool isLimited = (e.Packet.ReadInteger() - 256 > -1); if (floorItem.Item3 == "furniture_high_score") { LogText(e.Packet.ToString(), true); } switch (floorItem.Item3) { // _SafeStr_3703 {String, result = Int} // _SafeStr_4710 {} (no data, weird) // IntArrayStuffData (what the hell was the dev team smoking when they named these?) case "furniture_background_color": var colorsCount = e.Packet.ReadInteger(); for (var i2 = 0; i2 < colorsCount; i2++) { furniItem.Extradata += $"{e.Packet.ReadInteger()}:"; } break; // _SafeStr_2428 case "furniture_change_state_when_step_on": case "furniture_basic": case "furniture_trophy": case "furniture_multistate": case "furniture_multiheight": case "furniture_internal_link": case "furniture_es": case "furniture_score": case "furniture_purchasable_clothing": case "furniture_counter_clock": case "furniture_credit": case "furniture_custom_stack_height": case "furniture_pushable": case "furniture_one_way_door": case "furniture_jukebox": case "furniture_floor_hole": case "furniture_dice": case "furniture_hockey_score": case "furniture_fireworks": case "furniture_soundblock": furniItem.Extradata = e.Packet.ReadString(); // extraData break; // HighScoreStuffData case "furniture_high_score": e.Packet.ReadString(); // "1" e.Packet.ReadInteger(); // 1 e.Packet.ReadInteger(); // 0 var count2 = e.Packet.ReadInteger(); // teams count for (var i2 = 0; i2 < count2; i2++) { var score = e.Packet.ReadInteger(); // score? var countNames = e.Packet.ReadInteger(); // names count for (var i3 = 0; i3 < countNames; i3++) { var habboName = e.Packet.ReadString(); // name } } break; // MapStuffData case "furniture_present": case "furniture_mannequin": case "furniture_youtube": case "furniture_bg": case "furniture_bb": case "furniture_monsterplant_seed": var paramsCount = e.Packet.ReadInteger(); // parameter count for (var i2 = 0; i2 < paramsCount; i2++) { furniItem.Extradata += $"{e.Packet.ReadString()}={e.Packet.ReadString().Replace("images.habbo.com", "client.habbent.pw")};"; } break; // StringArrayStuffData case "furniture_lovelock": case "furniture_hween_lovelock": case "furniture_badge_display": case "furniture_group_forum_terminal": case "furniture_guild_customized": var count = e.Packet.ReadInteger(); LogText($"variables: {count}"); for (var i2 = 0; i2 < count; i2++) { var not = $"{e.Packet.ReadString()}"; } break; // _SafeStr_4711 case "furniture_crackable": e.Packet.ReadString(); e.Packet.ReadInteger(); e.Packet.ReadInteger(); break; } if (isLimited) { var limitedNo = e.Packet.ReadInteger(); var limitedTotal = e.Packet.ReadInteger(); } var something2 = e.Packet.ReadInteger(); var canChangeState = e.Packet.ReadInteger(); furniItem.OriginalOwnerId = e.Packet.ReadInteger(); room.FloorItems.Add(furniItem); //LogText(furniItem.ToString(), true); } }
private static void ScheduleDestruction(FloorItem floorItem) => floorItem.Jobs.Add(YiScheduler.Instance.DoReturn(TimeSpan.FromSeconds(60), floorItem.Destroy));