Tot in der Cutszene

» Siedler Map Source Forum » Siedler DEdK Script Forum » Tot in der Cutszene

Seiten: 1

RitterLeo
#1
02.03.2019 17:54
Beiträge: 237

Tot in der Cutszene

Ich möchte das in einer Cutszene ein Schaf stirbt während es angegriffen wird.
Jedoch tötet es der Soldat nicht und es bleibt am Leben.

Außerdem will ich nach einem Briefing den Helden an einen bestimmten Baum schicken und dort ein Briefing sowie eine Einheit erstllen, dies wird jedoch nicht ausgelöst.

Falls ihr das Script angucken müsst sagt mir nochmal wie ich das am besten hier reinstelle.

____________________
Die Gier eines Menschen kann man mit der einer Pflanze vergleichen:
Hat sie einmal genug Wasser und Sonne wächst sie um noch mehr zu bekommen.

Der_Deutsche
#2
02.03.2019 18:44
Beiträge: 349

Während einer Cutszene (Briefing) sind theoretisch alle Enitiys undsterblich, außer du killst sie per Skript. Wenn der nächste text kommt kannst du es dort als Dunktion reinschreiben. Trotzdem würde es helfen, wenn du den Briefing uns schickst.

(Falls zu lang, kannst du es auf hastebin.com einfach Copy Pasten)

____________________
Nachbau von Siedler 5 Lobbys "Ubi.Com"

Updatelösungen Siedler 5 Patch 1.06

Creators Update Lösung Windows 10 Siedler 5

Zedeg
#3
02.03.2019 19:02
Beiträge: 428

Standardmäßig ist während Briefings und Cutscenes globale Unverwundbarkeit eingestellt. Probiere mal

MakeInvulnerable(_entity, 0)

Falls das nicht geht, verwende

Logic.SetGlobalInvulnerability(0)

, um die globale Unverwundbarkeit auszustellen. (Evtl. habe ich die Null mit der Eins vertauscht.)

Code stellst du rein mit [code]foo(bar)[/code]

____________________
Journalisten erkundigen sich bei Wissenschaftlern meist nicht nach Grundlagen, sondern eher nach Ergebnissen und Folgerungen. Das erklärt womöglich auch, warum sich Forschungsberichte in den Medien so häufig als feststehende Erkenntnisse lesen, nicht aber als Ideen, Entdeckungen oder Indizien, um die es sich genau genommen in den meisten Fällen handelt. -Axel Bojowski

RitterLeo
#4
02.03.2019 19:16
Beiträge: 237

Nun fehlt nur noch das die If IsNear function hier nicht ausgelöst wird.

function Oliven()
if IsNear("Dario","Oliven", 500) then
Oliven2()
end
end
function Oliven2()
CreateMilitaryGroup(8,Entities.CU_Evil_LeaderBearman1,0,GetPosition("Geist"),"Ghost")
Briefing_Geist()
end


Vorher hatte ich die Oliven2 mit in Oliven gehabt, habe dies nur umgestellt da ich dachte das es deshalb nicht ausgelöst wird.

Überhaupt ist das Script nicht gerade groß, 3 Briefings, usw. da es gerade erst am Anfang steht.

____________________
Die Gier eines Menschen kann man mit der einer Pflanze vergleichen:
Hat sie einmal genug Wasser und Sonne wächst sie um noch mehr zu bekommen.

Dieser Beitrag wurde von RitterLeo am 02.03.2019 um 19:22 editiert.

mcb
#5
02.03.2019 20:48
Beiträge: 1472

Wie rufst du denn Oliven auf? Als SimpleJob?

RitterLeo
#6
03.03.2019 10:35
Beiträge: 237

Ja, jedoch auch ohne Erfolg.

____________________
Die Gier eines Menschen kann man mit der einer Pflanze vergleichen:
Hat sie einmal genug Wasser und Sonne wächst sie um noch mehr zu bekommen.

Zedeg
#7
03.03.2019 11:37
Beiträge: 428

Ohne Code wird das hier nichts mit Hilfe. Generell kann es bei der Fehlersuche helfen, Message-Befehle zu verwenden, um zu sehen, bis wohin der Code noch funktioniert. Oder man verwendet gleich den Lua-Debugger von yoq.

____________________
Journalisten erkundigen sich bei Wissenschaftlern meist nicht nach Grundlagen, sondern eher nach Ergebnissen und Folgerungen. Das erklärt womöglich auch, warum sich Forschungsberichte in den Medien so häufig als feststehende Erkenntnisse lesen, nicht aber als Ideen, Entdeckungen oder Indizien, um die es sich genau genommen in den meisten Fällen handelt. -Axel Bojowski

RitterLeo
#8
03.03.2019 11:40
Beiträge: 237

Hier mal das Komplette Script.

--------------------------------------------------------------------------------
-- MapName: Das schwarze Schaf
--
-- Author: RitterLeo
--
--------------------------------------------------------------------------------

-- Include main function
Script.Load( Folders.MapTools.."Main.lua" )
IncludeGlobals("MapEditorTools")

--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- This function is called from main script to initialize the diplomacy states
function InitDiplomacy()
SetHostile(6,8)
end


--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- This function is called from main script to init all resources for player(s)
function InitResources()
    -- set some resources
    AddGold  (1000)
    AddSulfur(2000)
    AddIron  (3000)
    AddWood  (4000)	
    AddStone (5000)	
    AddClay  (6000)	
end

--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- This function is called to setup Technology states on mission start
function InitTechnologies()
end

