Registration - or - Enter
Operation Black ThunderOperation Black Thunder

Мод о спец-операции недалёкого будущего...

25/04/2004
Mesa - FallbackMesa - Fallback

Мод повествует о событиях в Black Mesa. Вы играете в роли солдата HECU который должен устранить последствия после каскад...

25/04/2011

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


  • Description
  • Link and installation

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

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


Author/s of lesson : Дядя Миша & Mitoh
Views : 1194 ( +1 )
Downloads : 0
Uploaded by : Streit
Created : 04/07/2011 5:30:04 PM
Source : http://www.xash.ru
Rating :
 ( 0 ) 
Share :


Available following translations : | russian |

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

Итак для начала открываем серверную часть - hl.dsp Примечание редактора: для этого откройте в Visual C++ файл hl.dsp (в папке Single-Player Source\dlls) .

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

Code:

#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 = 0; // слот в худе ( помните также, что елси здесь вы написали например 2 то в игре будет занят 3 слот, т.к в коде исчесление начинаеться от нуля)
   p->iPosition = 1; // позиция в слоте ( то же самое что и в слоте - елси вам надо занять 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;
}

Сохраняете это как example.cpp и добавляете в проект. Примечание редактора: для этого в меню выберите File→New, выберите C++ Sourse File потом введите имя создаваемого файла и нажмите OK. В этот файл вставьте этот код.

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

Code:

// 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" );

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

Code:

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

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

Code:

class CExampleGun : public CBasePlayerWeapon
{
   public:
   void Spawn( void );
   void Precache( void );
   int iItemSlot( void ) { return 0; }
   int GetItemInfo(ItemInfo *p);
   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 добавьте свое оружие в список оружий, появляющихся при разбивании обьекта :

Code:

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.dsp ) Примечание редактора: для этого откройте в Visual C++ файл cl_dll.dsp (в папке Single-Player Source\cl_dll) . В клиенте для начала откроем папку hl и в нее добавим наш example.cpp. Примечание редактора: для этого щёлкните в окне File View по папке hl правой кнопкой мыши и выбирете Add Files To Folder, в открывшемся окне укажите путь к нашему, ранее созданному example.cpp. Затем идем в фаил ev_hldm.cpp и добавляем в районе строчки 67 свое оружие :

Code:

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 ); // ваше оружие

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

Code:

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

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

Code:

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 и добавьте :

Code:

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 добавьте:

Code:

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 ); // ваше оружие

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

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

Осталось добавить описания нашего оружия в FGD файл. В его конец halflife.fgd добавьте:

Code:

@PointClass base(Weapon, Targetx) studio("models/w_9mmar.mdl") = weapon_example : "ExampleGun" []

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

Примечание редактора: это оружие не может ни стрелять, ни перезаряжаться, ни бездействовать, оно даже не отображается в руках. Его можно только положить на карту, взять игроком и отображать при выборе оружия. Что бы дать игроку это оружие поместите на вашу карту энтити weapon_example .



Similar1. Как адаптировать код к модели - Допустим, вы сделали новую модель для автомата MP5, но порядок и кол-во анимаций не сходятся.
2. Подбираемый фонарик v 2.5 - Подбираемый фонарик v 2.5
3. Каждой пушке - спрайт - Итак вы создали новое оружие. А в меню выбора вместо рисунка непонятные спрайты, да и прицела нет.
4. Цвет спрайтов HUD - Итак, как же сменить цвет спрайтов в HUD-системе
5. Мазлфлэш на брашах - Мазлфлэш на брашах
6. Изменение цвета HUD'а(полное)! - Изменение цвета HUD'а(полное)! Но прицелы придётся переделывать вам самим! Сдесь я перевевёл туториал с twhl.info на русский язык!
7. Water Splash - Добавляем брызги при выстреле по воде
Jendr 08/26/2011, 2:49:19 PM is writing :
#1
Пробовал и нифига только весь код ХЛ испортил сделай видео уроггг
You cannot comment, because you are not registered.
    UT3 Evangelion Model Pack v1.1 Final
    Unreal Tournament 3UT3 Evangelion Model Pack v1.1 Final
    OldSkool Amp'd
    Unreal Tournament 99OldSkool Amp'd
    Csejte Castle HerdCoop Map Pack V3
    Unreal Tournament 99Csejte Castle HerdCoop Map Pack V3
    Unreal Tournament 3 Original Soundtrack
    Unreal Tournament 3 Original Soundtrack