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:
Нужна помощь по старому туториалу "Добавление горящих и взрывающихся моделей"
Ссылка на старую тему: ссылка .
Я попытался добавить это в спирит 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:
12 | #define FIRE_SPRITE_NAME "particles/fire.aur" |
13 | #define BURNIND_SOUND_NAME "ambience/burning1.wav" |
15 | // must match definition in modelgen.h |
22 | // TODO: shorten these? |
36 | class CPropExplosion : public CGrenade |
39 | void Precache( void ); |
40 | int BloodColor( void ) { return DONT_BLEED; }; |
42 | void EXPORT PropThink( void ); |
45 | void StartExplode( void ); |
47 | float CalculationSpriteScale( ); |
49 | void KeyValue( KeyValueData *pkvd ); |
51 | virtual int Save( CSave &save ); |
52 | virtual int Restore( CRestore &restore ); |
54 | static TYPEDESCRIPTION m_SaveData[]; |
56 | string_t m_iszParentName; |
60 | float m_explosiontime; |
65 | LINK_ENTITY_TO_CLASS( prop_explosion, CPropExplosion ); |
67 | TYPEDESCRIPTION CPropExplosion::m_SaveData[] = |
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 ), |
76 | IMPLEMENT_SAVERESTORE( CPropExplosion, CGrenade ); |
78 | void CPropExplosion :: KeyValue( KeyValueData *pkvd ) |
80 | if (FStrEq(pkvd->szKeyName, "health"))//skin is used for content type |
82 | m_startHealth = atoi(pkvd->szValue); |
83 | pkvd->fHandled = TRUE; |
85 | else if (FStrEq(pkvd->szKeyName, "firetime")) |
87 | m_firetime = atof(pkvd->szValue); |
88 | pkvd->fHandled = TRUE; |
90 | else if (FStrEq(pkvd->szKeyName, "damageradius")) |
92 | m_dmgradius = atof(pkvd->szValue); |
93 | pkvd->fHandled = TRUE; |
96 | CGrenade::KeyValue( pkvd ); |
99 | void CPropExplosion :: Spawn( void ) |
103 | pev->movetype = MOVETYPE_FLY; |
104 | pev->solid = SOLID_BBOX; |
106 | SET_MODEL( ENT(pev), STRING(pev->model) ); |
111 | ExtractBbox( pev->sequence, mins, maxs ); |
113 | UTIL_SetSize(pev, mins, maxs ); //Whi it is not using for other entities ? |
114 | UTIL_SetOrigin(this, pev->origin ); |
116 | DROP_TO_FLOOR( edict() ); |
118 | pev->nextthink = gpGlobals->time + 0.1; |
120 | // SetTouch( PropTouch ); //maybe later |
121 | SetThink( PropThink ); |
123 | //If not defined, add standart value |
141 | pev->flags |= FL_MONSTER; |
142 | pev->takedamage = DAMAGE_YES; |
143 | pev->health = m_startHealth; |
147 | void CPropExplosion::Precache( void ) |
149 | PRECACHE_MODEL((char *)STRING(pev->model)); |
150 | PRECACHE_MODEL( FIRE_SPRITE_NAME ); |
151 | PRECACHE_SOUND( BURNIND_SOUND_NAME ); |
154 | void CPropExplosion::PropThink( void ) |
156 | if( pev->health < m_startHealth ) |
160 | m_explosiontime = gpGlobals->time + m_firetime; |
164 | if( m_explosiontime < gpGlobals->time ) |
175 | pev->nextthink = gpGlobals->time + 0.1; |
178 | void CPropExplosion::RunFire( void ) |
182 | CSprite *pSprite = CSprite::SpriteCreate( FIRE_SPRITE_NAME, pev->origin, TRUE ); |
184 | pSprite->AnimateAndDie( m_firetime ); |
185 | pSprite->SetTransparency( kRenderTransAdd, 255, 255, 255, 255, kRenderFxNoDissipation ); |
186 | pSprite->SetScale( CalculationSpriteScale() ); |
188 | EMIT_SOUND(ENT(pev), CHAN_WEAPON, BURNIND_SOUND_NAME, 1, ATTN_NORM); |
194 | void CPropExplosion::StartExplode( void ) |
196 | STOP_SOUND( ENT(pev), CHAN_WEAPON, BURNIND_SOUND_NAME ); |
198 | UTIL_ScreenShake( pev->origin, 16, 200, 5, m_dmgradius ); |
200 | ExplosionCreate( pev->origin, pev->angles, edict(), (int)m_dmgradius, true ); |
205 | float CPropExplosion::CalculationSpriteScale( ) |
207 | dsprite_t *szSprite = NULL; |
215 | szSprite = (dsprite_t *)g_engfuncs.pfnLoadFileForMe( FIRE_SPRITE_NAME, NULL ); |
219 | ALERT( at_aiconsole,"Couldn't open fire sprites !\n"); |
224 | SpriteX = szSprite->width; |
225 | SpriteY = szSprite->height; |
227 | g_engfuncs.pfnFreeFile( szSprite ); |
232 | ExtractBbox( pev->sequence, mins, maxs ); |
234 | ModelX = maxs.x - mins.x; |
235 | ModelY = maxs.z - mins.z; |
237 | float FullSprSizeX = ModelX * 3; //pixel to unit ~ 2 ??? |
238 | float FullSprSizeY = ModelY * 3; |
240 | float ScaleX = FullSprSizeX / SpriteX; |
241 | float ScaleY = FullSprSizeY / SpriteY; |
243 | float Averagescale = ( ScaleX + ScaleY ) / 2; |
247 | ALERT( at_console, "Sprite: x = %f, y = %f\n", SpriteX, SpriteY ); |
248 | ALERT( at_console, "Model: x = %f, y = %f\n", ModelX, ModelY ); |
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 ); |
Отправлено Дядя Миша 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'