--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- This function is called on game start and after save game is loaded, setup your weather gfx
-- sets here
function InitWeatherGfxSets()
	SetupNormalWeatherGfxSet()
end

--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- This function is called on game start you should setup your weather periods here
function InitWeather()
	AddPeriodicSummer(10)
end

--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- This function is called on game start and after save game to initialize player colors
function InitPlayerColorMapping()
   Display.SetPlayerColorMapping(8,NPC_COLOR) 
   Display.SetPlayerColorMapping(1,FRIENDLY_COLOR3)
end
	
--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- This function is called on game start after all initialization is done
function FirstMapAction()
ActivateBriefingsExpansion()
Outro()
Logic.SetGlobalInvulnerability(0)
end

function Outro()
local cutsceneTable = {
    StartPosition = {
		position = GetPosition("Dario"), angle = 60, zoom = 1000, rotation = 10},
        Flights = {
			{
            position = GetPosition("Dario"),
            angle = 10,
            zoom = 1200,
            rotation = 130,
            duration = 13,
			action 	=	function()
			end,
			title = "Dario",			
            text = "Aber Vater versteh mich doch, ich will hinaus in die weite Welt und alles erkunden.",
            },
			{
            position = GetPosition("Dario"),
            angle = 20,
            zoom = 1200,
            rotation = 180,
            duration = 13,
			action 	=	function()
			end,
			title = "Vater Dariel",			
            text = "Bitte glaub mir doch Sohn, da draußen erwartet dich das Böse, hier bist du sicher.",
            },
{
            position = GetPosition("Sheep_Black"),
            angle = 20,
            zoom = 1200,
            rotation = 350,
            duration = 14,
			action 	=	function()
CreateMilitaryGroup(6,Entities.CU_BlackKnight_LeaderMace1,0,GetPosition("Attack_Intro"),"Attack_Sheep")
Attack("Attack_Sheep","Sheep_Black")
SetHealth("Black_Sheep", 200)
			end,
			title = "Vater Dariel",			
            text = "Hm? Nanu,was ist denn da los? Was macht der da mit unserem Schaf!",
            },
			},
			Callback = function()
			Briefing_Anfang()
SetHealth("Attack_Sheep", 0)
			end
    }
    StartCutscene(Umlaute(cutsceneTable))
end
function Briefing_Anfang()
    local briefing = {}
    local AP, ASP = AddPages(briefing);
	ASP("Vater","Vater Dariel", "Hmm, nun gut ich glaube dise Umstände werden Beweisen ob du bereit bist, dieses Land zu verlassen.", true)
	ASP("Dario","Dario", "Von was redest du Vater?.", true)
	ASP("Vater","Vater Dariel","Du sollst den Täter aufsuchen und ihn zur Strecke bringen. @cr Gelingt dir das so lass ich dich von dannen ziehen.", true)
	ASP("Dario","Dario","Das werde ich und dann werde ich die weite Welt aufsuchen.", true)
	ASP("Dario","Dario","Aber bevor ich dies tue. @cr Lass mich noch ein letztes mal meinen alten Olivenbaum besuchen.", true)
	ASP("Vater","Vater Dariel","Klar, besuch vorher aber noch deine Mutter, sie will sich bestimmt auch noch verabschieden.", true)
	StartBriefing( briefing)
	briefing.finished = function()
CreateNpcMutter()
Move("Vater","Handel")
	end
end
function CreateNpcMutter()
	local npc = {
        name     = "Mutter", 
		heroName = "Dario",
		marker = true, 
		wrongHeroMessage = "Dario mein Sohn",	
	    callback = function()
			Briefing_Mutter()
			RemoveNpcFromTable("Mutter")
		end
    }
    CreateNPC(npc)	
end

function Briefing_Mutter()
    local briefing = {}
    local AP, ASP = AddPages(briefing);
	ASP("Mutter","Mutter Daran", "Ich denke ich muss dann los, ich will meine Familie ja auch nicht zu lange warten lassen.", true)
	ASP("Bauer","Bauer Heinrich", "Ja ist gut, ich hoffe es hat nur nicht zu lange gedauert.", true)
	ASP("Dario","Dario","Mutter, ich habe Neuigkeiten für dich. @cr Ich werde schon bald das Land verlassen.", true)
	ASP("Dario","Dario","Vater sagte mir das ich gehen darf sobald ich den Mörder des schwarzen Schafes gefasst habe.", true)
	ASP("Mutter","Mutter Daran","Ach mein lieber Dario, ich hätte es mir denken können. @cr Ich werde dich nicht Aufhalten, such nur dein Glück.", true)
	ASP("Mutter","Mutter Daran","Aber wenn du schon gehst schreib uns irgendwann mal und komm uns besuchen.", true)
	ASP("Dario","Dario","Das werde ich Mutter, machs gut.", true)
	StartBriefing( briefing)
	briefing.finished = function()
StartSimpleJob("Oliven")
	end
end
function Oliven()
if IsNear("Dario","Oliven", 500) then
Oliven2()
end
end
function Oliven2()
CreateMilitaryGroup(8,Entities.CU_Evil_LeaderBearman1,0,GetPosition("Geist"),"Ghost")
Briefing_Geist()
end

