Статистика ( по комментариям ), шт.
Добавляем брызги при выстреле по воде
Water Splash
Добавляем брызги при выстреле по воде
Имеются следующие переводы : |
русский |
Всем привет! В этом туториале рассказано, как сделать при выстреле в воду брызги. Как и в моих прошлых туториалах, кода не очень много.
Сервер
Файл world.cpp, функция void CWorld
Precache( void )
PRECACHE_MODEL( "sprites/effects/splash1.spr" );
PRECACHE_MODEL( "sprites/effects/splash2.spr" );
PRECACHE_SOUND( "items/water_splash/water_splash1.wav" );
PRECACHE_SOUND( "items/water_splash/water_splash2.wav" );
PRECACHE_SOUND( "items/water_splash/water_splash3.wav" );
Открываем combat.cpp, и перед функцией Vector CBaseEntity::FireBulletsPlayer вставляем:
extern int gmsgWaterSplash;
void CBaseEntity::FireBulletsWater( Vector vecSrc, Vector vecEnd )
{
if( !( POINT_CONTENTS( vecEnd ) == CONTENTS_WATER && POINT_CONTENTS( vecSrc ) != CONTENTS_WATER ) )
return;
// Ищем растояние между vecSrc и vecEnd
float x = vecEnd.x - vecSrc.x;
float y = vecEnd.y - vecSrc.y;
float z = vecEnd.z - vecSrc.z;
float len = sqrt( x * x + y * y + z * z );
// Делим по полам
Vector vecTemp = Vector( ( vecEnd.x + vecSrc.x ) / 2, ( vecEnd.y + vecSrc.y ) / 2, ( vecEnd.z + vecSrc.z ) / 2 );
if( len <= 1 )
{
MESSAGE_BEGIN(MSG_ALL, gmsgWaterSplash);
WRITE_COORD( vecTemp.x );
WRITE_COORD( vecTemp.y );
WRITE_COORD( vecTemp.z );
MESSAGE_END();
switch( RANDOM_LONG( 1, 3 ) )
{
case 1:
UTIL_EmitAmbientSound( ENT(0), vecTemp, "items/water_splash/water_splash1.wav", 1, ATTN_NORM, 0, 100 );
break;
case 2:
UTIL_EmitAmbientSound( ENT(0), vecTemp, "items/water_splash/water_splash2.wav", 1, ATTN_NORM, 0, 100 );
break;
case 3:
UTIL_EmitAmbientSound( ENT(0), vecTemp, "items/water_splash/water_splash3.wav", 1, ATTN_NORM, 0, 100 );
break;
}
}
else
{
if( POINT_CONTENTS( vecTemp ) == CONTENTS_WATER )
FireBulletsWater( vecSrc, vecTemp );
else
FireBulletsWater( vecTemp, vecEnd );
}
}
Ищем функцию Vector CBaseEntity::FireBulletsPlayer и после UTIL_BubbleTrail( vecSrc, tr.vecEndPos, (flDistance * tr.flFraction) / 64.0 ); пишем:
FireBulletsWater( vecSrc, tr.vecEndPos );
Теперь в файле cbase.h, в классе CBaseEntity надо объявить нашу функцию:
void FireBulletsWater( Vector vecEnd, Vector vecSrc );
Теперь файл player.cpp После int gmsgTeamNames = 0;
В этом же файле после gmsgTeamNames = REG_USER_MSG( "TeamNames", -1 );
gmsgWaterSplash = REG_USER_MSG( "WaterSplash", 6 );
Файл hud.h, класс CHud, после int _cdecl MsgFunc_Concuss( const char *pszName, int iSize, void *pbuf );
int _cdecl MsgFunc_WaterSplash( const char *pszName, int iSize, void *pbuf );
Файл hud.cpp, после функции int __MsgFunc_GameMode(const char *pszName, int iSize, void *pbuf )
int __MsgFunc_WaterSplash(const char *pszName, int iSize, void *pbuf)
{
gHUD.MsgFunc_WaterSplash( pszName, iSize, pbuf );
return 1;
}
Здесь же, в функции void CHud
Init( void ), после HOOK_MESSAGE( AllowSpec );
HOOK_MESSAGE( WaterSplash );
Файл hud_msg.cpp, после #define MAX_CLIENTS 32
extern void EV_HLDM_WaterSplash( float x, float y, float z );
int CHud :: MsgFunc_WaterSplash( const char *pszName, int iSize, void *pbuf )
{
BEGIN_READ( pbuf, iSize );
float X, Y, Z;
X = READ_COORD();
Y = READ_COORD();
Z = READ_COORD();
EV_HLDM_WaterSplash( X, Y, Z );
return 1;
}
void EV_HLDM_WaterSplash( float x, float y, float z )
{
int iWaterSplash = gEngfuncs.pEventAPI->EV_FindModelIndex ("sprites/effects/splash1.spr");
TEMPENTITY *pTemp = gEngfuncs.pEfxAPI->R_TempSprite( Vector( x, y, z + 50 ),
Vector( 0, 0, 0 ),
0.5, iWaterSplash, kRenderTransAdd, kRenderFxNone, 1.0, 0.5, FTENT_SPRANIMATE | FTENT_FADEOUT | FTENT_COLLIDEKILL );
if(pTemp)
{
pTemp->fadeSpeed = 90.0;
pTemp->entity.curstate.framerate = 100.0;
pTemp->entity.curstate.renderamt = 155;
pTemp->entity.curstate.rendercolor.r = 255;
pTemp->entity.curstate.rendercolor.g = 255;
pTemp->entity.curstate.rendercolor.b = 255;
}
iWaterSplash = gEngfuncs.pEventAPI->EV_FindModelIndex ("sprites/effects/splash2.spr");
pTemp = gEngfuncs.pEfxAPI->R_TempSprite( Vector( x, y, z ),
Vector( 0, 0, 0 ),
0.2, iWaterSplash, kRenderTransAdd, kRenderFxNone, 1.0, 0.5, FTENT_SPRANIMATE | FTENT_FADEOUT | FTENT_COLLIDEKILL );
if(pTemp)
{
pTemp->fadeSpeed = 60.0;
pTemp->entity.curstate.framerate = 50.0;
pTemp->entity.curstate.renderamt = 100;
pTemp->entity.curstate.rendercolor.r = 255;
pTemp->entity.curstate.rendercolor.g = 255;
pTemp->entity.curstate.rendercolor.b = 255;
pTemp->entity.angles = Vector( 90, 0, 0 );
}
}
Ну, всё.
Похожие 1. weapon_flamethrower - Играя в Халф-Лайф, вы не задумывались над тем, что в нем чего-то не хватает? Чего-то очень близкого, родного, горячего... 2. Исходный код снайперки - weapon_sniperrifle с оптическим прицелом 3. Монстры по сети - Для создания кооперативного мода или просто для включения монстров в сетевой игре 4. Больше слотов и позиций для оружия - Больше слотов и позиций для оружия 5. Переключение оружия a la HL2 - Мне не нравится, как переключается оружие в ХЛ. Может, кому-то и интересно тыкать по менюшкам худа, но мне больше нравится реализация переключения в Unreal RTN, Quake Mission Packs и HL2 6. Увеличение количества мяса от взрыв - Увеличение количества мяса от взрывов людей или инопланетян. 7. Функции движка - как и для чего - Функции движка - как и для чего их использовать? 8. Как сделать вортигонта из HL1 другом - Моя первая статья
Cep}|{ 27.01.2013, 8:19:40 пишет :
#1 Интересно, есть ли скриншоты результата?
Cep}|{ 29.01.2013, 19:03:13 пишет :
#5 У кого получилось - делитесь скриншотами =) Добавим в урок.
ONeiLL 07.03.2013, 17:28:22 пишет :
#6 О, это ж мой урок =) Вот скрины: http://hlfx.ru/forum/attachment.php?s=&postid=99657 http://cs-mapping.com.ua/forum/attachment.php?attachmentid=97191 ЗЫ: Первоисточник желательно указывать: http://hlfx.ru/forum/showthread.php?s=&threadid=3451
ONeiLL 08.03.2013, 14:32:27 пишет :
#7 Внёс некоторые изменения в урок
#8 дополни урок, на hlfx он дополнил что еще надо, что бы звук был. Файл world.cpp, функ. void CWorld :: Precache( void ) PRECACHE_SOUND( "items/water_splash/water_splash1.wav" ); PRECACHE_SOUND( "items/water_splash/water_splash2.wav" ); PRECACHE_SOUND( "items/water_splash/water_splash3.wav" );
Вы не можете комментировать, т.к. вы не зарегистрированы.