VSRO | Weapon Switcher (Improved Version)

Konuyu başlatan #1

senua

ViP Üye
Katılım
18 Ağu 2017
Mesajlar
266
Beğeniler
67
Konum
Istanbul
Merhaba arkadaşlar, yine eksikliğini hissettiğim weapon switcher konusu ile karşınızdayım. Çeşitli forumlarda ve vsro forumda paylaşılan kodlar çok uzun şekilde ve sadece 1 item için yazılmış şekilde bulunuyor. Tüm itemler için 4, 5 farklı switcher yapmak itersek satırlarca kod yazmamız gerekiyor bu paylaşılan kodlara göre. Bu durum beni rahatsız etti ve kolları sıvadım :)

İlk olarak 10 DG weaponları Database de kopyaladım codename128'lerin sonuna _TYPE_13 eklediğimi bilmenizi isterim. Paylaşacağım prosedürü buna göre yazdım tabi siz istediğiniz şekilde yapıp prosedürde düzenlemede yapabilirsiniz.

Sıfırdan tüm sistemi paylaşmıyorum item kodları vs çok uzun burada sadece item değişimini yapacak olan prosedürün kendisi paylaşıyorum fikir oluşturması açısından. Her neyse prosedürü okuduğunuz zaman çalışma mantığını anlayacağını umuyorum.

Klasik kodlardan farkı nedir diye soracak olursanız, burada biz tüm item'leri tek bir kodla değiştirilebilir yapmış oluyoruz.

SQL:
USE SRO_VT_LOG
GO
CREATE PROCEDURE SWITCHER_WE_TYPE_13
@CharID INT
AS
BEGIN TRY
    BEGIN TRANSACTION UPDATE_PROCESS_FOR_TYPE_13

        DECLARE @OldItemCodeName VARCHAR(129)=
        (SELECT ROC.CodeName128 FROM SRO_VT_SHARD.._Inventory AS INV
        INNER JOIN SRO_VT_SHARD.._Items AS I ON I.ID64=INV.ItemID AND INV.Slot=6 AND INV.ItemID<>0 AND INV.CharID=@CharID
        INNER JOIN SRO_VT_SHARD.._RefObjCommon AS ROC ON I.RefItemID=ROC.ID AND ROC.TypeID1=3 AND ROC.TypeID2=1 AND ROC.TypeID3=6)

        DECLARE @ItemTypeNormal VARCHAR(5)=(SELECT RIGHT(@OldItemCodeName,5))
        DECLARE @ItemTypeSox VARCHAR(10)=(SELECT RIGHT(@OldItemCodeName,10))

        IF( @ItemTypeNormal IN ('_10_A','_10_B','_10_C') OR @ItemTypeSox IN ('_10_A_RARE','_10_B_RARE','_10_C_RARE'))
        BEGIN
      
            DECLARE @NewItemID INT=(SELECT ID FROM SRO_VT_SHARD.._RefObjCommon WITH (NOLOCK) WHERE CodeName128=@OldItemCodeName+'_TYPE_13')

            IF (@NewItemID IS NOT NULL)
            BEGIN
                UPDATE I SET I.RefItemID=@NewItemID
                FROM SRO_VT_SHARD.._Inventory AS INV
                INNER JOIN SRO_VT_SHARD.._Items AS I ON I.ID64=INV.ItemID AND INV.Slot=6 AND INV.ItemID<>0 AND INV.CharID=@CharID
            END
        END

    COMMIT TRANSACTION UPDATE_PROCESS_FOR_TYPE_13
END TRY
BEGIN CATCH
    ROLLBACK TRANSACTION UPDATE_PROCESS_FOR_TYPE_13
    PRINT 'Error has been occured while updating process for TYPE_13'
END CATCH
 
Son düzenleme:
Üst