HLFX.Ru Forum
Показать все 47 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- кодеры помогите не работает displacer (https://hlfx.ru/forum/showthread.php?threadid=5320)


Отправлено демид 28-07-2019 в 06:16:

Unhappy кодеры помогите не работает displacer

displacer сам стреляет но анимации выстрела так самого нет и звука выстрела нет уже целый день пытаюсь исправить данный баг никак не получается справиться с этой проблемой вот сам код дисплекера:

C++ Source Code:
1
/***
2
*
3
*   Copyright © 2004
4
*   Code by Shambler Team.
5
*   Op4-realm modify by Demiurge.
6
*   All rights reserved.
7
*
8
****/
9
 
10
 
11
/*
12
//=========================================================
13
//
14
//    CODE PART FOR CLIENT SIDE
15
//
16
//======================
17
//      DISPLACER START
18
//======================
19
enum displacer_e
20
{
21
    DISPLACER_IDLE1,
22
    DISPLACER_IDLE2,
23
    DISPLACER_SPINUP,
24
    DISPLACER_SPIN,
25
    DISPLACER_FIRE,
26
    DISPLACER_DRAW,
27
    DISPLACER_HOLSTER,
28
};
29
void EV_SpinDisplacer(event_args_t *args)//Original code idea by Xwider
30
{
31
    if (EV_IsLocal(args->entindex))
32
    {
33
        gEngfuncs.pEventAPI->EV_WeaponAnimation(DISPLACER_SPINUP, 2);
34
        cl_entity_t *view = gEngfuncs.GetViewModel();
35
        if (view != NULL)
36
        {
37
            float life = 1.14;
38
 
39
            gEngfuncs.pEfxAPI->R_BeamEnts(view->index | 0x2000, view->index | 0x1000, args->iparam2, life, 0.5, 0.5, 0.5, 0.6, 0, 10, 2, 10, 0);
40
            gEngfuncs.pEfxAPI->R_BeamEnts(view->index | 0x3000, view->index | 0x1000, args->iparam2, life, 0.5, 0.5, 0.5, 0.6, 0, 10, 2, 10, 0);
41
            gEngfuncs.pEfxAPI->R_BeamEnts(view->index | 0x4000, view->index | 0x1000, args->iparam2, life, 0.5, 0.5, 0.5, 0.6, 0, 10, 2, 10, 0);
42
        }
43
    }
44
 
45
    if (args->bparam2 == 0)// sound mode
46
        gEngfuncs.pEventAPI->EV_PlaySound(args->entindex, args->origin, CHAN_WEAPON, "weapons/displacer_spin.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
47
    else
48
        gEngfuncs.pEventAPI->EV_PlaySound(args->entindex, args->origin, CHAN_WEAPON, "weapons/displacer_spin2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
49
 
50
}
51
//======================
52
//       DISPLACER END
53
//======================
54
*/
55
 
56
#include "extdll.h"
57
#include "util.h"
58
#include "cbase.h"
59
#include "monsters.h"
60
#include "weapons.h"
61
#include "nodes.h"
62
#include "player.h"
63
#include "gamerules.h"
64
#include "shake.h"
65
#include "effects.h"
66
 
67
enum displacer_e
68
{
69
  DISPLACER_IDLE1 = 0,
70
  DISPLACER_IDLE2,
71
  DISPLACER_SPINUP,
72
  DISPLACER_SPIN,
73
  DISPLACER_FIRE,
74
  DISPLACER_DRAW,
75
  DISPLACER_HOLSTER,
76
};
77
 
78
class CDisplacer : public CBasePlayerWeapon
79
{
80
public:
81
  int    Save( CSave &save );
82
  int    Restore( CRestore &restore );
83
  static    TYPEDESCRIPTION m_SaveData[];
84
 
85
  void Spawn( void );
86
  void Precache( void );
87
  int iItemSlot( void ) { return 4; }
88
  int GetItemInfo(ItemInfo *p);
89
  int AddToPlayer( CBasePlayer *pPlayer );
90
 
91
  BOOL Deploy( void );
92
  void Holster( int skiplocal = 0 );
93
 
94
  void PrimaryAttack( void );
95
  void SecondaryAttack (void);
96
  void EXPORT SpinUp( void );
97
  void EXPORT Teleport( void );
98
  void EXPORT Fire( void );
99
  void WeaponIdle( void );
100
 
101
  int m_iAttackMode;//no need save/restore this. g-cont
102
private:
103
  unsigned short m_usDisplacer;
104
  int m_iBeam;
105
  int m_iPlace;
106
};
107
 
108
LINK_ENTITY_TO_CLASS( weapon_displacer, CDisplacer );
109
 
110
//===========================
111
//
112
//  TeleBall code
113
//
114
//===========================
115
 
116
//class CDispBall : public CGrenade
117
class CDispBall : public CBaseEntity//Special for Ghoul [BB] :devil:
118
{
119
public:
120
  void Spawn( void );
121
  void Precache( void );
122
  void Explode( TraceResult *pTrace );
123
  void RemoveBall (void);
124
  void EXPORT ExplodeTouch( CBaseEntity *pOther );
125
 
126
  void EXPORT BallThink( void );
127
  static CDispBall *CreateDispBall( Vector vecOrigin, Vector vecAngles, CBaseEntity *pOwner, CDisplacer *pLauncher );
128
 
129
  int m_iDispRing;
130
  BOOL LockRing;
131
};
132
 
133
LINK_ENTITY_TO_CLASS( dispball, CDispBall );
134
 
135
CDispBall *CDispBall::CreateDispBall( Vector vecOrigin, Vector vecAngles, CBaseEntity *pOwner, CDisplacer *pLauncher )
136
{
137
  CDispBall *pDispBall = GetClassPtr( (CDispBall *)NULL );
138
 
139
  UTIL_SetOrigin( pDispBall->pev, vecOrigin );
140
  pDispBall->pev->angles = vecAngles;
141
  pDispBall->Spawn();
142
  pDispBall->SetTouch( CDispBall::ExplodeTouch );
143
  pDispBall->pev->owner = pOwner->edict();
144
 
145
  return pDispBall;
146
}
147
 
148
void CDispBall :: Spawn( void )
149
{
150
  Precache( );
151
  pev->movetype = MOVETYPE_FLY;
152
  pev->solid = SOLID_BBOX;
153
 
154
  SET_MODEL(ENT(pev), "sprites/exit1.spr");
155
  pev->scale = .5;
156
 
157
  UTIL_SetSize(pev, Vector ( 0, 0, 0 ), Vector ( 0, 0, 0 ) );
158
  UTIL_SetOrigin( pev, pev->origin );
159
  pev->rendermode = kRenderTransAdd;
160
  pev->renderamt = 255;
161
 
162
  pev->classname = MAKE_STRING("dispball");
163
 
164
  SetThink( BallThink );
165
  SetTouch( ExplodeTouch );
166
 
167
  pev->angles.x -= 0;
168
  UTIL_MakeVectors( pev->angles );
169
  pev->angles.x = -(pev->angles.x + 0);
170
  pev->velocity = gpGlobals->v_forward * 500;
171
  pev->nextthink = 0.5;
172
 
173
  pev->dmg = 1000;
174
}
175
 
176
void CDispBall :: Precache( void )
177
{
178
  PRECACHE_MODEL("sprites/exit1.spr");
179
  PRECACHE_MODEL ("sprites/plasma.spr");
180
 
181
  PRECACHE_SOUND("weapons/displacer_teleport.wav");
182
  m_iDispRing = PRECACHE_MODEL ("sprites/displacer_ring.spr");
183
}
184
 
185
void CDispBall :: BallThink( void )
186
{
187
  CBeam *pBeam;
188
  TraceResult tr;
189
  Vector vecDest;
190
  float flDist = 1.0;
191
 
192
  for (int i = 0; i < 10; i++)
193
  {
194
    Vector vecDir = Vector( RANDOM_FLOAT( -1.0, 1.0 ), RANDOM_FLOAT( -1.0, 1.0 ),RANDOM_FLOAT( -1.0, 1.0 ) );
195
    vecDir = vecDir.Normalize();
196
    TraceResult tr1;
197
    UTIL_TraceLine( pev->origin, pev->origin + vecDir * 1024, ignore_monsters, ENT(pev), &tr1 );
198
    if (flDist > tr1.flFraction)
199
    {
200
      tr = tr1;
201
      flDist = tr.flFraction;
202
    }
203
  }
204
 
205
  if ( flDist == 1.0 ) return;
206
 
207
  pBeam = CBeam::BeamCreate("sprites/plasma.spr",200);
208
  pBeam-> PointEntInit( tr.vecEndPos, entindex() );
209
  pBeam->SetStartPos( tr.vecEndPos );
210
  pBeam->SetEndEntity( entindex() );
211
  pBeam->SetColor( 90, 170, 16 );
212
  pBeam->SetNoise( 65 );
213
  pBeam->SetBrightness( 255 );
214
  pBeam->SetWidth( 30 );
215
  pBeam->SetScrollRate( 35 );
216
  pBeam->LiveForTime( 1 );
217
 
218
  pev->frame += 1; //animate teleball
219
  if(pev->frame > 24)
220
    pev->frame = fmod( pev->frame, 24 );
221
 
222
  pev->nextthink = gpGlobals->time + 0.1;
223
}
224
 
225
void CDispBall::ExplodeTouch( CBaseEntity *pOther )
226
{
227
  TraceResult tr;
228
  Vector    vecSpot;// trace starts here!
229
 
230
  pev->enemy = pOther->edict();
231
 
232
  vecSpot = pev->origin - pev->velocity.Normalize() * 32;
233
  UTIL_TraceLine( vecSpot, vecSpot + pev->velocity.Normalize() * 64, dont_ignore_monsters, ENT(pev), &tr );
234
 
235
  Explode( &tr );
236
}
237
 
238
void CDispBall::Explode( TraceResult *pTrace )
239
{
240
  if(!LockRing)//for partially fix strange bug in HL engine (for full fix teleball MUST be moved to client side). g-cont
241
  {
242
    MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, pev->origin );
243
    WRITE_BYTE( TE_BEAMCYLINDER );
244
    WRITE_COORD( pev->origin.x);
245
    WRITE_COORD( pev->origin.y);
246
    WRITE_COORD( pev->origin.z);
247
    WRITE_COORD( pev->origin.x);
248
    WRITE_COORD( pev->origin.y);
249
    WRITE_COORD( pev->origin.z + 800);
250
    WRITE_SHORT( m_iDispRing );
251
    WRITE_BYTE( 0 ); // startframe
252
    WRITE_BYTE( 10 ); // framerate
253
    WRITE_BYTE( 3 ); // life
254
    WRITE_BYTE( 20 );  // width
255
    WRITE_BYTE( 0 );   // noise
256
    WRITE_BYTE( 255 );   // r, g, b
257
    WRITE_BYTE( 255 );   // r, g, b
258
    WRITE_BYTE( 255 );   // r, g, b
259
    WRITE_BYTE( 255 ); //brightness
260
    WRITE_BYTE( 0 );// speed
261
    MESSAGE_END();
262
  }
263
 
264
  LockRing = TRUE;
265
  pev->velocity = g_vecZero;
266
 
267
  SetThink (RemoveBall);
268
  pev->nextthink = gpGlobals->time + 0.6;
269
 
270
}
271
 
