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

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

Impressum