PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : python wer?



airulf
04-06-10, 16:17
Hi,
bräuchte da mal Hilfe von den py-Experten in diesem Forum:
Es ist zwar möglich, die Character-Dialoge
per scripting aufzufufen, aber wie, verschließt sich mir leider zu hundert Prozent.
Mein Ansatz ist:

---from PageCharacterDialog import PageCharacterDialog---
---PageCharacterDialog["OnActivateInteraction"] (+-)= PageCharacterDialog_OnActivateInteractionCaller---

Weiss jemand von Euch, wie der code für den Aufruf des Dialogs mit dem
entsprechenden Crew-Fraggle (OnActivateInteractionCaller) aussehen sollte?

Vielen Dank schon mal,

Gruß
airulf

airulf
04-06-10, 16:17
Hi,
bräuchte da mal Hilfe von den py-Experten in diesem Forum:
Es ist zwar möglich, die Character-Dialoge
per scripting aufzufufen, aber wie, verschließt sich mir leider zu hundert Prozent.
Mein Ansatz ist:

---from PageCharacterDialog import PageCharacterDialog---
---PageCharacterDialog["OnActivateInteraction"] (+-)= PageCharacterDialog_OnActivateInteractionCaller---

Weiss jemand von Euch, wie der code für den Aufruf des Dialogs mit dem
entsprechenden Crew-Fraggle (OnActivateInteractionCaller) aussehen sollte?

Vielen Dank schon mal,

Gruß
airulf

Ruby2000
05-06-10, 02:38
Grundsätzliches

• Bearbeitende Dateien müsse vor dem Test geschlossen werden
• Unbedingst auch Groß- und Kleinschreibung bei Namensvergabe achten
• Für jedes einzelne U-Boot existiert eine crew_commands.txt
o Daher müssen die Dialoge pro Boot registriert werden
o Derzeit ist bei allen Booten die Datei crew_commands.txt identisch


Crew Kommandos registrieren (pro U-Boot)

Hier U-Boot NSS_Uboat7a
C:\Ubisoft\Silent Hunter 5\data\Submarine\NSS_Uboat7a\crew_commands.txt

In dieser Datei müssen die Befehle eingebunden werden. Wurde der Befehl nicht eingebunden, wird der Befehl zwar in der Dialogbox angezeigt, aber er wird nicht ausgeführt.

(Bsp von Athlonic)

// Added by MCCD :
Propulsion_standard 1 1 1 ( CR_CHIEF = Propulsion_standard )
Propulsion_recharge 1 1 1 ( CR_CHIEF = Propulsion_recharge )

Get_depth_under_sub_keel 1 1 1 ( CR_NAV = Get_depth_under_sub_keel )
Report_weather 1 1 1 ( CR_NAV = Report_weather )
Report_time_to_turn 1 1 1 ( CR_NAV = Report_time_to_turn )

Send_contact_report 1 1 1 ( RR_RADIO_A = Send_contact_report )
Send_patrol_report 1 1 1 ( RR_RADIO_A = Send_patrol_report )
Gramophone_play 1 1 1 ( RR_RADIO_A = Gramophone_play )
Gramophone_next 1 1 1 ( RR_RADIO_A = Gramophone_next )
Gramophone_prev 1 1 1 ( RR_RADIO_A = Gramophone_prev )
Gramophone_stop 1 1 1 ( RR_RADIO_A = Gramophone_stop )

// End MCCD

CR_HELM =
CR_CHIEF =
CR_NAV = Navigator
RR_RADIAO_A = Funker
RR_HIDRO = Horcher
DER_DE_CPO = ??
DER_DE_PORT01
DER_DE_STB01_A

SYNTAX
Format:
<name> <cmd priority> <min people> <max people> (< waypoint1 = char_command1, waypoint2 = char_command2 >)

<>:
meens that the command must have that parameter.

():
Command must have at least one order. ( order = <waypoint1 = char_command1> ); there can be as many as "max people" orders.