function Briefing_Geist()
    local briefing = {}
    local AP, ASP = AddPages(briefing);
	ASP("Ghost","???", "Du willst also den Übeltäter aufspüren? Typisch Menschen.", true)
	ASP("Ghost","???", "So einen Eisenmann kannst du nicht besiegen!.", true)
	ASP("Dario","Dario","W-W-WER BIST DU?. @cr Was willst du denn von mir?.", true)
	ASP("Ghost","Mallon","Ich bin Mallon, und du bist der der absofort meinen Job übernimmt.", true)
	ASP("Dario","Dario","Was denn für einen Job? @cr Ich weiss nicht was du meinst.", true)
	ASP("Ghost","Mallon","Du wirst das Wesen Jagen das die schwarzen Schafe tötet, und auch gleichzeitig das Schaf beschützen.", true)
	ASP("Dario","Dario","Aber was ist denn so besonders an den schwarzen Schafen? Diese Viecher sind doch nicht wichtig.", true)
	ASP("Ghost","Mallon","NICHT WICHTIG? Schwarze Schafe sind ein Werk des Teufels und ungemein wichtig!", true)
	ASP("Ghost","Mallon","Sollte es weniger schwarze Schafe als Böses in der Welt geben so kommt der Teufel herbei.", true)
	ASP("Ghost","Mallon","Ich sags dir, jedes Schwarze Schaf weniger bedeutet 1 Schritt näher zum Teufel.", true)
	ASP("Ghost","Mallon","Ich beschütze das heilige Schaf und du erledigst den Jäger, verstanden?.", true)
	ASP("Dario","Dario","Ähm, Okay, aber warum Jagst du ihn nicht selber?", true)
	ASP("Ghost","Mallon","Das erzähl ich dir später, und jetzt los, Beweg dich!", true)
	StartBriefing( briefing)
	briefing.finished = function()
	end
end

function CreateNpcVaterhandel()
	local npc = {
        name     = "Vater", 
		heroName = "Dario",
		marker = true, 
		wrongHeroMessage = "Dario mein Sohn",	
	    callback = function()
			Briefing_Vaterhandel()
			RemoveNpcFromTable("Vater")
		end
    }
    CreateNPC(npc)	
end

function Briefing_Vaterhandel()
	local briefing = {}
	local AP, ASP = AddPages(briefing)
	ASP("Vater", "Vater Dariel", "Ah Dario, ich verhandle nur gerade mit dem Händler um den Zaun zu reparieren.", true)
	local choicePage1 = AP{
		mc = {
			title	= "Dario",
			text 	= "Ah ich verstehe... (Helfen oder nicht)",
			firstText   = ",ich werde dir helfen.",
			secondText  = ", na dann viel glück.",
			firstSelected  = 3,--landingPage1,
			secondSelected = 12,--landingPage2,
		},
	}
	
	local landingPage1 = ASP("Vater", "Vater Dariel", "Ah das ist sehr nett mein Sohn." ..
		" Der Mann ist zwar alt aber hat echtes Verhandlungsgeschick.", true)
	ASP("Handel", "Händler Marius", "Ich sagte dir unter 150 Talern wird mein Sohn nix machen, da kann dir auch dein Sohn nicht helfen", false)
	ASP("Vater", "Vater Dariel", "Guter Mann, repariert uns doch den Zaun, im Gegenzug wäre mein Vater sicherlich bereit euch ein Abendmahl zuzubereiten.", true)
	local choicePage2 = AP{
		mc = {
			title	= "Dario",
			text 	= "Tut mir leid aber ich habe eine Aufgabe zu erfüllen.",
			firstText   = "Gegen ein Abendmahl für uns beide wäre nichts einzuwenden, er wird sich sofort an die Arbeit machen.",
			secondText  = "Aber vielleicht kriegst du ihn doch irgendwie noch rum.",
			firstSelected  = 7,--landingPage3,
			secondSelected = 10,--landingPage4,
		},
	}
	local landingPage3 = ASP("Vater", "Vater Dariel", "Ach, hab vielen dank mein Sohn, du bist wahrlich ein Glückskind." ..
		" Weist du, ich hatte doch 150 Taler, hier nimm ruhig die anderen 25.", true)
	ASP("p2bast", col.hblau.."Mission", "Du hast 25 Taler erhalten, setze sie klug ein.", false)
	AP()	
	local landingPage4 = ASP("Vater", "Vater Dariel", "Machs gut, ich hoffe die 25 Taler werden dir etwas bringen." ..
		" Ah jetzt muss ich mich nur noch ans Abendessen setzen." ..
		" @cr Ich versteh schon, verfolg nur weiter deinen Traum ...", true)
	AP()		local landingPage2 = ASP("leaderP2", "Anführer", "So lob ich mir das.", true)
		briefing.finished = function()
		
		end
	StartBriefing(Umlaute(briefing))
end









------------------------------------------------------------------------------------------------------------------------------------------------------------
function AddPages( _briefing )
    local AP = function(_page) table.insert(_briefing, _page); return _page; end
    local ASP = function(_entity, _title, _text, _dialog, _explore) return AP(CreateShortPage(_entity, _title, _text, _dialog, _explore)); end
    return AP, ASP;
end
function CreateShortPage( _entity, _title, _text, _dialog, _explore) 
    local page = {
        title = _title,
        text = _text,
        position = GetPosition( _entity ),
		action = function ()Display.SetRenderFogOfWar(0) end
    };
    if _dialog then 
            if type(_dialog) == "boolean" then
                  page.dialogCamera = true; 
            elseif type(_dialog) == "number" then
                  page.explore = _dialog;
            end
      end
    if _explore then 
            if type(_explore) == "boolean" then
                  page.dialogCamera = true; 
            elseif type(_explore) == "number" then
                  page.explore = _explore;
            end
      end	  
    return page;
