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

Ściana blokująca w jedną stronę


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

#1 csMaster

    Wszechwiedzący

  • Power User

Reputacja: 14
Początkujący

  • Postów:542
  • Lokalizacja:localhost
Offline

Napisano 25.05.2021 17:45

Jak utworzyć entity który zadziała jak sufit jeśli ktoś spróbuje skoczyć będąc pod nim, ale po którym nie będzie można chodzić (gracz spadnie na dół jakby tej ściany nie było) ?

Konkretniej, co zrobić żeby kolizje były od dołu i boków, ale żeby nie było ich przed wskakiwaniu z góry.


  • +
  • -
  • 0

#2 KoRrNiK

    Zaawansowany

  • Użytkownik

Reputacja: 81
Zaawansowany

  • Postów:78
  • Steam:steam
  • Lokalizacja:Rzeszów
Offline

Napisano 25.05.2021 20:54

Możesz spróbować to zrobić w taki sposób ale nie obiecuję, że będzie działał.

 

Dodajesz dwa eventy

register_forward(FM_CmdStart, 	   "fw_CmdStart",		0);
register_forward(FM_AddToFullPack, "fw_addtofullpack", 		1);

i zrobić np. 

public fw_CmdStart( id, uc_handle, randseed ){
	
	if( !is_user_alive(id) || !is_user_connected(id) || is_user_hltv(id) )
		return FMRES_IGNORED;
	
	floorTouching(id);
	
	return FMRES_IGNORED;
}

I w tym floorTouching sprawdzać czy stoi na danym obiekcie.

new ground = pev(id, pev_groundentity);

+ sprawdzasz classname obiektu

new szClass[9];
pev(ground, pev_classname, szClass, sizeof(szClass) - 1 );

No i później poprzez taki argument sprawdzasz czy wszystko się zgadza: 

ground != 0 && ( pev(id, pev_flags) & FL_ONGROUND ) && equal(szClass, "xyz")

i jeśli stoisz na tym obiekcie zmieniasz jakąś zmienną na true a jeśli nie to na false;

 

I teraz używasz addtofullpack

public fw_addtofullpack( es, e, ent, host, host_flags, player, p_set ){

poprzez classname oraz czy tamta twoja zmienna jest na true i jeśli tak to zmieniasz jego pozycję czy tam solid to musisz sprawdzić  " ES_Solid " " ES_Origin "

 

 


  • +
  • -
  • 3

- Na wiadomości typu "siema, mam sprawę" nie odpisuję pisz od razu o co Ci chodzi.

- Jeśli masz zlecenie pisz śmiało  :)