name - command name:
there has to be support for it inside the code. ( new commands can't be added on-the-fly. )

cmd priority – command:
priority for now, starts at 1 and ends at infinity. lowest priority command will be a command with priority 1. ( need to check with design on this matter, to decide on priorities )

min_people – variable:
use to determine the minimum amount of humans needed by this command. without mimumum amount of people the command can not be executed initialy, so we'll try to free the minimum amount of people that this command wants by any means necessary: we'll try first to take people for other commands that have more then their minimum, if still there aren't enough people, we'll start canceling commands from the lower priority ones till the highest priority ones.

max_people – variable:
use to determine the maximum amount of humans needed by this command. a command searches for maximum people and if it doesn't find maximum people, it will try to find as many as it can.


Erstellung Crewbefehle

Die eingebunden Crewbefehle müssen unter C:\Ubisoft\Silent Hunter 5\data\Scripts\AI\Crew erstellt und abgelegt werden

Beispiel: Get_depth_under_sub_keel 1 1 1 ( CR_NAV = Get_depth_under_sub_keel )

Soll bei einem Crewmitgleid ein Befehl angezeigt aus auswählbar muss eine Befehlsdatei erzeugt werden. Ggf. können einzelne Begehle in eine aix-Datei zusammen gefasst werden. Weiß noch nicht wie das geht (bsp kunker_Idle_Actions.aix oder crash_dive.aix

C:\Ubisoft\Silent Hunter 5\data\Scripts\AI\Crew\ Get_depth_under_sub_keel.aix

strategy Get_depth_under_sub_keel(wp)
{
action
{
Wp:PlaySoundWithLipsync("Navigator\Normal\MC_CR_NAV_68", 0); # "right away"
Wp:PlayAnimationAndWait( "CR_NAV_Idle01" );

Wp:ExecuteCommand( "Get_depth_under_sub_keel" );

Wp:ScriptCompleted();
}
}

Navigator\Normal\MC_CR_NAV_68.ogg = Sounddatei “wird gemacht”

Wp:PlaySoundWithLipsync = Die Lippen werden gem Audio-Datei animiert
Wp:PlayAnimationAndWait = Animation des Crewmitgleides und warten auf Beendigung des Befehls
Wp:PlayAnimation = Animation des Crewmitgleides
Wp:ExecuteCommand = das Kommando, identisch wie in der commands.cfg
Wp:ScriptCompleted() = Funktion beenden.

Befehl in Dialog einbinden


Die auszuführenden und registrierten Befehle müssen pro Crewmitglied in den Dialog eingebunden werden. Beispiel Navigator

C:\Ubisoft\Silent Hunter 5\data\Scripts\AI\Dialogs_Default\DT_Nav_all.aix

1.) Es muss unter Rootdialog eine Dialogzeile registriert werden.
a. Oder einen eigenen Dialog erstellen (Untermenüs erstellen)
i. strategy Dialog_6_WATCH_NoCampaign(Dialog)

DialogLine_RootDialog_NAV_NoCampaign_1200,

Die Zahl 1200 steht für die Text DialogID aus der Dialogs.tsr
(Text_Dialog_1200=Wie ist die aktuelle Tiefe unter Kiel?)

Was der Unterschied Dialogline / Dialogtitle ist, weiß ich noch nicht!


2.) Der Dialog muss initialisiert werden

strategy DialogLine_RootDialog_NAV_NoCampaign_1200(Dialog)
{
strategies
{
DialogLine_RootDialog_NAV_NoCampaign_1200_Click,
DialogLine_RootDialog_NAV_NoCampaign_1200_Init
}
}


So wie es aussieht kann die Initialisierung irgendwo unterhalb der Registrierung stehen
Bei der Initialisierung wurde ein Init- und ein Click-Event definiert

Init: Initialisierung und Anzeige in der Dialogbox
Click: ClickEvent



3.) Init-Event erstellen

strategy DialogLine_RootDialog_NAV_NoCampaign_1200_Init(Dia log)
{
precond
{
Dialog:IsDialogLineClicked( "DialogLine_RootDialog_NAV_NoCampaign_1200" ) == 0
}
action
{
Dialog:AddDialogLine( "Text_Dialog_1200" );
Dialog:SetDialogLineClickId( "DialogLine_RootDialog_NAV_NoCampaign_1200" );
}
}

Precond / Bedingungen / Anweisungen definieren
IsDialogLineClicked: Angabe des Registrierungsnamen;
Wert == 0 kein Klick
Wert == 1 Klick
GetCurrentCrewState: 0 = Nein / 1= Ja
IsTutorialMission: 0 = Nein / 1= Ja
IsDialogLineLocked ? IsDialogLineLocked( "785" ) == 0 ; Dialogzeile
IsAbilityActive: Crewfähigkeiten abfragen
!Dialog:IsSubmerged() hat was in Verbindung der Fähigkeiten zu tun.
IsCurrentDateHigherThen( "10.10.1939" ) == 1
IsDialogLineClicked
!Dialog:IsSubmerged() = nicht getaucht

