демид
Частый гость
Группа : Неопытный
Дата регистрации : Mar 2019
Проживает : Волгоград
Сообщений : 45
Возраст: 22
Рейтинг
[кратко]
Пользователи:
6.0 (1 )
Нарушения:
0.0 (? )
Сообщения:
-0.1 (Метки )
Регистрация:
5.3
ты имеешь виду вот так посмотри внимательно код и поймёшь о чем я
#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:
ААААААААААААА КОШМАР
__________________
Тихонов
Сообщить модератору | | IP: Записан
Сообщение: 181999