Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
03.01.2001, 15:09
Thec



Hi!

Hab ein kleines Problem. Ich will erreichen, dass wenn der Player beispielsweise von einer Rakete getroffen wird ein paar Meter weggeschleudert wird. Das gleiche soll bei allen anderen Waffen auch passieren, jedoch nicht so stark, d. h. ne MP5 soll einen nur leicht wegdrücken. Außerdem sollen alle Waffen Rückstoß haben. Wie kann ich das erreichen?

--

zum Seitenanfang zum Seitenende Profil || Suche
001
03.01.2001, 16:06
icher



mhhh...ich rate einfach mal drauflos: wie wärs, wenn du dir ma den code vom trigger_push (?) ankuckst? kA obs das is, aber ich hätte da angefangen. sorry, ich würde kucken, hab aber gerad das sdk net da.

--

icher - ichers Planet | Merlins-Net | 193966768

no matter where the sun goes down
no matter if it really happens..
all those deficiencies satisfied in dreams..

zum Seitenanfang zum Seitenende Profil || Suche
002
03.01.2001, 18:22
IH82W8



Wie wärs damit, einfach seine Geschwindigkeit zu erhöhen?
als Richtung nimmst du den negativen Vektor player->explosion (oder explosion->player).
Zur besseren Geschwindigkeitskontrolle würde ich ihn zum Einheitsvektor machen und mit der gewünschten Geschwindigkeit multiplizieren.
Addiere nun einfach die Geschwindigkeitsvektoren. Ich wünsche allen einen schönen Flug.

IH82W8
www.starshipmod.com

--

zum Seitenanfang zum Seitenende Profil || Suche
003
03.01.2001, 18:32
Another1



Jo, das sollte klappen!

--

Another1

...relaxing..atm =)
... und Schweiz suckt!

zum Seitenanfang zum Seitenende Profil || Suche
004
03.01.2001, 18:48
Thec



öhhm...könntest du das mal mit sourcecode etwas erklären? ich bin noch nicht so der powercoder und weiss nicht wie ich das jetzt umsetzen soll.

danke!

--

zum Seitenanfang zum Seitenende Profil || Suche
005
03.01.2001, 18:57
BloodyHarry



Könntet ihr das ganze bitte nochmal für "dumme" Newbies wiederholen? (auf deutsch bitte nicht so ein Fach-Chinesisch *bitte*)

--

--< BloodyHarry >--

zum Seitenanfang zum Seitenende Profil || Suche
006
03.01.2001, 19:21
IH82W8



Ok, da ich gleich weg muss, zeige ichs euch an einem kleinen Beispiel:
ihr habt den Standort der Explosion (über die Rakete): pev->origin
und die Position des Spielers: m_pPlayer->pev->origin

Vector2D vec2LineOfSight ; // ich zeige das ganze mal nur im 2dimensionalen, wenn ihr wollt, nehmt halt die 3.dimension(z) dazu..

vec2LineOfSight = ( pev->origin - m_pPlayer->pev->origin ).Make2D();
vec2LineOfSight = vec2LineOfSight.Normalize();

m_pPlayer->pev->velocity.x -= vec2LineOfSight.x * iSpeed;
m_pPlayer->pev->velocity.y -= vec2LineOfSight.y * iSpeed;

Damit sollte der Spieler, der die Rakete abgefeuert hat (!!!), einen kleinen Schub erhalten..
Was jetzt für euch noch zu tun bleibt, ist, m_pPlayer zu ersetzen. Findet dazu raus, wer sich in der Nähe befindet und schubst denjenigen herum ;)
Also, viel Spass beim Coden, falls es Fragen gibt, einfach posten!

IH82W8
www.starshipmod.com

--

zum Seitenanfang zum Seitenende Profil || Suche
007
03.01.2001, 19:48
Another1



naja, es geht auch dreimal so einfach:

m_pPlayer->pev->velocity = m_pPlayer->pev->velocity + (( -pev->origin + m_pPlayer->pev->origin ) * 200);
das lässt den spieler mit 200 (halflife) sachen von der explosion wegschleudern!

--

Another1

...relaxing..atm =)
... und Schweiz suckt!

zum Seitenanfang zum Seitenende Profil || Suche
008
03.01.2001, 20:42
apfelkorn