action
AddDialogLine: Zeile hinzufügen und welcher Text aus der der Dialogs.tsr soll ausgegeben werden (ID
SetDialogLineClickId: Angabe des Registrierungsnamen
GameCommand: Angabe des Kommandos Aufruf der *.aix-Datei
Was die Werte dahinter bedeuten, weiß ich noch nicht
PlaySound: abspielen von Audio-Dateien: "Navigator_slash_", "CG_CR_NAV_01_B", 0
DisableLine() ??
PlayAnimation: Animation gem. Audiodatei starten
SetDialogLineClickId
SetAbilityToRun
SetRunScript
RewardMoralePool: ? RewardMoralePool( 1.0 ) Erweiterung der Anzahl Moralpunkte
AddMorale: Moralpunkte hinzufügen/entfernen AddMorale(1.0 ) / AddMorale( -1.0 )
LockDialogLine: ? LockDialogLine( "722" ); steht wohl in Verbindung mit IsDialogLineLocked
UnlockDialogLine: ? UnlockDialogLine( "724" ); steht wohl in Verbindung mit IsDialogLineLocked
RewardLeadership: ? RewardLeadership( 1.0 )


4.) Click – Event erstellen

strategy DialogLine_RootDialog_NAV_NoCampaign_1200_Click(Di alog)
{
precond
{
Dialog:IsDialogLineClicked( "DialogLine_RootDialog_NAV_NoCampaign_1200" ) == 1
}
action
{
Dialog:GameCommand( "Get_depth_under_sub_keel", 0, 0 );
}
}


5.)

Crew - Animationen
Im verzeichnis C:\Ubisoft\Silent Hunter 5\data\Submarine\Common\Rooms stehen diverse Informationen zu Animationen

In der animation_info_CR.txt stehen u.a. die Animationen des Navigators



CR_NAV_Idle01 -90.0 -90.0 transition AA
CR_NAV_Idle02 -90.0 -90.0 transition AA
CR_NAV_Idle03 -90.0 -90.0 transition AA
CR_NAV_Idle04 -90.0 -90.0 transition AA
CR_NAV_Idle05 -90.0 90.0 no_interrupt transition AB
CR_NAV_Idle06 90.0 90.0 transition BC
CR_NAV_Idle07 90.0 90.0 transition CC
CR_NAV_Idle08 90.0 90.0 transition CB
CR_NAV_Idle09 90.0 -90.0 no_interrupt transition BA
CR_NAV_worry_idle01 -90.0 -90.0 transition AA
CR_NAV_worry_idle02 -90.0 -90.0 transition AA
CR_NAV_worry_idle03 -90.0 -90.0 transition AA
CR_NAV_explosion_event01 -90.0 -90.0 transition AA
CR_NAV_explosion_event02 90.0 90.0 transition BB

Das sollte es gewesen sein !!!!


Hilft dir das weiter?


Gruß Ruby

airulf
05-06-10, 15:34
ICH KACK AB!!!

Vielen Dank für diese Wahnsinns-Antwort, RUBY2000!!!
Damit habe ich nun wirklich nicht gerechnet...
...hilft mir Sehr weiter, Deine Antwort! Hab sofort alles
ausgedruckt und inhaliert, ahhh, das war gut!

Sorry, das ich mich erst so Spät melde,
bin ne' Nachteule.

Leider sehe ich mich dank dieses unerwarteten "Super-Feedbacks" dazu genötigt, gleich noch ''ne Frage einzureichen,
in der Hoffnung, Sie möge ebenso kompetent beantwortet werden wie die erste...

..kommt gleich...

Ruby2000
05-06-10, 16:30
<BLOCKQUOTE class="ip-ubbcode-quote"><div class="ip-ubbcode-quote-title">quote:</div><div class="ip-ubbcode-quote-content">ICH KACK AB!!! </div></BLOCKQUOTE>
Hi,

ich hoffe es ging dabei nichts in die Hose. http://forums.ubi.com/infopop/emoticons/icon_wink.gif

Lade dir am Besten den MCCD-Mod runter. Damit kannst du die Crew-Dialoge am Besten nachvollziehen. Da wirst du auch die Datei "Get_depth_under_sub_keel.aix" und die zusätzlichen Einträge in der dialogs.tsr finden.

Dann viel Spaß damit. http://forums.ubi.com/infopop/emoticons/icon_smile.gif

Gruß Ruby

airulf
05-06-10, 17:49
Hi,
Nix passiert, konnt's gerade noch so abwenden... http://forums.ubi.com/infopop/emoticons/icon_wink.gif

mein eigentliches Vorhaben ist, die Befehle an die
Crew nicht nur durch anklicken der entsprechenden
Charaktere oder durch Key's über die "Commands.cfg" auszu-
lösen, sondern zusätzlich durch Buttons in einer erweiterten
"QuickAccess"- MenuLeiste in "PageDefaultHud".
Das würde dann ausehen wie im Bild unten.

