Sidebar

Создание нового оружия

  • Рекомендуется задавать вопросы только относительно темы с уроком. Для остальных вопросов существует раздел [url=/forums/pomosch.12/]«Помощь»[/url].

    Темы с просьбами помощи будут удаляться без предупреждения и без объяснения причины.

    Запрещается поднятие старой темы оффтопом. Ваше сообщение будет удалено, а в профиль будет выписано замечание.

asssasssin2

New member
07.03.2010
42
1
0
Создание нового оружия

Создание нового оружия
В этом туторе не будет обьяснено КАК сделать новое оружие, ибо для каждого оружия нужен свой код.Здесь просто будет приведена информация о тех нюансах без которых ваше оружие не будет работать

Оружие мы сделаем на базе мп5, которое будет называться просто - ExampleGun

Итак для начала открываем серверную часть - hl.dsw

Доя начала давайте напишем наше оружие, код у нас будет очень простой :



#include "extdll.h"
#include "util.h"
#include "cbase.h"
#include "monsters.h"
#include "weapons.h"
#include "nodes.h"
#include "player.h"

LINK_ENTITY_TO_CLASS( weapon_example, CExampleGun );

void CExampleGun::Spawn( )
{
pev->classname = MAKE_STRING("weapon_example"); // здесь имя энтити которое надо будет затем вписать в фгд
Precache( );
SET_MODEL(ENT(pev), "models/w_9mmAR.mdl"); // Тут должна быть модель вашего оружия
m_iId = WEAPON_EXAMPLE;

m_iDefaultAmmo = 50;

FallInit();

}


void CExampleGun::precache( void )
{

// Тут вы прекешите звуки и модели для вашего оружия
PRECACHE_MODEL("models/v_9mmAR.mdl");
PRECACHE_MODEL("models/w_9mmAR.mdl");
PRECACHE_MODEL("models/p_9mmAR.mdl");

PRECACHE_SOUND("items/9mmclip1.wav");

PRECACHE_SOUND("items/clipinsert1.wav");
PRECACHE_SOUND("items/cliprelease1.wav");

PRECACHE_SOUND ("weapons/hks1.wav");
PRECACHE_SOUND ("weapons/hks2.wav"); PRECACHE_SOUND ("weapons/hks3.wav");

// this is to hook your client-side event
m_usExampleFire = PRECACHE_EVENT( 1, "events/example.sc" );
}

int CExampleGun::GetItemInfo(ItemInfo *p)
{
p->pszName = STRING(pev->classname);
p->pszAmmo1 = "9mm";
p->iMaxAmmo1 = 200;
p->iMaxClip = -1;
p->iSlot = 3;
// слот в худе ( помните также, что елси здесь вы написали например 2 то в игре будет занят 3 слот, т.к в коде исчесление начинаеться от нуля) p->iPosition = 4;
// позиция в слоте ( то же самое что и в слоте - елси вам надо занять 4 позицию , то пишите 3 в коде) p->iFlags = 0;
p->iId = m_iId = WEAPON_EXAMPLE;
p->iWeight = MP5_WEIGHT; //
p->pszAmmo2 = NULL; //
p->iMaxAmmo2 = -1;

return 1;
}

int CExampleGun::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;
}


Когда код вашего оружия готов, идите в фаил под названием weapons.cpp и примерно в районе строчки 340 сделайте UTIL_PrecacheOtherWeapon , после мп5:

// glock
UTIL_PrecacheOtherWeapon( "weapon_9mmhandgun" );
UTIL_PrecacheOther( "ammo_9mmclip" );

// mp5
UTIL_PrecacheOtherWeapon( "weapon_9mmAR" );
UTIL_PrecacheOther( "ammo_9mmAR" );
UTIL_PrecacheOther( "ammo_ARgrenades" );

// Тут добавляете прекеш своего оружия
// example_weapon
UTIL_PrecacheOtherWeapon( "weapon_example" );


Сохраняете это как example.cpp и добавляете в проект

Затем откройте фаил weapons.h , и в районе строчки 89 и задефайнте имя своего оружия после снарка

#define WEAPON_TRIPMINE 13
#define WEAPON_SATCHEL 14
#define WEAPON_SNARK 15
#define WEAPON_EXAMPLE 16


Затем идите вниз этого же фаила и добавьте класс воего оружия под снарками, выглядеть он должен так :

class CExampleGun : public CBasePlayerWeapon
{
public:

void Spawn( void );
void Precache( void );
int iItemSlot( void ) { return 4; }
int GetItemInfo(ItemInfo *p);

void PrimaryAttack( void );
void SecondaryAttack( void );
BOOL Deploy( void );
void WeaponIdle( void );
int AddToPlayer( CBasePlayer* );

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

private:
unsigned short m_usExampleFire;

};

После этого если хотите, можете добавить ваше оружие в список тех, кто будет спавниться в разбиваемых обьектах (func_breakable)
Для этого откройте func_break.cpp и в районе строчки 62 добавьте свое оружие в список оружий, появляющихся при разбивании обьекта :