noch einfacher:
in der fire-funktion das hier einbauen:

Quellcode:
float fl_wieschnelldarfsdennsein = 2000; // Das gibt Gummi!

m_pPlayer->pev->velocity = m_pPlayer->pev->velocity - gpGlobals->v_forward * fl_wieschnelldarfsdennsein;

--

zum Seitenanfang zum Seitenende Profil || Suche
009
03.01.2001, 20:58
BloodyHarry



*lol*

--

--< BloodyHarry >--

zum Seitenanfang zum Seitenende Profil || Suche
010
03.01.2001, 21:01
DarKnight



2000? WOW - muss ich mal ausprobieren! *ggg*

--

void CHudSayText :: EnsureTextFitsInOneLineAndWrapIfHaveTo( int line ) -- Aja?

zum Seitenanfang zum Seitenende Profil || Suche
011
03.01.2001, 23:00
IH82W8



ok, ich wollte es übersichtlich machen..
@apfelkorn: das lässt den Spieler nur zurückfliegen (unabhängig von der Richtung der Explosion)

--

zum Seitenanfang zum Seitenende Profil || Suche
012
04.01.2001, 04:03
Another1



@apfelkorn: außerdem musste vorher noch gpGlobals initialisieren, mit UTIL_MakeVectors, ich würd immer noch meine methode bevorzugen, außerdem geht speed > 2000 nich =)

--

Another1

...relaxing..atm =)
... und Schweiz suckt!

zum Seitenanfang zum Seitenende Profil || Suche
013
04.01.2001, 11:01
IH82W8



hm, ok.. nur eines: ich würde den Vektor trotzdem vorher noch "normalisieren", da der Spieler sonst umso schneller ist, je weiter er von der Explosion weg steht. Ich denke, daß wir uns darauf einigen können ;)

P.S.:Den Effekt könnte man noch umdrehen, daß je weiter man wegsteht, desto weniger Schub bekommt man...

--

zum Seitenanfang zum Seitenende Profil || Suche
014
04.01.2001, 11:51
Thec



so, ich habs ausprobiert. mit diesem code hier
Quellcode:
m_pPlayer->pev->velocity = m_pPlayer->pev->velocity + (( -pev->origin + m_pPlayer->pev->origin ) * 200);

wird man angezogen, also hab ich das plus vor der klammer zu nem minus gemacht, dann wird man abgestoßen. jetzt habe ich aber das problem, dass der player von der Rakete abgestoßen wird und nicht von der Explosion. Ich schätze mal, dass es daran liegt, dass ich den code in die Primary Attack Funktion eingefügt habe. So, wenn ich den Code jetzt in CRpgRocket::RocketTouch
einfügen, dann hätte ich das Problem, dass die Klasse CRpgRocket zur Klasse CGrenade "gehört" und nicht zur CBasePlayerWeapon. D. h. der Compiler kennt in RocketTouch keinen m_pPlayer, kein velocity, kein origin usw...

Was kann ich denn jetzt machen, dass der Player von Explosion weggedrückt wird, ebenso wie alle Gegner?

Thx

Thec

PS. Ich hab mal das erste Minuszeichen in der Klammer weggemacht, is auch lustig, der Player fliegt der Rakete hinterer =)

--

zum Seitenanfang zum Seitenende Profil || Suche
015
04.01.2001, 15:01
Another1



