World of Gothic Archiv
> NWN-Hilfe Wer hat lust auf Glücksspiel? :) |
|
12.07.2002, 01:20 | #1 | |||
Gawain15 Beiträge: 1.084 |
Wer hat lust auf Glücksspiel? :)
Moinsen! Ich hab heute mal ein wenig an meinem Mod gearbeitet und unter anderem nen kleines "Würfelspielchen" gemacht, naja eigentlich ist es ziemlich bescheiden da ich es nicht hinkriege das der NPC sagt welche Zahlen erwürfelt wurden, vielleicht wieß ja einer Rat (Xerxes? :) ) Hier das Script wie es bisher ist (schlecht ist es eigentlich auch nicht, nur halt noch nicht ausgereift, funktioniert aber schon einwandfrei also könnt ihr es auch ruhig übernehmen). Beim Gespräch unter "erfolgte Aktionen" einfügen void main() { object oPC = GetPCSpeaker(); string sSprechen = "Du hast gewonnen *grummel* ich wette dieses mal hast du nicht mehr soviel Glück"; string sSprechen1 = "Du hast leider verloren... noch ein Spielchen?"; string sAngiff = "Das Reicht! So viel Glueck kann niemand haben, Zeit zu sterben Bastard!"; if (d6(1) > d6(1)){ SetLocalInt(OBJECT_SELF, "iErfolg", 1); ActionSpeakString(sSprechen); GiveGoldToCreature(oPC, 100); AssignCommand(OBJECT_SELF, DelayCommand(2.0, ActionStartConversation(oPC)));} else { SetLocalInt(OBJECT_SELF, "iErfolg", 0); ActionSpeakString(sSprechen1); TakeGoldFromCreature(50, oPC); AssignCommand(OBJECT_SELF, DelayCommand(2.0, ActionStartConversation(oPC)));} if (GetLocalInt(OBJECT_SELF, "iErfolg") == 3) {ActionSpeakString(sAngriff); AdjustReputation(oPC, OBJECT_SELF, -100);} } Also, es werden 2 d6 Würfe gemacht und wenn der erste Wurf höher ist gewinnt der Spieler, wenn der 2. höher ist der NPC. Beim Gespräch hab ich es so gemacht das man einmal 50, 100 und 150 GM setzen kann. Gewinnt der Spieler bekommt er den doppelten Einsatz (er behält seine 50 und bekommt 50 dazu), verliert er wird ihm 50 weggenommen. Der NPC sagt anschließend wer gewonnen hat und spricht ihn 2 Sekunden später wieder an (ich hab eine Varibale gesetzt damit der NPC beim 2. Ansprechen "Na? Noch ein Spielchen gefällig?" sagt.) Ausserdem fällt mir grade ein das ich noch ein Problem hab... ist nen kleines dummes ding... wie erhöhe ich eine Variable um 1? Runtersetzen geht einfach aber wie addiere ich die blöden Dinger? (Damit der NPC den Spieler beim 3. erfolgreichen Würfeln angreift.) Und nun Problem Nummer 2: wer weiß wie ich die Ergebnisse der Würfe im Speakstring einbauen kann? Wenn ich zu erst würfeln lass mit ner Variable kann ich das Ergebnis auch nicht einbauen da es kein Include Befehl o.ä. gibt so weit ich sehen kann. Ein paar andere Spiele folgen in kürze (mir schwebt schon was vor... das wird Hammer... dann sogar mit Animationen :) ) /e: achja, um zu checken ob der Spieler überhaupt genug Gold zum spielen hat noch folgendes bei "Text erscheint wenn..." einfügen: int StartingConditional() { object oPC = GetPCSpeaker(); if(!GetGold(oPC)>50) return FALSE; return TRUE; } Das checkt ob der Spieler 50 Gold hat, bei anderen Höhen der Einsätzen muß die Zahl natürlich geändert werden. (Besser wäre es eigentlich die Abfrage im "würflscript" einzubauen aber ich hatte keine Lust mehr noch eine Textzeile zu schreiben... warum schreib ich eigentlich gerade das hier? :) |
|||
12.07.2002, 07:17 | #2 | |||
Bluetooth Beiträge: 59 |
Goiles Script, werd ich auf jeden Fall in mein Modul einbauen (wenn du erlaubst ). Leider kann ich dir bei deinen Prob nich helfen da ich selbst nich scripten kann :( . cya |
|||
12.07.2002, 07:37 | #3 | |||
criz Beiträge: 39 |
hallo, Variable um eins erhöhen: (nur bei int) code\: float: code\: Problem 2: probier folgendes (nur code fragmente) code\: // -> Es gibt eine FUnktion die einen Int Wert in einen String verwandelt, wie dieser nun genau lautet kann ich leider nicht mit 100% sicherheit sagen, da ich gerade in der arbeit bin, und keine funktionsliste vor mir habe... aber falls mich mein gedächnis nicht vollkommen verlassen hat sollts so gehen.... criz ___________________________ Meine Droge hat einen Namen: RED BULL[/font] |
|||
12.07.2002, 08:56 | #4 | |||
Paleswift Beiträge: 154 |
.. und diese Funkiton heisst so.. :D string IntToString(int nInteger); .. und noch ne kleine Anmerkung: d6(1) ist dasgleiche wie d6(),(ohne die 1 ) da diese Funktion den Defaultparameter 1 definiert hat. Gugsdu: int d6(int nDice=1); |
|||
12.07.2002, 10:37 | #5 | |||
Bluetooth Beiträge: 59 |
Also ich hab zwar von Scipten net viel Ahnung aber da ich jetzt einbaue gucke ich mir es doch und muss mich fragen wo wird denn die Variable ausgewürfelt?( beim ersten Post). Danke schonmal, ich werd erstmal weiterbauen... cya |
|||
12.07.2002, 11:32 | #6 | |||
criz Beiträge: 39 |
hallo, Gawain hat die Würflerei ;) gleich in eine zeile zusammengefasst: code\: der code ist völlig richtig, und man erspart sich ein wenig schreibarbeit, hat jedoch einige nachteile: o bei Wurfgleichheit wird es entweder als sieg oder niederlage gewertet (oben als niederlage) o man kann die wurfergebnisse kein 2. mal verwenden bzw. irgendwo speichern und später als text wieder ausgeben alles klar? criz ___________________________ Meine Droge hat einen Namen: RED BULL[/font] |
|||
12.07.2002, 11:45 | #7 | |||
Bluetooth Beiträge: 59 |
ja is soweit alles klar; ich bau grad den kompletten code zusammen damit ihn jeder hat und ich kommentiere ihn auch noch insofern cya EDIT: HAAAHAA erwischt, da ich den Code ja gründlich durchgehe sehe ich einen Rechtschreibfehler gefunden Gawain15 :D Beim speakString sAngiff muss noch ein R hin :D dann kommt dein Code soweit hin ;) |
|||
12.07.2002, 11:59 | #8 | |||
Janzomaster Beiträge: 257 |
Ich habe das Toolset noch nich benutzt, aber kann es sein das die Script Sprache sehr PHP ähnelt? |
|||
12.07.2002, 12:19 | #9 | |||
criz Beiträge: 39 |
... und eigentlich nein. Die Scriptsprache (hat die eigentlich auch einen Namen?) ist der Programmiersprache C weit aus ähnlicher, o) denn php kennt keine void main() o) php hat keine variablentypen ala int, string, object usw.. o) usw.. usw.. criz |
|||
12.07.2002, 12:23 | #10 | |||
Bluetooth Beiträge: 59 |
Hier nun der Code wie er komplett funzen sollte. Ich habe alles eingebracht was hier im Forum genannt wurde und habe es auch kommentiert Es geht los: (wie macht man dieses Code Dingens ) void main() { int iPCWurf; int iNPCWurf; int iErfolg; // Hier werden einfach alle Variablen deklariert iPCWurf = d6(); //Hier werden die Variablen auf einen bestimmten Wert gesetzt iNPCWurf = d6(); iErfolg = 0; //bzw. sie werden ausgewuerfelt object oPC = GetPCSpeaker(); //es folgen hier noch weitere Deklarationen string sSprechen = "Du hast gewonnen *grummel* hier das Doppelte deines Einsatzes"; string sSprechen1 = "Du hast leider verloren... noch ein Spielchen?"; string sSprechen2 = "Huch die Wrfel haben die gleiche Augenzahl.Noch ein Spielchen?"; string sAngriff = "Das Reicht! Keiner hatte bis jetzt soviel Glueck! Zeit zu sterben Bastard!"; if (iPCWurf > iNPCWurf) //Ueberpruefung welcher Wurf hoeher ist, { //hier wird geprueft ob der Spieler hoeher gewuerfelt hat als der NPC iErfolg = iErfolg + 1; //Wir setzten die Variable einer hoeher; wird spaeter verwendet ActionSpeakString(sSprechen); //Der vorher definierte String wird aufgesagt GiveGoldToCreature(oPC, 100); //Ganz wichtig: Hier krieg der Spieler das Gold :D AssignCommand(OBJECT_SELF, DelayCommand(2.0, ActionStartConversation(oPC))); //Nach 2 Sekunden neues Gespaech anfangen } else if (iPCWurf == iNPCWurf) //Ab hier wird immer wieder fast das Gleiche gemacht wie oben { SetLocalInt(OBJECT_SELF, "iErfolg", 0); ActionSpeakString(sSprechen2); AssignCommand(OBJECT_SELF, DelayCommand(2.0, ActionStartConversation(oPC))); } else { SetLocalInt(OBJECT_SELF, "iErfolg", 0); ActionSpeakString(sSprechen1); TakeGoldFromCreature(50, oPC); AssignCommand(OBJECT_SELF, DelayCommand(2.0, ActionStartConversation(oPC))); } if (GetLocalInt(OBJECT_SELF, "iErfolg") == 3) //Sollte der Spieler dreimal hintereinander gewonnen haben, greift der NPC den Spieler an { ActionSpeakString(sAngriff); //Tja hier wird noch nen flotter Satz gesagt AdjustReputation(oPC, OBJECT_SELF, -100); // Hier weiss ich es nich ganz genau, vermute aber das der Spieler beim NPC schlecht gemacht wird } } //ENDE :D kommentiert und ein bisschen verbessert von Bluetooth jedoch war die Grundlage der Code von Gawain15 ! okay das wars, ich hoffe ich habe nichts vergessen @ Janzomaster Diese Sprache kennt man auch aus Bereichen wie C, C++ usw. natürlich gehört PHP wahrscheinlich auch dazu weiß es aber net ganz genau da ich PHP nich kenne cya |
|||
12.07.2002, 12:24 | #11 | |||
Bluetooth Beiträge: 59 |
Mir fällt grad auf das der immer noch nich sagt welche Zahl er gwürfelt hat das mach ich noch schnell und editier es dann EDIT: Argh, könnte einer mal Paleswift Post für mich verständlich machen? Seins hab ich gar nich kapiert jedoch hab ich in diese Script Datenbank geguckt und wenigstens etwas verstanden, jedoch kommt das hier: Meine Befehle sPCWurf StringToInt(int iPCWurf) sNPCWurf StringToInt(int iNPCWurf) Der Fehler FEHLER: KEIN SEMIKOLON NACH ANWEISUNG helft mir... |
|||
12.07.2002, 12:40 | #12 | |||
Gawain15 Beiträge: 1.084 |
Ich bin im Moment so weit: void main() { object oPC = GetPCSpeaker(); string sSprechen = "IntToString(iPCwurf)" + "Du hast gewonnen *grummel* ich wette dieses mal hast du nicht mehr soviel Glück!"; string sSprechen1 = "Du hast leider verloren... noch ein Spielchen?"; string sSprechen2 = "Unentschieden! So etwas hab ich lange nicht mehr gesehen, da muessen wir nocheinmal Wuerfeln."; int iAddi = iAddi + 1; string sAngriff = "Das Reicht! So viel Glueck kann niemand haben, Zeit zu sterben Bastard!"; int iPCwurf = d6(1); int iNPCwurf = d6(1); if (iPCwurf > iNPCwurf){ SetLocalInt(OBJECT_SELF, "iAddi", iAddi); ActionSpeakString(sSprechen); GiveGoldToCreature(oPC, 100); AssignCommand(OBJECT_SELF, DelayCommand(2.0, ActionStartConversation(oPC)));} else if (iPCwurf == iNPCwurf){ SetLocalInt(OBJECT_SELF, "iAddi", iAddi); ActionSpeakString(sSprechen2); AssignCommand(OBJECT_SELF, DelayCommand(2.0, ActionStartConversation(oPC)));} else { SetLocalInt(OBJECT_SELF, "iAddi", 0); ActionSpeakString(sSprechen1); TakeGoldFromCreature(50, oPC); AssignCommand(OBJECT_SELF, DelayCommand(2.0, ActionStartConversation(oPC)));} if (GetLocalInt(OBJECT_SELF, "iAddi") == 3) {ActionSpeakString(sAngriff); AdjustReputation(oPC, OBJECT_SELF, -100);} } /e: ahcja es wird nicht gesagt wie hoch der Wurf war... übigens kann ich nur PHP und daher sind mir die Sachen realtiv unbekannt :) |
|||
12.07.2002, 12:40 | #13 | |||
Paleswift Beiträge: 154 |
Also.. NwScript, PHP und C haben etwas gemeinsam - das ist richtig. Was sie gemeinsam haben ist die Syntax.. die ähnelt sich bei allen sehr. Urvater dieser art von Syntax ist das gute und mittlerweile alte C (Erfindung von C glaube ich um 1980 durch so nen Hacker damals, der mit den üblichen Programmiersprachen unzufrieden war, da die so ellenlangen Code hatten.) Was haben sie außer der Syntax noch gemeinsam? Antwort: NICHTS! C ist eine Programmiersprache.. die anderen beiden sind Scriptsprachen. Was ist der unterschied zwischen einer Programmier- und einer Scriptsprache - ganz einfach. Eine Programmiersprache muss kompiliert werden. Das heisst, sie wird in für den Prozessor verständlichen Code übersetzt. Komplexe Strukturen werden aufgelöst und dann in ganz einfache Befehle, die der Prozessor ausführen kann umgewandelt. Eine Scriptsprache muss nicht kompiliert werden - und wird sie Kompiliert, dann stellt das nur eine Optimierung für den Interpreter da. Nun was ist ein Interpreter? Auch ganz einfach: Das ist ein Programm, welches den Scriptcoe zur Laufzeit des Programms in für den Prozessor verständliche Anweisungen übersetzt. Also.. bei der Programmiersprache wird direkt kompiliert, bei der Scriptsprache wird erst kompiliert, wenn das Script benötigt wird. Ist vielleicht jetzt etwas verwirrend.. Zusammenfassend: C - ist eine equentielle Programmiersprache C++ - ist eine Weiterentwicklung von C. C++ arbeitet objektorientiert. (Genau wie Java z.B.) PHP ist eine reine Scriptsprache. Der Interpreter wird als Modul an den Webserver gebunden. Übrigens: PHP ist ansatzweise ebenfalls objektorientiert. NWNScript ist eine Scriptsprache. Der Scriptcode wird via Compiler optimiert und auf Fehler geprüft. (Er übersetzt jedoch nicht in Maschienencode) Der Code wird von einem im Server eingebundenen Interpreter ausgeführt. Ist jetzt NWScript objektorientiert? Ja und nein. Es wird zwar mit Objekten gearbeitet, jedoch ist es nicht möglich eigene Objekte zu definieren. Alles klar? Nein? dann gut. |
|||
12.07.2002, 12:44 | #14 | |||
Gawain15 Beiträge: 1.084 |
PHP 5 soll übrigens mehr in Richtung Objektorientiertes gehen... |
|||
12.07.2002, 13:01 | #15 | |||
criz Beiträge: 39 |
Kleiner Vorschlag: Wie wärs mit eine wenig mehr Spannung im Dialog? NPC: Spielchen? PC: JA delay... NPC: bei wurf zwischen 1-2 : Ich hab eine ..., mann ist das schlecht... bei wurf zwischen 3-4 : Ich hab eine ..., mal sehen was du wirfst.. bei wurf zwischen 5-6 : Ha Ha, mit einer ... hab ich so gut wie gewonnen... delay NPC: mom, mal sehen ... du hast eine ... --> weiter zu sieg,unentschieden,niederlage.. usw... criz p.s. dialog texte sind nur schemenhaft, müssten natürlich noch schmuckhafter getextet werden. |
|||
12.07.2002, 13:02 | #16 | |||
Paleswift Beiträge: 154 |
@Bluetooth Wahrscheinlich haste das mit dem Defaultparameter nicht verstanden, oder? quote: also: In der Funktionsdefinition steht doch folgendes: int d6(int nDice=1); Das bedeutet: int Die Funktion gibt dir eine Integer-Zahl zurück, wenn du sie aufrufst. d6 Der Name der Funktion. ( Hier beginnt die Liste der Parameter, die der Funktion übergeben werden. int nDice=1 es muss eine IntegerZahl übergeben werden. Wird keine übergeben wird der Defaultwert 1 genommen (Das ist das mit dem =1 hinter nDice) ); Die Parameterliste ist zu ende und die Funktion auch. Alles klar? Nein? gut! |
|||
12.07.2002, 13:20 | #17 | |||
Bluetooth Beiträge: 59 |
@Paleswift Nope weiß leider immer noch nicht wies geht, hast du vielleicht die Güte mir das anhand meinem Script zu zeigen? Ich glaub das würd ich besser verstehen :D @criz in meinen Augen zu viel des Guten da man ja an so nem Stand nich Stunden verbringen wird ;) cya |
|||
12.07.2002, 13:20 | #18 | |||
Gawain15 Beiträge: 1.084 |
So aber nun beruhigen wir uns mal wieder alle und kommen von der "Fachdiskussion" weg und helfen dem lieben kleinen Gawain :) es wird immer noch nicht das Würfelergebnis ausgegeben... |
|||
12.07.2002, 13:30 | #19 | |||
Paleswift Beiträge: 154 |
@Bluetooth Es ist wurscht ob du in deinem Script int nErgebnis = d6(1); oder int nErgebnis = d6(); hinschreibst. Das ist alles. @Gawain Im Script oben sind nämlich noch einige Fehler.. ;) Ich machs fertig, wenn ich daheim vor dem Toolset sitze. Ich stells dann als Beispielmodul bei PlanetNwN rein.. |
|||
12.07.2002, 13:35 | #20 | |||
criz Beiträge: 39 |
@Bluetooth: naja, man könnte schon. ich jedenfalls. ich bin der 100% scripter, das texten inkl. deutscher rechtschreibung und grammatik überlasse ich gerne anderen... criz |
|||
12.07.2002, 13:39 | #21 | |||
Gawain15 Beiträge: 1.084 |
Was? Fehler? Einige? Unmöglich :) |
|||
12.07.2002, 13:51 | #22 | |||
Paleswift Beiträge: 154 |
Folgendes: (Siehe Komentare im Text) quote: |
|||
12.07.2002, 14:16 | #23 | |||
Gawain15 Beiträge: 1.084 |
Ok was ist der Unterschied zwischen Alignment und Reputation? Reputation ändert das verhältnis zwischen Spieler und NPC Faction und Alignment ändert den Bekanntheitsgrad oder? Ich habs so das der NPC den depp (Spieler :) ) in ne Gasse lockt ("psssst, hey du... ja du! Komm mal hier herrüber") und dann wird gewürfelt... und wenn der Spieler dreimal hintereinander gewinnt wird der Würfelheini sauer und er und seine Jungs dreschen drauf los. int iAddi = iAddi + 1; // <- Was soll das? Das gibt garantiert nen Fehler.. SetLocalInt(OBJECT_SELF, "iAddi", iAddi); also er soll eigentlich die Variable iAddi erstmal auslesen und dann iAddi +1 setzen... Sollte man das lieber mit 2 verschiedenen machen? |
|||
12.07.2002, 14:16 | #24 | |||
Omega Darkblade Beiträge: 257 |
Cool :) achja falls jemand das brauch, ich hätte die passenden sound Datein dafür.(aus bg2 geklaut ) |
|||
12.07.2002, 14:25 | #25 | |||
Paleswift Beiträge: 154 |
quote: Der Unterschied zwischen Alignment und Reputation? Alignment ist nicht der Bekanntheitsgrad , sondern ich glaube das ist, ober der Charakter gut oder böse ist, oder? Und wenn du einfach nur die Reputation änderst, dann sind ale aus der Faction Commoner sauer auf die aus der Faction der Spieler. Dat wäre net so schlau. Gib dem Gambler ne eigene Faction.. dann sind halt alle aus der Faction Gambler sauer auf die Spieler.. das ist aber glaube ich ok.. oder mach nur ein ActionAtack(oPC) das sollte es auch tun.. Aber die Faction würde ich trotzdem ändern.. Weil beim Tod des Gamblers sonst die Reputation trotzdem geändert wird. Und das is sch... (Dann greift nämlich die nächste Oma an der Strassenecke die Spieler an, oder ist zumindestens sauer.. und das kommt irgendwie blöd..) |
|||
|