[Release] vSRO adding npc querry

08/02/2017 08:47 leo2111#1
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
08/02/2017 09:00 EdwardTeach+-#2
nice one gr8 job
08/02/2017 10:04 SubZero**#3
Good Work Very Useful!
08/02/2017 11:04 B1Q#4
Nice good job how much querry add item npc?
08/03/2017 13:30 leo2111#5
Quote:
Originally Posted by B1QB0SS :3 View Post
Nice good job how much querry add item npc?
100$
08/07/2017 14:16 desal12533#6
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