给0.97D加入角色生成时间


Published:   Comment: No Comments

游戏数据库

由于0.97D没有角色的生成时间,而自己又正好想要做个调用的测试
首先建立一个角色的生成时间表

ALTER TABLE Character
ADD [MDate] [smalldatetime] NULL;

然后删除默认的角色存储过程

DROP PROCEDURE dbo.WZ_CreateCharacter;
GO

最后重新建立添加了建立角色时间的 角色的存储过程

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO

CREATE 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 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)

        SELECT @g1=GameID1, @g2=GameID2, @g3=GameID3, @g4=GameID4, @g5=GameID5
        FROM 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 Character (AccountID, Name, cLevel, LevelUpPoint, Class, Strength, Dexterity, Vitality, Energy, Inventory, MagicList, Life, MaxLife, Mana, MaxMana, BP, MaxBP, MapNumber, MapPosX, MapPosY, Quest, DbVersion, EffectList,  MDate)
        SELECT @AccountID AS AccountID, @Name AS Name, Level, LevelUpPoint, @Class AS Class, Strength, Dexterity, Vitality, Energy, Inventory, MagicList, Life, MaxLife, Mana, MaxMana, 0, 0, MapNumber, MapPosX, MapPosY, Quest, DbVersion, EffectList, getdate() As MDate
        FROM DefaultClassType WHERE Class = @Class

        SET @Result = @@Error
    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
GO
Last Modified:2024-06-18 18:27:58

我有话说