|
|
| |
| ZASOBY |
| |
| |
|
|
|
| |
|
| NASZ BUTTON |
|
|
| |
|
|
| |
|
| |
|
TUTORIALE - CODING
|
[ Dodaj ]
|
|
Latarka tylko gdy broń ją posiada
| [ 2005-08-14 19:39:02 Dodał:
mefi Wyświetleń: 1913 Komentarzy: 0 ]
|
|
Celem tego tutorialu jest zmodyfikowanie działania latarki. Chodzi o to żeby można ją było włączyć tylko wtedy gdy mamy w ręku broń posiadającą wbudowaną latarkę. A więc do dzieła...
Informacje tym czy broń ma latarkę czy nie będziemy dodawać w pliku skryptu broni. Dobrze, wybierzmy sobie teraz broń którą chcemy wyposażyć w latarkę. Powiedzmy że będzie to SMG1 (mój ulubiony przykład).
Otwieramy plik WEAPON_SMG1.TXT z katalogu SCRIPTS. W sekcji WeaponData pod np. "default_clip2" "-1" dopisujemy:
"default_clip2" "-1"
"latarka" 1 |
Oczywiście 0 - brak latarki , 1- posiada latarkę.
Teraz czas na modyfikacje kodu. W tym tutorialu będziemy modyfikować tylko serwer. Otwieramy plik WEAPON_PARSE.H i szukamy takiego kodu: int iDefaultClip2; pod tą linią dopisujemy:
int iDefaultClip2;
bool bFlashlight; |
Teraz otwieramy plik WEAPON_PARSE.CPP i szukamy: iconAmmo2 = 0; i za tym dodajemy taką zmienną:
iconAmmo2 = 0;
bFlashlight = false; |
W tym samym pliku szukamy: iWeight = pKeyValuesData->GetInt( "weight", 0 ); i standardowo pod tym dopisujemy:
iWeight = pKeyValuesData->GetInt( "weight", 0 );
bFlashlight = ( pKeyValuesData->GetInt( "latarka", 0 ) != 0 ) ? true : false; |
Ta linia odczytuje z pliku WEAPON_SMG1.TXT wartość zmiennej latarka. Odczytuje jako wartość liczbową (INT) i prostym sprawdzeniem przypisuje jako TRUE lub FALSE. Jak zauważyliście IF czyli sprawdzenie warunku można stosować też przez opeator ? np.:
( warunek ) ? operacja1 : opearacja2;
Jeżeli warunek został spełniony to wykonana jest operacja1 jak nie to operacja2.
Kolejna czynność to otwarcie pliku PLAYER.CPP. Szukamy funkcji CBasePlayer::ImpulseCommands( ) i wniej kawałek kodu po case 100: do break; zastępujemy tym kodem:
case 100:
if ( GetActiveWeapon() )
{
if ( GetActiveWeapon()->IsFlashlight() == true )
{
if ( FlashlightIsOn() )
FlashlightTurnOff();
else
FlashlightTurnOn();
}
}
break;
|
Jak się domyśleliście to ten kawałek kodu jest wywoływany po wpisaniu IMPULSE 100 czyli włączenie latarki. Modyfikacja kodu polega na tym, że na początku sprawdzamy że mamy jakąś broń w ręku. Jakby nie to sprawdzenie to przy włączeniu latarki bez broni w ręku HL2 by się zawiesił. Następnie sprawdzane jest czy dana broń ma latarkę jak tak to sprawdzane jest czy jest włączona. Jak włączona to wyłącza i na odwrót.
Kolejnym plikiem do modyfikacji jest BASECOMBATWEAPON_SHARED.H. Szukamy virtual bool HasAmmo( void ); i pod tym dopisujemy:
virtual bool HasAmmo( void );
virtual bool IsFlashlight( void ) const; |
Ostatni plik do zmiany to BASECOMBATWEAPON_SHARED.CPP. Pod:
CHudTexture const *CBaseCombatWeapon::GetSpriteAmmo( void ) const
{
return GetWpnData().iconAmmo;
} |
piszemy
bool CBaseCombatWeapon::IsFlashlight( void ) const
{
return GetWpnData().bFlashlight;
} |
Teraz szukamy funkcji DefaultDeploy. Wywoływana jest ono przy zmianie broni. Dokładnie przy wyjmowaniu jej. W niej pod:
if ( pOwner->IsAlive() == false )
return false; |
piszemy
#ifdef CLIENT_DLL
#else
if ( pOwner->FlashlightIsOn() )
{
pOwner->FlashlightTurnOff();
}
#endif |
Teraz kilka wyjaśnień. Ten kodzik dodalismy po to aby jak zmienimy broń na inną to zgasła latarka. Dokunujemy tego jak poprzednio sprawdzając czy jest włączona. A teraz wyjaśnienie po co te dyrektywy kompilatora (#ifdef itp.). Chodzi o to, że te funkcje FlashlightIsOn i Off są dostępne tylko po stronie serwera, a plik BASECOMBATWEAPON_SHARED.CPP jest też dołączany do clienta. I tam odpowiednik kalsy player nie ma tych funkcji. Więc używając dyrektyw kompilatora pomijamy ten kawałek kodu przy kompilacji pliku CLIENT.DLL. Inaczej wyskoczył by bład kompilacji. I to już koniec tutorialu, kompilujemy i cieszymy się nowym bajerem w HL2.
|
|
|
|
|
|
|
|
| |
|
|
| |
| 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. |
|
| |
|
|
|