Did anyone post this on the wiki? The information will be much more 
available there compared to this list's thousands of emails.
> Hi Jonathan,
>
> I'm not really friendly with particle behaviours meaning that I can't really
> test that your fix is working but looking at your explaination I feel
> confident. I would have like having an answer from Valve in order to be sure
> this origin is not set in any other location but nothing for few days.
>
> Anyway, I wanted to thank you for sharing this fix with the hlcoders list.
> It is really a very nice attitude that I sincerelly appreciate. Thank you.
> Keep up the good spirit.
>
> J.
>
> 2009/8/5 Jonathan White <[email protected]>
>
>   
>> When trying to dispatch a particle effect from the server to the client
>> using DispatchParticleEffect( const char *pszParticleName,
>> ParticleAttachment_t iAttachType, CBaseEntity *pEntity, const char
>> *pszAttachmentName, bool bResetAllParticlesOnEntity ) I noticed that it
>> wasn't working at all, meaning the client never received the dispatch. My
>> first intuition was that it was being suppressed by prediction, but that
>> quickly resolved to not being the case.
>>
>> I finally resolved that it was because when you dispatch an effect, the
>> recipient list is calculated based on whoever is in PAS range. Well, the
>> origin for the effect is never initialized when you try to dispatch an
>> effect that originates from an attachment point on an entity! The following
>> is a fix to this problem:
>>
>> particle_parse.cpp, Lines 196 - 219
>> In Function: void DispatchParticleEffect( const char *pszParticleName,
>> ParticleAttachment_t iAttachType, CBaseEntity *pEntity, int
>> iAttachmentPoint, bool bResetAllParticlesOnEntity )
>>
>> OLD FUNCTION:
>> void DispatchParticleEffect( const char *pszParticleName,
>> ParticleAttachment_t iAttachType, CBaseEntity *pEntity, int
>> iAttachmentPoint, bool bResetAllParticlesOnEntity )
>> {
>>    CEffectData    data;
>>
>>    data.m_nHitBox = GetParticleSystemIndex( pszParticleName );
>>    if ( pEntity )
>>    {
>> #ifdef CLIENT_DLL
>>        data.m_hEntity = pEntity;
>> #else
>>        data.m_nEntIndex = pEntity->entindex();
>> #endif
>>        data.m_fFlags |= PARTICLE_DISPATCH_FROM_ENTITY;
>>    }
>>    data.m_nDamageType = iAttachType;
>>    data.m_nAttachmentIndex = iAttachmentPoint;
>>
>>    if ( bResetAllParticlesOnEntity )
>>    {
>>        data.m_fFlags |= PARTICLE_DISPATCH_RESET_PARTICLES;
>>    }
>>
>>    DispatchEffect( "ParticleEffect", data );
>> }
>>
>> CORRECTED FUNCTION:
>> void DispatchParticleEffect( const char *pszParticleName,
>> ParticleAttachment_t iAttachType, CBaseEntity *pEntity, int
>> iAttachmentPoint, bool bResetAllParticlesOnEntity )
>> {
>>    CEffectData    data;
>>
>>    data.m_nHitBox = GetParticleSystemIndex( pszParticleName );
>>    if ( pEntity )
>>    {
>>        data.m_vOrigin = pEntity->GetAbsOrigin();
>> #ifdef CLIENT_DLL
>>        data.m_hEntity = pEntity;
>> #else
>>        data.m_nEntIndex = pEntity->entindex();
>> #endif
>>        data.m_fFlags |= PARTICLE_DISPATCH_FROM_ENTITY;
>>    }
>>    data.m_nDamageType = iAttachType;
>>    data.m_nAttachmentIndex = iAttachmentPoint;
>>
>>    if ( bResetAllParticlesOnEntity )
>>    {
>>        data.m_fFlags |= PARTICLE_DISPATCH_RESET_PARTICLES;
>>    }
>>
>>    DispatchEffect( "ParticleEffect", data );
>> }
>>
>> Note the addition of data.m_vOrigin, that is what the recipient list filter
>> uses to calculate the PAS recipients and must be initialized even if the
>> particle effect isn't ultimately going to use it.
>>
>> Jonathan White
>> GoldenEye: Source
>> _______________________________________________
>> To unsubscribe, edit your list preferences, or view the list archives,
>> please visit:
>> http://list.valvesoftware.com/mailman/listinfo/hlcoders
>>
>>
>>     
>
>
>   

_______________________________________________
To unsubscribe, edit your list preferences, or view the list archives, please 
visit:
http://list.valvesoftware.com/mailman/listinfo/hlcoders

Reply via email to