[Deutsch] Behaviours, Actions und States erklärt

  • Neben normalen Maßnahmen, die einfach via Button gestartet werden und nach Beendigung des Measure-Scripts fertig sind, gibt es noch Maßnahmen-ähnliche Scripte.


    Im Ordner Scripts/Measures/Behaviour finden wir 3 unterschiedliche Arten von Scripten.


    Generell sind Behaviour-Scripte (im Scriptnamen übrigens verwirrenderweise behavior_ geschrieben) wie der Name schon sagt, Verhaltensscripte. D.h. sie regeln, wie ein Sim auf bestimmte Situationen reagiert.


    std_Idle : Die "standard"-Scripts bestimmen, was ein Sim unternimmt, wenn er gerade nichts Besseres zu tun hat. Ich nenne die std_Idle daher auch gern das "Freizeitverhalten".


    Diese Scripte kommen ausschließlich für von der KI gesteuerte Sims zum Einsatz. Das ist sehr wichtig! Wenn ihr einem Spieler-Charakter via Script ausversehen ein behavior gebt (via SimSetBehavior) wird der Sim, sobald er keine Aktion für euch durchführen soll, plötzlich von selbst tätig, läuft rum, geht einen Trinken, je nachdem. Das heißt er entzieht sich fortan der Kontrolle der Spieler - die meisten dürften das befremdlich finden, daher immer schön vorher abfragen, ob ein Sim einer PlayerDynastie angehört, oder nicht, bevor ihr behaviors setzt. Zur Erinnerung, Auch Familienmitglieder, die gerade nicht vom Spieler gesteuert werden, zählen als KI-Dynastie für diese Belange.


    Manche Sims sollen nicht durch die Stadt rumlaufen, sondern haben ein ganz eigenes Verhalten, das ist bei allen Town-NPCs so (z.B. der Stadtschreier, dessen behavior heißt std_Towncrier.lua). Das Behavior wird dann immer gesetzt, wenn dieser Sim erzeugt wird. Solltet ihr also beschließen, dass ihr für eure Mods neue NPCs braucht, dann müsst ihr auch ein neues standard-Verhalten schreiben.


    Das Setzen des Behaviors "" wird übrigens dafür sorgen, dass der Sim keinem Verhalten nachgeht, was z.B. praktisch ist, wenn ihr nicht wollt, dass jemand aus der Amtssitzung läuft ...
    Ihr müsst dann aber zum Schluss wieder ein idle-Behavior setzen, sonst wird sich dieser Sim nicht mehr bewegen (weil er nicht weiß, was er machen soll).


    bs_blackboard.lua: Die "observer"-Scripts kommen bei Actions ins Spiel - sie werden in der DB/Actions.dbt verlinkt und bestimmen, welche Sims unter welchen Umständen auf eine via CommitAction gestartete Action reagieren.


    Z.B. besagt



    Code
    if SimGetProfession("")==GL_PROFESSION_MYRMIDON then
    	return ""
    end



    dass die Action ignoriert wird, wenn man der Schergen-Profession angehört. Denkbar sind auch Altersgrenzen o.Ä. Man kann hier jede beliebige Bedingung ausklammern. Sims, die es durch all diese Filter schaffen, erhalten dann ein spezielles Measure-Verhalten. Solange die Action läuft (bis ein StopAction(...) erfolgt ist), werden alle Observer immer wieder auf die Action reagieren.


    Code
    return "CheerBlackBoard"


    behavior_CheerBlackBoard.lua: Hier findet sich das Script für das im Observer-Script verlinkte Verhaltensscript (Die Namen aller Maßnahmen und Behaviors werden übrigens in Measures.dbt gesetzt, also danach richtet sich der Alias, der bei return gesetzt werden muss). Im Grunde funktioniert dieses Script wie eine ganz normale Measure, mit dem Zusatz, dass es den festen Alias eines "Actors" gibt. Der "Actor" ist immer derjenige, der die Action gestartet hat.



    States sind hingegen Scripte, die GLEICHZEITIG zu normalen Measures und Behaviors laufen. Es gibt 64 States (mehr kann man nicht mehr einfügen, bzw. diese werden dann nicht richtig benutzt, also müsst ihr ggf. vorhandene States editieren). Ihr findet sie unter Scripts/States und in der States.dbt


    In States werden StateImpacts gesetzt wie


    Code
    SetStateImpact("no_hire")
    	SetStateImpact("no_fire")	
    	SetStateImpact("no_control")
    	SetStateImpact("no_measure_start")	
    	SetStateImpact("no_measure_attach")	
    	SetStateImpact("no_charge")
    	SetStateImpact("no_arrestable")
    	SetStateImpact("no_action")
    	SetStateImpact("no_attackable")
    	SetStateImpact("no_cancel_button")


    Die sind eigentlich alle recht selbsterklärend. Manchmal wollt ihr Sims blocken für Einflüsse anderer Actions/Measures, dann kommen State-Impacts ins Spiel. Die Impacts gelten nur solange der State true ist, also läuft. Klickt euch einfach durch ein paar der States, dann bekommt ihr ein Gefühl dafür, wann ein State nützlich ist und wann ihr eher etwas anderes benötigt.


    Falls noch Fragen sind, immer her damit.