vSRO Silkroad Online [MaxiGuard] Lucky Party No Etkinliği

  • Konuyu Başlatan Konuyu Başlatan Founder
  • Başlangıç tarihi Başlangıç tarihi

Founder

BozokBeyi
Admin
Katılım
27 Tem 2025
Konular
626
Mesajlar
823
Tepkime puanı
209
Puanları
43
Konum
Hotan
1767596902064.jpeg

🎉 MaxiGuard Lucky Party No Etkinliği – SilkroadPortal Özel Rehber

Merhabalar değerli SilkroadPortal üyeleri,

Bu konu içerisinde sizlerle, MaxiGuard altyapısı kullanılarak hazırlanmış olan
Lucky Party No Event sistemini paylaşacağım.

Bu etkinlikte, belirlenen süre içerisinde oluşturulan partiler arasından
rastgele bir parti numarası seçilir ve o partiye ait oyuncu otomatik olarak ödüllendirilir.

Başka bir rehberde görüşmek üzere, herkese iyi forumlar. 🚀




NOT:
Paylaşılan tablolar ve prosedürler SYSTEM veritabanı baz alınarak hazırlanmıştır.
Farklı bir DB yapısı kullanıyorsanız, gerekli alanları kendinize göre düzenlemeyi unutmayın.




1️⃣ Event Kontrol Tablosu (Settings_Basic)

Bu tablo, Lucky Party etkinliğinin aktif olup olmadığını kontrol etmek için kullanılır.

SQL:
CREATE TABLE Settings_Basic (
    Event NVARCHAR(100) NOT NULL PRIMARY KEY,
    Run NVARCHAR(50) NOT NULL,
    Service INT NOT NULL,
    Register INT NOT NULL DEFAULT 0,
    Rounds INT NULL,
    [Level] TINYINT NULL,
    Region INT NULL,
    PosX REAL NULL,
    PosY REAL NULL,
    PosZ REAL NULL,
    Place_Name NVARCHAR(MAX) NULL
);




2️⃣ Settings_Basic Tablosuna Varsayılan Kayıt Ekleme

SQL:
INSERT INTO Settings_Basic
(Event, Run, Service, Register, Rounds, Level, Region, PosX, PosY, PosZ, Place_Name)
VALUES
('Lucky Party', 0, 0, 0, 18, 0, NULL, NULL, NULL, NULL, NULL);




3️⃣ Lucky Party Kayıt Tablosu Oluşturma

Oluşturulan tüm partiler bu tabloda kayıt altına alınır.

SQL:
CREATE TABLE _LuckyParty (
    ID INT IDENTITY PRIMARY KEY,
    CharID INT NOT NULL,
    CharName VARCHAR(25) NOT NULL,
    RegionID INT NOT NULL,
    WorldID SMALLINT NOT NULL,
    PartyNo INT NOT NULL,
    CreatedTime DATETIME DEFAULT GETDATE()
);




4️⃣ Parti Oluşturulduğunda Kayıt Alma (Trigger/Hook)

Aşağıdaki kodu
MaxiGuard_User → _OnPartyMatchingCreated_EDIT içerisine ekleyin.

SQL:
INSERT INTO SRO_VT_SYSTEM.._LuckyParty
(CharID, CharName, RegionID, WorldID, PartyNo)
VALUES
(@CharID, @CharName, @RegionID, @WorldID, @PartyNo);




5️⃣ Lucky Party Event Kontrol Prosedürü

Bu prosedür:
• Event başlatır
• Rastgele parti numarası belirler
• Duyuruları yapar

SQL:
CREATE PROCEDURE dbo._Event_LuckyPartyNo
    @Type INT