end
function InitColors() 
	orange	= " @color:255,127,0 "
	rt		= " @color:255,50,50 "
	gb		= " @color:255,215,0 "
	bl 		= " @color:50,150,200 "
	hgb		= " @color:238,221,130 "
	ws		= " @color:255,255,255 "
	gn		= " @color:173,255,47 "
	mint 	= " @color:0,255,255 "
	lila 	= " @color:186,85,211 "
	trans	= " @color:0,0,0,0 " --transparent
	grau	= " @color:155,155,155 "
	ColorR, ColorG, ColorB = GUI.GetPlayerColor( 4 )
	cyan	=  " @color:"..ColorR..","..ColorG..","..ColorB.." "
end
function StartCutscene(_Cutscene)
  local length = 0
  local i
  for i = 1, table.getn(_Cutscene.Flights) do
    length = length + _Cutscene.Flights[i].duration + (_Cutscene.Flights[i].delay or 0)
  end
  gvCutscene = {
    Page      = 1,
    Flights   = _Cutscene.Flights,
    EndTime   = Logic.GetTime() + length,
    Callback  = _Cutscene.Callback,
    Music     = Music.GetVolumeAdjustment(),
    }
  cutsceneIsActive = true
  --XGUIEng.SetMaterialColor(XGUIEng.GetWidgetID("CinematicBar02"), 0, 0, 0, 0, 100)
  XGUIEng.ShowWidget(XGUIEng.GetWidgetID("CinematicBar00"), 0)
  XGUIEng.ShowWidget(XGUIEng.GetWidgetID("CinematicBar01"), 0)
  XGUIEng.ShowWidget(XGUIEng.GetWidgetID("CinematicBar02"), 0)
  Logic.SetGlobalInvulnerability(1)
  Interface_SetCinematicMode(1)
  Display.SetFarClipPlaneMinAndMax(0, 18000)	-- Standard: 14000
  Music.SetVolumeAdjustment(gvCutscene.Music * 0.6)
  Sound.PlayFeedbackSound(0,0)
  GUI.SetFeedbackSoundOutputState(0)
  --Sound.StartMusic(1,1)
  LocalMusic.SongLength = 0	-- !!!
  Camera.StopCameraFlight()
  Camera.ZoomSetDistance(_Cutscene.StartPosition.zoom)
  Camera.RotSetAngle(_Cutscene.StartPosition.rotation)
  Camera.ZoomSetAngle(_Cutscene.StartPosition.angle)
  Camera.ScrollSetLookAt(_Cutscene.StartPosition.position.X,_Cutscene.StartPosition.position.Y)  
  Counter.SetLimit("Cutscene", -1)
  StartSimpleJob("ControlCutscene")
end

function ControlCutscene()
  if not gvCutscene then return true end
    if Logic.GetTime() >= gvCutscene.EndTime then
      CutsceneDone()
      return true
    else
     if Counter.Tick("Cutscene") then
        local page = gvCutscene.Flights[gvCutscene.Page]
          if not page then CutsceneDone() return true end
             Camera.InitCameraFlight()
             Camera.ZoomSetDistanceFlight(page.zoom, page.duration)
             Camera.RotFlight(page.rotation, page.duration)
             Camera.ZoomSetAngleFlight(page.angle, page.duration)
             Camera.FlyToLookAt(page.position.X, page.position.Y, page.duration)
			 
            if page.title ~= nil then
               PrintBriefingHeadline("@color:255,250,200 " .. page.title)
            end
			
            if page.text ~= nil then
               PrintBriefingText(page.text)
            end
			
            if page.action ~= nil then
               page.action()
            end
			
			if (page.title ~= "") or (page.text ~= "") then
				XGUIEng.ShowWidget(XGUIEng.GetWidgetID("CinematicBar00"), 0)
				XGUIEng.ShowWidget(XGUIEng.GetWidgetID("CinematicBar01"), 0)
				XGUIEng.ShowWidget(XGUIEng.GetWidgetID("CinematicBar02"), 1)
				XGUIEng.SetWidgetPositionAndSize("CinematicBar02", 0, 2400, 3200, 160)
				XGUIEng.SetMaterialColor(XGUIEng.GetWidgetID("CinematicBar02"), 0, 0, 0, 0, 160)
			else--if (page.title == "") and (page.text == "") then
				XGUIEng.ShowWidget(XGUIEng.GetWidgetID("CinematicBar00"), 0)
				XGUIEng.ShowWidget(XGUIEng.GetWidgetID("CinematicBar01"), 0)
				XGUIEng.ShowWidget(XGUIEng.GetWidgetID("CinematicBar02"), 0)
			end
			
            Counter.SetLimit("Cutscene", page.duration + (page.delay or 0))
            gvCutscene.Page = gvCutscene.Page + 1
          end
        end
end

function CutsceneDone()
	if not gvCutscene then return true end
    Logic.SetGlobalInvulnerability(0)
    Interface_SetCinematicMode(0)
   XGUIEng.ShowWidget("Cinematic_Headline", 0)
   XGUIEng.SetMaterialColor(XGUIEng.GetWidgetID("CinematicBar02"), 0, 0, 0, 0, 160)	-- ?
   Display.SetFarClipPlaneMinAndMax(0, 0)
   Music.SetVolumeAdjustment(gvCutscene.Music)
    GUI.SetFeedbackSoundOutputState(1)
    if gvCutscene.Callback ~= nil then
        gvCutscene.Callback()
    end
    Counter.Cutscene = nil
    gvCutscene = nil
    cutsceneIsActive = false
