Code:
/**
return value :
0 = There is no error.
**/
USE SRO_VT_SHARD
SET NOCOUNT ON
SET XACT_ABORT ON
DECLARE @vcPrintMessage varchar(1024)
----------------------------------------------------------------------------------------------------
, @inyType tinyint = 1
, @vcShopCodeName varchar(128) = 'TEST_NPC'
, @vcShopModel varchar(512) = 'npc\npc\chinasystem_bookmakergirl.bsr'
, @vcShopFortress varchar(32) = 'xxx'
, @vcTargetCharName varchar(64) = 'CharName'
, @insRotation smallint = 360
, @vcShopTabCodeName varchar(32) = 'AVATAR'
, @inyShopGroupID tinyint = 1
----------------------------------------------------------------------------------------------------
IF XACT_STATE() = -1
BEGIN
SET @vcPrintMessage = '1'
END
BEGIN TRY
IF @inyType IN (2, 3)
BEGIN
DECLARE @inyTabID tinyint
SELECT TOP 1 @inyTabID = RIGHT(CodeName128, 1) + 1
FROM _RefShopTab
WHERE Service = 1
AND RefTabGroupCodeName LIKE 'STORE_' + @vcShopCodeName + '_GROUP_'
ORDER BY CodeName128 DESC
IF @inyTabID IS NULL
BEGIN
SET @vcPrintMessage = '2'
GOTO ErrorHandler
END
END
IF @inyType = 1
BEGIN
DECLARE @insRegionID smallint
, @rlPosX real
, @rlPosY real
, @rlPosZ real
, @intGameWorldID int
, @intObjLink int
, @intObjID int
, @intTacticsID int
, @intHiveID int
IF 'NPC_' + @vcShopCodeName IN (SELECT CodeName128 FROM _RefObjCommon WHERE CodeName128 = 'NPC_' + @vcShopCodeName)
BEGIN
SET @vcPrintMessage = '3'
GOTO ErrorHandler
END
ELSE IF @vcShopModel NOT LIKE '%.bsr'
BEGIN
SET @vcPrintMessage = '4'
GOTO ErrorHandler
END
ELSE IF @vcShopFortress NOT IN (SELECT CodeName128 FROM _RefSiegeFortress WHERE Service = 1) AND @vcShopFortress != 'xxx'
BEGIN
SET @vcPrintMessage = '5'
GOTO ErrorHandler
END
ELSE IF @insRotation NOT BETWEEN 0 AND 360
BEGIN
SET @vcPrintMessage = '6'
GOTO ErrorHandler
END
SELECT @insRegionID = LatestRegion
, @rlPosX = PosX
, @rlPosY = PosY
, @rlPosZ = PosZ
, @intGameWorldID = WorldID
FROM dbo._Char
WHERE CharName16 = @vcTargetCharName
IF @insRegionID IS NULL
BEGIN
SET @vcPrintMessage = '8'
GOTO ErrorHandler
END
ELSE IF @intGameWorldID NOT IN (SELECT ID FROM _RefGame_World)
BEGIN
SET @vcPrintMessage = '7'
GOTO ErrorHandler
END
BEGIN TRANSACTION
INSERT dbo._RefObjChar
VALUES (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 336860180, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
SET @intObjLink = SCOPE_IDENTITY()
INSERT dbo._RefObjCommon
VALUES (1, 'NPC_' + @vcShopCodeName, '?? ?? ????', 'xxx', 'SN_NPC_' + @vcShopCodeName, 'xxx', 0, 1, 1, 2, 2, 0, 5000, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, @vcShopModel, 'xxx', 'xxx', @vcShopFortress, 'xxx', @intObjLink)
SET @intObjID = SCOPE_IDENTITY()
INSERT dbo._RefShop
VALUES (1, 15, 'STORE_' + @vcShopCodeName, -1, 'xxx', -1, 'xxx', -1, 'xxx', -1, 'xxx')
INSERT dbo._RefShopGroup
VALUES (1, 15, 'GROUP_STORE_' + @vcShopCodeName, 'NPC_' + @vcShopCodeName, -1, 'xxx', -1, 'xxx', -1, 'xxx', -1, 'xxx')
INSERT dbo._RefShopItemGroup
VALUES (1, 'STORE_' + @vcShopCodeName + '_GROUP1', 'SN_STORE_' + @vcShopCodeName + '_GROUP1')
INSERT dbo._RefShopTab
VALUES (1, 15, 'STORE_' + @vcShopCodeName + '_TAB1', 'STORE_' + @vcShopCodeName + '_GROUP1', 'SN_TAB_' + @vcShopTabCodeName)
INSERT dbo._RefShopTabGroup
VALUES (1, 15, 'STORE_' + @vcShopCodeName + '_GROUP1', 'SN_STORE_' + @vcShopCodeName + '_GROUP1')
INSERT dbo._RefMappingShopGroup
VALUES (1, 15, 'GROUP_STORE_' + @vcShopCodeName, 'STORE_' + @vcShopCodeName)
INSERT dbo._RefMappingShopWithTab
VALUES (1, 15, 'STORE_' + @vcShopCodeName, 'STORE_' + @vcShopCodeName + '_GROUP1')
SELECT @intTacticsID = MAX(dwTacticsID) + 10
FROM dbo.Tab_RefTactics
INSERT dbo.Tab_RefTactics
VALUES (@intTacticsID, @intObjID, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'NPC_' + @vcShopCodeName)
INSERT dbo.Tab_RefHive
VALUES (0, 0, 0, 0, 0, 0, @intGameWorldID, 2, 'NPC_' + @vcShopCodeName)
SET @intHiveID = SCOPE_IDENTITY()
INSERT dbo.Tab_RefNest
VALUES (@intHiveID, @intTacticsID, @insRegionID, @rlPosX, @rlPosY, @rlPosZ, CEILING(POWER(2, 15) * (-1) + ((CONVERT(float, POWER(2, 16) - 1) / 360) * ((@insRotation + 90) % 360))), 0, 0, 0, 0, 0, 1, 0, 1, 0)
COMMIT TRANSACTION
END
ELSE IF @inyType = 2
BEGIN
DECLARE @inyGroupID tinyint
IF 'NPC_' + @vcShopCodeName NOT IN (SELECT CodeName128 FROM _RefObjCommon WHERE CodeName128 = 'NPC_' + @vcShopCodeName)
BEGIN
SET @vcPrintMessage = '9'
GOTO ErrorHandler
END
SELECT TOP 1 @inyGroupID = RIGHT(RefTabGroupCodeName, 1) + 1
FROM _RefMappingShopWithTab
WHERE Service = 1
AND RefShopCodeName = 'STORE_' + @vcShopCodeName
ORDER BY RefTabGroupCodeName DESC
IF @inyGroupID > 8
BEGIN
SET @vcPrintMessage = '10'
GOTO ErrorHandler
END
BEGIN TRANSACTION
INSERT dbo._RefShopItemGroup
VALUES (1, 'STORE_' + @vcShopCodeName + '_GROUP' + CAST(@inyGroupID AS VARCHAR(1)), 'SN_STORE_' + @vcShopCodeName + '_GROUP' + CAST(@inyGroupID AS VARCHAR(1)))
INSERT dbo._RefShopTab
VALUES (1, 15, 'STORE_' + @vcShopCodeName + '_TAB' + @inyTabID , 'STORE_' + @vcShopCodeName + '_GROUP' + CAST(@inyGroupID AS VARCHAR(1)), 'SN_TAB_' + @vcShopTabCodeName)
INSERT dbo._RefShopTabGroup
VALUES (1, 15, 'STORE_' + @vcShopCodeName + '_GROUP' + + CAST(@inyGroupID AS VARCHAR(1)), 'SN_STORE_' + @vcShopCodeName + '_GROUP' + + CAST(@inyGroupID AS VARCHAR(1)))
INSERT dbo._RefMappingShopWithTab
VALUES (1, 15, 'STORE_' + @vcShopCodeName, 'STORE_' + @vcShopCodeName + '_GROUP' + + CAST(@inyGroupID AS VARCHAR(1)))
COMMIT TRANSACTION
END
ELSE IF @inyType = 3
BEGIN
DECLARE @inyTabCount tinyint
IF 'NPC_' + @vcShopCodeName NOT IN (SELECT CodeName128 FROM _RefObjCommon WHERE CodeName128 = 'NPC_' + @vcShopCodeName)
BEGIN
SET @vcPrintMessage = '11'
GOTO ErrorHandler
END
ELSE IF 'STORE_' + @vcShopCodeName + '_GROUP' + CAST(@inyShopGroupID AS VARCHAR(1)) NOT IN (SELECT RefTabGroupCodeName FROM _RefMappingShopWithTab)
BEGIN
SET @vcPrintMessage = '12'
GOTO ErrorHandler
END
SELECT TOP 1 @inyTabCount = RIGHT(CodeName128, 1) + 1
FROM _RefShopTab
WHERE Service = 1
AND RefTabGroupCodeName = 'STORE_' + @vcShopCodeName + '_GROUP' + CAST(@inyShopGroupID AS VARCHAR(1))
ORDER BY CodeName128 DESC
IF @inyTabCount > 4
BEGIN
SET @vcPrintMessage = '13'
GOTO ErrorHandler
END
BEGIN TRANSACTION
INSERT dbo._RefShopTab
VALUES (1, 15, 'STORE_' + @vcShopCodeName + '_TAB' + CAST(@inyTabID AS VARCHAR(1)), 'STORE_' + @vcShopCodeName + '_GROUP' + CAST(@inyShopGroupID AS VARCHAR(1)), 'SN_TAB_' + @vcShopTabCodeName)
COMMIT TRANSACTION
END
END TRY
BEGIN CATCH
GOTO ErrorHandler
END CATCH
PRINT '0'
RETURN
ErrorHandler:
IF XACT_STATE() <> 0
ROLLBACK TRANSACTION
PRINT @vcPrintMessage
RETURN






