HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > добавляем плазменную винтовку в half-life 1
  Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
илья2
Житель форума

Группа: Неопытный
Дата регистрации: Mar 2020
Проживает: Волгоград
Сообщений: 381
Возраст: 22

Рейтинг



Arrow добавляем плазменную винтовку в half-life 1

всем привет это я илья2 и сегодня мы будем добавлять плазменную винтовку на half-life 1
плазменную винтовку я делал сам ничего не у кого не украл тупо сам но правда только
ресурсы не мои а из мода hlwe ну и чуток создал свои но тоже из этого мода взял думаю
добавление разнообразия в халфе не помешает .

Ладно начнём первым делом пажлуй начнем с добавления патронов в sdk или как его
можно назвать исходники халфы неважно. Заходим в cbase.h ищем int ammo_argrens;
после него ставим свое int ammo_plasma; после заходим в client.cpp ищем
if ( pl->m_pActiveItem->m_iId == WEAPON_RPG ) после вставляем свое

else if( pl->m_pActiveItem->m_iId == WEAPON_PLASMARIFLE )
{
cd->vuser2.y = pl->ammo_plasma;
}

теперь идем в player.cpp ищем ammo_hornets = AmmoInventory( GetAmmoIndex( "Hornets" ) );
после ставим
ammo_plasma = AmmoInventory( GetAmmoIndex( "Plasma" ) );

теперь ищем GiveNamedItem( "weapon_tripmine" );

ставим по желанию это спавн при команде impulse101 не обезательно добавлять
если вам конечно нужно больше патронов тогда ставте после

GiveNamedItem( "weapon_tripmine" );
вот это
GiveNamedItem( "ammo_plasma" );

теперь идем в weapons.cpp после
// glock
UTIL_PrecacheOtherWeapon( "weapon_9mmhandgun" );
UTIL_PrecacheOther( "ammo_9mmclip" );

ставим
// plasmarifle
UTIL_PrecacheOther( "ammo_plasma" );

теперь идем в weapons.h ищем #define HIVEHAND_DEFAULT_GIVE 8

ставим #define AMMO_PLASMARIFLE_GIVE 30 это количество подбираемых патронов

все с патронами мы закончили теперь начинаем добвалять основные компоненты оружия
идем в player.cpp ищем тот код который мы дабовляли ранее GiveNamedItem( "ammo_plasma" );
и ставим GiveNamedItem( "weapon_plasmarifle" );

теперь идем в weapons.cpp находим #include "gamerules.h" после него ставим #include "plasmarifle_weapon.h"
это информация для основных компонентов моделей выстрела

теперь идем в DLL_GLOBAL short g_sModelIndexBloodSpray после него ставим

DLL_GLOBAL short g_sModelIndexPlasma1; // holds the index for the plasma explosion 1
DLL_GLOBAL short g_sModelIndexPlasma2; // holds the index for the plasma explosion 2
DLL_GLOBAL short g_sModelIndexPlasma3; // holds the index for the plasma explosion 3
сами компонеты выстрела они и здесь есть и там теперь идем в ранее добавленный код и заменяем

это
// plasma
UTIL_PrecacheOther( "ammo_plasma" );

на вот это
// plasma
UTIL_PrecacheOtherWeapon( "weapon_plasmarifle" );
UTIL_PrecacheOther( "ammo_plasma" );

теперь идем в PRECACHE_SOUND ("items/weapondrop1.wav");

и после него ставим

// Used by plasma grenades.
PRECACHE_MODEL( "models/plasmanull.mdl" );
g_sModelIndexPlasma1 = PRECACHE_MODEL( "sprites/plasmabomb.spr" );
g_sModelIndexPlasma2 = PRECACHE_MODEL( "sprites/plasmabomb.spr" );
g_sModelIndexPlasma3 = PRECACHE_MODEL( "sprites/tsplasma.spr" );

PRECACHE_SOUND( "weapons/plasmagun_exp.wav" );//explosion aftermaths

теперь идем в IMPLEMENT_SAVERESTORE( CSatchel, CBasePlayerWeapon );
после ставим

