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.
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