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

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=3445)


Отправлено antibiotik 29-05-2012 в 11:17:

Half-Life Нужна помощь по старому туториалу "Добавление горящих и взрывающихся моделей"

Ссылка на старую тему: ссылка .
Я попытался добавить это в спирит 1.8 от Скрамы и в итоге
prop_explosion.cpp(128): error C2664: 'UTIL_SetOrigin' : cannot convert parameter 1 from 'entvars_t *' to 'CBaseEntity *'
Может кто-нибудь поможет мне это решить?
На всякий случай файл прилагаю.


Отправлено Дядя Миша 29-05-2012 в 12:11:

ну замени там pev на this

__________________
My Projects: download page

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

Цитата:

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


Отправлено antibiotik 29-05-2012 в 12:36:

Дядя Миша , спасибо, это помогло.


Отправлено antibiotik 30-05-2012 в 08:37:

А не поможете реализовать огонь с помощью партиклей?
Вот на всякий случай изначальный код:

C++ Source Code:
1
#include "extdll.h"
2
#include "util.h"
3
#include "cbase.h"
4
#include "monsters.h"
5
#include "weapons.h"
6
#include "animation.h"
7
#include "effects.h"
8
#include "nodes.h"
9
#include "explode.h"
10
#include "player.h"
11
 
12
#define FIRE_SPRITE_NAME		"particles/fire.aur"
13
#define BURNIND_SOUND_NAME		"ambience/burning1.wav"
14
 
15
// must match definition in modelgen.h
16
enum synctype_t
17
{
18
  ST_SYNC=0,
19
  ST_RAND
20
};
21
 
22
// TODO: shorten these?
23
typedef struct {
24
  int			ident;
25
  int			version;
26
  int			type;
27
  int			texFormat;
28
  float		boundingradius;
29
  int			width;
30
  int			height;
31
  int			numframes;
32
  float		beamlength;
33
  synctype_t	synctype;
34
} dsprite_t;
35
 
36
class CPropExplosion : public CGrenade
37
{
38
  void Spawn( void );
39
  void Precache( void );
40
  int	 BloodColor( void ) { return DONT_BLEED; };
41
 
42
  void EXPORT PropThink( void );
43
 
44
  void RunFire( void );
45
  void StartExplode( void );
46
 
47
  float CalculationSpriteScale( );
48
 
49
  void KeyValue( KeyValueData *pkvd );
50
 
51
  virtual int		Save( CSave &save );
52
  virtual int		Restore( CRestore &restore );
53
 
54
  static	TYPEDESCRIPTION m_SaveData[];
55
 
56
  string_t m_iszParentName;
57
 
58
  int		m_startHealth;
59
  float	m_firetime;
60
  float	m_explosiontime;
61
  float	m_dmgradius;
62
  bool	m_isfire;
63
};
64
 
65
LINK_ENTITY_TO_CLASS( prop_explosion, CPropExplosion );
66
 
67
TYPEDESCRIPTION	CPropExplosion::m_SaveData[] =
68
{
69
  DEFINE_FIELD( CPropExplosion, m_startHealth, FIELD_INTEGER ),
70
  DEFINE_FIELD( CPropExplosion, m_firetime, FIELD_FLOAT ),
71
  DEFINE_FIELD( CPropExplosion, m_explosiontime, FIELD_FLOAT ),
72
  DEFINE_FIELD( CPropExplosion, m_dmgradius, FIELD_FLOAT ),
73
  DEFINE_FIELD( CPropExplosion, m_isfire, FIELD_INTEGER ),
74
};
75
 
76
IMPLEMENT_SAVERESTORE( CPropExplosion, CGrenade );
77
 
78
void CPropExplosion :: KeyValue( KeyValueData *pkvd )
79
{
80
  if (FStrEq(pkvd->szKeyName, "health"))//skin is used for content type
81
  {
82
    m_startHealth = atoi(pkvd->szValue);
83
    pkvd->fHandled = TRUE;
84
  }
85
  else if (FStrEq(pkvd->szKeyName, "firetime"))
86
  {
87
    m_firetime = atof(pkvd->szValue);
88
    pkvd->fHandled = TRUE;
89
  }
90
  else if (FStrEq(pkvd->szKeyName, "damageradius"))
91
  {
92
    m_dmgradius = atof(pkvd->szValue);
93
    pkvd->fHandled = TRUE;
94
  }
95
  else
96
    CGrenade::KeyValue( pkvd );
97
}
98
 
