Registrierung - oder - Hineingehen
The GateThe Gate

Тотальная конверсия на тему секретных исследований в гитлеровской Германии....

28/10/2003
RavenholmRavenholm

Мод посвященный городку Ravenholm...

15/09/2007

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


  • Beschreibung
  • Einstellung

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

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


Der Autor der Lektion : Дядя Миша & Mitoh
Der Durchsichten : 1072 ( +1 )
Heruntergeladen : 0
Hochgeladen von : Streit
Erstellt : 04/07/2011 5:30:04 PM
Source : http://www.xash.ru
Wertung :
 ( 0 ) 
Aktie :


Es gibt die folgenden Sprachen : | russisch |

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



Die Ähnlichen1. weapon_flamethrower - Играя в Халф-Лайф, вы не задумывались над тем, что в нем чего-то не хватает? Чего-то очень близкого, родного, горячего...
2. Как адаптировать код к модели - Допустим, вы сделали новую модель для автомата MP5, но порядок и кол-во анимаций не сходятся.
3. И снова наследование классов :) - Казалось бы тема наследования классов давно избита, ан нет всё ещё существуют вопросы, правда про чуть боле сложное наследование.
4. учёные не отставали - Как сделать так, чтобы учёные не отставали на каждом препятствии
5. Каждой пушке - спрайт - Итак вы создали новое оружие. А в меню выбора вместо рисунка непонятные спрайты, да и прицела нет.
6. Больше слотов и позиций для оружия - Больше слотов и позиций для оружия
7. Создание КООП,смена карт аля сингл - Сдесь я расскажу как разрешить синглплеерные скрипты в мултиплеере!
8. Water Splash - Добавляем брызги при выстреле по воде
9. Звук попадания как в HL2 - Работа на клиенте
Ссылки на объект
Полная ссылка на текущем языке :
Короткая ссылка :
Ссылка на превью-картинку :
Ссылка на картинку в полном размере :
Ссылка для вашего форума или сайта
BB код ссылка:
BB код ссылка с картинкой :
BB код картинки :
HTML код ссылка:
HTML код ссылка с картинкой :
HTML код картинки :
Jendr 08/26/2011, 2:49:19 PM schreibt :
#1
Пробовал и нифига только весь код ХЛ испортил сделай видео уроггг
Sie können nicht kommentieren, da Sie sind nicht registriert.
    Chris Redfield (RECVX Costume)
    Chris Redfield (RECVX Costume)
    Blood Stained Knife
    Blood Stained Knife
    PlayStation Button Mod
    PlayStation Button Mod
    Русификатор (звук) от Team Raccoon
    Русификатор (звук) от Team Raccoon