The EMS is a rulescript for Multiplayer - similar to the rulescript of Anarki - on maps of expansion 2(legends). It should be implemented into each multiplayermap, because beside the ability to changing rules it also fixes bugs in the game.
The following Script has to be copied into the mapscript:
-- ################################################################################################### -- # # -- # # -- # Script: Enhanced Multiplayer Script by MadShadow # -- # # -- # # -- ################################################################################################### initEMS = function()return false end; Script.Load("maps\\user\\EMS\\load.lua"); if not initEMS() then local errMsgs = { ["de"] = "Achtung: Enhanced Multiplayer Script wurde nicht gefunden! @cr \195\156berpr\195\188fe ob alle Dateien am richtigen Ort sind!", ["eng"] = "Attention: Enhanced Multiplayer Script could not be found! @cr Make sure you placed all the files in correct place!", } local lang = "de"; if XNetworkUbiCom then lang = XNetworkUbiCom.Tool_GetCurrentLanguageShortName(); if lang ~= "eng" and lang ~= "de" then lang = "eng"; end end GUI.AddStaticNote("@color:255,0,0 ------------------------------------------------------------------------------------------------------------"); GUI.AddStaticNote("@color:255,0,0 " .. errMsgs[lang]); GUI.AddStaticNote("@color:255,0,0 ------------------------------------------------------------------------------------------------------------"); return; end
Every map will load a standart configuration. Usually that isn't enough, so you have to create a configurationscript which you have to copy into the EMSconfigurations folder:
For the script to be loaded it must have the same name as the map.
Example: Your maps name is „(4) Toscana V2“, so you script has to named to „(4) toscana v2.lua“. Capital letters are not a problem.
-- ************************************************************************************************ -- * * -- * * -- * EMS * -- * CONFIGURATION * -- * * -- * * -- ************************************************************************************************ EMS_CustomMapConfig = { -- ******************************************************************************************** -- * Configuration File Version -- * A version check will make sure every player has the same version of the configuration file -- ******************************************************************************************** Version = 1, -- ******************************************************************************************** -- * Debug Mode -- * Activates the ems debug mode if set to true. -- * This will enable key bindings to achieve some common debug tasks. -- * Ingame a button with the text "Debug" will be shown to give further information. -- * (Default: false) -- ******************************************************************************************** ActivateDebug = true, -- ******************************************************************************************** -- * Custom debug functions -- * If ActivateDebug is set to true, these two debug methods can be called by pressing N or M -- * _fromPlayer - the id of the player that pressed the key -- * _targetPlayerId1 - a player id between 1-8 (or 16 on cnetwork), that the caller wants to target -- * _targetPlayerId2 - a second player id -- * _x, _y - the position of the callers mouse at the time of pressing the key -- * Example content: -- * SetFriendly(_targetPlayerId1, _targetPlayerId2); -- make friends between p1 and p2 -- * Logic.CreateEntity(Entities.PU_Serf, _x, _y, 0, _fromPlayer); -- create Serf for caller -- ******************************************************************************************** CustomDebugFunc1 = function(_fromPlayer, _targetPlayerId1, _targetPlayerId2, _x, _y) Logic.CreateEntity(Entities.PU_Serf, _x, _y, 0, _fromPlayer); end, CustomDebugFunc2 = function(_fromPlayer, _target1, _target2, _x, _y) Logic.CreateEntity(Entities.PU_Serf, _x, _y, 0, _target2); end, -- ******************************************************************************************** -- * Callback_OnMapStart -- * Called directly after the loading screen vanishes and works as your entry point. -- * Similar use to FirstMapAction/GameCallback_OnGameSart -- ******************************************************************************************** Callback_OnMapStart = function() AddPeriodicSummer(60); SetupHighlandWeatherGfxSet(); LocalMusic.UseSet = HIGHLANDMUSIC; end, -- ******************************************************************************************** -- * Callback_OnGameStart -- * Called at the end of the 10 seconds delay, after the host chose the rules and started -- ******************************************************************************************** Callback_OnGameStart = function() end, -- ******************************************************************************************** -- * Callback_OnPeacetimeEnded -- * Called when the peacetime counter reaches zero -- ******************************************************************************************** Callback_OnPeacetimeEnded = function() end, -- ******************************************************************************************** -- * Peacetime -- * Number of minutes the players will be unable to attack each other -- ******************************************************************************************** Peacetime = 30, -- ******************************************************************************************** -- * GameMode -- * GameMode is a concept of a switchable option, that the scripter can freely use -- * -- * GameModes is a table that contains the available options for the players, for example: -- * GameModes = {"3vs3", "2vs2", "1vs1"}, -- * -- * GameMode contains the index of selected mode by default - ranging from 1 to X -- * -- * Callback_GameModeSelected -- * Lets the scripter make changes, according to the selected game mode. -- * You could give different ressources or change the map environment accordingly -- * _gamemode contains the index of the selected option according to the GameModes table -- ******************************************************************************************** GameMode = 1, GameModes = {"Standard"}, Callback_GameModeSelected = function(_gamemode) end, -- ******************************************************************************************** -- * Resource Level -- * Determines how much ressources the players start with -- * 1 = Normal -- * 2 = FastGame -- * 3 = SpeedGame -- * See the ressources table below for configuration -- ******************************************************************************************** ResourceLevel = 1, -- ******************************************************************************************** -- * Resources -- * Order: -- * Gold, Clay, Wood, Stone, Iron, Sulfur -- * Rules: -- * 1. If no player is defined, default values are used -- * 2. If player 1 is defined, these ressources will be used for all other players too -- * 3. Use the players index to give ressources explicitly -- ******************************************************************************************** Ressources = { -- * Normal default: 1k, 1.8k, 1.5k, 0.8k, 50, 50 Normal = { [1] = { 500, 2400, 1750, 700, 50, 50, }, }, -- * FastGame default: 2 x Normal Ressources FastGame = {}, -- * SpeedGame default: 20k, 12k, 14k, 10k, 7.5k, 7.5k SpeedGame = {}, }, -- ******************************************************************************************** -- * Callback_OnFastGame -- * Called together with Callback_OnGameStart if the player selected ResourceLevel 2 or 3 -- * (FastGame or SpeedGame) -- ******************************************************************************************** Callback_OnFastGame = function() end, -- ******************************************************************************************** -- * AI Players -- * Player Entities that belong to an ID that is also present in the AIPlayers table won't be -- * removed -- ******************************************************************************************** AIPlayers = {}, -- ******************************************************************************************** -- * DisableInitCameraOnHeadquarter -- * Set to true if you don't want the camera to be set to the headquarter automatically -- * (default: false) -- ******************************************************************************************** DisableInitCameraOnHeadquarter = false, -- ******************************************************************************************** -- * DisableSetZoomFactor -- * If set to false, ZoomFactor will be set to 2 automatically -- * Set to true if nothing should be done -- * (default: false) -- ******************************************************************************************** DisableSetZoomFactor = false, -- ******************************************************************************************** -- * DisableStandardVictoryCondition -- * Set to true if you want to implement your own victory condition -- * Otherwise the player will lose upon losing his headquarter -- * (default: false) -- ******************************************************************************************** DisableStandardVictoryCondition = false, -- ******************************************************************************************** -- * Units -- * Various units can be allowed or forbidden -- * A 0 means the unit is forbidden - a higher number represents the maximum allowed level -- * Example: -- * Sword = 0, equals Swords are forbidden -- * Sword = 2, equals the maximum level for swords is 2 = Upgrading once -- ******************************************************************************************** Sword = 4, Bow = 4, PoleArm = 4, HeavyCavalry = 0, LightCavalry = 0, Rifle = 2, Thief = 1, Scout = 1, Cannon1 = 0, Cannon2 = 0, Cannon3 = 0, Cannon4 = 0, -- * Buildings Bridge = 1, -- * Markets -- * -1 = Building markets is forbidden -- * 0 = Building markets is allowed -- * >0 = Markets are allowed and limited to the number given Markets = 0, -- * Trade Limit -- * 0 = no trade limit -- * greater zero = maximum amount that you can buy in one single trade TradeLimit = 0, -- * TowerLevel -- * 0 = Towers forbidden -- * 1 = Watchtowers -- * 2 = Balistatowers -- * 3 = Cannontowers TowerLevel = 1, -- 0-3 -- * TowerLimit -- * 0 = no tower limit -- * >0 = towers are limited to the number given TowerLimit = 0, -- * WeatherChangeLockTimer -- * Minutes for how long the weather can't be changed directly again after a weatherchange happened WeatherChangeLockTimer = 3, -- * Enables chaning to a specific weather with the weather tower MakeSummer = 1, MakeRain = 1, MakeSnow = 1, -- * Fixes the DestrBuild bug AntiBug = 1, -- * HQRush -- * If set to 1, Headquarters are invulernerable as long the player still has village centers AntiHQRush = 1, -- * If set to 1, Players can't abuse blessing and overtime in combination for unlimited work BlessLimit = 1, -- * if set to true, Players are not able to lose their Headquarter. InvulnerableHQs = false, -- * Heroes -- * NumberOfHeroesForAll sets the number of heroes every player can pick -- * 1 behind each hero defines if the hero is allowed; 0 for forbidden NumberOfHeroesForAll = 2, Dario = 1, Pilgrim = 1, Ari = 1, Erec = 1, Salim = 1, Helias = 1, Drake = 1, Yuki = 1, Kerberos = 1, Varg = 1, Mary_de_Mortfichet = 1, Kala = 1, };