←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Jak sprawzić czy dany gracz jest widzialny ?

GT Team's Photo GT Team 19.07.2012

Witam mam pytanie jak sprawdzić czy gracz jest widzialny bo za pomocą is_visible mi nie działa ;/
fm_is_visible też nie :D

tzn.

Chce zrobić coś takiego że w client_prethink sprawdza czy gracz jest widziany przez kogoś

a dokładniej czy patrzy na niego.. ?
Quote

  • +
  • -
d0naciak's Photo d0naciak 20.07.2012

http://amxx.pl/topic...ci-gracza-bytu/

//czekaj, jezeli chcesz sprawdzic czy patrzy na niego, uzyj get_user_aiming(id, target, body); //target == id na ktorego patrzysz
Quote

GT Team's Photo GT Team 20.07.2012

Get_user_aiming sprawdza czy gracz ma na celowniku cel
A mi chodzi o to czy na ekranie jest gracz
Quote

  • +
  • -
sebul's Photo sebul 20.07.2012

Użyj is_in_viewcone.
/* SDK function - checks if an origin is in an entity's view cone
 * Set use3d to 1 to do the calculation in 3D. Otherwise it will be in 2D.
 */
Quote

  • +
  • -
DarkGL's Photo DarkGL 22.07.2012

to że jest w viewcone niedowodzi jedoznacznie że jest widoczny może być ale nie musi ;)
sebul (02.08.2012 19:12):
Ale wyżej autor napisał "A mi chodzi o to czy na ekranie jest gracz", a viewcone właśnie to sprawdza.
Quote

GT Team's Photo GT Team 02.08.2012

Właśnie sprawdzałem, sorka za odkopanie, ale funkcja bardzo by mi się przydała a w adv ence bullet dam age jest taka opcja ze gdy się strzeli przez ścianę to nie pokazuje ile się zadało obrażeń ( to jest na cvary ) I chyba musi sprawdzać czy grac jest widoczny albo jakiś byt nie przeszkadza w jego zobaczeniu.
Quote

  • +
  • -
sebul's Photo sebul 02.08.2012

Sprawdzałeś fm_is_ent_visible? Albo spróbuj tak
new Float:Iorigin[3], Float:Torigin[3], Float:Rorigin[3];
entity_get_vector(id, EV_VEC_origin, Iorigin);
entity_get_vector(target, EV_VEC_origin, Torigin);

trace_line(id, Iorigin, Torigin, Rorigin);

if(get_distance_f(Torigin, Rorigin) < 30.0) {
// id widzi target
}


Ogólnie gdybyś od razu napisał dokładnie o co Ci chodzi, to odpowiedź miałbyś dużo szybciej.
Quote

  • +
  • -
G[o]Q's Photo G[o]Q 04.08.2012


    /**
     * Description:        Unsure, I assume it is whether or not the other entity is visible to this entity.
     * Forward params:    function(this, idOther);
     * Return type:        Integer (boolean).
     * Execute params:    ExecuteHam(Ham_FVisible, this, idOther);
     */
    Ham_FVisible,

w bullet_damage jest chyba zwykly traceline ktory sprawdza czy nic nie ma miedzy graczami
Quote

  • +
  • -
Fili:P's Photo Fili:P 04.08.2012

Q' timestamp='1344093499' post='440663']
w bullet_damage jest chyba zwykly traceline ktory sprawdza czy nic nie ma miedzy graczami

W bullet damage jest http://amxx.pl/dokum...-is-ent-visible
Chyba ktoś to już wyżej podał
G[o]Q (04.08.2012 16:24):
tak a fm_is_ent_visible dziala jak zwykly traceline i jest dla tych co nie ogarniają traceline'a lub tych którzy go czesto używają xD
Quote

  • +
  • -
G[o]Q's Photo G[o]Q 04.08.2012

tutaj masz jeszcze kod który znalazlem z kiedyś ten kawalek jest odpowiedzialny za wybuch ent'a jak flash'a czyli jesli gracz patrzy na ent to mu zakrywa caly ekran jesli stoi tylem to polowe czyli rozwiązuje to chyba twój problem.

