Autor Tema: SQL Script starter buff  (Leído 486 veces)

Desconectado hieptd

  • *


  • 3

    2

    4
  • vn
Hi everyone, I'm trying to fix this SQL code to generate new player buffs for season 17 of IGCN. However it is not working, hope someone can help me. Thank you
Código
USE [MuOnline]
GO
/****** Object:  StoredProcedure [dbo].[WZ_CreateCharacter]    Script Date: 10/10/2022 1:45:37 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
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, GameID6, GameID7, GameID8,GameID9, GameID10, GameIDC)
VALUES(@AccountID, @Name, NULL, NULL, NULL, NULL, NULL, 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), @g6 varchar(10), @g7 varchar(10), @g8 varchar(10), @g9 varchar(10), @g10 varchar(10)
SELECT @g1=GameID1, @g2=GameID2, @g3=GameID3, @g4=GameID4, @g5=GameID5, @g6=GameID6, @g7=GameID7, @g8=GameID8, @g9=GameID9, @g10=GameID10 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 IF(@g6 is NULL OR Len(@g6) = 0)
BEGIN
UPDATE AccountCharacter SET GameID6 = @Name
WHERE Id = @AccountID

SET @Result = @@Error
END
ELSE IF(@g7 is NULL OR Len(@g7) = 0)
BEGIN
UPDATE AccountCharacter SET GameID7 = @Name
WHERE Id = @AccountID

SET @Result = @@Error
END
ELSE IF(@g8 is NULL OR Len(@g8) = 0)
BEGIN
UPDATE AccountCharacter SET GameID8 = @Name
WHERE Id = @AccountID

SET @Result = @@Error
END
ELSE IF(@g9 is NULL OR Len(@g9) = 0)
BEGIN
UPDATE AccountCharacter SET GameID9 = @Name
WHERE Id = @AccountID

SET @Result = @@Error
END
ELSE IF(@g10 is NULL OR Len(@g10) = 0)
BEGIN
UPDATE AccountCharacter SET GameID10 = @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 , Money)

SELECT @AccountID AS AccountID, @Name AS Name, Level, LevelUpPoint, @Class AS Class, Strength, Dexterity, Vitality, Energy, Inventory,
MagicList, Life, MaxLife, Mana, MaxMana, 0, 182, 128, getdate() AS MDate, getdate() AS LDate, Quest, Leadership, 3000000
FROM  DefaultClassType WHERE Class = @Class

SET @Result = @@Error
END
        /* CUSTOM ( Creater character ) */
            DECLARE @Items TABLE
            (
                [index] int IDENTITY (1, 1),
                [itemCode] int,
                [EffectType1] tinyint,
                [EffectType2] tinyint,
                [OptionType] tinyint,
                [itemType] tinyint,
                [ExpireDays] int
            )
            DECLARE @ItemsInventory TABLE
            (
                [RowIndex] int IDENTITY (1, 1),
                [Class] int,
                [itemCode] int,
                [ExpireDays] int
            )
           /** Selos **/
            INSERT INTO @Items ([itemCode], [EffectType1], [EffectType2], [OptionType], [itemType], [ExpireDays])
            VALUES
            /* (Item Code, Effect Type 1, Effect Type 2, Option Type, Item Type, Date in Days for expirate), */
            /* SEAL REWAD CHARACTER */         
                (6718, 6, 53, 0, 1, 1), /* SEAL OF HEALING 1 ( Day ) */
            /* SCROLL REWAD CHARACTER */
                (7265, 55, 0, 0, 1, 1), /* SCROLL OF BATTLE 1 ( Day ) */
                (7242, 14, 0, 0, 1, 1), /* SCROLL OF WRATH 1 ( Day ) */
                (7241, 3, 0, 0, 1, 1), /* SEAL OF DEFENSE 1 ( Day ) */
                (7240, 1, 0, 0, 1, 1), /* SEAL OF QUICKNESS 1 ( Day ) */
                (7243, 15, 0, 0, 1, 1), /* SEAL OF WIZARDRY 1 ( Day ) */
                (7244, 4, 0, 0, 1, 1), /* SEAL OF HEALTH 1 ( Day ) */
                (7245, 5, 0, 0, 1, 1), /* SEAL OF MANA 1 ( Day ) */
                (7266, 56, 0, 0, 1, 1) /* SEAL OF HEALING 1 ( Day ) */

            /*******************************************************/
            DECLARE @UserGuid int = (SELECT [memb_guid] FROM [MuOnline].[dbo].[MEMB_INFO] WHERE [memb___id] = @AccountID)
            DECLARE @ItemCount int = (SELECT COUNT(1) FROM @Items)
