[Fix] TLogout Function

06/14/2013 05:37 Sicarium#1
I corrected this script and added the missing variables.
TGLOBAL_GSP -> Functions -> TLogout.


PHP Code:
/* LOGOUT PROCESS

========================================================
PARAMETER
========================================================
@dwUserID        INT

========================================================
RETURN VALUE
========================================================
0    : SUCCESS
1    : NO USER

========================================================
PROCESS
========================================================
1. Check TCURRENTUSER table
2. Delete user from TCURRENTUSER
3. Update log data

*/

ALTER PROCEDURE [dbo].[TLogout]
    @
dwUserID    INT,
    @
dwCharID    INT,
    @
bLevel    TINYINT,
    @
dwExp    INT,
    @
bSlot TINYINT,
    @
szNAME VARCHAR,
    @
bClass TINYINT,
    @
bRace TINYINT,
    @
bCountry TINYINT,
    @
bSex TINYINT,
    @
bHair TINYINT,
    @
bFace TINYINT
AS
    DECLARE @
dwCurCharID    INT
    
DECLARE @dwKEY        INT

    
DECLARE @bGroupID        TINYINT
    
DECLARE @bChannel        TINYINT

    
DECLARE @dLoginDate        SMALLDATETIME

    BEGIN TRAN LOGOUT
    SELECT TOP 1 
@dwKEY dwKEY, @dwCurCharID dwCharID, @bGroupID bGroupID, @bChannel bChannel, @dLoginDate dLoginDate FROM TCURRENTUSER WHERE dwUserID = @dwUserID
    
IF (@@ROWCOUNT 0)
    
BEGIN
        
/* Not found connected user */
        
COMMIT TRAN LOGOUT
        
RETURN 1
    END
    
ELSE
    
BEGIN
    UPDATE TLOG SET
        dwCharID 
= @dwCurCharID,
        
bGroupID = @bGroupID,
        
bChannel = @bChannel,
        
timeLOGOUT GETDATE()
    
WHERE dwKEY = @dwKEY
    END

      
/*  @dwCurCharID e il dwCharID   */
    
SELECT FROM TALLCHARTABLE  WHERE dwCharID = @dwCurCharID
    
    
IF(@@ROWCOUNT 1)
    
BEGIN
        UPDATE TALLCHARTABLE
            SET     bLevel         
=     @bLevel,
             
dwExp        =    @dwExp,
             
dLoginDate    =    @dLoginDate,
             
dLogoutDate    =    GETDATE(),
             
bSlot  =    @bSlot,
             
szNAME =    @szNAME,
             
bClass  =    @bClass,
             
bRace    =    @bRace,
             
bCountry =    @bCountry,
             
bSex =        @bSex,
             
bHair =    @bHair,
             
bFace =    @bFace,                                       
              
dwPlayTime    =    dwPlayTime DATEDIFF(second, @dLoginDategetdate()) 
        
WHERE dwCharID    =    @dwCharID
        
AND     bWorldID    =    @bGroupID

        
        DELETE FROM TCURRENTUSER WHERE dwUserID 
= @dwUserID
    END

    
    COMMIT TRAN LOGOUT

    
RETURN 
06/14/2013 08:05 EliteTuerie#2
Quote:
Originally Posted by Sicarium View Post
I corrected this script and added the missing variables.
TGLOBAL_GSP -> Functions -> TLogout.


PHP Code:
/* LOGOUT PROCESS

========================================================
PARAMETER
========================================================
@dwUserIDINT

========================================================
RETURN VALUE
========================================================
0: SUCCESS
1: NO USER

========================================================
PROCESS
========================================================
1. Check TCURRENTUSER table
2. Delete user from TCURRENTUSER
3. Update log data

*/

ALTER PROCEDURE [dbo].[TLogout]
@
dwUserIDINT,
@
dwCharIDINT,
@
bLevelTINYINT,
@
dwExpINT,
@
bSlot TINYINT,
@
szNAME VARCHAR,
@
bClass TINYINT,
@
bRace TINYINT,
@
bCountry TINYINT,
@
bSex TINYINT,
@
bHair TINYINT,
@
bFace TINYINT
AS
DECLARE @
dwCurCharIDINT
DECLARE @dwKEYINT

DECLARE @bGroupIDTINYINT
DECLARE @bChannelTINYINT

DECLARE @dLoginDateSMALLDATETIME

BEGIN TRAN LOGOUT
SELECT TOP 1 
@dwKEY dwKEY, @dwCurCharID dwCharID, @bGroupID bGroupID, @bChannel bChannel, @dLoginDate dLoginDate FROM TCURRENTUSER WHERE dwUserID = @dwUserID
IF (@@ROWCOUNT 0)
BEGIN
/* Not found connected user */
COMMIT TRAN LOGOUT
RETURN 1
END
ELSE
BEGIN
UPDATE TLOG SET
dwCharID 
= @dwCurCharID,
bGroupID = @bGroupID,
bChannel = @bChannel,
timeLOGOUT GETDATE()
WHERE dwKEY = @dwKEY
END

  
/*  @dwCurCharID e il dwCharID   */
SELECT FROM TALLCHARTABLE  WHERE dwCharID = @dwCurCharID

IF(@@ROWCOUNT 1)
BEGIN
UPDATE TALLCHARTABLE
    SET bLevel 
= @bLevel,
 
dwExp=@dwExp,
 
dLoginDate=@dLoginDate,
 
dLogoutDate=GETDATE(),
 
bSlot  =@bSlot,
 
szNAME =@szNAME,
 
bClass  =@bClass,
 
bRace=@bRace,
 
bCountry =@bCountry,
 
bSex =@bSex,
 
bHair =@bHair,
 
bFace =@bFace,   
  
dwPlayTime=dwPlayTime DATEDIFF(second, @dLoginDategetdate()) 
WHERE dwCharID=@dwCharID
AND bWorldID=@bGroupID


DELETE FROM TCURRENTUSER WHERE dwUserID 
= @dwUserID
END


COMMIT TRAN LOGOUT

RETURN 
Good joob ^^ :thumbup:
06/14/2013 13:15 Konst™#3
For what is that fix? Is dont know a bug in TLogout
06/14/2013 16:34 Sicarium#4
the tallchartable dont save all variables and the script is not all correct :).
06/14/2013 16:46 Konst™#5
But which bug it fix? I dont got bugs in tallchartable. You dont really all variables there. Its a edited function not a fix
06/14/2013 17:00 Sicarium#6
Make a character, enter in game and change name or change color hair, ok now do logout, next.. see the tallchartable and tchartable, you will see that tallchartable not refresh all information becouse dont save all thinks of the tchartable and that can make some problems.

The structure of the this script is wrong.
06/14/2013 17:02 Konst™#7
Ah ok. Nice