mmh, dann such mal in CGrenade::Explosion und schaue von da wie der code weitergeht (e.g: bis zur eigentlichen explosion alle funktions aufrufe verfolgen, du dürftest dann in einer while(.... = UTIL_FindEntityInSphere(...)) { .... }; schleife landen, die einfach alle entities durchtestet die von der explosion beinflusst werden, tu da einfach den code hin, sagen wir mal, das dort getesteten enties werden in CBaseEntity *pEntity; gespeichert, dann tu einfach diesen code dahin:
CBaseEntity *pRocket = HierNochEinenCBaseEntityPointerAufDieRocketEinfügen (wahrscheinlich als pevAttacker übergeben);
if(pEntity && pEntity->IsPlayer() && pRocket && FClassnameIs(pRocket,"rpgrocketOderWasImmerDerCRPGRocketClassnameIs")
{
lass den spieler hier wegfliegen, pointer auf spieler is pEntity, und die rocket is pRocket
};

--

Another1

...relaxing..atm =)
... und Schweiz suckt!

zum Seitenanfang zum Seitenende Profil || Suche
016
04.01.2001, 15:56
Thec



hm, erstens gibts bei mir keine funktion, die CGrenade::Explosion heisst, zweitens gibts in der kompletten ggrenade.cpp nur eine einzige while schleife und die ist in der funktion: CGrenade :: UseSatchelCharges

hab das sdk 2.0...

--

zum Seitenanfang zum Seitenende Profil || Suche
017
04.01.2001, 18:47
Another1



mmh, bist 'n bissle blind (sorry =), aber ich hab se gefunden:
void CGrenade::Explode( TraceResult *pTrace, int bitsDamageType )
heist se genau! (ein bißchen fantasie kann ja wohl sein, ich schau ja auch nit im SDK nach wenn ich poste, is alles aus meinem (mehr oder weniger großem) Hirn =)

und die ruft dann "RadiusDamage ( pev, pevOwner, pev->dmg, CLASS_NONE, bitsDamageType );" auf, vielleicht schonmal die 3 weißen Editboxen oben in MSVC entdeckt?
ganz links classenname (leer für globale functionen und definitionen, z.b um dann ganz rechts RadiusDamage zu finden =) eingeben (eg: CGrenade) und ganz rechts den functionsname (eg:explode), ggf enter und schon biste da, wo de sein solltes. Is echt nützlich!

--

Another1

...relaxing..atm =)
... und Schweiz suckt!

zum Seitenanfang zum Seitenende Profil || Suche
018
04.01.2001, 23:25
Prophyle



Lustig...ich hab gerade genau dasselbe gecoded, in der CBaseEntity::FireBullets( da hat man dann ja eh den Schussvector ).
Du wirst mit Monstern Probleme bekommen( die haben übrigens pev->movetype=MOVETYPE_STEP ), weil die sich nicht an pev->velocity orientieren, sondern du musst sie mit UTIL_SetOrigin(...) versetzen. Ich glaube aber, dass das ein Prob aufwerfen könnte: Steckt dann das Monster in der Mauer drin, oder wird das gerade durch UTIL_SetOrigin unterbunden, muss ich noch testen. Auf jeden Fall musst du eine Sperre für ENTs mit MOVETYPE_NONE bzw. SOLID_NOT und SOLID_BSP machen!

--

Prophyle, Coder beim SGT: http://mod.famkos.de.
Delphi, C++, Qt

zum Seitenanfang zum Seitenende Profil || Suche
019
05.01.2001, 12:20
Thec



Jaaa, ich mach aber nen Multiplayer MOD, da brauch ich das nicht. Trotzdem danke für den Hinweis.

--

zum Seitenanfang zum Seitenende Profil || Suche
020
05.01.2001, 15:51
Prophyle



*g*
Die Sperre für ENTs mit SOLID_NOT und SOLID_BSP etc. brauchst du aber trotzdem...sonst kriegst du Problemen mit Türen und einfach allem.

--

Prophyle, Coder beim SGT: http://mod.famkos.de.
Delphi, C++, Qt

zum Seitenanfang zum Seitenende Profil || Suche
021
06.01.2001, 20:06
Prefect



Ihr seid alle so krass blind (sorry). Warum programmiert ihr nicht einfach den schon existierenden Code in TakeDamage() um, der die Spieler bei Explosionen in der Gegend rumschiebt?

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
022
06.01.2001, 20:55
Another1



Jo, hätt ich auch gemacht, aber es sah irgendwie so aus als wenn es von der rocket aus gecodet werden sollte!

--

Another1

...relaxing..atm =)
... und Schweiz suckt!

zum Seitenanfang zum Seitenende Profil || Suche
023
06.01.2001, 21:54
IH82W8



wie langweilig ;)

--

zum Seitenanfang zum Seitenende Profil || Suche
024
07.01.2001, 15:11
Prophyle



@Prefect Könntest du schon aber dann müsstest du die TakeDamage von jedem ENT separat umcoden, was glaub ich auch dir zuviel ist.

--

Prophyle, Coder beim SGT: http://mod.famkos.de.
Delphi, C++, Qt

zum Seitenanfang zum Seitenende Profil || Suche