Code: Alles auswählen
-- -----------------------------------------------
-- Erstellen einer Kolonie Landezone
--
-- lauffähig im Mapeditor
-- -----------------------------------------------
-- benötigte Funktionen definieren
-- -----------------------------------------------
-- Funktion um auf ein übergebenes Feld Beton zu setzen
function placeBeton ( position )
-- Feld "leeren"
asc.clearField( map, position )
-- Objekte setzen
for i = 1, objektCount do
setObjekt ( position, objekts[i] )
end
end
-- Funktion um einen 3 er "Pinsel" für den Landezonenuntergrund zu simulieren
function pinsel ( position )
-- zentrales Feld setzen
placeBeton ( position )
-- angrenzende Felder setzen
for i = 0, 5 do
local currentPos = asc.getNeighbouringFieldCoordinate( position, i )
placeBeton ( currentPos )
end
end
-- Funktion um ein Objekt (ID) auf ein Feld zu setzen
function setObjekt ( position, objektid )
local objekt = asc.getObjectType ( objektid )
asc.placeObject( map, position, objekt, true )
end
-- Funktion um ein Gebäude (ID) auf ein Feld zu setzen
function setBuilding ( position, buildingid, user )
local building = asc.getBuildingType ( buildingid )
asc.placeBuilding( map, position, building, user )
end
-- benötigte Variablen definieren
-- -----------------------------------------------
-- Landezonen Untergrund
objekts = {}
objekts[1] = 1 -- Straße
objekts[2] = 2 -- Schiene
objekts[3] = 45 -- Runway
objekts[4] = 30 -- burried Pipeline
objekts[5] = 12012 -- ISG Beton
objektCount = 5
-- sonstige Landezonenobjekte
isgzone = 12015 -- ISG Landezone
sockel = 12013 -- ISG Sockel
-- Landezonen Gebäude
kolrz = 12027 -- Raumfahrtzentrum
kolradar = 12026 -- Kolonie Radar
isgdepot = 12001 -- ISG Depot
-- Bauoptionen
options = {}
options[1] = 12004 -- ISG Carrier
options[2] = 12005 -- ISG Builder
options[3] = 12002 -- ISG Sat
options[4] = 12008 -- ISG SAC
options[5] = 12009 -- ISG AHF
optionsCount = 5
-- das eigentliche Skript
-- -----------------------------------------------
-- Step 1: ein Objekt der aktuellen Karte laden
map = asc.getActiveMap()
-- Step 2.1: Dialog vorbereiten
dialog = asc.PropertyDialog('Einstellungen')
dialog:addBool('Ausrichtung nach Süden?', false )
dialog:addBool('Bauoptionen einfügen?', true )
dialog:addBool('ISG Depot platzieren?', true )
dialog:addInteger('Spieler', 1 )
-- Step 2.2: Dialog starten
result = dialog:run()
-- Step 2.3: Skript Abbruch
if result == false then
asc.warningMessage("Skript abgebrochen!")
return
end
-- Step 2.4: Eingaben in Variablen packen
setSued = dialog:getBool('Ausrichtung nach Süden?')
setBauoptionen = dialog:getBool('Bauoptionen einfügen?')
setDepot = dialog:getBool('ISG Depot platzieren?')
setSpieler = dialog:getInteger('Spieler')
-- Step 2.5: ungültigen Spieler abfangen
if setSpieler < 0 or setSpieler > 7 then
asc.warningMessage("Ungültiger Spieler - (0-7 ist möglich) - Skript abgebrochen!")
return
end
-- Step 3: aktuelle Cursorposition bestimmen
centerpos = asc.getCursorPosition( map )
-- Step 4: ISG Beton platzieren
pinselpos = asc.getNeighbouringFieldCoordinate( centerpos, 0 )
pinsel ( pinselpos )
pinselpos = asc.getNeighbouringFieldCoordinate( centerpos, 3 )
pinsel ( pinselpos )
pinselpos = asc.getNeighbouringFieldCoordinate( centerpos, 1 )
pinselpos = asc.getNeighbouringFieldCoordinate( pinselpos, 2 )
pinsel ( pinselpos )
pinselpos = asc.getNeighbouringFieldCoordinate( centerpos, 4 )
pinselpos = asc.getNeighbouringFieldCoordinate( pinselpos, 5 )
pinsel ( pinselpos )
-- Step 5: Landezonen platzieren
pinselpos = asc.getNeighbouringFieldCoordinate( centerpos, 1 )
setObjekt ( pinselpos, isgzone )
pinselpos = asc.getNeighbouringFieldCoordinate( centerpos, 2 )
setObjekt ( pinselpos, isgzone )
pinselpos = asc.getNeighbouringFieldCoordinate( centerpos, 4 )
setObjekt ( pinselpos, isgzone )
pinselpos = asc.getNeighbouringFieldCoordinate( centerpos, 5 )
setObjekt ( pinselpos, isgzone )
-- Step 6: ISG Sokel platzieren
pinselpos = asc.getNeighbouringFieldCoordinate( centerpos, 1 )
pinselpos = asc.getNeighbouringFieldCoordinate( pinselpos, 2 )
setObjekt ( pinselpos, sockel )
pinselpos = asc.getNeighbouringFieldCoordinate( centerpos, 4 )
pinselpos = asc.getNeighbouringFieldCoordinate( pinselpos, 5 )
setObjekt ( pinselpos, sockel )
-- Step 7: Gebäude platzieren
setBuilding ( centerpos, kolradar, setSpieler )
if setSued == true then
pinselpos = asc.getNeighbouringFieldCoordinate( centerpos, 3 )
else
pinselpos = asc.getNeighbouringFieldCoordinate( centerpos, 0 )
end
setBuilding ( pinselpos, kolrz, setSpieler )
building = map:getField(pinselpos):getBuildingEntrance()
if setDepot == true then
if setSued == true then
pinselpos = asc.getNeighbouringFieldCoordinate( pinselpos, 1 )
pinselpos = asc.getNeighbouringFieldCoordinate( pinselpos, 2 )
pinselpos = asc.getNeighbouringFieldCoordinate( pinselpos, 2 )
else
pinselpos = asc.getNeighbouringFieldCoordinate( pinselpos, 1 )
pinselpos = asc.getNeighbouringFieldCoordinate( pinselpos, 2 )
pinselpos = asc.getNeighbouringFieldCoordinate( pinselpos, 1 )
end
setBuilding ( pinselpos, isgdepot, 0 )
end
-- Step 8: Bauoptionen im RZ einfügen
if setBauoptionen == true then
for i = 1, optionsCount do
building:addProductionLine( asc.getUnitType ( options[i] ) )
end
end
-- EOF --