World of Gothic Archiv
Alle Beiträge von Levi
Seite 1 von 2  1  2 
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:
Zitat von gReEn_bLoOd
nö also hab schon zu 6 lagfrei gespielt also von daher ;) ausserdem war es ursprünglich nur für lan ... soll ja auch nicht tag und nacht laufen halt nur zum fun wenn jemand von uns bock hat mit nen paar kumpelz zu zocken ne =D


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:
Zitat von Gawain15
Ja schon aber warum einfach wenns auch kompliziert geht? :) Ich bin davon ausgegangen das er mehrere Worte verwenden möchte also Kellner, Ober, Bedienung etc. und dann muss er ja auf alles hören, dann musste ja nur die If abfrage mit oder (||) erweitern... also der einfachheit halber habe ich es gleich schwieriger gemacht... du merkst ich versuche deiner Frage auszuweichen :) Aber ich dneke das bischen Arbeit wird den Compi schon nicht umbringen.


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:
Zitat von LightHawk

Ich hab ISDN und konnte D2 und DS meist Lagfrei mit meheren Spielen.



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:
Zitat von Paleswift

Nein.. der server empfängt, bearbeitet, optimiert(hoffentlich) und sendet. Aber nicht jedes Paket so wie es ist.



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:

Oki.. ich hab das allerdings anders verstanden. Wäre übrigens auch etwas arg viel verbratene Leitung für einen einzigen Spieler, deswegen kann ich das irgendwie nicht glauben. (EQ kam mit weniger als 2 kB pro sekunde aus (komplett))



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:

Ich sagte, ich geh davon aus, dass der Client etwa genausoviel sendet wie er empfängt. Ein 56 k Modem hat 56 k komplett (nicht 56k up und 56k down - sonst wäre das schneller als ISDN).
2 Spieler heisst 56k /2 = 28k



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:

hmm.. Also.. du hast gerechnet, dass da dauernd der aktuelle Status des Spielers übermittelt wird. Sicher dass das so ist? Das wäre ziemlich ungeschickt. Im Endeffekt musst du nur einmal die Daten eines Spielers übermitteln, und danach nur noch die Änderungen.



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:

Ausserdem: Die Bewegungen sollten das Hauptsächliche sein, und da reichts, wenn du dem Server den Aktuellen Verktor schickst, und den übrigen Clients auch, und nur einmal alle 300 Millisekunden einen Positionsabgleich fährst..



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:

Und wenn du das dir genau überlegst.. 1,75 k sind nen haufen Zeug..
das sind 1750+ Bytes und ich komm auf etwa 500 Bytes, die Pro Sekunde vom Client erzeugt werden.. Übermittelt werden müssen allerdings etwas mehr.. Das wären dann Anzahl der (Spieler-1) * 300 Byte.. etwa.
Und da ist alles drinnen - und noch nm biserl Platz für Sachen die ich nicht bedacht habe. Das heisst, dass wir mit 6 Spielern auf alle Fälle noch hinkommen sollten.



Jaa, die Rechnung zeig mir mal bitte...

quote:

P.S.: Wie oft meinst du werden alle anderen Spieler pro Sekunde über deine Aktionen benachrichtigt? Garantiert nicht so oft wie bei einem 3D Shooter, oder?
(Zu bedenken bleibt, dass wir hier ein Rundenbasiertes System haben, und nur immer eine Aktion gleichzeitig machen können)



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.
Seite 1 von 2  1  2