コード例 #1
0
        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);
            }
        }
コード例 #2
0
 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);
     }
 }
コード例 #3
0
    public void AddFloorItem(FloorItem item)
    {
        item.id = FloorItems.Count;
        FloorItems.Add(item);

        this.CoolerApiEvent(-1, "CreateItem", item, item.id);
    }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
ファイル: FloorItemSystem.cs プロジェクト: Pircs/Yi
 private static void AbortJobs(FloorItem drop)
 {
     foreach (var job in drop.Jobs)
     {
         job.Cancelled = true;
     }
     drop.Jobs.Clear();
 }
コード例 #6
0
ファイル: FloorItemSystem.cs プロジェクト: Pircs/Yi
 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)));
     }
 }
コード例 #7
0
 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);
     }
 }
コード例 #8
0
 public MsgMapItem(FloorItem aItem, Action aAction)
     : base(20)
 {
     Id      = aItem.Id;
     Type    = aItem.Item.Type;
     PosX    = aItem.X;
     PosY    = aItem.Y;
     _Action = aAction;
 }
コード例 #9
0
ファイル: LootTable.cs プロジェクト: bbroeking/artemis
    private void SetLoot(Item drop, GameObject loot)
    {
        SpriteRenderer spriteRenderer = loot.GetComponent <SpriteRenderer>();

        spriteRenderer.sprite = drop.Icon;
        FloorItem pickupItem = loot.GetComponent <FloorItem>();

        pickupItem.item = drop;
    }
コード例 #10
0
 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();
 }
コード例 #11
0
 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);
     }
 }
コード例 #12
0
 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);
     }
 }
コード例 #13
0
ファイル: TextHelper.cs プロジェクト: 554476577/Prepaid
        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);
        }
コード例 #14
0
ファイル: MonsterObject.cs プロジェクト: jkloop45/Solution
        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();
                }
            }
        }
コード例 #15
0
        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);
        }
コード例 #16
0
    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);
    }
コード例 #17
0
ファイル: FloorItemSystem.cs プロジェクト: Pircs/Yi
        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);
        }
コード例 #18
0
ファイル: FloorItem.cs プロジェクト: HouLingLXH/RiddleAssets
 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);
         }
     }
 }
コード例 #19
0
        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);
        }
コード例 #20
0
ファイル: FloorItemSystem.cs プロジェクト: Pircs/Yi
 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;
         }
     });
 }
コード例 #21
0
ファイル: FloorItemSystem.cs プロジェクト: Pircs/Yi
        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);
        }
コード例 #22
0
        /// <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);
                }
            }
        }
コード例 #23
0
ファイル: FloorItemSystem.cs プロジェクト: Pircs/Yi
 private static void ScheduleOwnerRemove(FloorItem floorItem) => floorItem.Jobs.Add(YiScheduler.Instance.DoReturn(TimeSpan.FromSeconds(30), () => floorItem.Owner = null));
コード例 #24
0
        /// <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;
            }
            }
        }
コード例 #25
0
        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));
                        }
                    }
                }
            }
        }
コード例 #26
0
 /// <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);
 }
コード例 #27
0
ファイル: FloorItem.cs プロジェクト: HouLingLXH/RiddleAssets
    //从世界坐标转逻辑坐标
    static Vector3Int GetPosFromPosition(FloorItem l_floorItem)
    {
        Vector3Int pos = GetPosFromPosition(l_floorItem.transform.position);

        return(pos);
    }
コード例 #28
0
 public virtual void Compose(Yupi.Protocol.ISender session, FloorItem item, List <FloorItem> items, int delay,
                             string extraInfo, int unknown)
 {
     // Do nothing by default.
 }
コード例 #29
0
        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);
            }
        }
コード例 #30
0
ファイル: FloorItemSystem.cs プロジェクト: Pircs/Yi
 private static void ScheduleDestruction(FloorItem floorItem) => floorItem.Jobs.Add(YiScheduler.Instance.DoReturn(TimeSpan.FromSeconds(60), floorItem.Destroy));