end
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
        _Show=false --ein weiterer kann nicht angezeigt werden
		--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	
function ActivateBriefingsExpansion()
    if not unpack{true} then 
        local unpack2;
        unpack2 = function( _table, i )
                            i = i or 1;
                            assert(type(_table) == "table");
                            if i <= table.getn(_table) then
                                return _table[i], unpack2(_table, i);
                            end
                        end
        unpack = unpack2;
    end
    
    Briefing_ExtraOrig = Briefing_Extra;
    
    Briefing_Extra = function( _v1, _v2 )
						local i
                         for i = 1, 2 do
                             local theButton = "CinematicMC_Button" .. i;
                             XGUIEng.DisableButton(theButton, 1);
                             XGUIEng.DisableButton(theButton, 0);
                         end
                         
                         if _v1.action then
                             assert( type(_v1.action) == "function" );
                             if type(_v1.parameters) == "table" then 
                                 _v1.action(unpack(_v1.parameters));
                             else
                                 _v1.action(_v1.parameters);
                             end
                         end
                         
                         Briefing_ExtraOrig( _v1, _v2 );
                     end;
    
    GameCallback_EscapeOrig = GameCallback_Escape;
    StartBriefingOrig = StartBriefing;



____________________
Die Gier eines Menschen kann man mit der einer Pflanze vergleichen:
Hat sie einmal genug Wasser und Sonne wächst sie um noch mehr zu bekommen.

Dieser Beitrag wurde von RitterLeo am 03.03.2019 um 11:46 editiert.

Zedeg
#9
03.03.2019 12:31
Beiträge: 428

Der Fehler muss in der Map liegen, denn bei mir funktioniert die Abfrage. Vielleicht hast du die Entität falsch benannt?
Übrigens habe ich dein Skript etwas bearbeitet und die gröbsten Schnitzer bearbeitet, welche ich beim Überfliegen sah:

--------------------------------------------------------------------------------
-- MapName: Das schwarze Schaf
--
-- Author: RitterLeo
--
--------------------------------------------------------------------------------

-- Include main function
Script.Load(Folders.MapTools.."Main.lua")
IncludeGlobals("MapEditorTools")

--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- This function is called from main script to initialize the diplomacy states
function InitDiplomacy()
    SetHostile(6, 8)
end

--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- This function is called from main script to init all resources for player(s)
function InitResources()
    -- set some resources
    AddGold(1000)
    AddSulfur(2000)
    AddIron(3000)
    AddWood(4000)    
    AddStone(5000)    
    AddClay(6000)    
end

--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- This function is called to setup Technology states on mission start
function InitTechnologies()
end

--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- This function is called on game start and after save game is loaded, setup your weather gfx
-- sets here
function InitWeatherGfxSets()
    SetupNormalWeatherGfxSet()
end

--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- This function is called on game start you should setup your weather periods here
function InitWeather()
    AddPeriodicSummer(10)
end

--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- This function is called on game start and after save game to initialize player colors
function InitPlayerColorMapping()
    Display.SetPlayerColorMapping(8, NPC_COLOR) 
    Display.SetPlayerColorMapping(1, FRIENDLY_COLOR3)
end
    
--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- This function is called on game start after all initialization is done
function FirstMapAction()
    ActivateBriefingsExpansion()
    InitColors()  -- Ohne Aufruf werden diese Farben nie definiert.
    Intro()
    Logic.SetGlobalInvulnerability(0)
end

function Intro()  -- Das Intro Outro zu nennen ... naja ...
    local cutsceneTable = {
        StartPosition = {
            position = GetPosition("Dario"),
            angle = 60,
            zoom = 1000,
            rotation = 10
        },
        Flights = {
            {
                position = GetPosition("Dario"),
                angle = 10,
                zoom = 1200,
                rotation = 130,
                duration = 13,
                title = "Dario",            
                text = "Aber Vater versteh mich doch, ich will hinaus in die weite Welt und alles erkunden.",
            },
            {
                position = GetPosition("Dario"),
                angle = 20,
                zoom = 1200,
                rotation = 180,
                duration = 13,
                title = "Vater Dariel",            
                text = "Bitte glaub mir doch Sohn, da draußen erwartet dich das Böse, hier bist du sicher.",
            },
            {
                position = GetPosition("Sheep_Black"),
                angle = 20,
                zoom = 1200,
                rotation = 350,
                duration = 14,
                action = function()
                    CreateMilitaryGroup(6, Entities.CU_BlackKnight_LeaderMace1, 0, GetPosition("Attack_Intro"), "Attack_Sheep")
                    Attack("Attack_Sheep", "Sheep_Black")
                    SetHealth("Black_Sheep", 200)
                end,
                title = "Vater Dariel",            
                text = "Hm? Nanu,was ist denn da los? Was macht der da mit unserem Schaf!",
            },
        },
        Callback = function()
            Briefing_Anfang()
            SetHealth("Attack_Sheep", 0)
        end
    }
    StartCutscene(cutsceneTable)
end

