Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wie in einem RPG Gespräche für ein NPC speichern/festlegen? (https://www.delphipraxis.net/46046-wie-einem-rpg-gespraeche-fuer-ein-npc-speichern-festlegen.html)

Master_RC 17. Mai 2005 13:49


Wie in einem RPG Gespräche für ein NPC speichern/festlegen?
 
hi leutz!

Ich möchte euch fragen, ob ihr eine Idee zu meinem Problem habt:

Ich mach gerade ein RPG und da müssen die NPCs natürlich reden ;)

Zuerst einmal die Funktion, durch die ich eine Textnachricht anzeige:

Delphi-Quellcode:
function Textmessage(Headline,Text:string;Picture:string=''):boolean;
begin
 if Headline = '' then Headline := 'FeHlEr:';
 if Text = '' then Text := '+++ EMPTY +++';
 if Picture <> '' then begin
  if FileExists(Picture) then begin
  end else Picture := '';
 end;
Headline := ReplaceString(Headline, '%playername%', character.name);
unit9.mHeadline := Headline;
Text := ReplaceString(Text, '%playername%', character.name);
unit9.mText := Text;
unit9.mPicture := Picture;
form9.ShowModal;
result := true;
end;
Mmmh... also "Headline" ist die Überschrift, die in der Textnachricht angezeigt werden soll und "Text" natürlich der Text ;)

Gut...
bis jetzt habe ich es so gemacht, dass jeder NPC einen Namen für sein Gespräch hat.
Die ganzen Gespräche sind alsp derzeit in meiner .exe mit drinnen.

Wenn ich also den Gesprächsnamen "galakk1" gegeben habe, so sucht Delphi per "if Talkname = '' then ..." in der .dpr-Datei nach diesem Gespräch und führt eben die "Textmessage"-Funktionen aus.
Hier ein kleiner Überblick der "Gesprächsfunktion":

Delphi-Quellcode:
procedure NPCTalking(Talkname,NPCName,NPCPic:String);
begin
 if Talkname = 'galakk1' then begin
  Textmessage('%playername%'+':','Na da sieh doch einer her! %playername%',NPCPic);
  Textmessage(NPCName+':','ES KLAPPT!!!!!!',NPCPic);
 end;
end;
Tja...
Jetzt das Problem:
Das Spiel ist damit ein wenig "doof" zum Updaten, da ich ja immer die .exe mitliefern muss bei einem Patch...
Jetzt hab ich mir also gedacht, die Gespräche in eine .DLL zu packen.

Jetzt kommt wieder ein Problem:
Wie? Also... wie schreibe ich es in die .DLL und wie les ich es aus? Array? String zum Zerteilen? etc...
Ein String zum Zerteilen ist natürlich einfach, doch...
Ich brauch ja für jedes Gespräch einmal die "Überschrift", dann den "Text" und dann den String zum Pfad des "Charakterbildes"...

habt ihr eine Lösung für mich?
Die Frage quält mich schon seit Tagen

[edit=alcaeus]Code-Tags durch Delphi-Tags ersetzt. Mfg, alcaeus[/edit]

Fingolfin 17. Mai 2005 14:13

Re: Wie in einem RPG Gespräche für ein NPC speichern/festleg
 
Hallo. Mit einem RPG hast du dir ja eine Menge vorgenommen. ;)

Daten, wie die Namen deiner NPCs und deren Dialoge lagert man ab besten aus. Sowas in den Quellcode zu schreiben, wird dich über kurz oder lang wahnsinnig machen. Da hilft auch keine Dll.

Suche doch mal nach Streams und Speicherung von Daten im Allgemeinen. Da wirst du eine Menge im Board finden und Tutorials gibt's zuhauf. Denkbar wäre natürlich noch eine Datenbank, um solche Informationen abzulegen.

Master_RC 17. Mai 2005 14:16

Re: Wie in einem RPG Gespräche für ein NPC speichern/festleg
 
Was sind eigentlich diese Streams?

und warum sollte eine DLL nicht reichen?
immerhin kann die ja auch mal größer sein ;)

oder ich mach für jeden NPC eine eigene DLL :P

malo 17. Mai 2005 14:35

Re: Wie in einem RPG Gespräche für ein NPC speichern/festleg
 
Zitat:

Zitat von Master_RC
Was sind eigentlich diese Streams?

--><--


Zitat:

Zitat von Master_RC
und warum sollte eine DLL nicht reichen?
immerhin kann die ja auch mal größer sein ;)

