Jump to content

Runway Strike: Runway als Objekt definieren (assign as...)


Recommended Posts

Posted (edited)

Hallo,

gibt es eine Möglichkeit, eine Runway als Ziel für einen Runway-Strike zu definieren?
Mit Gebäuden geht es ja über "assign as..." wenn man hinklickt, nur bei der Runway finde ich den Klick-Punkt für "assign as" nicht.
Ich brauche eine Abfrage, ob die Startbahn wirklich getroffen wurde, damit ich einen Funkspruch an alle Spieler ausgeben kann.
Ich habe auch schon mehreres probiert, wie z.B.:

- Empfindliches Objekt draufstellen, das man dann halt zerbombt und der Trigger fragt das Objekt ab, ob zerstört, aber ich kriege die Dinger nicht unsichtbar, auch mit den 3 Häkchen bei "Hidden" nicht.

- Mein zweiter Ansatz war eine Triggerzone mit Bedingung "Bombe in Zone", aber dann müsste ich alle (!) Bomben als Bedingung eintragen, und wenn eine Bombe 90° zur Landebahn in 50m Höhe durch die Triggerzone fliegt und abseits explodiert löst ja auch nur das Durchfliegen der Triggerzone auch aus, ob wohl die Bedingung ja nur dann auslösen soll, wenn die Bombe im Asphalt explodiert.

Gibt es eine elegante sexy Lösung, die ich nicht kenne?
Dann her damit!
Gruß Purzel

Edited by Purzel
Posted

Guten Morgen,

einfach mal youtube fragen:

 

Eventuell ist es ja das, was du gesucht hast?

**************************************

DCS World needs the Panavia Tornado! Really!

**************************************

Posted (edited)

Danke für Deine Hilfe, aber das habe ich nicht gesucht, ich suche eine Abfrage, ob die Runway getroffen wurde.
(Habe ich oben auch nochmal ergänzt, um keine Missverständnisse aufkommen zu lassen.)
Die Wegpunkt-Funktion "runway-attack" (mit dem Dreieck auf der Runway) ist mir bekannt, es spielen aber Clients und dafür brauche ich eine Abfrage.
Was die zwei Videos da oben zeigen ist für KI-Piloten...
Ich möchte abfragen, ob die Runway von den Spielern getroffen wurde und dazu dann einen Trigger auslösen, dass alle flights wissen, dass die Runway auch getroffen wurde.

Greetz Purzel

Edited by Purzel
Posted

Hey, hast du die Zone rechteckig oder rund ? das Rechteck kannst du doch genau an die RWY anpassen, wenn daneben die Bombe explodiert sollte das doch nicht zählen,

CU you in the * AIR *  ^AirWolf

PC > BE QUIIET Power 1000 W ATX 3.0 * ROG STRIX Z690-F * i7-12700 KF * DDR5-6000 64 GB * M.2 980 EVO PRO 2 TB * RX 7900 XTX 24 MB XFX MERC 310 BLACK EDITION  *

 

 

 

Posted

Also ein event 'Bomb hit runway' kenn ich jetzt nicht. Am besten wie von AirWolf beschrieben eine rechteckige Zone um die Runway machen und abfragen mit dem Trigger 'Bomb in Zone'.
Ist für viele Spieler und unterschiedliche Bomben etwas nervig abzufragen, aber wenn du das vermeiden willst must du zu Moose oder Mist wechseln.

Posted

Hi,

ah, okay. Oder du schaust dir mal DML an, ob dich das weiter bringt.

**************************************

DCS World needs the Panavia Tornado! Really!

**************************************

Posted (edited)

Dazu möchte ich erwähnen, dass nicht die Explosion in der Zone als Auslöser dient, sondern Bombe XY muss sich länger als eine Sekunde in der Zone befinden. Das geht natürlich, funktioniert aber nicht so zufriedenstellend. Also der Trigger kann also auch ausgelöst werden, wenn die Bombe neben der Runway einschlägt, aber vorher durch die Zone geflogen ist. Ebenso kann es sein, dass zwar die Runway mittig getroffen wurde, aber sich die abgeworfene Bombe davor zu kurz in der Zone aufgehalten hat.

