Changeset View
Changeset View
Standalone View
Standalone View
source/tools/clients/python/zero_ad/scenario_config.py
- This file was added.
from .RLAPI_pb2 import ScenarioConfig as ScenarioConfigProto | |||||
import json | |||||
import random | |||||
import copy | |||||
class VictoryConditions(): | |||||
class CAPTURE_THE_RELIC(): | |||||
def name(): | |||||
return 'capture_the_relic' | |||||
def trigger_scripts(): | |||||
return ['scripts/TriggerHelper.js', 'scripts/CaptureTheRelic.js'] | |||||
class CONQUEST(): | |||||
def name(): | |||||
return 'conquest' | |||||
def trigger_scripts(): | |||||
return ['scripts/TriggerHelper.js', 'scripts/ConquestCommon.js', 'scripts/Conquest.js'] | |||||
class CONQUEST_UNITS(): | |||||
def name(): | |||||
return 'conquest_units' | |||||
def trigger_scripts(): | |||||
return ['scripts/TriggerHelper.js', 'scripts/ConquestCommon.js', 'scripts/ConquestUnits.js'] | |||||
class CONQUEST_STRUCTURES(): | |||||
def name(): | |||||
return 'conquest_structures' | |||||
def trigger_scripts(): | |||||
return ['scripts/TriggerHelper.js', 'scripts/ConquestCommon.js', 'scripts/ConquestStructures.js'] | |||||
class REGICIDE(): | |||||
def name(): | |||||
return 'regicide' | |||||
def trigger_scripts(): | |||||
return ['scripts/TriggerHelper.js', 'scripts/Regicide.js'] | |||||
class WONDER(): | |||||
def name(): | |||||
return 'wonder' | |||||
def trigger_scripts(): | |||||
return ['scripts/TriggerHelper.js', 'scripts/WonderVictory.js'] | |||||
class MapType(): | |||||
class SKIRMISH(): | |||||
def name(): | |||||
return 'skirmish' | |||||
def dir(): | |||||
return 'skirmishes' | |||||
class SCENARIO(): | |||||
def name(): | |||||
return 'scenario' | |||||
def dir(): | |||||
return 'scenarios' | |||||
class RANDOM(): | |||||
def name(): | |||||
return 'random' | |||||
def dir(): | |||||
return 'random' | |||||
class ScenarioConfig(): | |||||
COLORS = [ | |||||
{'r': 21, 'g': 55, 'b': 149}, | |||||
{'r': 150, 'g': 20, 'b': 20}, | |||||
] | |||||
def __init__(self, name, type=MapType.SKIRMISH, playerID=1, saveReplay=False): | |||||
self.playerID = playerID | |||||
self.saveReplay = saveReplay | |||||
self.data = {} | |||||
self.data['settings'] = {} | |||||
self.data['settings']['TriggerScripts'] = [] | |||||
self.data['settings']['VictoryConditions'] = [] | |||||
self.set_map(name, type) | |||||
self.set_gamespeed(1) | |||||
self.set_map_setting("AISeed", 0) | |||||
self.set_map_setting("Seed", 0) | |||||
self.set_map_setting("CheatsEnabled", True) | |||||
self.set_map_setting("Ceasefire", 0) | |||||
self.set_map_setting("WonderDuration", 10) | |||||
self.set_map_setting("RelicDuration", 10) | |||||
self.set_map_setting("RelicCount", 2) | |||||
self.set_victory_conditions(VictoryConditions.CONQUEST) | |||||
self.set_size(256) | |||||
self.headless = False | |||||
def set_map(self, name, type=MapType.SKIRMISH): | |||||
self.set_map_setting("Name", name) | |||||
self.set_map_setting("mapType", type.name()) | |||||
self.set_game_setting("mapType", type.name()) | |||||
self.set_game_setting("map", "maps/" + type.dir() + "/" + name) | |||||
if type == MapType.RANDOM: | |||||
self.set_map_setting("Script", name + ".js") | |||||
self.set_game_setting("script", name + ".js") | |||||
def set_gamespeed(self, speed): | |||||
self.set_game_setting("gameSpeed", speed) | |||||
def set_visual(self, is_visual): | |||||
self.headless = not is_visual | |||||
def set_size(self, size): | |||||
self.set_map_setting("Size", size) | |||||
def add_player(self, name, civ="rome", color=None, ai="", difficulty=3, behavior='random', team=-1): | |||||
player_data = self.data['settings'].get('PlayerData', []) | |||||
if color == None: | |||||
index = random.randint(0, len(self.COLORS)-1) | |||||
color = self.COLORS[index] | |||||
player_data.append({ | |||||
"Name": name, | |||||
"Civ": civ, | |||||
"Color": color, | |||||
"AI": ai, | |||||
"AIDiff": difficulty, | |||||
"AIBehavior": behavior, | |||||
"Team": team, | |||||
}) | |||||
self.set_map_setting('PlayerData', player_data) | |||||
def set_victory_conditions(self, *conditions): | |||||
self.victory_conditions = conditions | |||||
def set_map_setting(self, key, value): | |||||
self.data['settings'][key] = value | |||||
def append_map_setting(self, key, *values): | |||||
if key not in self.data['settings']: | |||||
self.set_map_setting(key, []) | |||||
self.data['settings'][key].extend(values) | |||||
def set_game_setting(self, key, value): | |||||
self.data[key] = value | |||||
def append_game_setting(self, key, *values): | |||||
if key not in self.data: | |||||
self.set_game_setting(key, []) | |||||
self.data[key].extend(values) | |||||
def set(self, key, value): | |||||
self.data[key] = value | |||||
def to_proto(self): | |||||
data = copy.deepcopy(self.data) | |||||
map_settings = data['settings'] | |||||
if self.headless: | |||||
map_settings['TriggerScripts'].append("scripts/NonVisualTrigger.js") | |||||
for condition in self.victory_conditions: | |||||
map_settings['VictoryConditions'].append(condition.name()) | |||||
map_settings['TriggerScripts'].extend(condition.trigger_scripts()) | |||||
content = json.dumps(data) | |||||
return ScenarioConfigProto(saveReplay=self.saveReplay, playerID=self.playerID, content=content) |
Wildfire Games · Phabricator