272
void CDispBall::RemoveBall( void )
273
{
274
  EMIT_SOUND(ENT(pev), CHAN_VOICE, "weapons/displacer_teleport.wav", 0.9, ATTN_NORM);
275
  pev->effects |= EF_NODRAW;
276
 
277
  entvars_t *pevOwner;
278
  if ( pev->owner )
279
    pevOwner = VARS( pev->owner );
280
  else
281
    pevOwner = NULL;
282
  pev->owner = NULL;
283
 
284
  UTIL_Remove( this );
285
  ::RadiusDamage( pev->origin, pev, pevOwner, pev->dmg, 200, CLASS_NONE, DMG_ENERGYBEAM );
286
}
287
 
288
//===========================
289
//
290
//  Displacer code
291
//
292
//===========================
293
 
294
void CDisplacer::Spawn( )
295
{
296
  Precache( );
297
  m_iId = WEAPON_DISPLACER;
298
  SET_MODEL(ENT(pev), "models/w_displacer.mdl");
299
 
300
  m_iDefaultAmmo = 60;
301
  FallInit();// get ready to fall down.
302
}
303
 
304
TYPEDESCRIPTION    CDisplacer::m_SaveData[] =
305
{
306
  DEFINE_FIELD( CDisplacer, m_iPlace, FIELD_INTEGER ),//Remember last teleportation point. g-cont
307
};
308
IMPLEMENT_SAVERESTORE( CDisplacer, CBasePlayerWeapon );
309
 
310
int CDisplacer::AddToPlayer( CBasePlayer *pPlayer )
311
{
312
  if ( CBasePlayerWeapon::AddToPlayer( pPlayer ) )
313
  {
314
    MESSAGE_BEGIN( MSG_ONE, gmsgWeapPickup, NULL, pPlayer->pev );
315
    WRITE_BYTE( m_iId );
316
    MESSAGE_END();
317
    return TRUE;
318
  }
319
  return FALSE;
320
}
321
 
322
BOOL CDisplacer::Deploy( void )
323
{
324
  return DefaultDeploy( "models/v_displacer.mdl", "models/p_displacer.mdl", DISPLACER_DRAW, "gauss" );
325
}
326
 
327
void CDisplacer::Holster( int skiplocal )
328
{
329
  m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 1.5;
330
  SendWeaponAnim( DISPLACER_HOLSTER );
331
}
332
 
333
int CDisplacer::GetItemInfo(ItemInfo *p)
334
{
335
  p->pszName = STRING(pev->classname);
336
  p->pszAmmo1 = "uranium";
337
  p->iMaxAmmo1 = URANIUM_MAX_CARRY;
338
  p->pszAmmo2 = NULL;
339
  p->iMaxAmmo2 = -1;
340
  p->iMaxClip = WEAPON_NOCLIP;
341
  p->iSlot = 3;
342
  p->iPosition = 4;
343
  p->iId = m_iId = WEAPON_DISPLACER;
344
  p->iFlags = 0;
345
  p->iWeight = DISPLACER_WEIGHT;
346
 
347
  return 1;
348
}
349
 
350
void CDisplacer::Precache( void )
351
{
352
  PRECACHE_MODEL("models/w_displacer.mdl");
353
  PRECACHE_MODEL("models/v_displacer.mdl");
354
  PRECACHE_MODEL("models/p_displacer.mdl");
355
 
356
  PRECACHE_SOUND("weapons/displacer_fire.wav");
357
  PRECACHE_SOUND ("buttons/button10.wav");
358
  PRECACHE_SOUND ("weapons/displacer_self.wav");
359
 
360
  UTIL_PrecacheOther( "dispball" );
361
 
362
  m_iBeam = PRECACHE_MODEL("sprites/plasma.spr");
363
  m_usDisplacer = PRECACHE_EVENT( 1, "events/displacer.sc" );
364
}
365
 