TYPEDESCRIPTION CPlasmarifle::m_SaveData[] =
{
DEFINE_FIELD( CPlasmarifle, m_iPlasmaSprite, FIELD_INTEGER ),
};
IMPLEMENT_SAVERESTORE( CPlasmarifle, CBasePlayerWeapon )

теперь идем в weapons.h ищем #define WEAPON_SNARK 15

добавляем #define WEAPON_PLASMARIFLE 16

теперь после #define TRIPMINE_WEIGHT -10
это вес оружия незнаю зачем это нужно чесно говроя бесполезная штука не работает
ставим это #define PLASMARIFLE_WEIGHT 20

теперь идем в #define M203_GRENADE_MAX_CARRY 10

после ставим #define PLASMARIFLE_MAX_CARRY 200
это сколько игрок может нести патронов

потом после #define SNARK_MAX_CLIP WEAPON_NOCLIP
ставим #define PLASMARIFLE_MAX_CLIP 30
это количество патронов в абойме

еще идем в #define HIVEHAND_DEFAULT_GIVE 8
ставим после вот это
#define PLASMARIFLE_DEFAULT_GIVE 30
это количество подбираемых патронов от плазменной пушки

теперь идем в extern DLL_GLOBAL short g_sModelIndexBloodSpray;

после добавляем

extern DLL_GLOBAL short g_sModelIndexPlasma1;
extern DLL_GLOBAL short g_sModelIndexPlasma2;
extern DLL_GLOBAL short g_sModelIndexPlasma3;

далее надо добавить класс оружия тут можно сказать конструктор для кода от и до для оружия

добавляем после класса class CGauss : public CBasePlayerWeapon и после };

вот это

