Autor |
|
Avenzius von Mythyria
Mage
Dabei seit: Juni 2003
Geschlecht:
Herkunft:
Beiträge: 249
|
|
Ich würde gerne eine richtige massenschlacht programm iern
erst sollen alle mitkämpfer aus deren zelle angedackelt kommen und dann irgendwann auf einander zurennen
doch wie programmier ich das???
__________________
Modding by me; Story by Gereon
An meiner Stelle würde ich sofort auf den Link klicken.
|
|
16.07.2003, 21:06 |
|
Hephaistos
Verschollen
Dabei seit: Februar 2003
Geschlecht:
Herkunft: Wien
Beiträge: 2102
|
|
Geht nur per Script. Ich hab das vor einiger Zeit selber probiert, aber dann wieder verworfen (zu schwer).
Garak hat vor langer Zeit mal was dazu gepostet. Schau mal mit der Suchfunktion.
Aber bevor du endtäuscht bist: es ist ziemlich aufwendig zum schreiben und verbraucht viel Leistung. Ich würde 10-20 Beteiligte für das Maximum halten, aber es gibt auch Gerüchte über Schlachten mit über 100 Kämpfern.
__________________
Die Dummheit der Menschen und das Weltall sind unendlich, wobei ich mir beim Weltall noch nicht sicher bin.
Albert Einstein
Wenn die Klügeren nachgeben, regiert Dummheit die Welt.
Marie von Ebner-Eschenbach
|
|
16.07.2003, 21:35 |
|
Avenzius von Mythyria
Mage
Dabei seit: Juni 2003
Geschlecht:
Herkunft:
Beiträge: 249
|
|
ich hab schon mit der suchfunktion gesucht kam aber nur was mit c&c raus
und 20 kämpfer pro partei würd mir erst mal reichen
vielleicht geht das aber auch einfacher indem ich einfach irgendwie zwei gilden habe und die sollen sich gegenseitig angreifen
dann muss ich nich jedem einzelnen sagen greif du den an
__________________
Modding by me; Story by Gereon
An meiner Stelle würde ich sofort auf den Link klicken.
|
|
16.07.2003, 21:48 |
|
Hephaistos
Verschollen
Dabei seit: Februar 2003
Geschlecht:
Herkunft: Wien
Beiträge: 2102
|
|
Garak weiß du diesem Thema besser bescheid, aber so weit ich mich erinnern kann funktioniert automatisches Angreifen nur, wenn daß Ziel der Spieler ist. NPC gegen NPC geht nur über Script und bei 20 gegen 20 wird das ein gewaltiges Script (mehrere 100 Zeilen).
__________________
Die Dummheit der Menschen und das Weltall sind unendlich, wobei ich mir beim Weltall noch nicht sicher bin.
Albert Einstein
Wenn die Klügeren nachgeben, regiert Dummheit die Welt.
Marie von Ebner-Eschenbach
|
|
16.07.2003, 22:13 |
|
Xen-Arien
Healer
Dabei seit: April 2003
Geschlecht:
Herkunft: Xen Pellegrin
Beiträge: 71
|
|
|
16.07.2003, 23:01 |
|
Hephaistos
Verschollen
Dabei seit: Februar 2003
Geschlecht:
Herkunft: Wien
Beiträge: 2102
|
|
Zitat: Vielleicht hilft dir das hier etwas:
http://forumsbb.ubi.com/messages/message...=tescs&id=zzmli
Ich hatte vor langer Zeit eine ähnliche Idee, aber aufgrund der Performance hab' ich es vorerst gelassen...
Mit zwei NPC's ist es noch übersichtlich, leider nimmt die Koplexität exponential (?) zu. Bei 3 gegen 3 reicht es nämlich nicht A1 gegen B1, A2 gegen B2 und A3 gegen B3 kämpfen zu lassen, sondern du mußt auch noch A1 - B2, A1 - B3, A2 - B1, A2 - B3, A3 - B1 und A3 - B2 gegen einander antreten lassen. Du siehst es ist bereits bei 3 gegen 3 recht umfangreich.
Edit:
@God Slayer: Soweit ich das verstanden habe will er, daß die Schlacht ohne die Beteiligung des Spielers abläuft Zitat: erst sollen alle mitkämpfer aus deren zelle angedackelt kommen und dann irgendwann auf einander zurennen
__________________
Die Dummheit der Menschen und das Weltall sind unendlich, wobei ich mir beim Weltall noch nicht sicher bin.
Albert Einstein
Wenn die Klügeren nachgeben, regiert Dummheit die Welt.
Marie von Ebner-Eschenbach
Dieser Beitrag wurde von Hephaistos am 16.07.2003, 23:32 Uhr editiert.
|
|
16.07.2003, 23:22 |
|
madmaxx
Ehrenmitglied
Dabei seit: Januar 2003
Geschlecht:
Herkunft:
Beiträge: 3257
|
|
Zitat: Original von Hephaistos
Mit zwei NPC's ist es noch übersichtlich, leider nimmt die Koplexität exponential (?) zu. Bei 3 gegen 3 reicht es nämlich nicht A1 gegen B1, A2 gegen B2 und A3 gegen B3 kämpfen zu lassen, sondern du mußt auch noch A1 - B2, A1 - B3, A2 - B1, A2 - B3, A3 - B1 und A3 - B2 gegen einander antreten lassen. Du siehst es ist bereits bei 3 gegen 3 recht umfangreich.
Kann man die Leute nicht Gruppen zuweisen?
__________________
"Die Flamme unsrer Väter wird nie erlöschen
sie lodert in uns auf Ewigkeiten
die Zeit steht kurz still, wir erinnern uns
mit stolzem Gefühl."
Das aktuelle TESCSKompendium & einiges mehr findet ihr hier
|
|
16.07.2003, 23:44 |
|
Xen-Arien
Healer
Dabei seit: April 2003
Geschlecht:
Herkunft: Xen Pellegrin
Beiträge: 71
|
|
@madmax: Alles schon probiert. Die zwei Gruppen definieren sich nur über ihr Verhältnis zum PC, nicht aber untereinander - leider. Die Idee mit den Escort-NPC hatte nur leider folgendes Problem (wenn ich mich richtig erinnere): Der PC den feindlichen NPC's immer als Primärziel angegeben, d.h. sie stürzen sich alle auf dich, auch wenn sie von den anderen NPC's vorher angegriffen werden. Spätestens wenn du in ihre Sicht- oder Reichweite kommst, ist dann leider finito mit der schönen Schlacht...
Wenn ich nachher noch ein wenig Zeit finde, werde ich's aber nochmal überprüfen.
__________________
Release: ER Landscape Trailer V.1.0
Dieser Beitrag wurde von Xen-Arien am 17.07.2003, 00:50 Uhr editiert.
|
|
17.07.2003, 00:41 |
|
madmaxx
Ehrenmitglied
Dabei seit: Januar 2003
Geschlecht:
Herkunft:
Beiträge: 3257
|
|
Ne Varibale, bei der immer 1 dazuaddiert wird, wenn jmd den PC angreift und wenn die z.B. bei 2 steht, wird ein anderer NPC angegriffen?
__________________
"Die Flamme unsrer Väter wird nie erlöschen
sie lodert in uns auf Ewigkeiten
die Zeit steht kurz still, wir erinnern uns
mit stolzem Gefühl."
Das aktuelle TESCSKompendium & einiges mehr findet ihr hier
|
|
17.07.2003, 00:48 |
|
Xen-Arien
Healer
Dabei seit: April 2003
Geschlecht:
Herkunft: Xen Pellegrin
Beiträge: 71
|
|
Interessante Idee, das müsste Garak oder Iladrion mal überdenken. Vielleicht lässt sich damit was anfangen - bin leider kein Script-Experte... *seufz*
Man müsste nur jedes weitere Ziel ins Script schreiben - und was passieren soll, wenn dieses Ziel ausgeschaltet ist. Dann stehen nämlich alle nur noch dumm herum, das Problem hatte ich auch schon...
__________________
Release: ER Landscape Trailer V.1.0
Dieser Beitrag wurde von Xen-Arien am 17.07.2003, 00:59 Uhr editiert.
|
|
17.07.2003, 00:58 |
|
Garak
Admin
Dabei seit: Juli 2002
Geschlecht:
Herkunft: Cardassia Prime
Beiträge: 9256
|
|
Gibt einiges, auf das man da achten muss...
Wichtig ist bei solchen schlachten, dass man die beteiligten npcs sinnvoll benennt, sonnst verliert man zu schnell die übersicht...
dank der mässigen ki ist offenes gelände vorzuziehen - schade, wenn die hälfte der beteiligten an irgend welchen kanten festhängen...
ansonsten ist es für die übersicht noch sinnvoll, den status der npcs zentral zu speichern (jeder meldet seinen tod an ein steuerscript). ist zwar nicht zwingend nötig, da die npcs sowieso nur in einer referenz existieren dürfen, hilft beim beobachten und debuggen aber ungemein...
da das "jeder testet jeden als potentielles ziel" in riesenscripten resultiert, sind unter umständen kleinere untergruppen sinnvoll (z.B. unterschiedliche Waffengattungen) - macht auch nen strategisch durchdachten Eindruck....
tests auf den nächstgelegenen gegner sollten unbedingt eingebaut werden - schon weil ein npc sich aus der schlacht ausklinkt, wenn er seinen Gegner nicht sieht. GetLOS dürfte aber bei der in der situation sowieso schon kritischen performance zu weiteren einbrüchen führen - wenn der npc seinen Gegner nicht findet, kann man das sicher über getsoundplaying ermitteln....
jedenfalls ein komplexes thema, das Massenschlachten...
__________________ drei mal dürft ihr raten, wer grade seine Signatur geschrottet hat...geht aber wieder - allerdings solltet Ihr noch die Finger von den Avataren lassen
|
|
17.07.2003, 06:03 |
|
Hephaistos
Verschollen
Dabei seit: Februar 2003
Geschlecht:
Herkunft: Wien
Beiträge: 2102
|
|
Zitat: Orginal von Garak:
tests auf den nächstgelegenen gegner sollten unbedingt eingebaut werden
Meinst du in etwa so:
short ms_entfernung
"A1"->StartCombat "B1"
set ms_entfernung to ("A1" -> getdistance "B1"); Diese Zeile ist Falsch, oder?
if ( "A1" -> getdistance "B2" < ms_entfernung )
.."A1"->StopCombat
..set ms_entfernung to ("A1" -> getdistance "B2"); siehe oben
.."A1"->StartCombat "B2"
endif
if ( "A1" -> getdistance "B3" < ms_entfernung )
.."A1"->StopCombat
..set ms_entfernung to ("A1" -> getdistance "B3"); siehe oben
.."A1"->StartCombat "B3"
endif
.
.
.
.
Um ein ständiges Wechseln des Gegners zu vermeiden wäre es eigentlich besser den Wechsel nur zu vollziehen, wenn der neue Gegener um einen bestimmten Wert näher ist:
if ( "A1" -> getdistance "B2" < (ms_entfernung - 25) )
Hab ich irgendwo einen Denkfehler und/oder was hab ich vergessen?
__________________
Die Dummheit der Menschen und das Weltall sind unendlich, wobei ich mir beim Weltall noch nicht sicher bin.
Albert Einstein
Wenn die Klügeren nachgeben, regiert Dummheit die Welt.
Marie von Ebner-Eschenbach
Dieser Beitrag wurde von Hephaistos am 17.07.2003, 08:24 Uhr editiert.
|
|
17.07.2003, 08:23 |
|
Garak
Admin
Dabei seit: Juli 2002
Geschlecht:
Herkunft: Cardassia Prime
Beiträge: 9256
|
|
wüsste nicht, warum die zeile falsch sein sollte, Hephaistos - allerdings leg ich die individuelle Gegnerwahl schon desshalb auf den NPC, weil das tipparbeit spart
was deinen vorschlag mit dem mindestabstand zum Gegnerwechsel angeht: scheint durchaus vernünftig, allerdings hab ich bei meinen versuchen nie einen "unentschlossenheitseffekt" bemerkt. 25 ist im spiel allerdings eine dermassen kurze distanz, dass die abfrage damit kaum schwankungen puffern könnte!
allerdings solltest Du bei der gegnerwahl nur abstände zu noch lebenden npc's checken, sonst bleiben Deine Kämpfer eventuell bei der Leiche stehen
__________________ drei mal dürft ihr raten, wer grade seine Signatur geschrottet hat...geht aber wieder - allerdings solltet Ihr noch die Finger von den Avataren lassen
|
|
17.07.2003, 12:54 |
|
Hephaistos
Verschollen
Dabei seit: Februar 2003
Geschlecht:
Herkunft: Wien
Beiträge: 2102
|
|
Zitat: allerdings solltest Du bei der gegnerwahl nur abstände zu noch lebenden npc's checken, sonst bleiben Deine Kämpfer eventuell bei der Leiche stehen
Gut das du darauf hinweist, das hätte ich vermutlich übersehen.
Vielleicht probier ich doch noch mal einen Anlauf zu einer kleinen Schlacht.
Wo ich gerade so schön beim Pläne schmieden bin: Wie würdest du das lösen, daß er weiß wann der Kampf vorbei ist?
Mir fällt nur dieser Weg ein, aber der ist bei einer größeren Anzahl von Kämpfern ziemlich umständlich:
if ( "B1"->Gethealth <= 0 )
..if ( "B2"->Gethealth <= 0 )
....if ( "B3"->Gethealth <= 0 )
......if ( ms_eintrag == 0)
........journal ms_schlacht 10
........set ms_eintrag to 1
......endif
....endif
..endif
endif
Außerdem darf díeser Part nur einmal pro Gruppe vorhanden sein, weil sonst für jeden Kämpfer der Siegergruppe ein Eintrag kommt.
__________________
Die Dummheit der Menschen und das Weltall sind unendlich, wobei ich mir beim Weltall noch nicht sicher bin.
Albert Einstein
Wenn die Klügeren nachgeben, regiert Dummheit die Welt.
Marie von Ebner-Eschenbach
|
|
17.07.2003, 13:48 |
|
Avenzius von Mythyria
Mage
Dabei seit: Juni 2003
Geschlecht:
Herkunft:
Beiträge: 249
|
|
hui
das klingt ziemlich kompliziert
hab im scripten noch nicht viel ahnung
ich werd aber mal das mit dem escort probieren
edit: mir fällt grad auf ich weiß gar net wie des geht
wie is des mit dem target (id eingeben oder was? was is wenn mehrere npcs die id haben?)
__________________
Modding by me; Story by Gereon
An meiner Stelle würde ich sofort auf den Link klicken.
Dieser Beitrag wurde von Avenzius von Mythyria am 17.07.2003, 20:16 Uhr editiert.
|
|
17.07.2003, 20:11 |
|
Garak
Admin
Dabei seit: Juli 2002
Geschlecht:
Herkunft: Cardassia Prime
Beiträge: 9256
|
|
Zitat: Original von Avenzius von Mythyria
wie is des mit dem target (id eingeben oder was? was is wenn mehrere npcs die id haben?)
dann geht der Befehl an die erste instanz in der liste - desshalb sollte man aus scripten heraus nie objekte ansprechen, von denen es mehrere instanzen gibt!
__________________ drei mal dürft ihr raten, wer grade seine Signatur geschrottet hat...geht aber wieder - allerdings solltet Ihr noch die Finger von den Avataren lassen
|
|
17.07.2003, 22:03 |
|
Hephaistos
Verschollen
Dabei seit: Februar 2003
Geschlecht:
Herkunft: Wien
Beiträge: 2102
|
|
So ich habe es jetzt versucht die Theorie von oben in die Praxis umzusetzen, leider ohne Erfolg. Das Problem ist das der NPC (br_b1) die Waffe zieht, auf das erste Ziel zuläuf, stehen bleibt, die Waffe wegsteckt und von da an immer abwechselnd die Waffe zieht und wegsteckt.
Ursprünglich dachte ich das wäre darauf zurück zu führen, daß sich nach jeder Entfernungsabfrage ein Stopcombat befindet. Daher habe ich die Var. br_gegner_b1 eingeführt um zuverhindern das der Gegnerwechsel stattfindet, wenn sich der Gegner nicht ändert. Das hat aber auch nichts gebracht, jetzt bin ich ratlos.
Begin br_schlacht_6-12_b1
float br_entfernung_b1
short br_gegner_b1
short br_verloren
set br_entfernung_b1 to ( getdistance "br_a1" + 150 )
;--------------------------------------------------------------------------------------------------------------------------
if ( "br_a1"->gethealth > 0 )
..if ( br_gegner_b1 != 1)
....if ( getdistance "br_a1" < (br_entfernung_b1 - 100) )
......StopCombat
......StartCombat "br_a1"
......set br_entfernung_b1 to ( getdistance "br_a1")
......set br_gegner_b1 to 1
....endif
..endif
endif
if ( "br_a1"->gethealth <= 0 )
..if ( br_gegner_b1 == 1)
....set br_entfernung_b1 to 32000
..endif
endif
;--------------------------------------------------------------------------------------------------------------------------
if ( "br_a2"->gethealth > 0 )
..if ( br_gegner_b1 != 2)
....if ( getdistance "br_a2" < (br_entfernung_b1 - 100) )
......StopCombat
......StartCombat "br_a2"
......set br_entfernung_b1 to ( getdistance "br_a2")
......set br_gegner_b1 to 2
....endif
..endif
endif
if ( "br_a2"->gethealth <= 0 )
..if ( br_gegner_b1 == 2)
....set br_entfernung_b1 to 32000
..endif
endif
;--------------------------------------------------------------------------------------------------------------------------
if ( "br_a3"->gethealth > 0 )
..if ( br_gegner_b1 != 3)
....if ( getdistance "br_a3" < (br_entfernung_b1 - 100) )
......StopCombat
......StartCombat "br_a3"
......set br_entfernung_b1 to ( getdistance "br_a3")
......set br_gegner_b1 to 3
....endif
..endif
endif
if ( "br_a3"->gethealth <= 0 )
..if ( br_gegner_b1 == 3)
....set br_entfernung_b1 to 32000
..endif
endif
;--------------------------------------------------------------------------------------------------------------------------
if ( "br_a4"->gethealth > 0 )
..if ( br_gegner_b1 != 4)
....if ( getdistance "br_a4" < (br_entfernung_b1 - 100) )
......StopCombat
......StartCombat "br_a4"
......set br_entfernung_b1 to ( getdistance "br_a4")
......set br_gegner_b1 to 4
....endif
..endif
endif
if ( "br_a4"->gethealth <= 0 )
..if ( br_gegner_b1 == 4)
....set br_entfernung_b1 to 32000
..endif
endif
;--------------------------------------------------------------------------------------------------------------------------
if ( "br_a5"->gethealth > 0 )
..if ( br_gegner_b1 != 5)
....if ( getdistance "br_a5" < (br_entfernung_b1 - 100) )
......StopCombat
......StartCombat "br_a5"
......set br_entfernung_b1 to ( getdistance "br_a5")
......set br_gegner_b1 to 5
....endif
..endif
endif
if ( "br_a5"->gethealth <= 0 )
..if ( br_gegner_b1 == 5)
....set br_entfernung_b1 to 32000
..endif
endif
;--------------------------------------------------------------------------------------------------------------------------
if ( "br_a6"->gethealth > 0 )
..if ( br_gegner_b1 != 6)
....if ( getdistance "br_a6" < (br_entfernung_b1 - 100) )
......StopCombat
......StartCombat "br_a6"
......set br_entfernung_b1 to ( getdistance "br_a6")
......set br_gegner_b1 to 6
....endif
..endif
endif
if ( "br_a6"->gethealth <= 0 )
..if ( br_gegner_b1 == 6)
....set br_entfernung_b1 to 32000
..endif
endif
;--------------------------------------------------------------------------------------------------------------------------
if ( "br_a1"->Gethealth <= 0 )
..if ( "br_a2"->Gethealth <= 0 )
....if ( "br_a3"->Gethealth <= 0 )
......if ( "br_a4"->Gethealth <= 0 )
........if ( "br_a5"->Gethealth <= 0 )
..........if ( "br_a6"->Gethealth <= 0 )
............set br_verloren to 1
............MessageBox, "Test erfolgreich beendet"
..........endif
........endif
......endif
....endif
..endif
endif
end
Sorry für die Länge des Post.
__________________
Die Dummheit der Menschen und das Weltall sind unendlich, wobei ich mir beim Weltall noch nicht sicher bin.
Albert Einstein
Wenn die Klügeren nachgeben, regiert Dummheit die Welt.
Marie von Ebner-Eschenbach
|
|
30.07.2003, 15:59 |
|
Garak
Admin
Dabei seit: Juli 2002
Geschlecht:
Herkunft: Cardassia Prime
Beiträge: 9256
|
|
eigentlich sollte es daran liegen - klassische debugmethode: leg in die ifnetster noch ein paar messageboxen, die anzeigen, ob ein block ausgeführt wird oder nicht....
__________________ drei mal dürft ihr raten, wer grade seine Signatur geschrottet hat...geht aber wieder - allerdings solltet Ihr noch die Finger von den Avataren lassen
|
|
30.07.2003, 16:57 |
|
Avenzius von Mythyria
Mage
Dabei seit: Juni 2003
Geschlecht:
Herkunft:
Beiträge: 249
|
|
|
30.07.2003, 20:32 |
|
Hephaistos
Verschollen
Dabei seit: Februar 2003
Geschlecht:
Herkunft: Wien
Beiträge: 2102
|
|
Zitat: das mit escort funktioniert ganz gut
Das Escort funktioniert weiß ich, aber ich will eine kleine Schlacht bei der der PC nur Zuschauer ist.
__________________
Die Dummheit der Menschen und das Weltall sind unendlich, wobei ich mir beim Weltall noch nicht sicher bin.
Albert Einstein
Wenn die Klügeren nachgeben, regiert Dummheit die Welt.
Marie von Ebner-Eschenbach
|
|
30.07.2003, 23:20 |
|
|