Das steht nirgendwo, dass sie nicht reicht. Nur es ist nicht hilfreich, eine zu benutzen. Da kann man das auch gleich im Quellcode machen ;)


Zitat:

Zitat von Master_RC
oder ich mach für jeden NPC eine eigene DLL :P

:shock: Ich hoffe, du wirst dann nicht sehr viele NPCs haben :shock:

Master_RC 17. Mai 2005 15:25

Re: Wie in einem RPG Gespräche für ein NPC speichern/festleg
 
das letztere war ja nur ein schwerz ^^

naja, welche datenbank könnt ihr mir denn empfehlen? ich hab immerhin D7Pers.....

und das mit den streams muss ich mir noch genauer anschauen... :(

PS:
kennt ihr eine MySQL-Verbindung für D7Pers? wenn ja, dann sagen :)

malo 17. Mai 2005 15:26

Re: Wie in einem RPG Gespräche für ein NPC speichern/festleg
 
MySQL für Delphi

freak4fun 17. Mai 2005 15:33

Re: Wie in einem RPG Gespräche für ein NPC speichern/festleg
 
Ich denka mal alle NPC´s haben in etwa die gleichen Eigenschaften. Dann kannst du also eine KLasse benutzen und die verschiedenen NPC´s sind dann die verschiedenen Instanzen. Die Frage ist ja nun, wie man die Daten der einzelnen NPC´s speichert. ICh würde es wahrscheinlich mit einer Ini-Datei versuchen. Als Section den NPC-Name und dann die entsprechenden eigenschaften.

Ist nur eine Idee.
MfG
freak

malo 17. Mai 2005 15:36

Re: Wie in einem RPG Gespräche für ein NPC speichern/festleg
 
Zitat:

Zitat von freak4fun
Ich denka mal alle NPC´s haben in etwa die gleichen Eigenschaften. Dann kannst du also eine KLasse benutzen und die verschiedenen NPC´s sind dann die verschiedenen Instanzen. Die Frage ist ja nun, wie man die Daten der einzelnen NPC´s speichert. ICh würde es wahrscheinlich mit einer Ini-Datei versuchen. Als Section den NPC-Name und dann die entsprechenden eigenschaften.

Ist nur eine Idee.
MfG
freak

Inis sind unpraktisch, weil man dann ja jederzeit die NPC-Eigenschaften ändern könnte. Dann doch lieber Datenbanken ;)

freak4fun 17. Mai 2005 15:39

Re: Wie in einem RPG Gespräche für ein NPC speichern/festleg
 
Da hast du allerdings recht. Ich weiß ja nicht wie professionel das Spiel wird. Zum üben dürfte es allemal reichen.

MfG
freak

Master_RC 17. Mai 2005 15:40

Re: Wie in einem RPG Gespräche für ein NPC speichern/festleg
 
hab ich mir auch schon überlegt, nur...

wie lese ich eben dann die einzelnen texte aus?!
außerdem sind die wieder net sicher vor "hackern", enn man das bei inis so bezeichnen kann ;)

@malo: wo find eich eine TDataSource oder so?
ich brauch ja auch die ganzen komponenten dazu :(

PS:
naja... so professionell iss es auch net :D
abba es sollte wenigstens *etwas* professionell sein ;)

malo 17. Mai 2005 15:45

Re: Wie in einem RPG Gespräche für ein NPC speichern/festleg
 
Zitat:

Zitat von Master_RC
@malo: wo find eich eine TDataSource oder so?
ich brauch ja auch die ganzen komponenten dazu :(

Ähm, es gibt so einen tollen Trick, der nennt sich lesen. Damit kann man herausfinden, was irgendwo steht. Luckie erklärt ganz bewusst einen Weg, ohne Komponenten MySQL-Datenbanken zu benutzen. Und dieses Tutorial ist für den Umgang mit Datenbanken OHNE Komponenten gedacht ;)

Master_RC 17. Mai 2005 15:54

Re: Wie in einem RPG Gespräche für ein NPC speichern/festleg
 
oh... geht das auch ohne?
mmh... überall wird mir gesagt, dass es NICHT ohne geht.. naja...

tut mir leid, dass ich so beschränkt bin ;)

THX!

wegen er DB:
ist die dann auch transportabel und einsetzbar, OHNE dass jemand einen MySQL-Server installierrt hat?
ohne dass wer ins netz muss?

malo 17. Mai 2005 16:02

Re: Wie in einem RPG Gespräche für ein NPC speichern/festleg
 
