Schaden beim Schlagen zufügen

Posted By: xxxxxxx

Schaden beim Schlagen zufügen - 01/09/11 18:51

Hallo,
ich will in meinem Spiel mit einer Schlagwaffe zuschlagen, aber mir fällt nicht ein wie man alle ENTITIES innerhalb des Schlages erkennen kann. Die Lösung die ich bis jetzt hatte taugt nicht viel(c_trace überkreuz).
Posted By: the_clown

Re: Schaden beim Schlagen zufügen - 01/09/11 19:03

Versuch's damit:

c_trace während der gesamten Animation zwischen dem Griff der Waffe und dem oberen Ende - also bei einem Schwert zum Beispiel vom Griff zur Klingenspitze.
Posted By: xxxxxxx

Re: Schaden beim Schlagen zufügen - 01/09/11 19:32

Deine Variante ist wie meine eher auf Gegner die Ungefähr genauso gross sind wie der Charakter eingestellt sobald der Charakter gegen etwas sehr kleines kämpft kann es sein das c_trace gar nicht trifft(oder wenn ein riesen gegner auf den Charakter einschlägt). Ich könnte mir eine Lösung mit einer Art Region vorstellen. Also ist es möglich jeden Punkt einer Region einzeld zu Verändern, dass sie kein Quader aus vecMin/Max(oder so) mehr ist? confused
Posted By: xxxxxxx

Re: Schaden beim Schlagen zufügen - 01/10/11 16:37

Mir kam eine Idee wie man das machen könnte, aber dafür müsste ich wissen ob man herausfinden kann ob zwei Objekte Kollidieren.
Posted By: JoGa

Re: Schaden beim Schlagen zufügen - 01/10/11 16:53

ich hab das per scan gelöst - klappt bei rpg-klonen von diablo sehr gut (muss nicht sehr genau sein).
Ist, denke ich, schneller als x-mal zwischen der Waffe zu tracen - einmal scan und fertig.
Sollte es in der Egoperspektive sein, ist das auch vorteilshaft.
Bei naher Perspektive (Assassine Creed) ist vll. das tracen die bessere Lösung.
Bei Spielen wie DotA-klonen, diablo, Dungeonsiege-klonen, also typische Hakc and Slay - spielen ist der Scan meiner Erfahrung nach besser.
Posted By: Logitek

Re: Schaden beim Schlagen zufügen - 01/10/11 16:58

Wenn man z.B. mit der Faust auf einen Gegner schlägt, kann man es so machen, dass ein unsichtbares Objekt in Richtung Faustschlag geschossen wird. Nur eine bestimmte Entfernung, also soweit die Faust reicht. Trifft das Objekt den Gegner, können Lebenspunkte abgezogen werden. Ist aber auch eher für First Person.
Posted By: xxxxxxx

Re: Schaden beim Schlagen zufügen - 01/10/11 17:16

Jetzt tut sich das problem auf zb. bei einem Laserstrahl wenn ich da die Ausrichtung ändere will ich nicht nur alle Feinde bei der neuen Ausrichtung verletzen sondern auch die dazwischen!(ich glaube c_scan liefert nur einmal den You-pointer) Dafür müsste ich wissen ob man eine Kollision zwischen zwei Objekten feststellen kann.Ich will ein unsichtbares Würfelmodell mit mit Bones so animieren das die Ecken immer an der Position der alten, der neuen Spitze und des alten, des neuen Griffs sind also die ungefähre Bewegung. Danach noch c_updatehull und dann sollte man auf Kollision überprüfen. JoGa deine Lösung kann ich wahrscheinlich für Haus- und Hofgegner verwenden. Loditek deine Lösung ist wie du gesagt hast auf Faust-Angriffe ausgerichte(oder Stich) ich lass meine Schlagwaffe lieber schwingen.

Wie kann man herausfinden ob zwei objekte kollidieren (ohne c_move, trace und konsorten)
Posted By: fogman

Re: Schaden beim Schlagen zufügen - 01/10/11 18:05

Schau Dir mal ENABLE_DETECT bzw. event_detect an, vielleicht ist das etwas für Dich! Die Gegner brauchen dann eine ID, die sie in einem skill speichern. Z.B.:

my.skill1 = 666;

666 ist in diesem fall die "Typnummer", alle Objekte mit 666 in skill1 sind also Gegner.
Im event des Schwerts fragst Du ab, on die gefundene Entity ein Feind ist:

if(you.skill1 == 666)
{
you.health-= 10;
...
...
}
Posted By: Rasch

Re: Schaden beim Schlagen zufügen - 01/10/11 18:05

Du könntest tatsächlich c_scan verwenden und am bei der Hälfte der Animation 1x In einem gewissen Bereich vor deinem Charakter scannen. Setze bei deinem CHarakter die EVENT_DETECT Flag. Diese wird dann pro gescanntem Gegner ausgelöst. Damit kannst du dann allen Schaden zufügen laugh

Etwa so.

