Registrierung - oder - Hineingehen
The Real v2.0The Real v2.0

Очень сложный мод от чешского автора...

1/06/2002
BLACK SNOWBLACK SNOW

Adventure...

22/11/2012

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


  • Beschreibung
  • Einstellung

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

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


Der Autor der Lektion : Дядя Миша & Mitoh
Der Durchsichten : 1195 ( +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. Два цвета крови у зомби - Два цвета крови у зомби
2. Удалённый контроль зарядника - Всегда хотелось, чтобы зарядник в хл был управляемым.
Jendr 08/26/2011, 2:49:19 PM schreibt :
#1
Пробовал и нифига только весь код ХЛ испортил сделай видео уроггг
Sie können nicht kommentieren, da Sie sind nicht registriert.
    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