←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Oznaczenie bs spritesem

  • +
  • -
Linux''s Photo Linux' 19.03.2014

Witam chcialbym sie dowiedziec jak moge oznaczyc BS spritesem? Czyli gdy ktos spojrzy np w strone bs to nad nim bedzie sie wyswietlac sprite's.
Quote

  • +
  • -
wiwi249's Photo wiwi249 19.03.2014

Jest na to sposób, musisz dodać sobie do pluginu najpierw stocki, pochodzą z CSO NST:
stock create_icon_origin(id, ent, sprite) // By sontung0 [czyli autora pierwszych CSO-NST]
{
    if (!pev_valid(ent)) return;
    
    new Float:fMyOrigin[3]
    entity_get_vector(id, EV_VEC_origin, fMyOrigin)
    
    new target = ent
    new Float:fTargetOrigin[3]
    entity_get_vector(target, EV_VEC_origin, fTargetOrigin)
    fTargetOrigin[2] +=50.0
    
    if (!is_in_viewcone(id, fTargetOrigin)) return;

    new Float:fMiddle[3], Float:fHitPoint[3]
    xs_vec_sub(fTargetOrigin, fMyOrigin, fMiddle)
    trace_line(-1, fMyOrigin, fTargetOrigin, fHitPoint)
                            
    new Float:fWallOffset[3], Float:fDistanceToWall
    fDistanceToWall = vector_distance(fMyOrigin, fHitPoint) - 10.0
    normalize(fMiddle, fWallOffset, fDistanceToWall)
    
    new Float:fSpriteOffset[3]
    xs_vec_add(fWallOffset, fMyOrigin, fSpriteOffset)
    new Float:fScale
    fScale = 0.01 * fDistanceToWall
    
    new scale = floatround(fScale)
    scale = max(scale, 1)
    scale = min(scale, 3) //liczba wartości zmiany skali ikonki kiedy się do niej przybliżamy lub oddalamy
    scale = max(scale, 1)

    te_sprite(id, fSpriteOffset, sprite, scale, 30) // to 30 to jasność ikonki skala 0 [ciemna]-255[jaskrawa]
}

stock te_sprite(id, Float:origin[3], sprite, scale, brightness) // By sontung0
{    
    message_begin(MSG_ONE, SVC_TEMPENTITY, _, id)
    write_byte(TE_SPRITE)
    write_coord(floatround(origin[0]))
    write_coord(floatround(origin[1]))
    write_coord(floatround(origin[2]))
    write_short(sprite)
    write_byte(scale)
    write_byte(brightness)
    message_end()
}

stock normalize(Float:fIn[3], Float:fOut[3], Float:fMul) // By sontung0
{
    new Float:fLen = xs_vec_len(fIn)
    xs_vec_copy(fIn, fOut)
    
    fOut[0] /= fLen, fOut[1] /= fLen, fOut[2] /= fLen
    fOut[0] *= fMul, fOut[1] *= fMul, fOut[2] *= fMul
}
Później dla każdego gracza PreThink sobie ustaw i w tej funkcji jakaś pętla, która dla każdego BS będzie uruchamiała tę funkcję (nie wiem jak to najlepiej zrobic, pewnie jakies fm_find_ent_by_class albo cos, licze na pomoc).
create_icon_origin(id, byt_bs, twoj_sprite)
Quote