Otomatik Master Açma | Başlangıç Level Ayarlama (Oto Skill - Stat) | v20xx ve Üzeri

Krauss

Asteğmen
Katılım
15 May 2026
Mesajlar
14
Tepkime puanı
3

Stored Procedures bölümünden CREATE_NEW_CHAR modify edip Execute ediniz.

Sütunları kendi DB 'nizde ki USERDATA tablosuna göre düzenleyiniz. aksi takdirde problemler oluşabilir.​

62/1 şeklinde otomatik tüm karakterler Master açık şeklinde başlar..

1 level için: Programmability ->Stored procedures ->CREATE_NEW_CHAR proc una giriyorsunuz master_ac 'ın altına eklemeniz yeterli​



SQL:
USE [kn_online]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[CREATE_NEW_CHAR]
(
    @strAccountID VARCHAR(21),
    @index TINYINT,
    @strCharID VARCHAR(21),
    @bRace TINYINT,
    @sClass SMALLINT,
    @nHair INT,
    @bFace TINYINT,
    @bStr TINYINT,
    @bSta TINYINT,
    @bDex TINYINT,
    @bIntel TINYINT,
    @bCha TINYINT
)
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE
        @bNation TINYINT,
        @bCharCount TINYINT,
        @NewClass SMALLINT;

    -- Account kontrolü
    SELECT
        @bNation = bNation,
        @bCharCount = bCharNum
    FROM ACCOUNT_CHAR
    WHERE strAccountID = @strAccountID;

    IF @@ROWCOUNT = 0
        RETURN 1;

    -- Nation/Race kontrolü
    IF (@bNation = 1 AND @bRace > 10)
        RETURN 2;

    IF (@bNation = 2 AND @bRace < 10)
        RETURN 2;

    -- Slot kontrolü
    IF (@index NOT BETWEEN 0 AND 2)
        RETURN 5;

    -- Maksimum karakter kontrolü
    IF (@bCharCount >= 3)
        RETURN 6;

    -- İsim kontrolü
    IF EXISTS (SELECT 1 FROM USERDATA WHERE strUserID = @strCharID)
        RETURN 3;

    -- Stat kontrolü
    IF (@bStr + @bSta + @bDex + @bIntel + @bCha) > 300
        RETURN 7;

    -- Class dönüşümü
    SET @NewClass =
    CASE @sClass
        WHEN 101 THEN 106
        WHEN 102 THEN 108
        WHEN 103 THEN 110
        WHEN 104 THEN 112
        WHEN 201 THEN 206
        WHEN 202 THEN 208
        WHEN 203 THEN 210
        WHEN 204 THEN 212
        ELSE NULL
    END;

    IF @NewClass IS NULL
        RETURN 8;

    BEGIN TRY

        BEGIN TRAN;

        -- Slot yerleştirme
        IF (@index = 0)
        BEGIN
            UPDATE ACCOUNT_CHAR
            SET
                strCharID1 = @strCharID,
                bCharNum = bCharNum + 1
            WHERE strAccountID = @strAccountID
            AND strCharID1 IS NULL;
        END
        ELSE IF (@index = 1)
        BEGIN
            UPDATE ACCOUNT_CHAR
            SET
                strCharID2 = @strCharID,
                bCharNum = bCharNum + 1
            WHERE strAccountID = @strAccountID
            AND strCharID2 IS NULL;
        END
        ELSE
        BEGIN
            UPDATE ACCOUNT_CHAR
            SET
                strCharID3 = @strCharID,
                bCharNum = bCharNum + 1
            WHERE strAccountID = @strAccountID
            AND strCharID3 IS NULL;
        END

        IF @@ROWCOUNT = 0
        BEGIN
            ROLLBACK TRAN;
            RETURN 9;
        END

        -- Karakter oluşturma
        INSERT INTO USERDATA
        (
            strUserID,
            Nation,
            Race,
            Class,
            HairRGB,
            Face,
            Strong,
            Sta,
            Dex,
            Intel,
            Cha,
            Level,
            Points,
            Hp,
            Mp,
            strSkill,
            bLevelRebirth
        )
        VALUES
        (
            @strCharID,
            @bNation,
            @bRace,
            @NewClass,
            @nHair,
            @bFace,
            @bStr,
            @bSta,
            @bDex,
            @bIntel,
            @bCha,
            1,
            0,
            100,
            100,
            '',
            0
        );

        COMMIT TRAN;

    END TRY
    BEGIN CATCH

        IF @@TRANCOUNT > 0
            ROLLBACK TRAN;

        RETURN ERROR_NUMBER();

    END CATCH

    RETURN 0;
END
GO



 
Son düzenleme:

Konuyu Görüntüleyen Kullanıcılar (Toplam:3)