366
void CDisplacer::SpinUp ( void )
367
{
368
  int flags;
369
  flags = 0;
370
 
371
  if (!m_iAttackMode) SetThink (CDisplacer::Fire);
372
  else SetThink (CDisplacer::Teleport);
373
 
374
  //spinup event
375
  PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usDisplacer, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, 0.0, 0.0, 0, m_iBeam, 0, m_iAttackMode);
376
 
377
  pev->nextthink = gpGlobals->time + 1.1;
378
  m_flTimeWeaponIdle = gpGlobals->time + 1.15;
379
}
380
 
381
void CDisplacer::PrimaryAttack( void )
382
{
383
  if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] < 20)
384
  {
385
    EMIT_SOUND( edict(), CHAN_BODY, "buttons/button10.wav", 1, ATTN_NORM );
386
    m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 1.0;
387
    return;
388
  }
389
 
390
  m_iAttackMode = FALSE;
391
 
392
  SetThink (CDisplacer::SpinUp);
393
 
394
  m_flNextPrimaryAttack = gpGlobals->time + 2.0;
395
  m_flTimeWeaponIdle = gpGlobals->time + 1.5;
396
  pev->nextthink = gpGlobals->time + 0.1;
397
}
398
 
399
void CDisplacer::SecondaryAttack ( void )
400
{
401
  if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] < 60)
402
  {
403
    EMIT_SOUND( edict(), CHAN_BODY, "buttons/button10.wav", 1, ATTN_NORM );
404
    m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 1.0;
405
    return;
406
  }
407
 
408
  if (m_iAttackMode) return;
409
  m_iAttackMode = TRUE;
410
 
411
  SetThink (CDisplacer::SpinUp);
412
 
413
  m_flNextSecondaryAttack = gpGlobals->time + 2.0;
414
  m_flTimeWeaponIdle = gpGlobals->time + 1.5;
415
  pev->nextthink = gpGlobals->time + 0.1;
416
}
417
 
418
void CDisplacer::Fire (void)
419
{
420
  SendWeaponAnim( DISPLACER_FIRE );
421
  m_pPlayer->SetAnimation( PLAYER_ATTACK1 );
422
 
423
  Vector vecSrc = m_pPlayer->GetGunPosition( ) + gpGlobals->v_forward * 16 + gpGlobals->v_right * 2 + gpGlobals->v_up * -5;
424
  m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] -= 20;
425
 
426
  EMIT_SOUND(ENT(m_pPlayer->pev), CHAN_WEAPON, "weapons/displacer_fire.wav", 0.9, ATTN_NORM );
427
  CDispBall *pDispBall = CDispBall::CreateDispBall( vecSrc, m_pPlayer->pev->v_angle, m_pPlayer, this );
428
}
429
 
430
 
431
void CDisplacer:: Teleport ( void )
432
{
433
  m_iPlace = !m_iPlace;
434
 
435
  CBaseEntity *pSpot = NULL;
436
  m_iAttackMode = FALSE;//reset firemode
437
 
438
  if ( m_iPlace )//Xen and earth target
439
    pSpot = UTIL_FindEntityByClassname( pSpot, "info_xen" );
440
  else
441
    pSpot = UTIL_FindEntityByClassname( pSpot, "info_earth" );
442
 
443
  if (pSpot)
444
  {
445
    UTIL_ScreenFade( m_pPlayer, Vector(0, 200, 0), 0.5, 0.5, 255, FFADE_IN );
446
 
447
    m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] -= 60;
448
    Vector tmp = pSpot->pev->origin;
449
    tmp.z -= m_pPlayer->pev->mins.z;
450
    tmp.z++;
451
    UTIL_SetOrigin( m_pPlayer->pev, tmp );
452
 
453
    m_pPlayer->pev->angles = pSpot->pev->angles;
454
    m_pPlayer->pev->velocity = m_pPlayer->pev->basevelocity = g_vecZero;
455
 
456
    EMIT_SOUND( edict(), CHAN_BODY, "weapons/displacer_self.wav", 1, ATTN_NORM );
457
    SendWeaponAnim( DISPLACER_FIRE );
458
  }
459
  else
460
  {
461
    SendWeaponAnim( DISPLACER_SPINUP );
462
    EMIT_SOUND( edict(), CHAN_BODY, "buttons/button10.wav", 1, ATTN_NORM );
463
    m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.3;
464
  }
465
 
466
  m_flNextSecondaryAttack = gpGlobals->time + 2.0;
467
  m_flTimeWeaponIdle = gpGlobals->time + 1.0;
468
}
469
 
470
void CDisplacer::WeaponIdle( void )
471
{
472
  int iAnim;
473
 
474
  m_pPlayer->GetAutoaimVector( AUTOAIM_5DEGREES );
475
 
476
  if ( m_flTimeWeaponIdle > gpGlobals->time )
477
    return;
478
 
479
  float flRand = RANDOM_FLOAT(0,1);
480
 
481
  if ( flRand <= 0.5 )
482
  {
483
    iAnim = DISPLACER_IDLE1;
484
    m_flTimeWeaponIdle = gpGlobals->time + RANDOM_FLOAT(10,15);
485
  }
486
  else
487
  {
488
    iAnim = DISPLACER_IDLE2;
489
    m_flTimeWeaponIdle = gpGlobals->time + 3;
490
  }
491
 
492
  SendWeaponAnim( iAnim );
493
}



у меня есть еще видео данной проблемы но выложить не получается .

__________________
Тихонов


Отправлено XaeroX 28-07-2019 в 07:42:

Цитата:
демид писал:
CODE PART FOR CLIENT SIDE

Ты вот этот код, что в комментарии, перенеси в ev_hldm.cpp.
И ещё там надо HOOK_EVENT где-то дописать в клиентке, для displacer.sc.

__________________

xaerox on Vivino


Отправлено демид 28-07-2019 в 09:36:

появилась ошибка при компиляции

hl_events.obj : error LNK2001: unresolved external symbol _EV_displacer

__________________
Тихонов


Отправлено XaeroX 28-07-2019 в 09:52:

EV_SpinDisplacer надо

__________________

xaerox on Vivino


Отправлено демид 28-07-2019 в 11:38:

опять эта ошибка в чем прикол не понимаю

hl_events.obj : error LNK2001: unresolved external symbol _EV_SpinDisplacer

Добавлено 28-07-2019 в 14:38:

ладно не парьтесь я уже понял все и сделал как надо вот файлы фикса просто поменяйте файлы если кому надо то что его глючит с переходами я так и не понял почему наверно ему нужно время на перезагрузку.

__________________
Тихонов


Отправлено демид 28-07-2019 в 11:46:

вот еще один фикс бага перехода с карты на карту

__________________
Тихонов


Отправлено Step4enko 28-07-2019 в 11:59:

Вот видишь, ты сам разобрался!


Отправлено Ku2zoff 28-07-2019 в 17:05:

Молодцы, молодёжь. Надо учиться кодить самостоятельно. Касаемо дисплейсера, я делал так, чтобы дисп-шар не просто разрывал в мясо противника, а именно телепортировал его в особое место на карте, где смэрть. Очень прикольно это использовать в мультиплеере.


Отправлено демид 28-07-2019 в 17:18:

в мультиплеере та все прикольно а вот в сингле не очень после перехода с карты на карту оружие просто зависает и не хочет работать и стрелять пс fix2 проверял не работает по глупости выложил. Может кто знает как этот баг исправить.

__________________
Тихонов


Отправлено XaeroX 28-07-2019 в 17:19:

демид
А после сохранения и загрузки - работает нормально?

__________________

xaerox on Vivino


Отправлено демид 28-07-2019 в 17:45:

не проверял сейчас попробую а что

Добавлено 28-07-2019 в 20:29:

после сохранения и загрузки работает нормально

Добавлено 28-07-2019 в 20:45:

