[Fixxe's]Relogg-, Skill- und Wegwerf Bug

07/26/2013 18:16 .WshbR'#61
Kann man nur empfehlen, klappt wunderbar :D
06/01/2014 06:58 pitaprajita13#62
Quote:
Originally Posted by SkillartzHD View Post
Das Thema hatte gegen die Regen verstoßen.

Wie der Fix zustande kam und wer daran alles beteidigt war werde ich auf Weom's wunsch nicht erwähnen weil er die ehre für einen Müll fix (Es entstehen neue bugs und der fix ist sehr unsicher) alleine will.

Für die Leute die keine Lust haben sich alles runterzuladen:
Die Fixes sind sehr einfach aufgebaut.
Hier nochmal die Fixes die ich erstellt habe (Sollten ungefähr genauso laufen wie die von Weom):

Was müsst ihr machen?:
Ihr geht in TGAME_GSP --> Functions und sucht dort folgende Funktionen und ersetzt den vorhandenen Code durch den hier:

Die erste der beiden Daten (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
 

*/
--      DELETE TITEMTABLE WHERE @dwCharID dwOwnerID AND bOwnerType=AND wItemID 7605
 
SELECT 
@dwUserID dwUserID FROM TCHARTABLE WHERE dwCharID = @dwCharID
 
BEGIN TRAN SAVECHAREND
 
DELETE TITEMTABLE WHERE dwOwnerID 
= @dwCharID AND bOwnerType AND bStorageType <> 2
DELETE TITEMTABLE WHERE dlID IN
(SELECT dlID FROM TTEMPITEMTABLE WHERE dwOwnerID = @dwCharID)
 
INSERT INTO TITEMTABLE(
        
dlIDbStorageTypedwStorageIDbOwnerTypedwOwnerIDbItemIDwItemIDbLevelbCountbGLeveldwDuraMaxdwDuraCurbRefineCur,dEndTime,bGradeEffect,
        
bMagic1bMagic2bMagic3bMagic4bMagic5bMagic6,
        
wValue1wValue2wValue3wValue4wValue5wValue6,
        
dwTime1dwTime2dwTime3dwTime4dwTime5dwTime6)
        
SELECT FROM TTEMPITEMTABLE WHERE dwOwnerID = @dwCharID
 
DELETE TSKILLTABLE WHERE dwCharID 
= @dwCharID
INSERT INTO TSKILLTABLE SELECT 
FROM TTEMPSKILLTABLE WHERE dwCharID = @dwCharID
 
 
 
COMMIT TRAN SAVECHAREND
 
EXEC TGLOBAL_GSP
.DBO.TSaveDuringItem @dwUserID 
Und die andere (TSaveCharDataEnd):
PHP Code:
ALTER PROCEDURE [dbo].[TSaveCharDataEnd]
@
dwCharID INT
AS
 
DECLARE @
dwUserID INT
SELECT 
@dwUserID dwUserID FROM TCHARTABLE WHERE dwCharID = @dwCharID
 
BEGIN TRAN SAVECHAREND
 
DELETE TINVENTABLE WHERE dwCharID 
= @dwCharID
DELETE TCABINETTABLE WHERE dwCharID 
= @dwCharID
DELETE TITEMUSEDTABLE WHERE dwCharID 
= @dwCharID
DELETE TEXPITEMTABLE WHERE dwCharID 
= @dwCharID
 
INSERT INTO TINVENTABLE SELECT 
FROM TTEMPINVENTABLE WHERE dwCharID = @dwCharID
INSERT INTO TCABINETTABLE SELECT 
FROM TTEMPCABINETTABLE WHERE dwCharID = @dwCharID
INSERT INTO TITEMUSEDTABLE SELECT 
FROM TTEMPITEMUSEDTABLE WHERE dwCharID = @dwCharID
INSERT INTO TEXPITEMTABLE SELECT 
FROM TTEMPEXPITEMTABLE WHERE dwCharID = @dwCharID
 
COMMIT TRAN SAVECHAREND
 
EXEC TGLOBAL_GSP
.DBO.TSaveDuringItem @dwUserID 
Sollte so passen.
Grezz
:rtfm:
ERROR: " invalid procedure syntax "
For those who the SkillartzHD‘s method didn't work, try this alternative method for TLOGOUT only:
IT DOESN'T WORK for skills too but if you want to save the skill bars you can find here the updated version of these codes: [Only registered and activated users can see links. Click Here To Register...]

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
 

*/
--      DELETE TITEMTABLE WHERE @dwCharID = dwOwnerID AND bOwnerType=0 AND wItemID = 7605

ALTER PROCEDURE [dbo].[TLogout]
	@dwUserID	INT,
	@dwCharID	INT
AS
	DECLARE @nResult	INT
	DECLARE @bLevel	TINYINT
	DECLARE @dwExp	INT
	DECLARE @dwPlayTime INT
	DECLARE @dwGold	INT
	DECLARE @dwSilver	INT
	DECLARE @dwCooper	INT
	DECLARE @bWorldID	TINYINT
	DECLARE @dCurDate SMALLDATETIME

SELECT @dwUserID = dwUserID FROM TCHARTABLE WHERE dwCharID = @dwCharID

BEGIN TRAN SAVECHAREND

DELETE TITEMTABLE WHERE dwOwnerID = @dwCharID AND bOwnerType = 0 AND bStorageType <> 2
DELETE TITEMTABLE WHERE dlID IN(SELECT dlID FROM TTEMPITEMTABLE WHERE dwOwnerID = @dwCharID)
 
INSERT INTO TITEMTABLE(
        dlID, bStorageType, dwStorageID, bOwnerType, dwOwnerID, bItemID, wItemID, bLevel, bCount, bGLevel, dwDuraMax, dwDuraCur, bRefineCur,dEndTime,bGradeEffect,
        bMagic1, bMagic2, bMagic3, bMagic4, bMagic5, bMagic6,
        wValue1, wValue2, wValue3, wValue4, wValue5, wValue6,
        dwTime1, dwTime2, dwTime3, dwTime4, dwTime5, dwTime6)
        SELECT * FROM TTEMPITEMTABLE WHERE dwOwnerID = @dwCharID 

DELETE TSKILLTABLE WHERE dwCharID = @dwCharID
INSERT INTO TSKILLTABLE SELECT * FROM TTEMPSKILLTABLE WHERE dwCharID = @dwCharID
 
 
 
COMMIT TRAN SAVECHAREND

	SET @bLevel = 0
	SET @dwExp = 0
	SET @dwGold = 0
	SET @dwSilver = 0
	SET @dwCooper = 0
	SET @dCurDate = GetDate()

	IF(@dwCharID <> 0)
	BEGIN
		SELECT @bLevel = bLevel, @dwExp = dwEXP, @dwGold=dwGold, @dwSilver=dwSilver, @dwCooper=dwCooper FROM TCHARTABLE WHERE dwCharID = @dwCharID

		EXEC TUpdateActiveChar @dwCharID

		UPDATE TCHARTABLE SET dLogoutDate = @dCurDate WHERE dwCharID=@dwCharID

		EXEC @nResult = TGLOBAL_GSP.dbo.TLogout @dwUserID, @dwCharID, @bLevel, @dwExp
		IF(@nResult = 0)
		BEGIN
			SELECT @bWorldID = bWorld+1 FROM TDBITEMINDEXTABLE
			EXEC TGLOBAL_GSP.dbo.TUpdateCharMoney @bWorldID, @dwCharID, @dwGold, @dwSilver, @dwCooper
		END
	END

	EXEC TGLOBAL_GSP.DBO.TPcBangLogout @dwUserID, @dwPlayTime OUTPUT
/*
	IF(@dwGuildID <> 0 AND @dwPlayTime <> 0)
	BEGIN
		INSERT INTO TGUILDPLAYLOG(dwGuildID, dwUserID, dwCharID, dwPlayTime) VALUES(@dwGuildID, @dwUserID, @dwCharID, @dwPlayTime)
		UPDATE TGUILDTABLE SET dwPlayTime = dwPlayTime + @dwPlayTime  WHERE dwID = @dwGuildID
	END
*/
--	DELETE TITEMTABLE WHERE @dwCharID = dwOwnerID AND bOwnerType=0 AND wItemID = 7605

	RETURN @nResult
A HUGE thanks for SkillartzHD by posting all the codes! :handsdown:
AND please post a tournament tutorial too in ENGlish :rtfm:
Greetings from Romania! :bandit: