Map Scripting Error
Posted: Fri Jul 17, 2015 7:32 pm
Hey, y'all. I've been trying to script a map based on this tutorial, and I'm running into some problems. I'm not entirely unfamiliar with Lua (I used to do some basic modding of Bungie's Marathon in it), but I'm definitely unfamiliar enough that I'm confident I'm just making a stupid mistake.
I suspect that the issue is related to the ways I've tried to adapt the script from the mod it was written for to Tiberium Dawn (and possibly left in inconsistency somewhere, although I can't find it if it exists), but I could be wrong about that.
Any help you can provide would be awesome. I can provide the map files themselves if necessary. Below is the error code I got, followed by the map.yaml and script:
I suspect that the issue is related to the ways I've tried to adapt the script from the mod it was written for to Tiberium Dawn (and possibly left in inconsistency somewhere, although I can't find it if it exists), but I could be wrong about that.
Any help you can provide would be awesome. I can provide the map files themselves if necessary. Below is the error code I got, followed by the map.yaml and script:
Code: Select all
Fatal Lua Error:
at OpenRA.Scripting.ScriptContext.FatalError(System.String message)
at System.Reflection.MonoMethod.InternalInvoke(System.Reflection.MonoMethod , System.Object , System.Object[] , System.Exception ByRef )
at System.Reflection.MonoMethod.Invoke(System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture)
at System.Reflection.MethodBase.Invoke(System.Object obj, System.Object[] parameters)
at Eluant.LuaRuntime+MethodWrapper.Invoke(System.Object[] parms)
at Eluant.LuaRuntime.MakeManagedCall(IntPtr state, Eluant.MethodWrapper wrapper)
at Eluant.LuaRuntime.MethodWrapperCallCallback(IntPtr state)
at Eluant.LuaRuntime.MethodWrapperCallCallbackWrapper(IntPtr state)
at Eluant.LuaApi.lua_pcall(IntPtr , Int32 , Int32 , Int32 )
at Eluant.LuaRuntime.Call(IList`1 args)
at Eluant.LuaRuntime.Call(Eluant.LuaFunction fn, IList`1 args)
at Eluant.LuaFunction.Call(IList`1 args)
at Eluant.LuaFunction.Call(Eluant.LuaValue[] args)
at OpenRA.Scripting.ScriptContext..ctor(OpenRA.World world, OpenRA.Graphics.WorldRenderer worldRenderer, IEnumerable`1 scripts)
at OpenRA.Mods.Common.Scripting.LuaScript.WorldLoaded(OpenRA.World world, OpenRA.Graphics.WorldRenderer worldRenderer)
at OpenRA.World.LoadComplete(OpenRA.Graphics.WorldRenderer wr)
at OpenRA.Game.StartGame(System.String mapUID, WorldType type)
at OpenRA.Network.UnitOrders.ProcessOrder(OpenRA.Network.OrderManager orderManager, OpenRA.World world, Int32 clientId, OpenRA.Order order)
at OpenRA.Network.OrderManager.TickImmediate()
at OpenRA.Sync+<CheckSyncUnchanged>c__AnonStorey0.<>m__0()
at OpenRA.Sync.CheckSyncUnchanged(OpenRA.World world, System.Func`1 fn)
at OpenRA.Sync.CheckSyncUnchanged(OpenRA.World world, System.Action fn)
at OpenRA.Game.InnerLogicTick(OpenRA.Network.OrderManager orderManager)
at OpenRA.Game.LogicTick()
at OpenRA.Game.Loop()
at OpenRA.Game.Run()
at OpenRA.Program.Run(System.String[] args)
at OpenRA.Program.Main(System.String[] args)
Code: Select all
MapFormat: 7
RequiresMod: cnc
Title: Stable Test
Description: Goal: Stable Test
Author: Your name here
Tileset: WINTER
MapSize: 66,66
Bounds: 16,12,38,49
Visibility: MissionSelector
Type: Mission
Videos:
Options:
Players:
PlayerReference@GDI:
Name: GDI
Playable: True
AllowBots: False
Required: True
LockRace: True
Race: gdi
LockColor: True
ColorRamp: 31,222,183
LockSpawn: True
LockTeam: True
Allies: GDI
Enemies: Nod
PlayerReference@Nod:
Name: Nod
Race: nod
ColorRamp: 3,255,127
Allies: Nod
Enemies: GDI
PlayerReference@Neutral:
Name: Neutral
OwnsWorld: True
NonCombatant: True
Race: gdi
PlayerReference@Creeps:
Name: Creeps
NonCombatant: True
Race: Random
Enemies: Nod, GDI
Actors:
Outpost: fact
Owner: GDI
Location: 33,32
NodRally: waypoint
Owner: Neutral
Location: 34,44
GDIRally: waypoint
Owner: Neutral
Location: 34,21
GDIEntry: waypoint
Owner: Neutral
Location: 35,13
NodEntry: waypoint
Owner: Neutral
Location: 34,54
<snip because there's a million of these and i'm fairly confident they're not relevant>
Smudges:
Rules:
Player:
-ConquestVictoryConditions:
MissionObjectives:
EarlyGameOver: true
World:
-CrateSpawner:
-SpawnMPUnits:
-MPStartLocations:
LuaScript:
Scripts: stabletest.lua
ObjectivesPanel:
PanelName: MISSION_OBJECTIVES
Sequences:
VoxelSequences:
Weapons:
Voices:
Notifications:
Translations:
Code: Select all
JeepReinforcements = {"jeep", "jeep"}
JeepReinforcementsPath = { GDIEntry.Location, GDIRally.Location }
JeepDelay = 12
JeepInterval = 2
Force = { "e1", "e1", "e1", "e1", "e2"}
ForcePath = { NodEntry.Location, NodRally.Location }
ForceDelay = 15
ForceInterval = 2
SendJeeps = function()
Reinforcements.Reinforce(player, JeepReinforcements, JeepReinforcementsPath, DateTime.Seconds(2))
Media.PlaySpeechNotification(player, "ReinforcementsArrived")
end
SendNodInfantry = function()
local units = Reinforcements.Reinforce(nod, Force, ForcePath, ForceInterval)
Utils.Do(units, function(unit)
BindActorTriggers(unit)
end)
Trigger.AfterDelay(DateTime.Seconds(5), SendNodInfantry)
end
BindActorTriggers = function(a)
if a.HasProperty("Hunt") then
if a.Owner == nod then
Trigger.OnIdle(a, a.Hunt)
else
Trigger.OnIdle(a, function(a) a.AttackMove(Outpost.Location) end)
end
end
end
OutpostDestroyed = function()
MissionFailed()
end
MissionAccomplished = function()
Media.PlaySpeechNotification(player, "Win")
end
MissionFailed = function()
Media.PlaySpeechNotification(player, "Lose")
player.MarkFailedObjective(SurviveObjective)
nod.MarkCompletedObjective(DestroyObjective)
end
WorldLoaded = function()
player = Player.GetPlayer(“GDI”)
nod = Player.GetPlayer(“Nod”)
Trigger.OnObjectiveCompleted(player, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective completed")
end)
Trigger.OnObjectiveFailed(player, function(p, id)
Media.DisplayMessage(p.GetObjectiveDescription(id), "Objective failed")
end)
Trigger.OnKilled(Outpost, OutpostDestroyed)
SurviveObjective = player.AddPrimaryObjective("The outpost must survive.")
DestroyObjective = nod.AddPrimaryObjective("The GDI outpost must be destroyed.")
Trigger.AfterDelay(DateTime.Seconds(60), function()
MissionAccomplished()
player.MarkCompletedObjective(SurviveObjective)
nod.MarkFailedObjective(DestroyObjective)
end)
Trigger.AfterDelay(DateTime.Seconds(5), SendJeeps) --Sending Allied reinforcements
SendNodInfantry(IndiaEntry.Location, Force, ForceInterval) --Sending Nod ground troops every 15 seconds
Trigger.AfterDelay(DateTime.Seconds(2), function() Actor.Create("camera", true, { Owner = player, Location = NodRally.Location }) end)
Camera.Position = Outpost.CenterPosition
end