Changeset View
Changeset View
Standalone View
Standalone View
binaries/data/mods/public/gui/gamesetup/gamesetup.js
const g_MatchSettings_SP = "config/matchsettings.json"; | const g_MatchSettings_SP = "config/matchsettings.json"; | ||||
const g_MatchSettings_MP = "config/matchsettings.mp.json"; | const g_MatchSettings_MP = "config/matchsettings.mp.json"; | ||||
const g_Ceasefire = prepareForDropdown(g_Settings && g_Settings.Ceasefire); | const g_Ceasefire = prepareForDropdown(g_Settings && g_Settings.Ceasefire); | ||||
const g_GameSpeeds = prepareForDropdown(g_Settings && g_Settings.GameSpeeds.filter(speed => !speed.ReplayOnly)); | const g_GameSpeeds = prepareForDropdown(g_Settings && g_Settings.GameSpeeds.filter(speed => !speed.ReplayOnly)); | ||||
const g_GuestSettings = prepareForDropdown(g_Settings && g_Settings.GuestSettings); | |||||
const g_MapSizes = prepareForDropdown(g_Settings && g_Settings.MapSizes); | const g_MapSizes = prepareForDropdown(g_Settings && g_Settings.MapSizes); | ||||
const g_MapTypes = prepareForDropdown(g_Settings && g_Settings.MapTypes); | const g_MapTypes = prepareForDropdown(g_Settings && g_Settings.MapTypes); | ||||
const g_PopulationCapacities = prepareForDropdown(g_Settings && g_Settings.PopulationCapacities); | const g_PopulationCapacities = prepareForDropdown(g_Settings && g_Settings.PopulationCapacities); | ||||
const g_StartingResources = prepareForDropdown(g_Settings && g_Settings.StartingResources); | const g_StartingResources = prepareForDropdown(g_Settings && g_Settings.StartingResources); | ||||
const g_VictoryConditions = prepareForDropdown(g_Settings && g_Settings.VictoryConditions); | const g_VictoryConditions = prepareForDropdown(g_Settings && g_Settings.VictoryConditions); | ||||
const g_VictoryDurations = prepareForDropdown(g_Settings && g_Settings.VictoryDurations); | const g_VictoryDurations = prepareForDropdown(g_Settings && g_Settings.VictoryDurations); | ||||
/** | /** | ||||
▲ Show 20 Lines • Show All 104 Lines • ▼ Show 20 Lines | |||||
/** | /** | ||||
* Processes a CNetMessage (see NetMessage.h, NetMessages.h) sent by the CNetServer. | * Processes a CNetMessage (see NetMessage.h, NetMessages.h) sent by the CNetServer. | ||||
*/ | */ | ||||
var g_NetMessageTypes = { | var g_NetMessageTypes = { | ||||
"netstatus": msg => handleNetStatusMessage(msg), | "netstatus": msg => handleNetStatusMessage(msg), | ||||
"netwarn": msg => addNetworkWarning(msg), | "netwarn": msg => addNetworkWarning(msg), | ||||
"gamesetup": msg => handleGamesetupMessage(msg), | "gamesetup": msg => handleGamesetupMessage(msg), | ||||
"changesetting": msg => handleChangeSettingMessage(msg), | |||||
"players": msg => handlePlayerAssignmentMessage(msg), | "players": msg => handlePlayerAssignmentMessage(msg), | ||||
"ready": msg => handleReadyMessage(msg), | "ready": msg => handleReadyMessage(msg), | ||||
"start": msg => handleGamestartMessage(msg), | "start": msg => handleGamestartMessage(msg), | ||||
"kicked": msg => addChatMessage({ | "kicked": msg => addChatMessage({ | ||||
"type": msg.banned ? "banned" : "kicked", | "type": msg.banned ? "banned" : "kicked", | ||||
"username": msg.username | "username": msg.username | ||||
}), | }), | ||||
"chat": msg => addChatMessage({ "type": "chat", "guid": msg.guid, "text": msg.text }), | "chat": msg => addChatMessage({ "type": "chat", "guid": msg.guid, "text": msg.text }), | ||||
▲ Show 20 Lines • Show All 172 Lines • ▼ Show 20 Lines | var g_OptionOrderGUI = { | ||||
"more": { | "more": { | ||||
"Dropdown": [ | "Dropdown": [ | ||||
"gameSpeed", | "gameSpeed", | ||||
"victoryCondition", | "victoryCondition", | ||||
"victoryDuration", | "victoryDuration", | ||||
"populationCap", | "populationCap", | ||||
"startingResources", | "startingResources", | ||||
"ceasefire", | "ceasefire", | ||||
"guestSettings", | |||||
], | ], | ||||
"Checkbox": [ | "Checkbox": [ | ||||
"exploreMap", | "exploreMap", | ||||
"revealMap", | "revealMap", | ||||
"disableTreasures", | "disableTreasures", | ||||
"disableSpies", | "disableSpies", | ||||
"lockTeams", | "lockTeams", | ||||
"lastManStanding", | "lastManStanding", | ||||
▲ Show 20 Lines • Show All 199 Lines • ▼ Show 20 Lines | "gameSpeed": { | ||||
"ids": () => g_GameSpeeds.Speed, | "ids": () => g_GameSpeeds.Speed, | ||||
"default": () => g_GameSpeeds.Default, | "default": () => g_GameSpeeds.Default, | ||||
"defined": () => g_GameAttributes.gameSpeed !== undefined, | "defined": () => g_GameAttributes.gameSpeed !== undefined, | ||||
"get": () => g_GameAttributes.gameSpeed, | "get": () => g_GameAttributes.gameSpeed, | ||||
"select": (idx) => { | "select": (idx) => { | ||||
g_GameAttributes.gameSpeed = g_GameSpeeds.Speed[idx]; | g_GameAttributes.gameSpeed = g_GameSpeeds.Speed[idx]; | ||||
}, | }, | ||||
}, | }, | ||||
"guestSettings": { | |||||
"title": () => translate("Guest Settings"), | |||||
"tooltip": () => translate("Set which settings can be changed by every player."), | |||||
"labels": () => g_GuestSettings.Title, | |||||
"ids": () => g_GuestSettings.Data, | |||||
"default": () => g_GuestSettings.Default, | |||||
"defined": () => g_GameAttributes.guestSettings !== undefined, | |||||
"get": () => g_GameAttributes.guestSettings, | |||||
"select": (idx) => { | |||||
g_GameAttributes.guestSettings = g_GuestSettings.Data[idx]; | |||||
}, | |||||
}, | |||||
}; | }; | ||||
/** | /** | ||||
* These dropdowns provide a setting that is repeated once for each player | * These dropdowns provide a setting that is repeated once for each player | ||||
* (where idx is the playerID starting from 0 for player 1). | * (where idx is the playerID starting from 0 for player 1). | ||||
*/ | */ | ||||
var g_PlayerDropdowns = { | var g_PlayerDropdowns = { | ||||
"playerAssignment": { | "playerAssignment": { | ||||
▲ Show 20 Lines • Show All 222 Lines • ▼ Show 20 Lines | "enabled": () => !g_IsController || | ||||
Object.keys(g_PlayerAssignments).every(guid => g_PlayerAssignments[guid].status || | Object.keys(g_PlayerAssignments).every(guid => g_PlayerAssignments[guid].status || | ||||
g_PlayerAssignments[guid].player == -1 || | g_PlayerAssignments[guid].player == -1 || | ||||
guid == Engine.GetPlayerGUID() && g_IsController), | guid == Engine.GetPlayerGUID() && g_IsController), | ||||
"hidden": () => | "hidden": () => | ||||
!g_PlayerAssignments[Engine.GetPlayerGUID()] || | !g_PlayerAssignments[Engine.GetPlayerGUID()] || | ||||
g_PlayerAssignments[Engine.GetPlayerGUID()].player == -1 && !g_IsController, | g_PlayerAssignments[Engine.GetPlayerGUID()].player == -1 && !g_IsController, | ||||
}, | }, | ||||
"civResetButton": { | "civResetButton": { | ||||
"hidden": () => g_GameAttributes.mapType == "scenario" || !g_IsController, | "hidden": () => g_GameAttributes.mapType == "scenario" || !canPlayerChange("civResetButton"), | ||||
}, | }, | ||||
"teamResetButton": { | "teamResetButton": { | ||||
"hidden": () => g_GameAttributes.mapType == "scenario" || !g_IsController, | "hidden": () => g_GameAttributes.mapType == "scenario" || !canPlayerChange("teamResetButton"), | ||||
}, | }, | ||||
// Display these after having hidden every GUI object in the "More Options" dialog | // Display these after having hidden every GUI object in the "More Options" dialog | ||||
"moreOptionsLabel": { | "moreOptionsLabel": { | ||||
"hidden": () => false, | "hidden": () => false, | ||||
}, | }, | ||||
"hideMoreOptions": { | "hideMoreOptions": { | ||||
"hidden": () => false, | "hidden": () => false, | ||||
}, | }, | ||||
▲ Show 20 Lines • Show All 170 Lines • ▼ Show 20 Lines | function initDropdown(name, idx) | ||||
let idxName = idx === undefined ? "": "[" + idx + "]"; | let idxName = idx === undefined ? "": "[" + idx + "]"; | ||||
let data = (idx === undefined ? g_Dropdowns : g_PlayerDropdowns)[name]; | let data = (idx === undefined ? g_Dropdowns : g_PlayerDropdowns)[name]; | ||||
let dropdown = Engine.GetGUIObjectByName(guiName + guiIdx + idxName); | let dropdown = Engine.GetGUIObjectByName(guiName + guiIdx + idxName); | ||||
dropdown.list = data.labels(idx); | dropdown.list = data.labels(idx); | ||||
dropdown.list_data = data.ids(idx); | dropdown.list_data = data.ids(idx); | ||||
dropdown.onSelectionChange = function() { | dropdown.onSelectionChange = function() { | ||||
changeSetting(this,{ "setting": name, "index": idx, "type": "dropdown", | |||||
if (!g_IsController || | "value": this.list_data[this.selected] }); | ||||
g_IsInGuiUpdate || | |||||
!this.list_data[this.selected] || | |||||
data.hidden && data.hidden(idx) || | |||||
data.enabled && !data.enabled(idx)) | |||||
return; | |||||
data.select(this.selected, idx); | |||||
supplementDefaults(); | |||||
updateGameAttributes(); | |||||
}; | }; | ||||
} | } | ||||
function initPlayerDropdowns(name) | function initPlayerDropdowns(name) | ||||
{ | { | ||||
for (let i = 0; i < g_MaxPlayers; ++i) | for (let i = 0; i < g_MaxPlayers; ++i) | ||||
initDropdown(name, i); | initDropdown(name, i); | ||||
} | } | ||||
function initCheckbox(name) | function initCheckbox(name) | ||||
{ | { | ||||
let [guiName, guiIdx] = getGUIObjectNameFromSetting(name); | let [guiName, guiIdx] = getGUIObjectNameFromSetting(name); | ||||
Engine.GetGUIObjectByName(guiName + guiIdx).onPress = function() { | Engine.GetGUIObjectByName(guiName + guiIdx).onPress = function() { | ||||
changeSetting(this, { "setting": name, "type": "checkbox", "value": this.checked }); | |||||
let obj = g_Checkboxes[name]; | |||||
if (!g_IsController || | |||||
g_IsInGuiUpdate || | |||||
obj.enabled && !obj.enabled() || | |||||
obj.hidden && obj.hidden()) | |||||
return; | |||||
obj.set(this.checked); | |||||
supplementDefaults(); | |||||
updateGameAttributes(); | |||||
}; | }; | ||||
} | } | ||||
function initSPTips() | function initSPTips() | ||||
{ | { | ||||
if (g_IsNetworked || Engine.ConfigDB_GetValue("user", "gui.gamesetup.enabletips") !== "true") | if (g_IsNetworked || Engine.ConfigDB_GetValue("user", "gui.gamesetup.enabletips") !== "true") | ||||
return; | return; | ||||
▲ Show 20 Lines • Show All 46 Lines • ▼ Show 20 Lines | function resizeMoreOptionsWindow() | ||||
// Resize the vertically centered window containing the options | // Resize the vertically centered window containing the options | ||||
let moreOptions = Engine.GetGUIObjectByName("moreOptions"); | let moreOptions = Engine.GetGUIObjectByName("moreOptions"); | ||||
let mSize = moreOptions.size; | let mSize = moreOptions.size; | ||||
mSize.bottom = mSize.top + yPos + 20; | mSize.bottom = mSize.top + yPos + 20; | ||||
moreOptions.size = mSize; | moreOptions.size = mSize; | ||||
} | } | ||||
/** | /** | ||||
* Returns if the player is allowed to change this setting | |||||
*/ | |||||
function canPlayerChange(setting, index = -1, guid = Engine.GetPlayerGUID()) | |||||
{ | |||||
if (g_IsController) | |||||
return true; | |||||
if (g_PlayerAssignments[guid] === undefined || g_PlayerAssignments[guid].player <= 0 || setting == "guestSettings") | |||||
return false; | |||||
if (g_GuestSettings.Data.indexOf(setting) == -1) | |||||
return g_GameAttributes.guestSettings == "all"; | |||||
if (index >= 0 && index != g_PlayerAssignments[guid].player-1) | |||||
return g_GameAttributes.guestSettings == "all"; | |||||
return g_GuestSettings.Data.indexOf(g_GameAttributes.guestSettings) >= g_GuestSettings.Data.indexOf(setting); | |||||
} | |||||
/** | |||||
* Changes a setting. | |||||
*/ | |||||
function changeSetting(element, data, guid, force = false) | |||||
{ | |||||
if (!data || !data.setting || !data.type) | |||||
return; | |||||
if (!canPlayerChange(data.setting, data.index || -1, guid) || g_IsInGuiUpdate && !force) | |||||
return; | |||||
if (data.type == "misc") | |||||
{ | |||||
switch (data.setting) | |||||
{ | |||||
case "resetCivilizations": | |||||
resetCivilizations(); | |||||
break; | |||||
case "resetTeams": | |||||
resetTeams(); | |||||
break; | |||||
case "aiSettings": | |||||
AIConfigCallback(data.value, false); | |||||
break; | |||||
} | |||||
} | |||||
else if (data.type == "checkbox" || data.type == "dropdown") | |||||
{ | |||||
let obj = (data.type == "checkbox" ? g_Checkboxes : | |||||
(data.index === undefined ? g_Dropdowns : g_PlayerDropdowns))[data.setting]; | |||||
if (obj.enabled && !obj.enabled() || obj.hidden && obj.hidden()) | |||||
return; | |||||
if (data.type == "checkbox") | |||||
obj.set(data.value); | |||||
else | |||||
{ | |||||
if (!data.value) | |||||
return; | |||||
let selected = element.list_data.indexOf(data.value); | |||||
if (selected != -1) | |||||
obj.select(selected, data.index); | |||||
} | |||||
if (!g_IsController) | |||||
Engine.NetworkChangeSetting(data); | |||||
supplementDefaults(); | |||||
updateGameAttributes(); | |||||
} | |||||
} | |||||
/** | |||||
* Called when the client disconnects. | * Called when the client disconnects. | ||||
* The other cases from NetClient should never occur in the gamesetup. | * The other cases from NetClient should never occur in the gamesetup. | ||||
*/ | */ | ||||
function handleNetStatusMessage(message) | function handleNetStatusMessage(message) | ||||
{ | { | ||||
if (message.status != "disconnected") | if (message.status != "disconnected") | ||||
{ | { | ||||
error("Unrecognised netstatus type " + message.status); | error("Unrecognised netstatus type " + message.status); | ||||
Show All 38 Lines | Engine.SwitchGuiPage("page_loading.xml", { | ||||
"attribs": g_GameAttributes, | "attribs": g_GameAttributes, | ||||
"isNetworked" : g_IsNetworked, | "isNetworked" : g_IsNetworked, | ||||
"playerAssignments": g_PlayerAssignments, | "playerAssignments": g_PlayerAssignments, | ||||
"isController": g_IsController | "isController": g_IsController | ||||
}); | }); | ||||
} | } | ||||
/** | /** | ||||
* Called whenever the host changed any setting. | * Called whenever the host sent new game attributes. | ||||
*/ | */ | ||||
function handleGamesetupMessage(message) | function handleGamesetupMessage(message) | ||||
{ | { | ||||
if (!message.data) | if (!message.data) | ||||
return; | return; | ||||
g_GameAttributes = message.data; | g_GameAttributes = message.data; | ||||
if (!!g_GameAttributes.settings.RatingEnabled) | if (!!g_GameAttributes.settings.RatingEnabled) | ||||
{ | { | ||||
g_GameAttributes.settings.CheatsEnabled = false; | g_GameAttributes.settings.CheatsEnabled = false; | ||||
g_GameAttributes.settings.LockTeams = true; | g_GameAttributes.settings.LockTeams = true; | ||||
g_GameAttributes.settings.LastManStanding = false; | g_GameAttributes.settings.LastManStanding = false; | ||||
} | } | ||||
Engine.SetRankedGame(!!g_GameAttributes.settings.RatingEnabled); | Engine.SetRankedGame(!!g_GameAttributes.settings.RatingEnabled); | ||||
updateGUIObjects(); | updateGUIObjects(); | ||||
} | } | ||||
/** | /** | ||||
* Called whenever a client changes a setting. | |||||
* @param {Object} message | |||||
*/ | |||||
function handleChangeSettingMessage(message) | |||||
{ | |||||
if (!message.guid || !message.data /*|| !message.data.setting || !message.data.type || | |||||
!canPlayerChange(message.data.setting, message.data.index || -1, message.guid)*/) | |||||
return; | |||||
let [guiName, guiIdx] = getGUIObjectNameFromSetting(message.data.setting); | |||||
let idxName = message.data.index === undefined ? "": "[" + message.data.index + "]"; | |||||
let element = Engine.GetGUIObjectByName(guiName + guiIdx + idxName); | |||||
changeSetting(element, message.data, message.guid, true); | |||||
/*warn("The player with guid " + message.guid + " has changed the setting " + | |||||
message.data.setting + " with type " + message.data.type + " and index " + | |||||
message.data.index + " to the value " + message.data.value + ". Type is " + typeof message.data.value);*/ | |||||
} | |||||
/** | |||||
* Called whenever a client joins/leaves or any gamesetting is changed. | * Called whenever a client joins/leaves or any gamesetting is changed. | ||||
*/ | */ | ||||
function handlePlayerAssignmentMessage(message) | function handlePlayerAssignmentMessage(message) | ||||
{ | { | ||||
for (let guid in message.newAssignments) | for (let guid in message.newAssignments) | ||||
if (!g_PlayerAssignments[guid]) | if (!g_PlayerAssignments[guid]) | ||||
onClientJoin(guid, message.newAssignments); | onClientJoin(guid, message.newAssignments); | ||||
▲ Show 20 Lines • Show All 370 Lines • ▼ Show 20 Lines | function updateGUIDropdown(name, idx = undefined) | ||||
let indexHidden = isControlArrayElementHidden(idx); | let indexHidden = isControlArrayElementHidden(idx); | ||||
let obj = (idx === undefined ? g_Dropdowns : g_PlayerDropdowns)[name]; | let obj = (idx === undefined ? g_Dropdowns : g_PlayerDropdowns)[name]; | ||||
let selected = indexHidden ? -1 : dropdown.list_data.indexOf(String(obj.get(idx))); | let selected = indexHidden ? -1 : dropdown.list_data.indexOf(String(obj.get(idx))); | ||||
let enabled = !indexHidden && (!obj.enabled || obj.enabled(idx)); | let enabled = !indexHidden && (!obj.enabled || obj.enabled(idx)); | ||||
let hidden = indexHidden || obj.hidden && obj.hidden(idx); | let hidden = indexHidden || obj.hidden && obj.hidden(idx); | ||||
dropdown.hidden = !g_IsController || !enabled || hidden; | dropdown.hidden = !canPlayerChange(name, idx) || !enabled || hidden; | ||||
dropdown.selected = indexHidden ? -1 : selected; | dropdown.selected = indexHidden ? -1 : selected; | ||||
dropdown.tooltip = !indexHidden && obj.tooltip ? obj.tooltip(idx) : ""; | dropdown.tooltip = !indexHidden && obj.tooltip ? obj.tooltip(idx) : ""; | ||||
if (frame) | if (frame) | ||||
frame.hidden = hidden; | frame.hidden = hidden; | ||||
if (title && obj.title && !indexHidden) | if (title && obj.title && !indexHidden) | ||||
title.caption = sprintf(translate("%(option)s:"), { "option": obj.title(idx) }); | title.caption = sprintf(translate("%(option)s:"), { "option": obj.title(idx) }); | ||||
if (label && !indexHidden) | if (label && !indexHidden) | ||||
{ | { | ||||
label.hidden = g_IsController && enabled || hidden; | label.hidden = canPlayerChange(name, idx) && enabled || hidden; | ||||
label.caption = selected == -1 ? translateWithContext("option value", "Unknown") : dropdown.list[selected]; | label.caption = selected == -1 ? translateWithContext("option value", "Unknown") : dropdown.list[selected]; | ||||
} | } | ||||
} | } | ||||
/** | /** | ||||
* Not used for the player assignments, so playerCheckboxes are not implemented, | * Not used for the player assignments, so playerCheckboxes are not implemented, | ||||
* hence no index. | * hence no index. | ||||
*/ | */ | ||||
function updateGUICheckbox(name) | function updateGUICheckbox(name) | ||||
{ | { | ||||
let obj = g_Checkboxes[name]; | let obj = g_Checkboxes[name]; | ||||
let checked = obj.get(); | let checked = obj.get(); | ||||
let hidden = obj.hidden && obj.hidden(); | let hidden = obj.hidden && obj.hidden(); | ||||
let enabled = !obj.enabled || obj.enabled(); | let enabled = !obj.enabled || obj.enabled(); | ||||
let [guiName, guiIdx] = getGUIObjectNameFromSetting(name); | let [guiName, guiIdx] = getGUIObjectNameFromSetting(name); | ||||
let checkbox = Engine.GetGUIObjectByName(guiName + guiIdx); | let checkbox = Engine.GetGUIObjectByName(guiName + guiIdx); | ||||
let label = Engine.GetGUIObjectByName(guiName + "Text" + guiIdx); | let label = Engine.GetGUIObjectByName(guiName + "Text" + guiIdx); | ||||
let frame = Engine.GetGUIObjectByName(guiName + "Frame" + guiIdx); | let frame = Engine.GetGUIObjectByName(guiName + "Frame" + guiIdx); | ||||
let title = Engine.GetGUIObjectByName(guiName + "Title" + guiIdx); | let title = Engine.GetGUIObjectByName(guiName + "Title" + guiIdx); | ||||
checkbox.checked = checked; | checkbox.checked = checked; | ||||
checkbox.enabled = enabled; | checkbox.enabled = enabled; | ||||
checkbox.hidden = hidden || !g_IsController; | checkbox.hidden = hidden || !canPlayerChange(name); | ||||
checkbox.tooltip = obj.tooltip ? obj.tooltip() : ""; | checkbox.tooltip = obj.tooltip ? obj.tooltip() : ""; | ||||
label.caption = checked ? translate("Yes") : translate("No"); | label.caption = checked ? translate("Yes") : translate("No"); | ||||
label.hidden = hidden || g_IsController; | label.hidden = hidden || canPlayerChange(name); | ||||
if (frame) | if (frame) | ||||
frame.hidden = hidden; | frame.hidden = hidden; | ||||
if (title && obj.title) | if (title && obj.title) | ||||
title.caption = sprintf(translate("%(option)s:"), { "option": obj.title() }); | title.caption = sprintf(translate("%(option)s:"), { "option": obj.title() }); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 221 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
function openAIConfig(playerSlot) | function openAIConfig(playerSlot) | ||||
{ | { | ||||
g_LastViewedAIPlayer = playerSlot; | g_LastViewedAIPlayer = playerSlot; | ||||
Engine.PushGuiPage("page_aiconfig.xml", { | Engine.PushGuiPage("page_aiconfig.xml", { | ||||
"callback": "AIConfigCallback", | "callback": "AIConfigCallback", | ||||
"isController": g_IsController, | "canPlayerChange": canPlayerChange("aiSettings"), | ||||
"playerSlot": playerSlot, | "playerSlot": playerSlot, | ||||
"id": g_GameAttributes.settings.PlayerData[playerSlot].AI, | "id": g_GameAttributes.settings.PlayerData[playerSlot].AI, | ||||
"difficulty": g_GameAttributes.settings.PlayerData[playerSlot].AIDiff | "difficulty": g_GameAttributes.settings.PlayerData[playerSlot].AIDiff | ||||
}); | }); | ||||
} | } | ||||
/** | /** | ||||
* Called after closing the dialog. | * Called after closing the dialog. | ||||
*/ | */ | ||||
function AIConfigCallback(ai) | function AIConfigCallback(ai, resetViewedAI = true) | ||||
{ | { | ||||
if (resetViewedAI) | |||||
g_LastViewedAIPlayer = -1; | g_LastViewedAIPlayer = -1; | ||||
if (!ai.save || !g_IsController) | if (!ai.save) | ||||
return; | return; | ||||
if (!g_IsController) | |||||
{ | |||||
Engine.NetworkChangeSetting({ "setting": "aiSettings", "type": "misc", "value": ai}); | |||||
return; | |||||
} | |||||
g_GameAttributes.settings.PlayerData[ai.playerSlot].AI = ai.id; | g_GameAttributes.settings.PlayerData[ai.playerSlot].AI = ai.id; | ||||
g_GameAttributes.settings.PlayerData[ai.playerSlot].AIDiff = ai.difficulty; | g_GameAttributes.settings.PlayerData[ai.playerSlot].AIDiff = ai.difficulty; | ||||
updateGameAttributes(); | updateGameAttributes(); | ||||
} | } | ||||
function updatePlayerAssignmentChoices() | function updatePlayerAssignmentChoices() | ||||
▲ Show 20 Lines • Show All 152 Lines • ▼ Show 20 Lines | |||||
function showMoreOptions(show) | function showMoreOptions(show) | ||||
{ | { | ||||
Engine.GetGUIObjectByName("moreOptionsFade").hidden = !show; | Engine.GetGUIObjectByName("moreOptionsFade").hidden = !show; | ||||
Engine.GetGUIObjectByName("moreOptions").hidden = !show; | Engine.GetGUIObjectByName("moreOptions").hidden = !show; | ||||
} | } | ||||
function resetCivilizations() | function resetCivilizations() | ||||
{ | { | ||||
if (!g_IsController) | |||||
{ | |||||
Engine.NetworkChangeSetting({ "setting": "resetCivilizations", "type": "misc" }); | |||||
return; | |||||
} | |||||
for (let i in g_GameAttributes.settings.PlayerData) | for (let i in g_GameAttributes.settings.PlayerData) | ||||
g_GameAttributes.settings.PlayerData[i].Civ = "random"; | g_GameAttributes.settings.PlayerData[i].Civ = "random"; | ||||
updateGameAttributes(); | updateGameAttributes(); | ||||
} | } | ||||
function resetTeams() | function resetTeams() | ||||
{ | { | ||||
if (!g_IsController) | |||||
{ | |||||
Engine.NetworkChangeSetting({ "setting": "resetTeams", "type": "misc" }); | |||||
return; | |||||
} | |||||
for (let i in g_GameAttributes.settings.PlayerData) | for (let i in g_GameAttributes.settings.PlayerData) | ||||
g_GameAttributes.settings.PlayerData[i].Team = -1; | g_GameAttributes.settings.PlayerData[i].Team = -1; | ||||
updateGameAttributes(); | updateGameAttributes(); | ||||
} | } | ||||
function toggleReady() | function toggleReady() | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 109 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator