←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

"Ignorowanie" sciany przy strzale.

Zablokowany

  • +
  • -
Owner123 - zdjęcie Owner123 04.10.2010

Jest jakiś sposób aby po strzale przez ścianie nie zmniejszało obrażeń? Próbowałem użyć TraceAttack oraz FM_TraceLine ale żadne z tych rzeczy nie dało efektu.
Odpowiedz

  • +
  • -
kyku - zdjęcie kyku 04.10.2010

sprobuj "podpatrzeć" sposob z advanced bulletdamage (czy jak to sie nazywa) ktory nie pokazuje obrazen przez sciane i blokowac dmg
register_forward(FM_TraceLine, "fw_traceline", 1);
+
public fw_traceline(Float:vecStart[3],Float:vecEnd[3],ignoreM,id,trace) 
{

    if(id<1||id>32)
        return FMRES_IGNORED;
        
    if(!is_user_connected(id) || is_user_bot(id))
        return FMRES_IGNORED;

    // not a player entity, or player is dead
    if(!is_user_alive(id))
        return FMRES_IGNORED;
        
    if(!(pev(id,pev_button) & IN_ATTACK))
        return FMRES_IGNORED;
        
        
    new hit = get_tr2(trace, TR_pHit)    
    
    
    if(hit<1||hit>32)
        return FMRES_IGNORED;
    if(is_valid_ent(hit))
    {
        if(is_user_alive(hit))
        {
            if(tutaj_warunek_czy_jest_za_sciana)
                set_tr(TR_flFraction,1.0)
        }
        
    
    }
    return FMRES_IGNORED;
}
(to powinno dzialac)
Użytkownik kyku edytował ten post 04.10.2010 17:19
Odpowiedz

  • +
  • -
Owner123 - zdjęcie Owner123 04.10.2010

Mam takiego ifa:
if(player_b_wallbang[id] && !ExecuteHam(Ham_IsPlayer, hit))
set_tr2(trace, TR_flFraction, 1.0)

I strzaly nadal tracą na sile. Przy twoim to strzaly przelatywaly mi nawet przez graczy :P
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 04.10.2010

po set zwróć FMRES_HANDLED
Odpowiedz

  • +
  • -
G[o]Q - zdjęcie G[o]Q 05.10.2010

mozna tez w pre- take_damage zwracac HAM_SUPERCEDE jesli nie spelniony warunek
if(fm_is_ent_visible(attacker,id))
Odpowiedz

  • +
  • -
Owner123 - zdjęcie Owner123 05.10.2010

Chodzi o to aby po strzale przez ściane dmg był taki sam jak przy normalnym strzale ...
Odpowiedz

  • +
  • -
grankee - zdjęcie grankee 05.10.2010

Jest sposób na około, ale mogę tylko opisać o co chodzi, nie mam niestety na tyle czasu, aby się w to bawić.
Trzeba zrobić liste możliwych dmg ze wszystkich broni i wszystkich zakresów dystansów między graczami, sprawdzić traceline czy strzał idzie przez ściane, jeśli tak to odpowiednią zmienną globalną (wcześniej utworzoną na te potrzeby) zmienić na true, a w ham_takedamage sprawdzać czy strzał szedł przez ściane (za pomocą owej zmiennej) i jeśli tak ustawiać obrażenia zależnie od dystansu i broni.
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 06.10.2010

albo po prostu zrobić własnego TraceLine`a
Odpowiedz

  • +
  • -
Owner123 - zdjęcie Owner123 07.10.2010

Własnego Traceline'a ? Mógłbyś to bardziej opisać lub podać jakiś przykład ? :)
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 07.10.2010

Zwrócenie HANDLED nie zadziałało?

Jak chcesz własnego, to proszę.
id- atakujący
victim- ofiara

new Float:start[3] ,Float:end[3];
pev(id, pev_origin, start);
pev(victim, pev_origin, end);
	
new tr = create_tr2();
engfunc(EngFunc_TraceLine, start, end, IGNORE_MONSTERS, id, tr);
	
//get_tr2(tr)....
	
free_tr2(tr);
Odpowiedz

  • +
  • -
Owner123 - zdjęcie Owner123 07.10.2010

Tak, zwrocilem HANDLED i nadal to samo.
Mam taki kod:
new tr = create_tr2();
new Float:fVictimOrigin[3];
new Float:fAttackerOrigin[3];
pev(id, pev_origin, fAttackerOrigin);
pev(hit, pev_origin, fVictimOrigin);
engfunc(EngFunc_TraceLine, fAttackerOrigin, fVictimOrigin, IGNORE_MONSTERS, id, tr);
if(!fm_is_ent_visible(id, hit))
set_tr2(tr, TR_flFraction, 1.0);
free_tr2(tr);
return FMRES_SUPERCEDE;

I nadal strzaly traca na sile przy strzale przez sciane :s
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 07.10.2010

a traceline złapałeś z post=1?


co do kodu:
no na pewno nie w ten sposób xD

jak chcesz skorzystać z rady grankee to zamiast modyfikować trace modyfikuj obrażenia; ja Ci podałem tylko inny sposób (może lepszy, a może nie) na wykrycie czy gracze się widzą
Odpowiedz

  • +
  • -
Owner123 - zdjęcie Owner123 07.10.2010

Na wykrycie czy gracze mnie widzą mam fm_is_ent_visible ^^
Hmm, widzę że sporo roboty będzie z tym ;P No dobra. Widzę że wszystko już wyczerpane. Temat do zamknięcia.
Odpowiedz
Zablokowany