function Briefing_Anfang()
    local briefing = {}
    local AP, ASP = AddPages(briefing);
    ASP("Vater", "Vater Dariel", "Hmm, nun gut ich glaube dise Umstände werden Beweisen ob du bereit bist, dieses Land zu verlassen.", true)
    ASP("Dario", "Dario", "Von was redest du Vater?.", true)
    ASP("Vater", "Vater Dariel", "Du sollst den Täter aufsuchen und ihn zur Strecke bringen. @cr Gelingt dir das so lass ich dich von dannen ziehen.", true)
    ASP("Dario", "Dario", "Das werde ich und dann werde ich die weite Welt aufsuchen.", true)
    ASP("Dario", "Dario", "Aber bevor ich dies tue. @cr Lass mich noch ein letztes mal meinen alten Olivenbaum besuchen.", true)
    ASP("Vater", "Vater Dariel", "Klar, besuch vorher aber noch deine Mutter, sie will sich bestimmt auch noch verabschieden.", true)
    StartBriefing(briefing)
    briefing.finished = function()
        CreateNpcMutter()
        Move("Vater", "Handel")
    end
end

function CreateNpcMutter()
    local npc = {
        name = "Mutter", 
        heroName = "Dario",
        marker = true, 
        wrongHeroMessage = "Dario mein Sohn",    
        callback = function()
            Briefing_Mutter()
            -- RemoveNpcFromTable("Mutter") -- RemoveNpcFromTable war nirgendswo definiert.
        end
    }
    CreateNPC(npc)    
end

function Briefing_Mutter()
    local briefing = {}
    local AP, ASP = AddPages(briefing);
    ASP("Mutter", "Mutter Daran", "Ich denke ich muss dann los, ich will meine Familie ja auch nicht zu lange warten lassen.", true)
    ASP("Bauer", "Bauer Heinrich", "Ja ist gut, ich hoffe es hat nur nicht zu lange gedauert.", true)
    ASP("Dario", "Dario", "Mutter, ich habe Neuigkeiten für dich. @cr Ich werde schon bald das Land verlassen.", true)
    ASP("Dario", "Dario", "Vater sagte mir das ich gehen darf sobald ich den Mörder des schwarzen Schafes gefasst habe.", true)
    ASP("Mutter", "Mutter Daran", "Ach mein lieber Dario, ich hätte es mir denken können. @cr Ich werde dich nicht Aufhalten, such nur dein Glück.", true)
    ASP("Mutter", "Mutter Daran", "Aber wenn du schon gehst schreib uns irgendwann mal und komm uns besuchen.", true)
    ASP("Dario", "Dario", "Das werde ich Mutter, machs gut.", true)
    StartBriefing(briefing)
    briefing.finished = function()
        StartSimpleJob("Oliven")
    end
end

function Oliven()
    if IsNear("Dario", "Oliven", 500) then
        CreateMilitaryGroup(8, Entities.CU_Evil_LeaderBearman1, 0, GetPosition("Geist"), "Ghost")
        Briefing_Geist()
        return true  -- Wichtig! Ansonsten würde der Job unendlich lange gehen!
    end
end

function Briefing_Geist()
    local briefing = {}
    local AP, ASP = AddPages(briefing);
    ASP("Ghost", "???", "Du willst also den Übeltäter aufspüren? Typisch Menschen.", true)
    ASP("Ghost", "???", "So einen Eisenmann kannst du nicht besiegen!.", true)
    ASP("Dario", "Dario", "W-W-WER BIST DU?. @cr Was willst du denn von mir?.", true)
    ASP("Ghost", "Mallon", "Ich bin Mallon, und du bist der der absofort meinen Job übernimmt.", true)
    ASP("Dario", "Dario", "Was denn für einen Job? @cr Ich weiss nicht was du meinst.", true)
    ASP("Ghost", "Mallon", "Du wirst das Wesen Jagen das die schwarzen Schafe tötet, und auch gleichzeitig das Schaf beschützen.", true)
    ASP("Dario", "Dario", "Aber was ist denn so besonders an den schwarzen Schafen? Diese Viecher sind doch nicht wichtig.", true)
    ASP("Ghost", "Mallon", "NICHT WICHTIG? Schwarze Schafe sind ein Werk des Teufels und ungemein wichtig!", true)
    ASP("Ghost", "Mallon", "Sollte es weniger schwarze Schafe als Böses in der Welt geben so kommt der Teufel herbei.", true)
    ASP("Ghost", "Mallon", "Ich sags dir, jedes Schwarze Schaf weniger bedeutet 1 Schritt näher zum Teufel.", true)
    ASP("Ghost", "Mallon", "Ich beschütze das heilige Schaf und du erledigst den Jäger, verstanden?.", true)
    ASP("Dario", "Dario", "Ähm, Okay, aber warum Jagst du ihn nicht selber?", true)
    ASP("Ghost", "Mallon", "Das erzähl ich dir später, und jetzt los, Beweg dich!", true)
    StartBriefing(briefing)
    briefing.finished = function()
    end
end

function CreateNpcVaterhandel()  -- wird nirgendswo aufgerufen
    local npc = {
        name = "Vater", 
        heroName = "Dario",
        marker = true, 
        wrongHeroMessage = "Dario mein Sohn",    
        callback = function()
            Briefing_Vaterhandel()
            -- RemoveNpcFromTable("Vater")
        end
    }
    CreateNPC(npc)    
end

