AI Advance/TickOffensiveAIController

» Siedler Map Source Forum » Siedler DEdK Script Forum » AI Advance/TickOffensiveAIController

Seiten: 1

BrokenSun
#1
12.11.2017 23:15
Beiträge: 73

AI Advance/TickOffensiveAIController

Hi,
ich bräuchte mal eure hilfe:
Habe eine Multiplayer Map mit KI Zusatz gebastelt und es stellen sich EINIGE Probleme heraus die den Verlauf des Spiels etwas beeinträchtigen.
Außerdem noch ein paar Fragen, aber vorerst

Problem AI Advance/TickOffensiveAIController
Ich habe folgende Funktion in mein Script integriert ohne das etwas passiert:

retreatStrength     = 2,         
    baseDefenseRange    = 1000,       
    outerDefenseRange   = 10000,      
    AttackAllowed       = true,       
    AttackPos           = {           
        GetPosition("Haupthaus"),
        GetPosition("Dorfzentrum"),
        GetPosition("Außenposten"),
    },
    pulse               = true,       }


(Quelle: Script.docuwiki)

Die ID's wurden zugordnet

2. Problem Countdown
Der ein sichtbarer 15MinutenCountdown geht bei der Muliplayermap alle 15 Minute oder bei regen los, warum verstehe ich nicht, habe ihn nur in einem Abteil unter

function MassenAngriff2()

CreateAngriff1SP1()

CreateAngriff2SP1()

CreateAngriff1SP2()

CreateAngriff2SP2()


end

--++++Massenangriff++++
function MassenAngriff()

AngriffstruppIISP1()

AngriffstruppIISP2()

Message( "@color:238,0,0 Ihr seid ein zu starker Feind der Legionen, @cr ein Bote wurde entsand um euer Vorhaben zu unterbinden! @cr @color:139,0,0 Eine Armee wird folgen!" );

StartCountdown( 30 * 60, MassenAngriff2, true )

end

eingefügt

Die Startfunktion damit das Funktioniert ist ebenfalls Kopiert aus dem WIKI...

function StartCountdown(_Limit, _Callback, _Show)
    assert(type(_Limit) == "number")
    assert( not _Callback or type(_Callback) == "function" )
  
    Counter.Index = (Counter.Index or 0) + 1
    
    if _Show and CountdownIsVisisble() then
        assert(false, "StartCountdown: A countdown is already visible")
    end
    
    Counter["counter" .. Counter.Index] = {Limit = _Limit, TickCount = 0, Callback = _Callback, Show = _Show, Finished = false}
    
    if _Show then
        MapLocal_StartCountDown(_Limit)
    end
    
    if Counter.JobId == nil then
        Counter.JobId = StartSimpleJob("CountdownTick")
    end
    
    return Counter.Index
end
  
function StopCountdown(_Id)
    if Counter.Index == nil then
        return
    end
  
    if _Id == nil then
        for i = 1, Counter.Index do
            if Counter.IsValid("counter" .. i) then
                if Counter["counter" .. i].Show then
                    MapLocal_StopCountDown()
                end
                Counter["counter" .. i] = nil
            end
        end
    else
        if Counter.IsValid("counter" .. _Id) then
            if Counter["counter" .. _Id].Show then
                MapLocal_StopCountDown()
            end
            Counter["counter" .. _Id] = nil
        end
    end
end
  
function CountdownTick()
    local empty = true
    for i = 1, Counter.Index do
        if Counter.IsValid("counter" .. i) then
            if Counter.Tick("counter" .. i) then
                Counter["counter" .. i].Finished = true
            end
            
            if Counter["counter" .. i].Finished and not IsBriefingActive() then
                if Counter["counter" .. i].Show then
                    MapLocal_StopCountDown()
                end
                
                -- callback function
                if type(Counter["counter" .. i].Callback) == "function" then
                    Counter["counter" .. i].Callback()
                end
                
                Counter["counter" .. i] = nil
            end
            
            empty = false
        end
    end
    
    if empty then
        Counter.JobId = nil
        Counter.Index = nil
        return true
    end