- Nie pomagam na PW za darmo  :(

 

 


#3 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 26.05.2021 08:10

Tak czytam i w sumie się zastanawiam, bo z tego co rozumiem to modyfikujemy jeden i ten sam byt.

Co w przypadku, gdy ktoś będzie chodził po górze i w tym samym momencie ktoś bedzie napierał na boczną ścianę. Wydaje mi się, że może to być problem, osobiście bym jakąś matematykę wymyślił do tego :D ale nie jestem w stanie powiedzieć co by tu mogło pomóc


  • +
  • -
  • 0

#4 csMaster

    Wszechwiedzący

  • Autor tematu
  • Power User

Reputacja: 14
Początkujący

  • Postów:542
  • Lokalizacja:localhost
Offline

Napisano 26.05.2021 08:32

Spoiler

Żaden ze sposobów nie działa. Coś zrobiłem źle ? Te współrzędne { 95.7, -3569.1, -591.4 } nie są przypadkowe, są w miejscu w którym została utworzona strefa walkguard, więc wiem gdzie obiekt się pojawia. Ale efekt dalej jest taki że ten ent zawsze blokuje.

 

 

Tak czytam i w sumie się zastanawiam, bo z tego co rozumiem to modyfikujemy jeden i ten sam byt.

Co w przypadku, gdy ktoś będzie chodził po górze i w tym samym momencie ktoś bedzie napierał na boczną ścianę. Wydaje mi się, że może to być problem, osobiście bym jakąś matematykę wymyślił do tego :D ale nie jestem w stanie powiedzieć co by tu mogło pomóc

Można pobrać absmin ent'a i absmax gracza i sprawdzić czy gracz znajduje się pod ent'em. Ale właśnie nie wiem jak można to zrobić żeby dla jednego gracza obiekt był przenikliwy a dla innego nie.

 

Znalazłem taką informację o FM_AddToFullPack:

AddToFullPack is only for rendering and predicting, and is not sent when the engine is processing physics, touchs etc

W takim razie chyba nie da się tego zrobić z tego forwardu ? Chyba że źle to zrozumiałem.


  • +
  • -
  • 0

#5 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 553
Godlike

  • Postów:11 976
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 26.05.2021 14:05


W takim razie chyba nie da się tego zrobić z tego forwardu ?

 

Tak dokładnie


  • +
  • -
  • 0

#6 csMaster

    Wszechwiedzący

  • Autor tematu
  • Power User

Reputacja: 14
Początkujący

  • Postów:542
  • Lokalizacja:localhost
Offline

Napisano 26.05.2021 17:53

Tak dokładnie

To w takim razie da się coś innego zrobić ? Wydaje mi się że na niektórych mapach pod modyfikacje były takie pół-ściany. Ale jedyne co mi przychodzi do głowy żeby uzyskać sensowny efekt to sprawić żeby gracz po stanięciu na taki byt został sprowadzony do ziemi np. przez EngFunc_DropToFloor.


  • +
  • -
  • 0

#7 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 553
Godlike

  • Postów:11 976
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 26.05.2021 18:38

Moze spróbuj z FM_Touch


  • +
  • -
  • 0

#8 csMaster

    Wszechwiedzący

  • Autor tematu
  • Power User

Reputacja: 14
Początkujący

  • Postów:542
  • Lokalizacja:localhost
Offline

Napisano 27.05.2021 07:52

Spoiler

To też niestety nie daje żadnego efektu.


  • +
  • -
  • 0

#9 Misiu.

    Kochanek DarkGL

  • Power User

Reputacja: 174
Profesjonalista

  • Postów:539
  • GG:
  • Steam:steam
  • Imię:Adrian
  • Lokalizacja:Zgorzelec
Offline

Napisano 27.05.2021 13:30

A czy nie możesz rozwiązać tego na zasadzie teleportu jeżeli znajduje się powyżej wysokości ściany (sufitu)?

Aby przeniosło go pod ścianę (sufit)

 

https://amxx.pl/topi...tacja/?p=200536

 

Uniknięcie kolizji ze ścianą z jednej strony jest raczej niewykonalne, patrząc na fakt gdy tak jak wyżej pisał TibacK jedna osoba będzie znajdowała się na górze, a druga napierała od dołu.


Użytkownik Misiu. edytował ten post 27.05.2021 13:36

  • +
  • -
  • 0

PoGrywamy.pl - Pograj Razem Z Nami

 

Tatusiek serwerów:

[ONLY DD2 #2] 1shot2kill.pl

[ONLY DD2] PoGrywamy.pl

Przyjmuje płatne zlecenia!


#10 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 553
Godlike

  • Postów:11 976
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 27.05.2021 16:31

https://www.amxmodx..../register_touch

 

When returning PLUGIN_HANDLED from the callback, Engine will still fire
other touch functions like the pfn_touch() forward before actually
blocking the touch. To immediately block return PLUGIN_HANDLED_MAIN
instead.


  • +
  • -
  • 1

#11 csMaster

    Wszechwiedzący

  • Autor tematu
  • Power User

Reputacja: 14
Początkujący

  • Postów:542
  • Lokalizacja:localhost
Offline

Napisano 28.05.2021 18:04

https://www.amxmodx..../register_touch

 

When returning PLUGIN_HANDLED from the callback, Engine will still fire
other touch functions like the pfn_touch() forward before actually
blocking the touch. To immediately block return PLUGIN_HANDLED_MAIN
instead.

Spoiler

Nie działa. Więc widocznie nie da się tego zrobić. No trudno.


  • +
  • -
  • 0

#12 Robiin

    Godlike

  • Support Team

Reputacja: 1 103
Super Hero

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

Napisano 31.05.2021 12:14

Może pozycja gracza przy touch? Origin gracza będzie wyżej od sufitu ściany, kiedy będziemy na nią wchodzić od góry i będzie mniejszy bądź równy gdy wchodzimy od boku?


  • +
  • -
  • 0

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


#13 csMaster

    Wszechwiedzący

  • Autor tematu
  • Power User

Reputacja: 14
Początkujący

  • Postów:542
  • Lokalizacja:localhost
Offline

Napisano 31.05.2021 14:13

Może pozycja gracza przy touch? Origin gracza będzie wyżej od sufitu ściany, kiedy będziemy na nią wchodzić od góry i będzie mniejszy bądź równy gdy wchodzimy od boku?

Ale co właściwie masz na myśli ? Bo nie mam problemu ze sprawdzeniem czy gracz jest na czy pod ent'em, ale chodzi o to żeby znaleźć sposób żeby ent był dla jednego gracza przenikalny, a dla drugiego nie.


  • +
  • -
  • 0

#14 Robiin

    Godlike

  • Support Team

Reputacja: 1 103
Super Hero

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

Napisano 01.06.2021 08:09

Przenikalny, czyli fizycznie nie kolidował z graczem? Jeśli tak, to przy touch sprawdzasz tak jak powiedziałem, blokujesz przez supercede przy dotknięciu od konkretnych ścian i continue w przeciwnym przypadku.

Alternatywnie, wydaje mi się, że na którejś z map jb wypadłem przez teksturę i nie mogłem wrócić przez tą samą, ale nie jestem w stanie wskazać palcem konkretnej mapy i jest szansa, że mózg mi płata figle ze względu na temat
  • +
  • -
  • 0

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


#15 csMaster

    Wszechwiedzący

  • Autor tematu
  • Power User

Reputacja: 14
Początkujący

  • Postów:542
  • Lokalizacja:localhost
Offline

Napisano 03.06.2021 11:13

Przenikalny, czyli fizycznie nie kolidował z graczem? Jeśli tak, to przy touch sprawdzasz tak jak powiedziałem, blokujesz przez supercede przy dotknięciu od konkretnych ścian i continue w przeciwnym przypadku.

 

Spoiler

To kod który podałem w poprzedniej odpowiedzi. Robi właśnie to o czym napisałeś. Coś jest tutaj źle ?


  • +
  • -
  • 0




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

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