скажите чесно вы знаете как этот баг исправить или я просто зря трачу время на displacera и пойду другую пушку кодить просто я уже много исходников displacera испробовал и все равно такая же проблема. кстати у меня есть свой интересный проект по оружию deagle кто нибуть хочет посмотреть на мой исходник дигла там надо только количество патронов поменять с 6 на 10 а так исходник крутой.

__________________
Тихонов


Отправлено Ku2zoff 28-07-2019 в 18:48:

Цитата:
демид писал:
после перехода с карты на карту оружие просто зависает и не хочет работать и стрелять

Цитата:
демид писал:
после сохранения и загрузки работает нормально

Лучше писать новое оружие на основе старого, если у тебя недостаточно опыта. Например, берёшь MP5, оставляешь только вторичную атаку из подствольника, а вместо гранат спавнишь дисп-шары. Именно в коде дисплейсера, наибольшую сложность представляет клиентский эвент с зелёными лучами на створках его "ствола", при выстреле, т.к. там надо их правильно закрепить к аттачментам:
C++ Source Code:
gEngfuncs.pEfxAPI->R_BeamEnts(view->index | 0x2000, view->index | 0x1000, args->iparam2, life, 0.5, 0.5, 0.5, 0.6, 0, 10, 2, 10, 0);

view->index | 0xблабла и есть номер аттачмента в модели, к которому крепятся оба конца темпэнтити луча.


Отправлено демид 28-07-2019 в 19:00:

предлагаешь заменить это ?

gEngfuncs.pEfxAPI->R_BeamEnts(view->index | 0x2000, view->index | 0x1000, args->iparam2, life, 0.5, 0.5, 0.5, 0.6, 0, 10, 2, 10, 0);

Добавлено 28-07-2019 в 21:55:

на то которое у меня есть

Добавлено 28-07-2019 в 22:00:

может надо правильную модель displacera найти

__________________
Тихонов


Отправлено Ku2zoff 28-07-2019 в 19:03:

Да нет же. Ты пишешь, что у тебя дисплейсер перестаёт стрелять после чейнджлевела. Возьми за основу исходную пушку, которая стреляет норм после чейнджлевела, и напиши дисплейсер на её основе, с оглядками на код из тутора, я вот о чём.

Добавлено 29-07-2019 в 02:03:

Цитата:
демид писал:
может надо правильную модель displacera найти

В опфоре так-то самая правильная модель. Уже 20 лет как она там есть. Дело не в модели, дело в коде пушки.


Отправлено демид 28-07-2019 в 19:15:

слушай я тут модель декомпилировал может посмотришь на исходник v_displacer.qc в модели как раз есть эти аттачменты: вот исходник-сам код

/*
==============================================================================

QC script generated by Half-Life MDL Decompiler 1.2
2003, Kratisto. Based on code from Valve's HL SDK.

v_displacer.mdl

Original internal name:
"v_displacer.mdl"

==============================================================================
*/

$modelname "v_displacer.mdl"
$cd ".\"
$cdtexture ".\"
$scale 1.0
$cliptotextures


$bbox 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
$cbox 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
$eyeposition 0.000000 0.000000 0.000000


//reference mesh(es)
$body "body" "displacer_reference"

$body "studio" "v_gordon_hands_ref"

$body "body" "glow_reference"

$texrendermode "GLOW.bmp" "additive"

// 4 attachment(s)
$attachment 0 "blast_emitter" 0.000000 -15.000000 0.000000
$attachment 1 "reflector01" 0.000000 -2.000000 0.000000
$attachment 2 "reflector02" 0.000000 -2.000000 0.000000
$attachment 3 "reflector03" 0.000000 -2.000000 0.000000

// 12 hit box(es)
$hbox 0 "Bip01 L Forearm" -0.530000 -1.520000 -3.110000 11.368421 2.090000 1.560000
$hbox 0 "Bip01 L Hand" 0.000000 -1.150000 -2.140000 3.789475 0.770000 1.850000
$hbox 0 "Bip01 L Finger0" 0.000000 -0.870000 -0.510000 2.440000 0.440000 0.990000
$hbox 0 "Bip01 L Finger21" 0.000000 -0.640000 -0.710000 1.326317 0.460000 0.390000
$hbox 0 "Bip01 L Finger31" 0.000000 -0.650000 -0.460000 1.136843 0.510000 0.550000
$hbox 0 "Bone01" -6.130000 -18.070000 -3.160000 9.950000 4.580000 7.440000
$hbox 0 "Bone10" -2.385619 -8.638719 -2.637438 2.306428 0.000000 0.000000
$hbox 0 "blast_emitter" -5.000000 0.000000 -0.860000 5.020000 1.770000 3.770000
$hbox 0 "spinner" -3.520000 -3.290000 -3.510000 3.520000 0.060000 3.530000
$hbox 0 "Bone07" -0.060000 -1.550000 -0.030000 1.040000 0.000000 1.070000
$hbox 0 "Bone08" 0.000000 -1.410000 -0.010000 1.370000 0.000000 1.150000
$hbox 0 "Bone09" 0.000000 -1.090000 -0.170000 1.550000 0.000000 1.040000

// 9 animation sequence(s)
$sequence "idle1" "idle1" fps 30
$sequence "idle2" "idle2" fps 30
$sequence "spinup" "spinup" fps 30 { event 10010 15 }
$sequence "spin" "spin" fps 30 loop
$sequence "fire" "fire" fps 30 { event 10011 0 }
$sequence "fire_solid" "fire_solid" fps 30 { event 10011 0 }
$sequence "reload" "reload" fps 15 { event 5004 1 "weapons/displacer_reload.wav" }
$sequence "draw" "draw" fps 15
$sequence "holster" "holster" fps 25 { event 10011 0 }

// End of QC script.

Добавлено 28-07-2019 в 22:09:

может редактировать их ?

Добавлено 28-07-2019 в 22:15:

Ku2zoff думаешь прокатит такой способ за основу исходной пушки

__________________
Тихонов


Отправлено XaeroX 28-07-2019 в 19:23:

демид
У тебя константа WEAPON_DISPLACER ни с какой другой не конфликтует?

__________________

xaerox on Vivino


Отправлено демид 28-07-2019 в 19:32:

ты имеешь виду вот так посмотри внимательно код и поймёшь о чем я

#include "extdll.h"
#include "util.h"
#include "cbase.h"
#include "monsters.h"
#include "weapons.h"
#include "nodes.h"
#include "player.h
#include "gamerules.h"
#include "shake.h"
#include "effects.h"
#define SF_DISP_MODE 128 //G-Cont. use for makes alternative displacer - debug features



enum displacer_e
15
{
16
DISPLACER_IDLE1,
17
DISPLACER_IDLE2,
18
DISPLACER_FIRE,
19
DISPLACER_FIRESOLID,
20
DISPLACER_SPINUP,
21
DISPLACER_RELOAD,
22
DISPLACER_DRAW,
23
DISPLACER_HOLSTER,
24
};
25

26
LINK_ENTITY_TO_CLASS( weapon_displacer, CDisplacer );
27

28
#define DISPLACER_SECONDARY_USAGE 2
29
#define DISPLACER_PRIMARY_USAGE 1
30

31
LINK_ENTITY_TO_CLASS( info_xen, CPointEntity );
32
LINK_ENTITY_TO_CLASS( info_earth, CPointEntity );
33

34
// displacer teleball code
35

