Я объясню. Постараюсь по пунктам и по существу. Вот мой код OnThink:
new glow = GetEntPropEnt(entity, Prop_Data, "m_pMainGlow");
new trail = GetEntPropEnt(entity, Prop_Data, "m_pGlowTrail");
if ((glow == -1) || (trail == -1))
{
return;
}
new r = GetRandomInt(0, 255);
new g = GetRandomInt(0, 255);
new b = GetRandomInt(0, 255);
DispatchKeyValue(glow,"model","sprites/glow03.vmt");
DispatchSpawn(glow);
SetEntityRenderColor(glow,r,g,b,255);
SetEntPropEnt(entity,Prop_Data,"m_pMainGlow",-1);
spriteOther(entity,glow);
DispatchKeyValue(trail, "model", "sprites/laser.vmt");
DispatchSpawn(trail);
SetEntityRenderColor(trail,r,g,b,255);
SetEntPropEnt(entity,Prop_Data,"m_pGlowTrail",-1);
trailOther(entity,trail);
entity в данном случае - граната npc_grenade_frag. У гранаты есть свет запала и хвост запала, оригинально они красные. Здесь я получаю энтити запала и хвоста, перекрашиваю их в произвольный цвет, а также убиваю повторно созданные энтити в spriteOther и trailOther (известный баг, приводящий к краху сервера). Но запал находится не на своём месте, не в верху, как ожидается, а в нижней части модели. Мне необходимо его переместить вверх, приблизительно на 9 юнитов, я пытался сделать это кодом выше (был взят из реально работающего плагина), но телепортации не происходит.
вы пытаетесь телепортировать нечто в почти начало системы координат карты
Неверно. Трейлы привязаны к
гранате, следовательно, координаты относительные.
Если вы хотите изменить поворот, то почитайте внимательней параметры функции телепортации
Читал, понимаю её в полной мере, но мне не нужен поворот, мне нужно просто переместить запал
выше.
вероятно вы нашли не ту ентити, что вам надо.
Снова неверно. Если бы я нашёл не ту энтити, я бы не мог менять её цвет. Но я успешно это делаю.
некоторые вещи могут происходить не только через стандартные ентити
Это на 146% env_sprite и env_spritetrail, PrintToChatAll гарантирует это.
Вообще, просто скачайте hl2sdk
Скачан, распакован, более того, вот вам функция создания гранаты:
void CGrenadeFrag::CreateEffects( void )
{
// Start up the eye glow
m_pMainGlow = CSprite::SpriteCreate( "sprites/redglow1.vmt", GetLocalOrigin(), false );
int nAttachment = LookupAttachment( "fuse" );
if ( m_pMainGlow != NULL )
{
m_pMainGlow->FollowEntity( this );
m_pMainGlow->SetAttachment( this, nAttachment );
m_pMainGlow->SetTransparency( kRenderGlow, 255, 255, 255, 200, kRenderFxNoDissipation );
m_pMainGlow->SetScale( 0.2f );
m_pMainGlow->SetGlowProxySize( 4.0f );
}
// Start up the eye trail
m_pGlowTrail = CSpriteTrail::SpriteTrailCreate( "sprites/bluelaser1.vmt", GetLocalOrigin(), false );
if ( m_pGlowTrail != NULL )
{
m_pGlowTrail->FollowEntity( this );
m_pGlowTrail->SetAttachment( this, nAttachment );
m_pGlowTrail->SetTransparency( kRenderTransAdd, 255, 0, 0, 255, kRenderFxNone );
m_pGlowTrail->SetStartWidth( 8.0f );
m_pGlowTrail->SetEndWidth( 1.0f );
m_pGlowTrail->SetLifeTime( 0.5f );
}
}
Как видите, запал является дочерним по отношению к энтити гранаты и установка координат 0-0-9 вполне оправданна и способна привести к цели. Единственный мой вопрос в том, почему этого не происходит. О чём я и спросил.
Cогласитесь, вопрос не так глуп, как вам показалось. Вчера, гугля здесь по моей проблеме, я видел куда более глупые темы. В моих темах всегда присутствует чёткая постановка вопроса, а также определённая информация по проблеме, чего у массы вопросов здесь я не наблюдаю. Мало информации? Спросите и я расскажу ещё. А принимать собеседника за школяра или профана в программировании априори - имхо, не комильфо. Бьюсь об заклад, что в среде RAD Studio я мог бы дать вам фору, но, к сожалению, я не сишник, а SM для меня и вовсе изысканное извращение. Давайте договоримся, что в будущем этот ваш моветон не будет мешать мне задавать вопросы, а вам отвечать на них.
Добавлено через 20 минут
Дополнение. С
TeleportEntity(trail, Position, NULL_VECTOR, NULL_VECTOR);
в первом посте я действительно погорячился, однако с
TeleportEntity(glow, Position, NULL_VECTOR, NULL_VECTOR);
проблема всё равно актуальна.