Files
Client/Server/Database/DBScript/GameDB/Part2 UPDATE/2006.11.01-2160-스펠유지 시스템/InsertChar(Procedure).sql
LGram16 dd97ddec92 Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 20:17:20 +09:00

125 lines
3.3 KiB
Transact-SQL

CREATE PROCEDURE dbo.InsertChar
@user_uid AS INT, /* 유저 고유 아이디 */
@user_pos AS INT, /* 캐릭터 위치 (3개의 슬롯) */
@user_name AS VARCHAR(16), /* 캐릭터 이름 */
@user_Sex AS TINYINT, /* 캐릭터 성 */
@user_Hair AS TINYINT, /* 캐릭터 머리 모양 */
@user_Face AS TINYINT, /* 캐릭터 얼굴 모양 */
@user_Nation AS TINYINT, /* 캐릭터 국가 */
@user_Class AS SMALLINT, /* 캐릭터 클래스 */
@C_Gold AS INT, /* 캐릭터 소지금 */
@C_STR AS SMALLINT, /* 캐릭터 STR */
@C_DEX AS SMALLINT, /* 캐릭터 DEX */
@C_CON AS SMALLINT, /* 캐릭터 CON */
@C_INT AS SMALLINT, /* 캐릭터 INT */
@C_WIS AS SMALLINT, /* 캐릭터 WIS */
@PointX AS REAL, /* 캐릭터 Point X 좌표 */
@PointY AS REAL, /* 캐릭터 Point Y 좌표 */
@PointZ AS REAL, /* 캐릭터 Point Z 좌표 */
@C_Equip AS varBINARY(30), /* 장비 (2 * 15 = 30) */
@Skill AS varBinary(84),
@UserInfoType TINYINT,
@CID INT OUTPUT
AS
SET NOCOUNT ON
--DECLARE @UID INT
DECLARE @C_HP INT, @C_MP INT
/* 캐릭터 이름 확인 */
SELECT @CID = CID FROM CharInfo WHERE Name = @user_name
IF @CID <> 0
BEGIN
SET @CID = -1 /* 동일 이름 존재 */
RETURN
END
/* 슬롯 확인 */
DECLARE @CharSlot INT
IF @user_pos = 0
BEGIN
SELECT @CharSlot = Char1 FROM UserInfo WHERE UID = @user_uid AND OldServerGroupID = @UserInfoType
END
ELSE IF @user_pos = 1
BEGIN
SELECT @CharSlot = Char2 FROM UserInfo WHERE UID = @user_uid AND OldServerGroupID = @UserInfoType
END
ELSE IF @user_pos = 2
BEGIN
SELECT @CharSlot = Char3 FROM UserInfo WHERE UID = @user_uid AND OldServerGroupID = @UserInfoType
END
ELSE IF @user_pos = 3
BEGIN
SELECT @CharSlot = Char4 FROM UserInfo WHERE UID = @user_uid AND OldServerGroupID = @UserInfoType
END
ELSE IF @user_pos = 4
BEGIN
SELECT @CharSlot = Char5 FROM UserInfo WHERE UID = @user_uid AND OldServerGroupID = @UserInfoType
END
IF @CharSlot <> 0
BEGIN
SET @CID = -2 /* 슬롯이 차있음 */
RETURN
END
SET @C_HP = 100 + @C_CON * 8 + 2
IF @C_INT > @C_WIS
BEGIN
SET @C_MP = 100 + @C_INT * 8 + 2
END
ELSE
BEGIN
SET @C_MP = 100 + @C_WIS * 8 + 2
END
BEGIN TRAN
SELECT @CID = MAX(CID) + 1 FROM CharInfo WITH (UPDLOCK)
IF (@CID IS NULL)
SET @CID = 1
INSERT INTO CharInfo (CID,Name, Sex, Hair, Face, Race, Class, Equip, Gold, STR, DEX, CON, Intell, WIS, HP, MP)
VALUES (@CID,@user_name, @user_Sex, @user_Hair, @user_Face, @user_Nation, @user_Class, @C_Equip, @C_Gold, @C_STR, @C_DEX, @C_CON, @C_INT, @C_WIS, @C_HP, @C_MP)
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
SET @CID = -100
RETURN
END
COMMIT TRAN
INSERT INTO CharInfoEx (CID) VALUES (@CID)
INSERT INTO CharItem (CID) VALUES (@CID)
INSERT INTO CharItemEx (CID) VALUES (@CID)
INSERT INTO CharSkill (CID, Skill) VALUES (@CID, @Skill)
INSERT INTO CharSpell (CID) VALUES (@CID)
INSERT INTO CharPos (CID, LastPointX, LastPointY, LastPointZ, SavePointX, SavePointY, SavePointZ) VALUES (@CID, @PointX, @PointY, @PointZ, @PointX, @PointY, @PointZ)
INSERT INTO CharInfo_Time(CID,CreateTime,UpdateTime)
VALUES (@CID,GETDATE(),GETDATE())
INSERT INTO Friend (CID) VALUES (@CID)
INSERT INTO Quest (CID) VALUES (@CID)
-- UnifiedCharList정보테이블에 입력하기
INSERT TblUnifiedCharList(UID,OldServerGroupID,BeforeCID,NewCID,BeforeCharName)
VALUES (@user_uid,@UserInfoType,@CID,@CID,@user_name)
/* 유저 정보 테이블 업데이트 */
EXEC UpdateCharUID @user_uid, @user_pos, @CID , @UserInfoType
GO