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.
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
);
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);
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()
);
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);
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;
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;
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ş');
Sorularınız veya geliştirme önerileriniz varsa konu altından paylaşabilirsiniz.
