|
USE [Test]
GO
/****** Object: StoredProcedure [dbo].[_STRG_EQUIP_ITEM_UPGRADE] Script Date: 31/12/2016 11:51:19 ص ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[_STRG_EQUIP_ITEM_UPGRADE]
@CharID INT,
@UgdSuccess TINYINT,
@UgdEquipSlot TINYINT,
@UgdStoneSlot TINYINT,
@UgdRefItemID INT = 0,
@UgdOptLevel TINYINT = 0,
@UgdVariance BIGINT = 0,
@UgdData INT = 0,
@UgdCreateName VARCHAR(64) = '',
@UgdMagParamNum TINYINT = 0,
@UgdMagParam1 BIGINT = 0,
@UgdMagParam2 BIGINT = 0,
@UgdMagParam3 BIGINT = 0,
@UgdMagParam4 BIGINT = 0,
@UgdMagParam5 BIGINT = 0,
@UgdMagParam6 BIGINT = 0,
@UgdMagParam7 BIGINT = 0,
@UgdMagParam8 BIGINT = 0,
@UgdMagParam9 BIGINT = 0,
@UgdMagParam10 BIGINT = 0,
@UgdMagParam11 BIGINT = 0,
@UgdMagParam12 BIGINT = 0
AS
DECLARE @UgdEquipID64 BIGINT
DECLARE @UgdEquipRefID INT
DECLARE @UgdEquipSerial64 BIGINT
DECLARE @UgdEquipTID2 TINYINT
DECLARE @UgdEquipTID3 TINYINT
DECLARE @UgdEquipItemClass TINYINT
DECLARE @UgdStoneID64 BIGINT
DECLARE @UgdStoneRefID INT
DECLARE @UgdStoneSerial64 BIGINT
DECLARE @UgdStoneCount INT
DECLARE @CheckTID3_1 INT
DECLARE @CheckTID3_2 INT
SET @UgdEquipID64 = 0
SET @UgdEquipRefID = 0
SET @UgdEquipSerial64 = 0
SET @UgdEquipTID2 = 0
SET @UgdEquipTID3 = 0
SET @UgdEquipItemClass = 0
SET @UgdStoneRefID = 0
SET @UgdStoneID64 = 0
SET @UgdStoneSerial64 = 0
SET @UgdStoneCount = 0
SET @CheckTID3_1 = 0
SET @CheckTID3_2 = 0
-- ى—…ê·¸ë*ˆى´ë“œ ى„±ê³µ / ى‹¤يŒ¨ى—گ 대ي•œ 결과값 ى*€ى¥
DECLARE @UpgradeResult TABLE
(
Type TINYINT,
RefItemID INT,
Slot TINYINT,
[Count] INT,
ID64 BIGINT,
Serial64 BIGINT
)
-- ي•´ë‹¹ ى؛گë¦*ي„°ê°€ ى،´ى¬ي•کëٹ”ى§€ ي™•ى¸
IF NOT EXISTS ( SELECT * FROM _Char WITH (NOLOCK) WHERE CharID = @CharID )
BEGIN
INSERT @UpgradeResult VALUES( 0, -1, 0, 0, 0, 0 )
SELECT * FROM @UpgradeResult
RETURN
END
-- ى—…ê·¸ë*ˆى´ë“œي•* ى¥ë¹„ ى•„ى´ي…œê³¼ ى„±ى¥ى„ىک ItemID를 ي™•ى¸
SELECT @UgdEquipID64 = ISNULL( MAX(ItemID), 0 ) FROM _Inventory WITH (NOLOCK) WHERE CharID = @CharID AND Slot = @UgdEquipSlot
SELECT @UgdStoneID64 = ISNULL( MAX(ItemID), 0 ) FROM _Inventory WITH (NOLOCK) WHERE CharID = @CharID AND Slot = @UgdStoneSlot
IF( @UgdEquipID64 = 0 OR @UgdStoneID64 = 0 )
BEGIN
INSERT @UpgradeResult VALUES( 0, -2, 0, 0, 0, 0 )
SELECT * FROM @UpgradeResult
RETURN
END
-- ى—…ê·¸ë*ˆى´ë“œي•* ى¥ë¹„ ى•„ى´ي…œىک ëچ°ى´ي„°ë¥¼ ى–»ى–´ىک¨ë‹¤!!!
SELECT @UgdEquipRefID = ISNULL( MAX(RefItemID), 0 ), @UgdEquipSerial64 = ISNULL( MAX(Serial64), 0 )
FROM _Items AS I WITH (NOLOCK)
JOIN _ItemPool AS IP WITH (NOLOCK) ON I.ID64 = IP.ItemID
WHERE ID64 = @UgdEquipID64 AND IP.InUse = 1
IF( @UgdEquipRefID = 0 OR @UgdEquipSerial64 = 0 )
BEGIN
INSERT @UpgradeResult VALUES( 0, -3, 0, 0, 0, 0 )
SELECT * FROM @UpgradeResult
RETURN
END
-- ي•´ë‹¹ ى—…ê·¸ë*ˆى´ë“œي•* ى•„ى´ي…œى´ ى¥ë¹„ ى•„ى´ي…œى´ê³* 11ى°¨ ى´ىƒپ, Rarityê°€ 2(ë*ˆى–´) OR 6(ë*ˆى–´ى…‹يٹ¸)ى¸ى§€ ي™•ى¸ (11ى°¨ ى´ىƒپë§Œ ى—…ê·¸ë*ˆى´ë“œ ê°€ëٹ¥!!!)
SELECT @UgdEquipTID2 = ISNULL( MAX(ROC.TypeID2), 0 ), @UgdEquipTID3 = ISNULL( MAX(ROC.TypeID3), 0 ), @UgdEquipItemClass = ( ( ISNULL( MAX(ROI.ItemClass), 0 ) + 2 ) / 3 )
FROM _RefObjCommon AS ROC JOIN _RefObjItem AS ROI ON ROC.Link = ROI.ID
WHERE ROC.ID = @UgdEquipRefID AND ROC.TypeID1= 3 AND ROC.TypeID2 = 1 AND ROI.ItemClass > 30
IF( @UgdEquipTID2 = 0 OR @UgdEquipTID3 = 0 OR @UgdEquipItemClass = 0 )
BEGIN
INSERT @UpgradeResult VALUES( 0, -4, 0, 0, 0, 0 )
SELECT * FROM @UpgradeResult
RETURN
END
-- ى„±ى¥ى„ ى•„ى´ي…œى—گ 대ي•œ ëچ°ى´ي„°ë¥¼ ى–»ى–´ىک¨ë‹¤.
SELECT @UgdStoneRefID = ISNULL( MAX(RefItemID), 0 ), @UgdStoneCount = ISNULL( MAX(Data), 0 ), @UgdStoneSerial64= ISNULL( MAX(Serial64), 0 )
FROM _Items AS I WITH (NOLOCK)
JOIN _ItemPool AS IP WITH (NOLOCK) ON I.ID64 = IP.ItemID
WHERE ID64 = @UgdStoneID64 AND IP.InUse = 1
IF( @UgdStoneRefID = 0 OR @UgdStoneSerial64 = 0 OR @UgdStoneCount = 0 )
BEGIN
INSERT @UpgradeResult VALUES( 0, -5, 0, 0, 0, 0 )
SELECT * FROM @UpgradeResult
RETURN
END
-- ى„±ى¥ى„ ى•„ى´ي…œى´ ى‹¤ى*œ ى„±ى¥ى„ ى•„ى´ي…œ يƒ€ى…ى¸ى§€ ي™•ى¸ي•کىگ!!!
-- ى„±ى¥ى„ىک FreeParam1 : 대ىƒپ ى¥ë¹„ ى•„ى´ي…œىک ى°¨ىˆک
-- ى„±ى¥ى„ىک FreeParam2 : 대ىƒپ ى¥ë¹„ ى•„ى´ي…œىک TypeID2
-- ى„±ى¥ى„ىک FreeParam3 : 대ىƒپ ى¥ë¹„ ى•„ى´ي…œىک TypeID3(비يٹ¸ë§ˆىٹ¤ي‚¹)
-- ى„±ى¥ى„ىک FreeParam4 : 대ىƒپ ى¥ë¹„ ى•„ى´ي…œىک TypeID3(비يٹ¸ë§ˆىٹ¤ي‚¹)
SELECT @CheckTID3_1 = ISNULL( MAX(ROI.Param3), 0 ), @CheckTID3_2 = ISNULL( MAX(ROI.Param4), 0 )
FROM _RefObjCommon AS ROC JOIN _RefObjItem AS ROI ON ROC.Link = ROI.ID
WHERE ROC.ID = @UgdStoneRefID AND ROI.Param1 = @UgdEquipItemClass AND ROI.Param2 = @UgdEquipTID2
IF ( @CheckTID3_1 = 0 AND @CheckTID3_2 = 0 )
BEGIN
INSERT @UpgradeResult VALUES( 0, -6, 0, 0, 0, 0 )
SELECT * FROM @UpgradeResult
RETURN
END
DECLARE @Cnt TINYINT
DECLARE @TID3_1 TINYINT
DECLARE @TID3_2 TINYINT
DECLARE @IsEqualTID3 TINYINT
SET @Cnt = 0
SET @TID3_1 = 0
SET @TID3_2 = 0
SET @IsEqualTID3 = 0
WHILE( @Cnt <= 3 )
BEGIN
SET @TID3_1 = ( @CheckTID3_1 / POWER( 2 , 8 * @Cnt ) ) & 0xFF
SET @TID3_2 = ( @CheckTID3_2 / POWER( 2 , 8 * @Cnt ) ) & 0xFF
IF( @UgdEquipTID3 IN ( @TID3_1, @TID3_2) )
BEGIN
-- ى¥ë¹„ ى•„ى´ي…œê³¼ ى„±ى¥ى„ىک 대ىƒپ TID3ى´ ëڈ™ى¼ي•ک구ë‚ک!!!
SET @IsEqualTID3 = 1
BREAK
END
SET @Cnt = @Cnt + 1
END
-- ى¥ë¹„ ى•„ى´ي…œê³¼ ى„±ى¥ى„ىک 대ىƒپ TID3ى´ ëڈ™ى¼ي•کى§€ ى•ٹ구ë‚ک!!!
IF( @IsEqualTID3 = 0 )
BEGIN
INSERT @UpgradeResult VALUES( 0, -7, 0, 0, 0, 0 )
SELECT * FROM @UpgradeResult
RETURN
END
DECLARE @ErrorCode INT
SET @ErrorCode = 0
BEGIN TRANSACTION
-- ى¼ë‹¨ ى—…ê·¸ë*ˆى´ë“œ ى„±ê³µ/ى‹¤يŒ¨ ى—¬ë¶€ë¥¼ ë–*ë‚کى„œ ى„±ى¥ى„ى€ ى‚*ى*œي•´ى£¼ىگ!!!
IF( @UgdStoneCount > 1 )
BEGIN
-- ى„±ى¥ى„ىک ê°¯ىˆکê°€ 1ى´ىƒپى´ë‹¤;;;
UPDATE _Items Set Data = @UgdStoneCount - 1 WHERE ID64 = @UgdStoneID64
IF( @@ERROR <> 0 )
BEGIN
ROLLBACK TRANSACTION
INSERT @UpgradeResult VALUES( 0, -8, 0, 0, 0, 0 )
SELECT * FROM @UpgradeResult
RETURN
END
SET @UgdStoneCount = @UgdStoneCount -1
END
ELSE
BEGIN
EXEC @ErrorCode = _STRG_DEL_ITEM_NoTX 1, @CharID, @UgdStoneSlot
IF( @ErrorCode < 0 )
BEGIN
ROLLBACK TRANSACTION
INSERT @UpgradeResult VALUES( 0, -9, 0, 0, 0, 0 )
SELECT * FROM @UpgradeResult
RETURN
END
SET @UgdStoneCount = 0
END
SET @UgdStoneCount = @UgdStoneCount - 1
IF( @UgdSuccess = 1 )
BEGIN
-- ي•´ë‹¹ ى¥ë¹„ ى•„ى´ي…œى„ ى—…ê·¸ë*ˆى´ë“œ ي•کىگ!!!
IF NOT EXISTS ( SELECT * FROM _RefObjCommon WHERE ID = @UgdRefItemID )
BEGIN
ROLLBACK TRANSACTION
INSERT @UpgradeResult VALUES( 0, -10, 0, 0, 0, 0 )
SELECT * FROM @UpgradeResult
RETURN
END
-- ىٹ¹ê³„ي•œ ىکµë*ˆë²¨ى€ 12ى´ي•کى´ë‹¤!!! (12ى°¨ ى´ىƒپى€ ىکµë*ˆë²¨ 15ê°€ ىµىک¤!!!)
DECLARE @MAX_OPT_LEVEL TINYINT
SET @MAX_OPT_LEVEL = 15
IF( @UgdOptLevel > @MAX_OPT_LEVEL )
BEGIN
ROLLBACK TRANSACTION
INSERT @UpgradeResult VALUES( 0, -11, 0, 0, 0, 0 )
SELECT * FROM @UpgradeResult
RETURN
END
-- 매ى§پىکµى…ک ê°¯ىˆکëٹ” 12개를 ى´ˆê³¼ي•* ىˆک ى—†ë‹¤!!!
DECLARE @MAX_MGC_OPT_NUM TINYINT
SET @MAX_OPT_LEVEL = 12
IF( @UgdMagParamNum > @MAX_MGC_OPT_NUM )
BEGIN
ROLLBACK TRANSACTION
INSERT @UpgradeResult VALUES( 0, -12, 0, 0, 0, 0 )
SELECT * FROM @UpgradeResult
RETURN
END
-- 문ى*œê°€ ى—†ë‹¤ë©´ ي•´ë‹¹ ى•„ى´ي…œى„ ى—…ê·¸ë*ˆى´ë“œ ي•کىگ!!!
UPDATE _Items SET RefItemID = @UgdRefItemID, OptLevel = @UgdOptLevel, Variance = @UgdVariance, Data = @UgdData, CreaterName = @UgdCreateName,
MagParamNum = @UgdMagParamNum, MagParam1 = @UgdMagParam1, MagParam2 = @UgdMagParam2, MagParam3 = @UgdMagParam3,
MagParam4 = @UgdMagParam4, MagParam5 = @UgdMagParam5, MagParam6 = @UgdMagParam6, MagParam7 = @UgdMagParam7, MagParam8 = @UgdMagParam8,
MagParam9 = @UgdMagParam9, MagParam10 = @UgdMagParam10, MagParam11 = @UgdMagParam11, MagParam12 = @UgdMagParam12
WHERE ID64 = @UgdEquipID64
IF( @@ROWCOUNT = 0 OR @@ERROR <> 0 )
BEGIN
ROLLBACK TRANSACTION
INSERT @UpgradeResult VALUES( 0, -13, 0, 0, 0, 0 )
SELECT * FROM @UpgradeResult
RETURN
END
-- يٹ¹ىˆک ى—کë¦*ى‹œë¥´ى—گ ىکي•´ ى¦ê°€ëگœ ىکµë*ˆë²¨ى´ ىˆىœ¼ë©´ ى‚*ى*œي•´ى£¼ىگ!!!
IF EXISTS (SELECT * FROM sysobjects WHERE Name = '_BindingOptionWithItem' AND Type = 'U' )
BEGIN
DELETE _BindingOptionWithItem WHERE nItemDBID = @UgdEquipID64 AND bOptType = 2
END
-- Type : 1 (ى•„ى´ي…œ ى—…ê·¸ë*ˆى´ë“œ), TypeID : 2 ( ى•„ى´ي…œ ى‚*ى*œ )
INSERT @UpgradeResult VALUES( 1, @UgdRefItemID, @UgdEquipSlot, 0, @UgdEquipID64, @UgdEquipSerial64 )
END
-- Type : 1 (ى•„ى´ي…œ ى—…ê·¸ë*ˆى´ë“œ), TypeID : 2 ( ى•„ى´ي…œ ى‚*ى*œ )
-- ى„±ى¥ى„ ى‚*ى*œى—گ 대ي•œ ë،œê·¸ë¥¼ 기ë،ي•کىگ!!!
INSERT @UpgradeResult VALUES( 2, @UgdStoneRefID, @UgdStoneSlot, @UgdStoneCount, @UgdStoneID64, @UgdStoneSerial64 )
COMMIT TRANSACTION
SELECT * FROM @UpgradeResult
|