Регистрация - или - Войти
Timeline ITimeline I

Мод о перемещении во времени....

2/02/2002
Attack DayAttack Day

Действие происходит ночью. Со всех сторон вас атакуют зомби....

26/07/2010

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


  • Описание
  • Ссылка и установка

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

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


Автор / ы урока : Дядя Миша & Mitoh
Просмотров : 1155 ( +1 )
Скачиваний : 0
Прислал / (а) : Streit
Дата создания : 07.04.2011 17:30:04
Источник : http://www.xash.ru
Рейтинг :
 ( 0 ) 
Поделиться :


Имеются следующие переводы : | русский |

Оружие мы сделаем на базе мп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 .



Похожие1. Trigger_PlayerFreeez - Trigger_PlayerFreeez (остановка игрока)
2. Quake strafing & DoD bobing styles - Вот от нечего делать я решил немножко изменить стиль игры в оригинальной хл.
3. Мазлфлэш на брашах - Мазлфлэш на брашах
4. Увеличение количества мяса от взрыв - Увеличение количества мяса от взрывов людей или инопланетян.
5. Создание сценариев - Для создания сценариев (aka скриптов) в Half-Life существуют две энтити: scripted_sequence и scripted_sentence. Первая отвечает за движения, выполняемые монстром/персонажем, будь то ходьба, бег, нажатие кнопки, тряска автомата с газировкой или почёсывание подбородка. Вторая служит для того, чтобы персонаж произнес какую-то фразу. При этом его голова повернётся в сторону слушателя, и рот будет открываться в соответствии с амплитудой звука.
6. Sparks - Как добавить искры
Ссылки на объект
Полная ссылка на текущем языке :
Короткая ссылка :
Ссылка на превью-картинку :
Ссылка на картинку в полном размере :
Ссылка для вашего форума или сайта
BB код ссылка:
BB код ссылка с картинкой :
BB код картинки :
HTML код ссылка:
HTML код ссылка с картинкой :
HTML код картинки :
Jendr 26.08.2011, 14:49:19 пишет :
#1
Пробовал и нифига только весь код ХЛ испортил сделай видео уроггг
Вы не можете комментировать, т.к. вы не зарегистрированы.
    FN Browning High Power
    The SpecialistsFN Browning High Power
    HITMAN's HARDBALLERS (AMT Long Side)
    The SpecialistsHITMAN's HARDBALLERS (AMT Long Side)
    Custom SV Infinity's (3 skins)
    The SpecialistsCustom SV Infinity's (3 skins)
    Golden HK USP Match
    The SpecialistsGolden HK USP Match