|
|
| |
| ZASOBY |
| |
| |
|
|
|
| |
|
| NASZ BUTTON |
|
|
| |
|
|
| |
|
| |
|
TUTORIALE - CODING
|
[ Dodaj ]
|
|
Nowa broń w HL2 - Karabin MP5
| [ 2005-07-26 00:32:38 Dodał:
mefi Wyświetleń: 3808 Komentarzy: 1 ]
|
|
Na ten tutorial czekało chyba dużo osób. Ma on pokazać jak łatwo dodać nową broń do HL2. Musicie wiedzieć, że tutorial ten jest tylko do trybu single player, zresztą jak wszystkie tutoriale. Szkielet SDK do singla i multi trochę się różni i nie mam czasu uczyć się obu.
Nową bronią jaką dodamy będzie karabinek MP5. Broń ta będzie stworzona na bazie broni SMG1, czyli będzie wykorzystywała jej amunicję i obrazek w HUD.
Na początku potrzebujemy modele, dzwięki i tekstury broni, ja zapożyczyłem je z moda mieszczącego się w SDK, ale można użyć też plików z CS, zresztą chyba są to te same pliki. Abyście nie musieli tego wszystkiego szukać przygotowałem wam do sciągnięcia pliku dołączony do tutorialu. W nim są te wszystkie rzeczy ułożone w odpowiedniej już strukturze katalogów. Wystarczy je tylko przegrać do naszego moda. Plik ten zawiera także gotowy plik skryptu naszej broni czyli WEAPON_MP5.TXT. Jeszcze jedna uwaga niektóre bronie w HL2 mają tak napisany kod, że mogą ich używać także NPC ja w tym tutorialu pomine tą możliwosć. Czyli tylko gracz będzie mógł sobie postrzelać z MP5.
Czas otworzyć Visual-a, w nim otwieramy projekt clienta, dalej katalog SOURCE FILES/HL2 DLL i wybieramy plik C_WEAPON__STUBS_HL2.CPP. W nim schodzimy na sam dół i nad #endif dopisujemy taką linię:
STUB_WEAPON_CLASS( weapon_mp5, WeaponMP5, C_HLSelectFireMachineGun );
Teraz w projekcie serwera musimy stworzyć w katalogu SOURCE FILES/HL2 DLL plik WEAPON_MP5.CPP o następującej treści:
//===== Copyright © 1996-2005, Valve Corporation, All rights reserved. ======//
//
// Purpose: MP5 by Mefi
//
//========================================================//
#include "cbase.h"
#include "basehlcombatweapon.h"
#include "player.h"
#include "game.h"
#include "soundent.h"
#include "tier0/memdbgon.h"
class CWeaponMP5 : public CHLSelectFireMachineGun
{
DECLARE_CLASS( CWeaponMP5, CHLSelectFireMachineGun );
public:
void AddViewKick( void );
void PrimaryAttack( void );
void SecondaryAttack( void );
DECLARE_SERVERCLASS();
DECLARE_DATADESC();
};
LINK_ENTITY_TO_CLASS( weapon_mp5, CWeaponMP5 );
PRECACHE_WEAPON_REGISTER( weapon_mp5 );
IMPLEMENT_SERVERCLASS_ST( CWeaponMP5, DT_WeaponMP5 )
END_SEND_TABLE()
BEGIN_DATADESC( CWeaponMP5 )
END_DATADESC()
void CWeaponMP5::AddViewKick( void )
{
#define EASY_DAMPEN 4.8f
#define MAX_VERTICAL_KICK 3.5f
#define SLIDE_LIMIT 3.5f
CBasePlayer *pPlayer = ToBasePlayer( GetOwner() );
if ( pPlayer == NULL )
return;
DoMachineGunKick( pPlayer, EASY_DAMPEN, MAX_VERTICAL_KICK, m_fFireDuration, SLIDE_LIMIT );
}
void CWeaponMP5::PrimaryAttack( void )
{
CBasePlayer *pPlayer = ToBasePlayer( GetOwner() );
if ( !pPlayer )
{
return;
}
if ( m_iClip1 <= 0 )
{
if ( !m_bFireOnEmpty )
{
Reload();
}
else
{
WeaponSound( EMPTY );
m_flNextPrimaryAttack = 0.1;
}
return;
}
WeaponSound( SINGLE );
pPlayer->DoMuzzleFlash();
SendWeaponAnim( SendWeaponAnim( ACT_VM_PRIMARYATTACK ) );
pPlayer->SetAnimation( PLAYER_ATTACK1 );
m_flNextPrimaryAttack = gpGlobals->curtime + 0.05;
m_flNextSecondaryAttack = gpGlobals->curtime + 0.05;
m_iClip1--;
Vector vecSrc = pPlayer->Weapon_ShootPosition();
Vector vecAiming = pPlayer->GetAutoaimVector( AUTOAIM_5DEGREES );
pPlayer->FireBullets( 1, vecSrc, vecAiming, vec3_origin, 8000, m_iPrimaryAmmoType, 0 );
pPlayer->DoMuzzleFlash();
AddViewKick();
CSoundEnt::InsertSound( SOUND_COMBAT, GetAbsOrigin(), 600, 0.2, GetOwner() );
if ( !m_iClip1 && pPlayer->GetAmmoCount( m_iPrimaryAmmoType ) <= 0 )
{
pPlayer->SetSuitUpdate( "!HEV_AMO0", FALSE, 0 );
}
}
void CWeaponMP5::SecondaryAttack( void )
{
//może kiedyś coś tu dodam
} |
Plik ten możemy utworzyć będąć na katalogu HL2 DLL i wybierając z menu podręcznego
ADD->ADD NEW ITEM. Teraz wybieracie C++ File (.cpp) i wpisujecie nazwę pliku czyli weapon_mp5.
Czas na małe objaśnienie kodu. Funkcja AddViewKick( void ) ma za zadanie symulowanie odrzutu broni. Mozna zmienić w niej np. podadność na strzał serią czyli czym dłużej strzelasz tym broń idzie bardziej do góry. Dokonamy tego modyfikując wartość EASY_DAMPEN, czym jest on większy tym bardziej broń wariuje. Pozostałe wartości zmieniają ruchy kamery do góry i w bok. Następna funkcja i zarazem najważniejsza to PrimaryAttack( void ). To ona jest odpowiedzialna za oddanie strzału. W lini m_flNextPrimaryAttack = gpGlobals->curtime + 0.05; modyfikuje się prędkość strzelania z broni. Czym wartość jest mniejsza tym szybciej broń strzela. Za celność broni odpowiada AUTOAIM_5DEGREES i tak jak poprzednio im wartość mniejsza tym celnieszy strzał. Oto dostępne warianty:
- AUTOAIM_2DEGREES
- AUTOAIM_5DEGREES
- AUTOAIM_8DEGREES
- AUTOAIM_10DEGREES
- AUTOAIM_20DEGREES
Oczywiście nic nie stoi na przeszkodzie, żeby dodać nowe wartości. W kolejnej lini następuje wystrzelenie wirtualnego pocsiku:
FireBullets( 1, vecSrc, vecAiming, vec3_origin, 8000, m_iPrimaryAmmoType, 0 );
8000 - to maksymalny zasięg do jakiego dolatuje pocisk, a zero na końcu to co jaki czas mają się pokazywać trace (czyli śladu lecącego pocisku). Ale lepiej nie zmieniajcie tego z zero na inną wartość przynajmniej na tym modelu broni co dołączyłem do tutorialu. Powód jest taki, że jest to model broni trzymanej w lewym ręku. A trace, są zawsze wystrzeliwane z prawej strony. A propo modelu w lewej ręce, oczywiście tak jak w CS można broń przerzucić do prawej ręki wpisująć w konsoli odpowiednie polecenie. Ale domyślnie w HL2 jest ono nie aktywne. W następnym tutorialu zajmiemy się tą sprawą.
Jeżeli chcecie, aby nowa broń pojawiła się razem z innymi po wpisaniu kodu impulse 101 to otwórzcie plik HL2_PLAYER.CPP i znajdzie w nim taką linię:
GiveNamedItem( "weapon_crossbow" );
i pod nia dopiszcie takie coś:
GiveNamedItem( "weapon_mp5" );
Aby wszystkie dźwięki nowej broni były odtwarzane należy jeszcze zmodyfikować plik GAME_SOUNDS_WEAPON.TXT z katalogu SCRIPTS moda. Skaczemy na koniec tego pliku i dopisujemy następujące linie:
"Weapon_MP5Navy.Single"
{
"channel" "CHAN_WEAPON"
"volume" "1.0"
"CompatibilityAttenuation" "0.64"
"pitch" "PITCH_NORM"
"wave" "weapons/mp5navy/mp5-1.wav"
}
"Weapon_MP5Navy.Clipout"
{
"channel" "CHAN_ITEM"
"volume" "1.0"
"CompatibilityAttenuation" "1.0"
"pitch" "PITCH_NORM"
"wave" "weapons/mp5navy/mp5_clipout.wav"
}
"Weapon_MP5Navy.Clipin"
{
"channel" "CHAN_ITEM"
"volume" "1.0"
"CompatibilityAttenuation" "1.0"
"pitch" "PITCH_NORM"
"wave" "weapons/mp5navy/mp5_clipin.wav"
}
"Weapon_MP5Navy.Slideback"
{
"channel" "CHAN_ITEM"
"volume" "1.0"
"CompatibilityAttenuation" "1.0"
"pitch" "PITCH_NORM"
"wave" "weapons/mp5navy/mp5_slideback.wav"
} |
Aby nasza broń była dostępna z poziomu edytora map, należy otworzyć plik HALFLIFE2.FGD z katalogu, w którym znajduje się Hammer i szukamy w nim tesktu weapon_smg1 : "SMG1" []. Pod linią z tym tekstem dopisuje takie coś:
@PointClass base(Weapon) studio("models/weapons/w_smg1.mdl") = weapon_smg1 : "SMG1" []
@PointClass base(Weapon) studio("models/weapons/w_smg_mp5.mdl") = weapon_mp5 : "MP5" [] |
Teraz należy skompilować oba projekty i po wpisaniu w konsoli GIVE WEAPON_MP5 można się już cieszyć nową bronia w HL2.
Jeszcze jedna ważna informacja, nowa broń jest umieszczona w HUD tuż za SMG1. Jeżeli chcecie umieścić ją w innym slocie otwórzcie plik WEAPON_MP5.TXT i zmodyfikujcie zmienne BUCKET i BUCKET_POSITION. Pierwsza to numer slota, a druga to pozycja w slocie (obie wartości liczone są od zera). Oczywiście w pliku tym można zmodyfikować kilka innych ciekawych rzeczy jak np. ilość amunicji w magazynku.
DOŁĄCZONE PLIKI: MP5_FILES.ZIP ( 2.22 MB )
|
|
|
| |
| KOMENTARZE |
|
| [ 2010-07-10 11:29:12 Dodał:
roli ]
|
|
|
tutek z dodawaniem nowej broni także tutaj > http://www.moddb.com/games/half-life-2/tutorials/adding-a-new-weapon
czyli metoda "copy pastera" i edycja kilku linijek. |
|
|
|
|
|
| |
|
|
| |
| SHOUTBOX |
|
MoonBlaze: ciasto is a lie |
|
zwieracz: Przyłącz się do mnie, mam ciasto |
|
Jodla: <kontemplujac stwierdza iz obecna rzeczywistosc jest do bani> |
|
MoonBlaze: sm_ban @Dabu 1 |
|
Dabu: Ta strona umarła, zapraszam lepiej na heacrab.pl :D [/koniec reklamy] |
|
Jodla: open beta nowego gmoda a tu 0 info na stronie ...może czas to zmienic zwłaszcza iż screeny z GM13 wygladaja apetycznie |
|
Dabu: web 3.0 |
|
Elektryk: Link |
|
Tracha: Ruski gracz! |
|
zwieracz: Za moich czasów, to się bawilismy przy takiej gierce, gdzie zając łapaj kury za jaja. A moze to był wilk. |
|
| |
|
|
|