Helias Beten lassen
» Siedler Map Source Forum » Siedler DEdK Script Forum » Helias Beten lassen
Seiten: 1
RitterLeo
|
#1 01.06.2019 15:24 Beiträge: 237 |
Helias Beten lassen
Hallo Siedlerfreunde,
ich würde gerne Wissen ob es eine Variante gibt Helias dauernd Beten zu lassen wie bei seiner einen Fähigkeit zu Überzeugen.
Gibt es da irgendeine Möglichkeit?
Ansonsten wie immer vielen dank im Vorraus.
____________________
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
|
#2 01.06.2019 16:13 Beiträge: 428 |
Ungetestet, müsste aber funktionieren. Ich würde dir ja gerne den Link zur Komfort-Funktion mcbAnim geben, aber iwie finde ich da nichts.
local id = GetID("Helias") Logic.SetTaskList(id, TaskLists.TL_MILITARY_IDLE) S5Hook.GetEntityMem(id)[31][0][4]:SetInt(521)
____________________
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
|
#3 01.06.2019 16:17 Beiträge: 237 |
Wiederholt dieser das dann dauernd oder nur einmal?
Mich würde ja jedenfalls noch interessieren ob das nach dem Speichern und Laden noch anhält aber das teste ich später.
____________________
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
|
#4 01.06.2019 16:21 Beiträge: 428 |
Dauernd bis er andere Befehle bekommt (move, attack etc.). Soweit ich weiß, können wir per Skript keine Animation einmalig ausführen lassen. Möglicherweise könntest du aber eine versteckte Konvertierung befehlen, um diesen Effekt zu erzeugen.
____________________
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
mcb
|
#5 01.06.2019 17:02 Beiträge: 1472 |
mcbAnim findest du hier: https://github.com/mcb5637/s5C...ter/comfort/entity/mcbAnim.lua, das animTable hier: https://github.com/mcb5637/s5CommunityLib/blob/master/tables/animTable.lua
Denk dran, du brauchst den Hook und die entsprechenden requirements für mcbAnim.
Zedegs code (und mcbAnim) überlebt Speichern/Laden.
Zedegs code wiederholt die animation dauerhaft bis das entity einen anderen Befehl bekommt.
mcbAnim wiederholt die animation solange bis du sie aus einem der Animationspunkte beendest und sorgt auch dafür das das entity währenddessen keine Befehle ausführen kann (indem jeden tick die tasklist und die animation neu gesetzt werden).
RitterLeo
|
#6 01.06.2019 17:58 Beiträge: 237 |
Na ist gut er soll ja solange Beten bis er Angreift oder ähnliches.
Von der Liste habe ich schonmal gehört und kann sie mir jetzt selber anschauen .
Mal sehen was sich daraus machen lässt.
Vielen dank erstmal.
Ist der Hook irgendetwas zum extra Herunterladen? Ich benutze nur den Standard Editor und Notepad.
____________________
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 01.06.2019 um 18:05 editiert.
mcb
|
#7 01.06.2019 18:12 Beiträge: 1472 |
Der hook schleust assembler code ein und stellt einige extrem hilfreiche lua Funktionen zur Verfügung. Finden kannst du ihn hier: https://bitbucket.org/settlersdev/s5hook/src/default/
RitterLeo
|
#8 01.06.2019 18:38 Beiträge: 237 |
Mach ich irgendetwas falsch?
--------------------------------------------------------------------------------- -- MapName: Auf den Spuren der TW -- -- 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() SetPlayerName(2,"Grenzposten") SetPlayerName(5,"Anstalt der Gestraften") 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() end --++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -- This function is called on game start after all initialization is done function FirstMapAction() MapEditor_SetupAI(2, 1, 1000, 1, "Posten", 1, 0) MapEditor_SetupAI(3, 0, 0, 0, "", 0, 0) MapEditor_SetupAI(4, 0, 0, 0, "", 0, 0) MapEditor_SetupAI(5, 0, 0, 0, "", 0, 0) MapEditor_SetupAI(6, 0, 0, 0, "", 0, 0) MapEditor_SetupAI(7, 0, 0, 0, "", 0, 0) SetNeutral(1,2) Objects() StartSimpleJob("Animations") end function Objects() local pos = GetPosition("place_barrack1") Tools.CreateGroup(2, Entities.PB_Barracks1, 0, pos.X, pos.Y, 90.00); end function Animations() local id = GetID("Helias") Logic.SetTaskList(id, TaskLists.TL_MILITARY_IDLE) S5Hook.GetEntityMem(id)[31][0][4]:SetInt(521) end function getRandomAnim(etyp, name) local t = animTable[etyp] local ra = {} if t[name] then table.insert(ra, t[name]) end local i=1 while t[name..i] do table.insert(ra, t[name.i]) i = i + 1 end return GetRandom(ra) end function mcbAnim(id, anim, speed, back, funcs, dead, escape, ...) assert(IsValid(id)) local id = GetID(id) local sv = S5Hook.GetEntityMem(id) assert(type(anim)=="number") assert(type(speed)=="number") Logic.SetTaskList(id, TaskLists.TL_MILITARY_IDLE) local t = {id=id,anim=anim,speed=speed,back=back,funcs=funcs,t=-1,arg=arg,dead=dead,escape=escape} StartSimpleHiResJob(function(t) t.t = t.t + 1 if IsDead(t.id) then t.dead(t.id, unpack(t.arg)) return true end if t.escape then local r, r2 = t.escape(t.id, t.t, unpack(t.arg)) if r then if not r2 then Logic.SetTaskList(t.id, TaskLists.TL_MILITARY_IDLE) Logic.GroupDefend(t.id) end return true end end if t.funcs[t.t] then if t.funcs[t.t](t.id, t.t, unpack(t.arg)) then Logic.SetTaskList(t.id, TaskLists.TL_MILITARY_IDLE) Logic.GroupDefend(t.id) return true end end Logic.SetTaskList(t.id, TaskLists.TL_MILITARY_IDLE) if t.t==0 then return end if not t.sTur then t.sTur = Logic.GetCurrentTurn() end local w = {} w = MemoryManipulation.ConvertToObjInfo("BehaviorList.GGL_CGLBehaviorAnimationEx.Animation", t.anim, w) w = MemoryManipulation.ConvertToObjInfo("BehaviorList.GGL_CGLBehaviorAnimationEx.StartTurn", t.sTur, w) w = MemoryManipulation.ConvertToObjInfo("BehaviorList.GGL_CGLBehaviorAnimationEx.PlayBackwards", t.back and 1 or 0, w) w = MemoryManipulation.ConvertToObjInfo("BehaviorList.GGL_CGLBehaviorAnimationEx.Speed", t.speed, w) assert(MemoryManipulation.WriteObj(S5Hook.GetEntityMem(id), w)) end, t) return t end if mcbPacker then --mcbPacker.ignore mcbPacker.require("s5CommunityLib/comfort/other/s5HookLoader") mcbPacker.require("s5CommunityLib/lib/MemoryManipulation") mcbPacker.require("s5CommunityLib/tables/animTable") end --mcbPacker.ignore
Der Helias will nicht die Bewegungen ausführen.
Könnt ihr mir damit da vielleicht nochmal helfen?
____________________
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
|
#9 01.06.2019 20:25 Beiträge: 428 |
Natürlich funktioniert da nichts. Du hast weder den S5Hook noch die MemoryManipulation irgendwo eingebunden. Lager so etwas am besten in externe Skripte aus.
____________________
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
|
#10 02.06.2019 17:03 Beiträge: 237 |
Entschuldige, aber ich verstehe nicht ganz was du meinst.
Das mit dem S5Hook lade ich ja wie gewohnt so:
Script.Load("maps\\user\\Scripts\\S5Hook.lua");
Doch was du mit MemoryManipulation meinst, davon habe ich gerade keine Ahnung.
Das Script habe ich jetzt übrigens ausgelagert wie du gesagt hast.
____________________
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
|
#11 02.06.2019 18:42 Beiträge: 428 |
Zitat von RitterLeo:
Entschuldige, aber ich verstehe nicht ganz was du meinst.
Das mit dem S5Hook lade ich ja wie gewohnt so:
Script.Load("maps\\user\\Scripts\\S5Hook.lua");
Wo steht denn das? Ich sehe das nirgends.
Zitat von RitterLeo:
Doch was du mit MemoryManipulation meinst, davon habe ich gerade keine Ahnung.
Das steht in den Kommentaren zu mcbAnim. Du musst schon lesen, was wir dir verlinken. Generell sollte man sich die Skripte, die man verwendet, zumindest mal angucken.
Die benötigten Skripte findest du auf der selben Seite wie mcbAnim und animTable.
____________________
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
|
#12 03.06.2019 18:33 Beiträge: 237 |
Ich verstehe was du meinst doch ist mir einfach 0 klar ohne ein Beispiel wie dies zu aktivieren ist.
Kann man das nicht evtl. umgehen und wie einen Leibeigenen mit
Logic.SetTaskList(GetID("slave12"),TaskLists.TL_SERF_EXTRACT_RESOURCE) (ganze Funktion nicht eingefügt)
Stein hacken lassen auch Helias so zum Beten zwingen?
Nur mal so nebenbei, gibt es eine Liste für weiter Funktionen außer EXTRACT_RESOURCE/WOOD/BUILD usw.?
____________________
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
|
#13 04.06.2019 19:22 Beiträge: 428 |
Zitat von RitterLeo:
Ich verstehe was du meinst doch ist mir einfach 0 klar ohne ein Beispiel wie dies zu aktivieren ist.
Du lädst dir bspw. das Skript für S5Hook herunter und änderst den Start deines Mapskriptes in etwa so ab:
Script.Load(Folders.MapTools.."Main.lua") IncludeGlobals("MapEditorTools") Script.Load("Lfw:\\Pfadangabe\\S5Hook.lua")
Ich empfehle dir, noch den S5HookLoader ebenfalls herunterzuladen (und am besten in eine eigene Datei zu packen, die du dann nach gleichem Schema lädst). Dann muss in die FMA noch
s5HookLoader.init()
und der S5Hook sollte dir keine Probleme mehr bereiten. Aber Achtunge: Wie du in den Kommentaren zum S5HookLoader siehst, werden noch der Trigger-Fix, der Metatable-Savegame-Fix und Umlaute benötigt. Diese Skripte solltest du auch in der S5CommunityLib finden. Die kannst du dann nach obigen Schema ebenfalls leicht laden. Schau aber nach, ob die auch Skript-Voraussetzungen haben!
mcbAnim empfehle ich dir nicht, wenn du nur einen betenden Helias brauchst, der dazu noch die Animation bei einem Angriff abbrechen soll. Erstens ist mcbAnim für diesen einen Fall unbrauchbar und zweitens sind die benötigten Skriptvoraussetzungen ... nun ja ... overkill (mehrere tausend Zeilen zusätzliches Skript).
Wenn du deine Karte veröffentlichen willst, benötigst du übrigens das bba-Tool, um deine externen Skripte in die Map zu packen. Aber da fragst du besser nochmal nach, wenn's soweit ist.
Zitat von RitterLeo:
Kann man das nicht evtl. umgehen und wie einen Leibeigenen mit
Logic.SetTaskList(GetID("slave12"),TaskLists.TL_SERF_EXTRACT_RESOURCE) (ganze Funktion nicht eingefügt)
Stein hacken lassen auch Helias so zum Beten zwingen?
Nein. Das funktioniert so gut wie nie.
Zitat von RitterLeo:
Nur mal so nebenbei, gibt es eine Liste für weiter Funktionen außer EXTRACT_RESOURCE/WOOD/BUILD usw.?
1. Das sind keine Funktionen, das sind Einträge im Table TaskLists und halten simple Zahlenwerte. Dieser Code hier ist äquivalent zu deinem:
Logic.SetTaskList(GetID("slave12"), 6)
Die Schreibweise in Großbuchstaben ist Konvention für die Bennenung von Konstanten (Variablen, die nicht mehr ihren Wert ändern).
2. Ja! Ich habe dafür früher ja das wirklich allumfassende _G-Table verwendet, aber das finde iwie nicht mehr im Wiki.
____________________
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
Seiten: 1