예제 #1
0
        public DropTables detrectDrop()
        {
            var select       = new MysqlSelectAsObject <SqlTableDatailsObject>(this.ctx.Source);
            var sourceTables = select.Execute($"SELECT table_name FROM `information_schema`.`tables`  WHERE table_schema = '{this.ctx.SqlBlinkerConfig.Source.DatabaseName}'");
            var targetTables = select.Execute($"SELECT table_name FROM `information_schema`.`tables`  WHERE table_schema = '{this.ctx.SqlBlinkerConfig.Target.DatabaseName}'");
            var diffDrop     = targetTables.Except(sourceTables);
            var dt           = new DropTables();

            foreach (var item in diffDrop)
            {
                dt.Tables.Add(item.Name);
            }
            return(dt);
        }
예제 #2
0
 protected override void WriteDrops(StringBuilder sb)
 {
     sb.AppendLine(DropTables.Write(Schema, SqlFormatProvider()));
 }
        public override void Handle(NecClient client, NecPacket packet)
        {
            int instanceID = packet.Data.ReadInt32();

            Logger.Debug($"{client.Character.Name} is {client.Character.Alignmentid}");


            IBuffer res = null;

            //res2.WriteInt32(instanceID);

            //Router.Send(client, (ushort) AreaPacketId.recv_loot_access_object_r, res2, ServerType.Area);

            res = BufferProvider.Provide();
            res.WriteInt32(instanceID);

            Router.Send(client, (ushort)AreaPacketId.recv_loot_access_object_r, res, ServerType.Area);

            MonsterSpawn monster = client.Map.GetMonsterByInstanceId((uint)instanceID);

            DropTables dropTable = new DropTables(_server);
            DropItem   dropItem  = dropTable.GetLoot(monster.MonsterId);

            if (dropItem == null)
            {
                return;
            }
            InventoryItem invItem =
                client.Character.GetNextInventoryItem(_server, (byte)dropItem.NumItems, dropItem.Item);

            if (invItem == null)
            {
                res = BufferProvider.Provide();
                res.WriteInt32(-207);
                Router.Send(client, (ushort)AreaPacketId.recv_loot_access_object_r, res, ServerType.Area);

                RecvNormalSystemMessage noSpace = new RecvNormalSystemMessage("Inventory is full!!!!");
                _server.Router.Send(noSpace, client);
                return;
            }

            string lootMsg = $"Looted {dropItem.NumItems} {dropItem.Item.Name} from {monster.Name}.";

            Logger.Debug($"Loot is {dropItem.NumItems} of {dropItem.Item.Id}");

            if (dropItem.Item.Id == 1)
            {
                client.Character.AdventureBagGold += dropItem.NumItems;
                RecvSelfMoneyNotify addMoney = new RecvSelfMoneyNotify(client.Character.AdventureBagGold);
                Router.Send(addMoney, client);
            }
            else
            {
                res = null;
                res = BufferProvider.Provide();

                //res.WriteInt64(dropItem.Item.Id); //Item Object Instance ID
                res.WriteUInt64(dropItem.Item.InstanceId); //Item Object Instance ID

                res.WriteCString(dropItem.Item.Name);      //Name

                //res.WriteInt32(dropItem.Item.IconType);
                res.WriteInt32(dropItem.Item.IconType); //item type

                res.WriteInt32(0);

                res.WriteByte((byte)dropItem.NumItems); //Number of items

                res.WriteInt32(0);                      //Item status 0 = identified

                res.WriteInt32(dropItem.Item.Id);       //Item icon 50100301 = camp
                res.WriteByte(0);
                res.WriteByte(0);
                res.WriteByte(0);
                res.WriteInt32(0);
                res.WriteByte(0);
                res.WriteByte(0);
                res.WriteByte(0);

                res.WriteByte(0);
                res.WriteByte(0);
                res.WriteByte(1); // bool
                res.WriteByte(0);
                res.WriteByte(0);
                res.WriteByte(0);
                res.WriteByte(0);
                res.WriteByte(0);

                res.WriteByte(invItem.StorageType);  // 0 = adventure bag. 1 = character equipment
                res.WriteByte(invItem.StorageId);    // 0~2
                res.WriteInt16(invItem.StorageSlot); // bag index
                res.WriteInt32(
                    0);                              //bit mask. This indicates where to put items.   e.g. 01 head 010 arm 0100 feet etc (0 for not equipped)

                res.WriteInt64(0);

                res.WriteInt32(0);

                Router.Send(client, (ushort)AreaPacketId.recv_item_instance_unidentified, res, ServerType.Area);
            }

            RecvMonsterStateUpdateNotify monsterState = new RecvMonsterStateUpdateNotify((uint)instanceID, 1);

            Router.Send(client.Map, monsterState);

            if (dropItem.Item.Id != 1)
            {
                //RecvPartyNotifyGetItem itemMsg = new RecvPartyNotifyGetItem(dropItem.Item.Id, dropItem.Item.Name, (byte)dropItem.NumItems);

                RecvPartyNotifyAddDrawItem itemMsg = new RecvPartyNotifyAddDrawItem(dropItem.Item.InstanceId, 30.0F, 0);
                _server.Router.Send(itemMsg, client);
            }
        }