36
class CDispBall : public CBaseEntity//Special for Ghoul [BB]
37
{
38
public:
39
void Spawn( void );
40
void Precache( void );
41
void Explode( TraceResult *pTrace );
42
void RemoveBall (void);
43
void SelfRemove( void );
44
void EXPORT ExplodeTouch( CBaseEntity *pOther );
45

46
void EXPORT BallThink( void );
47
static CDispBall *CreateDispBall( Vector vecOrigin, Vector vecAngles, CBaseEntity *pOwner, CDisplacer *pLauncher );
48
static CDispBall *SelfCreate( void );
49

50
BOOL m_fIsSelfTeleporter;
51
int m_iDispRing;
52
BOOL LockRing;
53
};
54

55
LINK_ENTITY_TO_CLASS( dispball, CDispBall );
56

57
CDispBall *CDispBall::CreateDispBall( Vector vecOrigin, Vector vecAngles, CBaseEntity *pOwner, CDisplacer *pLauncher )
58
{
59
CDispBall *pDispBall = GetClassPtr( (CDispBall *)NULL );
60

61
UTIL_SetOrigin( pDispBall->pev, vecOrigin );
62
pDispBall->pev->angles = vecAngles;
63
pDispBall->m_fIsSelfTeleporter = FALSE;
64
pDispBall->Spawn();
65
pDispBall->SetTouch( CDispBall::ExplodeTouch );
66
pDispBall->pev->owner = pOwner->edict();
67

68
return pDispBall;
69
}
70

71

72

73
CDispBall *CDispBall::SelfCreate( void )
74
{
75
CDispBall *pDispBall = GetClassPtr( (CDispBall *)NULL );
76
pDispBall->pev->classname = MAKE_STRING("displacer_ball");
77
pDispBall->m_fIsSelfTeleporter = TRUE;
78
pDispBall->Spawn();
79
pDispBall->SelfRemove();
80

81
return pDispBall;
82
}
83

84

85

86

87
void CDispBall :: Spawn( void )
88
{
89

90
Precache( );
91

92

93
if ( !m_fIsSelfTeleporter )
94
{
95
pev->movetype = MOVETYPE_FLY;
96
pev->solid = SOLID_BBOX;
97
pev->velocity = gpGlobals->v_forward * 500;
98
}
99

100
SET_MODEL(ENT(pev), "sprites/unused_spark2.spr");
101
pev->scale = .5;
102

103
UTIL_SetSize(pev, Vector ( 0, 0, 0 ), Vector ( 0, 0, 0 ) );
104
UTIL_SetOrigin( pev, pev->origin );
105
pev->rendermode = kRenderTransAdd;
106
pev->renderamt = 255;
107

108
pev->classname = MAKE_STRING("dispball");
109

110
if ( !m_fIsSelfTeleporter )
111
{
112

113
SetThink( BallThink );
114
SetTouch( ExplodeTouch );
115
pev->nextthink = 0.1;
116

117
}
118

119
pev->angles.x -= 0;
120
UTIL_MakeVectors( pev->angles );
121
pev->angles.x = -(pev->angles.x + 0);
122

123
pev->dmg = 1000;
124
}
125

126
void CDispBall :: Precache( void )
127
{
128
PRECACHE_MODEL("sprites/unused_spark2.spr");
129
PRECACHE_MODEL ("sprites/xflare2.spr");
130

131
PRECACHE_SOUND("weapons/newflashbang_explode.wav");
132
m_iDispRing = PRECACHE_MODEL ("sprites/bluejet1.spr");
133
}
134

135
void CDispBall :: BallThink( void )
136
{
137
CBeam *pBeam;
138
TraceResult tr;
139
Vector vecDest;
140
float flDist = 1.0;
141

142
for (int i = 0; i < 10; i++)
143
{
144
Vector vecDir = Vector( RANDOM_FLOAT( -1.0, 1.0 ), RANDOM_FLOAT( -1.0, 1.0 ),RANDOM_FLOAT( -1.0, 1.0 ) );
145
vecDir = vecDir.Normalize();
146
TraceResult tr1;
147
UTIL_TraceLine( pev->origin, pev->origin + vecDir * 1024, ignore_monsters, ENT(pev), &tr1 );
148
if (flDist > tr1.flFraction)
149
{
150
tr = tr1;
151
flDist = tr.flFraction;
152
}
153
}
154

155
if ( flDist == 1.0 ) return;
156

157
pBeam = CBeam::BeamCreate("sprites/xflare2.spr",200);
158
pBeam->ointEntInit( tr.vecEndPos, entindex() );
159
pBeam->SetStartPos( tr.vecEndPos );
160
pBeam->SetEndEntity( entindex() );
161
pBeam->SetColor( 90, 170, 16 );
162
pBeam->SetNoise( 65 );
163
pBeam->SetBrightness( 255 );
164
pBeam->SetWidth( 30 );
165
pBeam->SetScrollRate( 35 );
166
pBeam->LiveForTime( 1 );
167

168
pev->frame += 1; //animate teleball
169
if(pev->frame > 24)
170
pev->frame = fmod( pev->frame, 24 );
171

172
pev->nextthink = gpGlobals->time + 0.1;
173
}
174

175

176
void CDispBall :: SelfRemove ( void )
177
{
178
pev->velocity = g_vecZero;
179

180
MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, pev->origin );
181
WRITE_BYTE( TE_BEAMCYLINDER );
182
WRITE_COORD( pev->origin.x);
183
WRITE_COORD( pev->origin.y);
184
WRITE_COORD( pev->origin.z);
185
WRITE_COORD( pev->origin.x);
186
WRITE_COORD( pev->origin.y);
187
WRITE_COORD( pev->origin.z + 640);
188
WRITE_SHORT( m_iDispRing );
189
WRITE_BYTE( 0 ); // startframe
190
WRITE_BYTE( 10 ); // framerate
191
WRITE_BYTE( 3 ); // life
192
WRITE_BYTE( 20 ); // width
193
WRITE_BYTE( 0 ); // noise
194
WRITE_BYTE( 255 ); // r, g, b
195
WRITE_BYTE( 255 ); // r, g, b
196
WRITE_BYTE( 255 ); // r, g, b
197
WRITE_BYTE( 255 ); // brightness
198
WRITE_BYTE( 0 ); // speed
199
MESSAGE_END();
200

201
MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, pev->origin );
202
WRITE_BYTE(TE_DLIGHT);
203
WRITE_COORD(pev->origin.x); // X
204
WRITE_COORD(pev->origin.y); // Y
205
WRITE_COORD(pev->origin.z); // Z
206
WRITE_BYTE( 32 ); // radius * 0.1
207
WRITE_BYTE( 255 ); // r
208
WRITE_BYTE( 180 ); // g
209
WRITE_BYTE( 96 ); // b
210
WRITE_BYTE( 60 ); // time * 10
211
WRITE_BYTE( 20 ); // decay * 0.1
212
MESSAGE_END( );
213

214
SetThink (RemoveBall);
215

216
pev->nextthink = gpGlobals->time + 0.3;
217
}
218

219
void CDispBall::ExplodeTouch( CBaseEntity *pOther )
220
{
221
TraceResult tr;
222
Vector vecSpot;// trace starts here!
223

224
pev->enemy = pOther->edict();
225

226
vecSpot = pev->origin - pev->velocity.Normalize() * 32;
227
UTIL_TraceLine( vecSpot, vecSpot + pev->velocity.Normalize() * 64, dont_ignore_monsters, ENT(pev), &tr );
228

229
Explode( &tr );
230
}
231

