De/Adding New Ammotypes
Einführung
Hallo,
In diesem Tutorial wird das erstellen eines neuen Munitionstypens erkärt.
Dieses richtet sich wie alle Tutorials auf den eine Multiplayer Mod.
Was benötigt wird:
-Wie immer C++ Kenntnisse -Noch VC++ 2003
Warnungen:
-Da ich den SDK 1 Code nutze weiß ich noch nicht ob es im SDK 2 Code was anders gibts aber es sollte gleich sein!
Munitionstyp einbauen
Als erstes muss der Munitionstyp in den Gamerules festgelegt werden.
Dazu muss man die hl2mp_gamerules.cpp öffnen und die Funktion CAmmoDef *GetAmmoDef().
In dieser Funktion werden die Munitionstypen definiert.
Dort fügt man eine neue Zeile hinzu.
Als Beispiel wird diese Zeile verwendet:
def.AddAmmoType("SMG2", DMG_BULLET, TRACER_LINE_AND_WHIZ, 0,0, 300, BULLET_IMPULSE(200, 1225), 0 );
Nun haben wir den neuen Munitionstypen SMG2 definiert.
Dieser ist eine Ableitung von dem SMG1 Munitionstypen nur hat er mehr Munitions als Reserve.
Das wars auch schon mit dem definieren. Nun muss aber noch ein Item(Entity) her damit man den Munitionstypen auch aufheben kann.
Item(Entity) für Ammo coden
Nun muss ein Item(Entity) erstellt werden, damit man die Munition auch aufheben kann.
Damit man beginnen kann, muss man nun die Item_Ammo.cpp öffnen. In dieser Datei sind die Klassen sowie die Implementierungen festgelegt.
Dort wird das Item(Entity) auch definiert und implementiert. Dazu wird 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 Sachen ändern. Diese änderungen betreffen beide CSMG2 Klasse in der bool MyTouch( CBasePlayer *pPlayer ) Methode.
Dort müssen wir in der Abfrage if (ITEM_GiveAmmo( pPlayer, SIZE_AMMO_SMG1_LARGE, "SMG1")) zwei fehler ändern.
Und zwar müssen wir SIZE_AMMO_SMG1_ entweder neudefinieren 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 Kugel 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 war das erste Problem.
Das zweite ist nur der Name der von SMG1 zu SMG2(eurem Munitionstypen) geändert werden muss. Nun müsst ihr noch die Spawn und die Prechace Methoden ändern.
Dort muss man die Namen der Model(Mit Pfad) eingeben. Falls ihr die Models nich ändern wollt dann lasst diese Methoden.
Wenn ihr alle Namen von der Klasse, den Methoden dann habt ihr nur den Code fertig aber das Entity folgt noch.
Dazu muss man die LINK_TO_ENTITY Funktionen mit dem Klassennamen und dem Namen des Entity ausfüllen.
Wenn ihr das getan habt dann seid ihr damit auch schon fertig.
Nun müsst ihr das Entity noch in die FGD eurer Mod einbinden.
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 Tyop 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 für sich("Box of SMG2 ammo").
Nun habt ihr auch das Entity fertig. Nun muss der Munitionstyp noch zu einer Waffe hinzugefügt werden. Dies geschiet im nächsten Abschnitt.
Munitionstyp in eine Waffe implementieren
Problem:
-Valve hat die txt Dateien der Waffen verschlüsselt(Also müßt ihr euch eine eigene Waffe anlegen).
Falls ihr schon eine eigene Waffe gecodet habt dann müsst ihr die weapon_WaffenNick.txt öffnen.
Falls nicht öffnet die weapon_smg1.txt(Falls ihr sie noch habt!!!)
Dort müßt ihr nur die Zeile
"primary_ammo" "SMG1"
durch
"primary_ammo" "SMG2"
ersetzen.
Das wars auch schon.
Nun könnt ihr einen eigenen Munitionstyp, eine Item(Entity) und dazu die Verbindung zwischen Waffe und Munitionstyp schaffen.