Creating plugin

To implement your plugin, take any existing one as a basis. Check existing features in standard plugins

Remove license check on connection (make server free to join)

Open core/server/plugins/verifier.lua and change verification_mode from kick to ignore

How to rename map

Change id field in map_info.json file and map field in scenario.json file and in all other scenario files for this map, if they exist

For a map installed on the server, additionally change the name of the map folder and map reference in the game_switch plugin and, if specified, in start.lua

How to run a server on Windows

Comment out the lines in plugins_manager.lua file where custom plugins are automatically loaded from the folder.

It was:

if not plugins_data.HOST_IS_PLAYER then

It became:

--if not plugins_data.HOST_IS_PLAYER then

How ​​to run a server on Windows without luassl

This way you will be able to start the server using only lua and luasocket.

Replace lines in files:


local verification_mode = "kick"

local verification_mode = "ignore"


verify_uuid = true,

verify_uuid = false,


ssl = require "ssl"

--ssl = require "ssl"

Briefly about what can be changed on the server

On the server, you can change very, very much. You can't add a new resource because it doesn't exist on the client side. But it can be done that nuclear will make the land unsuitable for settlement forever.

You can rebalance the game however you like. You can override the behavior of existing buildings to your heart's content (but the client will see the army in the water provinces with a beacon, even if on the server side it does not give this bonus, because it is written into the code on the client side)

You can add custom scenarios to the server and play them without any problems. Perhaps there will be a lack of translation, but this can also be fixed if you export the translation data, add the translation into the necessary languages ​​and send it to the players so that they put this translation in the settings

Project structure:


.git - git data

assets - here are data about which province to which you can move on different maps

core - game core

defnet - network module

scripts - helpful scripts

.gitignore - what data should not be sent to the versioning system

admins.dat - admin list (uuid)

banned.dat - banned by uuid

banned_ip.dat - banned by ip

chat.dat - chat history

convert_to_global.bat - bat file, which with one click translates the game sources into the server sources (they are slightly different). I need this thing purely for automation

convert_to_global.lua - the same as above, only here is the lua code, this thing is called by a bat file

environment - any global functions. Like displaying tables on the screen, functions for encoding data in JSON for sending over the network, and also defining global modules that should be available in all scripts, for example, luasocket

game_data.json - current server save

log - server log. What plugins were loaded and when, when what actions took place

luaxxhash.lua - an auxiliary module that was needed to check whether the game data was received correctly on the devices (not used yet, but will come in handy if the data sending system is rewritten) - project description

server_crash - crash log

server_settings.lua - server settings (port, name, time to turn, etc.)

start.bat - bat file to start the server. Makes server restarts automatically after a crash

start.lua - lua script to start the server - same as start.bat, only for linux


ai - bots

server - main server script and plugins

army_functions.lua - army actions. Hiring, moving, different types of weapons

buildings_calc_functions.lua - building actions processing module

calc_functions - functions that are calculated every turn (how much money is spent on maintaining the army, how much the population will grow)

core.lua - core, all possible actions in the game are defined here. Depending on which game mode (server, client, single player) there is a certain shell above this script. For example, if the game mode is singleplayer and the player has moved an army, then the singleplayer module calls the core module and orders the change to be drawn on the map. If the player is on the server and not the host, then the client module sends a message to the server, and itself calls the core module to change the game data, because action is done

event_system.lua - event system. Example: when someone declares war on someone, a function registered in this system is called. Now used only for the balance of power.

game_values.lua - game values. For example, how much does it cost to hire an army, when inflation starts, how many turns can you change ideology

global_functions.lua - global functions. For example, find the path from one province to another, find out the list of neighbors of the province, get the translation of any country, calculate country points

ideology.lua - a module that describes how ideologies work. For example, what is the bonus to gold depending on the chosen ideology or how the attack should proceed if communism is chosen

offers.lua - message system between countries. For example, someone sent someone a trade or declared war

relations.lua - relations between countries. Start a war, find out who is fighting with whom. Find out if a country is a vassal

timer.lua - timer module. So that every 3 minutes there is next turn or every 30 seconds the server checks the connection

Last updated