end
  
function CountdownIsVisisble()
    for i = 1, Counter.Index do
        if Counter.IsValid("counter" .. i) and Counter["counter" .. i].Show then
            return true
        end
    end
    
    return false
end


Danke für rückmeldungen!

Script-Code
Script zu Groß, verweise zu "Edge of the World" MultiplayerMap

Dieser Beitrag wurde von BrokenSun am 13.11.2017 um 17:06 editiert.

BrokenSun
#2
12.11.2017 23:18
Beiträge: 73

Desynch

Was ich vergessen hatte,
Was ist so schlimm an Desynch?
Inwiefern beeinträchtigt das,das spiel Erlebnis?

mcb
#3
12.11.2017 23:49
Beiträge: 1472

Das Problem an einem Desync ist, das auf einem PC etwas anderes passiert, als auf dem anderen. Z.B. ein modifizierter Button: Auf dem PC wo der Button gedrückt wird, wird ausgeführt, was immer in der Action-Funktion programmiert ist (z.B. das Spawnen von Truppen) aber auf allen anderen nicht. Was hast du denn für Desyncs?

Zur AI: Ist die AI aktiviert und Truppen gespawnt?

Zum Countdown: Von Wo wird StartCountdown sonst aufgerufen? Wie wird MassenAngriff aufgerufen?

PS: Benutze bitte [code] lua [/code] für Lua hier im Forum, sieht dann so aus:

function foo()
   bar()
end

(Kannst du auch nachträglich in deine Posts editieren)

BrokenSun
#4
13.11.2017 16:57
Beiträge: 73

Countdown

Das ding ist, ich habe im spiel alle 15Minuten einen Sichbaren 15Min. Countdown, mein "MassenAngriff" hat jedoch einen 30Minúten sichbaren Countdown...

Truppen KI funktioniert relativ

Human1- /

Human2- /

KI3- Steht nur herum (Agressive=4)
Läuft zum HQ und ignoriert die Befehle (Agressive=1-3)

KI4- Lediglich Feindlich, SetFriendly funktioniert nicht daher nicht aktiv

KI5- Bewegt sich von alleine, Produziert und Repairiert selbstständig, ignoriert befehle...

KI6- Nicht aktiv, Produziert keine Truppen, befolgt Marschbefehl, dennoch keinen TickOffensiveAIController Befehl.

Habe oben nochmal mein ganzes script eingefügt...
MFG Broken

mcb
#5
13.11.2017 17:55
Beiträge: 1472

Ich vermute mal, der Countdown wird auch von Standard-MP-Scripten verwendet und irgendwas funktioniert da nicht zusamen (z.B. Peacetime). Außerdem startet die Wetter-Funktion einen 30-min countdown.

Das mit der KI ist immer so ne Sache, die macht eigentlich nie das, was man von ihr will
Aber um Armeen (und TickOffensiveAIController) zu benutzen muss die KI aktiviert sein, Ein einfacher Aufruf von SetupPlayerAi sollte genügen.
Zu KI4: MapEditor_SetupAI setzt die KI auf feindlich, also den Diplostatus danach nochmal neu setzen sollte helfen.

BrokenSun
#6
13.11.2017 23:46
Beiträge: 73

WetterTimer liegt bei 15*60, da aber True/False nicht für Countdown Show angezeigt ist kann das gut sein ich probiers demnächst nochmal aus, danke für den Hinweis.
StartCountdown( 15*60, "Functionname", False)
sollte denke ich hinhauen
MFG BrokenSun

BrokenSun
#7
18.11.2017 17:41
Beiträge: 73

Countown

Der Wettercountdown stand auf sichtbar und aktivierte sich nach jedem Wetterwechsel, Problem elemeniert xD

Seiten: 1

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

Impressum