Edited by coyote79
  • Like 1
Posted

Hey, so ist das wirklich nicht zufriedenstellend, hab mich schön öfter gewundert, nicht gewusst das es auch beim Durchflug zählt, vielleicht für die Zone "Erfolgreiche Einheiten Treffer" nehmen, dann kann man ja für jeden der was reinwirft den Namen definieren und mit oder mehrere eintragen, dann dürfte ja nur die Bedingung zählen in der Zone, werd ich auch mal check!

CU you in the * AIR *  ^AirWolf

PC > BE QUIIET Power 1000 W ATX 3.0 * ROG STRIX Z690-F * i7-12700 KF * DDR5-6000 64 GB * M.2 980 EVO PRO 2 TB * RX 7900 XTX 24 MB XFX MERC 310 BLACK EDITION  *

 

 

 

Posted

Hey, dachte man kann es so kombinieren, geht auch nicht, Treffer sind auf Einheiten bezogen und geht nicht mit Zone, vielleicht findet man ja noch etwas !

CU you in the * AIR *  ^AirWolf

PC > BE QUIIET Power 1000 W ATX 3.0 * ROG STRIX Z690-F * i7-12700 KF * DDR5-6000 64 GB * M.2 980 EVO PRO 2 TB * RX 7900 XTX 24 MB XFX MERC 310 BLACK EDITION  *

 

 

 

Posted

Ja, das ist wohl nicht so einfach.
Mit den Programmier-Sprachen kenne ich mich halt so gar nicht aus.
Wo mache ich das mit dem Eventhandler im Mission Editor?

Posted

einfach als doscript mit Missionsbeginn starten. Würde das letzte Script in dem Thread nehmen. Musst du nur die Base-ID raussuchen, ist zwei-drei Beiträge vorher beschrieben.
Wenn's nicht klappt sag bescheid, dann bastel ich dir eine Beispielmission

  • Like 1
Posted (edited)
Zitat

dann bastel ich dir eine Beispielmission

Hi @buur ,

Ja gerne, dieses Definition-Script läuft, für die Syrien-Map wäre "Shayrat" der Flugplatzname mit der ID "36",
Eine Mission wäre zum Anschauen schon mal eine Hilfe...  Danke für Dein Angebot!

Ich bekomme beim Missionsstart keine Fehlermeldung, aber irgendwie muss ja da ein Flag gesetzt werden, dass ich später damit arbeiten kann.
Ich weiß bloss nicht, wie ich aus dem Script das Flag auslesen kann, bzw. wo das im Script definiert wird.
(evtl. ist "morto" oder "morte" der Flagname?  "morte" = Der Tod, "morto" = tot ).
Und wie frage ich das dann ab? Flag equals oder Flag is true?
Also ich hab es schon probiert, bekomme aber die Abfrage für die Zerstörung der Runway irgendwie nicht hin.
Wäre klasse, wenn Du mir eine Mission dazu erstellen könntest... 😉

Der Einfachheit halber kopiere ich Dir die Scripte aus dem anderen Thread hier her:

Airbase und ID auslesen:

Spoiler
local baseaerea2 = world.getAirbases()
local teste = {}

