Source Modification Centre - LOGO
Gość: ( Logowanie | Rejestracja )

 
MENU
 
ZASOBY
 
 
LEGENDA
 
REKLAMA
tani zdjęcia ślub Gorzów Wielkopolski

tani hotele Gorzów Wielkopolski

Suknie ślubne gorzów wlkp


zdjęcia studniówka Gdynia

wypożyczalnia pojazdów

Encyklopedia wiedzy o grach Valve

kabriolet do ślubu

tania strona internetowa gorzów wlkp

NASZ BUTTON
SMC
 
NA FORUM
 
 
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.

Autor: mefi
Komentarze ( 0 ) / Dodaj komentarz
 
INFO
 
NAJNOWSZE
 
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.
 
ANKIETA

[ Czas generowania strony: 0.064 secs. ]

Copyright (c) 2002-2005 by Mefi & .raven
Wszelkie prawa zastrzeżone

Fotograf studniówka
Salon sukien ślubnych gorzów



38.107.179.22038.107.179.220

Polecamy:

Na pewno zafascynuje was wróżba z kart tarota zrbiona przez wróżkę
Najlepsze gry flashowe
mpblawcenter
www.086.olawa.pl
Filmybonprix kataloggry planszowewww.styl.powazny.kobierzyce.plkawałysiłowniki do bram GotLink.pl support gnome forum komputerowe fyk Pobierz mp3 za darmo - 320bit druk wielkoformatowy Gdańsk