232
void CDispBall::Explode( TraceResult *pTrace )
233
{
234
if(!LockRing)//for partially fix strange bug in HL engine (for full fix teleball MUST be moved to client side). g-cont
235
{
236
MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, pev->origin );
237
WRITE_BYTE( TE_BEAMCYLINDER );
238
WRITE_COORD( pev->origin.x);
239
WRITE_COORD( pev->origin.y);
240
WRITE_COORD( pev->origin.z);
241
WRITE_COORD( pev->origin.x);
242
WRITE_COORD( pev->origin.y);
243
WRITE_COORD( pev->origin.z + 800);
244
WRITE_SHORT( m_iDispRing );
245
WRITE_BYTE( 0 ); // startframe
246
WRITE_BYTE( 10 ); // framerate
247
WRITE_BYTE( 3 ); // life
248
WRITE_BYTE( 20 ); // width
249
WRITE_BYTE( 0 ); // noise
250
WRITE_BYTE( 255 ); // r, g, b
251
WRITE_BYTE( 255 ); // r, g, b
252
WRITE_BYTE( 255 ); // r, g, b
253
WRITE_BYTE( 255 ); //brightness
254
WRITE_BYTE( 0 ); // speed
255
MESSAGE_END();
256

257
MESSAGE_BEGIN( MSG_BROADCAST, SVC_TEMPENTITY );
258
WRITE_BYTE(TE_DLIGHT);
259
WRITE_COORD(pev->origin.x); // X
260
WRITE_COORD(pev->origin.y); // Y
261
WRITE_COORD(pev->origin.z); // Z
262
WRITE_BYTE( 8 ); // radius * 0.1
263
WRITE_BYTE( 243 ); // r
264
WRITE_BYTE( 231 ); // g
265
WRITE_BYTE( 16 ); // b
266
WRITE_BYTE( 20 ); // time * 10
267
WRITE_BYTE( 0 ); // decay * 0.1
268
MESSAGE_END( );
269

270
MESSAGE_BEGIN( MSG_BROADCAST, SVC_TEMPENTITY );
271
WRITE_BYTE(TE_DLIGHT);
272
WRITE_COORD(pev->origin.x); // X
273
WRITE_COORD(pev->origin.y); // Y
274
WRITE_COORD(pev->origin.z); // Z
275
WRITE_BYTE( 4 ); // radius * 0.1
276
WRITE_BYTE( 240 ); // r
277
WRITE_BYTE( 140 ); // g
278
WRITE_BYTE( 12 ); // b
279
WRITE_BYTE( 20 ); // time * 10
280
WRITE_BYTE( 0 ); // decay * 0.1
281
MESSAGE_END( );
282
}
283

284
LockRing = TRUE;
285
pev->velocity = g_vecZero;
286

287
SetThink (RemoveBall);
288
pev->nextthink = gpGlobals->time + 0.6;
289

290
}
291

292
void CDispBall::RemoveBall( void )
293
{
294
EMIT_SOUND(ENT(pev), CHAN_VOICE, "weapons/newflashbang_explode.wav", 0.9, ATTN_NORM);
295
pev->effects |= EF_NODRAW;
296

297
entvars_t *pevOwner;
298
if ( pev->owner )
299
pevOwner = VARS( pev->owner );
300
else
301
pevOwner = NULL;
302
pev->owner = NULL;
303

304
UTIL_Remove( this );
305
::RadiusDamage( pev->origin, pev, pevOwner, pev->dmg, 200, CLASS_NONE, DMG_ENERGYBEAM );
306
}
307

308
//-----------------------
309
// Displacer
310
//-----------------------
311

312
void CDisplacer::Spawn( )
313
{
314
Precache( );
315
m_iId = WEAPON_DISPLACER;
316
SET_MODEL(ENT(pev), "models/w_egon.mdl");
317

318
m_iDefaultAmmo = 40;
319
FallInit();// get ready to fall down.
320
}
321

322
int CDisplacer::AddToPlayer( CBasePlayer *pPlayer )
323
{
324
if ( CBasePlayerWeapon::AddToPlayer( pPlayer ) )
325
{
326
MESSAGE_BEGIN( MSG_ONE, gmsgWeapPickup, NULL, pPlayer->pev );
327
WRITE_BYTE( m_iId );
328
MESSAGE_END();
329
return TRUE;
330
}
331
return FALSE;
332
}
333

334
BOOL CDisplacer::Deploy( void )
335
{
336
return DefaultDeploy( "models/v_BFG.mdl", "models/p_BFG.mdl", DISPLACER_DRAW, "gauss" );
337
}
338

339
void CDisplacer::Holster( int skiplocal )
340
{
341
m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.1;
342
SendWeaponAnim( DISPLACER_HOLSTER );
343
}
344

345
int CDisplacer::GetItemInfo(ItemInfo *p)
346
{
347
p->pszName = STRING(pev->classname);
348
p->pszAmmo1 = "9mm";
349
p->iMaxAmmo1 = _9MM_MAX_CARRY;
350
p->pszAmmo2 = NULL;
351
p->iMaxAmmo2 = -1;
352
p->iMaxClip = WEAPON_NOCLIP;
353
p->iSlot = 3;
354
p->iPosition = 1;
355
p->iFlags = 0;
356
p->iId = m_iId = WEAPON_DISPLACER;
357
p->iWeight = DISPLACER_WEIGHT;
358

359
return 1;
360
}
361

362
void CDisplacer::Precache( void )
363
{
364
PRECACHE_MODEL("models/w_egon.mdl");
365
PRECACHE_MODEL("models/v_BFG.mdl");
366
PRECACHE_MODEL("models/p_BFG.mdl");
367

368
PRECACHE_SOUND("weapons/gluongun_fire.wav");
369
PRECACHE_SOUND ("buttons/button10.wav");
370
PRECACHE_SOUND ("weapons/tu_fire_missile.wav");
371

372
UTIL_PrecacheOther( "dispball" );
373

374
m_iBeam = PRECACHE_MODEL("sprites/xflare2.spr");
375
m_usDisplacer = PRECACHE_EVENT( 1, "events/crossbow2.sc" );
376
}
377

378
void CDisplacer::SpinUp ( void )
379
{
380
int flags;
381
flags = 0;
382

383
if (!m_iAttackMode) SetThink (CDisplacer::Fire);
384
else SetThink (CDisplacer::Teleport);
385

386
//spinup event
387
PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usDisplacer, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, 0.0, 0.0, 0, m_iBeam, 0, m_iAttackMode);
388

389
pev->nextthink = gpGlobals->time + 0.1;
390
m_flTimeWeaponIdle = gpGlobals->time + 1.15;
391
}
392

393

394
void CDisplacer::PrimaryAttack( void )
395
{
396
if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] < 1)//Check for ammo
397
{
398
EMIT_SOUND( edict(), CHAN_BODY, "buttons/button10.wav", 1, ATTN_NORM );
399
m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.1;
400
return;
401
}
402

403
m_iAttackMode = FALSE; //We set attack mode in first mode
404

405
SetThink (CDisplacer::SpinUp);
406

407
m_flNextPrimaryAttack = gpGlobals->time + 0.1;
408
m_flTimeWeaponIdle = gpGlobals->time + 1.5;
409
pev->nextthink = gpGlobals->time + 0.1;
410
}
411

412
void CDisplacer::SecondaryAttack ( void )
413
{
414
if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] < 2)
415
{
416
EMIT_SOUND( edict(), CHAN_BODY, "buttons/button10.wav", 1, ATTN_NORM );
417
m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.1;
418
return;
419
}
420

421
if (m_iAttackMode) return;
422
m_iAttackMode = TRUE; //We set attack mode in second mode
423

424
SetThink (CDisplacer::SpinUp);
425

426
m_flNextSecondaryAttack = gpGlobals->time + 4.0;
427
m_flTimeWeaponIdle = gpGlobals->time + 1.5;
428
pev->nextthink = gpGlobals->time + 0.1;
429
}
430

