Buen día a todos, en esta ocasión necesito de su ayuda.
Pasa que quiero dar un seal (buff) al crear un personaje. Aquí se aprecia que si da el buff y la expiración del item esta bien.
Pero surge un problema con la expiración de los items al relogear, sale como expirados al seleccionar character
Uso files IGCN.
USE [MuOnline]
GO
/****** Object: StoredProcedure [dbo].[WZ_CreateCharacter] Script Date: 06/02/2020 23:42:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER Procedure [dbo].[WZ_CreateCharacter]
@AccountID varchar(10),
@Name varchar(10),
@Class tinyint
AS
BEGIN
SET NOCOUNT ON
SET XACT_ABORT ON
DECLARE @Result tinyint
SET @Result = 0x00
IF EXISTS ( SELECT Name FROM Character WHERE Name = @Name )
BEGIN
SET @Result = 0x01
GOTO ProcEnd
END
BEGIN TRAN
IF NOT EXISTS ( SELECT Id FROM AccountCharacter WHERE Id = @AccountID )
BEGIN
INSERT INTO dbo.AccountCharacter(Id, GameID1, GameID2, GameID3, GameID4, GameID5, GameIDC)
VALUES(@AccountID, @Name, NULL, NULL, NULL, NULL, NULL)
SET @Result = @@Error
END
ELSE
BEGIN
Declare @g1 varchar(10), @g2 varchar(10), @g3 varchar(10), @g4 varchar(10), @g5 varchar(10), @userGuid int, @serial int
SELECT @g1=GameID1, @g2=GameID2, @g3=GameID3, @g4=GameID4, @g5=GameID5 FROM dbo.AccountCharacter Where Id = @AccountID
IF( ( @g1 Is NULL) OR (Len(@g1) = 0))
BEGIN
UPDATE AccountCharacter SET GameID1 = @Name
WHERE Id = @AccountID
SET @Result = @@Error
END
ELSE IF( @g2 Is NULL OR Len(@g2) = 0)
BEGIN
UPDATE AccountCharacter SET GameID2 = @Name
WHERE Id = @AccountID
SET @Result = @@Error
END
ELSE IF( @g3 Is NULL OR Len(@g3) = 0)
BEGIN
UPDATE AccountCharacter SET GameID3 = @Name
WHERE Id = @AccountID
SET @Result = @@Error
END
ELSE IF( @g4 Is NULL OR Len(@g4) = 0)
BEGIN
UPDATE AccountCharacter SET GameID4 = @Name
WHERE Id = @AccountID
SET @Result = @@Error
END
ELSE IF( @g5 Is NULL OR Len(@g5) = 0)
BEGIN
UPDATE AccountCharacter SET GameID5 = @Name
WHERE Id = @AccountID
SET @Result = @@Error
END
ELSE
BEGIN
SET @Result = 0x03
GOTO TranProcEnd
END
END
IF( @Result <> 0 )
BEGIN
GOTO TranProcEnd
END
ELSE
BEGIN
INSERT INTO dbo.Character(AccountID, Name, cLevel, LevelUpPoint, Class, Strength, Dexterity, Vitality, Energy, Inventory,MagicList,
Life, MaxLife, Mana, MaxMana, MapNumber, MapPosX, MapPosY, MDate, LDate, Quest, Leadership )
SELECT @AccountID As AccountID, @Name As Name, Level, LevelUpPoint, @Class As Class,
Strength, Dexterity, Vitality, Energy, Inventory,MagicList, Life, MaxLife, Mana, MaxMana, MapNumber, MapPosX, MapPosY,
getdate() As MDate, getdate() As LDate, Quest, Leadership
FROM DefaultClassType WHERE Class = @Class
/* Adiciona itens criar char */
SELECT @userGuid=Number FROM dbo.AccountCharacter WHERE Id=@AccountID
SELECT @Serial=Max(Serial) FROM dbo.IGC_PeriodItemInfo
INSERT INTO dbo.IGC_PeriodItemInfo ( UserGUID, CharacterName, ItemCode, ItemType, EffectType1, EffectType2, EffectCategory, Duration, BuyDate, ExpireDate, BuyDateString, ExpireDateString, UsedInfo, Serial)
VALUES
( @userGuid, @Name, 6700, 1, 6, 0, 62,259200, DATEDIFF(SECOND, '1970-01-01 00:00:00', GETUTCDATE()), DATEDIFF(SECOND, '1970-01-01 00:00:00', DATEADD(second, 259200, GETUTCDATE())), GETDATE(), DATEADD(second, 259200, GETDATE()), 1 ,@Serial+1)
iF ( @@Error <> 0 ) BEGIN
SET @Result = @@Error
END
SET @Result = @@Error
END
IF NOT EXISTS ( SELECT AccountID FROM T_InGameShop_Point WHERE AccountID = @AccountID )
BEGIN
INSERT INTO dbo.T_InGameShop_Point (AccountID, WCoinC, WCoinP, GoblinPoint)
VALUES (@AccountID, 0, 0, 0)
END
TranProcEnd:
IF ( @Result <> 0 )
ROLLBACK TRAN
ELSE
COMMIT TRAN
ProcEnd:
SET NOCOUNT OFF
SET XACT_ABORT OFF
SELECT
CASE @Result
WHEN 0x00 THEN 0x01
WHEN 0x01 THEN 0x00
WHEN 0x03 THEN 0x03
ELSE 0x02
END AS Result
END