HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > И снова анимации
мКа с глушаком, и проче косяки)))
Страницы (4): [1] 2 3 4 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
rocksTaa
Житель форума
Девойс

Дата регистрации: Aug 2007
Проживает: космодром плесецк
Сообщений: 162
Возраст: 35

Рейтинг



И снова анимации

парни здарова, у меня апять тупик ()сразу прошу прощения за великоватое сообщение() вот два отрывка кода:
C++(M4A1.cpp):
******************************************/

#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"


LINK_ENTITY_TO_CLASS( weapon_m4a1, Cm4a1 );


enum m4a1_e
{
m4a1_IDLE = 0,
m4a1_FIRE1,
m4a1_FIRE2,
m4a1_FIRE3, //shot unsil
m4a1_RELOAD,
m4a1_RELOAD1, //reload unsil
m4a1_DEPLOY,
m4a1_DEPLOY1, //draw unsil
m4a1_IDLE2, //add unsil
m4a1_IDLE3, //del unsil
m4a1_IDLE4, //idle unsil
};


void Cm4a1::Spawn( )
{
pev->classname = MAKE_STRING("weapon_m4a1");
Precache( );
SET_MODEL(ENT(pev), "models/weapons/primary/w_m4a1.mdl");
m_iAnimLevel = 0;
m_iId = 19;
m_iDefaultAmmo = 30;
FallInit();
}

void Cm4a1::Precache( void )
{
PRECACHE_MODEL("models/weapons/primary/v_m4a1.mdl");
PRECACHE_MODEL("models/weapons/primary/p_m4a1.mdl");
PRECACHE_MODEL("models/weapons/primary/w_m4a1.mdl");
PRECACHE_MODEL("models/weapons/ammo/w_ammo556.mdl");

m_iShell = PRECACHE_MODEL ("models/shell.mdl");

PRECACHE_SOUND ("weapons/m4a1-1.wav");
PRECACHE_SOUND ("weapons/m4a1-2.wav");

m_event = PRECACHE_EVENT( 1, "events/m4a1.sc" );
}

int Cm4a1::GetItemInfo(ItemInfo *p)
{
p->pszName = STRING(pev->classname);
p->pszAmmo1 = "ammo_m4a1"; // The type of ammo it uses
p->iMaxAmmo1 = 90; // Max ammo the player can carry
p->pszAmmo2 = NULL; // No secondary ammo
p->iMaxAmmo2 = -1;
p->iMaxClip = 30; // The clip size
p->iSlot = 0; // The number in the HUD
p->iPosition = 3; // The position in a HUD slot
p->iFlags = 0;
p->iId = m_iId = 19; // The weapon id
p->iWeight = 15; // for autoswitching

return 1;
}

int Cm4a1::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 Cm4a1::Deploy( )
{
g_engfuncs.pfnSetClientMaxspeed(m_pPlayer->edict(), 210 );
if(m_iAnimLevel == 1)
return DefaultDeploy("models/weapons/primary/v_m4a1.mdl", "models/weapons/primary/p_m4a1.mdl",
m4a1_DEPLOY,"bow");
return DefaultDeploy("models/weapons/primary/v_m4a1.mdl", "models/weapons/primary/p_m4a1.mdl",
m4a1_DEPLOY1,"bow");
}

void Cm4a1::PrimaryAttack()
{
// don't fire if empty
if (m_iClip <= 0)
{
PlayEmptySound();
m_flNextPrimaryAttack = 0.15;
return;
{
if(m_iAnimLevel == 0)
{
SendWeaponAnim( m4a1_FIRE3);
}
if(m_iAnimLevel == 1)
{
SendWeaponAnim( m4a1_FIRE1);
}
}
}

// Weapon sound
m_pPlayer->m_iWeaponVolume = NORMAL_GUN_VOLUME;
m_pPlayer->m_iWeaponFlash = DIM_GUN_FLASH;

// one less round in the clip
m_iClip--;

// add a muzzle flash
m_pPlayer->pev->effects = (int)(m_pPlayer->pev->effects) | EF_MUZZLEFLASH;

// player "shoot" animation
m_pPlayer->SetAnimation( PLAYER_ATTACK1 );

Vector vecSrc(m_pPlayer->GetGunPosition());
Vector vecAim(m_pPlayer->GetAutoaimVector(AUTOAIM_2DEGREES));
Vector vecAcc(VECTOR_CONE_2DEGREES);
Vector vecDir(m_pPlayer->FireBulletsPlayer( 1, vecSrc, vecAim, vecAcc, 8192,BULLET_PLAYER_m4a1, 2, 0, m_pPlayer->pev, m_pPlayer->random_seed ));
m_pPlayer->random_seed, m_pPlayer->pev->punchangle.x -= 1.8;

PLAYBACK_EVENT_FULL( FEV_NOTHOST, m_pPlayer->edict(), m_event, 0.0,
(float *)&g_vecZero, (float *)&g_vecZero,
vecDir.x, vecDir.y, 0, 0, (m_iClip ? 0 : 1), 0 );

m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.085;
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat(m_pPlayer->random_seed, 1.085,2.085);
}

void Cm4a1::SecondaryAttack( void )
{
if(m_iAnimLevel == 0)
{
SendWeaponAnim( m4a1_IDLE2 );
m_iAnimLevel = 1;
}
else if(m_iAnimLevel == 1)
{
SendWeaponAnim( m4a1_IDLE3 );
m_iAnimLevel = 0;
}

m_flNextSecondaryAttack = 2.5;
m_flNextPrimaryAttack = 2.5;
}

void Cm4a1::Reload( void )
{
DefaultReload( 30, m4a1_RELOAD, 2.9 );
{
if(m_iAnimLevel == 0)
{
SendWeaponAnim( m4a1_RELOAD1);
}
if(m_iAnimLevel == 1)
{
SendWeaponAnim( m4a1_RELOAD);
}
}
}

void Cm4a1::WeaponIdle( void )
{
ResetEmptySound( );

m_pPlayer->GetAutoaimVector( AUTOAIM_5DEGREES );

if (m_flTimeWeaponIdle > UTIL_WeaponTimeBase())
return;

SendWeaponAnim( m4a1_IDLE );

m_flTimeWeaponIdle = UTIL_SharedRandomFloat(m_pPlayer->random_seed, 10, 15);
{
if(m_iAnimLevel == 0)
{
SendWeaponAnim( m4a1_IDLE4 );
}
if(m_iAnimLevel == 1)
{
SendWeaponAnim( m4a1_IDLE );
}
}
}


//Ammo clip
class Cm4a1AmmoClip : public CBasePlayerAmmo
{
virtual void Spawn( void );
virtual void Precache( void );
virtual BOOL AddAmmo( CBaseEntity *pOther );
};


void Cm4a1AmmoClip::Spawn( void )
{
Precache( );
SET_MODEL(ENT(pev), "models/weapons/ammo/w_ammo556.mdl");
CBasePlayerAmmo::Spawn( );
}

void Cm4a1AmmoClip::Precache( void )
{
PRECACHE_MODEL ("models/weapons/ammo/w_ammo556.mdl");
PRECACHE_SOUND("items/9mmclip1.wav");
}

BOOL Cm4a1AmmoClip::AddAmmo( CBaseEntity *pOther )
{
int bResult = (pOther->GiveAmmo(30, "ammo_m4a1",90) != -1);
if (bResult)
{
EMIT_SOUND(ENT(pev), CHAN_ITEM, "items/9mmclip1.wav", 1, ATTN_NORM);
}
return bResult;
}

LINK_ENTITY_TO_CLASS( ammo_m4a1, Cm4a1AmmoClip );
*********************************************/
и
*********************************************/
C++(ev_hldm.cpp):
//======================
// m4a1 START
//======================

enum m4a1_e
{
m4a1_IDLE = 0,
m4a1_FIRE1,
m4a1_FIRE2,
m4a1_FIRE3, //shot unsil
m4a1_RELOAD,
m4a1_RELOAD1, //reload unsil
m4a1_DEPLOY,
m4a1_DEPLOY1, //draw unsil
m4a1_IDLE2, //add sil
m4a1_IDLE3, //del sil
m4a1_IDLE4, //idle unsil
};

void EV_Firem4a1( event_args_t *args )
{
int idx;
vec3_t origin;
vec3_t angles;
vec3_t velocity;

vec3_t ShellVelocity;
vec3_t ShellOrigin;
int shell;
vec3_t vecSrc, vecAiming;
vec3_t up, right, forward;
float flSpread = 0.01;

idx = args->entindex;
VectorCopy( args->origin, origin );
VectorCopy( args->angles, angles );
VectorCopy( args->velocity, velocity );

AngleVectors( angles, forward, right, up );

if ( EV_IsLocal( idx ) )
{
EV_MuzzleFlash();
gEngfuncs.pEventAPI->EV_WeaponAnimation(m4a1_FIRE1 + gEngfuncs.pfnRandomLong(0,2), 2);

V_PunchAxis( 0, gEngfuncs.pfnRandomFloat( -2, 2 ) );
}

shell = gEngfuncs.pEventAPI->EV_FindModelIndex ("models/shell.mdl");
EV_GetDefaultShellInfo( args, origin, velocity, ShellVelocity, ShellOrigin, forward, right, up, 12, -10, 7 );
EV_EjectBrass(ShellOrigin, ShellVelocity, angles[ YAW ], shell, TE_BOUNCE_SHELL);

switch( gEngfuncs.pfnRandomLong( 0, 1 ) )
{
case 0:
gEngfuncs.pEventAPI->EV_PlaySound( idx, origin, CHAN_WEAPON,
"weapons/m4a1-1.wav",
1, ATTN_NORM, 0,
94 + gEngfuncs.pfnRandomLong( 0, 0xf ) );
break;
case 1:
gEngfuncs.pEventAPI->EV_PlaySound( idx, origin, CHAN_WEAPON,
"weapons/m4a1-2.wav",
1, ATTN_NORM, 0,
94 + gEngfuncs.pfnRandomLong( 0, 0xf ) );
break;
}

EV_GetGunPosition( args, vecSrc, origin );

EV_HLDM_MuzzleFlash( vecSrc, 2.0 + gEngfuncs.pfnRandomFloat( -0.2, 0.2 ) );

VectorCopy( forward, vecAiming );
EV_HLDM_FireBullets( idx,
forward,
right,
up,
1,
vecSrc,
vecAiming,
8192,
BULLET_PLAYER_m4a1,
0,
0,
args->fparam1,
args->fparam2 );
}
//======================
// m4a1 END
//======================

как вы уже наерно догадались дело идёт о накручивании и скручивании глушака на Мке
и всё что с ним связано, а вот и вопрос всё работает но вот есть пара недачётов буду примного благодарен
за помощь в их решении:

1-как исправить стрельбу (немогу понять но походу надо на ev_hldm чёто написать но я незнаю что"ибо не кодер))"), чтобы после
снятия силенцера(впрочем если он и одет тож самое) при стрельбе он не появлялся и не ищезал(чтоб при одетом играли анимации-=-m4a1_FIRE1,m4a1_FIRE2
а при снятом м4а1_FIRE3.)

2-звук при одетом силенцере скажем (m4a1-1, m4a1-2) а при снятом (m4a1-3),

3-(ах да и музелфлаш чтоб не отображался спритес выстрела при одетом глушак)-не обязательно но всёже).

4-и вот ещё что, иногда происходят накладки анимации, начиная проигрывать анимацию снятия глушака(или одевания) тутже воспроизв-ся анимация IDLE.
но это не так страшно как первые два гала.
Пасиба за внимание))).

__________________
rt

Сообщить модератору | | IP: Записан
Сообщение: 24070

Старое сообщение 19-12-2007 17:31
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34588
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Эх... Ну тут проще написать тебе код, чем объяснять, что да как. Жаль, что у меня сейчас на это времени ну совсем нет...

__________________

Сообщить модератору | | IP: Записан
Сообщение: 24072

Старое сообщение 19-12-2007 18:01
-
rocksTaa
Житель форума
Девойс

Дата регистрации: Aug 2007
Проживает: космодром плесецк
Сообщений: 162
Возраст: 35

Рейтинг



ну там же савсем немного написать то надо, мне пазарез надо исправит первые 2а бага , я это и сам почти сделал но както каряво а хочеццо то по людски))).плиззз хэлп!

Добавлено сегодня в 16:41:

ну неужели никто ничего подобного не делал?

__________________
rt

Сообщить модератору | | IP: Записан
Сообщение: 24124

Старое сообщение 21-12-2007 10:41
- За что?
ToMMuK
SmallHabit'at

Дата регистрации: Jun 2006
Проживает: Рига
Сообщений: 634
Возраст: 32

Рейтинг



rocksTaa Жди пока я приеду домой... ))) и обьясню ))

__________________
Сайт латвийского мода

Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.

Сообщить модератору | | IP: Записан
Сообщение: 24180

Старое сообщение 22-12-2007 11:09
- За что?
Тренсфер
Житель форума

Дата регистрации: Mar 2007
Проживает: (void)
Сообщений: 327

Рейтинг



Я делал, и в своё время с этим 3 дня мучился. Насколько я понял глушак на стволе делается анимацией (как в контре), а не сменой бодей. Очень советую хотя бы милкшейпом превратить глушак в отдельную боди, а то запаришься каждый раз вести проверку переменной для выбора нужной анимации. Боди на пошке сменяется командой pev->body номер боди. Можешь посмотреть как это в питоне сделано. Однако есть тонкости:
1 указывать боди при каждом проигравании анимации пушки в качестве 2 параметра.
2 указывать боди из процудуры Deploy
3 Отсылать боди в эвенте который ты посылаешь при выстреле.
4 боди хоть и сохраняется в сейв, но восстанавливается на модели пушки после сохранения\загрузки не сразу, поэтому надо вызвать из прекиша ресурсов функцию idle или воспользоваться тутором Xash weapon system там это дело хорошо пролечили.
5 (сам шишку набил ) если ты решил не юзать Xash weapon system то на клиенте неизбежно возникнет глюк с разногласием значений переменных которыя хранят текущее состояние глушителя после сохранения\загрузки. Выход: установи условную компиляцию на код проверок состояния глушителя.
P.S. слишком мудрёно описал - устал просто

Добавлено 22-12-2007 в 22:57:

Не как руки не дойдут написать тутор про глушители -наверное пора от лени лечится

__________________
Хотелось бы, чтобы не только хотелось...

Сообщить модератору | | IP: Записан
Сообщение: 24192

Старое сообщение 22-12-2007 19:57
- За что?
rocksTaa
Житель форума
Девойс

Дата регистрации: Aug 2007
Проживает: космодром плесецк
Сообщений: 162
Возраст: 35

Рейтинг



мдю блин тут вся загвоздка на клиенте в ев_хлдм.срр, косяк токо при стрельбе, примерно так делал-
аним левель= 0
то играет анимация m4a1_Fire1
если аним левель= 1
то играет анимация m4a1_Fire2;
но просит задеклорировать переменную-m_iAnimLevel декларирую на ев_хлдм.н, в игре косяк с глушаком прапал,но вместо анимаций выстрела играет анимайия idle

__________________
rt

Сообщить модератору | | IP: Записан
Сообщение: 24195

Старое сообщение 23-12-2007 10:40
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



rocksTaa не парься и сделай анимации и звуки стрельбы на сервере а в клиент не лазь.

Сообщить модератору | | IP: Записан
Сообщение: 24199

Старое сообщение 23-12-2007 11:05
- За что?
rocksTaa
Житель форума
Девойс

Дата регистрации: Aug 2007
Проживает: космодром плесецк
Сообщений: 162
Возраст: 35

Рейтинг



Ku2zoff>> если не трогать клиент то анимации стрельбы не будет , или не так? коли не так то напиши что сделать?раз знаеш.

__________________
rt

Сообщить модератору | | IP: Записан
Сообщение: 24212

Старое сообщение 23-12-2007 15:16
- За что?
Тренсфер
Житель форума

Дата регистрации: Mar 2007
Проживает: (void)
Сообщений: 327

Рейтинг



Можно ибез клиента анимацию проиграть в праймару атак вставь SendWeaponAnim( m4a1_FIRE); перед m_pPlayer->SetAnimation( PLAYER_ATTACK1 );
А на клиенте убери соответственный:

C++ Source Code:
gEngfuncs.pEventAPI->EV_WeaponAnimation(m4a1_FIRE1 + gEngfuncs.pfnRandomLong(0,2), 2);


Добавлено 23-12-2007 в 18:43:

Примерно тоже самое и со звуками.

__________________
Хотелось бы, чтобы не только хотелось...

Сообщить модератору | | IP: Записан
Сообщение: 24214

Старое сообщение 23-12-2007 15:43
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



>>если не трогать клиент то анимации стрельбы не будет , или не так? коли не так то напиши что сделать?раз знаеш.


Вот отрывок кода из лазерного пистолета:

C++ Source Code:
1
EMIT_SOUND_DYN(ENT(m_pPlayer->pev), CHAN_WEAPON, "weapons/railgun/fire1.wav", RANDOM_FLOAT(0.95, 1.0), ATTN_NORM, 0, 110 );
2
m_pPlayer->m_iWeaponVolume = NORMAL_GUN_VOLUME;
3
SendWeaponAnim( RAIL_FIRE );
4
m_pPlayer->SetAnimation( PLAYER_ATTACK1 );


Ивэнты можно тогда вообще убрать.

Сообщить модератору | | IP: Записан
Сообщение: 24218

Старое сообщение 23-12-2007 16:51
- За что?
rocksTaa
Житель форума
Девойс

Дата регистрации: Aug 2007
Проживает: космодром плесецк
Сообщений: 162
Возраст: 35

Рейтинг



Пасиб пацаны, прям низнаю чтоб без вас бы делал), и вот чтоб не создавать новую тему помогите плизз ещё с 1й идейкой-Zoom, с состряпал модельку оптическоо прицела(позаимствовал систему из firearms) вот и вопрос как сделать чтоб при секондарнай атаке эта модель сменяла пушку , но чтобы и FOV с срайтом прицела никуда не пропал?

__________________
rt

Сообщить модератору | | IP: Записан
Сообщение: 24246

Старое сообщение 24-12-2007 11:57
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



rocksTaa меняй у игрока pev->viewmodel на модель прицела, а когда прицел отключается, возвращай нормальную, вот и всё. Как это делается - смотри weapons.cpp CBasePlayerWeapon::DefaultDeploy всё просто (-;

Сообщить модератору | | IP: Записан
Сообщение: 24267

Старое сообщение 24-12-2007 17:43
- За что?
rocksTaa
Житель форума
Девойс

Дата регистрации: Aug 2007
Проживает: космодром плесецк
Сообщений: 162
Возраст: 35

Рейтинг



пасиб))

__________________
rt

Сообщить модератору | | IP: Записан
Сообщение: 24272

Старое сообщение 24-12-2007 18:53
- За что?
rocksTaa
Житель форума
Девойс

Дата регистрации: Aug 2007
Проживает: космодром плесецк
Сообщений: 162
Возраст: 35

Рейтинг



Ku2zoff- а чё писать то? я нашол>>m_pPlayer->pev->weaponmodel = MAKE_STRING(szWeaponModel); меня интересует что писать после"=" пишу скажем - void Csig::SecondaryAttack()
{
if ( m_pPlayer->pev->fov != 0 )
{
m_pPlayer->pev->fov = m_pPlayer->m_iFOV = 0; // 0 means reset to default fov
m_fInZoom = 0;
m_pPlayer->pev->weaponmodel = MAKE_STRING(v_sig);
}
else if ( m_pPlayer->pev->fov != 20 )
{
m_pPlayer->pev->fov = m_pPlayer->m_iFOV = 20;
m_fInZoom = 1;
m_pPlayer->pev->weaponmodel = MAKE_STRING(scope_sig);
}

pev->nextthink = UTIL_WeaponTimeBase() + 0.1;
m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 1.0;
}
он просит меня задеклорировать "scope_sig" и "v_sig" но это не поможет, мот чёт другое надо писать?

__________________
rt

Сообщить модератору | | IP: Записан
Сообщение: 24298

Старое сообщение 25-12-2007 09:45
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



rocksTaa пишешь после = вот что:

m_pPlayer->pev->viewmodel = MAKE_STRING("models/scope_sig.mdl");

или другую нужную тебе модель. (модель не забудь прекешить)

Только не pev->weaponmodel а pev->viewmodel( pev->weaponmodel это модель от третьего лица в руках игрока, а pev->viewmodel это модель от первого лица)

Сообщить модератору | | IP: Записан
Сообщение: 24301

Старое сообщение 25-12-2007 10:51
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 21:41. Новая тема    Ответить
Страницы (4): [1] 2 3 4 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > И снова анимации
мКа с глушаком, и проче косяки)))
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024