431
void CDisplacer::Fire (void)
432
{
433
SendWeaponAnim( DISPLACER_FIRE );
434
m_pPlayer->SetAnimation( PLAYER_ATTACK1 );
435

436
Vector vecSrc = m_pPlayer->GetGunPosition( ) + gpGlobals->v_forward * 16 + gpGlobals->v_right * 2 + gpGlobals->v_up * -5;
437
m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] -= DISPLACER_PRIMARY_USAGE;
438

439
EMIT_SOUND(ENT(m_pPlayer->pev), CHAN_WEAPON, "weapons/gluongun_fire.wav", 0.9, ATTN_NORM );
440
CDispBall *pDispBall = CDispBall::CreateDispBall( vecSrc, m_pPlayer->pev->v_angle, m_pPlayer, this );
441
}
442

443

444
void CDisplacer:: Teleport ( void )
445
{
446
m_iPlace = !m_iPlace;
447

448
CBaseEntity *pSpot = NULL;
449
m_iAttackMode = FALSE;//reset firemode
450
Vector vecSrc;
451
SendWeaponAnim ( DISPLACER_FIRE );
452
SetThink ( NULL );
453

454

455
if ( g_pGameRules->IsMultiplayer() )
456
{
457
// Randomize the destination in multiplayer
458
for ( int i = RANDOM_LONG(1,5); i > 0; i-- )
459
pSpot = UTIL_FindEntityByClassname(pSpot, "info_player_deathmatch" );
460
}
461
else
462
{
463
if (!m_iPlace)
464
pSpot = UTIL_FindEntityByClassname(pSpot, "info_displacer_earth_target" );
465
else if (m_iPlace)
466
pSpot = UTIL_FindEntityByClassname(pSpot, "info_displacer_xen_target" );
467
}
468

469
if (pSpot)
470
{
471

472
Vector vecSrc = m_pPlayer->pev->origin;
473
CDispBall *pBall = CDispBall::SelfCreate();
474
pBall->pev->owner = m_pPlayer->edict();
475
pBall->pev->origin = vecSrc;
476

477
UTIL_ScreenFade( m_pPlayer, Vector(0, 160, 0), 0.5, 0.5, 255, FFADE_IN );
478

479
m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] -= DISPLACER_SECONDARY_USAGE;
480
Vector tmp = pSpot->pev->origin;
481
tmp.z -= m_pPlayer->pev->mins.z;
482
tmp.z++;
остальное надоел стирать
UTIL_SetOrigin( m_pPlayer->pev, tmp );



m_pPlayer->pev->angles = pSpot->pev->angles;

m_pPlayer->pev->velocity = m_pPlayer->pev->basevelocity = g_vecZero;

vecSrc = pSpot->pev->origin;



MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, pev->origin );

WRITE_BYTE(TE_DLIGHT);

WRITE_COORD( vecSrc.x ); // X

WRITE_COORD( vecSrc.y ); // Y

WRITE_COORD( vecSrc.z ); // Z

WRITE_BYTE( 24 ); // radius * 0.1

WRITE_BYTE( 255 ); // r

WRITE_BYTE( 180 ); // g

WRITE_BYTE( 96 ); // b

WRITE_BYTE( 31.66 ); // time * 10

WRITE_BYTE( 1 ); // decay * 0.1

MESSAGE_END( );



CSprite *pSpr = CSprite::SpriteCreate( "sprites/xflare2.spr", vecSrc, TRUE );

pSpr->AnimateAndDie( 6 );

pSpr->SetTransparency(kRenderGlow, 128, 250, 214, 255, kRenderFxNoDissipation);


EMIT_SOUND_DYN(ENT(m_pPlayer->pev), CHAN_ITEM, "weapons/tu_fire_missile.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);



}

else

{

SendWeaponAnim( DISPLACER_SPINUP );

EMIT_SOUND( edict(), CHAN_BODY, "buttons/button10.wav", 1, ATTN_NORM );

m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.3;

}



m_flNextSecondaryAttack = gpGlobals->time + 2.0;

m_flTimeWeaponIdle = gpGlobals->time + 1.0;

}



void CDisplacer::WeaponIdle( void )

{

int iAnim;



m_pPlayer->GetAutoaimVector( AUTOAIM_5DEGREES );



if ( m_flTimeWeaponIdle > gpGlobals->time )

return;



float flRand = RANDOM_FLOAT(0,1);



if ( flRand <= 0.5 )

{

iAnim = DISPLACER_IDLE1;

m_flTimeWeaponIdle = gpGlobals->time + RANDOM_FLOAT(10,15);

}

else

{

iAnim = DISPLACER_IDLE2;

m_flTimeWeaponIdle = gpGlobals->time + 3;

}



SendWeaponAnim( iAnim );

}

Добавлено 28-07-2019 в 22:28:

XaeroX нет

Добавлено 28-07-2019 в 22:32:

ААААААААААААА КОШМАР

__________________
Тихонов


Отправлено XaeroX 28-07-2019 в 19:37:

демид
Выкладывай код нормально, пожалуйста. Невозможно же читать.

__________________

xaerox on Vivino


Отправлено Ghoul [BB] 29-07-2019 в 13:16:

помогите написать за меня дисплейсер.это так должно называться.

попробуй исходники HLWE. Если не сможешь разобраться и там - приступай к кодингу другой, "более крутой пушки", desert eagle c 6ю патронами вместо 10.

__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.

Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo


Отправлено демид 29-07-2019 в 18:00:

слушайте может по другому вопрос решим у меня есть 500 руб мож кто возьмется за меня пушку без этого бага накодить просто очень хочется этот displacer работаспособный баг заключается с переходами между картами после которого оружие не хочет стрелять ну что на случай если не верите выкладываю скриншот денег с qiwi кошелька нужны только реквизиты qiwi кошелька и я переведу деньги если кто нибуть возьмётся за это дело.

__________________
Тихонов


Отправлено Ku2zoff 29-07-2019 в 19:33:

демид напиши Дяде Мише, у него вечные проблемы с донатами на Ксаш. Думаю, за 500р он тебя мог бы проконсультировать. Или даже написать такую простую вещь, как дисплейсер.


Отправлено демид 29-07-2019 в 19:35:

круто ништяк спасибо

__________________
Тихонов


Отправлено Ku2zoff 29-07-2019 в 19:38:

Да выложи весь код в удобочитаемом виде, что ты пытаешься писать. У тебя где-то одна маленькая ошибка закралась, из-за которой пушка нормально не робит. Ксер тебя очень правильно спросил, не конфликтует ли дефайн WEAPON_DISPLACER с другим дефайном оружия по номеру. Слоты оружия правильно у тебя выставлены?

C++ Source Code:
p->iSlot = x;
p->iPosition = x;

Вот эти цифры у тебя случайно не совпадают с цифрами у другой пушки?


Отправлено демид 29-07-2019 в 19:52:

p->iSlot = 3;
p->iPosition = 4;

такая позиция у моего оружия.

Добавлено 29-07-2019 в 22:52:

слушай я могу даже все выложить если надо

__________________
Тихонов


Отправлено Дядя Миша 29-07-2019 в 21:19:

не ребят, я такими вещами больше не занимаюсь, извините.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено демид 30-07-2019 в 06:45:

почему коррупции боишся

__________________
Тихонов


Отправлено Step4enko 30-07-2019 в 06:56:

Ты скорее всего предложил очень маленькую сумму. Для Дяди Миши это просто гроши. Там минимум должно быть 2000руб за 1 час.


Отправлено Ghoul [BB] 30-07-2019 в 09:25:

демид
Если ты каждый раз будешь платить за новую пушку 500 рублей, это выйдет приличная сумма. потом тебе захочется новых гамерулез, всяких партиклей и прочей пыжни. стоимость всех работ возрастёт неимоверно. у тебя планируется коммерческий проект с прродажей копий в Стиме?

