World of Gothic Archiv Alle Beiträge von Levi |
|
16.07.2002, 12:51 | #1 | |||
Levi Beiträge: 43 |
NPC unbeweglich machen? - NPC unbeweglich machen?
Hallo Leute! Ich hab folgendes Problem im Editor: Ich will einige (genauer gesagt: viele) NPCs machen, die versteinert sind, sich also nicht bewegen. Das funzt aber nicht. Ich hab probiert bei On_Spawn den Hold_irgendwas Spell anzuwenden, oder einen Effect_Paralyze, aber egal was ich mache: Die drehen sich immer zu mir um wenn ich sie anklicke, bzw. stehen auch auf, und wenn ich sie angreife schlagen sie zurück. Jemand ne Idee? Danke im voraus, Leviathan |
|||
16.07.2002, 14:18 | #2 | |||
Levi Beiträge: 43 |
Newbie Frage -
Ne, Skripten brauchst du dafür garnicht. Einfach den Waypoint wo er hinlaufen soll POST_NPC-Tag nennen. |
|||
17.07.2002, 10:00 | #3 | |||
Levi Beiträge: 43 |
NPC unbeweglich machen? -
Hilfe!? |
|||
17.07.2002, 10:11 | #4 | |||
Levi Beiträge: 43 |
wieder so ne scriptfrage... -
Ich weiß es nicht genau, aber ich nehm an du musst im On_Damaged-Skript des NPC halt mit GetCurrentHitpoints abfragen, wie guts ihm noch geht, und ab einer bestimmten Grenze erreicht hat mit AdjustReputation(GetPCSpeaker(), OBJECT_SELF, 100); die beiden "befrieden" und mit AssignCommand(oPC, ClearAllActions()); AssignCommand(oNPC, ClearAllActions()); AssignCommand(oNPC, ActionMoveToObject(oPC)); AssignCommand(oNPC, ActionStartConversation(oPC)); den Dialog starten. Was ich aber nicht weiß ist, wie du verhinderst, dass der NPC bei nem besonders däftigen Schlag doch verreckt. Vielleicht kann man das On_Death-Skript auch so ändern, dass der NPC nicht stirbt? |
|||
17.07.2002, 15:49 | #5 | |||
Levi Beiträge: 43 |
Projekt: Neverwinter -
Ein ehrgeiziges Projekt, vielleicht zu ehrgeizig... Das Problem ist bei solchen Sachen, dass ihr euch zuviel vornehmt. Ihr werdet nicht viele Leute finden, die bereit und in der Lage sind, ausreichend Zeit für so ein Projekt zu opfern, und die die bereit sind, werden einfach überfordert sein, so dass sich alles früher im Sand verläuft. Zweites Problem dürften die Server sein: Server die rund um die Uhr laufen können und genug Bandbreite haben, um so viele Gamer zu versorgen kosten Knete, und zwar nicht zu knapp. Seit ihr bereit das zu bezahlen und zu organisieren? Kann sein dass ich mich täusche, aber ich würde euch raten erstmal kleine Brötchen zu backen, soll heißen: erstmal ne Story überlegen, dann ein paar kleine Module die auf dieser Story basieren und sie ausbauen. Diese Module müssen nicht unbedingt episch sein, aber Qualitativ top! Nein, top reicht nicht: Bahnbrechend. Denn mit diesen Modulen müsst ihr andere davon überzeugen, dass eure Story es wert ist, erweitert zu werden. Auf die weise entsteht vielleicht nach und nach ein dichtes Netz von Geschichten die eure epische Story bieten. Und bitte: nennt es NICHT Projekt Neverwinter, das klingt viel zu großkotzig um ernstgenommen zu werden. |
|||
17.07.2002, 17:43 | #6 | |||
Levi Beiträge: 43 |
wieder so ne scriptfrage... -
Also erstmal gibt GetPercentageHPLoss witzigerweise zurück, wieviel Prozent das opfer ÜBRIG hat! Witzige Skriptsprache... void main() { // Wenn nur noch 40% Health übrig sind... if (GetCurrentHitpoints(OBJECT_SELF)<=40) { // oPC sei der Angreifer object oPC = GetAttackTarget(); // Frieden machen. :) 100 is vielleicht übertrieben, // da heiraten die ja gleich, aber egal AdjustReputation(oPC, OBJECT_SELF, 100); // Alle bisherigen Kommandos (z.B. Angriffe) löschen AssignCommand(oPC, ClearAllActions()); AssignCommand(OBJECT_SELF, ClearAllActions()); // Und jetzt: labern AssignCommand(oNPC, ActionStartConversation(oPC)); } Is ungetestet, das musste selber machen. ;) |
|||
17.07.2002, 19:14 | #7 | |||
Levi Beiträge: 43 |
wieder so ne scriptfrage... -
np. Wenns nicht klappt sag bescheid, dann schau ichs mir nochmal genauer an. |
|||
17.07.2002, 19:22 | #8 | |||
Levi Beiträge: 43 |
Projekt: Neverwinter -
@LightHawk: Erstens: Warum greifst du mich gleich an? Ich wollte euch nur tips geben, weil ich weiß was aus solchen Projekten in 98% der Fälle passiert! Zweitens: Ich hatte angenommen ihr wolltet die Module auch auf eigenen Servern laufen zu lassen, dafür reicht Webspace nicht! Drittens: Eine Welt wie du sie dir vorstellst ist ungefähr 1000x mehr arbeit als das Forgotten Book. Viertens: Für Linux hat ein einzelner Mensch sein ganzes Leben umgekrempelt bevor sich andere dabei beteiligt haben, bist du bereit das zu leisten? Außerdem: Weißt du wieviele tausend Leute ein eigenes Betriebssystem schreiben wollten, und wieviele davon tatsächlich fertig wurden? Wenn du keine gutgemeinten Tipps annehmen willst, dann probiers halt, aber fang dann nicht an zu plärren wenn dir kaum einer hilft. |
|||
17.07.2002, 19:27 | #9 | |||
Levi Beiträge: 43 |
Projekt: Neverwinter -
Oh, und noch ein Tipp den du bestimmt in den Wind schlägst: Vergib NICHT mehreren Leuten die gleiche Aufgabe. Besser kannst du die Leute garnicht loswerden! Was glaubst du wie verarscht sich einer vorkommt, wenn seine Arbeit von Stunden weggeworfen wird, weil ein anderer das gleiche gemacht hat, und das ein bischen besser oder etwas schneller. |
|||
17.07.2002, 19:43 | #10 | |||
Levi Beiträge: 43 |
Script Frage ;) -
Hä? Ich blicks nicht, sorry. WIE willst du Kellner sagen? Du kannst doch in NWN nur vorgefertigte Dialoge führen, nicht einfach irgendwas sagen. Oder meinst du im Chat? Glaub kaum, dass die NPCs darauf reagieren können. |
|||
17.07.2002, 19:54 | #11 | |||
Levi Beiträge: 43 |
Script Frage ;) -
Ne, die Gefolgsleute reagieren nicht auf das was du rufst, das Kreismenü verschickt auch ne interne Message an die Gefolgsleute auf die sie reagieren können. Kannst ja mal probieren: Tipp einfach nen Kommando exakt in den Chat ein, ich wette da passiert null. |
|||
17.07.2002, 20:12 | #12 | |||
Levi Beiträge: 43 |
Script Frage ;) -
1. Gibt es aber kein Ereigniss das auf Chat-Messages reagiert und 2. Gibt es keine Funktion um Chat-Messages auszuwerten. Zumindest hab ich nix gefunden. @mephi: Ich glaub nicht dass du das Kreismenü ändern kannst, ich lass mich aber gern eines besseren belehren. |
|||
17.07.2002, 20:15 | #13 | |||
Levi Beiträge: 43 |
Script Frage ;) -
auswerfen ja, aber auswerTen? |
|||
17.07.2002, 20:53 | #14 | |||
Levi Beiträge: 43 |
Projekt: Neverwinter -
Mit (T-)DSL versorgst du maximal 4 Leute mit 4 kb/sekunde, das ist pro person weniger als nen Analog-Modem und lässt wahrscheinlich kein großartiges Spielen zu... |
|||
17.07.2002, 21:47 | #15 | |||
Levi Beiträge: 43 |
Projekt: Neverwinter -
quote: Sorry, aber das ist technisch nicht möglich. T-DSL hat einen upstream von 128kbit. 128kb/8=16 kbyte. 16kbyte/6 Spieler=2.6kbyte pro Spieler, damit kannst du nichtmal doom absolut lagfrei spielen. Und das ist das theoretische Maximum, meistens erreicht T-DSL diesen Upstream garnicht. btw.: ein 28.8k Modem hat einen Up/Downstream von 3.6 Kbyte... |
|||
17.07.2002, 23:38 | #16 | |||
Levi Beiträge: 43 |
Script Frage ;) -
wow, das ist ja genial! Hätt nich gedacht dass das geht. *froi* Aber wärs nicht cleverer bei SetListenPattern statt ** gleich "Kellner" einzugeben? So wie ich das verstanden habe würde der Kellner dann nur auf dieses Wort hören, und damit könntest du dir einige aufrufe des anderen Skripts sparen. Würde zwar nix am Endergebnis ändern, aber n biserl weniger CPU-Last produzieren. Oder hab ich das jetzt auf die schnelle falsch verstanden? |
|||
18.07.2002, 11:09 | #17 | |||
Levi Beiträge: 43 |
Projekt: Neverwinter -
Also nochmal zur technik: DSL hat einen Upstream von 128 kbit, mehr geht nicht!!! Wenn ihr mehr gemessen habt, dann war das ein Messfehler! Beim Downstream kann ich das auch ganz leicht erklären, da hat das programm vorher mehr runtergeladen als es angezeigt hat, und diesen Messfehler später ausgeglichen. Tatsächlich mit 160 kb/sec runterladen bei einem downstream von 768kbit ist nicht möglich, und wenn euch das programm das hundertmal erzählt. Wer mir nicht glaubt, lese doch bitte mal diesen Thread: http://nwn.bioware.com/forums/viewt...=76655&forum=49 Da sind einige Leute mit Messungen auf das gleiche Ergebnis gekommen wie ich mit meiner Schätzung: Mehr als 3-4 Spieler mit 128kbit upsream ist nicht drin. Was mir aber eingefallen ist: Vielleicht dated der Server die Spieler nur mit solch hohen Raten up, wenn sie sich im gleichen Gebiet aufhalten, wenn also alle in unterschiedlichen Gebieten ist, werden weniger Updates benötigt, also auch weniger Upstream. Spätestens wenn ihr aber zusammen rumlauft und evtl. sogar gegeneinander Kämpft, ist mit lagfrei nichts mehr... @LightHawk: Das was ich sage einfach als Blödsinn abzustempeln sehe ich wohl als angriff an, das würde wahrscheinlich jeder andere auch. Und: Ja, ich habe alle Beiträge sorgfältig gelesen und ja: ich glaube ihr fallt damit auf die Schnauze, aber ich wünsch euch trotzdem viel glück. |
|||
18.07.2002, 11:14 | #18 | |||
Levi Beiträge: 43 |
Script Frage ;) -
quote: Hehe, ehrlich gesagt gings mir nur darum ob ich verstanden hab wie das Skript funzt. ;) @mephi: Kannst du mal dein OnConversation-Skript posten, vielleicht erkennen wir dann den fehler. |
|||
18.07.2002, 11:20 | #19 | |||
Levi Beiträge: 43 |
wieder so ne scriptfrage... -
Stimmt, das ist wahrscheinlich insofern besser, dass bei meinem Skript wahrscheinlich die Begleiter den Kampf nicht einstellen. Außerdem ist es kürzer. ;) |
|||
18.07.2002, 13:00 | #20 | |||
Levi Beiträge: 43 |
Script Frage ;) -
Öhm, kann sein dass ich das jetzt mißverstehe, aber du weist dass du nur eine main-methode haben darfst? Den neuen Code solltest du ans ende der bestehenden main-methode, vor der letzten "Klammer zu" einfügen. |
|||
18.07.2002, 13:04 | #21 | |||
Levi Beiträge: 43 |
Projekt: Neverwinter -
quote: Als Server??? Und wieviel ist "mehrere"? Und hast du kanalbündelung oder nicht? Und ich hoffe du redest nicht von einem Closed-BNet-Game, denn die werden eh nicht auf deinem Rechner gehostet! Wie gesagt, ich stelle diese Behauptung nicht in den Raum, es geht hier um technische Machbarkeit. |
|||
18.07.2002, 13:17 | #22 | |||
Levi Beiträge: 43 |
Script Frage ;) -
Hm, bei mir klappts. Hat dein Kellner auch das Tag (zu deutsch Kennzeichnung) "Kellner"? Sonst musst du das nämlich im GetObjectByTag ändern! Oder du machst gleich oNPC=OBJECT_SELF draus. Außerdem musst du beachten dass bei dem was gerufen wird. Groß-/Kleinschreibung unterschieden wird. "Kellner" ist also was anderes als "kellner". |
|||
18.07.2002, 13:50 | #23 | |||
Levi Beiträge: 43 |
Projekt: Neverwinter -
Naja, so leicht nachrechnen kann man das nicht, weil ich, wie du schon sagtest, nicht weiß wieviel ein Server-Paket enthält. Aber schätzen wir halt mal: Für die Postition brauchste schonmal 2*8 Byte schätz ich, dazu nochmal 2*8 Bytes für den Bewegungsvektor. Für Health und Mana dürften je 2 Byte reichen, für Schaden und Armor auch je 2. Für Experience nochmal 4 Byte, für die attribute nochmal 4*1 Byte, für den Skilltree auch ca. 4 Bytes, wenn sies gut anstellen. Dazu brauchst du noch 1 Byte, das den Status des Spielers angibt (Zaubert, Läuft, Kämpft). Dann sind wir bei 53 Bytes. Pro Item kommen nochmal locker 8 Byte dazu, die das Item eindeutig definiert, aber ich bezweifle dass die jedesmal übertragen werden, also lass ichs sie weg. Dadrauf kommt nochmal 1/4 Paritätsbits, damit fehler erkannt werden. Ohne Items, ohne Chat, ohne Fehlübertragungen die wiederholt werden müssen und ohne Items (die ja doch von Zeit zu zeit upgedated werden müssen) wären wir also bei ca. 66 Bytes. Und ich bin mir sicher dass das oben nur ein Teil der Infos ist die übertragen werden müssen, da kommen sicher noch Spezialeffekte dazu die auf dem Spieler liegen usw. 100 Bytes ca. sind also absolutes Minimum. Soo, du hast ISDN, also theoretisch 8KB upstream. 8KB/8 Spieler sind 1KB pro Spieler und Sekunde. Das heißt du kannst pro sekunde allerhöchstens 10 Updates fahren, glaubst du damit ist flüssiges Spiel möglich? Wenn du 10 Updates auf dem Bildschirm hast (sprich 10 fps), ist das flüssig? Und die 100 Bytes oben sind eine eher lächerliche Näherung, weil diese imaginäre Paket keinerlei Struktur hat. Normalerweise geht fast nochmal soviel für Struktur drauf. Ich schätz mal ca. 250 Bytes sind wahrscheinlich wesentlich näher an der Wahrheit als 100. Das heißt du bist bei 4 Updates/Sekunde. Als wünschenswert werden 20 Updates/Sekunde angesehen. |
|||
18.07.2002, 14:09 | #24 | |||
Levi Beiträge: 43 |
Projekt: Neverwinter -
Äh, so ganz versteh ich die Rechnung nicht, denn 1. Ist der Downstream ist wurscht, denn alle Pakete die der Server empfäng (Downstream) muss er auch an die Spieler wieder abschicken (Upstream), sonst hat die ganze Sache ja nix gebracht. Wenn nur der Server weiß wo die Spieler stehen, die Spieler selbst aber nicht, dann bringt das nicht viel, oder? 2. Mit 2 Spieler spielen meinte Bioware 1 Server und 1 Mitspieler, d.h. der Upstream geht komplett für den einen Mitspieler drauf, der der den Server macht wird direkt versorgt. 3. wieso kommst du von 28k auf einmal auf 14k? wenn jeder Client einen konstanten Upstream von 14k bräuchte könnte ein 56k-Modem ja 4 Spieler versorgen, nicht 2! Übrigens hab ich natürlich im meiner rechnung oben einen fehler gemacht, denn ich bin beim Paket nur von einem Spieler ausgegangen. Da aber in jedem Paket die Position aller anderen Spieler enthalten sein muss, nicht nur die von einem, kannst du alles was ich oben berechnet habe nochmal mal die Anzahl der Spieler-1 nehmen. Dann wären aber meine 250 byte übertrieben, ich nehm mal an, dass nicht alle infos von oben ständig übertragen werden. trotzdem denke ich, dass ein Paket in einem 8 Spieler-spiel weit über 300 byte groß sein dürfte, also sogar weniger als 4 Updates/Sekunde für ISDN. |
|||
18.07.2002, 15:00 | #25 | |||
Levi Beiträge: 43 |
Projekt: Neverwinter -
quote: Stimmt, aber meine Berechnung bezog sich bereits auf die optimierten Daten die der Server versenden MUSS um die Spieler up-to-date zu halten, nicht auf das was die Spieler an den Server senden. quote: EQ ist doch nen MMORPG, oder? Ich nehme an, dass die starke einschränkungen in bezug auf die aktualität der User eingehen. Aber z.B. Unreal-Engine-Spiele laufen absolut perfekt erst mit 25KB/Sekunde und Spieler! 10KB/Sekunde und Spieler sind standard im Inet. Ok, Unreal ist nen 3D-Shooter, also nicht wirklich zu vergleichen, dafür ist der Netcode aber wesentlich besser als der von NWN. quote: Hier irrst du! Genau wie bei ISDN hat ein 56k-Modem JEWEILS 56k zur verfügung, kann also gleichzeitig mit 56kbit saugen und uppen. Ich hab kanalgebündeltes ISDN, also 128kbit, und ich kann gleichzeitig mit 16kbyte/sekunde uploaden und downloaden. quote: Das kann man machen, vielleicht tun sies sogar, aber das wär extrem fehleranfällig. Ein Ruckler bei nem spieler, ein fehlerhaft übertragenes oder gedropptes Paket und schon sind die Spiele nicht mehr syncron, und werden es nicht mehr, bis du ein komplettes update passiert. quote: Siehe oben. Das würde ebenfals zu lag führen, in dem falle nicht wegen unausreichendem Upstream sondern asyncronen Informationen. Was passiert, wenn ein Spieler einen Bewegungsvektor an den Server geschickt hat, dann aber das spiel ruckelt, so dass er sich in der gewünschten Zeit nicht soweit bewegt, wie er es dem Server mitgeteilt hat? Das Spiel wird asyncron, so dass die Spieler in die Luft haun und trotzdem treffen, oder Leute durch die Gegend beamen sobald der Server ein Positionsupdate durchführt. Sprich: Das reduziert zwar den Upstream, führt aber seinerseits wieder zu lag anderer Art. quote: Jaa, die Rechnung zeig mir mal bitte... quote: Ja moment, die kämpfe laufen rundenbasierend, nicht das ganze System. Du kannst ja z.B. im Kampf schlagen und direkt weglaufen ohne auf deine nächste Aktion zu warten. Der Gegner trifft dich trotzdem als ob du noch direkt vor ihm stehen würdest, aber so oder so, die Positionen der Figuren bewegen sich nicht rundenbasieren. NWN ist ein echtzeit-System das ein rundenbasierendes Simuliert, und deswegen brauchst du schon ständige Updates, und zwar viele! Genausoviele wie bei einem 3D Shooter, nur dass 1. Die Pakete wahrscheinlich kleiner sind, weil keine (oder weniger) Informationen über Projektile übertragen werden müssen und 2. Bei einem RPG lag und ruckeln nicht so stark auffallen wie bei einem 3D-Shooter. |
|||
|