Descentforum.DE Forum Index Descentforum.DE
Search | FAQ | Memberlist | Usergroups | Newsfeed Newsfeed  Register
Profile | Log in to check your private messages | Log in 
Chat | D3-Tactics | Downloads | Map | Links | Serverlist | Teamspeak 

D3 SDK: Waffenwechsel

 
Post new topic   Reply to topic    Descentforum.DE Forum Index -> Level-, Design und Entwicklungs - Forum
View previous topic :: View next topic  
Author Message
Munk
Forum-Nutzer


Joined: 30 Jun 2001
Posts: 2140
Location: Herzogenrath

PostPosted: 25.05.2007, 22:16    Post subject: D3 SDK: Waffenwechsel Reply with quote

Hallo,

Ich suche ne Möglichkeit, wie ich in nem Mod einem Spieler ne Waffe "schenken" kann.
Und zwar so, als ob er sie gerade aufgesammelt hat.

Was ich bisher dazu geschafft habe ist, dem Spieler player->weapon_flags zu setzen, und mit
player->weapon[0].index auszuwählen.

Leider passiert das alles unmittelbar, ohne jegliches Waffenmanagement. D.h. die Autoselect-Reihenfolge wird nicht berücksichtigt, es entsteht kein Waffenselect-Sound, die Waffenbilder werden nicht ein/aus-geblendet und es gibt keine Auslöseverzögerung.


Also was ich suche wäre ne Routine, die das alles wie im Original erledigt. Vielleicht etwas, was Descent vorgaukelt, gerade ein Waffen-Powerup aufgenommen zu haben ...

Hat jemand Ideen ?
Back to top
View user's profile Send private message Send e-mail
D.Cent
Forum-Nutzer


Joined: 05 Mar 2006
Posts: 506
Location: Stuttgart

PostPosted: 26.05.2007, 13:18    Post subject: Reply with quote

Hast du Dir schon mal den InstaReap-Source angeschaut? Da wird die Waffe auch von Laser auf MD gewechselt! (Ich hoffe, ich habe ihn Dir damals geschickt).

Da finde ich auf Anhieb die Funktion "ChangeWeapon()":

Code:
int ChangeWeapon(int slot, int weap_index)
{
   player *player = &(DMFCBase->GetPlayers())[slot];
   ship *ship = &(DMFCBase->GetShips())[player->ship_index];
   player->weapon[PRIMARY_INDEX].index = weap_index;
   return 1;
}


Und dann zum Beispiel für das Wechseln zum Massdriver folgenden Code benutzen:

Code:
ChangeWeapon(iPnum,MASSDRIVER_INDEX);


Viel Glück!


Last edited by D.Cent on 26.05.2007, 13:19; edited 1 time in total
Back to top
View user's profile Send private message
Floyd
Forum-Orakel


Joined: 20 Mar 2001
Posts: 2912
Location: Dresden, Germany

PostPosted: 26.05.2007, 13:37    Post subject: Reply with quote

das ist genau das, was er oben beschrieben hat zwinkern

was aber ginge: die powerups so lassen wie se sind, nur die polymodels austauschen, zwar den respawn derer selbst machen, und dann halt das management bei der aufnahme übernehmen, und interne änderungen von D3 ggf. zurücksetzen ...
vielleicht reicht es auch schon, die waffe ins "inventory" hinzuzufügen (da sollte es fkt. geben), ich weiß jetzt ja nicht, wie du das bereits machst.
vielleicht können wir das nochmal im chat besprechen, ich habe aber heute keine zeit dazu wegen einer geburtstagsfeier.


Last edited by Floyd on 26.05.2007, 13:44; edited 2 times in total
Back to top
View user's profile Send private message
Munk
Forum-Nutzer


Joined: 30 Jun 2001
Posts: 2140
Location: Herzogenrath

PostPosted: 26.05.2007, 14:56    Post subject: Reply with quote

Waffe ins Inventory hinzufügen hilft nicht, denn dann setzt er sie wirklich ins Inventory.

Die Original-Powerups hab ich zu Anfang des Levels aus dem Spiel entfernt, da ich deren automatischen Respawn sowie Kollisionserkennung nicht kontrollieren konnte.
D.h. mit den Original-Powerups aus dem Level kann ich nicht verhindern, daß sie aufgenommen werden.


Ich wüsste gerne, was der Unterschied zwischen beiden ist ...
Back to top
View user's profile Send private message Send e-mail
Munk
Forum-Nutzer


Joined: 30 Jun 2001
Posts: 2140
Location: Herzogenrath

PostPosted: 10.06.2007, 22:15    Post subject: Reply with quote

Quote:

D.h. mit den Original-Powerups aus dem Level kann ich nicht verhindern, daß sie aufgenommen werden.

Ich wüsste gerne, was der Unterschied zwischen beiden ist ...


Okay, hab ne Lösung gefunden. Vielleicht ist sie ja für andere Zwecke auch hilfreich.

Also zuersteinmal habe ich vergessen, die erzeugten Objekte mit DLLInitObjectScripts() zu initialisieren. Damit werden wohl die Event-Handler desjenigen Objekts gesetzt, so daß es z.b. auf Kollisionen reagieren kann und entsprechende Modifikationen am Schiff vornimmt (z.B. bei Waffen, aber auch Afterburner, Quadlaser, Cloak etc.)

Um den Schiffseinbau muss man sich also nicht kümmern, das geschieht automatisch.

Nachteil ist aber nun, daß man die Kollision nun nicht mehr vollkommen unter Kontrolle hat. D.h. eine selektive Aufname des Powerups ist nicht möglich (soll heißen, daß man nicht verhindern kann, daß das Powerup durch Kollision aufgenommen wird).

Meine Lösung ist nun, daß solche Powerups, bei denen Kollisionskontrolle gewünscht ist, DLLInitObjectScripts() _nicht_ ausgeführt wird. Die Kollision kann immernoch mit OnServerCollide() erkannt werden, aber es geschieht nicht zwingend eine Aufnahme des Powerups. In OnServerCollide() kann also nun entschieden werden, ob das Powerup aufgenommen werden soll. Falls dem so ist, kann man DLLInitObjectScripts() auf dieses Objekt anwenden, und in diesem oder nächsten Frame (hab ich noch nicht untersucht) wird dann der Event-Handler vom Powerup-Code aktiv und sorgt für den Rest.


Last edited by Munk on 10.06.2007, 22:17; edited 1 time in total
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic    Descentforum.DE Forum Index -> Level-, Design und Entwicklungs - Forum All times are GMT + 2 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You can attach files in this forum
You can download files in this forum
PayPal


Descent is a trademark of Interplay Productions.
Descent, Descent II are © Parallax Software Corporation.
Descent III is © Outrage Entertainment.
Descentforum.DE and Descentforum.NET is © by Martin "Do_Checkor" Timmermann.
Powered by phpBB © 2001-2008 phpBB Group