mirror of
https://github.com/psforever/PSF-LoginServer.git
synced 2026-07-15 00:14:43 +00:00
Merge branch 'psforever:master' into no-hairpin-nat-login-fix
This commit is contained in:
commit
07c56ed4b0
1 changed files with 80 additions and 0 deletions
|
|
@ -0,0 +1,80 @@
|
||||||
|
-- Fix scoring functions and triggers
|
||||||
|
-- Cleanup
|
||||||
|
|
||||||
|
-- fix trigger function (OLD for DELETE actions)
|
||||||
|
-- fix capture counter
|
||||||
|
-- fix functions by using correct variable names instead of out of scope table columns
|
||||||
|
-- improve functions to use index with ON CONFLICT
|
||||||
|
-- cleanup by removing return values,
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION fn_buildingcapture_updateOnDelete()
|
||||||
|
RETURNS TRIGGER
|
||||||
|
AS
|
||||||
|
$$
|
||||||
|
DECLARE
|
||||||
|
oldAvatarId INT;
|
||||||
|
oldZoneId INT;
|
||||||
|
oldBuildingId INT;
|
||||||
|
oldExp INT;
|
||||||
|
oldType TEXT;
|
||||||
|
BEGIN
|
||||||
|
oldAvatarId := OLD.avatar_id;
|
||||||
|
oldZoneId := OLD.zone_id;
|
||||||
|
oldBuildingId := OLD.building_id;
|
||||||
|
oldExp := OLD.exp;
|
||||||
|
oldType := OLD.exp_type;
|
||||||
|
|
||||||
|
IF (oldType = 'bep') THEN
|
||||||
|
PERFORM proc_expbuildingcapture_addEntryIfNone(oldAvatarId, oldBuildingId, oldZoneId);
|
||||||
|
UPDATE expbuildingcapture
|
||||||
|
SET
|
||||||
|
captures = captures + 1,
|
||||||
|
bep = bep + oldExp
|
||||||
|
WHERE avatar_id = oldAvatarId AND zone_id = oldZoneId AND building_id = oldBuildingId;
|
||||||
|
|
||||||
|
ELSIF (oldType = 'cep') THEN
|
||||||
|
PERFORM proc_expbuildingcapture_addEntryIfNone(oldAvatarId, oldBuildingId, oldZoneId);
|
||||||
|
UPDATE expbuildingcapture
|
||||||
|
SET
|
||||||
|
captures = captures + 1,
|
||||||
|
cep = cep + oldExp
|
||||||
|
WHERE avatar_id = oldAvatarId AND zone_id = oldZoneId AND building_id = oldBuildingId;
|
||||||
|
|
||||||
|
ELSIF (oldType = 'llu') THEN
|
||||||
|
PERFORM proc_llubuildingcapture_addEntryIfNone(oldAvatarId, oldBuildingId, oldZoneId);
|
||||||
|
UPDATE llubuildingcapture
|
||||||
|
SET
|
||||||
|
captures = captures + 1,
|
||||||
|
exp = exp + oldExp
|
||||||
|
WHERE avatar_id = oldAvatarId AND zone_id = oldZoneId AND building_id = oldBuildingId;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
RETURN OLD;
|
||||||
|
END;
|
||||||
|
$$ LANGUAGE plpgsql;
|
||||||
|
|
||||||
|
DROP FUNCTION proc_expbuildingcapture_addEntryIfNone;
|
||||||
|
CREATE OR REPLACE FUNCTION proc_expbuildingcapture_addEntryIfNone
|
||||||
|
(avatarId INT, buildingId INT, zoneId INT)
|
||||||
|
RETURNS VOID
|
||||||
|
AS
|
||||||
|
$$
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO expbuildingcapture (avatar_id, zone_id, building_id, captures, bep, cep)
|
||||||
|
VALUES (avatarId, zoneId, buildingId, 0, 0, 0)
|
||||||
|
ON CONFLICT (avatar_id, zone_id, building_id) DO NOTHING;
|
||||||
|
END;
|
||||||
|
$$ LANGUAGE plpgsql;
|
||||||
|
|
||||||
|
DROP FUNCTION proc_llubuildingcapture_addEntryIfNone;
|
||||||
|
CREATE OR REPLACE FUNCTION proc_llubuildingcapture_addEntryIfNone
|
||||||
|
(avatarId INT, buildingId INT, zoneId INT)
|
||||||
|
RETURNS VOID
|
||||||
|
AS
|
||||||
|
$$
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO llubuildingcapture (avatar_id, zone_id, building_id, captures, exp)
|
||||||
|
VALUES (avatarId, zoneId, buildingId, 0, 0)
|
||||||
|
ON CONFLICT (avatar_id, zone_id, building_id) DO NOTHING;
|
||||||
|
END;
|
||||||
|
$$ LANGUAGE plpgsql;
|
||||||
Loading…
Add table
Add a link
Reference in a new issue