Long time since I've released something.
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.
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