Have fun, this is entirely untested, just wrote it down from scratch more or less in pastebin.
btw update the tables etc for your own usage. This is a basic demonstration on how to do it quickly without much hassle.
Code:
CREATE PROCEDURE _RoyalReducePetPages @CharID INT = 0, @MaxSlots INT = 0, @Charname VARCHAR(32) = '' AS IF @Charname = '' AND @CharID = 0 BEGIN PRINT 'Set a charname OR a charid at least...' RETURN; END IF @CharID = 0 SELECT @CharID = CharID FROM SRO_VT_SHARD_INIT.dbo._Char WHERE CharName16 = @Charname; IF @Charname IS NULL OR @Charname = '' SELECT @Charname = CharID FROM SRO_VT_SHARD_INIT.dbo._Char WHERE CharID = @CharID; DECLARE @Table TABLE ( ID INT IDENTITY(1,1), Charname VARCHAR(32), Codename VARCHAR(128) ) INSERT INTO @Table (Charname, Codename) SELECT @Charname, q.CodeName128 FROM ( SELECT * FROM SRO_VT_SHARD_INIT.dbo._invcos back join SRO_VT_SHARD_INIT.dbo._Items IT ON back.ItemID=it.ID64 join SRO_VT_SHARD_INIT.dbo._RefObjCommon R ON IT.RefItemID=r.ID WHERE ID64!=0 AND back.Slot > @MaxSlots ) AS q join SRO_VT_SHARD_INIT.dbo._Items IT1 ON q.COSID = IT1.Data join SRO_VT_SHARD_INIT.dbo._Inventory I ON IT1.ID64=I.ItemID WHERE i.CharID = @CharID DECLARE @MaxIndex INT = 0, @Flag INT = 0, @Codename VARCHAR(128) = ''; SELECT @MaxIndex = MAX(ID) FROM @Table WHILE @Flag <= @MaxIndex BEGIN SELECT @Codename = Codename, @Charname = Charname FROM @Table WHERE ID = @Flag IF @Codename IS NOT NULL AND @Charname IS NOT NULL EXEC _TransferItem @Codename, @Charname; SET @Flag += 1; END CREATE Procedure [dbo].[_TransferItem] @Codename varchar(128), @Charname varchar(32) AS Declare @CharID INT = (Select CharID from SRO_VT_SHARD_INIT.dbo._Char Where CharName16=@Charname) Declare @JID INT = (SELECT UserJID FROM SRO_VT_SHARD_INIT.dbo._User Where CharID=@CharID), @itemID INT; IF @Codename in -- Check if item exists. (Select q.CodeName128 from ( Select * from SRO_VT_SHARD_INIT.dbo._invcos back join SRO_VT_SHARD_INIT.dbo._Items IT on back.ItemID=it.ID64 join SRO_VT_SHARD_INIT.dbo._RefObjCommon R on IT.RefItemID=r.ID where ID64!=0 ) as q join SRO_VT_SHARD_INIT.dbo._Items IT1 ON q.COSID = IT1.Data join SRO_VT_SHARD_INIT.dbo._Inventory I ON IT1.ID64=I.ItemID where i.CharID=@CharID) IF @CharID IN (Select CharID from SRO_VT_ROYAl.dbo._Logins) OR (@JID IS NULL) OR (@Codename IS NULL) BEGIN RETURN END -- Check if Char is Online or JID is null dont do shit. BEGIN SET @itemID = (Select TOP 1 q.ItemID from ( -- take first item with that codename Select * from SRO_VT_SHARD_INIT.dbo._invcos back join SRO_VT_SHARD_INIT.dbo._Items IT on back.ItemID=it.ID64 join SRO_VT_SHARD_INIT.dbo._RefObjCommon R on IT.RefItemID=r.ID where ID64!=0 ) as q join SRO_VT_SHARD_INIT.dbo._Items IT1 ON q.COSID = IT1.Data join SRO_VT_SHARD_INIT.dbo._Inventory I ON IT1.ID64=I.ItemID where i.CharID=@CharID AND q.CodeName128 = @Codename) Declare @FreeSlot INT = (Select TOP 1 Slot FROM SRO_VT_SHARD_INIT.dbo._Chest Where UserJID= @JID AND ItemID = 0 ORder by Slot ASC) IF @FreeSlot IS NULL OR @itemID IS NULL BEGIN Return END BEGIN TRANSACTION Update SRO_VT_SHARD_INIT.dbo._invcos Set ItemID=0 Where ItemID=@ItemID IF (@@ROWCOUNT=0 OR @@ERROR<>0) BEGIN ROLLBACK TRANSACTION RETURN END UPdate SRO_VT_SHARD_INIT.dbo._Chest SET ItemID=@itemID WHERE Slot=@FreeSlot AND UserJID = @JID IF (@@ROWCOUNT=0 OR @@ERROR<>0) BEGIN ROLLBACK TRANSACTION RETURN END COMMIT TRANSACTION END