vSRO Paylaşım vSRO İlk 100 Max Level Etkinliği V2 (Rütbe,Item ve Silk)

Admin1

silkroadpvp.com.tr
Yönetici
Katılım
26 Ocak 2022
Mesajlar
511
Tepkime puanı
0
Puanları
0
Konum
KRAL
[HIDE]
Herkese Merhaba,

Daha önce paylaştığım ve çok beğenildiğini, birçok editöre faydalı olduğunu gördüğüm için, İlk 100 Max Level Etkinliği konusunun aksine, ekstra olarak rütbe ve item verebileceğiniz özel bir prosedüre göre düzenledim.

Silk Ödülleri:

1. oyuncuya: 300 Silk
2 ile 10. sıralamadaki oyunculara: 200 Silk
11 ile 20. sıralamadaki oyunculara: 140 Silk
21 ile 30. sıralamadaki oyunculara: 130 Silk
31 ile 40. sıralamadaki oyunculara: 120 Silk
41 ile 50. sıralamadaki oyunculara: 110 Silk
51 ile 60. sıralamadaki oyunculara: 100 Silk
61 ile 70. sıralamadaki oyunculara: 90 Silk
71 ile 80. sıralamadaki oyunculara: 80 Silk
81 ile 90. sıralamadaki oyunculara: 70 Silk
91 ile 100. sıralamadaki oyunculara: 60 Silk
Item vermek için, özel olarak eklediğim notlardan yola çıkarak istediğiniz gibi düzenleyip, oyunculara istediğiniz Silk miktarını, itemi ve istediğiniz adetleri verebilirsiniz. Ayrıca rütbe ödüllerini de verebilirsiniz.


Toplamda 100 oyuncuya ulaştıktan sonra Etkinlik otomatik olarak sona erecektir.

NOT: Silk,Rütbe ve Item Maxiguard sistemine göre ayarlanmıştır. Farklı Bir guard kullanıyorsanız, kullandığınız guarda göre düzenlemeyi unutmayınız.

SQL:
IF (@EventID = 22 and @Data2 = 100)  ----  Data2 = 100 olarak ayarlandı istediğiniz seviyeye Göre ayarlayabilirisiniz. (_AddLogChar Prosedürene eklenmelidir.)
BEGIN

    Exec SRO_VT_LOG.._EventMaxLevelV2 @CharID