Funkcja wyszukuje graczy w zasięgu 700 unitów jest to kod z diablo więc kilka przeróbek by bylo potrzebnych

public flash_boom(ent){
    emit_sound( 0, CHAN_AUTO, "weapons/flashbang-1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM )
    
    //new id=pev(ent,pev_owner)
    
    new Float:forigin[3], origin[3]
    pev(ent,pev_origin,forigin)    
    FVecIVec(forigin,origin)
        
    new entlist[513]
    new numfound = find_sphere_class(0,"player",700.0,entlist,512,forigin)
        
    for (new i=0; i < numfound; i++)
    {        
        new pid=entlist[i]
        
        new wynik
        new Float:fAngle;
        if(fm_is_ent_visibles(pid, ent, fAngle) && fAngle <= 45.0)wynik=1
        else wynik=0

        if(player_class[pid]==Flasher) continue
        if(wynik)
            Display_Fade(pid,5600,5600,0,255,255,255,230)
        else
            Display_Fade(pid,5600,5600,0,255,255,255,160)
        
        
    }
    
    
    
    remove_entity(ent)
}

a tutaj stock fm_is_ent_visibles czyli troche przerobiona wersja z fm_util

stock bool:fm_is_ent_visibles(index, ent, &Float:fAngle, brush=0, ignoremonsters = 0){
    new Float:start[3], Float:view_ofs[3]
    pev(index, pev_origin, start)
    pev(index, pev_view_ofs, view_ofs)
    xs_vec_add(start, view_ofs, start);

    new Float:point[3];
    if(brush)
        fm_get_brush_entity_origins(ent, point);
    else
        pev(ent, pev_origin, point);
        
    new solid = pev(ent, pev_solid);
    set_pev(ent, pev_solid, SOLID_NOT);
    engfunc(EngFunc_TraceLine, start, point, ignoremonsters, index, 0)
    set_pev(ent, pev_solid, solid);

    //Angle
    start[0] = point[0] - start[0];
    start[1] = point[1] - start[1];
    start[2] = point[2] - start[2];
    xs_vec_normalize(start, start);
    
    new Float:view[3];
    pev(index, pev_v_angle, view);
    angle_vector(view, ANGLEVECTOR_FORWARD, view);
    
    fAngle = xs_vec_angle(view, start);
    
    //is visible?
    new Float:fraction
    get_tr2(0, TR_flFraction, fraction)
    if (fraction == 1.0)
        return true

    return false
}
Quote

GT Team's Photo GT Team 10.08.2012


	/**
	 * Description:		Unsure, I assume it is whether or not the other entity is visible to this entity.
	 * Forward params:	function(this, idOther);
	 * Return type:		Integer (boolean).
	 * Execute params:	ExecuteHam(Ham_FVisible, this, idOther);
	 */
	Ham_FVisible,

w bullet_damage jest chyba zwykly traceline ktory sprawdza czy nic nie ma miedzy graczami



ExecuteHam(Ham_FVisible, this, idOther);


this = ?

idOther = ?


this to kto a id other to kogo ?

Edit ://


if(fm_is_ent_visibles(pid, ent, fAngle) && fAngle <= 45.0)wynik=1


pid to kto a ent to kogo ?


co to jest fAngle ?

tam po tym jest && fAngle < =45.0


To jest o kąt widzenia ? czyli 45 stopni w lewo i 45 stopni w prawo ?
Edited by PaTrIcKx, 10.08.2012 18:27.
Quote

  • +
  • -
G[o]Q's Photo G[o]Q 11.08.2012

ent to to na co sie patrzy
pid to ten kto patrzy
fAngle to referencja więc ma być puste i jest to kąt

this to jest gracz dla którego wykonujesz funkcje
idOther to drugi gracz/ent

ten kawalek z ham'a sprawdza czy this ma na swoim ekranie idOther
Quote

GT Team's Photo GT Team 11.08.2012

Czy ma na swoim ekranie - Nawet jeżeli jest za sciana ale na ekranie gracza?
Quote

  • +
  • -
G[o]Q's Photo G[o]Q 11.08.2012

ehh jak gosc jest za scianą to masz go na ekranie?? widzisz go ? bo chyba nie
Quote