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