DECLARE @LoopIndex int = 1
            DECLARE @GetItemSerialResult TABLE
            (
                [itemSerial] bigint
            )
            DECLARE @ItemCode int
            DECLARE @EffectType1 tinyint
            DECLARE @EffectType2 tinyint
            DECLARE @OptionType tinyint
            DECLARE @ItemType tinyint
            DECLARE @ExpireDate smalldatetime
            WHILE (@LoopIndex <= @ItemCount)
            BEGIN
                SELECT
                    @ItemCode = [itemCode],
                    @EffectType1 = [EffectType1],
                    @EffectType2 = [EffectType2],
                    @OptionType = [OptionType],
                    @ItemType = [itemType],
                    @ExpireDate = DATEADD(DAY, [ExpireDays], GETUTCDATE())
                FROM @Items
                WHERE [index] = @LoopIndex
                DELETE FROM @GetItemSerialResult
                INSERT INTO @GetItemSerialResult
                EXECUTE [dbo].[WZ_GetItemSerial]
                INSERT INTO dbo.IGC_PeriodItemInfo (
                    [userGuid],
                    [CharacterName],
                    [itemCode],
                    [EffectType1],
                    [EffectType2],
                    [usedTime],
                    [LeftTime],
                    [buyDate],
                    [ExpireDate],
                    [usedInfo],
                    [OptionType],
                    [itemType],
                    [serialCode],
                    [buyDateConvert],
                    [ExpireDateConvert],
                    [setExpire]
                 ) VALUES (
                    @UserGuid,
                    @Name,
                    @ItemCode,
                    @EffectType1,
                    @EffectType2,
                    0,
                    DATEDIFF(SECOND, GETUTCDATE(), @ExpireDate),
                    GETUTCDATE(),
                    @ExpireDate,
                    1,
                    @OptionType,
                    @ItemType,
                    (SELECT [itemSerial] FROM @GetItemSerialResult),
                    DATEDIFF(SECOND, '1970-01-01 00:00:00', GETUTCDATE()),
                    DATEDIFF(SECOND, '1970-01-01 00:00:00', @ExpireDate),
                    0
                 )       
                 SET @LoopIndex = @LoopIndex + 1
            END
         IF ( @@Error <> 0 ) BEGIN
             SET @Result = @@Error
             END
/* CHECK AND INSERT LOGINS TO T_InGameShop_Point */
IF NOT EXISTS ( SELECT AccountID FROM T_InGameShop_Point WHERE AccountID =@AccountID )

BEGIN 
INSERT INTO dbo.T_InGameShop_Point (AccountID, WCoin, GoblinPoint)
VALUES (@AccountID, 0, 0 )
END
/* CHECK AND INSERT LOGINS TO IGC_EvolutionMonster */                       

                        IF NOT EXISTS ( SELECT AccountID FROM IGC_EvolutionMonster WHERE AccountID = @AccountID and Name = @Name )

                        BEGIN
                                     INSERT INTO dbo.IGC_EvolutionMonster ( AccountID, Name)
                                     VALUES (@AccountID, @Name)
                        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

Gracias:

cinus, tovenis1122, acacoo, Sinonimas

 

.