function Briefing_Vaterhandel()
    local briefing = {}
    local AP, ASP = AddPages(briefing)
    ASP("Vater", "Vater Dariel", "Ah Dario, ich verhandle nur gerade mit dem Händler um den Zaun zu reparieren.", true)
    local choicePage1 = AP{
        mc = {
            title = "Dario",
            text = "Ah ich verstehe... (Helfen oder nicht)",
            firstText = ",ich werde dir helfen.",
            secondText = ", na dann viel glück.",
            firstSelected  = 3, --landingPage1,
            secondSelected = 12, --landingPage2,
        },
    }
    
    local landingPage1 = ASP("Vater", "Vater Dariel", "Ah das ist sehr nett mein Sohn." ..
        " Der Mann ist zwar alt aber hat echtes Verhandlungsgeschick.", true)
    ASP("Handel", "Händler Marius", "Ich sagte dir unter 150 Talern wird mein Sohn nix machen, da kann dir auch dein Sohn nicht helfen", false)
    ASP("Vater", "Vater Dariel", "Guter Mann, repariert uns doch den Zaun, im Gegenzug wäre mein Vater sicherlich bereit euch ein Abendmahl zuzubereiten.", true)
    local choicePage2 = AP{
        mc = {
            title = "Dario",
            text = "Tut mir leid aber ich habe eine Aufgabe zu erfüllen.",
            firstText = "Gegen ein Abendmahl für uns beide wäre nichts einzuwenden, er wird sich sofort an die Arbeit machen.",
            secondText = "Aber vielleicht kriegst du ihn doch irgendwie noch rum.",
            firstSelected = 7, --landingPage3,
            secondSelected = 10, --landingPage4,
        },
    }
    local landingPage3 = ASP("Vater", "Vater Dariel", "Ach, hab vielen dank mein Sohn, du bist wahrlich ein Glückskind." ..
        " Weist du, ich hatte doch 150 Taler, hier nimm ruhig die anderen 25.", true)
    ASP("p2bast", bl.."Mission", "Du hast 25 Taler erhalten, setze sie klug ein.", false)  -- Textfarbe war nirgendswo definiert.
    AP()    
    local landingPage4 = ASP("Vater", "Vater Dariel", "Machs gut, ich hoffe die 25 Taler werden dir etwas bringen." ..
        " Ah jetzt muss ich mich nur noch ans Abendessen setzen." ..
        " @cr Ich versteh schon, verfolg nur weiter deinen Traum ...", true)
    AP()
    local landingPage2 = ASP("leaderP2", "Anführer", "So lob ich mir das.", true)
    briefing.finished = function()
    end
    StartBriefing(briefing)
end



____________________
Journalisten erkundigen sich bei Wissenschaftlern meist nicht nach Grundlagen, sondern eher nach Ergebnissen und Folgerungen. Das erklärt womöglich auch, warum sich Forschungsberichte in den Medien so häufig als feststehende Erkenntnisse lesen, nicht aber als Ideen, Entdeckungen oder Indizien, um die es sich genau genommen in den meisten Fällen handelt. -Axel Bojowski

Zedeg
#10
03.03.2019 12:32
Beiträge: 428

function AddPages(_briefing)
    local AP = function(_page) table.insert(_briefing, _page); return _page; end
    local ASP = function(_entity, _title, _text, _dialog, _explore) return AP(CreateShortPage(_entity, _title, _text, _dialog, _explore)); end
    return AP, ASP;
end

function CreateShortPage( _entity, _title, _text, _dialog, _explore) 
    local page = {
        title = _title,
        text = _text,
        position = GetPosition( _entity ),
        action = function ()Display.SetRenderFogOfWar(0) end
    };
    if _dialog then 
            if type(_dialog) == "boolean" then
                  page.dialogCamera = true; 
            elseif type(_dialog) == "number" then
                  page.explore = _dialog;
            end
      end
    if _explore then 
            if type(_explore) == "boolean" then
                  page.dialogCamera = true; 
            elseif type(_explore) == "number" then
                  page.explore = _explore;
            end
      end      
    return page;
end

function InitColors() 
    orange = " @color:255,127,0 "
    rt = " @color:255,50,50 "
    gb = " @color:255,215,0 "
    bl = " @color:50,150,200 "
    hgb = " @color:238,221,130 "
    ws = " @color:255,255,255 "
    gn = " @color:173,255,47 "
    mint = " @color:0,255,255 "
    lila = " @color:186,85,211 "
    trans = " @color:0,0,0,0 " --transparent
    grau = " @color:155,155,155 "
    ColorR, ColorG, ColorB = GUI.GetPlayerColor(4)
    cyan  = " @color:"..ColorR..","..ColorG..","..ColorB.." "
end

function StartCutscene(_Cutscene)
    local length = 0
    local i
    for i = 1, table.getn(_Cutscene.Flights) do
        length = length + _Cutscene.Flights[i].duration + (_Cutscene.Flights[i].delay or 0)
    end
    gvCutscene = {
        Page      = 1,
        Flights   = _Cutscene.Flights,
        EndTime   = Logic.GetTime() + length,
        Callback  = _Cutscene.Callback,
        Music     = Music.GetVolumeAdjustment(),
    }
    cutsceneIsActive = true
    --XGUIEng.SetMaterialColor(XGUIEng.GetWidgetID("CinematicBar02"), 0, 0, 0, 0, 100)
    XGUIEng.ShowWidget(XGUIEng.GetWidgetID("CinematicBar00"), 0)
    XGUIEng.ShowWidget(XGUIEng.GetWidgetID("CinematicBar01"), 0)
    XGUIEng.ShowWidget(XGUIEng.GetWidgetID("CinematicBar02"), 0)
    Logic.SetGlobalInvulnerability(1)
    Interface_SetCinematicMode(1)
    Display.SetFarClipPlaneMinAndMax(0, 18000)    -- Standard: 14000
    Music.SetVolumeAdjustment(gvCutscene.Music * 0.6)
    Sound.PlayFeedbackSound(0,0)
    GUI.SetFeedbackSoundOutputState(0)
    --Sound.StartMusic(1,1)
    LocalMusic.SongLength = 0    -- !!!
    Camera.StopCameraFlight()
    Camera.ZoomSetDistance(_Cutscene.StartPosition.zoom)
    Camera.RotSetAngle(_Cutscene.StartPosition.rotation)
    Camera.ZoomSetAngle(_Cutscene.StartPosition.angle)
    Camera.ScrollSetLookAt(_Cutscene.StartPosition.position.X,_Cutscene.StartPosition.position.Y)  
    Counter.SetLimit("Cutscene", -1)
    StartSimpleJob("ControlCutscene")
