|
|
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  |
|
|
|
Laser na AK Majacik [15.02.2004 : 15:18:49] 88 Tutoril 
tan : 3140
Priemern znmka : 0.67 |
Laser na vlastnú zbraň.
Mi si teraz spravíme laser na už robene ak47. Je to celkom jednoduché. Takže si otvoríme hl.dsp a otvoríme si ak47.cpp. Celí jeho obsah nahradíme týmto:
#include "extdll.h"
#include "util.h"
#include "cbase.h"
#include "monsters.h"
#include "weapons.h"
#include "nodes.h"
#include "player.h"
#include "soundent.h"
#include "gamerules.h"
enum AK47_e
{
AK47_IDLE1 = 0,
AK47_RELOAD,
AK47_DEPLOY,
AK47_FIRE1,
AK47_FIRE2,
AK47_FIRE3
};
class CLaserSpotAK47 : public CBaseEntity/*prip tu sa nam zecina definovanie funkcii lasera*/
{
void Spawn( void );
void Precache( void );
int ObjectCaps( void ) { return FCAP_DONT_SAVE; }
public:
void Suspend( float flSuspendTime );
void EXPORT Revive( void );
static CLaserSpotAK47 *CreateSpotAK47( void );
};
LINK_ENTITY_TO_CLASS( laser_spot_AK47, CLaserSpotAK47 );
class CAK47 : public CBasePlayerWeapon
{
public:
int Save( CSave &save );
int Restore( CRestore &restore );
static TYPEDESCRIPTION m_SaveData[];
void Spawn( void );
void Precache( void );
int iItemSlot( void ) { return 3; }
int GetItemInfo(ItemInfo *p);
int AddToPlayer( CBasePlayer *pPlayer );
void PrimaryAttack( void );
void SecondaryAttack( void );/*prip na zapinanie a vypinanie lasera*/
int SecondaryAmmoIndex( void );
BOOL Deploy( void );
void Reload( void );
void WeaponIdle( void );
void Holster ( int skiplocal );
float m_flNextAnimTime;
int m_iShell;
CLaserSpotAK47 *m_pSpot;/*prip patri k laseru a hlavne k aktivacii a vypnutiu aj dalsie dva riadky*/
int m_fSpotActive;
void UpdateSpot ( void );
private:
};
LINK_ENTITY_TO_CLASS( weapon_AK47, CAK47 );
TYPEDESCRIPTION CAK47::m_SaveData[] = /*prip patri k laseru*/
{
DEFINE_FIELD( CAK47, m_fSpotActive, FIELD_INTEGER ),
};
IMPLEMENT_SAVERESTORE( CAK47, CBasePlayerWeapon );
//=========================================================
//=========================================================
int CAK47::SecondaryAmmoIndex( void )/*prip pre definovanie sekundarnej municie*/
{
return m_iSecondaryAmmoType;
}
void CAK47::Spawn( )
{
pev->classname = MAKE_STRING("weapon_AK47"); // hack to allow for old names
Precache( );
SET_MODEL(ENT(pev), "models/w_AK47.mdl");
m_iId = WEAPON_AK47;
m_fSpotActive = 1;/*prip ak tu je 1 tak laser je hned zapaty a ak tam je 0 tak po vytiahnuti zbrane je laser vypnuty*/
m_iDefaultAmmo = 30;
FallInit();// get ready to fall down.
}
void CAK47::Precache( void )
{
PRECACHE_MODEL("models/v_AK47.mdl");
PRECACHE_MODEL("models/w_AK47.mdl");
PRECACHE_MODEL("models/p_AK47.mdl");
PRECACHE_MODEL("sprites/laserdot.spr");
m_iShell = PRECACHE_MODEL ("models/shell.mdl");// brass shellTE_MODEL
PRECACHE_SOUND("items/9mmclip1.wav");
PRECACHE_SOUND("items/clipinsert1.wav");
PRECACHE_SOUND("items/cliprelease1.wav");
PRECACHE_SOUND ("weapons/hks1.wav");// H to the K
PRECACHE_SOUND ("weapons/357_cock1.wav");
}
int CAK47::GetItemInfo(ItemInfo *p)
{
p->pszName = STRING(pev->classname);
p->pszAmmo1 = "9mm";
p->iMaxAmmo1 = _9MM_MAX_CARRY;
p->pszAmmo2 = NULL;
p->iMaxAmmo2 = -1;
p->iMaxClip = 30;
p->iSlot = 0;
p->iPosition = 4;
p->iFlags = 0;
p->iId = m_iId = WEAPON_AK47;
p->iWeight = 20;
return 1;
}
int CAK47::AddToPlayer( CBasePlayer *pPlayer )
{
if ( CBasePlayerWeapon::AddToPlayer( pPlayer ) )
{
MESSAGE_BEGIN( MSG_ONE, gmsgWeapPickup, NULL, pPlayer->pev );
WRITE_BYTE( m_iId );
MESSAGE_END();
return TRUE;
}
return FALSE;
}
BOOL CAK47::Deploy( )
{
return DefaultDeploy( "models/v_AK47.mdl", "models/p_AK47.mdl", AK47_DEPLOY, "AK47" );
}
void CAK47::PrimaryAttack()
{
// don''t fire underwater
if (m_pPlayer->pev->waterlevel == 3)
{
PlayEmptySound( );
m_flNextPrimaryAttack = gpGlobals->time + 0.08;
return;
}
if (m_iClip <= 0)
{
PlayEmptySound();
m_flNextPrimaryAttack = gpGlobals->time + 0.08;
return;
}
//PLAYBACK_EVENT( 0, m_pPlayer->edict(), m_usAK47 );
m_pPlayer->m_iWeaponVolume = NORMAL_GUN_VOLUME;
m_pPlayer->m_iWeaponFlash = NORMAL_GUN_FLASH;
m_iClip--;
// player "shoot" animation
m_pPlayer->SetAnimation( PLAYER_ATTACK1 );
EMIT_SOUND(ENT(m_pPlayer->pev), CHAN_WEAPON, "weapons/hks1.wav", 1.0, ATTN_NORM);
SendWeaponAnim( AK47_FIRE1 );
Vector vecSrc = m_pPlayer->GetGunPosition();
Vector vecAiming = m_pPlayer->GetAutoaimVector( AUTOAIM_5DEGREES );
// m_pPlayer->FireBullets (1, vecSrc, vecAiming, VECTOR_CONE_2DEGREES, 16000, BULLET_PLAYER_9MM, 0.5, 4);
Vector vecShellVelocity = m_pPlayer->pev->velocity
+ gpGlobals->v_right * RANDOM_FLOAT(50,70)
+ gpGlobals->v_up * RANDOM_FLOAT(100,150)
+ gpGlobals->v_forward * 25;
EjectBrass ( pev->origin + m_pPlayer->pev->view_ofs + gpGlobals->v_up * -12 + gpGlobals->v_forward * 15 + gpGlobals->v_right * 6 , vecShellVelocity, pev->angles.y, m_iShell, TE_BOUNCE_SHELL );
m_pPlayer->pev->punchangle.x -= 0.7;
if ( g_pGameRules->IsDeathmatch() )
{
// optimized multiplayer. Widened to make it easier to hit a moving player
m_pPlayer->FireBullets( 1, vecSrc, vecAiming, VECTOR_CONE_2DEGREES, 8192, BULLET_PLAYER_MP5, 0.5, 4 );
}
else
{
m_pPlayer->FireBullets( 1, vecSrc, vecAiming, VECTOR_CONE_2DEGREES, 8192, BULLET_PLAYER_MP5, 0.5, 4 );
}
if (!m_iClip && m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0)
// HEV suit - indicate out of ammo condition
m_pPlayer->SetSuitUpdate("!HEV_AMO0", FALSE, 0);
m_flNextPrimaryAttack = m_flNextPrimaryAttack + 0.06;
if (m_flNextPrimaryAttack < gpGlobals->time)
m_flNextPrimaryAttack = gpGlobals->time + 0.06;
m_flTimeWeaponIdle = gpGlobals->time + RANDOM_FLOAT ( 10, 15 );
UpdateSpot( );
}
void CAK47::SecondaryAttack( void )/*prip stara sa nam o zapinanie a vypinanie lasera je to vlastne prepinac ktori zistuje ci je laser zapaty a podla toho vykona akciu, cize ak je zapaty tak ho vypne a naopak*/
{
m_fSpotActive = ! m_fSpotActive;
if (!m_fSpotActive && m_pSpot)
{
m_pSpot->Killed( NULL, GIB_NORMAL );
m_pSpot = NULL;
}
m_flNextSecondaryAttack = gpGlobals->time + 0.2;
}
void CAK47::Reload( void )
{
UpdateSpot( );/*prip vypina laser pred nabijanim inak by nam zostala pocas nabijania bodka na stene*/
if (m_pSpot)
{
m_pSpot->Killed( NULL, GIB_NEVER );
m_pSpot = NULL;
} DefaultReload( 30, AK47_RELOAD, 2.5 );
}
void CAK47::Holster( int skiplocal /* = 0 */ ) /*prip sluzi na schovavanie zbrane a tym nam zaroven aj vypne laser*/
{
m_fInReload = FALSE;
if (m_pSpot)
{
m_pSpot->Killed( NULL, GIB_NEVER );
m_pSpot = NULL;
}
}
void CAK47::WeaponIdle( void )
{
UpdateSpot( );/*prip k laseru a jeho cinnosti*/
ResetEmptySound( );
m_pPlayer->GetAutoaimVector( AUTOAIM_5DEGREES );
if (m_flTimeWeaponIdle > gpGlobals->time)
return;
int iAnim;
switch ( RANDOM_LONG( 0, 1 ) )
{
case 0:
iAnim = AK47_IDLE1;
break;
default:
case 1:
iAnim = AK47_IDLE1;
break;
}
SendWeaponAnim( iAnim );
m_flTimeWeaponIdle = gpGlobals->time + RANDOM_FLOAT ( 10, 15 );// how long till we do this again.
}
class CAK47AmmoClip : public CBasePlayerAmmo
{
void Spawn( void )
{
Precache( );
SET_MODEL(ENT(pev), "models/w_AK47clip.mdl");
CBasePlayerAmmo::Spawn( );
}
void Precache( void )
{
PRECACHE_MODEL ("models/w_AK47clip.mdl");
PRECACHE_SOUND("items/9mmclip1.wav");
}
BOOL AddAmmo( CBaseEntity *pOther )
{
int bResult = (pOther->GiveAmmo( 30, "9mm", _9MM_MAX_CARRY) != -1);
if (bResult)
{
EMIT_SOUND(ENT(pev), CHAN_ITEM, "items/9mmclip1.wav", 1, ATTN_NORM);
}
return bResult;
}
};
class CAK47Chainammo : public CBasePlayerAmmo
{
void Spawn( void )
{
Precache( );
CBasePlayerAmmo::Spawn( );
}
void Precache( void )
{
PRECACHE_SOUND("items/9mmclip1.wav");
}
BOOL AddAmmo( CBaseEntity *pOther )
{
int bResult = (pOther->GiveAmmo( AMMO_CHAINBOX_GIVE, "9mm", _9MM_MAX_CARRY) != -1);
if (bResult)
{
EMIT_SOUND(ENT(pev), CHAN_ITEM, "items/9mmclip1.wav", 1, ATTN_NORM);
}
return bResult;
}
};
CLaserSpotAK47 *CLaserSpotAK47::CreateSpotAK47( void )/*prip ostatne riadky patria k vytvoreniu laseru teda vykresleniu spritu, prekasovaniu sprajtu atd...*/
{
CLaserSpotAK47 *pSpot = GetClassPtr( (CLaserSpotAK47 *)NULL );
pSpot->Spawn();
pSpot->pev->classname = MAKE_STRING("laser_spot_AK47");
return pSpot;
}
//=========================================================
//=========================================================
void CLaserSpotAK47::Spawn( void )
{
TraceResult tr;
Precache( );
pev->movetype = MOVETYPE_NONE;
pev->solid = SOLID_NOT;
pev->rendermode = kRenderGlow;
pev->renderfx = kRenderFxNoDissipation;
pev->renderamt = 255 /*prip este toto by vas mohlo zaujimat a je to priehladnost bodky cim mensie cislo tym prehliadnejsie je a tym ho je aj slabšie vydiet*/;
SET_MODEL(ENT(pev), "sprites/laserdot.spr");/*prip tu sim mozeme vlozit iny sprit bodky z laseru ale musime zmenit nazov aj v obi dvoch precache*/
UTIL_SetOrigin( pev, pev->origin );
};
//=========================================================
// Suspend- make the laser sight invisible.
//=========================================================
void CLaserSpotAK47::Suspend( float flSuspendTime )
{
pev->effects |= EF_NODRAW;
SetThink( Revive );
pev->nextthink = gpGlobals->time + flSuspendTime;
}
//=========================================================
// Revive - bring a suspended laser sight back.
//=========================================================
void CLaserSpotAK47::Revive( void )
{
pev->effects &= ~EF_NODRAW;
SetThink( NULL );
}
void CLaserSpotAK47::Precache( void )
{
PRECACHE_MODEL("sprites/laserdot.spr");
};
void CAK47::UpdateSpot( void )
{
if (m_fSpotActive)
{
if (!m_pSpot)
{
m_pSpot = CLaserSpotAK47::CreateSpotAK47();
}
UTIL_MakeVectors( m_pPlayer->pev->v_angle );
Vector vecSrc = m_pPlayer->GetGunPosition( );;
Vector vecAiming = gpGlobals->v_forward;
TraceResult tr;
UTIL_TraceLine ( vecSrc, vecSrc + vecAiming * 8192, dont_ignore_monsters, ENT(m_pPlayer->pev), &tr );
UTIL_SetOrigin( m_pSpot->pev, tr.vecEndPos );
}
}
No to je všetko, spravil som to jednoduché aby ste sa s tym nepiplali a v texte nájdete takéto značky /*prip text*/ a namiesto text je tam popis k danému riadku ci funkcii.
Prerobiť laser na inú zbraň je v celku jednoduché teda ak ste trochu vynaliezavý nebudete robiť novy text od začiatku písať ale použijete starý a zmeníte požadované údaje to iste sa dá bezproblemov spraviť aj tu, ako napríklad s tohto spraviť laser pre pištoľ ci snipru kde k sekundáru stačí doplniť iba kukar atd... Veľa šťastia praje majacik
|
BODOVANIE LNKU Boduje sa ako v kole (1- vborn, 5-zl)
Priemern znmka : 0.67 Hlasovalo : 3
|
|
|
|
|