AS
BEGIN
    DECLARE @Service INT = (SELECT Service FROM Settings_Basic WHERE Event = 'Lucky Party');
    DECLARE @WinnerPtNumber INT;
    DECLARE @RandomIncrement INT;

    SET @RandomIncrement = CAST((RAND() * 10) + 1 AS INT);

    SET @WinnerPtNumber =
        ISNULL((SELECT MAX(PartyNo) FROM SRO_VT_SYSTEM.._LuckyParty), 0)
        + 10 + @RandomIncrement;

    IF @Type = 1
    BEGIN
        INSERT INTO MaxiGuard_User.._BridgeCommands
        VALUES (500,'ServerMessage','17',
        '[Lucky Party Event] 5 dakika içinde başlayacak!', '', GETDATE());

        UPDATE Settings_Basic
        SET Service = 1, Rounds = @WinnerPtNumber
        WHERE Event = 'Lucky Party';
    END

    IF @Type = 2
    BEGIN
        INSERT INTO MaxiGuard_User.._BridgeCommands
        VALUES (500,'ServerMessage','17',
        '[Lucky Party Event] 1 dakika kaldı!', '', GETDATE());
    END

    IF @Type = 3 AND @Service = 1
    BEGIN
        INSERT INTO MaxiGuard_User.._BridgeCommands
        VALUES (500,'ServerMessage','17',
        '[Şanslı Parti Numarası Etkinliği] başladı!', '', GETDATE());

        INSERT INTO MaxiGuard_User.._BridgeCommands
        VALUES (500,'ff0000','21',
        '[Lucky Party] Kazanan Parti No: ' + CAST(@WinnerPtNumber AS VARCHAR), 'Duyuru', GETDATE());
    END
END;




6️⃣ Kazanan Belirleme & Ödül Verme Prosedürü

SQL:
CREATE PROCEDURE dbo._Event_LuckyPartyWinner
AS
BEGIN
    DECLARE @WinnerPartyNo INT =
        (SELECT Rounds FROM Settings_Basic WHERE Event = 'Lucky Party');

    DECLARE @WinnerName NVARCHAR(50);
    DECLARE @WinnerCharID INT;

    IF (SELECT COUNT(*) FROM _LuckyParty WHERE PartyNo = @WinnerPartyNo) < 1
    BEGIN
        INSERT INTO MaxiGuard_User.._BridgeCommands
        VALUES (500,'ServerMessage','17',
        '[Lucky Party Event] Kazanan bulunamadı.', '', GETDATE());

        UPDATE Settings_Basic SET Service = 0 WHERE Event = 'Lucky Party';
        RETURN;
    END

    SELECT TOP 1
        @WinnerName = CharName,
        @WinnerCharID = CharID
    FROM _LuckyParty
    WHERE PartyNo = @WinnerPartyNo
    ORDER BY ID DESC;

    INSERT INTO MaxiGuard_User.._BridgeCommands
    VALUES (500,'ServerMessage','17',
    '[Lucky Party Event] Kazanan: ' + @WinnerName, '', GETDATE());

    EXEC MaxiGuard_User..__AddSilkToCharacter
        @WinnerCharID, 0, 25;

    UPDATE Settings_Basic SET Service = 0 WHERE Event = 'Lucky Party';
END;




7️⃣ Scheduler – Otomatik Event Başlatma

Saatler test amaçlıdır, dilediğiniz gibi düzenleyebilirsiniz.

SQL:
INSERT INTO MaxiGuard_User.._Scheduler
VALUES
('Lucky Party - Başlangıç','0','13:00:00',
'EXEC SRO_VT_SYSTEM.._Event_LuckyPartyNo 1',1,'Başlangıç duyurusu');

INSERT INTO MaxiGuard_User.._Scheduler
VALUES
('Lucky Party - 1 Dakika','0','13:00:10',
'EXEC SRO_VT_SYSTEM.._Event_LuckyPartyNo 2',1,'Son dakika');

INSERT INTO MaxiGuard_User.._Scheduler
VALUES
('Lucky Party - Start','0','13:00:20',
'EXEC SRO_VT_SYSTEM.._Event_LuckyPartyNo 3',1,'Event start');

INSERT INTO MaxiGuard_User.._Scheduler
VALUES
('Lucky Party - Finish','0','13:00:30',
'EXEC SRO_VT_SYSTEM.._Event_LuckyPartyWinner',1,'Event bitiş');




✔️ Lucky Party No Event rehberi tamamlanmıştır.
Sorularınız veya geliştirme önerileriniz varsa konu altından paylaşabilirsiniz.​
 
Geri
Üst Alt
TR
EN
VI
AR
RU