Code:
function detect_event() 
{
	if (event_type == EVENT_DETECT) 
	{
		if(you.gegner == 1) // Bsp. Um nur etwas zu tun wenn es ein Gegner ist.
		{
			you.health -= 25; // Ziehe dir Leben ab (je nach skill ^^)
			ent_playsound(you, sword_hit, 75);
		}
	}
}

function zuschlagen()
{
	var animation_perc = 0; // Animations Fortschritt

	while(animation_perc < 50)
	{
		animation_perc += 10*time_step;
      		ent_animate(me,"attack",animation_perc,ANM_CYCLE);

		wait(1);
	}

	c_scan(player.x, player.pan, vector(120,120,500),SCAN_ENTS|IGNORE_ME); // Hier checken

	while(animation_perc < 100)
	{
		animation_perc += 10*time_step;
      		ent_animate(me,"attack",animation_perc,ANM_CYCLE);

		wait(1);
	}
}

action spieler()
{
	player = my;

	my.emask |= ENABLE_DETECT;
	my.event = scan_event;
}



Natürlich kommt es jetzt auf dein Script an. Aber ich denke so könnte das gehen laugh
Posted By: xxxxxxx

Re: Schaden beim Schlagen zufügen - 01/10/11 18:55

Nun fogman ich benutze bereits einen Skill um das Team festzulegen. Rasch ich werde deinen Tipp bei allen Gegnern (und vieleicht Maincharakter sofern ich nicht genaueres als c_scan kriege) benutzen. An Beide: Ich versuche möglichst genaue Angriffe auszu fuhren jedenfalls beim M.C. deshald lasse ich lieber die finger von c_scan(weil es teilweise sehr schwer ist Genauigkeit von scan breite position ect. bei unterschiedlichen Frameraten zu bestimmen) sofern ich nicts besseres finde.

Habt ihr irgenteine Lösung um Kollision zu überprüfen?
(Weitere c_scan Ideen sind auch erwünscht mann kann ja nie wissen vofür man noch brauchen kann.)
Posted By: Otter

Re: Schaden beim Schlagen zufügen - 01/10/11 19:37

Hi!

Probiers mit einer unsichbaren Kugel, die an der spitze der klinge klebt.
Der player ignoriert Flag2 (welches du der kugel gibst) und der gegner reagiert mit:
my.emask |= (ENABLE_IMPACT | ENABLE_ENTITY);
my.event = gegner_react;

.... auf die berührung
Rein theoretisch sollte das klappen.

... rein theoretisch wink

mfg
OTTER
Posted By: JoGa

Re: Schaden beim Schlagen zufügen - 01/10/11 22:11

"(weil es teilweise sehr schwer ist Genauigkeit von scan breite position ect. bei unterschiedlichen Frameraten zu bestimmen)"
hö, das versteh ich nicht. Bei mir hat das 1A mit c-scan funktioniert. Wenn ich danach genauere Entfernungen gebraucht habe, hab ich das dank c_scan's you-pointer mit vec_dist gemacht. Und bei benötigter Kollisionserkennung dann halt noch n trace zum youpointer geschossen.
Ist schwierig für uns, eine geeignete Lösung zu finden, sag doch mal für was für eine Art von Spiel es sich handelt oder so.
Das mit der Kugel von Otter ist auch ne gute Idee. Es gibt viele Wege nach Rom - kommt auf die genauigkeit an, die du für dein Spiel haben willst und die Resourcen, die du für das Berechnen der Kollision freigeben willst.
Posted By: xxxxxxx

Re: Schaden beim Schlagen zufügen - 01/11/11 16:26

Ich hatte an eine änliche Spielart wie bei Prince of Persha(definitv falsch geschrieben) gedacht nur dass die Fläche grösser ist und man keinem "Weg" folgen muss.
Wenn ihr kein Price of Persha kennt:
Man folgt einer Art Weg und kann die unterschidlichsten Kombos anwenden.
Also sehr genaue Kollision.

PS: Diese Kugel Idee von Otter konnte ich noch nicht ausprobieren(Warum musste die Schule wieder anfanden???). Klingt aber vielversprechend. Dazu noch eine Frage:
Gibt es eine möglichkeit bei c_move, dass er nur Kollision-Events auslöst und einfach weiter macht, also nicht beim ersten Objekt stoppt?
Posted By: xxxxxxx

Re: Schaden beim Schlagen zufügen - 01/11/11 18:10

Juhuu!!! Es Klappt genau geht es kaum noch: Ich hab Otters Lösung genommen nur mit einem Quader der genau auf die Bewegung meiner Attacke angepasst wird und einen minimalen Tick bewegt wird. Danke an alle die so nett waren mir bei meinem Problem zu helfen!!!

Aber Jetzt tut sich das Problem auf bei einem Laserstrahl das zwei ENTITIES in den Bereich kommen und der c_move nur bei einem ein Event auslöst. Ich bewege mein block nur ganz wenig um das Event auszulösen. Sollte es dieses Problem geben: wie kann man es verhindern(am besten ohne c_move x mal zu wiederholen)?
© 2024 lite-C Forums