http://img25.imageshack.us/img25/6716/qu2nwquno2ubi.jpg (http://img25.imageshack.us/i/qu2nwquno2ubi.jpg/)

Ein/ausklappen der neuen Menu-Leiste funktioniert,
Die Buttons für die "Crew-Members" sind bereit,
Sehrohre ein/ausfahren sind im Bild gerade nicht zu sehen.
Radio und Grammophon habe ich in "PageDefaultHud_QuickAccess" reingequetscht,
deren abrufen ist ja auch nicht sonderlich schwierig-
einfach über das "clicked"-Ereignis des Buttons die entsprechende Page
aufrufen und dafür sorgen, das die "toogle"-Funktion anständig
umgesetzt wird.

Beim aufrufen des Charakter-Dialogs ist das ja im Grunde genauso,
Nur dass die "PageCharacterDialog" beim Aufruf per Button mit den Dialogen des
entsprechenden Crew-Members befüllt werden müsste.
Genau das ist mein Anliegen, nicht das scripten zusätzlicher Crew-Befehle
wie in MCCD, das kommt vielleicht später mal...
Ich möchte zur Zeit nichts anderes als mir für SH5 ein komfortables HUD
zu schaffen, das sich möglichst in das vorhandene "Star Trek"-Design einfügt,
(nicht die ausgeblendeten "sH3/Sh4"-Elemente reaktivieren oder Ähnliches.)

Jetzt könnte ich für jedes Crew-Mitglied per
Dialogbox die entsprechenden Befehle über die
"Commands.cfg" auslösen. Aber: Erstens bin ich dafür zu Faul, zweitens
würde der RAM dadurch unnötig strapaziert werden, und drittens
wäre es viel zu umständlich, da der Befehl in SH5 bereits existiert,
unabhängig von Datum, Kampagne oder Boots-Typ.

Also: Wenn man ein Crew-Member anklickt, öffnet sich die "PageCharacterDialog"
des entsprechenden Crew-Members.
Meine Frage ist eigentlich nur: Wie kriege ich diesen Befehl in meinen code,
um ihn über einen Button auszulösen, statt durch ancklicken des Crew-Fraggles?


-Vielen Dank noch mal für die Mega-Antwort von Ruby2000; http://forums.ubi.com/images/smilies/11.gif http://forums.ubi.com/images/smilies/11.gif http://forums.ubi.com/images/smilies/11.gif
-Vielen Dank an alle, die sich die Zeit genommen haben, diesen Quatsch zu lesen; http://forums.ubi.com/images/smilies/blink.gif
-Vielen Dank an alle, die mir weiterhelfen wollen. http://forums.ubi.com/infopop/emoticons/icon_smile.gif

Gruß
airulf

Ps:
Die Zahl derer, die einem Newbie wie mir sonst gerne
weiterhelfen möchten, ist nach Veröffentlichung
des Bildes weiter oben sicher schlagartig gesunken.
Keine Angst: Ich will nur spielen...

Ruby2000
06-06-10, 02:14
Hi airulf,

das Layout sieht sehr schön aus. Die Idee ist wirklich gut, aber welcher Click-Event dahinter steckt um die Dialogbox der Crewmitglieder zu aktivieren, weiß ich leider nicht.

Vielleicht weiß das einer der Modder. Hast du auch schon mal im SubSim - Forum danach gesucht?


Gruß Ruby

airulf
12-06-10, 19:53
Hi,
Hab' leider wenig Zeit im Moment, einmal die Woche ist schon Luxus pur.
Leider ist der Crew-Dialog sehr verzwickt ins Spiel eingewoben - zu verzwickt für mich
und meine bescheidenen Programmierkentnisse.
Also doch den aufwendigen Weg gehen: Jeden einzelnen Befehl durch Buttons / Checkboxes über die commands.cfg realisieren, ächts...
...und dabei fehlen in der commands.cfg auch noch 'ne Menge Crew-Fähigkeiten (Wasser aussn'mBoot,
schneller flicken die Kiste, Erbsensuppe für alle vom Koch, usw.)
Merkwürdiger Weise macht mir das "rum-doktoren" am Code inzwischen mehr Spass als das Spielen an sich.

AC_1_2_V2 (http://yfrog.com/essh52010061301235326mpegz)

Ich? Die Modder gefragt? Ja, hab ich. Du bist doch ein Modder, Ruby2000!
Mit Verlaub, aber ohne Deinen Tastatur-Mod würde ich heute noch
ziemlich blöd dastehen und das Boot kaum am Stück auss'm Bunker kriegen...

Gruß
und nochmals vielen Dank,
airulf