Before you will proceed with ImperiaMuCMS installation please check your PHP setting for uploading files.
Open your php.ini in preferred text editor.
Search for "upload_max_filesize" setting.
If value of your config is less then "32M", update it to this value.
It might look like this:
; Maximum allowed size for uploaded files.
; PHP: Description of core php.ini directives - Manual
[Somente membros podem ver os links. ]
upload_max_filesize = 32M
This configuration will prevent errors during ImperiaMuCMS's database structure and data import. Value "32M" is the minimum recommend setting, however, you can put there any other size (e.g. 64M, 128M, 256M, etc.).
Installation of website
Download full package of ImperiaMuCMS from HERE.
Copy files from ImperiaMuCMS folder to your web server.
Open browser and go to <your_domain>/<relative_path>/install/index.php to start installation process.
Check system requirements.If everything is green (there can be red PDO drivers, but at least one must be green), continue on next step.
Enter license key and your email address what you used in registration form here on forums. If you provided correct information, license will be activated and you can continue on next step.
Generate configuration file. Enter SQL info, setup basic website stuff and write some info about your server. Continue on next step.
Click on "START INSTALLATION" button and wait until page will loads. After it will be done, you can remove install folder due to security reasons and change chmod of ./includes/config.php back to 664.
Update all IGCN server files located in ./includes/files/IGCN/ with your files used by Game Server.
Website is now ready to use. You can open ./includes/config.php to configure another stuff like administration access etc.
As a last step it's highly recommended to use "Special Tools" functionality in AdminCP to update data stored in database.
Use function "Add Items into Database" to import missing items into database.
Use function "Update Items in Database" to update existing items and their attributes based on your ItemList.xml configuration.
Use function "Add Items into Webshop" to import items into webshop automatically. After this operation review items in webshop and delete those which you don't want to sell.
Use function "Import Castle Siege Settings" to import your CS configs from server files to automatically setup Siege times in CS module.
Use function "Generate MonsterKillCount XML" to generate MonsterKillCount.xml data so your server files will keep information about every killed monster.
Add Online Time logging
After installation will be done, you will have to edit procedure WZ_DISCONNECT_MEMB.
1. Open MSSQL Management Studio.
2. Navigate to Databases -> Programmability -> Stored Procedures.
3. Find procedure "WZ_DISCONNECT_MEMB" -> right-click on it and select Modify.
4. Find "UPDATE MEMB_STAT" and add one more parameter into this SQL statement ", OnlineTime = OnlineTime+(DATEDIFF(mi,ConnectTM,getdate()))".
Before:
Code:
Código:
UPDATE MEMB_STAT set ConnectStat = @ConnectStat, DisConnectTM = getdate()
WHERE memb___id = @memb___id
After:
Code:
Código:
UPDATE MEMB_STAT set ConnectStat = @ConnectStat, DisConnectTM = getdate(), OnlineTime = OnlineTime+(DATEDIFF(mi,ConnectTM,getdate()))
WHERE memb___id = @memb___id
5. After this line add the code bellow (code is used to track online time by day).
Me_MuOnline + MuOnline databases:
Python:
Código:
IF (@ServerName IN ('MEDIUM-S1', 'MEDIUM-S2', 'MEDIUM-ARCA', 'MEDIUM-MARKET', 'MEDIUM-SIEGE', 'MEDIUM-BC'))
BEGIN
IF NOT EXISTS (SELECT AccountID FROM [MEDIUM_MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_ONLINE] WHERE AccountID = @memb___id AND Date = CAST(GETDATE() AS DATE))
INSERT INTO [MEDIUM_MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_ONLINE] (AccountID, OnlineTime, Date) VALUES (@memb___id, (DATEDIFF(mi, @ConnectTM, GETDATE())), CAST(GETDATE() AS DATE))
ELSE
UPDATE [MEDIUM_MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_ONLINE] SET OnlineTime = OnlineTime + (DATEDIFF(mi, @ConnectTM, GETDATE())) WHERE AccountID = @memb___id AND Date = CAST(GETDATE() AS DATE)
END
IF (@ServerName IN ('FAST-S1', 'FAST-S2', 'FAST-ARCA', 'FAST-MARKET', 'FAST-SIEGE', 'FAST-BC'))
BEGIN
IF NOT EXISTS (SELECT AccountID FROM [FAST_MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_ONLINE] WHERE AccountID = @memb___id AND Date = CAST(GETDATE() AS DATE))
INSERT INTO [FAST_MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_ONLINE] (AccountID, OnlineTime, Date) VALUES (@memb___id, (DATEDIFF(mi, @ConnectTM, GETDATE())), CAST(GETDATE() AS DATE))
ELSE
UPDATE [FAST_MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_ONLINE] SET OnlineTime = OnlineTime + (DATEDIFF(mi, @ConnectTM, GETDATE())) WHERE AccountID = @memb___id AND Date = CAST(GETDATE() AS DATE)
END
You must create this section for each server what you have. In this example are 2 sections - one for MEDIUM and one for FAST server.In first line are defined server names (from GameServer.ini config files). Database name is 3 times in script, in this example MEDIUM server has database called MEDIUM_MuOnline. In case of any issues with this task, please feel fre to create a topic in general support section.
Only MuOnline database:
Python:
Código:
IF NOT EXISTS (SELECT AccountID FROM IMPERIAMUCMS_TRIGGER_ONLINE WHERE AccountID = @memb___id AND Date = CAST(GETDATE() AS DATE))
INSERT INTO IMPERIAMUCMS_TRIGGER_ONLINE (AccountID, OnlineTime, Date) VALUES (@memb___id, (DATEDIFF(mi, @ConnectTM, GETDATE())), CAST(GETDATE() AS DATE))
ELSE
UPDATE IMPERIAMUCMS_TRIGGER_ONLINE SET OnlineTime = OnlineTime + (DATEDIFF(mi, @ConnectTM, GETDATE())) WHERE AccountID = @memb___id AND Date = CAST(GETDATE() AS DATE)
6. Press F5 to save modified procedure.
Here is an example of edited procedure WZ_DISCONNECT_MEMB with all ImperiaMuCMS modifications.
Me_MuOnline + MuOnline databases:
Python:
Código:
USE [Me_MuOnline]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER Procedure [dbo].[WZ_DISCONNECT_MEMB]
@memb___id varchar(10)
AS
BEGIN
SET NOCOUNT ON
DECLARE @find_id varchar(10)
DECLARE @ConnectStat tinyint
DECLARE @ConnectTM smalldatetime
DECLARE @ServerName varchar(20)
SET @ConnectStat = 0
SET @find_id = 'NOT'
SELECT @find_id = S.memb___id FROM MEMB_STAT S INNER JOIN MEMB_INFO I ON S.memb___id = I.memb___id
WHERE I.memb___id = @memb___id
IF( @find_id <> 'NOT' )
BEGIN
SELECT @ConnectTM = (SELECT ConnectTM FROM MEMB_STAT WHERE memb___id = @memb___id);
SELECT @ServerName = (SELECT ServerName FROM MEMB_STAT WHERE memb___id = @memb___id);
UPDATE MEMB_STAT set ConnectStat = @ConnectStat, DisConnectTM = getdate()
WHERE memb___id = @memb___id
IF (@ServerName IN ('MEDIUM-S1', 'MEDIUM-S2', 'MEDIUM-ARCA', 'MEDIUM-MARKET', 'MEDIUM-SIEGE', 'MEDIUM-BC'))
BEGIN
IF NOT EXISTS (SELECT AccountID FROM [S12_MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_ONLINE] WHERE AccountID = @memb___id AND Date = CAST(GETDATE() AS DATE))
INSERT INTO [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_ONLINE] (AccountID, OnlineTime, Date) VALUES (@memb___id, (DATEDIFF(mi, @ConnectTM, GETDATE())), CAST(GETDATE() AS DATE))
ELSE
UPDATE [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_ONLINE] SET OnlineTime = OnlineTime + (DATEDIFF(mi, @ConnectTM, GETDATE())) WHERE AccountID = @memb___id AND Date = CAST(GETDATE() AS DATE)
END
IF (@ServerName IN ('FAST-S1', 'FAST-S2', 'FAST-ARCA', 'FAST-MARKET', 'FAST-SIEGE', 'FAST-BC'))
BEGIN
IF NOT EXISTS (SELECT AccountID FROM [S12_MuOnline_N].[dbo].[IMPERIAMUCMS_TRIGGER_ONLINE] WHERE AccountID = @memb___id AND Date = CAST(GETDATE() AS DATE))
INSERT INTO [MuOnline_N].[dbo].[IMPERIAMUCMS_TRIGGER_ONLINE] (AccountID, OnlineTime, Date) VALUES (@memb___id, (DATEDIFF(mi, @ConnectTM, GETDATE())), CAST(GETDATE() AS DATE))
ELSE
UPDATE [S12_MuOnline_N].[dbo].[IMPERIAMUCMS_TRIGGER_ONLINE] SET OnlineTime = OnlineTime + (DATEDIFF(mi, @ConnectTM, GETDATE())) WHERE AccountID = @memb___id AND Date = CAST(GETDATE() AS DATE)
END
END
END
Only MuOnline database:
Python:
Código:
USE [MuOnline]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER Procedure [dbo].[WZ_DISCONNECT_MEMB]
@memb___id varchar(10)
AS
BEGIN
SET NOCOUNT ON
DECLARE @find_id varchar(10)
DECLARE @ConnectStat tinyint
DECLARE @ConnectedChar varchar(10)
DECLARE @ConnectTM smalldatetime
SET @ConnectStat = 0
SET @find_id = 'NOT'
SELECT @find_id = S.memb___id FROM MEMB_STAT S INNER JOIN MEMB_INFO I ON S.memb___id = I.memb___id
WHERE I.memb___id = @memb___id
IF( @find_id <> 'NOT' )
BEGIN
SELECT @ConnectedChar = (SELECT GameIDC FROM AccountCharacter WHERE Id = @memb___id);
SELECT @ConnectTM = (SELECT ConnectTM FROM MEMB_STAT WHERE memb___id = @memb___id);
UPDATE MEMB_STAT SET ConnectStat = @ConnectStat, DisConnectTM = GETDATE(), OnlineTime = OnlineTime + (DATEDIFF(mi, ConnectTM, GETDATE()))
WHERE memb___id = @memb___id;
IF NOT EXISTS (SELECT AccountID FROM IMPERIAMUCMS_TRIGGER_ONLINE WHERE AccountID = @memb___id AND Date = CAST(GETDATE() AS DATE))
INSERT INTO IMPERIAMUCMS_TRIGGER_ONLINE (AccountID, OnlineTime, Date) VALUES (@memb___id, (DATEDIFF(mi, @ConnectTM, GETDATE())), CAST(GETDATE() AS DATE))
ELSE
UPDATE IMPERIAMUCMS_TRIGGER_ONLINE SET OnlineTime = OnlineTime + (DATEDIFF(mi, @ConnectTM, GETDATE())) WHERE AccountID = @memb___id AND Date = CAST(GETDATE() AS DATE)
END
END
Add ImperiaMuCMS Triggers to save players' in-game progress
Description
This tutorial explains you how to manually import ImperiaMuCMS triggers into your database.
Last Updated: 14/04/2020
Compatible Version: 2.0.6 and newer
ImperiaMuCMS triggers are used to automatically store historical data of players' progress and monstly they are used for daily/weekly/monthly rankings, but might be used for new features in the future. Triggers are not required, however they are recommended. Without them you won't be able to use daily/weekly/monthly rankings and other features of the website.
Please note that triggers should be added into database after successfull installation of ImperiaMuCMS.
Season 10 - Season 15
Python:
Triggers for MuOnline database
Please replace "[MuOnline]" with your MuOnline database name. In the code search for:
Código:
SET @cLevel_MAX = 400;
SET @mLevel_MAX = 520;
SET @RESETS_MAX = 100;
SET @Grand_Resets_MAX = 0;
Replace the values 400, 520, 100 and 0 with your server configuration - maximum allowed level, master level, reset and grand reset. After that execute it in your SQL Server Management Studio. To do that open SQL Server Management Studio, in top navigation panel click on "New Query" and paste trigger code (which is displayed below) into new opened window tab, after that press "F5" or click on button "Execute" in top navigation panel.
Código:
USE [MuOnline]
GO
IF OBJECT_ID ('IMPERIAMUCMS_TRIGGER_CHARACTER_TR', 'TR') IS NOT NULL
DROP TRIGGER IMPERIAMUCMS_TRIGGER_CHARACTER_TR
GO
IF OBJECT_ID ('IMPERIAMUCMS_TRIGGER_CHARACTER_INSERT_TR', 'TR') IS NOT NULL
DROP TRIGGER IMPERIAMUCMS_TRIGGER_CHARACTER_INSERT_TR
GO
IF OBJECT_ID ('IMPERIAMUCMS_TRIGGER_GUILD_TR', 'TR') IS NOT NULL
DROP TRIGGER IMPERIAMUCMS_TRIGGER_GUILD_TR
GO
IF OBJECT_ID ('IMPERIAMUCMS_TRIGGER_MONSTER_TR', 'TR') IS NOT NULL
DROP TRIGGER IMPERIAMUCMS_TRIGGER_MONSTER_TR
GO
IF OBJECT_ID ('IMPERIAMUCMS_TRIGGER_GENS_TR', 'TR') IS NOT NULL
DROP TRIGGER IMPERIAMUCMS_TRIGGER_GENS_TR
GO
IF OBJECT_ID ('IMPERIAMUCMS_TRIGGER_GENS_ABUSE_TR', 'TR') IS NOT NULL
DROP TRIGGER IMPERIAMUCMS_TRIGGER_GENS_ABUSE_TR
GO
IF OBJECT_ID ('IMPERIAMUCMS_TRIGGER_INGAME_SHOP_POINTS_TR', 'TR') IS NOT NULL
DROP TRIGGER IMPERIAMUCMS_TRIGGER_INGAME_SHOP_POINTS_TR
GO
IF OBJECT_ID ('IMPERIAMUCMS_TRIGGER_ARCHITECT_CS', 'TR') IS NOT NULL
DROP TRIGGER IMPERIAMUCMS_TRIGGER_ARCHITECT_CS
GO
CREATE TRIGGER IMPERIAMUCMS_TRIGGER_ARCHITECT_CS ON [dbo].[MuCastle_DATA]
AFTER UPDATE
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
IF TRIGGER_NESTLEVEL(@@PROCID) = 1
BEGIN
SET NOCOUNT ON
DECLARE @OWNER_GUILD varchar(8);
DECLARE @iOWNER_GUILD varchar(8);
SELECT @OWNER_GUILD = d.OWNER_GUILD FROM deleted d;
SELECT @iOWNER_GUILD = i.OWNER_GUILD FROM inserted i;
IF (UPDATE(OWNER_GUILD) AND @OWNER_GUILD != @iOWNER_GUILD)
BEGIN
DELETE FROM IMPERIAMUCMS_ARCHITECT
DELETE FROM IMPERIAMUCMS_ARCHITECT_BANK
END
END
IF (@@Error <> 0)
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
GO
CREATE TRIGGER IMPERIAMUCMS_TRIGGER_CHARACTER_INSERT_TR ON [dbo].[Character]
AFTER INSERT
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
IF TRIGGER_NESTLEVEL(@@PROCID) = 1
BEGIN
SET NOCOUNT ON
DECLARE @AccountID varchar(10);
DECLARE @Name varchar(10);
SELECT @AccountID = i.AccountID FROM inserted i;
SELECT @Name = i.Name FROM inserted i;
BEGIN
INSERT INTO IMPERIAMUCMS_CHARACTER_PROGRESS_LOGS (AccountID, Name, OldValue, NewValue, Type, Date, IP, TotalTime) VALUES (@AccountID, @Name, 0, 0, 1, SYSDATETIME(), '0.0.0.0', NULL)
INSERT INTO IMPERIAMUCMS_CHARACTER_PROGRESS_LOGS (AccountID, Name, OldValue, NewValue, Type, Date, IP, TotalTime) VALUES (@AccountID, @Name, 0, 0, 2, SYSDATETIME(), '0.0.0.0', NULL)
END
END
IF (@@Error <> 0)
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
GO
CREATE TRIGGER IMPERIAMUCMS_TRIGGER_CHARACTER_TR ON [dbo].[Character]
AFTER UPDATE
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
IF TRIGGER_NESTLEVEL(@@PROCID) = 1
BEGIN
SET NOCOUNT ON
DECLARE @cLevel_MAX int;
DECLARE @mLevel_MAX int;
DECLARE @RESETS_MAX int;
DECLARE @Grand_Resets_MAX int;
SET @cLevel_MAX = 400;
SET @mLevel_MAX = 800;
SET @RESETS_MAX = 100;
SET @Grand_Resets_MAX = 0;
DECLARE @date date;
SELECT @date = CAST(GETDATE() AS DATE);
BEGIN
UPDATE Character
SET MaxReached = CAST(GETDATE() AS SMALLDATETIME)
FROM Character c
JOIN inserted i ON c.Name = i.Name
WHERE c.Name = i.Name AND i.cLevel = @cLevel_MAX AND i.mLevel = @mLevel_MAX
AND i.RESETS = @RESETS_MAX AND i.Grand_Resets = @Grand_Resets_MAX
UPDATE IMPERIAMUCMS_TRIGGER_CHARACTER
SET cLevel = CASE WHEN i.cLevel > d.cLevel THEN tc.cLevel + i.cLevel - d.cLevel ELSE tc.cLevel END,
mLevel = CASE WHEN i.mLevel > d.mLevel THEN tc.mLevel + i.mLevel - d.mLevel ELSE tc.mLevel END,
RESETS = CASE WHEN i.RESETS > d.RESETS THEN tc.RESETS + i.RESETS - d.RESETS ELSE tc.RESETS END,
Grand_Resets = CASE WHEN i.Grand_Resets > d.Grand_Resets THEN tc.Grand_Resets + i.Grand_Resets - d.Grand_Resets ELSE tc.Grand_Resets END,
Experience = CASE WHEN i.Experience > d.Experience THEN tc.Experience + i.Experience - d.Experience ELSE tc.Experience END,
mlExperience = CASE WHEN i.mlExperience > d.mlExperience THEN tc.mlExperience + i.mlExperience - d.mlExperience ELSE tc.mlExperience END,
Money = CASE WHEN i.Money > d.Money THEN tc.Money + i.Money - d.Money ELSE tc.Money END,
PkCount = CASE WHEN i.PkCount > d.PkCount THEN tc.PkCount + i.PkCount - d.PkCount ELSE tc.PkCount END,
WinDuels = CASE WHEN i.WinDuels > d.WinDuels THEN tc.WinDuels + i.WinDuels - d.WinDuels ELSE tc.WinDuels END,
LoseDuels = CASE WHEN i.LoseDuels > d.LoseDuels THEN tc.LoseDuels + i.LoseDuels - d.LoseDuels ELSE tc.LoseDuels END,
Ruud = CASE WHEN i.Ruud > d.Ruud THEN tc.Ruud + i.Ruud - d.Ruud ELSE tc.Ruud END
FROM IMPERIAMUCMS_TRIGGER_CHARACTER tc
JOIN inserted i ON tc.Name = i.Name
JOIN deleted d ON tc.Name = d.Name
WHERE tc.Name = i.Name AND tc.Date = @date
-- Guild
UPDATE IMPERIAMUCMS_TRIGGER_GUILD
SET cLevel = CASE WHEN i.cLevel > d.cLevel THEN tg.cLevel + i.cLevel - d.cLevel ELSE tg.cLevel END,
mLevel = CASE WHEN i.mLevel > d.mLevel THEN tg.mLevel + i.mLevel - d.mLevel ELSE tg.mLevel END,
RESETS = CASE WHEN i.RESETS > d.RESETS THEN tg.RESETS + i.RESETS - d.RESETS ELSE tg.RESETS END,
Grand_Resets = CASE WHEN i.Grand_Resets > d.Grand_Resets THEN tg.Grand_Resets + i.Grand_Resets - d.Grand_Resets ELSE tg.Grand_Resets END
FROM IMPERIAMUCMS_TRIGGER_GUILD tg
JOIN inserted i ON tg.G_Name = (SELECT G_Name FROM GuildMember gm WITH (READUNCOMMITTED) WHERE gm.Name = i.Name)
JOIN deleted d ON tg.G_Name = (SELECT G_Name FROM GuildMember gm WITH (READUNCOMMITTED) WHERE gm.Name = d.Name)
WHERE EXISTS (
SELECT G_Name FROM GuildMember gm WITH (READUNCOMMITTED)
WHERE gm.Name = i.Name
) AND tg.G_Name = (
SELECT G_Name FROM GuildMember gm WITH (READUNCOMMITTED)
WHERE gm.Name = i.Name
) AND tg.Date = @date
INSERT INTO IMPERIAMUCMS_TRIGGER_CHARACTER (AccountID, Name, cLevel, mLevel, RESETS, Grand_Resets,
Experience, mlExperience, Money, PkCount, WinDuels, LoseDuels, Ruud, Date)
SELECT i.AccountID, i.Name,
CASE WHEN i.cLevel > d.cLevel THEN i.cLevel - d.cLevel ELSE 0 END,
CASE WHEN i.mLevel > d.mLevel THEN i.mLevel - d.mLevel ELSE 0 END,
CASE WHEN i.RESETS > d.RESETS THEN i.RESETS - d.RESETS ELSE 0 END,
CASE WHEN i.Grand_Resets > d.Grand_Resets THEN i.Grand_Resets - d.Grand_Resets ELSE 0 END,
CASE WHEN i.Experience > d.Experience THEN i.Experience - d.Experience ELSE 0 END,
CASE WHEN i.mlExperience > d.mlExperience THEN i.mlExperience - d.mlExperience ELSE 0 END,
CASE WHEN i.Money > d.Money THEN i.Money - d.Money ELSE 0 END,
CASE WHEN i.PkCount > d.PkCount THEN i.PkCount - d.PkCount ELSE 0 END,
CASE WHEN i.WinDuels > d.WinDuels THEN i.WinDuels - d.WinDuels ELSE 0 END,
CASE WHEN i.LoseDuels > d.LoseDuels THEN i.LoseDuels - d.LoseDuels ELSE 0 END,
CASE WHEN i.Ruud > d.Ruud THEN i.Ruud - d.Ruud ELSE 0 END,
@date
FROM inserted i
JOIN deleted d ON d.Name = i.Name
WHERE NOT EXISTS (
SELECT Name FROM IMPERIAMUCMS_TRIGGER_CHARACTER tc
WHERE tc.Name = i.Name AND tc.Date = @date
)
-- Guild
INSERT INTO IMPERIAMUCMS_TRIGGER_GUILD (G_Name, G_Master, cLevel, mLevel, RESETS, Grand_Resets, Date)
SELECT (SELECT G_Name FROM GuildMember gm WITH (READUNCOMMITTED) WHERE gm.Name = i.Name),
(SELECT G_Master FROM Guild g WITH (READUNCOMMITTED) WHERE g.G_Name = (
SELECT G_Name FROM GuildMember gm WITH (READUNCOMMITTED) WHERE gm.Name = i.Name
)),
CASE WHEN i.cLevel > d.cLevel THEN i.cLevel - d.cLevel ELSE 0 END,
CASE WHEN i.mLevel > d.mLevel THEN i.mLevel - d.mLevel ELSE 0 END,
CASE WHEN i.RESETS > d.RESETS THEN i.RESETS - d.RESETS ELSE 0 END,
CASE WHEN i.Grand_Resets > d.Grand_Resets THEN i.Grand_Resets - d.Grand_Resets ELSE 0 END,
@date
FROM inserted i
JOIN deleted d ON d.Name = i.Name
WHERE EXISTS (
SELECT G_Name FROM GuildMember gm WITH (READUNCOMMITTED)
WHERE gm.Name = i.Name
) AND NOT EXISTS (
SELECT G_Name FROM IMPERIAMUCMS_TRIGGER_GUILD tg
WHERE tg.G_Name = (
SELECT G_Name FROM GuildMember gm WITH (READUNCOMMITTED)
WHERE gm.Name = i.Name
) AND tg.Date = @date
)
SET NOCOUNT OFF
END
END
IF (@@Error <> 0)
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
GO
CREATE TRIGGER IMPERIAMUCMS_TRIGGER_GUILD_TR ON [dbo].[Guild]
AFTER UPDATE
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
IF TRIGGER_NESTLEVEL(@@PROCID) = 1
BEGIN
SET NOCOUNT ON
DECLARE @date date;
SELECT @date = CAST(GETDATE() AS DATE);
BEGIN
UPDATE IMPERIAMUCMS_TRIGGER_GUILD SET G_Score = tg.G_Score + (i.G_Score - d.G_Score)
FROM IMPERIAMUCMS_TRIGGER_GUILD tg
JOIN inserted i ON tg.G_Name = i.G_Name
JOIN deleted d ON tg.G_Name = d.G_Name
WHERE (i.G_Score > d.G_Score) AND tg.G_Name = i.G_Name AND tg.Date = @date
INSERT INTO IMPERIAMUCMS_TRIGGER_GUILD (G_Name, G_Master, G_Score, Date)
SELECT i.G_Name,
(SELECT G_Master FROM Guild WITH (READUNCOMMITTED) WHERE G_Name = i.G_Name),
(i.G_Score - d.G_Score), @date
FROM inserted i
JOIN deleted d ON d.G_Name = i.G_Name
WHERE (i.G_Score > d.G_Score)
AND NOT EXISTS (
SELECT G_Name FROM IMPERIAMUCMS_TRIGGER_GUILD tg
WHERE tg.G_Name = i.G_Name AND tg.Date = @date
)
SET NOCOUNT OFF
END
END
IF (@@Error <> 0)
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
GO
CREATE TRIGGER IMPERIAMUCMS_TRIGGER_MONSTER_TR ON [dbo].[C_Monster_KillCount]
AFTER UPDATE, INSERT
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
IF TRIGGER_NESTLEVEL(@@PROCID) = 1
BEGIN
SET NOCOUNT ON
DECLARE @date date;
SELECT @date = CAST(GETDATE() AS DATE);
BEGIN
IF EXISTS (SELECT * FROM DELETED)
BEGIN
UPDATE IMPERIAMUCMS_TRIGGER_MONSTER
SET Count = tm.Count + (i.count - d.count),
LastKilled = CAST(GETDATE() AS DATETIME)
FROM IMPERIAMUCMS_TRIGGER_MONSTER tm
JOIN inserted i ON tm.Name = i.Name
JOIN deleted d ON tm.Name = d.Name
WHERE (i.count > d.count) AND tm.Name = i.Name AND tm.MonsterID = i.MonsterId AND tm.Date = @date
INSERT INTO IMPERIAMUCMS_TRIGGER_MONSTER (AccountID, Name, MonsterID, Count, LastKilled, Date)
SELECT (SELECT Id FROM AccountCharacter WITH (READUNCOMMITTED) WHERE GameIDC = i.Name),
i.Name, i.MonsterId, (i.count - d.count), CAST(GETDATE() AS DATETIME), @date
FROM inserted i
JOIN deleted d ON d.Name = i.Name
WHERE (i.count > d.count)
AND NOT EXISTS (
SELECT Name FROM IMPERIAMUCMS_TRIGGER_MONSTER tm WITH (READUNCOMMITTED)
WHERE tm.Name = i.Name AND tm.MonsterID = i.MonsterId AND tm.Date = @date
)
END
ELSE
BEGIN
UPDATE IMPERIAMUCMS_TRIGGER_MONSTER
SET Count = CASE WHEN i.count > 0 THEN tm.Count + i.count ELSE tm.Count END
FROM IMPERIAMUCMS_TRIGGER_MONSTER tm
JOIN inserted i ON tm.Name = i.Name
WHERE tm.Name = i.Name AND tm.MonsterID = i.MonsterId AND tm.Date = @date
INSERT INTO IMPERIAMUCMS_TRIGGER_MONSTER (AccountID, Name, MonsterID, Count, LastKilled, Date)
SELECT (SELECT Id FROM AccountCharacter WITH (READUNCOMMITTED) WHERE GameIDC = i.Name),
i.Name, i.MonsterId,
CASE WHEN i.count > 0 THEN i.count ELSE 0 END,
CAST(GETDATE() AS DATETIME),
@date
FROM inserted i
WHERE NOT EXISTS (
SELECT Name FROM IMPERIAMUCMS_TRIGGER_MONSTER tm WITH (READUNCOMMITTED)
WHERE tm.Name = i.Name AND tm.MonsterID = i.MonsterId AND tm.Date = @date
)
END
SET NOCOUNT OFF
END
END
IF (@@Error <> 0)
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
GO
CREATE TRIGGER IMPERIAMUCMS_TRIGGER_GENS_TR ON [dbo].[IGC_Gens]
AFTER UPDATE, INSERT
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
IF TRIGGER_NESTLEVEL(@@PROCID) = 1
BEGIN
SET NOCOUNT ON
DECLARE @date date;
SELECT @date = CAST(GETDATE() AS DATE);
BEGIN
IF EXISTS (SELECT * FROM DELETED)
BEGIN
UPDATE IMPERIAMUCMS_TRIGGER_CHARACTER SET Gens_Points = tc.Gens_Points + (i.Points - d.Points)
FROM IMPERIAMUCMS_TRIGGER_CHARACTER tc
JOIN inserted i ON tc.Name = i.Name
JOIN deleted d ON tc.Name = d.Name
WHERE (i.Points > d.Points) AND tc.Name = i.Name AND tc.Date = @date
INSERT INTO IMPERIAMUCMS_TRIGGER_CHARACTER (AccountID, Name, Gens_Points, Gens_Kills, Date)
SELECT (SELECT Id FROM AccountCharacter WITH (READUNCOMMITTED) WHERE GameIDC = i.Name),
i.Name, (i.Points - d.Points), 0, @date
FROM inserted i
JOIN deleted d ON d.Name = i.Name
WHERE (i.Points > d.Points)
AND NOT EXISTS (
SELECT Name FROM IMPERIAMUCMS_TRIGGER_CHARACTER tc WITH (READUNCOMMITTED)
WHERE tc.Name = i.Name AND tc.Date = @date
)
END
ELSE
BEGIN
UPDATE IMPERIAMUCMS_TRIGGER_CHARACTER
SET Gens_Points = CASE WHEN i.Points > 0 THEN tc.Gens_Points + i.Points ELSE tc.Gens_Points END
FROM IMPERIAMUCMS_TRIGGER_CHARACTER tc
JOIN inserted i ON tc.Name = i.Name
WHERE tc.Name = i.Name AND tc.Date = @date
INSERT INTO IMPERIAMUCMS_TRIGGER_CHARACTER (AccountID, Name, Gens_Points, Gens_Kills, Date)
SELECT (SELECT Id FROM AccountCharacter WITH (READUNCOMMITTED) WHERE GameIDC = i.Name),
i.Name,
CASE WHEN i.Points > 0 THEN i.Points ELSE 0 END,
0,
@date
FROM inserted i
WHERE NOT EXISTS (
SELECT Name FROM IMPERIAMUCMS_TRIGGER_CHARACTER tc WITH (READUNCOMMITTED)
WHERE tc.Name = i.Name AND tc.Date = @date
)
END
SET NOCOUNT OFF
END
END
IF (@@Error <> 0)
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
GO
CREATE TRIGGER IMPERIAMUCMS_TRIGGER_GENS_ABUSE_TR ON [dbo].[IGC_GensAbuse]
AFTER UPDATE, INSERT
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
IF TRIGGER_NESTLEVEL(@@PROCID) = 1
BEGIN
SET NOCOUNT ON
DECLARE @date date;
SELECT @date = CAST(GETDATE() AS DATE);
BEGIN
IF EXISTS (SELECT * FROM DELETED)
BEGIN
UPDATE IMPERIAMUCMS_TRIGGER_CHARACTER SET Gens_Kills = tc.Gens_Kills + (i.KillCount - d.KillCount)
FROM IMPERIAMUCMS_TRIGGER_CHARACTER tc
JOIN inserted i ON tc.Name = i.Name
JOIN deleted d ON tc.Name = d.Name
WHERE (i.KillCount > d.KillCount) AND tc.Name = i.Name AND tc.Date = @date
INSERT INTO IMPERIAMUCMS_TRIGGER_CHARACTER (AccountID, Name, Gens_Points, Gens_Kills, Date)
SELECT (SELECT Id FROM AccountCharacter WITH (READUNCOMMITTED) WHERE GameIDC = i.Name),
i.Name, 0, (i.KillCount - d.KillCount), @date
FROM inserted i
JOIN deleted d ON d.Name = i.Name
WHERE (i.KillCount > d.KillCount)
AND NOT EXISTS (
SELECT Name FROM IMPERIAMUCMS_TRIGGER_CHARACTER tc WITH (READUNCOMMITTED)
WHERE tc.Name = i.Name AND tc.Date = @date
)
END
ELSE
BEGIN
UPDATE IMPERIAMUCMS_TRIGGER_CHARACTER
SET Gens_Kills = CASE WHEN i.KillCount > 0 THEN tc.Gens_Kills + i.KillCount ELSE tc.Gens_Kills END
FROM IMPERIAMUCMS_TRIGGER_CHARACTER tc
JOIN inserted i ON tc.Name = i.Name
WHERE tc.Name = i.Name AND tc.Date = @date
INSERT INTO IMPERIAMUCMS_TRIGGER_CHARACTER (AccountID, Name, Gens_Points, Gens_Kills, Date)
SELECT (SELECT Id FROM AccountCharacter WITH (READUNCOMMITTED) WHERE GameIDC = i.Name),
i.Name,
0,
CASE WHEN i.KillCount > 0 THEN i.KillCount ELSE 0 END,
@date
FROM inserted i
WHERE NOT EXISTS (
SELECT Name FROM IMPERIAMUCMS_TRIGGER_CHARACTER tc WITH (READUNCOMMITTED)
WHERE tc.Name = i.Name AND tc.Date = @date
)
END
SET NOCOUNT OFF
END
END
IF (@@Error <> 0)
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
GO
CREATE TRIGGER IMPERIAMUCMS_TRIGGER_INGAME_SHOP_POINTS_TR ON [dbo].[T_InGameShop_Point]
AFTER UPDATE, INSERT
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
IF TRIGGER_NESTLEVEL(@@PROCID) = 1
BEGIN
SET NOCOUNT ON
DECLARE @date date;
SELECT @date = CAST(GETDATE() AS DATE);
BEGIN
IF EXISTS (SELECT * FROM DELETED)
BEGIN
UPDATE IMPERIAMUCMS_TRIGGER_INGAME_SHOP_POINTS
SET WCoin = CASE WHEN i.WCoin > d.WCoin THEN tp.WCoin + i.WCoin - d.WCoin ELSE tp.WCoin END,
GoblinPoint = CASE WHEN i.GoblinPoint > d.GoblinPoint THEN tp.GoblinPoint + i.GoblinPoint - d.GoblinPoint ELSE tp.GoblinPoint END
FROM IMPERIAMUCMS_TRIGGER_INGAME_SHOP_POINTS tp
JOIN inserted i ON tp.AccountID = i.AccountID
JOIN deleted d ON tp.AccountID = d.AccountID
WHERE tp.AccountID = i.AccountID AND tp.Date = @date
INSERT INTO IMPERIAMUCMS_TRIGGER_INGAME_SHOP_POINTS (AccountID, WCoin, GoblinPoint, Date)
SELECT i.AccountID,
CASE WHEN i.WCoin > d.WCoin THEN i.WCoin - d.WCoin ELSE 0 END,
CASE WHEN i.GoblinPoint > d.GoblinPoint THEN i.GoblinPoint - d.GoblinPoint ELSE 0 END,
@date
FROM inserted i
JOIN deleted d ON d.AccountID = i.AccountID
WHERE NOT EXISTS (
SELECT AccountID FROM IMPERIAMUCMS_TRIGGER_INGAME_SHOP_POINTS tp WITH (READUNCOMMITTED)
WHERE tp.AccountID = i.AccountID AND tp.Date = @date
)
END
ELSE
BEGIN
UPDATE IMPERIAMUCMS_TRIGGER_INGAME_SHOP_POINTS
SET WCoin = CASE WHEN i.WCoin > 0 THEN tp.WCoin + i.WCoin ELSE tp.WCoin END,
GoblinPoint = CASE WHEN i.GoblinPoint > 0 THEN tp.GoblinPoint + i.GoblinPoint ELSE tp.GoblinPoint END
FROM IMPERIAMUCMS_TRIGGER_INGAME_SHOP_POINTS tp
JOIN inserted i ON tp.AccountID = i.AccountID
WHERE tp.AccountID = i.AccountID AND tp.Date = @date
INSERT INTO IMPERIAMUCMS_TRIGGER_INGAME_SHOP_POINTS (AccountID, WCoin, GoblinPoint, Date)
SELECT i.AccountID,
CASE WHEN i.WCoin > 0 THEN i.WCoin ELSE 0 END,
CASE WHEN i.GoblinPoint > 0 THEN i.GoblinPoint ELSE 0 END,
@date
FROM inserted i
WHERE NOT EXISTS (
SELECT AccountID FROM IMPERIAMUCMS_TRIGGER_INGAME_SHOP_POINTS tp WITH (READUNCOMMITTED)
WHERE tp.AccountID = i.AccountID AND tp.Date = @date
)
END
SET NOCOUNT OFF
END
END
IF (@@Error <> 0)
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
GO
Triggers for Ranking database
Please replace "[Ranking]" with your Ranking database name and "[MuOnline]" with your MuOnline database name. After that execute it in your SQL Server Management Studio. To do that open SQL Server Management Studio, in top navigation panel click on "New Query" and paste trigger code (which is displayed below) into new opened window tab, after that press "F5" or click on button "Execute" in top navigation panel.
Python:
Código:
USE [Ranking]
GO
IF OBJECT_ID ('IMPERIAMUCMS_TRIGGER_EVENT_DS_TR', 'TR') IS NOT NULL
DROP TRIGGER IMPERIAMUCMS_TRIGGER_EVENT_DS_TR
GO
IF OBJECT_ID ('IMPERIAMUCMS_TRIGGER_EVENT_BC_TR', 'TR') IS NOT NULL
DROP TRIGGER IMPERIAMUCMS_TRIGGER_EVENT_BC_TR
GO
IF OBJECT_ID ('IMPERIAMUCMS_TRIGGER_EVENT_CC_TR', 'TR') IS NOT NULL
DROP TRIGGER IMPERIAMUCMS_TRIGGER_EVENT_CC_TR
GO
IF OBJECT_ID ('IMPERIAMUCMS_TRIGGER_EVENT_IT_TR', 'TR') IS NOT NULL
DROP TRIGGER IMPERIAMUCMS_TRIGGER_EVENT_IT_TR
GO
CREATE TRIGGER IMPERIAMUCMS_TRIGGER_EVENT_DS_TR ON [dbo].[EVENT_INFO]
AFTER UPDATE, INSERT
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
IF TRIGGER_NESTLEVEL(@@PROCID) = 1
BEGIN
SET NOCOUNT ON
DECLARE @date date;
SELECT @date = CAST(GETDATE() AS DATE);
BEGIN
IF EXISTS (SELECT * FROM DELETED)
BEGIN
UPDATE [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] SET DS_Points = te.DS_Points + (i.Point - d.Point)
FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te
JOIN inserted i ON te.Name = i.CharacterName
JOIN deleted d ON te.Name = d.CharacterName
WHERE (i.Point > d.Point) AND te.Name = i.CharacterName AND te.Date = @date
INSERT INTO [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] (AccountID, Name, DS_Points, Date)
SELECT (SELECT Id FROM [MuOnline].[dbo].[AccountCharacter] WITH (READUNCOMMITTED) WHERE GameIDC = i.CharacterName),
i.CharacterName, (i.Point - d.Point), @date
FROM inserted i
JOIN deleted d ON d.CharacterName = i.CharacterName
WHERE (i.Point > d.Point)
AND NOT EXISTS (
SELECT Name FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te WITH (READUNCOMMITTED)
WHERE te.Name = i.CharacterName AND te.Date = @date
)
END
ELSE
BEGIN
UPDATE [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT]
SET DS_Points = CASE WHEN i.Point > 0 THEN te.DS_Points + i.Point ELSE te.DS_Points END
FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te
JOIN inserted i ON te.Name = i.CharacterName
WHERE te.Name = i.CharacterName AND te.Date = @date
INSERT INTO [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] (AccountID, Name, DS_Points, Date)
SELECT (SELECT Id FROM [MuOnline].[dbo].[AccountCharacter] WITH (READUNCOMMITTED) WHERE GameIDC = i.CharacterName),
i.CharacterName,
CASE WHEN i.Point > 0 THEN i.Point ELSE 0 END,
@date
FROM inserted i
WHERE NOT EXISTS (
SELECT Name FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te WITH (READUNCOMMITTED)
WHERE te.Name = i.CharacterName AND te.Date = @date
)
END
SET NOCOUNT OFF
END
END
IF (@@Error <> 0)
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
GO
CREATE TRIGGER IMPERIAMUCMS_TRIGGER_EVENT_BC_TR ON [dbo].[EVENT_INFO_BC_5TH]
AFTER UPDATE, INSERT
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
IF TRIGGER_NESTLEVEL(@@PROCID) = 1
BEGIN
SET NOCOUNT ON
DECLARE @date date;
SELECT @date = CAST(GETDATE() AS DATE);
BEGIN
IF EXISTS (SELECT * FROM DELETED)
BEGIN
UPDATE [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] SET BC_Points = te.BC_Points + (i.Point - d.Point)
FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te
JOIN inserted i ON te.Name = i.CharacterName
JOIN deleted d ON te.Name = d.CharacterName
WHERE (i.Point > d.Point) AND te.Name = i.CharacterName AND te.Date = @date
INSERT INTO [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] (AccountID, Name, BC_Points, Date)
SELECT (SELECT Id FROM [MuOnline].[dbo].[AccountCharacter] WITH (READUNCOMMITTED) WHERE GameIDC = i.CharacterName),
i.CharacterName, (i.Point - d.Point), @date
FROM inserted i
JOIN deleted d ON d.CharacterName = i.CharacterName
WHERE (i.Point > d.Point)
AND NOT EXISTS (
SELECT Name FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te WITH (READUNCOMMITTED)
WHERE te.Name = i.CharacterName AND te.Date = @date
)
END
ELSE
BEGIN
UPDATE [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT]
SET BC_Points = CASE WHEN i.Point > 0 THEN te.BC_Points + i.Point ELSE te.BC_Points END
FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te
JOIN inserted i ON te.Name = i.CharacterName
WHERE te.Name = i.CharacterName AND te.Date = @date
INSERT INTO [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] (AccountID, Name, BC_Points, Date)
SELECT (SELECT Id FROM [MuOnline].[dbo].[AccountCharacter] WITH (READUNCOMMITTED) WHERE GameIDC = i.CharacterName),
i.CharacterName,
CASE WHEN i.Point > 0 THEN i.Point ELSE 0 END,
@date
FROM inserted i
WHERE NOT EXISTS (
SELECT Name FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te WITH (READUNCOMMITTED)
WHERE te.Name = i.CharacterName AND te.Date = @date
)
END
SET NOCOUNT OFF
END
END
IF (@@Error <> 0)
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
GO
CREATE TRIGGER IMPERIAMUCMS_TRIGGER_EVENT_CC_TR ON [dbo].[EVENT_INFO_CC]
AFTER UPDATE, INSERT
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
IF TRIGGER_NESTLEVEL(@@PROCID) = 1
BEGIN
SET NOCOUNT ON
DECLARE @date date;
SELECT @date = CAST(GETDATE() AS DATE);
BEGIN
IF EXISTS (SELECT * FROM DELETED)
BEGIN
UPDATE [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT]
SET CC_Wins = CASE WHEN i.Wins > d.Wins THEN te.CC_Wins + i.Wins - d.Wins ELSE te.CC_Wins END,
CC_PKillCount = CASE WHEN i.PKillCount > d.PKillCount THEN te.CC_PKillCount + i.PKillCount - d.PKillCount ELSE te.CC_PKillCount END,
CC_MKillCount = CASE WHEN i.MKillCount > d.MKillCount THEN te.CC_MKillCount + i.MKillCount - d.MKillCount ELSE te.CC_MKillCount END
FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te
JOIN inserted i ON te.Name = i.Name
JOIN deleted d ON te.Name = d.Name
WHERE te.Name = i.Name AND te.Date = @date
INSERT INTO [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] (AccountID, Name, CC_Wins, CC_PKillCount, CC_MKillCount, Date)
SELECT (SELECT Id FROM [MuOnline].[dbo].[AccountCharacter] WITH (READUNCOMMITTED) WHERE GameIDC = i.Name),
i.Name,
CASE WHEN i.Wins > d.Wins THEN i.Wins - d.Wins ELSE 0 END,
CASE WHEN i.PKillCount > d.PKillCount THEN i.PKillCount - d.PKillCount ELSE 0 END,
CASE WHEN i.MKillCount > d.MKillCount THEN i.MKillCount - d.MKillCount ELSE 0 END,
@date
FROM inserted i
JOIN deleted d ON d.Name = i.Name
WHERE NOT EXISTS (
SELECT Name FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te WITH (READUNCOMMITTED)
WHERE te.Name = i.Name AND te.Date = @date
)
END
ELSE
BEGIN
UPDATE [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT]
SET CC_Wins = CASE WHEN i.Wins > 0 THEN te.CC_Wins + i.Wins ELSE te.CC_Wins END,
CC_PKillCount = CASE WHEN i.PKillCount > 0 THEN te.CC_PKillCount + i.PKillCount ELSE te.CC_PKillCount END,
CC_MKillCount = CASE WHEN i.MKillCount > 0 THEN te.CC_MKillCount + i.MKillCount ELSE te.CC_MKillCount END
FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te
JOIN inserted i ON te.Name = i.Name
WHERE te.Name = i.Name AND te.Date = @date
INSERT INTO [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] (AccountID, Name, CC_Wins, CC_PKillCount, CC_MKillCount, Date)
SELECT (SELECT Id FROM [MuOnline].[dbo].[AccountCharacter] WITH (READUNCOMMITTED) WHERE GameIDC = i.Name),
i.Name,
CASE WHEN i.Wins > 0 THEN i.Wins ELSE 0 END,
CASE WHEN i.PKillCount > 0 THEN i.PKillCount ELSE 0 END,
CASE WHEN i.MKillCount > 0 THEN i.MKillCount ELSE 0 END,
@date
FROM inserted i
WHERE NOT EXISTS (
SELECT Name FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te WITH (READUNCOMMITTED)
WHERE te.Name = i.Name AND te.Date = @date
)
END
SET NOCOUNT OFF
END
END
IF (@@Error <> 0)
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
GO
CREATE TRIGGER IMPERIAMUCMS_TRIGGER_EVENT_IT_TR ON [dbo].[EVENT_INFO_IT]
AFTER UPDATE, INSERT
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
IF TRIGGER_NESTLEVEL(@@PROCID) = 1
BEGIN
SET NOCOUNT ON
DECLARE @date date;
SELECT @date = CAST(GETDATE() AS DATE);
BEGIN
IF EXISTS (SELECT * FROM DELETED)
BEGIN
UPDATE [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT]
SET IT_TotalScore = CASE WHEN i.TotalScore > d.TotalScore THEN te.IT_TotalScore + i.TotalScore - d.TotalScore ELSE te.IT_TotalScore END,
IT_KillCount = CASE WHEN i.KillCount > d.KillCount THEN te.IT_KillCount + i.KillCount - d.KillCount ELSE te.IT_KillCount END,
IT_RelicsGivenCount = CASE WHEN i.RelicsGivenCount > d.RelicsGivenCount THEN te.IT_RelicsGivenCount + i.RelicsGivenCount - d.RelicsGivenCount ELSE te.IT_RelicsGivenCount END,
IT_Wins = CASE WHEN i.isWinner > d.isWinner THEN te.IT_Wins + i.isWinner - d.isWinner ELSE te.IT_Wins END
FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te
JOIN inserted i ON te.Name = i.Name
JOIN deleted d ON te.Name = d.Name
WHERE te.Name = i.Name AND te.Date = @date
INSERT INTO [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] (AccountID, Name, IT_TotalScore, IT_KillCount, IT_RelicsGivenCount, IT_Wins, Date)
SELECT (SELECT Id FROM [MuOnline].[dbo].[AccountCharacter] WITH (READUNCOMMITTED) WHERE GameIDC = i.Name),
i.Name,
CASE WHEN i.TotalScore > d.TotalScore THEN i.TotalScore - d.TotalScore ELSE 0 END,
CASE WHEN i.KillCount > d.KillCount THEN i.KillCount - d.KillCount ELSE 0 END,
CASE WHEN i.RelicsGivenCount > d.RelicsGivenCount THEN i.RelicsGivenCount - d.RelicsGivenCount ELSE 0 END,
CASE WHEN i.isWinner > d.isWinner THEN i.isWinner - d.isWinner ELSE 0 END,
@date
FROM inserted i
JOIN deleted d ON d.Name = i.Name
WHERE NOT EXISTS (
SELECT Name FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te WITH (READUNCOMMITTED)
WHERE te.Name = i.Name AND te.Date = @date
)
END
ELSE
BEGIN
UPDATE [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT]
SET IT_TotalScore = CASE WHEN i.TotalScore > 0 THEN te.IT_TotalScore + i.TotalScore ELSE te.IT_TotalScore END,
IT_KillCount = CASE WHEN i.KillCount > 0 THEN te.IT_KillCount + i.KillCount ELSE te.IT_KillCount END,
IT_RelicsGivenCount = CASE WHEN i.RelicsGivenCount > 0 THEN te.IT_RelicsGivenCount + i.RelicsGivenCount ELSE te.IT_RelicsGivenCount END,
IT_Wins = CASE WHEN i.isWinner > 0 THEN te.IT_Wins + i.isWinner ELSE te.IT_Wins END
FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te
JOIN inserted i ON te.Name = i.Name
WHERE te.Name = i.Name AND te.Date = @date
INSERT INTO [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] (AccountID, Name, IT_TotalScore, IT_KillCount, IT_RelicsGivenCount, IT_Wins, Date)
SELECT (SELECT Id FROM [MuOnline].[dbo].[AccountCharacter] WITH (READUNCOMMITTED) WHERE GameIDC = i.Name),
i.Name,
CASE WHEN i.TotalScore > 0 THEN i.TotalScore ELSE 0 END,
CASE WHEN i.KillCount > 0 THEN i.KillCount ELSE 0 END,
CASE WHEN i.RelicsGivenCount > 0 THEN i.RelicsGivenCount ELSE 0 END,
CASE WHEN i.isWinner > 0 THEN i.isWinner ELSE 0 END,
@date
FROM inserted i
WHERE NOT EXISTS (
SELECT Name FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te WITH (READUNCOMMITTED)
WHERE te.Name = i.Name AND te.Date = @date
)
END
SET NOCOUNT OFF
END
END
IF (@@Error <> 0)
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
GO
Season 6 - Season 9
Python:
Triggers for MuOnline database
Please replace "[MuOnline]" with your MuOnline database name. In the code search for:
Código:
SET @cLevel_MAX = 400;
SET @mLevel_MAX = 520;
SET @RESETS_MAX = 100;
SET @Grand_Resets_MAX = 0;
Replace the values 400, 520, 100 and 0 with your server configuration - maximum allowed level, master level, reset and grand reset. After that execute it in your SQL Server Management Studio. To do that open SQL Server Management Studio, in top navigation panel click on "New Query" and paste trigger code (which is displayed below) into new opened window tab, after that press "F5" or click on button "Execute" in top navigation panel.
Código:
USE [MuOnline]
GO
IF OBJECT_ID ('IMPERIAMUCMS_TRIGGER_CHARACTER_TR', 'TR') IS NOT NULL
DROP TRIGGER IMPERIAMUCMS_TRIGGER_CHARACTER_TR
GO
IF OBJECT_ID ('IMPERIAMUCMS_TRIGGER_CHARACTER_INSERT_TR', 'TR') IS NOT NULL
DROP TRIGGER IMPERIAMUCMS_TRIGGER_CHARACTER_INSERT_TR
GO
IF OBJECT_ID ('IMPERIAMUCMS_TRIGGER_GUILD_TR', 'TR') IS NOT NULL
DROP TRIGGER IMPERIAMUCMS_TRIGGER_GUILD_TR
GO
IF OBJECT_ID ('IMPERIAMUCMS_TRIGGER_MONSTER_TR', 'TR') IS NOT NULL
DROP TRIGGER IMPERIAMUCMS_TRIGGER_MONSTER_TR
GO
IF OBJECT_ID ('IMPERIAMUCMS_TRIGGER_GENS_TR', 'TR') IS NOT NULL
DROP TRIGGER IMPERIAMUCMS_TRIGGER_GENS_TR
GO
IF OBJECT_ID ('IMPERIAMUCMS_TRIGGER_GENS_ABUSE_TR', 'TR') IS NOT NULL
DROP TRIGGER IMPERIAMUCMS_TRIGGER_GENS_ABUSE_TR
GO
IF OBJECT_ID ('IMPERIAMUCMS_TRIGGER_INGAME_SHOP_POINTS_TR', 'TR') IS NOT NULL
DROP TRIGGER IMPERIAMUCMS_TRIGGER_INGAME_SHOP_POINTS_TR
GO
IF OBJECT_ID ('IMPERIAMUCMS_TRIGGER_ARCHITECT_CS', 'TR') IS NOT NULL
DROP TRIGGER IMPERIAMUCMS_TRIGGER_ARCHITECT_CS
GO
CREATE TRIGGER IMPERIAMUCMS_TRIGGER_ARCHITECT_CS ON [dbo].[MuCastle_DATA]
AFTER UPDATE
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
IF TRIGGER_NESTLEVEL(@@PROCID) = 1
BEGIN
SET NOCOUNT ON
DECLARE @OWNER_GUILD varchar(8);
DECLARE @iOWNER_GUILD varchar(8);
SELECT @OWNER_GUILD = d.OWNER_GUILD FROM deleted d;
SELECT @iOWNER_GUILD = i.OWNER_GUILD FROM inserted i;
IF (UPDATE(OWNER_GUILD) AND @OWNER_GUILD != @iOWNER_GUILD)
BEGIN
DELETE FROM IMPERIAMUCMS_ARCHITECT
DELETE FROM IMPERIAMUCMS_ARCHITECT_BANK
END
END
IF (@@Error <> 0)
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
GO
CREATE TRIGGER IMPERIAMUCMS_TRIGGER_CHARACTER_INSERT_TR ON [dbo].[Character]
AFTER INSERT
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
IF TRIGGER_NESTLEVEL(@@PROCID) = 1
BEGIN
SET NOCOUNT ON
DECLARE @AccountID varchar(10);
DECLARE @Name varchar(10);
SELECT @AccountID = i.AccountID FROM inserted i;
SELECT @Name = i.Name FROM inserted i;
BEGIN
INSERT INTO IMPERIAMUCMS_CHARACTER_PROGRESS_LOGS (AccountID, Name, OldValue, NewValue, Type, Date, IP, TotalTime) VALUES (@AccountID, @Name, 0, 0, 1, SYSDATETIME(), '0.0.0.0', NULL)
INSERT INTO IMPERIAMUCMS_CHARACTER_PROGRESS_LOGS (AccountID, Name, OldValue, NewValue, Type, Date, IP, TotalTime) VALUES (@AccountID, @Name, 0, 0, 2, SYSDATETIME(), '0.0.0.0', NULL)
END
END
IF (@@Error <> 0)
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
GO
CREATE TRIGGER IMPERIAMUCMS_TRIGGER_CHARACTER_TR ON [dbo].[Character]
AFTER UPDATE
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
IF TRIGGER_NESTLEVEL(@@PROCID) = 1
BEGIN
SET NOCOUNT ON
DECLARE @cLevel_MAX int;
DECLARE @mLevel_MAX int;
DECLARE @RESETS_MAX int;
DECLARE @Grand_Resets_MAX int;
SET @cLevel_MAX = 400;
SET @mLevel_MAX = 800;
SET @RESETS_MAX = 100;
SET @Grand_Resets_MAX = 0;
DECLARE @date date;
SELECT @date = CAST(GETDATE() AS DATE);
BEGIN
UPDATE Character
SET MaxReached = CAST(GETDATE() AS SMALLDATETIME)
FROM Character c
JOIN inserted i ON c.Name = i.Name
WHERE c.Name = i.Name AND i.cLevel = @cLevel_MAX AND i.mLevel = @mLevel_MAX
AND i.RESETS = @RESETS_MAX AND i.Grand_Resets = @Grand_Resets_MAX
UPDATE IMPERIAMUCMS_TRIGGER_CHARACTER
SET cLevel = CASE WHEN i.cLevel > d.cLevel THEN tc.cLevel + i.cLevel - d.cLevel ELSE tc.cLevel END,
mLevel = CASE WHEN i.mLevel > d.mLevel THEN tc.mLevel + i.mLevel - d.mLevel ELSE tc.mLevel END,
RESETS = CASE WHEN i.RESETS > d.RESETS THEN tc.RESETS + i.RESETS - d.RESETS ELSE tc.RESETS END,
Grand_Resets = CASE WHEN i.Grand_Resets > d.Grand_Resets THEN tc.Grand_Resets + i.Grand_Resets - d.Grand_Resets ELSE tc.Grand_Resets END,
Experience = CASE WHEN i.Experience > d.Experience THEN tc.Experience + i.Experience - d.Experience ELSE tc.Experience END,
mlExperience = CASE WHEN i.mlExperience > d.mlExperience THEN tc.mlExperience + i.mlExperience - d.mlExperience ELSE tc.mlExperience END,
Money = CASE WHEN i.Money > d.Money THEN tc.Money + i.Money - d.Money ELSE tc.Money END,
PkCount = CASE WHEN i.PkCount > d.PkCount THEN tc.PkCount + i.PkCount - d.PkCount ELSE tc.PkCount END,
WinDuels = CASE WHEN i.WinDuels > d.WinDuels THEN tc.WinDuels + i.WinDuels - d.WinDuels ELSE tc.WinDuels END,
LoseDuels = CASE WHEN i.LoseDuels > d.LoseDuels THEN tc.LoseDuels + i.LoseDuels - d.LoseDuels ELSE tc.LoseDuels END
FROM IMPERIAMUCMS_TRIGGER_CHARACTER tc
JOIN inserted i ON tc.Name = i.Name
JOIN deleted d ON tc.Name = d.Name
WHERE tc.Name = i.Name AND tc.Date = @date
-- Guild
UPDATE IMPERIAMUCMS_TRIGGER_GUILD
SET cLevel = CASE WHEN i.cLevel > d.cLevel THEN tg.cLevel + i.cLevel - d.cLevel ELSE tg.cLevel END,
mLevel = CASE WHEN i.mLevel > d.mLevel THEN tg.mLevel + i.mLevel - d.mLevel ELSE tg.mLevel END,
RESETS = CASE WHEN i.RESETS > d.RESETS THEN tg.RESETS + i.RESETS - d.RESETS ELSE tg.RESETS END,
Grand_Resets = CASE WHEN i.Grand_Resets > d.Grand_Resets THEN tg.Grand_Resets + i.Grand_Resets - d.Grand_Resets ELSE tg.Grand_Resets END
FROM IMPERIAMUCMS_TRIGGER_GUILD tg
JOIN inserted i ON tg.G_Name = (SELECT G_Name FROM GuildMember gm WITH (READUNCOMMITTED) WHERE gm.Name = i.Name)
JOIN deleted d ON tg.G_Name = (SELECT G_Name FROM GuildMember gm WITH (READUNCOMMITTED) WHERE gm.Name = d.Name)
WHERE EXISTS (
SELECT G_Name FROM GuildMember gm WITH (READUNCOMMITTED)
WHERE gm.Name = i.Name
) AND tg.G_Name = (
SELECT G_Name FROM GuildMember gm WITH (READUNCOMMITTED)
WHERE gm.Name = i.Name
) AND tg.Date = @date
INSERT INTO IMPERIAMUCMS_TRIGGER_CHARACTER (AccountID, Name, cLevel, mLevel, RESETS, Grand_Resets,
Experience, mlExperience, Money, PkCount, WinDuels, LoseDuels, Date)
SELECT i.AccountID, i.Name,
CASE WHEN i.cLevel > d.cLevel THEN i.cLevel - d.cLevel ELSE 0 END,
CASE WHEN i.mLevel > d.mLevel THEN i.mLevel - d.mLevel ELSE 0 END,
CASE WHEN i.RESETS > d.RESETS THEN i.RESETS - d.RESETS ELSE 0 END,
CASE WHEN i.Grand_Resets > d.Grand_Resets THEN i.Grand_Resets - d.Grand_Resets ELSE 0 END,
CASE WHEN i.Experience > d.Experience THEN i.Experience - d.Experience ELSE 0 END,
CASE WHEN i.mlExperience > d.mlExperience THEN i.mlExperience - d.mlExperience ELSE 0 END,
CASE WHEN i.Money > d.Money THEN i.Money - d.Money ELSE 0 END,
CASE WHEN i.PkCount > d.PkCount THEN i.PkCount - d.PkCount ELSE 0 END,
CASE WHEN i.WinDuels > d.WinDuels THEN i.WinDuels - d.WinDuels ELSE 0 END,
CASE WHEN i.LoseDuels > d.LoseDuels THEN i.LoseDuels - d.LoseDuels ELSE 0 END,
@date
FROM inserted i
JOIN deleted d ON d.Name = i.Name
WHERE NOT EXISTS (
SELECT Name FROM IMPERIAMUCMS_TRIGGER_CHARACTER tc
WHERE tc.Name = i.Name AND tc.Date = @date
)
-- Guild
INSERT INTO IMPERIAMUCMS_TRIGGER_GUILD (G_Name, G_Master, cLevel, mLevel, RESETS, Grand_Resets, Date)
SELECT (SELECT G_Name FROM GuildMember gm WITH (READUNCOMMITTED) WHERE gm.Name = i.Name),
(SELECT G_Master FROM Guild g WITH (READUNCOMMITTED) WHERE g.G_Name = (
SELECT G_Name FROM GuildMember gm WITH (READUNCOMMITTED) WHERE gm.Name = i.Name
)),
CASE WHEN i.cLevel > d.cLevel THEN i.cLevel - d.cLevel ELSE 0 END,
CASE WHEN i.mLevel > d.mLevel THEN i.mLevel - d.mLevel ELSE 0 END,
CASE WHEN i.RESETS > d.RESETS THEN i.RESETS - d.RESETS ELSE 0 END,
CASE WHEN i.Grand_Resets > d.Grand_Resets THEN i.Grand_Resets - d.Grand_Resets ELSE 0 END,
@date
FROM inserted i
JOIN deleted d ON d.Name = i.Name
WHERE EXISTS (
SELECT G_Name FROM GuildMember gm WITH (READUNCOMMITTED)
WHERE gm.Name = i.Name
) AND NOT EXISTS (
SELECT G_Name FROM IMPERIAMUCMS_TRIGGER_GUILD tg
WHERE tg.G_Name = (
SELECT G_Name FROM GuildMember gm WITH (READUNCOMMITTED)
WHERE gm.Name = i.Name
) AND tg.Date = @date
)
SET NOCOUNT OFF
END
END
IF (@@Error <> 0)
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
GO
CREATE TRIGGER IMPERIAMUCMS_TRIGGER_GUILD_TR ON [dbo].[Guild]
AFTER UPDATE
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
IF TRIGGER_NESTLEVEL(@@PROCID) = 1
BEGIN
SET NOCOUNT ON
DECLARE @date date;
SELECT @date = CAST(GETDATE() AS DATE);
BEGIN
UPDATE IMPERIAMUCMS_TRIGGER_GUILD SET G_Score = tg.G_Score + (i.G_Score - d.G_Score)
FROM IMPERIAMUCMS_TRIGGER_GUILD tg
JOIN inserted i ON tg.G_Name = i.G_Name
JOIN deleted d ON tg.G_Name = d.G_Name
WHERE (i.G_Score > d.G_Score) AND tg.G_Name = i.G_Name AND tg.Date = @date
INSERT INTO IMPERIAMUCMS_TRIGGER_GUILD (G_Name, G_Master, G_Score, Date)
SELECT i.G_Name,
(SELECT G_Master FROM Guild WITH (READUNCOMMITTED) WHERE G_Name = i.G_Name),
(i.G_Score - d.G_Score), @date
FROM inserted i
JOIN deleted d ON d.G_Name = i.G_Name
WHERE (i.G_Score > d.G_Score)
AND NOT EXISTS (
SELECT G_Name FROM IMPERIAMUCMS_TRIGGER_GUILD tg
WHERE tg.G_Name = i.G_Name AND tg.Date = @date
)
SET NOCOUNT OFF
END
END
IF (@@Error <> 0)
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
GO
CREATE TRIGGER IMPERIAMUCMS_TRIGGER_MONSTER_TR ON [dbo].[C_Monster_KillCount]
AFTER UPDATE, INSERT
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
IF TRIGGER_NESTLEVEL(@@PROCID) = 1
BEGIN
SET NOCOUNT ON
DECLARE @date date;
SELECT @date = CAST(GETDATE() AS DATE);
BEGIN
IF EXISTS (SELECT * FROM DELETED)
BEGIN
UPDATE IMPERIAMUCMS_TRIGGER_MONSTER
SET Count = tm.Count + (i.count - d.count),
LastKilled = CAST(GETDATE() AS DATETIME)
FROM IMPERIAMUCMS_TRIGGER_MONSTER tm
JOIN inserted i ON tm.Name = i.Name
JOIN deleted d ON tm.Name = d.Name
WHERE (i.count > d.count) AND tm.Name = i.Name AND tm.MonsterID = i.MonsterId AND tm.Date = @date
INSERT INTO IMPERIAMUCMS_TRIGGER_MONSTER (AccountID, Name, MonsterID, Count, LastKilled, Date)
SELECT (SELECT Id FROM AccountCharacter WITH (READUNCOMMITTED) WHERE GameIDC = i.Name),
i.Name, i.MonsterId, (i.count - d.count), CAST(GETDATE() AS DATETIME), @date
FROM inserted i
JOIN deleted d ON d.Name = i.Name
WHERE (i.count > d.count)
AND NOT EXISTS (
SELECT Name FROM IMPERIAMUCMS_TRIGGER_MONSTER tm WITH (READUNCOMMITTED)
WHERE tm.Name = i.Name AND tm.MonsterID = i.MonsterId AND tm.Date = @date
)
END
ELSE
BEGIN
UPDATE IMPERIAMUCMS_TRIGGER_MONSTER
SET Count = CASE WHEN i.count > 0 THEN tm.Count + i.count ELSE tm.Count END
FROM IMPERIAMUCMS_TRIGGER_MONSTER tm
JOIN inserted i ON tm.Name = i.Name
WHERE tm.Name = i.Name AND tm.MonsterID = i.MonsterId AND tm.Date = @date
INSERT INTO IMPERIAMUCMS_TRIGGER_MONSTER (AccountID, Name, MonsterID, Count, LastKilled, Date)
SELECT (SELECT Id FROM AccountCharacter WITH (READUNCOMMITTED) WHERE GameIDC = i.Name),
i.Name, i.MonsterId,
CASE WHEN i.count > 0 THEN i.count ELSE 0 END,
CAST(GETDATE() AS DATETIME),
@date
FROM inserted i
WHERE NOT EXISTS (
SELECT Name FROM IMPERIAMUCMS_TRIGGER_MONSTER tm WITH (READUNCOMMITTED)
WHERE tm.Name = i.Name AND tm.MonsterID = i.MonsterId AND tm.Date = @date
)
END
SET NOCOUNT OFF
END
END
IF (@@Error <> 0)
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
GO
CREATE TRIGGER IMPERIAMUCMS_TRIGGER_GENS_TR ON [dbo].[IGC_Gens]
AFTER UPDATE, INSERT
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
IF TRIGGER_NESTLEVEL(@@PROCID) = 1
BEGIN
SET NOCOUNT ON
DECLARE @date date;
SELECT @date = CAST(GETDATE() AS DATE);
BEGIN
IF EXISTS (SELECT * FROM DELETED)
BEGIN
UPDATE IMPERIAMUCMS_TRIGGER_CHARACTER SET Gens_Points = tc.Gens_Points + (i.Points - d.Points)
FROM IMPERIAMUCMS_TRIGGER_CHARACTER tc
JOIN inserted i ON tc.Name = i.Name
JOIN deleted d ON tc.Name = d.Name
WHERE (i.Points > d.Points) AND tc.Name = i.Name AND tc.Date = @date
INSERT INTO IMPERIAMUCMS_TRIGGER_CHARACTER (AccountID, Name, Gens_Points, Gens_Kills, Date)
SELECT (SELECT Id FROM AccountCharacter WITH (READUNCOMMITTED) WHERE GameIDC = i.Name),
i.Name, (i.Points - d.Points), 0, @date
FROM inserted i
JOIN deleted d ON d.Name = i.Name
WHERE (i.Points > d.Points)
AND NOT EXISTS (
SELECT Name FROM IMPERIAMUCMS_TRIGGER_CHARACTER tc WITH (READUNCOMMITTED)
WHERE tc.Name = i.Name AND tc.Date = @date
)
END
ELSE
BEGIN
UPDATE IMPERIAMUCMS_TRIGGER_CHARACTER
SET Gens_Points = CASE WHEN i.Points > 0 THEN tc.Gens_Points + i.Points ELSE tc.Gens_Points END
FROM IMPERIAMUCMS_TRIGGER_CHARACTER tc
JOIN inserted i ON tc.Name = i.Name
WHERE tc.Name = i.Name AND tc.Date = @date
INSERT INTO IMPERIAMUCMS_TRIGGER_CHARACTER (AccountID, Name, Gens_Points, Gens_Kills, Date)
SELECT (SELECT Id FROM AccountCharacter WITH (READUNCOMMITTED) WHERE GameIDC = i.Name),
i.Name,
CASE WHEN i.Points > 0 THEN i.Points ELSE 0 END,
0,
@date
FROM inserted i
WHERE NOT EXISTS (
SELECT Name FROM IMPERIAMUCMS_TRIGGER_CHARACTER tc WITH (READUNCOMMITTED)
WHERE tc.Name = i.Name AND tc.Date = @date
)
END
SET NOCOUNT OFF
END
END
IF (@@Error <> 0)
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
GO
CREATE TRIGGER IMPERIAMUCMS_TRIGGER_GENS_ABUSE_TR ON [dbo].[IGC_GensAbuse]
AFTER UPDATE, INSERT
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
IF TRIGGER_NESTLEVEL(@@PROCID) = 1
BEGIN
SET NOCOUNT ON
DECLARE @date date;
SELECT @date = CAST(GETDATE() AS DATE);
BEGIN
IF EXISTS (SELECT * FROM DELETED)
BEGIN
UPDATE IMPERIAMUCMS_TRIGGER_CHARACTER SET Gens_Kills = tc.Gens_Kills + (i.KillCount - d.KillCount)
FROM IMPERIAMUCMS_TRIGGER_CHARACTER tc
JOIN inserted i ON tc.Name = i.Name
JOIN deleted d ON tc.Name = d.Name
WHERE (i.KillCount > d.KillCount) AND tc.Name = i.Name AND tc.Date = @date
INSERT INTO IMPERIAMUCMS_TRIGGER_CHARACTER (AccountID, Name, Gens_Points, Gens_Kills, Date)
SELECT (SELECT Id FROM AccountCharacter WITH (READUNCOMMITTED) WHERE GameIDC = i.Name),
i.Name, 0, (i.KillCount - d.KillCount), @date
FROM inserted i
JOIN deleted d ON d.Name = i.Name
WHERE (i.KillCount > d.KillCount)
AND NOT EXISTS (
SELECT Name FROM IMPERIAMUCMS_TRIGGER_CHARACTER tc WITH (READUNCOMMITTED)
WHERE tc.Name = i.Name AND tc.Date = @date
)
END
ELSE
BEGIN
UPDATE IMPERIAMUCMS_TRIGGER_CHARACTER
SET Gens_Kills = CASE WHEN i.KillCount > 0 THEN tc.Gens_Kills + i.KillCount ELSE tc.Gens_Kills END
FROM IMPERIAMUCMS_TRIGGER_CHARACTER tc
JOIN inserted i ON tc.Name = i.Name
WHERE tc.Name = i.Name AND tc.Date = @date
INSERT INTO IMPERIAMUCMS_TRIGGER_CHARACTER (AccountID, Name, Gens_Points, Gens_Kills, Date)
SELECT (SELECT Id FROM AccountCharacter WITH (READUNCOMMITTED) WHERE GameIDC = i.Name),
i.Name,
0,
CASE WHEN i.KillCount > 0 THEN i.KillCount ELSE 0 END,
@date
FROM inserted i
WHERE NOT EXISTS (
SELECT Name FROM IMPERIAMUCMS_TRIGGER_CHARACTER tc WITH (READUNCOMMITTED)
WHERE tc.Name = i.Name AND tc.Date = @date
)
END
SET NOCOUNT OFF
END
END
IF (@@Error <> 0)
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
GO
CREATE TRIGGER IMPERIAMUCMS_TRIGGER_INGAME_SHOP_POINTS_TR ON [dbo].[T_InGameShop_Point]
AFTER UPDATE, INSERT
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
IF TRIGGER_NESTLEVEL(@@PROCID) = 1
BEGIN
SET NOCOUNT ON
DECLARE @date date;
SELECT @date = CAST(GETDATE() AS DATE);
BEGIN
IF EXISTS (SELECT * FROM DELETED)
BEGIN
UPDATE IMPERIAMUCMS_TRIGGER_INGAME_SHOP_POINTS
SET WCoin = CASE WHEN i.WCoinC > d.WCoinC THEN tp.WCoin + i.WCoinC - d.WCoinC ELSE tp.WCoin END,
GoblinPoint = CASE WHEN i.GoblinPoint > d.GoblinPoint THEN tp.GoblinPoint + i.GoblinPoint - d.GoblinPoint ELSE tp.GoblinPoint END
FROM IMPERIAMUCMS_TRIGGER_INGAME_SHOP_POINTS tp
JOIN inserted i ON tp.AccountID = i.AccountID
JOIN deleted d ON tp.AccountID = d.AccountID
WHERE tp.AccountID = i.AccountID AND tp.Date = @date
INSERT INTO IMPERIAMUCMS_TRIGGER_INGAME_SHOP_POINTS (AccountID, WCoin, GoblinPoint, Date)
SELECT i.AccountID,
CASE WHEN i.WCoinC > d.WCoinC THEN i.WCoinC - d.WCoinC ELSE 0 END,
CASE WHEN i.GoblinPoint > d.GoblinPoint THEN i.GoblinPoint - d.GoblinPoint ELSE 0 END,
@date
FROM inserted i
JOIN deleted d ON d.AccountID = i.AccountID
WHERE NOT EXISTS (
SELECT AccountID FROM IMPERIAMUCMS_TRIGGER_INGAME_SHOP_POINTS tp WITH (READUNCOMMITTED)
WHERE tp.AccountID = i.AccountID AND tp.Date = @date
)
END
ELSE
BEGIN
UPDATE IMPERIAMUCMS_TRIGGER_INGAME_SHOP_POINTS
SET WCoin = CASE WHEN i.WCoinC > 0 THEN tp.WCoin + i.WCoinC ELSE tp.WCoin END,
GoblinPoint = CASE WHEN i.GoblinPoint > 0 THEN tp.GoblinPoint + i.GoblinPoint ELSE tp.GoblinPoint END
FROM IMPERIAMUCMS_TRIGGER_INGAME_SHOP_POINTS tp
JOIN inserted i ON tp.AccountID = i.AccountID
WHERE tp.AccountID = i.AccountID AND tp.Date = @date
INSERT INTO IMPERIAMUCMS_TRIGGER_INGAME_SHOP_POINTS (AccountID, WCoin, GoblinPoint, Date)
SELECT i.AccountID,
CASE WHEN i.WCoinC > 0 THEN i.WCoinC ELSE 0 END,
CASE WHEN i.GoblinPoint > 0 THEN i.GoblinPoint ELSE 0 END,
@date
FROM inserted i
WHERE NOT EXISTS (
SELECT AccountID FROM IMPERIAMUCMS_TRIGGER_INGAME_SHOP_POINTS tp WITH (READUNCOMMITTED)
WHERE tp.AccountID = i.AccountID AND tp.Date = @date
)
END
SET NOCOUNT OFF
END
END
IF (@@Error <> 0)
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
GO
Triggers for Ranking database
Please replace "[Ranking]" with your Ranking database name and "[MuOnline]" with your MuOnline database name. After that execute it in your SQL Server Management Studio. To do that open SQL Server Management Studio, in top navigation panel click on "New Query" and paste trigger code (which is displayed below) into new opened window tab, after that press "F5" or click on button "Execute" in top navigation panel.
Python:
Código:
USE [Ranking]
GO
IF OBJECT_ID ('IMPERIAMUCMS_TRIGGER_EVENT_DS_TR', 'TR') IS NOT NULL
DROP TRIGGER IMPERIAMUCMS_TRIGGER_EVENT_DS_TR
GO
IF OBJECT_ID ('IMPERIAMUCMS_TRIGGER_EVENT_BC_TR', 'TR') IS NOT NULL
DROP TRIGGER IMPERIAMUCMS_TRIGGER_EVENT_BC_TR
GO
IF OBJECT_ID ('IMPERIAMUCMS_TRIGGER_EVENT_CC_TR', 'TR') IS NOT NULL
DROP TRIGGER IMPERIAMUCMS_TRIGGER_EVENT_CC_TR
GO
IF OBJECT_ID ('IMPERIAMUCMS_TRIGGER_EVENT_IT_TR', 'TR') IS NOT NULL
DROP TRIGGER IMPERIAMUCMS_TRIGGER_EVENT_IT_TR
GO
CREATE TRIGGER IMPERIAMUCMS_TRIGGER_EVENT_DS_TR ON [dbo].[EVENT_INFO]
AFTER UPDATE, INSERT
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
IF TRIGGER_NESTLEVEL(@@PROCID) = 1
BEGIN
SET NOCOUNT ON
DECLARE @date date;
SELECT @date = CAST(GETDATE() AS DATE);
BEGIN
IF EXISTS (SELECT * FROM DELETED)
BEGIN
UPDATE [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] SET DS_Points = te.DS_Points + (i.Point - d.Point)
FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te
JOIN inserted i ON te.Name = i.CharacterName
JOIN deleted d ON te.Name = d.CharacterName
WHERE (i.Point > d.Point) AND te.Name = i.CharacterName AND te.Date = @date
INSERT INTO [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] (AccountID, Name, DS_Points, Date)
SELECT (SELECT Id FROM [MuOnline].[dbo].[AccountCharacter] WITH (READUNCOMMITTED) WHERE GameIDC = i.CharacterName),
i.CharacterName, (i.Point - d.Point), @date
FROM inserted i
JOIN deleted d ON d.CharacterName = i.CharacterName
WHERE (i.Point > d.Point)
AND NOT EXISTS (
SELECT Name FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te WITH (READUNCOMMITTED)
WHERE te.Name = i.CharacterName AND te.Date = @date
)
END
ELSE
BEGIN
UPDATE [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT]
SET DS_Points = CASE WHEN i.Point > 0 THEN te.DS_Points + i.Point ELSE te.DS_Points END
FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te
JOIN inserted i ON te.Name = i.CharacterName
WHERE te.Name = i.CharacterName AND te.Date = @date
INSERT INTO [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] (AccountID, Name, DS_Points, Date)
SELECT (SELECT Id FROM [MuOnline].[dbo].[AccountCharacter] WITH (READUNCOMMITTED) WHERE GameIDC = i.CharacterName),
i.CharacterName,
CASE WHEN i.Point > 0 THEN i.Point ELSE 0 END,
@date
FROM inserted i
WHERE NOT EXISTS (
SELECT Name FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te WITH (READUNCOMMITTED)
WHERE te.Name = i.CharacterName AND te.Date = @date
)
END
SET NOCOUNT OFF
END
END
IF (@@Error <> 0)
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
GO
CREATE TRIGGER IMPERIAMUCMS_TRIGGER_EVENT_BC_TR ON [dbo].[EVENT_INFO_BC_5TH]
AFTER UPDATE, INSERT
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
IF TRIGGER_NESTLEVEL(@@PROCID) = 1
BEGIN
SET NOCOUNT ON
DECLARE @date date;
SELECT @date = CAST(GETDATE() AS DATE);
BEGIN
IF EXISTS (SELECT * FROM DELETED)
BEGIN
UPDATE [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] SET BC_Points = te.BC_Points + (i.Point - d.Point)
FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te
JOIN inserted i ON te.Name = i.CharacterName
JOIN deleted d ON te.Name = d.CharacterName
WHERE (i.Point > d.Point) AND te.Name = i.CharacterName AND te.Date = @date
INSERT INTO [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] (AccountID, Name, BC_Points, Date)
SELECT (SELECT Id FROM [MuOnline].[dbo].[AccountCharacter] WITH (READUNCOMMITTED) WHERE GameIDC = i.CharacterName),
i.CharacterName, (i.Point - d.Point), @date
FROM inserted i
JOIN deleted d ON d.CharacterName = i.CharacterName
WHERE (i.Point > d.Point)
AND NOT EXISTS (
SELECT Name FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te WITH (READUNCOMMITTED)
WHERE te.Name = i.CharacterName AND te.Date = @date
)
END
ELSE
BEGIN
UPDATE [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT]
SET BC_Points = CASE WHEN i.Point > 0 THEN te.BC_Points + i.Point ELSE te.BC_Points END
FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te
JOIN inserted i ON te.Name = i.CharacterName
WHERE te.Name = i.CharacterName AND te.Date = @date
INSERT INTO [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] (AccountID, Name, BC_Points, Date)
SELECT (SELECT Id FROM [MuOnline].[dbo].[AccountCharacter] WITH (READUNCOMMITTED) WHERE GameIDC = i.CharacterName),
i.CharacterName,
CASE WHEN i.Point > 0 THEN i.Point ELSE 0 END,
@date
FROM inserted i
WHERE NOT EXISTS (
SELECT Name FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te WITH (READUNCOMMITTED)
WHERE te.Name = i.CharacterName AND te.Date = @date
)
END
SET NOCOUNT OFF
END
END
IF (@@Error <> 0)
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
GO
CREATE TRIGGER IMPERIAMUCMS_TRIGGER_EVENT_CC_TR ON [dbo].[EVENT_INFO_CC]
AFTER UPDATE, INSERT
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
IF TRIGGER_NESTLEVEL(@@PROCID) = 1
BEGIN
SET NOCOUNT ON
DECLARE @date date;
SELECT @date = CAST(GETDATE() AS DATE);
BEGIN
IF EXISTS (SELECT * FROM DELETED)
BEGIN
UPDATE [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT]
SET CC_Wins = CASE WHEN i.Wins > d.Wins THEN te.CC_Wins + i.Wins - d.Wins ELSE te.CC_Wins END,
CC_PKillCount = CASE WHEN i.PKillCount > d.PKillCount THEN te.CC_PKillCount + i.PKillCount - d.PKillCount ELSE te.CC_PKillCount END,
CC_MKillCount = CASE WHEN i.MKillCount > d.MKillCount THEN te.CC_MKillCount + i.MKillCount - d.MKillCount ELSE te.CC_MKillCount END
FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te
JOIN inserted i ON te.Name = i.Name
JOIN deleted d ON te.Name = d.Name
WHERE te.Name = i.Name AND te.Date = @date
INSERT INTO [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] (AccountID, Name, CC_Wins, CC_PKillCount, CC_MKillCount, Date)
SELECT (SELECT Id FROM [MuOnline].[dbo].[AccountCharacter] WITH (READUNCOMMITTED) WHERE GameIDC = i.Name),
i.Name,
CASE WHEN i.Wins > d.Wins THEN i.Wins - d.Wins ELSE 0 END,
CASE WHEN i.PKillCount > d.PKillCount THEN i.PKillCount - d.PKillCount ELSE 0 END,
CASE WHEN i.MKillCount > d.MKillCount THEN i.MKillCount - d.MKillCount ELSE 0 END,
@date
FROM inserted i
JOIN deleted d ON d.Name = i.Name
WHERE NOT EXISTS (
SELECT Name FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te WITH (READUNCOMMITTED)
WHERE te.Name = i.Name AND te.Date = @date
)
END
ELSE
BEGIN
UPDATE [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT]
SET CC_Wins = CASE WHEN i.Wins > 0 THEN te.CC_Wins + i.Wins ELSE te.CC_Wins END,
CC_PKillCount = CASE WHEN i.PKillCount > 0 THEN te.CC_PKillCount + i.PKillCount ELSE te.CC_PKillCount END,
CC_MKillCount = CASE WHEN i.MKillCount > 0 THEN te.CC_MKillCount + i.MKillCount ELSE te.CC_MKillCount END
FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te
JOIN inserted i ON te.Name = i.Name
WHERE te.Name = i.Name AND te.Date = @date
INSERT INTO [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] (AccountID, Name, CC_Wins, CC_PKillCount, CC_MKillCount, Date)
SELECT (SELECT Id FROM [MuOnline].[dbo].[AccountCharacter] WITH (READUNCOMMITTED) WHERE GameIDC = i.Name),
i.Name,
CASE WHEN i.Wins > 0 THEN i.Wins ELSE 0 END,
CASE WHEN i.PKillCount > 0 THEN i.PKillCount ELSE 0 END,
CASE WHEN i.MKillCount > 0 THEN i.MKillCount ELSE 0 END,
@date
FROM inserted i
WHERE NOT EXISTS (
SELECT Name FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te WITH (READUNCOMMITTED)
WHERE te.Name = i.Name AND te.Date = @date
)
END
SET NOCOUNT OFF
END
END
IF (@@Error <> 0)
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
GO
CREATE TRIGGER IMPERIAMUCMS_TRIGGER_EVENT_IT_TR ON [dbo].[EVENT_INFO_IT]
AFTER UPDATE, INSERT
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION
IF TRIGGER_NESTLEVEL(@@PROCID) = 1
BEGIN
SET NOCOUNT ON
DECLARE @date date;
SELECT @date = CAST(GETDATE() AS DATE);
BEGIN
IF EXISTS (SELECT * FROM DELETED)
BEGIN
UPDATE [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT]
SET IT_TotalScore = CASE WHEN i.TotalScore > d.TotalScore THEN te.IT_TotalScore + i.TotalScore - d.TotalScore ELSE te.IT_TotalScore END,
IT_KillCount = CASE WHEN i.KillCount > d.KillCount THEN te.IT_KillCount + i.KillCount - d.KillCount ELSE te.IT_KillCount END,
IT_RelicsGivenCount = CASE WHEN i.RelicsGivenCount > d.RelicsGivenCount THEN te.IT_RelicsGivenCount + i.RelicsGivenCount - d.RelicsGivenCount ELSE te.IT_RelicsGivenCount END,
IT_Wins = CASE WHEN i.isWinner > d.isWinner THEN te.IT_Wins + i.isWinner - d.isWinner ELSE te.IT_Wins END
FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te
JOIN inserted i ON te.Name = i.Name
JOIN deleted d ON te.Name = d.Name
WHERE te.Name = i.Name AND te.Date = @date
INSERT INTO [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] (AccountID, Name, IT_TotalScore, IT_KillCount, IT_RelicsGivenCount, IT_Wins, Date)
SELECT (SELECT Id FROM [MuOnline].[dbo].[AccountCharacter] WITH (READUNCOMMITTED) WHERE GameIDC = i.Name),
i.Name,
CASE WHEN i.TotalScore > d.TotalScore THEN i.TotalScore - d.TotalScore ELSE 0 END,
CASE WHEN i.KillCount > d.KillCount THEN i.KillCount - d.KillCount ELSE 0 END,
CASE WHEN i.RelicsGivenCount > d.RelicsGivenCount THEN i.RelicsGivenCount - d.RelicsGivenCount ELSE 0 END,
CASE WHEN i.isWinner > d.isWinner THEN i.isWinner - d.isWinner ELSE 0 END,
@date
FROM inserted i
JOIN deleted d ON d.Name = i.Name
WHERE NOT EXISTS (
SELECT Name FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te WITH (READUNCOMMITTED)
WHERE te.Name = i.Name AND te.Date = @date
)
END
ELSE
BEGIN
UPDATE [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT]
SET IT_TotalScore = CASE WHEN i.TotalScore > 0 THEN te.IT_TotalScore + i.TotalScore ELSE te.IT_TotalScore END,
IT_KillCount = CASE WHEN i.KillCount > 0 THEN te.IT_KillCount + i.KillCount ELSE te.IT_KillCount END,
IT_RelicsGivenCount = CASE WHEN i.RelicsGivenCount > 0 THEN te.IT_RelicsGivenCount + i.RelicsGivenCount ELSE te.IT_RelicsGivenCount END,
IT_Wins = CASE WHEN i.isWinner > 0 THEN te.IT_Wins + i.isWinner ELSE te.IT_Wins END
FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te
JOIN inserted i ON te.Name = i.Name
WHERE te.Name = i.Name AND te.Date = @date
INSERT INTO [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] (AccountID, Name, IT_TotalScore, IT_KillCount, IT_RelicsGivenCount, IT_Wins, Date)
SELECT (SELECT Id FROM [MuOnline].[dbo].[AccountCharacter] WITH (READUNCOMMITTED) WHERE GameIDC = i.Name),
i.Name,
CASE WHEN i.TotalScore > 0 THEN i.TotalScore ELSE 0 END,
CASE WHEN i.KillCount > 0 THEN i.KillCount ELSE 0 END,
CASE WHEN i.RelicsGivenCount > 0 THEN i.RelicsGivenCount ELSE 0 END,
CASE WHEN i.isWinner > 0 THEN i.isWinner ELSE 0 END,
@date
FROM inserted i
WHERE NOT EXISTS (
SELECT Name FROM [MuOnline].[dbo].[IMPERIAMUCMS_TRIGGER_EVENT] te WITH (READUNCOMMITTED)
WHERE te.Name = i.Name AND te.Date = @date
)
END
SET NOCOUNT OFF
END
END
IF (@@Error <> 0)
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
GO
Script Boss Timer
Código:
USE [MuOnline]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[IMPERIAMUCMS_BOSS_TIMER](
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [nvarchar](255) NOT NULL,
[monsterId] [int] NOT NULL,
[respawn] [int] NOT NULL,
[order] [smallint] NULL,
[active] [tinyint] NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[IMPERIAMUCMS_BOSS_TIMER] ADD DEFAULT ((0)) FOR [respawn]
GO
ALTER TABLE [dbo].[IMPERIAMUCMS_BOSS_TIMER] ADD DEFAULT ((1)) FOR [active]
GO
Configuring cron jobs on Windows
Open AdminCP, go to Scheduled Tasks -> Manage Cron Jobs -> click on the button "RESET ALL CRON JOBS" on the bottom of page.
Open ./_Extra/cron.bat in any text editor and edit both paths (to cron.php and php.exe files).
Now double-click on cron.bat to execute it. All cron jobs were now executed.
Open Windows Task Scheduler and create new action what will execute cron.bat every minute (or every 5 minutes, it's on you) to regularly update all cache files.
Configuring cron jobs on Linux
Open AdminCP, go to Scheduled Tasks -> Manage Cron Jobs -> click on the button "RESET ALL CRON JOBS" on the bottom of page.
In command line execute: crontab -e
Press INSERT button on your keyboard to enable edit mode and on the bottom of file write (replace paths to PHP and cron.php with your paths):
*/5 * * * * /usr/bin/php /var/www/cron/cron.php
^path to PHP ^path to cron.php
Press ESC, then :wq and ENTER to save file.
Now execute manually cron.php with command (replace paths to PHP and cron.php with your paths):
/usr/bin/php -f /var/www/cron/cron.php
^path to PHP ^path to cron.php
If you have problems with permissions on Linux to execute cron.php, follow this steps:
Open /etc/cron.d/ and create here new file with any name with the following content (replace link with your domain):
*/5 * * * * root wget --delete-after
[Somente membros podem ver os links. ]
Edit .htaccess file in /path/to/website/cron/.htaccess to looks like this (replace YOUR_HOST_IP with your IP):
Deny from ALL
Allow from YOUR_HOST_IP