__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.

Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo


Отправлено Дядя Миша 30-07-2019 в 09:35:

Цитата:
Step4enko писал:
Ты скорее всего предложил очень маленькую сумму. Для Дяди Миши это просто гроши

Он в состоянии сам исправить эту проблему с переходом на другой уровень.
Там m_flNextAttack или что-то такое сохраняется как FIELD_TIME, а надо как FIELD_FLOAT. Вот и вся проблема.

Добавлено 30-07-2019 в 12:35:

Цитата:
Ghoul [BB] писал:
и прочей пыжни

пыжня через е пишется

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено демид 30-07-2019 в 09:55:

вот скажи где FIELD_TIME если тут только

TYPEDESCRIPTION CDisplacer::m_SaveData[] =
{
DEFINE_FIELD( CDisplacer, m_iPlace, FIELD_INTEGER ),//Remember last teleportation point. g-cont
};

DEFINE_FIELD и FIELD_INTEGER

__________________
Тихонов


Отправлено Дядя Миша 30-07-2019 в 10:30:

У тебя пушка с предиктингом? Думаю нет, потому что когда я этот дисплейсер писал, я о таких вещах незадумывался. А остальные - с предиктингом. Вот и получается разброд и шатания. То есть тебе либо его совсем отключать для всех пушек. Либо дописывать для этой тоже.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 30-07-2019 в 10:31:

Цитата:
Дядя Миша писал:
Там m_flNextAttack или что-то такое сохраняется как FIELD_TIME, а надо как FIELD_FLOAT. Вот и вся проблема.

Там пушка сделана как серверная, а в коде всё равно используется UTIL_WeaponTimeBase() для игрока. А менять на gpGlobals->time нельзя, т.к. сломаются другие пушки.
Надо её просто сделать нормальной предиктабельной, и всё заработает.

Добавлено 30-07-2019 в 17:31:

Цитата:
Дядя Миша писал:
Либо дописывать для этой тоже.

Хех, опередил.

__________________

xaerox on Vivino


Отправлено демид 30-07-2019 в 10:31:

неее тут вопрос не деньгами решается тут какаета херня происходит я чувствую это что то не то но понять это не могу может с компилятором проблемы ???

__________________
Тихонов


Отправлено XaeroX 30-07-2019 в 10:37:

демид
Да всё просто: этот код дисплейсера несовместим с HLSDK 2.3. Ты, по всей видимости, взял его из мода, где отключен предиктинг пушек. При этом для остальных твоих пушек он включен. Подружить их друг с другом парой строчек в коде не получится.

__________________

xaerox on Vivino


Отправлено Step4enko 30-07-2019 в 10:39:

FIELD_INTEGER замени на FIELD_FLOAT.


Отправлено демид 30-07-2019 в 10:44:

Step4enko уже делал так не получается

Добавлено 30-07-2019 в 13:44:

хорошо а что будет если отключить предиктинг пушек на остальных пушках ?

__________________
Тихонов


Отправлено Дядя Миша 30-07-2019 в 10:47:

демид вот тогда и эта тоже заработает как надо. У тебя мод мультиплеерный или сингл?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Step4enko 30-07-2019 в 10:48:

Ты бы лучше пушки научился сам писать. У меня вот дисплейсер в моде тоже есть. И делал я его на основе mp5: Брал готовый код мп5 и шлейфовал его до идеала. Получилось 1 в 1 как в op4. Даже новые эффекты для портала добавил. Дисплейсер сделать не трудно.

А вот верёвки трудно


Отправлено демид 30-07-2019 в 11:00:

Дядя Миша сингл

Добавлено 30-07-2019 в 14:00:

ну чтож хотя бы ясна проблема этого кошмара

__________________
Тихонов


Отправлено Дядя Миша 30-07-2019 в 11:05:

Цитата:
демид писал:
ну чтож хотя бы ясна проблема этого кошмара

Пушки, которые отказывались стрелять после смены уровня были еще в оригинальной халфе, после очередного обновления.

Добавлено 30-07-2019 в 14:05:

Цитата:
Step4enko писал:
А вот верёвки трудно

вон же в XashXT новом веровки из опфора. Переписанные и оптимизированные.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено демид 30-07-2019 в 11:13:

ещё вопрос а предиктинг редактируется в weapons.h

__________________
Тихонов


Отправлено Step4enko 30-07-2019 в 11:16:

Цитата:
Дядя Миша писал:
вон же в XashXT новом веровки из опфора. Переписанные и оптимизированные.

Спасибо, я посмотрю. Сами верёвки я тоже сделал, а вот заставить лазить игрока по ним никак не получается.


Отправлено демид 30-07-2019 в 15:35:

слушайте а и вправду все просто

Добавлено 30-07-2019 в 14:39:

все предиктинги находятся в hl_weapons.cpp там их можно отключить или подключить

сама строчка предиктингов

// Allocate slot(s) for each weapon that we are going to be predicting там они как раз все и находятся

Добавлено 30-07-2019 в 18:35:

эти две функции можно удалить из дисплейкера

int Save( CSave &save );
int Restore( CRestore &restore );

__________________
Тихонов


Отправлено XaeroX 30-07-2019 в 15:55:

демид
А ты понимаешь, зачем они вообще нужны?

__________________

xaerox on Vivino


Отправлено демид 30-07-2019 в 16:28:

КАКАЯ РАЗНИЦА ВСЕ РАВНО Я ЗДЕЛАЛ ВСЕ КАК ВЫ ГОВОРИЛИ ВСЕ РАВНО ЭТОТ БАГ. МНЕ КАЖЕТСЯ ЭТОТ КОД ОЧЕНЬ СТАР И ВООБЩЕ НЕ ПОДХОДИТ К МОЕМУ SDK. старый код не рабочий код но это только мое мнение.

Добавлено 30-07-2019 в 19:05:

хрен его знает почему именно все так

Добавлено 30-07-2019 в 19:13:

все таки пацан прав проще свой displacer сделать чем морочится с этим говно кодом только лишний геморой себе устроил и точка все способы перепробывал не один не работает только свой displacer делать и точка.

Добавлено 30-07-2019 в 19:13:

Я ВСЕ СКАЗАЛ

Добавлено 30-07-2019 в 19:16:

3 день этим кодом занимаюсь 0 результатов

Добавлено 30-07-2019 в 19:28:

ВСЕ Я ВСЕ СКАЗАЛ

__________________
Тихонов


Отправлено Step4enko 30-07-2019 в 17:19:

Цитата:
демид писал:
int Save( CSave &save );
int Restore( CRestore &restore );

Ну вот как можно этого не знать?

Функция Save/Restore отвечает за сохранение значения переменной после F6/F7.

Вот как она описывается.
DEFINE_FIELD( CBarney, m_iWeapon, FIELD_INTEGER )

Где CBarney - название класса. m_iWeapon - переменная которую мы сохраняем. FIELD_INTEGER это параметр сохранения (в данном случае INTEGER поскольку моя переменная является целочисленной). Если переменная дробная - FIELD_FLOAT, если булевая, то FIELD_BOOLEAN. Если переменная использует gpGlobals->time, то FIELD_TIME. У Барни кстати есть такая - m_checkAttackTime. Этих филдов ещё там куча. Я лишь самые лёгкие описал.

А вот в XashXT вообще всё по-другому. Там какие-то BEGIN_DATADESC( ) и DEFINE_FUNCTION.

И чем только стандартный сейврестор не угодил Дяде Мише?


Отправлено демид 30-07-2019 в 18:29:

Step4enko half-life-ultimate-point а твой мод крут сам делал

__________________
Тихонов


Временная зона GMT. Текущее время 10:21.
Показать все 47 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024