end

function ControlCutscene()
    if not gvCutscene then return true end
    if Logic.GetTime() >= gvCutscene.EndTime then
        CutsceneDone()
        return true
    else
        if Counter.Tick("Cutscene") then
            local page = gvCutscene.Flights[gvCutscene.Page]
            if not page then
                CutsceneDone()
                return true
            end
            Camera.InitCameraFlight()
            Camera.ZoomSetDistanceFlight(page.zoom, page.duration)
            Camera.RotFlight(page.rotation, page.duration)
            Camera.ZoomSetAngleFlight(page.angle, page.duration)
            Camera.FlyToLookAt(page.position.X, page.position.Y, page.duration)

            if page.title ~= nil then
                PrintBriefingHeadline("@color:255,250,200 " .. page.title)
            end

            if page.text ~= nil then
                PrintBriefingText(page.text)
            end

            if page.action ~= nil then
                page.action()
            end

            if (page.title ~= "") or (page.text ~= "") then
                XGUIEng.ShowWidget(XGUIEng.GetWidgetID("CinematicBar00"), 0)
                XGUIEng.ShowWidget(XGUIEng.GetWidgetID("CinematicBar01"), 0)
                XGUIEng.ShowWidget(XGUIEng.GetWidgetID("CinematicBar02"), 1)
                XGUIEng.SetWidgetPositionAndSize("CinematicBar02", 0, 2400, 3200, 160)
                XGUIEng.SetMaterialColor(XGUIEng.GetWidgetID("CinematicBar02"), 0, 0, 0, 0, 160)
            else--if (page.title == "") and (page.text == "") then
                XGUIEng.ShowWidget(XGUIEng.GetWidgetID("CinematicBar00"), 0)
                XGUIEng.ShowWidget(XGUIEng.GetWidgetID("CinematicBar01"), 0)
                XGUIEng.ShowWidget(XGUIEng.GetWidgetID("CinematicBar02"), 0)
            end

            Counter.SetLimit("Cutscene", page.duration + (page.delay or 0))
            gvCutscene.Page = gvCutscene.Page + 1
        end
    end
end

function CutsceneDone()
    if not gvCutscene then
        return true
    end
    Logic.SetGlobalInvulnerability(0)
    Interface_SetCinematicMode(0)
    XGUIEng.ShowWidget("Cinematic_Headline", 0)
    XGUIEng.SetMaterialColor(XGUIEng.GetWidgetID("CinematicBar02"), 0, 0, 0, 0, 160)    -- ?
    Display.SetFarClipPlaneMinAndMax(0, 0)
    Music.SetVolumeAdjustment(gvCutscene.Music)
    GUI.SetFeedbackSoundOutputState(1)
    if gvCutscene.Callback ~= nil then
        gvCutscene.Callback()
    end
    Counter.Cutscene = nil
    gvCutscene = nil
    cutsceneIsActive = false
end

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
        _Show=false --ein weiterer kann nicht angezeigt werden
        --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

function ActivateBriefingsExpansion()
    if not unpack{true} then 
        local unpack2;
        unpack2 = function(_table, i)
            i = i or 1;
            assert(type(_table) == "table");
            if i <= table.getn(_table) then
                return _table[i], unpack2(_table, i);
            end
        end
        unpack = unpack2;
    end
    
    Briefing_ExtraOrig = Briefing_Extra;
    
    Briefing_Extra = function( _v1, _v2 )
        local i
        for i = 1, 2 do
            local theButton = "CinematicMC_Button" .. i;
            XGUIEng.DisableButton(theButton, 1);
            XGUIEng.DisableButton(theButton, 0);
        end

        if _v1.action then
            assert( type(_v1.action) == "function");
            if type(_v1.parameters) == "table" then 
                _v1.action(unpack(_v1.parameters));
            else
                _v1.action(_v1.parameters);
            end
        end

        Briefing_ExtraOrig(_v1, _v2);
    end;
    
    GameCallback_EscapeOrig = GameCallback_Escape;
    StartBriefingOrig = StartBriefing;
end



____________________
Journalisten erkundigen sich bei Wissenschaftlern meist nicht nach Grundlagen, sondern eher nach Ergebnissen und Folgerungen. Das erklärt womöglich auch, warum sich Forschungsberichte in den Medien so häufig als feststehende Erkenntnisse lesen, nicht aber als Ideen, Entdeckungen oder Indizien, um die es sich genau genommen in den meisten Fällen handelt. -Axel Bojowski

RitterLeo
#11
03.03.2019 17:04
Beiträge: 237

So jetzt klappt alles.
Vielen dank für eure Hilfe.

____________________
Die Gier eines Menschen kann man mit der einer Pflanze vergleichen:
Hat sie einmal genug Wasser und Sonne wächst sie um noch mehr zu bekommen.

Seiten: 1

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

Impressum