99
void CPropExplosion :: Spawn( void )
100
{
101
  Precache( );
102
  // motor
103
  pev->movetype = MOVETYPE_FLY;
104
  pev->solid = SOLID_BBOX;
105
 
106
  SET_MODEL( ENT(pev), STRING(pev->model) );
107
 
108
  Vector mins;
109
  Vector maxs;
110
 
111
  ExtractBbox( pev->sequence, mins, maxs );
112
 
113
  UTIL_SetSize(pev, mins, maxs ); //Whi it is not using for other entities ?
114
  UTIL_SetOrigin(this, pev->origin );
115
 
116
  DROP_TO_FLOOR( edict() );
117
 
118
  pev->nextthink = gpGlobals->time + 0.1;
119
 
120
  //	SetTouch( PropTouch ); //maybe later
121
  SetThink( PropThink );
122
 
123
  //If not defined, add standart value
124
  if(!m_startHealth )
125
  {
126
    m_startHealth = 50;
127
  }
128
 
129
  if(!m_firetime)
130
  {
131
    m_firetime = 4;
132
  }
133
 
134
  if(!m_dmgradius )
135
  {
136
    m_dmgradius = 100;
137
  }
138
 
139
  m_isfire = false;
140
 
141
  pev->flags |= FL_MONSTER;
142
  pev->takedamage		= DAMAGE_YES;
143
  pev->health			= m_startHealth;
144
  pev->dmg			= 50;
145
}
146
 
147
void CPropExplosion::Precache( void )
148
{
149
  PRECACHE_MODEL((char *)STRING(pev->model));
150
  PRECACHE_MODEL( FIRE_SPRITE_NAME );
151
  PRECACHE_SOUND( BURNIND_SOUND_NAME );
152
}
153
 
154
void CPropExplosion::PropThink( void )
155
{
156
  if( pev->health	< m_startHealth )
157
  {
158
    if(!m_explosiontime)
159
    {
160
      m_explosiontime = gpGlobals->time + m_firetime;
161
    }
162
    else
163
    {
164
      if( m_explosiontime < gpGlobals->time )
165
      {
166
        StartExplode( );
167
      }
168
      else
169
      {
170
        RunFire( );
171
      }
172
    }
173
  }
174
 
175
  pev->nextthink = gpGlobals->time + 0.1;
176
}
177
 
178
void CPropExplosion::RunFire( void )
179
{
180
  if(!m_isfire )
181
  {
182
    CSprite *pSprite = CSprite::SpriteCreate( FIRE_SPRITE_NAME, pev->origin, TRUE );
183
 
184
    pSprite->AnimateAndDie( m_firetime );
185
    pSprite->SetTransparency( kRenderTransAdd, 255, 255, 255, 255, kRenderFxNoDissipation );
186
    pSprite->SetScale( CalculationSpriteScale() );
187
 
188
    EMIT_SOUND(ENT(pev), CHAN_WEAPON, BURNIND_SOUND_NAME, 1, ATTN_NORM);
189
 
190
    m_isfire = true;
191
  }
192
}
193
 
194
void CPropExplosion::StartExplode( void )
195
{
196
  STOP_SOUND( ENT(pev), CHAN_WEAPON, BURNIND_SOUND_NAME );
197
 
198
  UTIL_ScreenShake( pev->origin, 16, 200, 5, m_dmgradius );
199
 
200
  ExplosionCreate( pev->origin, pev->angles, edict(), (int)m_dmgradius, true );
201
 
202
  UTIL_Remove( this );
203
}
204
 
205
float CPropExplosion::CalculationSpriteScale( )
206
{
207
  dsprite_t *szSprite = NULL;
208
 
209
  float SpriteX = 0;
210
  float SpriteY = 0;
211
 
212
  float ModelX = 0;
213
  float ModelY = 0;
214
 
215
  szSprite = (dsprite_t *)g_engfuncs.pfnLoadFileForMe( FIRE_SPRITE_NAME, NULL );
216
 
217
  if (!szSprite)
218
  {
219
    ALERT( at_aiconsole,"Couldn't open fire sprites !\n");
220
 
221
    return 1.0;
222
  }
223
 
224
  SpriteX = szSprite->width;
225
  SpriteY = szSprite->height;
226
 
227
  g_engfuncs.pfnFreeFile( szSprite );
228
 
229
  Vector mins;
230
  Vector maxs;
231
 
232
  ExtractBbox( pev->sequence, mins, maxs );
233
 
234
  ModelX = maxs.x - mins.x;
235
  ModelY = maxs.z - mins.z;
236
 
237
  float FullSprSizeX = ModelX * 3; //pixel to unit ~ 2 ???
238
  float FullSprSizeY = ModelY * 3;
239
 
240
  float ScaleX = FullSprSizeX / SpriteX;
241
  float ScaleY = FullSprSizeY / SpriteY;
242
 
243
  float Averagescale = ( ScaleX + ScaleY ) / 2;
244
 
245
  //Debug
246
  /*
247
  	ALERT( at_console, "Sprite: x = %f, y = %f\n", SpriteX, SpriteY  );
248
  	ALERT( at_console, "Model:  x = %f, y = %f\n", ModelX,  ModelY   );
249
 
250
  	ALERT( at_console, "Full Sprite size:  x = %f, y = %f\n", SpriteX * Averagescale,  SpriteY * Averagescale );
251
  	ALERT( at_console, "Scale:  x = %f, y = %f\n", ScaleX,  ScaleY  );
252
  	ALERT( at_console, "Average Scale: %f", Averagescale );
253
  	*/
254
 
255
  return Averagescale;
256
}


Отправлено Дядя Миша 30-05-2012 в 12:15:

Да эт не код, это гавнокакоета.
Бери файлик aur с описанием огня и цепляй его к своей бочке как в коде env_particle.

__________________
My Projects: download page

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

Цитата:

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


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

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