Adding New Ammotypes

From Valve Developer Community
< De
Jump to navigation Jump to search
English (en)Deutsch (de)Translate (Translate)

Einführung

In diesem Artikel wird das Erstellen eines neuen Munitionstypens erkärt.

Was benötigt wird:

  • C++ Kenntnisse
  • VC++ 2003

Munitionstyp Definition

Als erstes muss der Munitionstyp in den Gamerules definiert werden.

Dazu öffnet man die hl2mp_gamerules.cpp und navigiert in die Funktion CAmmoDef *GetAmmoDef().

In dieser Funktion sind die Munitionstypen definiert.

Dort fügt man eine neue Zeile hinzu.

Als Beispiel wird diese mögliche Zeile verwendet:

def.AddAmmoType("SMG2", DMG_BULLET, TRACER_LINE_AND_WHIZ, 0,0, 300, BULLET_IMPULSE(200, 1225),	0 );

Mit dieser Zeile ist ein neuer Munitionstyp "SMG2" definiert.

Dieser ist eine Ableitung vom SMG1 Munitionstyp, nur hat er mehr Munitionsreserve.

Mit dieser einen Zeile ist der Munitionstyp schon definiert.

Item(Entity) für Ammo coden

Nun muss ein Item(Entity) erstellt werden, damit man die Munition (des neuen Munitionstyp) aufheben kann.

In der Datei Item_Ammo.cpp sind die Klassen sowie die Implementierungen festgelegt.

Dort wird das Item(Entity) auch definiert und implementiert.

Für unser Beispiel wird dazu der SMG1 Code kopiert und umbennant.

Nun fügt man alle Codes am besten vor der CItem_AmmoCrate Klasse ein.

Unsere Klassen heißen statt:

  • CItem_SmallBoxSMG1
  • CItem_BigBoxSMG1

Nun:

  • CItem_SmallBoxSMG2
  • CItem_BigBoxSMG2

Wenn alles eingebaut wurde muss man noch 2 Dinge ändern. Diese Änderungen betreffen beide CSMG2 Klassen in der bool MyTouch( CBasePlayer *pPlayer ) Methode.

Dort müssen wir in der Abfrage if (ITEM_GiveAmmo( pPlayer, SIZE_AMMO_SMG1_LARGE, "SMG1")) zwei Dinge ändern.

Und zwar müssen wir SIZE_AMMO_SMG1_ entweder neu definieren, für das SMG2, oder können direkt die Größe der aufnehmbaren Munition definieren.

Wenn man es selbst definieren will muss nur die jeweilige Zahl an Kugeln eingefügt werden, die man beim Berühren aufnehmen soll.


Falls ihr es aber definieren wollt, dann müsst ihr die items.h öffnen. Dort müsst ihr nur zwei neue Defines einbauen.

Das zweite ist nur der Name der von SMG1 zu SMG2(eurem Munitionstypen) geändert werden muss.


Nun müssen noch die Spawn und die Prechace Methoden geändert werden.

Dort muss man die Namen der Model(Mit Pfad) eingeben. Falls ihr die Models nich ändern wollt dann lasst diese Methoden.

Damit haben wir die Klassen und Methoden. Nun folgt der Code für das Entity selbst.

Dazu muss man mit den LINK_TO_ENTITY Funktionen den Klassennamen mit dem Namen des Entity verknüpfen.

Nun muss das Entity noch in die FGD der Mod eingebunden werden.

Dazu muss man die FGD öffnen und folgendes reinschreiben:

@PointClass base(Item) studio("models/items/boxmrounds.mdl")= item_ammo_smg2 : "Box of SMG2 ammo" []

Damit wird ein Entity vom Typ Item mit dem Model models/items/boxmrounds.mdl für den Hammer bereit gestellt.

Das Item heißt dann item_ammo_smg2 und enthält die Beschreibung Box of SMG2 ammo.

Munitionstyp in eine Waffe implementieren

Problem:

  • Valve hat die txt Dateien der Waffen verschlüsselt

Man muss sich also selbst eine Waffe anlegen.

Falls ihr schon eine eigene Waffe gecodet habt, dann müsst ihr die weapon_WaffenName.txt öffnen.

Falls nicht öffnet die weapon_smg1.txt

Dort muss man nur die Zeile

"primary_ammo"			"SMG1"

durch

"primary_ammo"			"SMG2"

ersetzen.