END
SQL:
USE [SRO_VT_LOG]
GO
/***Frenory*** Object:  StoredProcedure [dbo].[_EventMaxLevelV2]    Script Date: 24.01.2025 04:10:31 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


ALTER PROCEDURE [dbo].[_EventMaxLevelV2]
    @CharID INT
AS
BEGIN
    SET NOCOUNT ON

    DECLARE @Charname16 VARCHAR(16),
            @JID INT,
            @EventLevel INT = 100,
            @SilkAmount INT,
            @ItemCodeName VARCHAR(128),
            @HwanTitleLevel INT,
            @ItemQuantity INT,
            @Message NVARCHAR(MAX)

    SELECT @Charname16 = C.CharName16, @JID = U.UserJID
    FROM SRO_VT_SHARD.._Char AS C
    INNER JOIN SRO_VT_SHARD.dbo._User AS U ON C.CharID = U.CharID
    WHERE C.CharID = @CharID

    IF EXISTS (SELECT 1 FROM _EventMaxLevelCharV2 WHERE CharName = @Charname16)
    BEGIN
        RETURN
    END

    DECLARE @TotalCount INT
    SELECT @TotalCount = COUNT(*) + 1 FROM _EventMaxLevelCharV2

    IF @TotalCount <= 100
    BEGIN
        SET @SilkAmount = CASE
            WHEN @TotalCount = 1 THEN 300  ---Silk Miktarı
            WHEN @TotalCount BETWEEN 2 AND 10 THEN 200  ---Silk Miktarı
            WHEN @TotalCount BETWEEN 11 AND 20 THEN 140  ---Silk Miktarı
            WHEN @TotalCount BETWEEN 21 AND 30 THEN 130  ---Silk Miktarı
            WHEN @TotalCount BETWEEN 31 AND 40 THEN 120  ---Silk Miktarı
            WHEN @TotalCount BETWEEN 41 AND 50 THEN 110  ---Silk Miktarı
            WHEN @TotalCount BETWEEN 51 AND 60 THEN 100  ---Silk Miktarı
            WHEN @TotalCount BETWEEN 61 AND 70 THEN 90  ---Silk Miktarı
            WHEN @TotalCount BETWEEN 71 AND 80 THEN 80  ---Silk Miktarı
            WHEN @TotalCount BETWEEN 81 AND 90 THEN 70  ---Silk Miktarı
            WHEN @TotalCount BETWEEN 91 AND 100 THEN 60  ---Silk Miktarı
            ELSE 0
        END

        INSERT INTO _EventMaxLevelCharV2 (UserJID, CharID, CharName, Count, Zaman, EarnedSilk)
        VALUES (@JID, @CharID, @Charname16, @TotalCount, GETDATE(), @SilkAmount)
      
        DECLARE @PaymentSilkSystem VARCHAR(60)
        /*
         * Silk verme sistemini iki şekilde çalıştırabilirsiniz. (Varsayılan olarak "Maxiguard" eklenmiştir.)
         *
         * 1. Eğer PaymentSystem olarak Maxiguard kullanıyorsanız, sistem Maxiguard'ın komutuyla Silki verecektir.
         * 2. Eğer başka bir Guard kullanıyorsanız, SET @PaymentSystem = 'Maxiguard' komutunu silerek eski sistemi kullanabilirsiniz.
         */

        SET @PaymentSilkSystem = 'Maxiguard'  --(Düzenlenecek Yer)
      
            IF @PaymentSilkSystem = 'Maxiguard'
            BEGIN
                EXEC MaxiGuard_User..__AddSilkToCharacter @CharID, 0, @SilkAmount
              
                DECLARE  @SilkMessage VARCHAR(128) = FORMATMESSAGE('[%d] silk gained.', @SilkAmount)
              
                EXEC MaxiGuard_User.dbo._AddBridgeCommand 500, 'Silk', '18', @SilkMessage, @CharName16
              
            END
            ELSE BEGIN

                IF EXISTS (SELECT 1 FROM SRO_VT_ACCOUNT.dbo.SK_Silk WHERE JID = @JID)
                BEGIN
                    UPDATE SRO_VT_ACCOUNT.dbo.SK_Silk
                    SET silk_own = silk_own + @SilkAmount
                    WHERE JID = @JID
                END
                ELSE
                BEGIN
                    INSERT INTO SRO_VT_ACCOUNT.dbo.SK_Silk (JID, silk_own, silk_gift, silk_point)
                    VALUES (@JID, @SilkAmount, 0, 0)
                END
            END
          
        /*
         *********** ITEM REWARD SYSTEM ***********

      
         * Item verme sistemi, Silk verme sistemi ile aynı mantıkla çalışmaktadır.
         * Ancak bu sistem sadece MAXIGUARD ile çalışır.
         *
         * @PaymentItemSystem = 0 (Varsayılan olarak sıfırdır. Bu durumda sistem aktif değildir.)
         * @PaymentItemSystem = 1 yapıldığında sistem aktif hale gelir.
         *
         * 'CodeName1', 'CodeName2', ... gibi yazılar varsayılan olarak eklenmiştir.
         * İstediğiniz aralıktaki oyunculara belirlediğiniz itemleri ve adet miktarını Chest'e gönderebilirsiniz.
         *
         * Belirli bir aralıktaki oyunculara ödül vermek istiyorsanız, yalnızca o aralıktaki
         * 'CodeName' yazılarını düzenlemeniz yeterli olacaktır.
         *
         * NOT: Ödül miktarı varsayılan olarak "1" olarak ayarlanmıştır.
         */

      
        DECLARE @PaymentItemSystem INT = 0   --(Düzenlenecek Yer) (Aktif: 1 - Deaktif: 0)
      
            IF @PaymentItemSystem = 1
            BEGIN         
                SELECT @ItemCodeName = CASE
                        WHEN @TotalCount = 1 THEN 'CodeName1'
                        WHEN @TotalCount BETWEEN 2 AND 10 THEN 'CodeName2'
                        WHEN @TotalCount BETWEEN 11 AND 20 THEN 'CodeName3'
                        WHEN @TotalCount BETWEEN 21 AND 30 THEN 'CodeName4'
                        WHEN @TotalCount BETWEEN 31 AND 40 THEN 'CodeName5'
                        WHEN @TotalCount BETWEEN 41 AND 50 THEN 'CodeName6'
                        WHEN @TotalCount BETWEEN 51 AND 60 THEN 'CodeName7'
                        WHEN @TotalCount BETWEEN 61 AND 70 THEN 'CodeName8'
                        WHEN @TotalCount BETWEEN 71 AND 80 THEN 'CodeName9'
                        WHEN @TotalCount BETWEEN 81 AND 90 THEN 'CodeName10'
                        WHEN @TotalCount BETWEEN 91 AND 100 THEN 'CodeName11'
                        ELSE 'CodeNameDefault'
                    END,
                    @ItemQuantity = CASE
                        WHEN @TotalCount = 1 THEN 1    --Adet Miktarı
                        WHEN @TotalCount BETWEEN 2 AND 10 THEN 1   --Adet Miktarı
                        WHEN @TotalCount BETWEEN 11 AND 20 THEN 1   --Adet Miktarı
                        WHEN @TotalCount BETWEEN 21 AND 30 THEN 1   --Adet Miktarı
                        WHEN @TotalCount BETWEEN 31 AND 40 THEN 1   --Adet Miktarı
                        WHEN @TotalCount BETWEEN 41 AND 50 THEN 1   --Adet Miktarı
                        WHEN @TotalCount BETWEEN 51 AND 60 THEN 1   --Adet Miktarı
                        WHEN @TotalCount BETWEEN 61 AND 70 THEN 1   --Adet Miktarı
                        WHEN @TotalCount BETWEEN 71 AND 80 THEN 1   --Adet Miktarı
                        WHEN @TotalCount BETWEEN 81 AND 90 THEN 1   --Adet Miktarı
                        WHEN @TotalCount BETWEEN 91 AND 100 THEN 1   --Adet Miktarı
                        ELSE 1
                    END                 

                IF @ItemCodeName NOT LIKE '%CodeName%'
                BEGIN             
                    EXEC MaxiGuard_User.._AddItemToChest @CharID, @ItemCodeName, @TotalCount, 'Max Level Event'
                END
            END
          
        /* *********** HWAN TITLE REWARD SYSTEM ***********


         * Item verme sistemi, Silk verme sistemi ile aynı mantıkla çalışmaktadır.
         * Ancak bu sistem sadece MAXIGUARD ile çalışır.
         *
         * @PaymentTitleSystem = 0 (Varsayılan olarak sıfırdır. Bu durumda sistem aktif değildir.)
         * @PaymentTitleSystem = 1 yapıldığında sistem aktif hale gelir.
         *
         * Sistemde, istediğiniz aralıktaki oyunculara belirli rütbeler verebilirsiniz.
         * Eğer belirli bir aralıktaki oyunculara ödül vermek istiyorsanız, yalnızca o aralıktaki
         * '0' değerini düzenlemeniz yeterlidir. '0' olmayan oyuncular ödülden faydalanabilir.
         *
         * NOT: Hwan Level varsayılan '0' olarak ayarlanmıştır.
         */
        DECLARE @PaymentTitleSystem INT = 0   --(Düzenlenecek Yer) (Aktif: 1 - Deaktif: 0)
      
            IF @PaymentTitleSystem = 1
            BEGIN         
                SELECT @HwanTitleLevel = CASE
                        WHEN @TotalCount = 1 THEN 0    --HwanLevel
                        WHEN @TotalCount BETWEEN 2 AND 10 THEN 0   --HwanLevel
                        WHEN @TotalCount BETWEEN 11 AND 20 THEN 0   --HwanLevel
                        WHEN @TotalCount BETWEEN 21 AND 30 THEN 0   --HwanLevel
                        WHEN @TotalCount BETWEEN 31 AND 40 THEN 0   --HwanLevel
                        WHEN @TotalCount BETWEEN 41 AND 50 THEN 0  --HwanLevel
                        WHEN @TotalCount BETWEEN 51 AND 60 THEN 0   --HwanLevel
                        WHEN @TotalCount BETWEEN 61 AND 70 THEN 0   --HwanLevel
                        WHEN @TotalCount BETWEEN 71 AND 80 THEN 0   --HwanLevel
                        WHEN @TotalCount BETWEEN 81 AND 90 THEN 0   --HwanLevel
                        WHEN @TotalCount BETWEEN 91 AND 100 THEN 0   --HwanLevel
                        ELSE 0
                    END                 
              
                IF @HwanTitleLevel <> 0
                BEGIN             
                    INSERT INTO MaxiGuard_User.._BridgeCommands (CommandID, Executor, Data1, Data2, Date) VALUES (52,'MaxLevelEventTitle',@Charname16,@HwanTitleLevel,GETDATE())
                END
            END         
          
          
        SET @Message = FORMATMESSAGE('[%i]. Character Level %i : [%s] has earned Silk = [%i]', @TotalCount, @EventLevel, @Charname16, @SilkAmount)

        INSERT INTO MaxiGuard_User.._BridgeCommands (CommandID, Executor, Data1, Data2, Data3, Date)
        VALUES (500, 'Sistem', '17', @Message, 'Duyuru', GETDATE())

        IF @TotalCount = 100
        BEGIN
            INSERT INTO MaxiGuard_User.._BridgeCommands (CommandID, Executor, Data1, Data2, Data3, Date)
            VALUES (500, 'Sistem', '17', 'TOP 100 (' + CAST(@EventLevel AS VARCHAR(20)) + ') Level Event has ended.', 'Duyuru', GETDATE())
        END
    END
END
Ardından Tabloda kimlerin 100 Level olduğunu ve kaç kişinin Max Levele ulaştığını ve kazandığı silki Kayıt tuttuğumuz Tablomuz.
SQL:
CREATE TABLE [dbo].[_EventMaxLevelCharV2](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [UserJID] [int] NULL,
    [CharID] [int] NULL,
    [CharName] [varchar](16) NULL,
    [Count] [int] NULL,
    [Zaman] [datetime] NULL,
    [EarnedSilk] [int] NULL,
 CONSTRAINT [PK__EventMaxLevelV2] PRIMARY KEY CLUSTERED
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
[/HIDE]
 

Konu görüntüleyen kullanıcılar

Geri
Üst