for a, b in pairs(baseaerea2) do 
	if b:getCategory() == 4 then
		teste[#teste+1] = "\n ID: " .. b:getID() .. " / Name: " .. b:getName()
	end	
end

trigger.action.outText(table.concat(teste), 60)

Runway-Script:
 

Spoiler

nome = {Shayrat} -- Name of base including FARP, e.g. Shayrat
idNome = {36} -- ID of base including FARP, e.g. 36
local baseaerea = world.getAirbases() -- All bases including FARP

for a, b in pairs(baseaerea) do 
    if b:getCategory() == 4 then
        idNome[#idNome+1] = tostring(b:getID())
        nome[#nome+1] = b:getName()
    end    
end

function atrasar(i) -- delay at start
    -- i[1] = nome da função
    -- i[2] = tabela de valores da função
    -- i[3] = tempo de delay
    
    timer.scheduleFunction(i[1], i[2], timer.getTime() + i[3])

end

function CheckBase(Check, time) -- damaged runway
    -- Check[1] = Nome da base aérea
    -- Check[2] = Flag
    if trigger.misc.getUserFlag(Check[2]) == 11 then
        return nil
        
    else    
        local base = Airbase.getByName(Check[1]):getLife() -- check health of base
    
        local function arredondar(x, n)
            n = math.pow(10, n or 0)
            x = x * n
            if x >= 0 then
                x = math.floor(x + 0.5)

            else
                x = math.ceil(x - 0.5)
        
            end
                return x / n
        end
        
        if base < 3600 and base >= 1 then
            local num = base/3600
            local numfinal = (1 - arredondar(num, 1))*10
        
            if numfinal == 10 then
                trigger.action.setUserFlag(Check[2], numfinal)            
                return nil
        
            else
                trigger.action.setUserFlag(Check[2], numfinal)            
                return time + 25
        
            end    
    
        else
            return nil
        
        end
    end
end

function morte(morto)
    trigger.action.setUserFlag(morto, 11)    
    
end

local Event_Handler = {}

function Event_Handler:onEvent(Event)    
    if Event.id == 1 then -- Shot        
        local WeaponShoot = Event.weapon:getDesc()
        local categoria = WeaponShoot.category
        
        if categoria == 1 then
            local mcategoria = WeaponShoot.missileCategory
            
            if mcategoria ~= 1 and mcategoria ~= 2 and mcategoria ~= 4 and mcategoria ~= 6 then
                for c, d in pairs(nome) do
                local detalhes = {}
                            
                detalhes = {
                    nome[c],
                    idNome[c]
                }                
                        
                atrasar({CheckBase, detalhes, 1200})
                            
                end                
            end
            
        elseif categoria ~= 0 and categoria ~= 4 then
            for c, d in pairs(nome) do
                local detalhes = {}
                            
                detalhes = {
                    nome[c],
                    idNome[c]
                }                
                        
                atrasar({CheckBase, detalhes, 30})
                            
            end
        end
    
    elseif Event.id == 8 and Event.initiator ~= nil then -- dead

        local InitiatorObject = Event.initiator
        local InitiatorName = InitiatorObject:getName()
        local InitiatorCategory = InitiatorObject:getCategory()

        if InitiatorCategory == 4 then
            
            for e, f in pairs(nome) do
                
                if f == pista then
                    local identidade = ""
                    identidade = idNome[e]
                    
                    atrasar({morte, identidade, 30})
                
                end
            end            
        end
    end    
end

world.addEventHandler(Event_Handler)




Und schonmal ein fettes Dankeschön im Vorraus!
 

Edited by Purzel
Posted

Hi @Purzelhier ist die MissionPurzelRWYDamaged.miz

Wenn du Namen in ein Script einträgst immer in Anführungszeichen. Also 'Shayrat'

Das Skript erzeugt eine Flag mit der Nummer der Airbase, also hier 36. Diese kannst du dann mit einem Trigger Flag more abfragen.

 

  • Like 2
Posted (edited)

Uih! Das ging ja schnell, gleich mal probieren...
@buur 
Ja klappt! Saugeil! Danke!
Ich füge hier morgen noch eine Zusammenfassung ein.

 

 

Edited by Purzel
Posted
vor 6 Stunden schrieb Purzel:

Ja klappt! Saugeil! Danke!
Ich füge hier morgen noch eine Zusammenfassung ein.

 

 

Bedank dich nicht bei mir, sonders beim Autor des Skriptes. Der freut sich bestimmt 🙂

Ich habs ja nur in ne Mission gepackt.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...