const char *CBreakable::pSpawnObjects[] =
{
NULL, ? ?// 0
"item_battery", ?// 1
"item_healthkit", // 2
"weapon_9mmhandgun",// 3
"ammo_9mmclip", ?// 4
"weapon_9mmAR", ?// 5
"ammo_9mmAR", ?// 6
"ammo_ARgrenades", // 7
"weapon_shotgun", // 8
"ammo_buckshot", // 9
"weapon_crossbow", // 10
"ammo_crossbow", // 11
"weapon_357", ?// 12
"ammo_357", ? // 13
"weapon_rpg", ?// 14
"ammo_rpgclip", ?// 15
"ammo_gaussclip", // 16
"weapon_handgrenade",// 17
"weapon_tripmine", // 18
"weapon_satchel", // 19
"weapon_snark", ?// 20
"weapon_hornetgun", // 21
"weapon_example", // 22 - ваше оружие
};


Так, с серверной частью мы покончили - теперь идем в клиент ( cl_dll.dsw )

В клиенте для начала откроем папку hl и в нее добавим наш example.cpp. Затем идем в фаил ev_hldm.cpp и добавляем в районе строчки 67 свое оружие :

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_ExampleFire( struct event_args_s *args );
// ваше оружие

Идите вниз и там введите определение вашего оружия:

CHandGrenade g_HandGren;
CSatchel g_Satchel;
CTripmine g_Tripmine;
CSqueak g_Snark;
CExampleGun g_ExampleGun // ваше оружие


Затем все в том же фаиле идите в район строчки 637 и добавьте там свое оружие :

HUD_PrepEntity( &g_HandGren , &player );
HUD_PrepEntity( &g_Satchel , &player );
HUD_PrepEntity( &g_Tripmine , &player );
HUD_PrepEntity( &g_Snark , &player );
HUD_PrepEntity( &g_ExampleGun , &player ); // ваше оружие


И наконец спуститесь в район строчки 761 и добавьте :

case WEAPON_TRIPMINE:
pWeapon = &g_Tripmine;
break;
case WEAPON_SNARK:
pWeapon = &g_Snark;
break;
case WEAPON_EXAMPLE: // ваше оружие
pWeapon = &g_ExampleGun;
break;



Теперь идите в фаил hl_events.cpp и там в районе строчки 40 добавьте : 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_ExampleFire( struct event_args_s *args ); // ваше оружие


Это как вы заметили то же самое что вы сделали в начале ev_hldm.cpp. Теперь спуститесь в район строчки 88 и добавьте :

gEngfuncs.pfnHookEvent( "events/egon_stop.sc", EV_EgonStop );
gEngfuncs.pfnHookEvent( "events/firehornet.sc", EV_HornetGunFire );
gEngfuncs.pfnHookEvent( "events/tripfire.sc", EV_TripmineFire );
gEngfuncs.pfnHookEvent( "events/snarkfire.sc", EV_SnarkFire );
gEngfuncs.pfnHookEvent( "events/example.sc", EV_ExampleFire ); // ваше оружие


Теперь вы можете смело компилить. После компила идите в папку со своим модом, создайте папку events, если таковой нету и создайте там фаил example.sc ( Содержимое этого фаила можете скопировать из sc фаила мп5, который находиться в паке). Затем идете в папку sprites своего мода и создайте там weapon_example.txt ( содержимое также можете скопировать из мп5 и затем исправлять, так как там нужно указать спрайты которые будут в отражаться в худе, при подборе и и тд)

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

Спасибо за внимание !

Прим. Если вы будете копировать код прямо из статьи - не забудьте стереть мои коментарии - ибо C++ русский шрифт не понимает
 

qpAHToMAS

Administrator
Команда форума
Администратор
22.10.2006
9 323
33
  • Золотая медаль 215
  • Золотая медаль 152
  • Серебряная медаль 136
  • Золотая медаль 221
Откуда исходники CS 1.6 то?
Не помешало бы использовать CODE тэг.
 

Pops

レズビアン
20.03.2009
2 611
30
31
48
долб
:shock: откуда такая информация? У офиса vavle подслушивал? :D
 

Umakiro

New member
03.12.2009
345
33
0
0
Скрины где? Пока не увижу своими глазами новое оружие не поверю :D

Хотябы видео показал бы...
 

Gaia

Чёрный вертолёт
Спонсор
04.08.2008
4 685
37
154
63
1. Этой копипасте лет стопитсот.
2. в кс ничего никогда нельзя будет добавить кроме карт.
3. Тутор написан не тобой.
 
Последнее редактирование:

Monyak

Всэх зарэжу-пэрэрэжу
22.04.2007
1 174
5
38
Ukraine
  • Серебряная медаль 211
asssasssin2 сказал(а):
Прим. Если вы будете копировать код прямо из статьи - не забудьте стереть мои коментарии - ибо C++ русский шрифт не понимает
Мб когда эта статья писалась русский шрифт не понимало, но теперь отлично все понимает( тыц :D )
На мой взгляд, свои "моды" лучше делать через АМХХ, тогда не надо устанавливать ничего и можно играть толпой.
qpAHToMAS сказал(а):
Откуда исходники CS 1.6 то?
Ну какие-то исходники все же валяются в инете, у меня непонятно какие исходники есть, я там смотрел как работают некоторые энтити.
 

Game Server

Доноры Красавчики

Пользователи онлайн

Нет пользователей онлайн.