PHP Code:
USE [SRO_VT_SHARD]
GO
/****** Object: StoredProcedure [dbo].[_AddNewChar] Script Date: 1/29/2015 8:12:20 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[_AddNewChar]
@UserJID INT,
--@CharSlot INT,
@RefCharID INT,
@CharName varchar (64),
@CharScale tinyINT,
@StartRegionID INT,
@StartPos_X real,
@StartPos_Y real,
@StartPos_Z real,
@DefaultTeleport INT,
@RefMailID INT,
@RefPantsID INT,
@RefBootsID INT,
@RefWeaponID INT,
@RefShield INT,
@DurMail tinyINT,
@DurPants tinyINT,
@DurBoots tinyINT,
@DurWeapon tinyINT,
@DurShield tinyINT,
@DefaultArrow INT
AS
SET NOCOUNT ON
DECLARE @Slot INT
DECLARE @temp INT
DECLARE @NewCharID INT
SET @NewCharID = 0
-----------------------------------------------------------------------------
-- 1. 캐릭터 슬롯 넘버가 valid한 것인지, 그리고 빈슬롯이 맞는지 먼저 체크한다.
-----------------------------------------------------------------------------
-- start by novice.
SELECT @temp = count(CharID) FROM _User WITH (NOLOCK) WHERE UserJID = @UserJID
IF (@temp >= 4)
BEGIN
-- 너무 많자나
RETURN -2
END
-- finish by novice.
-----------------------------------------------------------------------------
-- 2. 캐릭터 추가하기
-----------------------------------------------------------------------------
IF (@CharScale > 68) -- 0100 0100 --> 68 이다!
BEGIN
-- 캐릭터 생성 실패! 스케일 값이 이상하다!
RETURN -3
END
EXEC @temp = _IsExistingCharName @CharName
IF (@temp <> 0)
BEGIN
-- 이미 사용중인 이름이라는데?
RETURN -4
END
BEGIN TRANSACTION
-- 인던시스템이 적용되면�* 마지막에 WorldID와 1값을 더 넣어 주었다!
INSERT INTO _Char (RefObjID, CharName16, Scale, Strength, Intellect, LatestRegion,PosX, PosY, PosZ, AppointedTeleport, InventorySize,
LastLogout, CurLevel, MaxLevel, RemainGold, RemainStatPoint, RemainSkillPoint, HP, MP, JobLvl_Trader, JobLvl_Hunter, JobLvl_Robber, WorldID)
VALUES (@RefCharID, @CharName, @CharScale, 20, 20, 27091, 853.681, 622.920532, 966.03125, 2094, 109,
GetDate(), 1, 1, 5000000, 0,1000000, 200,200, 1, 1, 1, 1)
SET @NewCharID = @@IDENTITY
IF (@@ERROR <> 0 OR @@ROWCOUNT = 0)
BEGIN
-- 캐릭터 생성 실패!
ROLLBACK TRANSACTION
RETURN -5
END
-- start by novice.
-- 이제 Slot 안쓴다.. 그냥 Insert 만..
INSERT INTO _User VALUES (@UserJID, @NewCharID)
-- finish by novice.
-----------------------------------------------------------------------------
-- 3-1. 장비 슬롯 채우기
-- [인벤토리 슬롯 96개] + [장비슬롯 13개] <- 인벤토리 확장 �*비스 후 48개에�* 96개로 증가!!!(woos0)
-----------------------------------------------------------------------------
--PATCH WARNING!!!PATCH WARNING!!!PATCH WARNING!!!PATCH WARNING!!!PATCH WARNING!!!PATCH WARNING!!!PATCH WARNING!!!PATCH WARNING!!!PATCH WARNING!!!
INSERT INTO _Inventory(CharID, Slot, ItemID)
SELECT @NewCharID, cnt, 0
FROM _RefDummySlot with( nolock )
WHERE cnt < 109
IF (@@ERROR <> 0)
BEGIN
-- 인벤토리 생성 실패!
ROLLBACK TRANSACTION
RETURN -7
END
--PATCH WARNING!!!PATCH WARNING!!!PATCH WARNING!!!PATCH WARNING!!!PATCH WARNING!!!PATCH WARNING!!!PATCH WARNING!!!PATCH WARNING!!!PATCH WARNING!!!
-- 디폴트로 선택한 아이템을 다시 넣어주자...
/* 요런 순�*로 정의되어 있다.
0: EQUIP_SLOT_HELM
1: EQUIP_SLOT_MAIL,
2: EQUIP_SLOT_SHOULDERGUARD,
3: EQUIP_SLOT_GAUNTLET,
4: EQUIP_SLOT_PANTS,
5: EQUIP_SLOT_BOOTS,
6: EQUIP_SLOT_WEAPON,
7: EQUIP_SLOT_SHIELD or ARROW,
8: EQUIP_SLOT_EARRING,
9: EQUIP_SLOT_NECKLACE,
10: EQUIP_SLOT_L_RING,
11: EQUIP_SLOT_R_RING,
*/
DECLARE @ItemID BIGINT
SET @ItemID = 0
-- 상갑
IF (@RefMailID <> 0)
BEGIN
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 1, @RefMailID, @DurMail
IF (@ItemID <= 0)
BEGIN
ROLLBACK TRANSACTION
RETURN -8
END
END
-- 바지
IF (@RefPantsID <> 0)
BEGIN
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 4, @RefPantsID, @DurPants
IF (@ItemID <= 0)
BEGIN
ROLLBACK TRANSACTION
RETURN -9
END
END
-- Boots
IF (@RefBootsID <> 0)
BEGIN
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 5, @RefBootsID, @DurBoots
IF (@ItemID <= 0)
BEGIN
ROLLBACK TRANSACTION
RETURN -10
END
END
-- Weapon
IF (@RefWeaponID <> 0)
BEGIN
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 6, @RefWeaponID, @DurWeapon
IF (@ItemID <= 0)
BEGIN
ROLLBACK TRANSACTION
RETURN -11
END
END
-- 방패
IF (@RefShield <> 0)
BEGIN
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 7, @RefShield, @DurShield
IF (@ItemID <= 0)
BEGIN
ROLLBACK TRANSACTION
RETURN -12
END
END
-- 혹시 default로 선택한 무기가 활이라면 �*살 250개들이 활통도 함께 준다. 죠치?
IF (@DefaultArrow <> 0)
BEGIN
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 7, @DefaultArrow, 250
IF (@ItemID <= 0)
BEGIN
ROLLBACK TRANSACTION
RETURN -13
END
END
-----------------------------------------------------------------------------
-- 3-2. 아바타 Inventory 슬롯 채우기
-- [아바타 인벤토리 슬롯 5개]
-- APPLY_AVATAR_SYSTEM이 적용되면�* 추가되는 부분
-----------------------------------------------------------------------------
--PATCH WARNING!!!PATCH WARNING!!!PATCH WARNING!!!PATCH WARNING!!!PATCH WARNING!!!PATCH WARNING!!!PATCH WARNING!!!PATCH WARNING!!!PATCH WARNING!!!
-----------------------------------------------------------------------------
-- default skill넣어주기
-----------------------------------------------------------------------------
DECLARE @country tinyINT
EXEC @country = _GetObjCountry @RefCharID
INSERT INTO _CharSkillMastery (CharID, MasteryID, Level)
SELECT @NewCharID, MasteryID, 0
FROM _RefCharDefault_SkillMastery with(nolock)
WHERE Race = @country or Race = 3
IF (@@error <> 0)
BEGIN
ROLLBACK TRANSACTION
RETURN -15
END
INSERT INTO _CharSkill (CharID,SkillID,Enable)
SELECT @NewCharID, SkillID, 1
FROM _RefCharDefault_Skill with(nolock)
WHERE Race = @country or Race = 3
IF (@@error <> 0)
BEGIN
ROLLBACK TRANSACTION
RETURN -16
END
-----------------------------------------------------------------------------
-- 기본 퀘스트 넣어주기
-----------------------------------------------------------------------------
INSERT INTO _CharQuest (CharID, QuestID, Status, AchievementCount, StartTime, EndTime, QuestData1, QuestData2)
SELECT @NewCharID, ID, 1, 0, getdate(), getdate(), 0, 0
FROM _RefQuest
WHERE CodeName in (SELECT CodeName FROM _RefCharDefault_Quest with(nolock) WHERE (Race = @country or Race = 3) and RequiredLevel = 1 and Service = 1)
IF (@@error <> 0)
BEGIN
ROLLBACK TRANSACTION
RETURN -17
END
-----------------------------------------------------------------------------
-- Static Avatar Initial Record 넣기
-----------------------------------------------------------------------------
INSERT INTO _StaticAvatar(CharID) values(@NewCharID)
IF (@@ERROR <> 0)
BEGIN
ROLLBACK TRANSACTION
RETURN -18
END
-----------------------------------------------------------------------------
-- Trijob 채워넣기!!!!!
-----------------------------------------------------------------------------
INSERT INTO _CharTrijob VALUES (@NewCharID, 0, 1, 0, 0, 0)
IF (@@ERROR <> 0)
BEGIN
-- 인벤토리 생성 실패!
ROLLBACK TRANSACTION
RETURN -19
END
-------------------------
exec _ADD_ITEM_EXTERN @CharName,'ITEM_EVENT_COS_C_PEGASUS_SCROLL',5,1
exec _ADD_ITEM_EXTERN @CharName,'ITEM_EVENT_HP_SUPERSET_5_BAG',8000,1
exec _ADD_ITEM_EXTERN @CharName,'ITEM_EVENT_MP_SUPERSET_5_BAG',8000,1
exec _ADD_ITEM_EXTERN @CharName,'ITEM_EVENT_ARCHEMY_POTION_SPEED_11',10,1
exec _ADD_ITEM_EXTERN @CharName,'ITEM_EVENT_HWAN_POTION',3,1
exec _ADD_ITEM_EXTERN @CharName,'ITEM_MALL_AVATAR_M_ADMIRAL',1,1
exec _ADD_ITEM_EXTERN @CharName,'ITEM_MALL_AVATAR_M_ADMIRAL_ATTACH',1,1
exec _ADD_ITEM_EXTERN @CharName,'ITEM_MALL_AVATAR_M_ADMIRAL_HAT',1,1
exec _ADD_ITEM_EXTERN @CharName,'ITEM_MALL_AVATAR_W_ADMIRAL',1,1
exec _ADD_ITEM_EXTERN @CharName,'ITEM_MALL_AVATAR_W_ADMIRAL_ATTACH',1,1
exec _ADD_ITEM_EXTERN @CharName,'ITEM_MALL_AVATAR_W_ADMIRAL_HAT',1,1
exec _ADD_ITEM_EXTERN @CharName,'ITEM_EVENT_REVERSE_RETURN_SCROLL',11,1
exec _ADD_ITEM_EXTERN @CharName,'ITEM_EVENT_AVATAR_M_NASRUN',1,1
exec _ADD_ITEM_EXTERN @CharName,'ITEM_EVENT_AVATAR_W_NASRUN',1,1
-- Start Euro Full Gear ----
if @RefCharID <=14887 And @RefCharID >=14875 And @RefMailID = '11623' -- Euro Male Germant
begin
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 0, 12175, 39 --HAT
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 2, 12211, 39 --SHOULDER
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 3, 12319, 39 --HAND
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 9, 14695, 0 --Earring
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 10, 14731, 0 --NECKLACE
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 11, 14659, 0 --RING
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 12, 14659, 0 --RING
END
if @RefCharID <=14887 And @RefCharID >=14875 And @RefMailID = '11617' -- Euro Male Armor
begin
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 0, 11671, 45 --HAT
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 2, 11707, 45 --SHOULDER
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 3, 11815, 45 --HAND
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 9, 14695, 0 --Earring
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 10, 14731, 0 --NECKLACE
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 11, 14659, 0 --RING
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 12, 14659, 0 --RING
END
if @RefCharID <=14887 And @RefCharID >=14875 And @RefMailID = '11620' -- Euro Male protector
begin
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 0, 11923, 39 --HAT
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 2, 11959, 39 --SHOULDER
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 3, 12067, 39 --HAND
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 9, 14695, 0 --Earring
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 10, 14731, 0 --NECKLACE
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 11, 14659, 0 --RING
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 12, 14659, 0 --RING
END
--- Female Side ! ------
if @RefCharID <=14900 And @RefCharID >=14888 And @RefMailID = '11632' -- Euro female Germant
begin
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 0, 13687, 32 --HAT
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 2, 13723, 32 --SHOULDER
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 3, 13831, 32 --HAND
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 9, 14695, 0 --Earring
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 10, 14731, 0 --NECKLACE
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 11, 14659, 0 --RING
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 12, 14659, 0 --RING
END
if @RefCharID <=14900 And @RefCharID >=14888 And @RefMailID = '11626' -- Euro female Armor
begin
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 0, 13183, 45 --HAT
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 2, 13219, 45 --SHOULDER
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 3, 13327, 45 --HAND
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 9, 14695, 0 --Earring
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 10, 14731, 0 --NECKLACE
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 11, 14659, 0 --RING
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 12, 14659, 0 --RING
END
if @RefCharID <=14900 And @RefCharID >=14888 And @RefMailID = '11629' -- Euro female protector
begin
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 0, 13435, 39 --HAT
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 2, 13471, 39 --SHOULDER
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 3, 13579, 39 --HAND
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 9, 14695, 0 --Earring
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 10, 14731, 0 --NECKLACE
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 11, 14659, 0 --RING
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 12, 14659, 0 --RING
END
-- End --
-- Start China Full Gear ----
IF @RefCharID<=1919 AND @RefCharID>=1907 and @RefMailID = '3643' -- Chinesse Male Gear CLOTHES
BEGIN
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 0, 791, 39 --HAT
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 2, 863, 39 --SHOULDER
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 3, 971, 39 --HAND
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 9, 1835, 0 --Earring
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 10, 1871, 0 --NECKLACE
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 11, 1799, 0 --RING
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 12, 1799, 0 --RING
END
IF @RefCharID<=1919 AND @RefCharID>=1907 and @RefMailID = '3637' -- Chinesse Male Gear ARRMOR
begin
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 0, 287, 48 --HAT
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 2, 359, 48 --SHOULDER
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 3, 467, 48 --HAND
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 9, 1835, 0 --Earring
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 10, 1871, 0 --NECKLACE
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 11, 1799, 0 --RING
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 12, 1799, 0 --RING
end
IF @RefCharID<=1919 AND @RefCharID>=1907 and @RefMailID = '3640' -- Chinesse Male Gear LIGHT
begin
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 0, 539, 44 --HAT
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 2, 611, 44 --SHOULDER
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 3, 719, 44 --HAND
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 9, 1835, 0 --Earring
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 10, 1871, 0 --NECKLACE
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 11, 1799, 0 --RING
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 12, 1799, 0 --RING
END
--- Female Side ! ------
IF @RefCharID<=1932 AND @RefCharID>=1920 and @RefMailID = '3652' -- Chinesse Woman Gear CLOTHES
BEGIN
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 0, 1547, 39 --HAT
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 2, 1619, 39 --SHOULDER
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 3, 1727, 39 --HAND
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 9, 1835, 0 --Earring
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 10, 1871, 0 --NECKLACE
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 11, 1799, 0 --RING
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 12, 1799, 0 --RING
END
IF @RefCharID<=1932 AND @RefCharID>=1920 and @RefMailID = '3646' -- Chinesse Woman Gear ARRMOR
begin
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 0, 1043, 48 --HAT
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 2, 1115, 48 --SHOULDER
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 3, 1223, 48 --HAND
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 9, 1835, 0 --Earring
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 10, 1871, 0 --NECKLACE
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 11, 1799, 0 --RING
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 12, 1799, 0 --RING
end
IF @RefCharID<=1932 AND @RefCharID>=1920 and @RefMailID = '3649' -- Chinesse Woman Gear LIGHT
begin
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 0, 1295, 44 --HAT
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 2, 1367, 44 --SHOULDER
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 3, 1475, 44 --HAND
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 9, 1835, 0 --Earring
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 10, 1871, 0 --NECKLACE
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 11, 1799, 0 --RING
EXEC @ItemID = _FN_ADD_INITIAL_EQUIP @NewCharID, 12, 1799, 0 --RING
END
---
insert into _InventoryForAvatar (CharID,slot,ItemID) SELECT @NewCharID, cnt, 0
FROM _RefDummySlot with( nolock )
WHERE cnt < 5
-- Quick Slot 정보 저장용!!!
exec _AddNewClientConfig @NewCharID -- by novice...... for saving client configurations...
COMMIT TRANSACTION
RETURN @NewCharID