Zitat:

Zitat von Master_RC
oh... geht das auch ohne?
mmh... überall wird mir gesagt, dass es NICHT ohne geht.. naja...

Das stimmt nur bedingt. Es ist verdammt unpraktisch und umständlich, wenn man ohne Komponenten Datenbankzugriffe machen will in Delphi. Aber es geht schon ohne. Denn im Grunde sind die Komponenten auch nur Code, den man ja auch selbst schreiben kann (also die Datenbankzugriffe etc. ) ;)

Zitat:

wegen er DB:
ist die dann auch transportabel und einsetzbar, OHNE dass jemand einen MySQL-Server installierrt hat?
ohne dass wer ins netz muss?
Soweit ich weiß, muss ein MySQL-Server installiert sein. Aber ich verstehe nicht, wie du auf Netz kommst :gruebel:

Master_RC 17. Mai 2005 16:19

Re: Wie in einem RPG Gespräche für ein NPC speichern/festleg
 
also...
wenn die MySQL ja nicht transportabel ist, dann hilft die mir ja nicht viel, weil ich ja nicht bei jedem user eine installieren sollte...

auf "netz" komm ich, wenn ich internet meine, also meine datenbank bei mir aufrufen möchte...
dann müssten abba alle spieler wieder online sein, was ja auch ziemlich doof ist...

mmh...

Fingolfin 17. Mai 2005 16:26

Re: Wie in einem RPG Gespräche für ein NPC speichern/festleg
 
Wenn du gerade erst am Delphi-Lernen bist, ist es vielleicht ein bißchen viel auch noch SQL dazuzupacken, gerade wenn du mit der PE etwas eingeschränkt bist.
Was deine Angst vor Hackern angeht. Nicht ist jemals sicher ;)
Wenn du nicht willst, daß deine Dateien bearbeitbar sind, sind Binärdateien schon ganz gut (sprich Streams). Alternativ kannst du auch XML oder sonstwas verwenden und es später per RAR verschlüsseln.

Master_RC 17. Mai 2005 16:30

Re: Wie in einem RPG Gespräche für ein NPC speichern/festleg
 
joa...
dann mach ich das per streams :)

ich such mir noch schnell ein tuto aus meinr hosentasche hraus ;)

SQL kann ich, ich mach ja immerhin auch PHP ;)

naja... dann... wäre dieses thema evtl. auf weiteres besiegelt...

Boombuler 18. Mai 2005 06:41

Re: Wie in einem RPG Gespräche für ein NPC speichern/festleg
 
Hi

wenn ich noch mal was einbringen dürfte:
Wenn du auf eine DB verzichten möchtest würde ich dir eine Resource-DLL vorschlagen! Texte leicht verschlüsseln (wenn nötig) und dann für jedes Gespräch eine txt-File anlegen und die alle als Resource in die DLL packen so musst du nur die DLL updaten und dort könntest du dann auch direkt die entsprechenden Funktionen auslagern für die Text-Outs so kannst du das auch jederzeit Updaten ohne die exe tauschen zu müssen!

Greetz
Boombuler

Master_RC 18. Mai 2005 09:09

Re: Wie in einem RPG Gespräche für ein NPC speichern/festleg
 
@boombuler:
sehr gute idee!
aus der textdatei die einzelnen textpassagen auszulesen ist ja dann einfach :)

nur...
wie lese ich die dann aus?! hab noch nie mit solchen ressourcen-dlls (oder auch .rc) gearbeitet :(

Boombuler 18. Mai 2005 11:58

Re: Wie in einem RPG Gespräche für ein NPC speichern/festleg
 
Hi

CodeLib hilft weiter :)

http://www.delphipraxis.net/internal_redirect.php?t=326

Wenn du die Resource erstellt hast musst du nur in die DLL
Delphi-Quellcode:
{$R MeineResource.res}
schreiben und compilieren.
Hab gerad keinen Plan ob das mit HInstance geht (Sonst das LibHandle der geladenen DLL) sollte aber wenn du direkt in der DLL eine Funktion zum Auslesen einbaust! Denk aber immer daran das du keine Strings als Parameter oder Rückgabewert nehmen solltest!

Wenn sonst noch fragen sind kann ich (oder auch die andern) dir weiterhelfen!

Greetz
Boombuler

Master_RC 18. Mai 2005 12:04

Re: Wie in einem RPG Gespräche für ein NPC speichern/festleg
 
THX! :top:

ich werd mal ausporbieren und dann darüber meckern ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz