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


