Exakter Aufruf von AI.Army_SetWaypointCallback()

» Siedler Map Source Forum » Mapping » Exakter Aufruf von AI.Army_SetWaypointCallback()

Seiten: 1

Emzet
#1
19.06.2008 15:19
Beiträge: 80

Exakter Aufruf von AI.Army_SetWaypointCallback()

Hallo!

Ich werkel derzeit an meiner zweiten Map herum und habe derzeit Probleme mit der Funktion
AI.Army_SetWaypointCallback( _playerId, _armyId, _funcName ).
Der genaue Aufruf in meiner Map lautet:

AI.Army_SetWaypointCallback(4,4,warten())




Nur das Spiel stürzte immer wieder ab, und ich habe den Verdacht, dass die Funktion nicht richtig aufgerufen wird, weil die eingegebenen Parameter vielleicht falsch sind.

Wäre für eine Lösung des Problems dankbar

nevermind
Siedler Map Source Admin (Web)
#2
19.06.2008 19:26
Beiträge: 483

Hier ein wenig Beispielcode, der nicht unbedingt funktionieren muss...
Wenn die Armee nicht nur Wegpunkte ablaufen, sondern hin und her patrouillieren soll, ist die Funktion glaube ich nicht so gut geeignet. Da sollte man sich selbst etwas überlegen und die Armee mit Redeploy() durch die Gegend schicken. Das (fortgeschrittenen) Tutorial über Armeen im Wiki hilft.
Ob der Parameter _waypoint wirklich bei 1 anfängt, oder doch bei 0, müsstest du im Zweifelsfall mit Message() testen.


function CreateArmyOne()
    ArmyOne = {
        id          = 1,
        player      = 2,
        position    = GetPosition("armyOneStart"),
        rodeLength  = 3000,
        strength    = 6,
        
        zielErreicht = false,
    }
    
    SetupArmy(ArmyOne)
    
    for wp = 1, 5 do
        AI.Army_AddWaypoint(ArmyOne.player, ArmyOne.id, GetEntityId("armyOneWP" .. wp))
    end
    
    AI.Army_SetWaypointCallback(ArmyOne.player, ArmyOne.id, "ArmyOneWaypointCallback")
    
    StartSimpleJob("ControlArmyOne")
end

function ControlArmyOne()
    if Counter.Tick2("ControlArmyOne", 10) then
        if IsDead(ArmyOne) then
            return true
        end
        
        -- Wenn letzer Wegpunkt erreicht wurde, langsam vorrücken
        if ArmyOne.zielErreicht then
            Advance(ArmyOne)
        end
    end
end

function ArmyOneWaypointCallback(_waypoint)
    -- Bei den ersten Wegpunkten jeweils 30 Sekunden warten
    if _waypoint < 3 then
        if Counter.Tick2("ArmyOneWarten", 30) then
            return 1
        end
        return 0
        
    -- Beim vierten Wegpunkt 5 Minuten lang angreifen
    elseif _waypoint == 4 then
        if not Counter.Tick2("ArmyOneAngreifen", 300) then
            FrontalAttack(ArmyOne)
            return 0
        end
        return 1
        
    -- Beim letzten Wegpunkt Wegpunkte löschen
    else
        ArmyOne.zielErreicht = true
        AI.Army_ClearWaypoints(ArmyOne.player, ArmyOne.id)
        return 0
    end
end



____________________
LUA_ERRSYNTAX: [string "?"]:1: `=' expected near `<eof>'

Dieser Beitrag wurde von nevermind am 19.06.2008 um 19:35 editiert.

Emzet
#3
20.06.2008 11:45
Beiträge: 80

Vielen Dank

Vielen Dank für den Code und den Tipp.
Ich werde wahrscheinlich wirklich eine Patrolfunktion erstellen müssen.
Auf jedenfall werde ich den Code testen.

Seiten: 1

SiteEngine v1.5.0 by nevermind, ©2005-2007
Design by SpiderFive (www.siedler-games.de) - English translation by juja

Impressum