====== Enhanced Multiplayer Script ======
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.
===== Usage =====
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
===== Configuration =====
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,
};