Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Sprawdzenie, czy byty dzieli przeszkoda


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
7 odpowiedzi w tym temacie

#1 csMaster

    Wszechwiedzący

  • Power User

Reputacja: 14
Początkujący

  • Postów:554
  • Lokalizacja:localhost
Offline

Napisano 01.08.2018 20:44

Czy da się sprawdzić czy jeden byt jest oddzielony od drugiego jakąś przeszkodą np. ściana ?

Nie chodzi mi tu o is_in_viewcone, ponieważ może być tak, że byt będzie widział drugi byt, ale obaj będą za jakąś ścianą (nie chodzi tu tylko o jakieś przezroczyste ściany).


Użytkownik csMaster edytował ten post 01.08.2018 20:55

  • +
  • -
  • 0

#2 Robiin

    Godlike

  • Support Team

Reputacja: 1 123
Super Hero

  • Postów:2 075
  • Imię:Robert
  • Lokalizacja:Wrocław
Offline

Napisano 01.08.2018 21:12

Z taką funkcją chyba się nie spotkałem, ale znalazłem coś takiego, jeśli j. angielski nie jest dla Ciebie przeszkodą (co prawda napisałeś, że nie chcesz sprawdzać czy jest widoczny, ale zagłębiając się w lekturze tego tematu będziesz miał o wiele łatwiejsze zadanie): https://forums.allie...ad.php?t=103380


  • +
  • -
  • 0

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#3 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 586
Godlike

  • Postów:12 061
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Online

Napisano 01.08.2018 21:13

https://amxx.pl/doku...8/fm-trace-line
https://amxx.pl/doku...f615/trace-line
https://amxx.pl/doku...58/ef-traceline
  • +
  • -
  • 0

#4 _McHappy

    Wszechwiedzący

  • Support Team

Reputacja: 243
Wszechwidzący

  • Postów:501
  • GG:
  • Imię:Radek
  • Lokalizacja:Tak
Offline

Napisano 01.08.2018 21:19

A może kanapka?
ExecuteHam(Ham_FVisible, this, idOther);

  • +
  • -
  • 0

#5 csMaster

    Wszechwiedzący

  • Autor tematu
  • Power User

Reputacja: 14
Początkujący

  • Postów:554
  • Lokalizacja:localhost
Offline

Napisano 01.08.2018 21:23

 

Może byś coś napisał o tych funkcjach ? Jak mam ich użyć jak nawet nie wiem co zwracają i co znaczy ostatni parametr >.<

 

 

A może kanapka?

ExecuteHam(Ham_FVisible, this, idOther);

 

Co prawda pojęcia nie mam co robi Ham_FVisible, ale po samej nazwie... chce dodać że nie jest tu ważne czy byt widzi byt, tylko czy jest między nimi przeszkoda (np. ściana).


Użytkownik csMaster edytował ten post 01.08.2018 21:24

  • +
  • -
  • 0

#6 _McHappy

    Wszechwiedzący

  • Support Team

Reputacja: 243
Wszechwidzący

  • Postów:501
  • GG:
  • Imię:Radek
  • Lokalizacja:Tak
Offline

Napisano 01.08.2018 21:29

Ww funkcja kanapki będzie miała oczywiście zastosowanie, gdy chodzi o sprawdzenie, czy gracz widzi ent'a.

Inną alternatywą może być fm_is_ent_visible(entA, entB) z pliku fakemeta_util.inc lecz funkcja ta nie działa w pełni precyzyjnie i może zwracać niewłaściwe wartości.

Najlepszym rozwiazaniem jest sprawdzenie traceline'm, czyli tak, jak to opisał użytkownik ot w poradniku podlinkowanym wyżej.
  • +
  • -
  • 0

#7 csMaster

    Wszechwiedzący

  • Autor tematu
  • Power User

Reputacja: 14
Początkujący

  • Postów:554
  • Lokalizacja:localhost
Offline

Napisano 01.08.2018 21:34

Nie chce narzekać, ale czy nie da się po prostu sprawdzić czy byt znajduje się za jakąś np. ścianą z dziurą/szybą/itd względem drugiego bytu ?


  • +
  • -
  • 0

#8 _McHappy

    Wszechwiedzący

  • Support Team

Reputacja: 243
Wszechwidzący

  • Postów:501
  • GG:
  • Imię:Radek
  • Lokalizacja:Tak
Offline

Napisano 01.08.2018 21:50

Metoda traceline:
stock bool:is_in_line_of_sight(Float:origin1[3], Float:origin[2], bool:ignore_players = true)
{
    new trace = 0
    engfunc(EngFunc_TraceLine, origin1, origin2, (ignore_players ? IGNORE_MONSTERS : DONT_IGNORE_MONSTERS), 0, trace)
    
    new Float:fraction
    get_tr2(trace, TR_flFraction, fraction)
    
    return (fraction == 1.0) ? true : false
}  
Wywołanie - nic innego jak podanie w parametrach współrzędnych obu bytów. Zwróci prawdę, gdy pomiędzy bytami nie ma żadnej przeszkody.

Sprawdź, czy odpowiada Twoim wymogom. Jeśli nie, pisz - poszukamy dalej ;)
_McHappy (02.08.2018 10:20):
W wyżej przytoczonym kodzie wkradła się literówka:

Float:origin[2] -> Float:origin2[3]

  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych