HLFX.Ru Forum
Показать все 75 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Исходные коды оружия (https://hlfx.ru/forum/showthread.php?threadid=611)


Отправлено Ku2zoff 20-04-2007 в 12:30:

Half-Life Исходные коды оружия

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

И начну я со своего любимого оружия ближнего боя - ножа.



Вот значит, weapon_knife (Нож) с двумя режимами атаки: Slash и Stab.
Нож мой похож на нож в Counter-Strike. Кто хочет - юзайте как хотите и где хотите.
В Readme можете меня не упомянать(Если не хотите).

Для начала надо добавить в проект файл knife.cpp

Потом открываем game.cpp и добавляем в него:

// Tripmine
cvar_t sk_plr_tripmine1 = {"sk_plr_tripmine1","0"};
cvar_t sk_plr_tripmine2 = {"sk_plr_tripmine2","0"};
cvar_t sk_plr_tripmine3 = {"sk_plr_tripmine3","0"};// <= уже есть этот код

// Knife slash
cvar_t sk_plr_knife1 = {"sk_plr_knife1","0"};
cvar_t sk_plr_knife2 = {"sk_plr_knife2","0"};
cvar_t sk_plr_knife3 = {"sk_plr_knife3","0"};

// Knife stab
cvar_t sk_plr_knife_stab1 = {"sk_plr_knife_stab1","0"};
cvar_t sk_plr_knife_stab2 = {"sk_plr_knife_stab2","0"};
cvar_t sk_plr_knife_stab3 = {"sk_plr_knife_stab3","0"}; //новый код

Затем спускаемся ниже и аналогично добавляем:

// Tripmine
CVAR_REGISTER ( &sk_plr_tripmine1 );// {"sk_plr_tripmine1","0"};
CVAR_REGISTER ( &sk_plr_tripmine2 );// {"sk_plr_tripmine2","0"};
CVAR_REGISTER ( &sk_plr_tripmine3 );// {"sk_plr_tripmine3","0"};//существующий код

// Knife slash
CVAR_REGISTER ( &sk_plr_knife1 );// {"sk_plr_knife1","0"};
CVAR_REGISTER ( &sk_plr_knife2 );// {"sk_plr_knife2","0"};
CVAR_REGISTER ( &sk_plr_knife3 );// {"sk_plr_knife3","0"};

// Knife stab
CVAR_REGISTER ( &sk_plr_knife_stab1 );// {"sk_plr_knife_stab1","0"};
CVAR_REGISTER ( &sk_plr_knife_stab2 );// {"sk_plr_knife_stab2","0"};
CVAR_REGISTER ( &sk_plr_knife_stab3 );// {"sk_plr_knife_stab3","0"};//новый код

После этого открываем gamerules.cpp и дописываем после

// Tripmine
gSkillData.plrDmgTripmine = GetSkillCvar( "sk_plr_tripmine");

вот это:

// Knife slash
gSkillData.plrDmgKnife = GetSkillCvar( "sk_plr_knife");
// Knife stab
gSkillData.plrDmgKnifeStab = GetSkillCvar( "sk_plr_knife_stab");


Потом надо открыть multiplay_gamerules.cpp и точно также после

// Tripmine
gSkillData.plrDmgTripmine = 150;

добавить:

// Knife slash
gSkillData.plrDmgKnife = 15;

// Knife stab
gSkillData.plrDmgKnifeStab = 35;//значения могут быть любыми, это убойная сила ножа в мультиплеере

Если вы хотите, чтобы нож можно было получить с помощью
команды impulse 101, то откройте player.cpp и сделайте следующее:

case 101:
gEvilImpulse101 = TRUE;
GiveNamedItem( "item_suit" );
GiveNamedItem( "item_battery" );
GiveNamedItem( "weapon_crowbar" );
GiveNamedItem( "weapon_9mmhandgun" );
GiveNamedItem( "ammo_9mmclip" );
GiveNamedItem( "weapon_shotgun" );
GiveNamedItem( "ammo_buckshot" );
GiveNamedItem( "weapon_9mmAR" );
GiveNamedItem( "ammo_9mmAR" );
GiveNamedItem( "ammo_ARgrenades" );
GiveNamedItem( "weapon_handgrenade" );
GiveNamedItem( "weapon_tripmine" );
GiveNamedItem( "weapon_knife" );//новая строчка
#ifndef OEM_BUILD

Затем в файле skill.h добавьте:

float plrDmgRPG;
float plrDmgGauss;
float plrDmgEgonNarrow;
float plrDmgEgonWide;
float plrDmgHornet;
float plrDmgHandGrenade;
float plrDmgSatchel;
float plrDmgTripmine;
float plrDmgKnife;
float plrDmgKnifeStab;//для ножа

После в weapons.cpp в функцию void W_Precache(void) добавьте

// knife
UTIL_PrecacheOtherWeapon( "weapon_knife" );


Потом надо добавить новые значения в weapons.h:

#define WEAPON_HORNETGUN 11
#define WEAPON_HANDGRENADE 12
#define WEAPON_TRIPMINE 13
#define WEAPON_SATCHEL 14
#define WEAPON_SNARK 15
#define WEAPON_KNIFE 16//Новая строчка

Ниже:

#define HORNETGUN_WEIGHT 10
#define HANDGRENADE_WEIGHT 5
#define AKM_WEIGHT 20
#define SATCHEL_WEIGHT -10
#define TRIPMINE_WEIGHT -10
#define SNARK_WEIGHT -10
#define KNIFE_WEIGHT 10//Новая строчка

И, наконец в самом низу файла после

class CTripmine : public CBasePlayerWeapon
{
public:
void Spawn( void );
void Precache( void );
int iItemSlot( void ) { return 5; }
int GetItemInfo(ItemInfo *p);
void SetObjectCollisionBox( void )
{
//!!!BUGBUG - fix the model!
pev->absmin = pev->origin + Vector(-16, -16, -5);
pev->absmax = pev->origin + Vector(16, 16, 28);
}

void PrimaryAttack( void );
BOOL Deploy( void );
void Holster( int skiplocal = 0 );
void WeaponIdle( void );

virtual BOOL UseDecrement( void )
{
#if defined( CLIENT_WEAPONS )
return TRUE;
#else
return FALSE;
#endif
}

private:
unsigned short m_usTripFire;

};

Нужно вставить вот это:

class CKnife : public CBasePlayerWeapon
{
public:
void Spawn( void );
void Precache( void );
int iItemSlot( void ) { return 1; }
void EXPORT SlashAgain( void );
void EXPORT StabAgain( void );
int GetItemInfo(ItemInfo *p);
void EXPORT Smack( void );
void WeaponIdle( void );

void PrimaryAttack( void );
void SecondaryAttack( void );
int Stab( int fFirst );
int Slash( int fFirst );
BOOL Deploy( void );
void Holster( int skiplocal = 0 );
int m_iSlash;
int m_iStab;
TraceResult m_trHit;

virtual BOOL UseDecrement( void )
{
#if defined( CLIENT_WEAPONS )
return TRUE;
#else
return FALSE;
#endif
}
private:
unsigned short m_usKnife;
};


С сервером мы закончили, переходим на клиент.

В папке cl_dll находим файл EV_HLDM.cpp и добавляем:

void EV_EgonStop( struct event_args_s *args );
void EV_HornetGunFire( struct event_args_s *args );
void EV_TripmineFire( struct event_args_s *args );
void EV_SnarkFire( struct event_args_s *args );
void EV_Knife( struct event_args_s *args );//Новая строчка

После спускаемся вниз и после

//======================
// SQUEAK START
//======================
enum squeak_e {
SQUEAK_IDLE1 = 0,
SQUEAK_FIDGETFIT,
SQUEAK_FIDGETNIP,
SQUEAK_DOWN,
SQUEAK_UP,
SQUEAK_THROW
};

#define VEC_HULL_MIN Vector(-16, -16, -36)
#define VEC_DUCK_HULL_MIN Vector(-16, -16, -18 )

void EV_SnarkFire( event_args_t *args )
{
int idx;
vec3_t vecSrc, angles, view_ofs, forward;
pmtrace_t tr;

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

AngleVectors ( angles, forward, NULL, NULL );

if ( !EV_IsLocal ( idx ) )
return;

if ( args->ducking )
vecSrc = vecSrc - ( VEC_HULL_MIN - VEC_DUCK_HULL_MIN );

// Store off the old count
gEngfuncs.pEventAPI->EV_PushPMStates();

// Now add in all of the players.
gEngfuncs.pEventAPI->EV_SetSolidPlayers ( idx - 1 );
gEngfuncs.pEventAPI->EV_SetTraceHull( 2 );
gEngfuncs.pEventAPI->EV_PlayerTrace( vecSrc + forward * 20, vecSrc + forward * 64, PM_NORMAL, -1, &tr );

//Find space to drop the thing.
if ( tr.allsolid == 0 && tr.startsolid == 0 && tr.fraction > 0.25 )
gEngfuncs.pEventAPI->EV_WeaponAnimation ( SQUEAK_THROW, 0 );

gEngfuncs.pEventAPI->EV_PopPMStates();
}
//======================
// SQUEAK END
//======================

Добавляем новый event:

//======================
// KNIFE START
//======================
enum knife_e {
KNIFE_IDLE = 0,
KNIFE_DRAW,
KNIFE_HOLSTER,
KNIFE_SLASH,
KNIFE_STAB,
KNIFE_STABMISS
};
void EV_Knife( event_args_t *args )
{
int idx;
vec3_t origin;

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

//Play Swing sound
gEngfuncs.pEventAPI->EV_PlaySound( idx, origin, CHAN_WEAPON, "weapons/knife_miss1.wav", 1, ATTN_NORM, 0, PITCH_NORM);
}
//======================
// KNIFE END
//======================

Потом идём в файл view.cpp

{ "models/p_shotgun.mdl", "models/v_shotgun.mdl" },
{ "models/p_squeak.mdl", "models/v_squeak.mdl" },
{ "models/p_tripmine.mdl", "models/v_tripmine.mdl" },
{ "models/p_satchel_radio.mdl", "models/v_satchel_radio.mdl" },
{ "models/p_satchel.mdl", "models/v_satchel.mdl" },
{ "models/p_knife.mdl", "models/v_knife.mdl" },//Новая строчка


После открываем hl_events.cpp

void EV_HornetGunFire( struct event_args_s *args );
void EV_TripmineFire( struct event_args_s *args );
void EV_SnarkFire( struct event_args_s *args );
void EV_Knife( struct event_args_s *args );//Новая строчка

Затем спускаемся ниже:

gEngfuncs.pfnHookEvent( "events/firehornet.sc", EV_HornetGunFire );
gEngfuncs.pfnHookEvent( "events/tripfire.sc", EV_TripmineFire );
gEngfuncs.pfnHookEvent( "events/snarkfire.sc", EV_SnarkFire );
gEngfuncs.pfnHookEvent( "events/knife.sc", EV_Knife );//Новая строчка

И последний файл клиента hl_weapons.cpp

CHgun g_HGun;
CHandGrenade g_HandGren;
CSatchel g_Satchel;
CTripmine g_Tripmine;
CSqueak g_Snark;
CKnife g_Knife;//Новая строчка

Затем ниже в функции void HUD_InitClientWeapons( void )

HUD_PrepEntity( &g_HGun , &player );
HUD_PrepEntity( &g_HandGren , &player );
HUD_PrepEntity( &g_Satchel , &player );
HUD_PrepEntity( &g_Tripmine , &player );
HUD_PrepEntity( &g_Snark , &player );
HUD_PrepEntity( &g_Knife , &player );//Новая строчка

Ещё ниже после

case WEAPON_SNARK:
pWeapon = &g_Snark;
break;

Пишем:

case WEAPON_KNIFE:
pWeapon = &g_Knife;
break;





На этом всё и не забудте создать файл knife.sc в папке events вашего мода.

Модели, звуки для ножа и сам knife.cpp в архиве.


Отправлено fire64 20-04-2007 в 18:47:

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


Отправлено Ku2zoff 21-04-2007 в 11:12:

Fire64 я пробовал писать лучемёт, но он у меня не получился, надо будет спросить у XaeroX'a

Скоро я выложу ещё снайперку, кластерную гранату и дымовую гранату(но это лишь баловство для мультиплеера, т.к. в сингле боты видят сквозь дым)

P.S. Если нож не будет компилиться поменяй в нём параметр BULLET_PLAYER_KNIFE на BULLET_PLAYER_CROWBAR. А то я забыл поменять...


Отправлено Дядя Миша 21-04-2007 в 11:13:

Ku2zoff наловчи ботов не видеть сквозъ дым


Отправлено XaeroX 21-04-2007 в 11:27:

Ku2zoff ну что сложного с дымом то... Определяешь радиус, в котором дым есть, центр - это граната. В ф-и "смотрения вперед" бота делаешь проверку на пересечение луча (взгляда бота) и сферы (дыма) и в завис. от расстояния до центра сферы и плотности дыма определяешь, видит он или нет.

__________________

xaerox on Vivino


Отправлено Ku2zoff 21-04-2007 в 11:33:

Ладно, попробую я же не профи, а любитель
XaeroX , Дядя Миша на какую оценку потянет мой нож по пятибальной системе?


Отправлено XaeroX 21-04-2007 в 12:00:

Цитата:
Ku2zoff писал:
на какую оценку потянет мой нож по пятибальной системе?

На 3+ или 4- Ничего особо оригинального в коде не заметил.

__________________

xaerox on Vivino


Отправлено fire64 21-04-2007 в 12:42:

не получается создать нож

view.cpp
Creating library .\Release/client.lib and object .\Release/client.exp
hl_weapons.obj : error LNK2001: unresolved external symbol "public: virtual void
__thiscall CKnife::WeaponIdle(void)" (?WeaponIdle@CKnife@@UAEXXZ)
hl_weapons.obj : error LNK2001: unresolved external symbol "public: virtual void
__thiscall CKnife::SecondaryAttack(void)" (?SecondaryAttack@CKnife@@UAEXXZ)
hl_weapons.obj : error LNK2001: unresolved external symbol "public: virtual void
__thiscall CKnife::PrimaryAttack(void)" (?PrimaryAttack@CKnife@@UAEXXZ)
hl_weapons.obj : error LNK2001: unresolved external symbol "public: virtual void
__thiscall CKnife::Holster(int)" (?Holster@CKnife@@UAEXH@Z)
hl_weapons.obj : error LNK2001: unresolved external symbol "public: virtual int
__thiscall CKnife::Deploy(void)" (?Deploy@CKnife@@UAEHXZ)
hl_weapons.obj : error LNK2001: unresolved external symbol "public: virtual int
__thiscall CKnife::GetItemInfo(struct ItemInfo *)" (?GetItemInfo@CKnife@@UAEHPAU
ItemInfo@@@Z)
hl_weapons.obj : error LNK2001: unresolved external symbol "public: virtual void
__thiscall CKnife::Precache(void)" (?Precache@CKnife@@UAEXXZ)
hl_weapons.obj : error LNK2001: unresolved external symbol "public: virtual void
__thiscall CKnife::Spawn(void)" (?Spawn@CKnife@@UAEXXZ)
.\Release\client.dll : fatal error LNK1120: 8 unresolved externals
"Dll compiling failed!"


Отправлено ToMMuK 21-04-2007 в 12:57:

А ты в Клиентскую Длл добавь файл ножа.

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

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


Отправлено fire64 21-04-2007 в 13:17:

вроде откомпилировал без ошибок
сейчас буду тестить

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

все работает


Отправлено Ku2zoff 22-04-2007 в 05:10:

Чтож, в ноже действительно нет ничего оригинального. Может снайперка окажется лучше.



Как я и обещал, я выложил снайперку (weapon_sniperrifle) с оптическим прицелом.
Вот она:
Добавим в проект файл rifle.cpp

Потом открываем game.cpp и аналогично, как было с ножом, добавляем в него:

// Rifle
cvar_t sk_plr_snpr_bullet1 = {"sk_plr_snpr_bullet1","0"};
cvar_t sk_plr_snpr_bullet2 = {"sk_plr_snpr_bullet2","0"};
cvar_t sk_plr_snpr_bullet3 = {"sk_plr_snpr_bullet3","0"};

Затем спускаемся ниже и добавляем:

// Rifle
CVAR_REGISTER ( &sk_plr_snpr_bullet1 );// {"sk_plr_bullet1","0"};
CVAR_REGISTER ( &sk_plr_snpr_bullet2 );// {"sk_plr_bullet2","0"};
CVAR_REGISTER ( &sk_plr_snpr_bullet3 );// {"sk_plr_bullet3","0"};

После этого открываем gamerules.cpp и дописываем:

// Rifle
gSkillData.plrDmgSniper = GetSkillCvar( "sk_plr_snpr_bullet");


Потом в multiplay_gamerules.cpp добавляем:

// Rifle
gSkillData.plrDmgSniper = 100;//значения могут быть любыми, это убойная сила винтовки в мультиплеере

Если вы хотите, чтобы винтовку можно было получить с помощью
команды impulse 101, то откройте player.cpp и сделайте следующее:

case 101:
gEvilImpulse101 = TRUE;
GiveNamedItem( "item_suit" );
GiveNamedItem( "item_battery" );
GiveNamedItem( "weapon_crowbar" );
GiveNamedItem( "weapon_9mmhandgun" );
GiveNamedItem( "ammo_9mmclip" );
GiveNamedItem( "weapon_shotgun" );
GiveNamedItem( "ammo_buckshot" );
GiveNamedItem( "weapon_9mmAR" );
GiveNamedItem( "ammo_9mmAR" );
GiveNamedItem( "ammo_ARgrenades" );
GiveNamedItem( "weapon_handgrenade" );
GiveNamedItem( "weapon_tripmine" );
GiveNamedItem( "weapon_knife" );
GiveNamedItem( "weapon_sniperrifle" );//новая строчка
#ifndef OEM_BUILD

Затем в файле skill.h добавьте:

float plrDmgSniper;

После в weapons.cpp в функцию void W_Precache(void) добавьте

// Rifle
UTIL_PrecacheOtherWeapon( "weapon_sniperrifle" );
UTIL_PrecacheOther( "ammo_338" );


Потом надо добавить новые значения в weapons.h:


#define WEAPON_SNARK 15
#define WEAPON_KNIFE 16
#define WEAPON_SNIPERRIFLE 17//Новая строчка

Ниже:

#define SNARK_WEIGHT -10
#define KNIFE_WEIGHT 10
#define SNIPERRIFLE_WEIGHT 10//Новая строчка

Затем ещё ниже:

#define TRIPMINE_MAX_CARRY 8
#define SNARK_MAX_CARRY 15
#define HORNET_MAX_CARRY 10
#define M203_GRENADE_MAX_CARRY 10
#define _338_MAX_CARRY 30//Максимум патронов для винтовки

И затем ещё ниже:

#define SATCHEL_MAX_CLIP WEAPON_NOCLIP
#define TRIPMINE_MAX_CLIP WEAPON_NOCLIP
#define SNARK_MAX_CLIP WEAPON_NOCLIP
#define SNIPERRIFLE_MAX_CLIP 10//Количество патронов в магазине у винтовки

Потом ещё ниже:

#define TRIPMINE_DEFAULT_GIVE 1
#define SNARK_DEFAULT_GIVE 5
#define HIVEHAND_DEFAULT_GIVE 10
#define SNIPERRIFLE_DEFAULT_GIVE 10//Патроны в магазине только что поднятой винтовки

Далее, разумеется, ещё ниже:

#define AMMO_RPGCLIP_GIVE RPG_MAX_CLIP
#define AMMO_URANIUMBOX_GIVE 20
#define AMMO_SNARKBOX_GIVE 5
#define AMMO_SNIPERRIFLECLIP_GIVE SNIPERRIFLE_MAX_CLIP//Сколько патронов в только что поднятой обойме

И, наконец в самом низу файла нужно вставить вот это:

class CSniperrifle : public CBasePlayerWeapon
{
public:
void Spawn( void );
void Precache( void );
int iItemSlot( void ) { return 6; }
int GetItemInfo(ItemInfo *p);
int AddToPlayer( CBasePlayer *pPlayer );
void PrimaryAttack( void );
void SecondaryAttack( void );
BOOL Deploy( void );
void Holster( int skiplocal = 0 );
void Reload( void );
void WeaponIdle( void );
void Shoot( float flSpread, float flCycleTime, BOOL fUseAutoAim );
float m_flSoundDelay;

BOOL m_fInZoom;// don't save this.

virtual BOOL UseDecrement( void )
{
#if defined( CLIENT_WEAPONS )
return TRUE;
#else
return FALSE;
#endif
}

private:
unsigned short m_usFireSniper;
};

Так как винтовка это огнестрельное оружие, надо
провести ещё несколько операций, для полной её работоспособности:

Открывем файл cbase.h и добавляем:

int ammo_9mm;
int ammo_357;
int ammo_bolts;
int ammo_buckshot;
int ammo_rockets;
int ammo_uranium;
int ammo_hornets;
int ammo_argrens;
int ammo_338;//Если мы создали для винтовки новые патроны, то придётся повозиться, иначе будут косяки с перезарядкой

После идём в client.cpp и в функции void UpdateClientData делаем так:

cd->ammo_rockets = pl->ammo_rockets;
cd->ammo_cells = pl->ammo_uranium;
cd->vuser2.x = pl->ammo_hornets;
cd->vuser2.y = pl->ammo_338;//Если это не сделать то время от времени у винтовки не будет рисоваться анимация перезарядки

!!!Внимание!!! параметр cd->vuser2.y обязательно должен отличаться от уже имеющихся cd->ammo_rockets, cd->vuser2.x и других подобных им

После этого идём в combat.cpp и добавляем в функцию Vector CBaseEntity::FireBulletsPlayer вот это:

case BULLET_PLAYER_BUCKSHOT:
// make distance based!
pEntity->TraceAttack(pevAttacker, gSkillData.plrDmgBuckshot, vecDir, &tr, DMG_BULLET);
break;

case BULLET_PLAYER_357:
pEntity->TraceAttack(pevAttacker, gSkillData.plrDmg357, vecDir, &tr, DMG_BULLET);
break;

case BULLET_PLAYER_338:
pEntity->TraceAttack(pevAttacker, gSkillData.plrDmgSniper, vecDir, &tr, DMG_BULLET); //Вот она, убойная сила винтовки
break;


После этого открываем player.cpp и дописываем в функцию void CBasePlayer::TabulateAmmo() это:

ammo_rockets = AmmoInventory( GetAmmoIndex( "rockets" ) );
ammo_uranium = AmmoInventory( GetAmmoIndex( "uranium" ) );
ammo_hornets = AmmoInventory( GetAmmoIndex( "Hornets" ) );
ammo_338 = AmmoInventory( GetAmmoIndex( "338" ) );//Патроны снайперки

После спускаемся к коду impulse 101 и дописываем:

#ifndef OEM_BUILD
GiveNamedItem( "weapon_357" );
GiveNamedItem( "ammo_357" );
GiveNamedItem( "weapon_crossbow" );
GiveNamedItem( "ammo_crossbow" );
GiveNamedItem( "weapon_egon" );
GiveNamedItem( "weapon_gauss" );
GiveNamedItem( "ammo_gaussclip" );
GiveNamedItem( "weapon_rpg" );
GiveNamedItem( "ammo_rpgclip" );
GiveNamedItem( "weapon_satchel" );
GiveNamedItem( "weapon_snark" );
GiveNamedItem( "weapon_hornetgun" );
GiveNamedItem( "ammo_338" );//Получаем патроны для винтовки при повторном вводе impulse 101
#endif

После этого нам надо вернуться в weapons.h и добавить:

typedef enum
{
BULLET_NONE = 0,
BULLET_PLAYER_9MM, // glock
BULLET_PLAYER_MP5, // mp5
BULLET_PLAYER_357, // python
BULLET_PLAYER_BUCKSHOT, // shotgun
BULLET_PLAYER_CROWBAR, // crowbar swipe
BULLET_PLAYER_338,//Для винтовки

BULLET_MONSTER_9MM,
BULLET_MONSTER_MP5,
BULLET_MONSTER_12MM,
} Bullet;

С сервером всё, переходим на клиентскую сторону.

В ev_hldm.cpp добавляем:

void EV_EgonStop( struct event_args_s *args );
void EV_HornetGunFire( struct event_args_s *args );
void EV_TripmineFire( struct event_args_s *args );
void EV_SnarkFire( struct event_args_s *args );
void EV_Knife( struct event_args_s *args );
void EV_FireSniper( struct event_args_s *args );//Новая строчка

Потом спускаемся вниз и добавляем новый event:

//======================
// RIFLE START
//======================
enum sniperrifle_e {
SNIPERRIFLE_DRAW = 0,
SNIPERRIFLE_SLOWIDLE,
SNIPERRIFLE_FIRE1,
SNIPERRIFLE_FIRELASTROUND,
SNIPERRIFLE_RELOAD,
SNIPERRIFLE_RELOAD2,
SNIPERRIFLE_SLOWIDLEEMPTY,
SNIPERRIFLE_HOLSTER,
};

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

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 );
empty = args->bparam1;

AngleVectors( angles, forward, right, up );


if ( EV_IsLocal( idx ) )
{
// Add muzzle flash to current weapon model
EV_MuzzleFlash();
gEngfuncs.pEventAPI->EV_WeaponAnimation( empty ? SNIPERRIFLE_FIRELASTROUND : SNIPERRIFLE_FIRE1, 2 );

V_PunchAxis( 0, -20.0 );
}

gEngfuncs.pEventAPI->EV_PlaySound( idx, origin, CHAN_WEAPON, "weapons/sniper_fire1.wav", gEngfuncs.pfnRandomFloat(0.8, 0.9), ATTN_NORM, 0, PITCH_NORM );


EV_GetGunPosition( args, vecSrc, origin );

VectorCopy( forward, vecAiming );

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

Потом идём в файл view.cpp

{ "models/p_shotgun.mdl", "models/v_shotgun.mdl" },
{ "models/p_squeak.mdl", "models/v_squeak.mdl" },
{ "models/p_tripmine.mdl", "models/v_tripmine.mdl" },
{ "models/p_satchel_radio.mdl", "models/v_satchel_radio.mdl" },
{ "models/p_satchel.mdl", "models/v_satchel.mdl" },
{ "models/p_knife.mdl", "models/v_knife.mdl" },
{ "models/p_sniper.mdl", "models/v_sniper.mdl" },//Новая строчка


После открываем hl_events.cpp

void EV_HornetGunFire( struct event_args_s *args );
void EV_TripmineFire( struct event_args_s *args );
void EV_SnarkFire( struct event_args_s *args );
void EV_Knife( struct event_args_s *args );
void EV_FireSniper( struct event_args_s *args );//Новая строчка

Затем спускаемся ниже:

gEngfuncs.pfnHookEvent( "events/firehornet.sc", EV_HornetGunFire );
gEngfuncs.pfnHookEvent( "events/tripfire.sc", EV_TripmineFire );
gEngfuncs.pfnHookEvent( "events/snarkfire.sc", EV_SnarkFire );
gEngfuncs.pfnHookEvent( "events/knife.sc", EV_Knife );
gEngfuncs.pfnHookEvent( "events/sniper.sc", EV_FireSniper );//Новая строчка

И последний файл клиента hl_weapons.cpp

CHgun g_HGun;
CHandGrenade g_HandGren;
CSatchel g_Satchel;
CTripmine g_Tripmine;
CSqueak g_Snark;
CKnife g_Knife;
CSniperrifle g_Sniperrifle;//Новая строчка

Затем ниже в функции void HUD_InitClientWeapons( void )

HUD_PrepEntity( &g_HGun , &player );
HUD_PrepEntity( &g_HandGren , &player );
HUD_PrepEntity( &g_Satchel , &player );
HUD_PrepEntity( &g_Tripmine , &player );
HUD_PrepEntity( &g_Snark , &player );
HUD_PrepEntity( &g_Knife , &player );
HUD_PrepEntity( &g_Sniperrifle , &player );//Новая строчка

Ещё ниже к подобным параметрам пишем:

case WEAPON_SNIPERRIFLE:
pWeapon = &g_Sniperrifle;
break;


На этом кодинг винтовки закончен. Начинаем работу с оптическим прицелом.
Добавляем в клиент zoom.cpp

В файле hud.cpp в функцию void CHud :: Init( void ) добавляем:

m_StatusBar.Init();
m_DeathNotice.Init();
m_AmmoSecondary.Init();
m_TextMessage.Init();
m_StatusIcons.Init();

m_Zoom.Init();//новая строчка

GetClientVoiceMgr()->Init(&g_VoiceStatusHelper, (vgui::Panel**)&gViewPort);

Потом, по такому же принципу в функцию void CHud :: VidInit( void ) добавляем:

m_Menu.VidInit();
m_AmmoSecondary.VidInit();
m_TextMessage.VidInit();
m_StatusIcons.VidInit();

m_Zoom.VidInit();//Новая строчка

GetClientVoiceMgr()->VidInit();


После этого в hud.h создаём новый класс:

class CHudZoom: public CHudBase
{
public:
int Init( void );
int VidInit( void );
int Draw(float flTime);
int MsgFunc_ZoomHUD(const char *pszName, int iSize, void *pbuf );
int m_iHudMode;
private:
HSPRITE m_hBottom_Left;
HSPRITE m_hBottom_Right;
HSPRITE m_hTop_Left;
HSPRITE m_hTop_Right;
HSPRITE m_hBlack;
};

Ниже в описании самого класса CHud добавляем:

CHudSayText m_SayText;
CHudMenu m_Menu;
CHudAmmoSecondary m_AmmoSecondary;
CHudTextMessage m_TextMessage;
CHudStatusIcons m_StatusIcons;
CHudZoom m_Zoom;//новая строчка

Затем открываем hud_redraw.cpp и в функции int CHud :: Redraw после

if (m_flShotTime && m_flShotTime < flTime)
{
gEngfuncs.pfnClientCmd("snapshot\n");
m_flShotTime = 0;
}

m_iIntermission = intermission;

добавляем:

if(m_Zoom.m_iHudMode > 0)
{
m_Zoom.Draw( flTime );
return 1;
}

С клиентом всё, идём на серверную сторону.

Открываем player.cpp и пишем:

extern void CopyToBodyQue(entvars_t* pev);
extern void respawn(entvars_t *pev, BOOL fCopyCorpse);
extern Vector VecBModelOrigin(entvars_t *pevBModel );
extern edict_t *EntSelectSpawnPoint( CBaseEntity *pPlayer );
extern int gmsgZoom;//Новая строчка

Затем чуть ниже:

int gmsgTextMsg = 0;
int gmsgSetFOV = 0;
int gmsgShowMenu = 0;
int gmsgGeigerRange = 0;
int gmsgTeamNames = 0;
int gmsgZoom = 0;//Новая строчка

Потом ещё ниже:

gmsgAmmoX = REG_USER_MSG("AmmoX", 2);
gmsgTeamNames = REG_USER_MSG( "TeamNames", -1 );
gmsgStatusText = REG_USER_MSG("StatusText", -1);
gmsgStatusValue = REG_USER_MSG("StatusValue", 3);
gmsgZoom = REG_USER_MSG( "ZoomHud", 1);//Новая строчка

Теперь нам надо задать условие, при котором на экране будет отображаться оптический прицел.
Прокрутим вниз до функции void CBasePlayer :: UpdateClientData( void )

и добавим в неё:

if ( m_iFOV != 0 && m_iFOV != 20 && m_iFOV != 40 )
{
MESSAGE_BEGIN( MSG_ONE, gmsgZoom, NULL, pev );
WRITE_BYTE(1);
MESSAGE_END();
}

Если вы хотите, чтобы оптический прицел рисовался не только у снайперки, но и
у арбалета и револьвера, то уберите условия m_iFOV != 20 и m_iFOV != 40
(20 это арбалет, а 40 это револьвер) И не забывайте стирать лишние &&

В этой же функции замените условие

if ( m_iFOV != m_iClientFOV )
{
MESSAGE_BEGIN( MSG_ONE, gmsgSetFOV, NULL, pev );
WRITE_BYTE( m_iFOV );
MESSAGE_END();

// cache FOV change at end of function, so weapon updates can see that FOV has changed
}
На вот это:

if ( m_iFOV != m_iClientFOV )
{
MESSAGE_BEGIN( MSG_ONE, gmsgSetFOV, NULL, pev );
WRITE_BYTE( m_iFOV );
MESSAGE_END();

MESSAGE_BEGIN( MSG_ONE, gmsgZoom, NULL, pev );
WRITE_BYTE(0);
MESSAGE_END();

// cache FOV change at end of function, so weapon updates can see that FOV has changed
}

Нам ведь нужно чтобы оптический прицел отключался.

На этом всё, не забудте создать файл sniper.sc в папке events вашего мода.

Модели, звуки, спрайты и файлы rifle.cpp и zoom.cpp в архиве.
P.S. Спасибо, Дядя Миша, за тутор по оптическому прицелу

Добавлено сегодня в 09:40:

Вот ссылка на архив с моделями, звуками и спрайтами:


http://www.ifolder.ru/1763404


Отправлено Дядя Миша 22-04-2007 в 06:52:

Ku2zoff мне-то за что? этот Xwider написал, еще в каком-то далеком лохматом году.


Отправлено fire64 22-04-2007 в 08:59:

опять глюки с компилятором

ev_hldm.cpp(1651) : error C2065: 'BULLET_PLAYER_M4A1' : undeclared identifier


hl_weapons.obj : error LNK2001: unresolved external symbol "public: virtual void
__thiscall CSniperrifle::Holster(int)" (?Holster@CSniperrifle@@UAEXH@Z)
hl_weapons.obj : error LNK2001: unresolved external symbol "public: virtual int
__thiscall CSniperrifle::Deploy(void)" (?Deploy@CSniperrifle@@UAEHXZ)
hl_weapons.obj : error LNK2001: unresolved external symbol "public: virtual int
__thiscall CSniperrifle::GetItemInfo(struct ItemInfo *)" (?GetItemInfo@CSniperri
fle@@UAEHPAUItemInfo@@@Z)
hl_weapons.obj : error LNK2001: unresolved external symbol "public: virtual int
__thiscall CSniperrifle::AddToPlayer(class CBasePlayer *)" (?AddToPlayer@CSniper
rifle@@UAEHPAVCBasePlayer@@@Z)
hl_weapons.obj : error LNK2001: unresolved external symbol "public: virtual void
__thiscall CSniperrifle::Precache(void)" (?Precache@CSniperrifle@@UAEXXZ)
hl_weapons.obj : error LNK2001: unresolved external symbol "public: virtual void
__thiscall CSniperrifle::Spawn(void)" (?Spawn@CSniperrifle@@UAEXXZ)
.\Release\client.dll : fatal error LNK1120: 11 unresolved externals
"Dll compiling failed!"


rifle.cpp
rifle.cpp(278) : error C2143: syntax error : missing ')' before 'constant'
rifle.cpp(278) : error C2660: 'GiveAmmo' : function does not take 1 parameters
rifle.cpp(278) : error C2059: syntax error : ')'
rifle.cpp(279) : error C2143: syntax error : missing ';' before '{'


Отправлено XaeroX 22-04-2007 в 09:15:

Цитата:
fire64 писал:
BULLET_PLAYER_M4A1

Не объявлен этот тип пуль.

__________________

xaerox on Vivino


Отправлено Дядя Миша 22-04-2007 в 11:02:

fire64 компилятор в порядке.
глюки с кодом.
Компилятор вообще является, по определению, самой надежной программой.


Отправлено XaeroX 22-04-2007 в 14:08:

Цитата:
Дядя Миша писал:
Компилятор вообще является, по определению, самой надежной программой.

Ну по крайней мере, микрософтовский cl очень неплох.

__________________

xaerox on Vivino


Отправлено Ku2zoff 22-04-2007 в 14:10:

Упс, прошу прощения в своём моде наделал новых пуль, а тут забыл поменять на стандартные. fire64 поменяй BULLET_PLAYER_M4A1 на BULLET_PLAYER_357.

Дядя Миша всё равно спасибо, а то я бы до сих пор голову ломал. Кстати, у меня проблема с дождиком
BUzer'a , всё как в туторе сделал, файл mapname.pcs создал, а дождик не пашет. И ни каких ошибок в консоли. Если можно дайте, плиз, тутор поновее и не в Юникоде, а то у меня Word и Internet Explorer вместо русского шрифта рисуют каракули. Только WordPad'ом и спасся.

Да, ещё повезло тебе fire64. У меня вообще не студия, а hl_sdk_compiler с сайта xash.ru - очень очень урезанная студия.


Отправлено fire64 22-04-2007 в 14:23:

теперь следующее
rifle.cpp
rifle.cpp(278) : error C2143: syntax error : missing ')' before 'constant'
rifle.cpp(278) : error C2660: 'GiveAmmo' : function does not take 1 parameters
rifle.cpp(278) : error C2059: syntax error : ')'
rifle.cpp(279) : error C2143: syntax error : missing ';' before '{'

и


view.cpp
LINK : fatal error LNK1181: cannot open input file ".\Release\rifle.obj"
"Dll compiling failed!"

дай нормальный файл rifle.cpp


Отправлено Дядя Миша 22-04-2007 в 15:20:

Ku2zoff надо делать не mapname.pcs
а файлик с именем карты!
т.е. допустим, карта у тебя называется newmap.bsp
вот и файлик должен называться newmap.pcs
И все заработает.
а вообще - смотри исходники спирита 1.6 и выше
и Xash 0.3 И выше.
там есть ответ практически на любой вопрос.


Отправлено Ku2zoff 23-04-2007 в 04:40:

Дядя Миша я так и сделал! Я же не тупой. Конечно я не знаток, но такие вещи я понимаю.

fire64 у меня всё компилится. На тебе ещё один rifle.cpp


Отправлено XaeroX 23-04-2007 в 05:23:

Ku2zoff значит, ты высоту появления дождя задал за пределами карты. Поэкспериментируй с этим значением.

__________________

xaerox on Vivino


Отправлено fire64 23-04-2007 в 05:45:

rifle.cpp
rifle.cpp(274) : error C2143: syntax error : missing ')' before 'constant'
rifle.cpp(274) : error C2660: 'GiveAmmo' : function does not take 1 parameters
rifle.cpp(274) : error C2059: syntax error : ')'
rifle.cpp(275) : error C2143: syntax error : missing ';' before '{'


Отправлено Ku2zoff 23-04-2007 в 05:57:

fire64 синтаксических ошибок в rifle.cpp нет, проверь weapons.h и другие файлы и читай внимательней . XaeroX а ошибки в rifle.cpp точно нет? У меня всё компилится.


Отправлено Дядя Миша 23-04-2007 в 08:14:

Ku2zoff гляди тот же спирит 1.6
там есть дождик и все работает.


Отправлено Ku2zoff 23-04-2007 в 08:56:

Дядя Миша я разобрался с дождиком. Вроде всё правильно сделал, но каким - то образом rain.cpp не добавился в проект! Без дождика client.dll у меня весил 712 кб, когда первый раз откомпилил - тоже 712. А вот во второй раз, когда всё снова добавил, когда тутор читал без каракуль - 720 кб, и всё работает. Думаю добавить эффект брызг, при попадании капель на землю


fire64 у тебя rifle.cpp компилится или нет?


Отправлено XaeroX 23-04-2007 в 09:24:

fire64 ты точно заменил все как было сказано тут:

Цитата:
Ku2zoff писал:
поменяй BULLET_PLAYER_M4A1 на BULLET_PLAYER_357.

?

__________________

xaerox on Vivino


Отправлено fire64 23-04-2007 в 09:34:

относительно rifle.cpp
ни клиент ни сервер не компится


Отправлено Ku2zoff 23-04-2007 в 09:49:

Странно. fire64 ты как следует всё проверь. В rifle.cpp нету синтаксических ошибок, может я что-то упустил... Но тогда ошибка должна выглядеть так: unresolved external symbol или что-то в этом роде. fire64 а ты какой SDK используешь? Под чё компилишь? Обычный hl или Spirit или что-то другое?


Отправлено fire64 23-04-2007 в 10:47:

я пользуюсь Microsoft Visual Studio
использую мультиплеерную часть
SDK 2.03

с проблемой справился
удалил серверную часть и скопировал код заново

теперь все работает


Отправлено Ku2zoff 23-04-2007 в 11:09:

fire64 ты всегда перед добавлением чего-то нового, если не умеешь добавлять это новое, делай резервную копию папки dlls или cl_dll, смотря куда добавляешь. Только перед тем как сделать копию, очищай папку release, а то в ней куча мусора. И читай внимательнее
Ну как нож, как винтовка?


Отправлено Дядя Миша 23-04-2007 в 12:23:

Цитата:
Только перед тем как сделать копию, очищай папку release, а то в ней куча мусора.

Ну во первых - почему именно Release, когда может быть и Debug.
А вторых там не ненужные, а Intermediate файлы.


Отправлено ToMMuK 23-04-2007 в 12:31:

Винтовка невпечатлила(могу лучше), если хотите напишу вам USP из КС.

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

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


Отправлено Ku2zoff 23-04-2007 в 16:00:

ToMMuK то есть как лучше? Ну-ка напиши. А USP мне и даром не нужен.

Дядя Миша хоть это и Intermediate файлы, но копировать лишнее всё-таки не хочется, тем более что при каждой компиляции эти самые файлы создаются заново. А что до названия папки, то её можно назвать как угодно, хоть Musor
И ещё: в спирите 1.4 все эффекты написаны своеобразно, чтобы адаптировать их под SDK 2.3 надо подумать. Надеюсь в спирите 1.6 написано по-другому.

Ну ладно, скоро выложу weapon_pipewrench... Кстати, не сможет ли мне кто-нибудь конвертировать kluch_gazoviy.max в kluch_gazoviy.smd? А то у меня 3d max его не открывает. Please...


Отправлено ToMMuK 24-04-2007 в 13:45:

Напиши пущку с Burst-Fire интересно как это работает.

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

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


Отправлено Ku2zoff 25-04-2007 в 05:28:

Чтож ToMMuK неплохая идея, напиши глок как в КС , там ведь Burst-Fire есть.


Отправлено XaeroX 25-04-2007 в 07:27:

ToMMuK да там по сути - три выстрела сразу, а эвенты - один проигрывается сразу, и два с задержкой (у PLAYBAK_EVENT_FULL есть параметр такой).

__________________

xaerox on Vivino


Отправлено Ku2zoff 25-04-2007 в 09:45:

XaeroX я тут задумал всё-таки написать func_vehicle, и мне бы пригодились некоторые работы в этой области, т.е. пробные коды func_vehicle, которые кто-нибудь раньше писал. Для сравнения. Где их такие можно найти?

И ещё, кто-нибудь сделайте мне из kluch_gazoviy.max файл kluch_gazoviy.smd! Буду очень благодарен.


Отправлено ToMMuK 25-04-2007 в 11:58:

XaeroX ну дык три выстрела я ставлю примерно так :

C++ Source Code:
1
if(m_iChargeLevel == 1 )
2
{
3
  Burst();
4
  Burst();
5
  Burst();
6
  m_flNextPrimaryAttack = m_flNextPrimaryAttack + 0.4;
7
}


Burst это уже сам выстрел.

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

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


Отправлено XaeroX 25-04-2007 в 14:53:

Цитата:
Ku2zoff писал:
Где их такие можно найти?

Не знаю, у меня наработок на стандартном физ. движке хл1 нет.
ToMMuK неправильно. Надо вот как эвенты ставить:

C++ Source Code:
PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usMyEvent, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, vecDir.x, vecDir.y, 0, 0, 0, 0 );
PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usMyEvent, 0.1, (float *)&g_vecZero, (float *)&g_vecZero, vecDir.x, vecDir.y, 0, 0, 0, 0 );
PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usMyEvent, 0.2, (float *)&g_vecZero, (float *)&g_vecZero, vecDir.x, vecDir.y, 0, 0, 0, 0 );

__________________

xaerox on Vivino


Отправлено FiEctro 25-04-2007 в 16:10:

>> Не знаю, у меня наработок на стандартном физ. движке хл1 нет.

А машинка с ХЛ.ру ?

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено XaeroX 25-04-2007 в 16:17:

-CJ- ну додумай мысль...
значит она не на стандартном физ. движке

__________________

xaerox on Vivino


Отправлено FiEctro 25-04-2007 в 16:22:

XaeroX ну тыже сам писал что не хуже машины из хл2 что врятли моглобы быть на физике первой части ...

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено XaeroX 25-04-2007 в 16:27:

Если я и выложу исходник той машинки, у вас он все равно не скомпилится. Там ведь виртуальная физика прикручена, а это вам не пара файлов.

__________________

xaerox on Vivino


Отправлено FiEctro 25-04-2007 в 16:40:

>> Там ведь виртуальная физика прикручена

А гворил на физике хл1
ЗЫ . просвети плиз что ето такое ... и чем она отличается от другой физики используемых в играх ... это типа это все дело на openGL чтоль рисуется

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено XaeroX 25-04-2007 в 17:35:

-CJ- ты хоть сам понял, что написал?

__________________

xaerox on Vivino


Отправлено FiEctro 25-04-2007 в 17:39:

А что я не то написал ?

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


Отправлено Ku2zoff 26-04-2007 в 04:41:

Без разницы, какая там физика, её ведь можно и открутить. Дайте мне ету машинку и ещё чё-нибудь в этом роде, пусть даже не на стандартном физ. движке хл1.


P.S. ну хоть кто-то может сделать мне етот ключ в .smd?
А то стандартная модель из ОпФор уже задрала!


Отправлено XaeroX 26-04-2007 в 07:27:

Цитата:
Ku2zoff писал:
Дайте мне ету машинку и ещё чё-нибудь в этом роде, пусть даже не на стандартном физ. движке хл1.

Ну а в чем смысл? Там вся суть в функциях PHYS_ApplyForce/PHYS_ApplyForceOffset, которые по сути - интерфейс к физ. движку

__________________

xaerox on Vivino


Отправлено Ku2zoff 23-07-2007 в 05:21:

Нда... Ну если так, то не надо, а то можно чего попало натворить. Тогда дайте кто-нибудь подсказку, как заставить func_tracktrain двигаться в направлении, заданном пользователем, а не следовать за path_track.

Хотя, посмотреть машинку не помешало бы...

Добавлено 20-05-2007 в 10:38:

-CJ- писал:

Цитата:
ЗЫ . просвети плиз что ето такое ... и чем она отличается от другой физики используемых в играх ... это типа это все дело на openGL чтоль рисуется


-CJ- там и на софтваре всё прекрасно рисуется. Если ты в хл2 играл, ты наверное заметил, что там по полу баллоны с пропаном катаются, трупы сваливаются со ступеней, ящики можно в руки брать и кидать далеко и т.д. Так вот это и есть виртуальная физика

Добавлено 23-07-2007 в 12:21:

Прошу прощения, что выкладываю новое оружие без пояснений и комментариев. В двух словах: это ОГНЕМЁТ. Огнемёт как в TFC, ну или почти как в TFC...

И ещё, я тут поиздевался над пушками c http://zzero.fatal.ru/SDKopfor.html Немного их подправил. Хотя авторам кодов это может не понравиться...
Впрочем, если уж они выложены в сети, то грех было их не скачать. Файлики в архиве. Чтобы дисплейсер (weapon_displacer) правильно работал
вам надо сначала сделать эвенты на клиентской стороне(они в оригинальном файле http://zzero.fatal.ru/fclick/fclick.php?ad=w_displ )
При адаптации дыгла (desert_eagle) можете сменить тип пулек на стандартные (BULLET_PLAYER_357) или написать те, которые требует ствол.
Как написать: см. выше, в туторе по снайперке.

Не ругайтесь, если чего-то не поймёте, просто не хочу по нескольку раз писать одно и тоже. И ещё, поправьте пути к моделькам и звукам, а то я
их разложил по категориям и w_ модели у меня по принципу Xash: одна модель - две анимации, p_ моделей вообще нету. И ещё! Создайте плиз
новые .sc файлы в папке events, не используйте те, которые указал я! Просто они у меня остались лишними после удаления некоторых эвентов.
Если при стрельбе патронами и воспроизведении эвентов будут глюки, то переделайте коды под СДК 2.3, а то мои(тьфу, не мои, а изменённые мной)
стволы под спирит 1.7, там есть кое-какие отличия. Вот, кажется и всё.


З.Ы. Поздравьте меня, я наконец-то нашёл подходящую для компиляции Халфы студию: Microsoft Visual Studio .NET 2003, или Microsoft Visual Studio 7.0.
Так что для компиляции Half-Life подходят студии 6.0, 6.5(как у СиДжея), и 7.0. А бузеровский компилятор не виноват в глюках спирита 1.7 - это недоработки кода.
(Кстати, после компиляции седьмой студией у меня наконец-то перестали моргать монстры в лифтах и на поездах а глюки с гравитацией остались - при смене
уровня на ксен, где гравитация в два раза ниже она не изменяется, вследствие чего невозможно нормально прыгать по летающим платформам...)


Отправлено Тренсфер 02-08-2007 в 18:15:

Пожалуйста подскажи где ты брал бузеровский компилятор (ну или выложи)- мне просто очень хочется взглянуть на него, а сылки с HL.RU на него уже сдохли. Да и новичкам без С++ это будет полезно. Кстати новые пушки рулят!

Добавлено 03-08-2007 в 01:15:

Извини. Нашёл уже тут на форуме.

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


Отправлено Ku2zoff 05-08-2007 в 16:15:

Тенсфер бузеровский компилятор я качал почти год назад, ещё c www.xash.ru, но я выложил на форуме, тот, что я скачал, правда с небольшими изменениями:
в текстовиках прописаны исходники старой версии моего мода... А на днях я решил сделать свой мини-компилятор. Я добавил в него opengl32.lib, cvaLib.lib, а также types.h и stat.h, которых у бузера не было. Так как мой компилятор
на основе седьмой, а не шестой студии, то он весит в два раза больше, но и компилит больше: Спирит, Ксаш, HPB bot, если ещё доработать, то и parabot тоже потянет.

А насчёт того, что новые пушки рулят, вот ещё немного, чисто серверные: weapon_pipewrench как в op4 и weapon_clustergrenade - нечто подобное есть в Invasion.
Для clustergrenade придётся ещё дополнить класс CGrenade в weapons.h, куда-нибудь в него вписать

C++ Source Code:
//Ku2zoff - new functions for cluster grenade
static CGrenade *ShootCluster( entvars_t *pevOwner, Vector vecStart, Vector vecVelocity, float time );
void EXPORT ClusterExplodeTouch( CBaseEntity *pOther );
static CGrenade *CreateCluster( entvars_t *pevOwner, Vector vecStart, Vector vecVelocity, float time );
//Ku2zoff end

рядом с аналогичными *ShootTimed и ExplodeTouch.


Отправлено rocksTaa 10-09-2007 в 10:16:

у мну винтарес скомпилса сразу но вместо крутова ствала полный ацтой всмысле что отсутствуют анимации хотя я в QC подогнал всё как нада вот такая огорчительная проблем.

__________________
rt


Отправлено ToMMuK 12-09-2007 в 16:23:

Ku2zoff а как этому ключу зделать так чтобы при вторичной атаке если её удерживать увеличивался урон а то он одинаковый сколько не держи будет одно и тоже, ведь в ОП4 было именно так что сила удара увеличивалась.

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

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


Отправлено Ku2zoff 28-09-2007 в 09:25:

ToMMuK я не замечал про увеличение силы, просто посмотри код гаусса - там при накручивании съедаются патроны - а ты добавляй урон, типа damage += 0.5.
rocksTaa Незнаю насчёт ацтоя, но у меня анимации правильные, от обычного ключа из опфора, я у него тока тело поменял на более красивое. Ты отредактируй значения next primary и next secondary attack тогда будет получше, всмысле

C++ Source Code:
m_flNextSecondaryAttack = m_flNextPrimaryAttack


Добавлено 28-09-2007 в 16:25:

Вот, ещё одна пушка - лазерный пистолет, как в Тим Фортресс у инженера. Немножко переделать(патроны, пути к моделям) и будет отлично.


Отправлено Ku2zoff 19-11-2007 в 04:52:

Вот небольшая доработка weapon_displacer(вспомните, когда в опфоре телепортируешься сам, то всех, кто рядом с тобой разносит в клочья)

C++ Source Code:
1
if (pSpot)
2
{
3
  UTIL_ScreenFade( m_pPlayer, Vector(0, 200, 0), 0.5, 0.5, 255, FFADE_IN );
4
 
5
  TraceResult tr; //новая строка
6
 
7
  CDispBall *pDispBall = CDispBall::CreateDispBall( m_pPlayer->pev->origin + gpGlobals->v_up *32, g_vecZero, m_pPlayer, this ); //новая строка
8
  pDispBall->pev->nextthink = 1.5; //новая строка
9
 
10
  pDispBall->Explode( &tr ); //новая строка
11
 
12
 
13
  m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] -= 100;
14
  Vector tmp = pSpot->pev->origin;
15
  tmp.z -= m_pPlayer->pev->mins.z;
16
  tmp.z++;
17
  UTIL_SetOrigin( m_pPlayer, tmp );
18
 
19
  m_pPlayer->pev->angles = pSpot->pev->angles;
20
  m_pPlayer->pev->velocity = m_pPlayer->pev->basevelocity = g_vecZero;
21
 
22
  EMIT_SOUND( ENT(m_pPlayer->pev), CHAN_WEAPON, "weapons/displacer/displacer_self.wav", 1, ATTN_NORM );
23
  SendWeaponAnim( DISPLACER_SPIN );
24
}


Отправлено NameLesS 30-01-2008 в 06:40:

Цитата:
Ku2zoff писал:
И ещё, кто-нибудь сделайте мне из kluch_gazoviy.max файл kluch_gazoviy.smd! Буду очень благодарен.


надеюсь ещё нужен


Отправлено Frest 05-02-2008 в 00:53:

а кстати, кто нить может написать тутор про пулемёт SAW из Opposing Force?


Отправлено Дядя Миша 05-02-2008 в 07:05:

Frest в Xash есть такой пулемет


Отправлено Frest 05-02-2008 в 09:59:

только он там вроде бы в скриптовом виде.Мне нужен тутор.


Отправлено Дядя Миша 05-02-2008 в 16:16:

Цитата:
у меня наконец-то перестали моргать монстры в лифтах и на поездах

Да причем тут студия? я этой проблеме целый тутор посвятил, между прочим!
http://half-life.ru/forum/showthrea...%F1%F2%F0%EE%E2
ЗЫ. блин, сколько же я всего туторов-то написал????
Frest есть и в нормальном виде, например в Xash 0.2


Отправлено Cybermax 20-02-2008 в 16:32:

Я хочу в свой мод засунуть пушку из op4 дисплейсер и переделать в бфг аля q2 может поможете?

__________________


Отправлено Дядя Миша 21-02-2008 в 10:02:

Cybermax бфг были для первого квейка в виде qc-кода.
Можно поискать на старых фтп-шниках, типа ftp.sunet.se


Отправлено Cybermax 22-02-2008 в 14:25:

не я видел на какомто сайте исходник дисплейсера для хл

Добавлено 22-02-2008 в 17:25:

я просто хочу засунуть в свой мод дисплейсер как в op4

__________________


Отправлено Cybermax 24-11-2009 в 07:19:

Цитата:
Ku2zoff писал:
Вот, ещё одна пушка - лазерный пистолет, как в Тим Фортресс у инженера. Немножко переделать(патроны, пути к моделям) и будет отлично. [/B]


Пожалуйсто подскажите если не жалко а как добавить railgun в сдк что где надо прописать и объявить?

__________________


Отправлено Дядя Миша 24-11-2009 в 11:27:

Cybermax што, дисплейсер уже не нужен?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Cybermax 24-11-2009 в 11:44:

Ну что так все настроены ко мне? Я просто пытаюсь сделать мод не больше, не менче Сейчас читаю книгу: Брайаг Оверленд -
"C++ без страха"
Подумал что кто-то кто разбирается в С++ поможет мне несчасному нубяре разобраться по началу что к чему...

__________________


Отправлено Дядя Миша 24-11-2009 в 13:43:

Цитата:
Cybermax писал:
Ну что так все настроены ко мне?

я тебе просто задал вопрос. В ответ - слезы и сопли. Мужык ты или эмо?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Cybermax 24-11-2009 в 15:20:

Мужык!! извени просто никто не проявляет интереса и не помогают даже советом, только критикуют. Уйду я от вас злые вы

__________________


Отправлено XaeroX 24-11-2009 в 15:50:

Cybermax ты задавай нормальные вопросы, и народ будет тебе отвечать. "Как добавить" и "что куда прописать чтобы заработало" - такие вопросы требуют не совета, а целого туториала. И для таких вопросов есть тема "Заказы" (по статистике, где-то 3% заказов выполняется, так что вполне можно попытать счастья).

__________________

xaerox on Vivino


Отправлено PoD-Stas 24-11-2009 в 18:06:

Дядя Миша ну я има, и что?


Отправлено XaeroX 24-11-2009 в 19:40:

Цитата:
PoD-Stas писал:
ну я има, и что?

има-кодыр?

__________________

xaerox on Vivino


Отправлено PoD-Stas 24-11-2009 в 20:04:

XaeroX ага има-кодыр, которая учится в университете МВД


Отправлено Дядя Миша 25-11-2009 в 08:48:

Цитата:
Cybermax писал:
извени просто никто не проявляет интереса и не помогают даже советом, только критикуют

Дак ты денег заплати - проявим интерес, сочувственный вид, понимающий взгляд - на выбор. Ты задаешь вопросы из разряда "гдеб найти исходники контры", а потом удивляешься что никто интереса не проявляет.
Да тебе и самому это не нужно - тебе нужно чтобы все разжевали и под нос положили. Чтобы ты потом всем хвастался какой ты классный мод написал.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено gabataka 28-08-2021 в 13:54:

Цитата:
Ku2zoff писал:
Fire64 я пробовал писать лучемёт, но он у меня не получился, надо будет спросить у XaeroX'a

Скоро я выложу ещё снайперку, кластерную гранату и дымовую гранату(но это лишь баловство для мультиплеера, т.к. в сингле боты видят сквозь дым)

P.S. Если нож не будет компилиться поменяй в нём параметр BULLET_PLAYER_KNIFE на BULLET_PLAYER_CROWBAR. А то я забыл поменять...



а пулемет в твоей программе есть? из оп фора?


Отправлено Ku2zoff 28-08-2021 в 15:00:

gabataka опфоровский пулемёт есть тут https://github.com/FWGS/hlsdk-xash3d/tree/opfor. У меня тогда был в планах миниган, но нормально его сделать я смог только через 10 лет В итоге, миниган превратился в трёхствольную пушку human_sergeant'a или hassault'a. Доделаю модели и добавлю в свой мод и пушку, и самого негра с пушкой.


Временная зона GMT. Текущее время 08:02.
Показать все 75 сообщений этой темы на одной странице

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