[UNTESTED] Auto Move Items from Pet to Storage

11/16/2017 19:51 Royalblade*#1
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.

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
11/16/2017 22:44 JokeR5420#2
where is SRO_VT_ROYAl.dbo._Logins ?
11/18/2017 13:20 hoangphan7#3
Is this server side only?
Request teleport / relog ?
11/18/2017 13:38 AceSpace#4
Quote:
Originally Posted by JokeR5420 View Post
where is SRO_VT_ROYAl.dbo._Logins ?
The table:
Code:
USE SRO_VT_LOG
CREATE TABLE _Logins (
       CharID INT,
       LoggedAt DATETIME
);
Add this in _AddLogChar

Code:
IF @EventID = 4
  INSERT INTO _Logins VALUES (@CharID, GETDATE())

IF @EventID = 6
  DELETE FROM _Logins WHERE CharID = @CharID
Make sure to change the procedure, this should do the work.
11/19/2017 18:24 TotallyNotGoofie.#5
So its tested but not tested? :s
11/20/2017 00:21 Royalblade*#6
It SHOULD work but I havent tested it... Useful to some people smtms.