USE [Server01]GO
/****** Object: StoredProcedure [dbo].[set_cabal_character] Script Date: 01/09/2016 18:32:41 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[set_cabal_character]
(
@SETFLAGS INT,
@WORLDIDX INT, @POSITION INT,
@LEV INT, @EXP BIGINT, @STR INT,
@DEX INT, @INT INT, @PNT INT,
@RANK INT, @ALZ BIGINT, @STYLE INT,
@FLAGS INT, @HP INT, @MP INT, @SP INT, @DP INT, @LastDpGetTime INT,
@SWDPNT INT, @MAGPNT INT, @RANKEXP INT,
@PENALTYEXP INT, @RP INT, @REPUTATION INT,
@WARPBFIELD INT, @MAPSBFIELD INT, @PKPENALTY INT, @NATION TINYINT,
@EQUIP_DATA VARBINARY(512),
@EQUIP_LOCK_DATA VARBINARY(128),
@INVENTORY_DATA VARBINARY(8000),
@SOLDITEM_DATA VARBINARY(512),
@SKILLIST_DATA VARBINARY(1024),
@QUICKSLOT_DATA VARBINARY(512),
@ABILITY_POINT INT,
@ABILITY_EXP_POINT INT,
@ABILITY_POINT_TOTAL INT,
@PASSIVE_ABILITY_DATA VARBINARY(512),
@BLENDED_ABILITY_DATA VARBINARY(256),
@ASSISTANT_DATA VARBINARY(512),
@BBEAD_DATA VARBINARY(512),
@QUEST_DATA VARBINARY(128),
@QUEST_DATAFLAGS VARBINARY(512),
@DEL_QUEST_DATAFLAGS VARBINARY(512),
@DailyQuest VARBINARY(2048),
@LastDailyQuestResetTime BIGINT,
@QDUN_DATA VARBINARY(128),
@MDUN_DATA VARBINARY(128),
@EMS_DATA VARBINARY(1024),
@CHARACTERIDX INT,
@CRAFTLEVEL0 INT,
@CRAFTLEVEL1 INT,
@CRAFTLEVEL2 INT,
@CRAFTLEVEL3 INT,
@CRAFTLEVEL4 INT,
@CRAFTEXP0 INT,
@CRAFTEXP1 INT,
@CRAFTEXP2 INT,
@CRAFTEXP3 INT,
@CRAFTEXP4 INT,
@CRAFTFLAGS VARBINARY(16),
@WAREHOUSE_DATA VARBINARY(8000),
@WAREHOUSE_DATA_EX VARBINARY(8000),
@WAREHOUSE_DATA_EX2 VARBINARY(8000),
@USERNUM INT,
@WAREHOUSEALZ BIGINT,
@RESERVED1 BIGINT,
@RESERVED2 BIGINT,
@WAREXP BIGINT,
@WAREXPEARN BIGINT,
@WAREXPUSED BIGINT,
@GUILDAXPPOINT INT,
@SkillBuff VARBINARY(320),
@SkillBuffNonFixed VARBINARY(240),
@MultiPotionBuff VARBINARY(320),
@MultiPotionBuffNonFixed VARBINARY(240),
@GMBuff VARBINARY(320),
@GMBuffNonFixed VARBINARY(240),
@ForceCaliburBuff VARBINARY(320),
@ForceCaliburBuffNonFixed VARBINARY(240),
@RemainedSP INT,
@BattleModeType TINYINT,
@BattleOverCharge TINYINT,
@BattleMasteryLevel TINYINT,
@AuraModeType TINYINT,
@AuraOverCharge TINYINT,
@AuraMasteryLevel TINYINT,
@RidingStatus INT
, @ShapeChangeEquip VARBINARY(300)
, @ShapeChangeInven VARBINARY(3000)
, @ShowTitleIdx INT
, @ApplyTitleIdx INT
, @AchievementPoint VARBINARY(64)
, @DailyOpenTime BIGINT
, @LinkOpenTime BIGINT
, @LinkOpenCount int
, @AchievementData VARBINARY(4800)
, @TitleData VARBINARY(3600)
, @PartialAchievement VARBINARY(4000)
, @AchievementHistory VARBINARY(8000)
, @SharedAchievementData VARBINARY(8000)
, @SharedTitleData VARBINARY(8000)
, @AchievementOpen VARBINARY(8000)
)
AS
BEGIN
SET NOCOUNT ON
DECLARE @SETFLAGEQUIPMENT INT SET @SETFLAGEQUIPMENT = 0X00000001
DECLARE @SETFLAGINVENTORY INT SET @SETFLAGINVENTORY = 0X00000002
DECLARE @SETFLAGSKILLLIST INT SET @SETFLAGSKILLLIST = 0X00000004
DECLARE @SETFLAGQUICKSLOT INT SET @SETFLAGQUICKSLOT = 0X00000008
DECLARE @SETFLAGQUEST INT SET @SETFLAGQUEST = 0X00000010
DECLARE @SETFLAGQUESTDUNGEON INT SET @SETFLAGQUESTDUNGEON = 0X00000020
DECLARE @SETFLAGWAREHOUSE INT SET @SETFLAGWAREHOUSE = 0X00000040
DECLARE @SETFLAGBLESSINGBEAD INT SET @SETFLAGBLESSINGBEAD = 0X00000080
DECLARE @SETFLAGCRAFT INT SET @SETFLAGCRAFT = 0X00000100
DECLARE @SETFLAGALZ INT SET @SETFLAGALZ = 0X00000200
DECLARE @SETFLAGSOULABILITY INT SET @SETFLAGSOULABILITY = 0X00000400
DECLARE @SETFLAGEMSUSERSTATE INT SET @SETFLAGEMSUSERSTATE = 0X00000800
DECLARE @SETFLAGASSISTANT INT SET @SETFLAGASSISTANT = 0X00001000
-- 로그아웃시 로그아웃 시간 설정
DECLARE @UPDATETIME AS DATETIME
SET @UPDATETIME = GETDATE()
SET XACT_ABORT ON
BEGIN TRAN
-- CHARACTER
UPDATE CABAL_CHARACTER_TABLE SET
LEV = @LEV,
EXP = @EXP,
STR = @STR,
DEX = @DEX,
INT = @INT,
PNT = @PNT,
RANK = @RANK,
ALZ = CASE
WHEN ((@SETFLAGS & @SETFLAGALZ) <> 0) THEN @ALZ
ELSE ALZ
END,
WORLDIDX = @WORLDIDX,
POSITION = @POSITION,
STYLE = @STYLE,
FLAGS = @FLAGS,
HP = @HP,
MP = @MP,
SP = @SP,
SWDPNT = @SWDPNT,
MAGPNT = @MAGPNT,
RANKEXP = @RANKEXP,
PENALTYEXP = @PENALTYEXP,
RP = @RP,
REPUTATION = @REPUTATION,
WARPBFIELD = @WARPBFIELD,
MAPSBFIELD = @MAPSBFIELD,
PKPENALTY = @PKPENALTY,
NATION = @NATION,
LOGOUTTIME = @UPDATETIME,
PLAYTIME = PLAYTIME + DATEDIFF(MINUTE, LOGOUTTIME, @UPDATETIME),
RESERVED1 = CASE
WHEN ((@SETFLAGS & @SETFLAGALZ) <> 0) THEN @RESERVED1
ELSE RESERVED1
END
WHERE CHARACTERIDX = @CHARACTERIDX
--------------------------------------------------------------
-- DP
IF((@SETFLAGS & @SETFLAGEQUIPMENT) <> 0)
BEGIN
UPDATE CABAL_DUNGEONPOINT_TABLE SET DP = @DP, DPLastGetTime = @LastDPGetTime WHERE CHARACTERIDX = @CHARACTERIDX
END
--------------------------------------------------------------
-- EQUIPMENT
IF((@SETFLAGS & @SETFLAGEQUIPMENT) <> 0)
BEGIN
UPDATE CABAL_EQUIPMENT_TABLE SET DATA = @EQUIP_DATA WHERE CHARACTERIDX = @CHARACTERIDX
END
--------------------------------------------------------------
-- EQUIPMENT LOCK
IF((@SETFLAGS & @SETFLAGEQUIPMENT) <> 0)
BEGIN
UPDATE CABAL_EQUIPMENT_LOCK_TABLE SET DATA = @EQUIP_LOCK_DATA WHERE CHARACTERIDX = @CHARACTERIDX
END
----------------------------------------------------------------
-- INVENTORY
IF((@SETFLAGS & @SETFLAGINVENTORY) <> 0)
BEGIN
UPDATE CABAL_INVENTORY_TABLE SET DATA = @INVENTORY_DATA WHERE CHARACTERIDX = @CHARACTERIDX
END
----------------------------------------------------------------
--인벤가 동일하게 저장.
IF((@SETFLAGS & @SETFLAGINVENTORY) <> 0)
BEGIN
UPDATE CABAL_SOLD_ITEM_TABLE SET DATA = @SOLDITEM_DATA WHERE CHARACTERIDX = @CHARACTERIDX
END
-- SKILLLIST
IF((@SETFLAGS & @SETFLAGSKILLLIST) <> 0)
BEGIN
UPDATE CABAL_SKILLLIST_TABLE SET DATA = @SKILLIST_DATA WHERE CHARACTERIDX = @CHARACTERIDX
END
-------------------------------------------------------------------
IF((@SETFLAGS & @SETFLAGSOULABILITY) <> 0)
BEGIN
UPDATE CABAL_SOUL_ABILITY_TABLE SET ABILITYPOINT = @ABILITY_POINT, ABILITYEXP = @ABILITY_EXP_POINT,
PASSIVEABILITYDATA = @PASSIVE_ABILITY_DATA, BLENDEDABILITYDATA = @BLENDED_ABILITY_DATA,
POINTTOTAL = @ABILITY_POINT_TOTAL
WHERE CHARACTERIDX = @CHARACTERIDX
END
-------------------------------------------------------------------
---------------------------------------------------------------
-- QUICKSLOT
IF((@SETFLAGS & @SETFLAGQUICKSLOT) <> 0)
BEGIN
UPDATE CABAL_QUICKSLOT_TABLE SET DATA = @QUICKSLOT_DATA WHERE CHARACTERIDX = @CHARACTERIDX
END
----------------------------------------------------------------
-- QUEST (기본적으로 존재하기 때문에 언제나 업데이트)
IF((@SETFLAGS & @SETFLAGQUEST) <> 0)
BEGIN
UPDATE CABAL_QUESTDATA_TABLE
SET DATA = @QUEST_DATA, FLAGS = @QUEST_DATAFLAGS, DEL_FLAGS = @DEL_QUEST_DATAFLAGS,
DailyQuest = @DailyQuest, LastDailyQuestResetTime = @LastDailyQuestResetTime
WHERE CHARACTERIDX = @CHARACTERIDX
END
----------------------------------------------------------------
-- QUESTDUNGEON (기본적으로 존재하기 때문에 언제나 업데이트)
IF((@SETFLAGS & @SETFLAGQUESTDUNGEON) <> 0)
BEGIN
UPDATE CABAL_QDDATA_TABLE
SET FLAGS = @QDUN_DATA,
MDFLAGS = @MDUN_DATA
WHERE CHARACTERIDX = @CHARACTERIDX
END
----------------------------------------------------------------
-- EMS USERSTATE
IF((@SETFLAGS & @SETFLAGEMSUSERSTATE) <> 0)
BEGIN
UPDATE CABAL_EMS_USERSTATE_TABLE SET DATA = @EMS_DATA WHERE CHARACTERIDX = @CHARACTERIDX
END
----------------------------------------------------------------
-- WAREHOUSE
IF((@SETFLAGS & @SETFLAGWAREHOUSE) <> 0)
BEGIN
IF @USERNUM <> 0 BEGIN
UPDATE CABAL_WAREHOUSE_TABLE SET DATA = @WAREHOUSE_DATA, ALZ = @WAREHOUSEALZ, RESERVED1 = @RESERVED2 WHERE USERNUM = @USERNUM
DELETE FROM CABAL_WAREHOUSE_EXT_TABLE WHERE USERNUM = @USERNUM
IF DATALENGTH(@WAREHOUSE_DATA_EX) <> 0
BEGIN
INSERT INTO CABAL_WAREHOUSE_EXT_TABLE VALUES (@USERNUM, @WAREHOUSE_DATA_EX)
END
DELETE FROM CABAL_WAREHOUSE_EXT2_TABLE WHERE USERNUM = @USERNUM
IF DATALENGTH(@WAREHOUSE_DATA_EX2) <> 0
BEGIN
INSERT INTO CABAL_WAREHOUSE_EXT2_TABLE VALUES (@USERNUM, @WAREHOUSE_DATA_EX2)
END
END
END
----------------------------------------------------------------
-- ASSISTANT
IF((@SETFLAGS & @SETFLAGASSISTANT) <> 0)
BEGIN
IF @CHARACTERIDX <> 0 BEGIN
UPDATE cabal_Assistant_table SET DATA = @ASSISTANT_DATA WHERE CHARACTERIDX = @CHARACTERIDX
END
END
----------------------------------------------------------------
----------------------------------------------------------------
-- BLESSINGBEAD
IF((@SETFLAGS & @SETFLAGBLESSINGBEAD) <> 0)
BEGIN
IF @CHARACTERIDX <> 0 BEGIN
UPDATE CABAL_BBEAD_TABLE SET DATA = @BBEAD_DATA WHERE CHARACTERIDX = @CHARACTERIDX
END
END
----------------------------------------------------------------
-- CRAFT (기본적으로 존재하기 때문에 언제나 업데이트)
IF((@SETFLAGS & @SETFLAGCRAFT) <> 0)
BEGIN
UPDATE CABAL_CRAFT_TABLE SET LEVEL0 = @CRAFTLEVEL0,
LEVEL1 = @CRAFTLEVEL1, LEVEL2 = @CRAFTLEVEL2,
LEVEL3 = @CRAFTLEVEL3, LEVEL4 = @CRAFTLEVEL4,
EXP0 = @CRAFTEXP0, EXP1 = @CRAFTEXP1,
EXP2 = @CRAFTEXP2, EXP3 = @CRAFTEXP3,
EXP4 = @CRAFTEXP4, FLAGS = @CRAFTFLAGS
WHERE CHARACTERIDX = @CHARACTERIDX
END
------------------------------------------------------
-- 길드 랭킹 게시판 용
exec dbo.[guild_add_WarExpRank] @characterIdx, @warExpEarn
------------------------------------------------------
UPDATE CABAL_WAREXP_TABLE
SET WAREXP = @WAREXP, WAREXPEARN = @WAREXPEARN, WAREXPUSED = @WAREXPUSED, MODIFIEDDATETIME = GETDATE()
WHERE CHARACTERIDX = @CHARACTERIDX
IF(@@ROWCOUNT = 0)
BEGIN
INSERT INTO CABAL_WAREXP_TABLE VALUES(@CHARACTERIDX, @WAREXP, @WAREXPEARN, @WAREXPUSED, GETDATE())
END
----------------------------------------------------------------
UPDATE GUILDMEMBER
SET GUILDAXPPOINT = @GUILDAXPPOINT
WHERE CHARACTERINDEX = @CHARACTERIDX
----------------------------------------------------------------
-- Saved Buff
UPDATE cabal_saved_buff_table
SET
SkillBuff = @SkillBuff,
SkillBuffNonFixed = @SkillBuffNonFixed,
MultiPotionBuff = @MultiPotionBuff,
MultiPotionBuffNonFixed = @MultiPotionBuffNonFixed,
GMBuff = @GMBuff,
GMBuffNonFixed = @GMBuffNonFixed,
ForceCaliburBuff = @ForceCaliburBuff,
ForceCaliburBuffNonFixed = @ForceCaliburBuffNonFixed,
RemainedSP = @RemainedSP,
BattleModeType = @BattleModeType,
BattleOverCharge = @BattleOverCharge,
BattleMasteryLevel = @BattleMasteryLevel,
AuraModeType = @AuraModeType,
AuraOverCharge = @AuraOverCharge,
AuraMasteryLevel = @AuraMasteryLevel,
RidingStatus = @RidingStatus
WHERE CharacterIdx = @CHARACTERIDX
-- 아이템 외형 변경
UPDATE cabal_item_extend_table
SET
ShapeChangeEquip = @ShapeChangeEquip,
ShapeChangeInven = @ShapeChangeInven
WHERE CharacterIdx = @CHARACTERIDX
UPDATE [cabal_achievement_title]
SET
ShowTitleIdx = @ShowTitleIdx,
ApplyTitleIdx = @ApplyTitleIdx,
AchievementPoint = @AchievementPoint,
DailyOpenTime = @DailyOpenTime,
LinkOpenTime = @LinkOpenTime,
LinkOpenCount = @LinkOpenCount,
AchievementData = @AchievementData,
TitleData = @TitleData,
PartialAchievement = @PartialAchievement
WHERE CharacterIdx = @CHARACTERIDX
UPDATE [cabal_achievement_history]
SET AchievementHistory = @AchievementHistory
WHERE CharacterIdx = @CHARACTERIDX
UPDATE [cabal_achievement_title_shared]
SET
SharedAchievementData = @SharedAchievementData,
SharedTitleData = @SharedTitleData
WHERE UserNum = (@CHARACTERIDX / 8)
UPDATE [cabal_achievement_open]
SET AchievementOpen = @AchievementOpen
WHERE CharacterIdx = @CHARACTERIDX
COMMIT
END