|
|
Diskusn boardy |
|
|
|
Najnovie lnky |
|
Automatická textová správa Vocko Tutoril 07.06.2009 : 11:02:12
|
V tomto tutoriále si spravíme automatickú textovú správu, ktorá sa prehraje vždy s nejakým zvukom. |
|
|
|
|
Env_mirror alebo zrkadlenie modelov Vocko Tutoril 24.04.2009 : 18:49:30
|
Tutoriál na zrkadlenie tu už je, ale èo ak chceme odráža i modely? Na tom nám poslúži entita env_mirror, ktorá sa nachádza iba v Spirite 1.4 alebo novšej verzii. |
|
|
HL2 : Obloukový prùchod R4z0r Tutoril 01.05.2008 : 05:48:46
|
Dnes si ukážeme zpùsob, jak vytvoøit elegantní obloukový prùchod, bez nutnosti používat øezání geometrie brushem... |
|
|
|
|
Pridanie mp3 do spiritu NICKSss Tutoril 02.03.2008 : 20:55:09
|
Návod na pridanie mp3 do Half-Life 1 alebo Spirt 1.2,otestované na verzii 1.2.
Asi už mate zbrane add-ons vo Spirite 1.2 a nechcete prejst na ver.1.4 lebo všetko stratite
pre Mp3... Na internete som našiel návody pre HL1 a po anglicky ktoré po skompilovani
fungovali asi takto : Aplikácia HL.EXE Neodpovedá... |
|
|
*locus Deli Tutoril 22.02.2008 : 20:13:47
|
Pre niektorých mapperov neznámy pojem, ale pre niektorých ve¾mi úèinná pomôcka.
Vïaka tomuto príspevku sa vám posnažím priblíži tajomstvá jednej z najväèších zbraní spiritu.
|
|
|
Spirit of Half-Life - Predstavenie Wizz Tutoril 27.10.2007 : 08:52:04
|
Predtým než sa pustíte do èítania, chcel by som Vás upozorni že èlánok už nemusí by 100% aktualny. Èlánok som totiž napísal ešte za svojich mladých èias - 13. júna 2004, èo je viac ako tri roky. Zverejni som sa ho rozhodol po nátlaku a výhražkach ostatných redaktorov |
|
|
|
HL2 coding: Samopaly do HL2MP Vaber [19.04.2006 : 15:11:25] 332 Tutoril tan : 4665 Priemern znmka : 1.6 |
Nejlepši je vycházet z kódu pùvodního SMG1, to kromì granátometu nemá žádné dalši pøídavné funkce. Vìtšina tøíd samopalù je odvozena od tøídy CHL2MPMachineGun, která velice usnadní celou tvorbu. V ukázkovém tutorialu bude naše zbraò pojmenována jako WeaponSamopal (pøi zmìnì tohoto názvu je tøeba zmìnit všchny výskyty - CWeaponSamopal, C_WeaponSamopal, DT_WeaponSamopal apod.)
Zaènìme tedy se tvorbou. V projektu 'hl' (server.dll) vytvoøte soubor weapon_samopal.cpp a ten následnì také vložte do client. Nyní budeme potøebovat includovat hlavièkové soubory:
#include "cbase.h"
#include "npcevent.h"
#include "in_buttons.h"
#ifdef CLIENT_DLL
#include "c_hl2mp_player.h"
#else
#include "grenade_ar2.h"
#include "hl2mp_player.h"
#include "basegrenade_shared.h"
#include "AI_BaseNPC.h"
#endif
#include "weapon_hl2mpbase.h"
#include "weapon_hl2mpbase_machinegun.h"
#ifdef CLIENT_DLL
#define CWeaponSamopal C_WeaponSamopal // V client.dll má tøída název zaèínajcí na C_
#endif
#include "tier0/memdbgon.h"
|
Nyní deklarace tøídy CWeaponSamopal, ta obsahuje pár vložených funkcí, které vracejí hodnoty rychlosti støelby, min. a max. burst (nejsem si jist, k èemu tyto dvì hodnoty slouží ?) a rozptyl:
class CWeaponSamopal : public CHL2MPMachineGun
{
public:
DECLARE_CLASS( CWeaponSamopal , CHL2MPMachineGun );
CWeaponSamopal();
DECLARE_NETWORKCLASS();
DECLARE_PREDICTABLE();
void Precache( void);
void AddViewKick( void);
int GetMinBurst() { return 2; }
int GetMaxBurst() { return 5; }
virtual void Equip( CBaseCombatCharacter *pOwner );
bool Reload( void);
float GetFireRate( void ) { return 0.095f; } // Rychlost støelby, za kolik vteøin je možný další výstøel
Activity GetPrimaryAttackActivity( void );
virtual const Vector& GetBulletSpread( void )
{
static const Vector cone = VECTOR_CONE_3DEGREES; // Rozptyl
return cone;
}
const WeaponProficiencyInfo_t *GetProficiencyValues();
#ifndef CLIENT_DLL
DECLARE_ACTTABLE();
#endif
protected:
Vector m_vecTossVelocity;
private:
CWeaponSamopal( const CWeaponSamopal & );
};
|
Následujcí kód obsahuje vnitøní definici entity + acttable pro naší zbraò (pøi úpravách názvù dávejte pozor, a v tomto zmatku pojmenujete všechno správnì):
IMPLEMENT_NETWORKCLASS_ALIASED( WeaponSamopal, DT_WeaponSamopal )
BEGIN_NETWORK_TABLE( CWeaponSamopal, DT_WeaponSamopal )
END_NETWORK_TABLE()
BEGIN_PREDICTION_DATA( CWeaponSamopal )
END_PREDICTION_DATA()
LINK_ENTITY_TO_CLASS( weapon_samopal, CWeaponSamopal );
PRECACHE_WEAPON_REGISTER(weapon_samopal);
#ifndef CLIENT_DLL
acttable_t CWeaponSamopal::m_acttable[] =
{
{ ACT_HL2MP_IDLE, ACT_HL2MP_IDLE_SMG1, false},
{ ACT_HL2MP_RUN, ACT_HL2MP_RUN_SMG1, false},
{ ACT_HL2MP_IDLE_CROUCH, ACT_HL2MP_IDLE_CROUCH_SMG1, false},
{ ACT_HL2MP_WALK_CROUCH, ACT_HL2MP_WALK_CROUCH_SMG1, false},
{ ACT_HL2MP_GESTURE_RANGE_ATTACK, ACT_HL2MP_GESTURE_RANGE_ATTACK_SMG1, false},
{ ACT_HL2MP_GESTURE_RELOAD, ACT_HL2MP_GESTURE_RELOAD_SMG1, false},
{ ACT_HL2MP_JUMP, ACT_HL2MP_JUMP_SMG1, false},
{ ACT_RANGE_ATTACK1, ACT_RANGE_ATTACK_SMG1, false },
};
IMPLEMENT_ACTTABLE(CWeaponSamopal);
#endif
|
Tìla zbytku funkcí jsou zde (popisy jsou v komentáøích):
CWeaponSamopal::CWeaponSamopal( )
{
m_fMinRange1 = 0;
m_fMaxRange1 = 1400; // Max. dostøel
}
void CWeaponSamopal::Precache( void ) // precache funkce
{
BaseClass::Precache();
}
void CWeaponSamopal::Equip( CBaseCombatCharacter *pOwner ) // funkce volaná pøi zvednutí zbranì
{
m_fMaxRange1 = 1400; // Max. dostøel
BaseClass::Equip( pOwner );
}
Activity CWeaponSamopal::GetPrimaryAttackActivity( void )
{
if ( m_nShotsFired < 2 )
return ACT_VM_PRIMARYATTACK;
if ( m_nShotsFired < 3 )
return ACT_VM_RECOIL1;
if ( m_nShotsFired < 4 )
return ACT_VM_RECOIL2;
return ACT_VM_RECOIL3;
}
bool CWeaponSamopal::Reload( void ) // Nabití zbranì
{
bool fRet;
float fCacheTime = m_flNextSecondaryAttack;
fRet = DefaultReload( GetMaxClip1(), GetMaxClip2(), ACT_VM_RELOAD );
if ( fRet )
{
m_flNextSecondaryAttack = GetOwner()->m_flNextAttack = fCacheTime
WeaponSound( RELOAD );
}
return fRet;
}
void CWeaponSamopal::AddViewKick( void ) // trhnutí obrazem
{
// tyto hodnoty jdou upravit pro zmìnu velikosti efektu
#define EASY_DAMPEN 2.0f
#define MAX_VERTICAL_KICK 4.0f //Degrees
#define SLIDE_LIMIT 2.0f //Seconds
//Get the view kick
CBasePlayer *pPlayer = ToBasePlayer( GetOwner() );
if ( pPlayer == NULL )
return;
DoMachineGunKick( pPlayer, EASY_DAMPEN, MAX_VERTICAL_KICK, m_fFireDuration, SLIDE_LIMIT );
}
const WeaponProficiencyInfo_t *CWeaponSamopal::GetProficiencyValues()
{
static WeaponProficiencyInfo_t proficiencyTable[] =
{
{ 0.1, 0.75 },
{ 5.00, 0.75 },
{ 10.0/3.0, 0.75 },
{ 5.0/3.0, 0.75 },
{ 1.00, 1.0 },
};
COMPILE_TIME_ASSERT( ARRAYSIZE(proficiencyTable) == WEAPON_PROFICIENCY_PERFECT + 1);
return proficiencyTable;
}
|
Nyní je kód zbranì hotov, ještì budete potøebovat vytvoøit script file se správným názvem (tvorba tìchto souborù bude možná souèástí jednoho z dalších tutoriálù). Doufám, že jsem na nìco nezapomìl... |
BODOVANIE LNKU Boduje sa ako v kole (1- vborn, 5-zl)
Priemern znmka : 1.6 Hlasovalo : 5
|
|
|
|
|