class CPlasmarifle : public CBasePlayerWeapon
{
public:

#ifndef CLIENT_DLL
int Save(CSave &save);
int Restore(CRestore &restore);
static TYPEDESCRIPTION m_SaveData[];
#endif

void Spawn( void );
void Precache( void );
int iItemSlot() { return 7; }
int GetItemInfo( ItemInfo *p );
int AddToPlayer( CBasePlayer *pPlayer );

void PrimaryAttack( void );
BOOL Deploy();
void Holster( void );
void Reload( void );
void WeaponIdle( void );
float m_flSoundDelay;
float m_flNextReload;

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

все с добавлением компонентов мы закончили теперь добавляем само оружие и плазму
нам потебуются 4 файла plasmarifle_weapon.h plasmarifle.cpp plasma.h plasma.cpp и ресурсы для пушки которые я скину в низу

скачали поставили в исходники теперь добавляем в компиляцию заходим в hl.dsp
и савим там вот такие коды с пробелами

SOURCE=.\plasma.cpp
# End Source File
# Begin Source File

SOURCE=.\plasmarifle.cpp
# End Source File
# Begin Source File

H файлы ставим в h раздел

SOURCE=.\plasma.h
# End Source File
# Begin Source File

все с разделом dlls мы закончили дальше будет полегче идем в другой раздел cl_dll
переходим в ev_hldm.cpp ищем void EV_SnarkFire( struct event_args_s *args ); после него ставим
void EV_PlasmaFire( struct event_args_s *args );

теперь идем в

//======================
// GLOCK END
//======================

и после него ставим это

//======================
// PLASMARIFLE START
//======================
enum plasmarifle_e
{
PLASMARIFLE_IDLE,
PLASMARIFLE_IDLE2,
PLASMARIFLE_FIDGET,
PLASMARIFLE_SPINUP,
PLASMARIFLE_SPIN,
PLASMARIFLE_FIRE,
PLASMARIFLE_FIRE_SOLID,
PLASMARIFLE_FIRE_SEC,
PLASMARIFLE_FIRE_SEC_SOLID,
PLASMARIFLE_RELOAD,
PLASMARIFLE_DRAW,
PLASMARIFLE_HOLSTER
};

void EV_PlasmaFire( event_args_t *args )
{
int idx;
vec3_t origin;
vec3_t angles;
vec3_t velocity;
vec3_t up, right, forward;

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

AngleVectors( angles, forward, right, up );

if( EV_IsLocal( idx ) )
{
gEngfuncs.pEventAPI->EV_WeaponAnimation( PLASMARIFLE_FIRE, 0 );
}

int fPrimaryFire = args->bparam2;

if( fPrimaryFire )
gEngfuncs.pEventAPI->EV_PlaySound( idx, origin, CHAN_WEAPON, "weapons/plasmarifle_fire.wav", 1, ATTN_NORM, 0, 100 );
}
//======================
// PLASMARIFLE END
//======================

теперь идем в hl_events.cpp после void EV_SnarkFire( struct event_args_s *args );
ставим это void EV_PlasmaFire( struct event_args_s *args );

потом идем в gEngfuncs.pfnHookEvent( "events/snarkfire.sc", EV_SnarkFire );

после него ставим gEngfuncs.pfnHookEvent( "events/plasmarifle.sc", EV_PlasmaFire );

теперь идем в hl_weapons.cpp

ищем CSqueak g_Snark;
после него ставим CPlasmarifle g_Plasmarifle;

ищем HUD_PrepEntity( &g_Snark , &player );

потом ставим HUD_PrepEntity( &g_Plasmarifle , &player );

теперь ищем case WEAPON_RPG:
pWeapon = &g_Rpg;
break;

после этого ставим с пробелами также как все

case WEAPON_PLASMARIFLE:
pWeapon = &g_Plasmarifle;
break;

теперь идем в view хотя можно и не идти не обезательно

но пойдем
ищем { "models/p_satchel.mdl", "models/v_satchel.mdl" },

после него ставим это { "models/p_plasmarifle.mdl", "models/v_plasmarifle.mdl" },

так теперь надо наше оружие добавить в компил клиента нам же надо чтобы у нас небыло ошибок и все работало как надо да
значит идем и открываем cl_dll.dsp

и ставим вот это как и все остальные

SOURCE=..\dlls\plasmarifle.cpp
# End Source File
# Begin Source File

усе готово думаю немного отнять время ради этой штуки можно это же плазма ган а не какета пукалка из контры
ну за исключением конечно cso там в принципе и так плазмометов дохера
все с вами был илья счасливого кодописания

ресурсы плазменной винтовки->https://disk.yandex.ru/d/izD1l_VPD869vQ

Вложение: plasmarifle_source.rar (6.1 кб)
Этот файл был скачан 151 раз.

__________________
илья

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

Старое сообщение 18-12-2021 17:40
- За что?
Chyvachok
Житель форума

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 1843

Рейтинг



Если что вот плазма из ХЛВЕ но с нормальной анимацией перезарядки, когда-то делал, но так и не заюзал: https://files.gamebanana.com/bitpit...ewithreload.rar

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

Старое сообщение 18-12-2021 19:38
- За что?
илья2
Житель форума

Группа: Неопытный
Дата регистрации: Mar 2020
Проживает: Волгоград
Сообщений: 381
Возраст: 22

Рейтинг



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

__________________
илья

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

Старое сообщение 18-12-2021 19:42
- За что?
Chyvachok
Житель форума

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 1843

Рейтинг



И еще, пусть мне тутор не очень актуален, но все равно, сделай и добавь скриншоты своей плазмопушки, и код занунь в блоки кода, чтобы красиво было, [ code ] [ /code ] - так, только пробелы убери.

Добавлено 18-12-2021 в 21:43:

Цитата:
илья2 писал:
а какая разница эта анимация или эта мне эта нравиться


Это абсолютна та же самая модель, разница только что оружие при перезарядке не опускается вниз-вверх, а собственно рука батарейку меняет.

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

Старое сообщение 18-12-2021 19:43
- За что?
илья2
Житель форума

Группа: Неопытный
Дата регистрации: Mar 2020
Проживает: Волгоград
Сообщений: 381
Возраст: 22

Рейтинг



и код занунь в блоки кода, чтобы красиво было, [ code ] [ /code ] - так, только пробелы убери:я попробую

Добавлено 18-12-2021 в 22:47:

Согласно правилам форума, вы можете редактировать сообщения не позже чем через 20 минут после отправки. Это время истекло, но вы можете связаться с администрацией, чтобы внести изменения в сообщение.

Добавлено 18-12-2021 в 22:47:

блин

Добавлено 18-12-2021 в 22:48:

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

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

а вот и видео https://youtu.be/k0Tl06wRjlE

Добавлено 18-12-2021 в 23:36:

у меня кстати есть еще вторая версия плазмомета сделанная под стиль cso так просто говорю может кому интересно

__________________
илья

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

Старое сообщение 18-12-2021 20:36
- За что?
 XaeroX
Crystice Softworks

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

Рейтинг



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


Цитата:
илья2 писал:
это вес оружия незнаю зачем это нужно чесно говроя бесполезная штука не работает

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

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

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

Старое сообщение 18-12-2021 21:51
-
Ku2zoff
Мастер Ёда из Деревни Дуракоф

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

Рейтинг



Цитата:
XaeroX писал:
тем приоритетнее твоя пушка, когда закончились патроны в предыдущей

Или приоритетнее автосмена на пушку при подборе. В кваке всё было просто: по одной пушке в слоте, чем больше номер слота, тем больше вес пушки. То есть ракетница не сменится на наилган, а шафт не сменится на ракетницу. В халфе уже сложнее. Например, арбалет имеет меньший вес, чем дробовик, хотя первый убойнее. Дело в том, что переключение с дробовика или автомата на арбалет посреди боя в толпе врагов - вещь нехорошая. Арбалет он всё-таки для дальних дистанций.

Добавлено 19-12-2021 в 11:45:

Цитата:
Chyvachok писал:
рука батарейку меняет

Сам анимировал?

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

Старое сообщение 19-12-2021 04:45
- За что?
илья2
Житель форума

Группа: Неопытный
Дата регистрации: Mar 2020
Проживает: Волгоград
Сообщений: 381
Возраст: 22

Рейтинг



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

__________________
илья

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

Старое сообщение 19-12-2021 08:32
- За что?
Chyvachok
Житель форума

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 1843

Рейтинг



Цитата:
Ku2zoff писал:
Сам анимировал?


Ну как, во фраге прицепил через аналог Link Constrant анимацию от другого оружия на саму пушку (Штука что заставляет одну кость за другой следовать), сам кое-как руку прианимировал при помощи инверсной кинематики в 3дс максе. Нормально анимировать так и не научился еще увы.

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

Старое сообщение 19-12-2021 09:27
- За что?
gabataka
Новичок

Группа: Неопытный
Дата регистрации: Jan 2021
Проживает: Город
Сообщений: 10
Возраст: 26

Рейтинг



илья2 а на основе чего твой плазмоган? сама моделька то есть, самостоятельная или на анимациях той же гауски. я думаю надо мне или нет переносить свою пушки на анимации твоей.

Добавлено 22-10-2022 в 11:37:

у меня ошибка одна единственная

- "Ошибка (активно) E1696 не удается открыть источник файл "plasmarifle_weapon.h" Server (Report) "

хотя все верно запихнул в server в header

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

Старое сообщение 22-10-2022 08:37
- За что?
илья2
Житель форума

Группа: Неопытный
Дата регистрации: Mar 2020
Проживает: Волгоград
Сообщений: 381
Возраст: 22

Рейтинг



сама моделька то есть: спёр из weapon edition

Добавлено 09-11-2022 в 19:05:

я думаю надо мне или нет переносить свою пушки на анимации твоей:давай если это не сложно мне все равно

Добавлено 09-11-2022 в 19:06:

plasmarifle_weapon.h значит его нету надо добавить

Добавлено 09-11-2022 в 19:07:

попробуй в инклуды weapons.cpp поставить должно помочь

Добавлено 09-11-2022 в 19:08:

наверно

__________________
илья

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

Старое сообщение 09-11-2022 16:08
- За что?
Тема: (Опционально)
Ваш ответ:



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


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

Временная зона GMT. Текущее время 08:52. Новая тема    Ответить
  Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > добавляем плазменную винтовку в half-life 1
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

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

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

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

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