-- -- http://epochmod.gamepedia.com/A2Epoch:Server_Installation_Instructions_Extended -- -- ---------------------------- -- Function structure for FindVehicleKeysCount -- ---------------------------- DROP FUNCTION IF EXISTS `FindVehicleKeysCount`; DELIMITER ;; CREATE FUNCTION `FindVehicleKeysCount`(`keyId` INT) RETURNS int(11) DETERMINISTIC BEGIN DECLARE totalKeys INT DEFAULT 0; DECLARE keyName VARCHAR(32) DEFAULT ""; DECLARE keysInChar INT DEFAULT 0; DECLARE keysInObj INT DEFAULT 0; SET keyName = (CASE WHEN `keyId` < 2501 THEN CONCAT('ItemKeyGreen', `keyId`) WHEN `keyId` < 5001 THEN CONCAT('ItemKeyRed', `keyId` - 2500) WHEN `keyId` < 7501 THEN CONCAT('ItemKeyBlue', `keyId` - 5000) WHEN `keyId` < 10001 THEN CONCAT('ItemKeyYellow', `keyId` - 7500) WHEN `keyId` < 12501 THEN CONCAT('ItemKeyBlack', `keyId` - 10000) ELSE 'ERROR' END); SET keysInChar = (SELECT COUNT(*) FROM `Character_DATA` WHERE `Alive` = '1' AND (`Inventory` LIKE CONCAT('%', keyName, '%') OR `Backpack` LIKE CONCAT('%', keyName, '%'))); SET keysInObj = (SELECT COUNT(*) FROM `Object_DATA` WHERE `Inventory` LIKE CONCAT('%', keyName, '%')); RETURN (keysInChar + keysInObj); END ;; DELIMITER ; -- ---------------------------- -- Function structure for DeleteNonKeyVehicles -- Example usage: SELECT DeleteNonKeyVehicles(); -- ---------------------------- DROP FUNCTION IF EXISTS `DeleteNonKeyVehicles`; DELIMITER ;; CREATE FUNCTION `DeleteNonKeyVehicles`() RETURNS int(11) DETERMINISTIC BEGIN DELETE FROM `Object_DATA` WHERE `Object_DATA`.`CharacterID` <> 0 AND `Object_DATA`.`CharacterID` <= 12500 AND `Object_DATA`.`Classname` NOT LIKE '%Tent%' AND `Object_DATA`.`Classname` NOT LIKE '%Locked' AND `Object_DATA`.`Classname` NOT LIKE 'Land\_%' -- added escape character so LandRover vehicles are not ignored AND `Object_DATA`.`Classname` NOT LIKE 'Cinder%' AND `Object_DATA`.`Classname` NOT LIKE 'Wood%' AND `Object_DATA`.`Classname` NOT LIKE 'Metal%' AND `Object_DATA`.`Classname` NOT LIKE '%Storage%' AND `Object_DATA`.`Classname` NOT LIKE '%CamoNet_DZ' AND `Object_DATA`.`Classname` NOT LIKE 'Concrete%' AND `Object_DATA`.`Classname` NOT LIKE 'Glass%' AND `Object_DATA`.`Classname` NOT LIKE 'Stash%' AND `Object_DATA`.`Classname` NOT LIKE 'Door%' AND `Object_DATA`.`Classname` NOT LIKE 'Garage%' AND `Object_DATA`.`Classname` NOT LIKE 'Helipad%' AND `Object_DATA`.`Classname` NOT LIKE '%Bench%' AND `Object_DATA`.`Classname` NOT LIKE 'Vendmachine%' AND `Object_DATA`.`Classname` NOT LIKE '%Trap%' AND `Object_DATA`.`Classname` NOT LIKE 'GunRack%' AND `Object_DATA`.`Classname` NOT LIKE '%_Static_DZ' AND `Object_DATA`.`Classname` NOT LIKE 'Plant_%' AND `Object_DATA`.`Classname` NOT LIKE 'Compost_Barrel_%' AND `Object_DATA`.`Classname` NOT LIKE 'DragonTeeth_%' AND `Object_DATA`.`Classname` NOT LIKE '%Footbridge_DZ' AND `Object_DATA`.`Classname` NOT LIKE 'HeavyBagFence%' AND `Object_DATA`.`Classname` NOT LIKE 'SandNest%' AND `Object_DATA`.`Classname` NOT LIKE 'StorageBarrel%' AND `Object_DATA`.`Classname` NOT LIKE '%Crate_DZ' AND `Object_DATA`.`Classname` NOT LIKE '%_Stable_DZE' AND `Object_DATA`.`Classname` NOT IN ('Wild_Bee_Hive_DZE','Watertower_DZE','Watertank_DZE','Fueltank_DZE','Satellite_Dish_DZE','Boggle_DZE','Postbox_DZE','Doghouse_DZE','Chicken_Coop_DZE','Rabbit_Hutch_DZE','Windbreak_DZ','BarbedGate_DZ','FortifiedWire_DZ','Arcade_DZ','Sofa_DZ','Armchair_DZ','ATM_DZ','Server_Rack_DZ','Washing_Machine_DZ','Fridge_DZ','Wardrobe_DZ','Commode_DZ','Stoneoven_DZ','CookTripod_DZ','CCTV_DZ','Office_Chair_DZ','Table_DZ','Bed_DZ','Water_Pump_DZ','Greenhouse_DZ','Notebook_DZ','Scaffolding_DZ','OutHouse_DZ','Sandbag1_DZ', 'FireBarrel_DZ', 'StickFence_DZ', 'LightPole_DZ', 'DeerStand_DZ', 'Plastic_Pole_EP1_DZ', 'Hedgehog_DZ', 'FuelPump_DZ', 'Fort_RazorWire', 'Fence_corrugated_DZ', 'CanvasHut_DZ', 'Generator_DZ', 'BagFenceRound_DZ') AND FindVehicleKeysCount(Object_DATA.CharacterID) = 0; RETURN ROW_COUNT(); END ;; DELIMITER ; -- ---------------------------- -- Event structure for removeDamagedVehicles -- ---------------------------- DROP EVENT IF EXISTS `removeDamagedVehicles`; DELIMITER ;; CREATE EVENT `removeDamagedVehicles` ON SCHEDULE EVERY 1 DAY COMMENT 'Removes damaged vehicles' DO DELETE FROM `Object_DATA` WHERE Damage >= 1 ;; DELIMITER ; -- ---------------------------- -- Event structure for removeObjectEmpty -- ---------------------------- DROP EVENT IF EXISTS `removeObjectEmpty`; DELIMITER ;; CREATE EVENT `removeObjectEmpty` ON SCHEDULE EVERY 1 DAY COMMENT 'Removes abandoned storage objects and vehicles' DO DELETE FROM `Object_DATA` WHERE `LastUpdated` < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 14 DAY) AND `Datestamp` < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 24 DAY) AND ( (`Inventory` IS NULL) OR (`Inventory` = '[]') OR (`Inventory` = '[[[],[]],[[],[]],[[],[]]]') ) ;; DELIMITER ; -- ---------------------------- -- Event structure for removeObjectOld -- ---------------------------- DROP EVENT IF EXISTS `removeObjectOld`; DELIMITER ;; CREATE EVENT `removeObjectOld` ON SCHEDULE EVERY 1 DAY COMMENT 'Removes old objects and vehicles' DO DELETE FROM `Object_DATA` WHERE `LastUpdated` < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 24 DAY) AND `Datestamp` < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 42 DAY) ;; DELIMITER ; -- ---------------------------- -- Event structure for setDamageOnAge -- ---------------------------- DROP EVENT IF EXISTS `setDamageOnAge`; DELIMITER ;; CREATE EVENT `setDamageOnAge` ON SCHEDULE EVERY 1 DAY COMMENT 'This sets damage on a wall so that it can be maintained' DO UPDATE `Object_DATA` SET `Damage`=0.1 WHERE `ObjectUID` <> 0 AND `CharacterID` <> 0 AND `Datestamp` < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 3 DAY) AND ( (`Inventory` IS NULL) OR (`Inventory` = '[]') OR (`Classname` IN ('Land_DZE_GarageWoodDoorLocked','Land_DZE_LargeWoodDoorLocked','Land_DZE_WoodDoorLocked','CinderWallDoorLocked_DZ','CinderWallDoorSmallLocked_DZ','WoodenGate_1_DZ','WoodenGate_2_DZ','WoodenGate_3_DZ','WoodenGate_4_DZ','Land_DZE_WoodGateLocked','CinderGateLocked_DZ','Metal_DrawbridgeLocked_DZ','Land_DZE_WoodOpenTopGarageLocked','CinderGarageOpenTopLocked_DZ','DoorLocked_DZ','CinderWallWindowLocked_DZ','CinderDoorHatchLocked_DZ','Concrete_Bunker_Locked_DZ','CinderWallWindowLocked_DZ','Plastic_Pole_EP1_DZ')) ) ;; DELIMITER ; -- ---------------------------- -- Event structure for UnlockNonKeyVehicles -- ---------------------------- DROP EVENT IF EXISTS `UnlockNonKeyVehicles`; DELIMITER ;; CREATE EVENT `UnlockNonKeyVehicles` ON SCHEDULE EVERY 1 DAY DO UPDATE `Object_DATA` SET `Object_DATA`.`CharacterID` = 0 WHERE `Object_DATA`.`CharacterID` <> 0 AND `Object_DATA`.`CharacterID` <= 12500 AND `Object_DATA`.`Classname` NOT LIKE '%Tent%' AND `Object_DATA`.`Classname` NOT LIKE '%Locked' AND `Object_DATA`.`Classname` NOT LIKE 'Land\_%' -- added escape character so LandRover vehicles are not ignored AND `Object_DATA`.`Classname` NOT LIKE 'Cinder%' AND `Object_DATA`.`Classname` NOT LIKE 'Wood%' AND `Object_DATA`.`Classname` NOT LIKE 'Metal%' AND `Object_DATA`.`Classname` NOT LIKE '%Storage%' AND `Object_DATA`.`Classname` NOT LIKE '%CamoNet_DZ' AND `Object_DATA`.`Classname` NOT LIKE 'Concrete%' AND `Object_DATA`.`Classname` NOT LIKE 'Glass%' AND `Object_DATA`.`Classname` NOT LIKE 'Stash%' AND `Object_DATA`.`Classname` NOT LIKE 'Door%' AND `Object_DATA`.`Classname` NOT LIKE 'Garage%' AND `Object_DATA`.`Classname` NOT LIKE 'Helipad%' AND `Object_DATA`.`Classname` NOT LIKE '%Bench%' AND `Object_DATA`.`Classname` NOT LIKE 'Vendmachine%' AND `Object_DATA`.`Classname` NOT LIKE '%Trap%' AND `Object_DATA`.`Classname` NOT LIKE 'GunRack%' AND `Object_DATA`.`Classname` NOT LIKE '%_Static_DZ' AND `Object_DATA`.`Classname` NOT LIKE 'Plant_%' AND `Object_DATA`.`Classname` NOT LIKE 'Compost_Barrel_%' AND `Object_DATA`.`Classname` NOT LIKE 'DragonTeeth_%' AND `Object_DATA`.`Classname` NOT LIKE '%Footbridge_DZ' AND `Object_DATA`.`Classname` NOT LIKE 'HeavyBagFence%' AND `Object_DATA`.`Classname` NOT LIKE 'SandNest%' AND `Object_DATA`.`Classname` NOT LIKE 'StorageBarrel%' AND `Object_DATA`.`Classname` NOT LIKE '%Crate_DZ' AND `Object_DATA`.`Classname` NOT LIKE '%_Stable_DZE' AND `Object_DATA`.`Classname` NOT IN ('Wild_Bee_Hive_DZE','Watertower_DZE','Watertank_DZE','Fueltank_DZE','Satellite_Dish_DZE','Boggle_DZE','Postbox_DZE','Doghouse_DZE','Chicken_Coop_DZE','Rabbit_Hutch_DZE','Windbreak_DZ','BarbedGate_DZ','FortifiedWire_DZ','Arcade_DZ','Sofa_DZ','Armchair_DZ','ATM_DZ','Server_Rack_DZ','Washing_Machine_DZ','Fridge_DZ','Wardrobe_DZ','Commode_DZ','Stoneoven_DZ','CookTripod_DZ','CCTV_DZ','Office_Chair_DZ','Table_DZ','Bed_DZ','Water_Pump_DZ','Greenhouse_DZ','Notebook_DZ','Scaffolding_DZ','OutHouse_DZ','Sandbag1_DZ', 'FireBarrel_DZ', 'StickFence_DZ', 'LightPole_DZ', 'DeerStand_DZ', 'Plastic_Pole_EP1_DZ', 'Hedgehog_DZ', 'FuelPump_DZ', 'Fort_RazorWire', 'Fence_corrugated_DZ', 'CanvasHut_DZ', 'Generator_DZ', 'BagFenceRound_DZ') AND FindVehicleKeysCount(Object_DATA.CharacterID) = 0 ;; DELIMITER ;