HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- назначение моделей оружия (https://hlfx.ru/forum/showthread.php?threadid=1662)
Отправлено fire64 29-12-2008 в 20:11:
назначение моделей оружия
подскажите как реализовать возможность выбора моделей оружия ( p, v ,w ) с помощью параметров энтитей в редакторе.
в принципе понятно, но не до конца
я пока решил сделать так, но не уверен что это сработает
C++ Source Code:
1 | void CCrowbar:: KeyValue( KeyValueData *pkvd ) |
3 | if (FStrEq(pkvd->szKeyName, "v_model")) |
5 | v_model = ALLOC_STRING( pkvd->szValue ); |
8 | else if (FStrEq(pkvd->szKeyName, "w_model")) |
10 | w_model = ALLOC_STRING( pkvd->szValue ); |
11 | pkvd->fHandled = TRUE; |
13 | else if (FStrEq(pkvd->szKeyName, "p_model")) |
15 | p_model = ALLOC_STRING( pkvd->szValue ); |
16 | pkvd->fHandled = TRUE; |
20 | CBaseMonster::KeyValue( pkvd ); |
потом
C++ Source Code:
4 | m_iId = WEAPON_CROWBAR; |
6 | SET_MODEL(ENT(pev), w_model ); //LRC |
8 | SET_MODEL(ENT(pev), "models/w_crowbar.mdl"); |
11 | FallInit();// get ready to fall down. |
затем кеширование
C++ Source Code:
1 | void CCrowbar::Precache( void ) |
5 | PRECACHE_MODEL(v_model ); |
7 | PRECACHE_MODEL("models/v_crowbar.mdl"); |
11 | PRECACHE_MODEL(w_model ); |
13 | PRECACHE_MODEL("models/w_crowbar.mdl"); |
16 | PRECACHE_MODEL(p_model ); |
18 | PRECACHE_MODEL("models/p_crowbar.mdl"); |
20 | PRECACHE_SOUND("weapons/cbar_hit1.wav"); |
21 | PRECACHE_SOUND("weapons/cbar_hit2.wav"); |
22 | PRECACHE_SOUND("weapons/cbar_hitbod1.wav"); |
23 | PRECACHE_SOUND("weapons/cbar_hitbod2.wav"); |
24 | PRECACHE_SOUND("weapons/cbar_hitbod3.wav"); |
25 | PRECACHE_SOUND("weapons/cbar_miss1.wav"); |
27 | m_usCrowbar = PRECACHE_EVENT ( 1, "events/crowbar.sc" ); |
вопрос что менять в CCrowbar::Deploy ?
и будет ли вообще этот код работать ?__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
Отправлено XaeroX 29-12-2008 в 20:32:
Как объявлены v_model, w_model и т.п.?
Если как char*, то не будет работать вот это:
C++ Source Code:
v_model = ALLOC_STRING( pkvd->szValue ); |
Если как string_t - то это:
C++ Source Code:
PRECACHE_MODEL(v_model ); |
Добавлено 30-12-2008 в 02:32:
Цитата:
fire64 писал:
и будет ли вообще этот код работать ?
А проверить самому? 
__________________
Отправлено fire64 29-12-2008 в 20:38:
XaeroX, спасибо
сегодня уже лень, а завтра проверю
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
Отправлено Дядя Миша 29-12-2008 в 21:21:
fire64 это очень непростая задача.
Изучай старый Xash 0.35, 0.39 - weapon_generic
Там имена грузятся из текстового файлика, но переделать под энтварс достаточно легко. А вот граблей там предостаточно.
Темки для ознакомления
http://half-life.ru/forum/showthrea...t=weapongeneric
http://half-life.ru/forum/showthrea...t=weapongeneric
http://half-life.ru/forum/showthrea...t=weapongeneric
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено fire64 30-12-2008 в 08:18:
Дядя Миша, большое вам спасибо
использовал код из ваших постов,
но есть одна проблема, в мультиплеере же оружие респавнится через определенное время
и дело в том что респавнится оно без параметров, с оригинальной моделью, а не той что установлена на карте
написал следующее
C++ Source Code:
3 | * Copyright © 1996-2002, Valve LLC. All rights reserved. |
5 | * This product contains software technology licensed from Id |
6 | * Software, Inc. ("Id Technology"). Id Technology © 1996 Id Software, Inc. |
9 | * Use, distribution, and modification of this source code and/or resulting |
10 | * object code is restricted to non-commercial enhancements to products from |
11 | * Valve LLC. All other use, distribution, or modification is prohibited |
12 | * without written permission from Valve LLC. |
26 | class CTestWeapon : public CBasePlayerWeapon |
30 | void Precache( void ); |
31 | void KeyValue( KeyValueData *pkvd ); |
32 | int GetItemInfo(ItemInfo *p); |
33 | void PrimaryAttack( void ); |
34 | void SecondaryAttack( void ); |
37 | void WeaponIdle( void ); |
44 | unsigned int m_usCrowbar; |
46 | LINK_ENTITY_TO_CLASS( weapon_test, CTestWeapon ); |
53 | void CTestWeapon:: KeyValue( KeyValueData *pkvd ) |
55 | if (FStrEq(pkvd->szKeyName, "wpn_v_model")) |
57 | v_model = ALLOC_STRING( pkvd->szValue ); |
58 | pkvd->fHandled = TRUE; |
60 | else if (FStrEq(pkvd->szKeyName, "wpn_w_model")) |
62 | w_model = ALLOC_STRING( pkvd->szValue ); |
63 | pkvd->fHandled = TRUE; |
65 | else if (FStrEq(pkvd->szKeyName, "wpn_p_model")) |
67 | p_model = ALLOC_STRING( pkvd->szValue ); |
68 | pkvd->fHandled = TRUE; |
72 | CBasePlayerWeapon::KeyValue( pkvd ); |
76 | void CTestWeapon::Spawn( ) |
83 | SET_MODEL(ENT(pev), STRING( w_model) ); //LRC |
85 | SET_MODEL(ENT(pev), "models/w_crowbar.mdl"); |
88 | FallInit();// get ready to fall down. |
92 | void CTestWeapon::Precache( void ) |
96 | PRECACHE_MODEL( (char *)STRING(w_model) ); |
98 | PRECACHE_MODEL("models/w_crowbar.mdl"); |
101 | PRECACHE_MODEL( (char *)STRING(v_model) ); |
103 | PRECACHE_MODEL("models/v_crowbar.mdl"); |
106 | PRECACHE_MODEL( (char *)STRING(p_model) ); |
108 | PRECACHE_MODEL("models/p_crowbar.mdl"); |
111 | int CTestWeapon::GetItemInfo(ItemInfo *p) |
113 | p->pszName = STRING(pev->classname); |
118 | p->iMaxClip = WEAPON_NOCLIP; |
121 | p->iId = WEAPON_TEST; |
122 | p->iWeight = TEST_WEIGHT; |
127 | BOOL CTestWeapon::Deploy( ) |
129 | if (v_model || p_model ) |
130 | return DefaultDeploy( (char *)STRING(v_model), (char *)STRING(p_model), TEST_DRAW, "crowbar" ); |
132 | return DefaultDeploy( "models/v_crowbar.mdl", "models/p_crowbar.mdl", TEST_DRAW, "crowbar" ); |
135 | void CTestWeapon::Holster( ) |
141 | void CTestWeapon::PrimaryAttack() |
146 | void CTestWeapon::SecondaryAttack() |
151 | void CTestWeapon:: WeaponIdle( void ) |
153 | if ( m_flTimeWeaponIdle > UTIL_WeaponTimeBase() ) return; |
154 | float flRand = RANDOM_FLOAT(0, 1); |
157 | SendWeaponAnim( TEST_IDLE ); |
158 | m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + RANDOM_FLOAT ( 10, 15 ); |
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
Отправлено Дядя Миша 30-12-2008 в 09:49:
fire64 чтобы в мультиплеере работало - изучай исходники Xash 0.39
на форуме я об этом не писал.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'