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

Ustawienie odpowiedniego movetype - grawitacja+dotyk gracza


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

#1 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 28.03.2015 19:35

Witam, mam taki oto kod:

public Makespit2(id)
{        
    new Float:Origin[3]
    new Float:Velocity[3]
    new Float:vAngle[3]

    new spitSpeed = 1000

    entity_get_vector(id, EV_VEC_origin , Origin)
    entity_get_vector(id, EV_VEC_v_angle, vAngle)

    new NewEnt = create_entity("info_target")

    //ENTITY
    entity_set_string(NewEnt, EV_SZ_classname, "spit_ent11")
    entity_set_model(NewEnt, spit_model[0])
    entity_set_size(NewEnt, Float:{-1.5, -1.5, -1.5}, Float:{1.5, 1.5, 1.5})
    entity_set_origin(NewEnt, Origin)
    entity_set_vector(NewEnt, EV_VEC_angles, vAngle)
    entity_set_int(NewEnt, EV_INT_solid, SOLID_TRIGGER)
    entity_set_int(NewEnt, EV_INT_movetype, MOVETYPE_TOSS)
    entity_set_float(NewEnt, EV_FL_gravity,0.5)  
    entity_set_float(NewEnt, EV_FL_scale, 0.50)
    entity_set_edict(NewEnt, EV_ENT_owner, id)
    velocity_by_aim(id, spitSpeed , Velocity)
    entity_set_vector(NewEnt, EV_VEC_velocity ,Velocity)
    //TRAIL
    message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
    write_byte(TE_BEAMFOLLOW)
    write_short(NewEnt)
    write_short(sprite_white)
    write_byte(1)
    write_byte(3)
    write_byte(0)
    write_byte(250)
    write_byte(0)
    write_byte(200)
    message_end()

    return PLUGIN_HANDLED
}

Obecnie byt leci sobie, a jak dotknie czegoś to już tam leży. Jak zrobić żeby na ten byt działała grawitacja, ale żeby ten byt mógł dotknąć gracza, a jak trafi w coś innego to żeby po prostu znikał?


  • +
  • -
  • 1

#2 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 29.03.2015 15:03

register_touch("*","spit_ent11","dotyk")
...
public dotyk(id,ent)
{
//sprawdzasz czy id to gracz i podejmujesz odpowiednie akcje.
}

jak nie zadziała to w register  zamien miejscami * oraz "spit_ent11" oraz w funkcji zamien miejscami id oraz ent

 

 

co do grawitacji to wybierz odpowiednie movetype, nie pamietam ktore, ale znajdziesz info w moim tutorialu o tworzeniu bytów


Użytkownik grankee edytował ten post 29.03.2015 15:04

  • +
  • -
  • 1

#3 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 30.03.2015 16:57

Dobra, a jak to zrobić żeby było to:

entity_set_int(NewEnt, EV_INT_solid, SOLID_TRIGGER)
entity_set_int(NewEnt, EV_INT_movetype, MOVETYPE_TOSS)

Ale jak spadnie na coś innego niż gracz to zmieni mu model + brak interakcji z raczem (SOLID_NONE?)

 

 

Piszę już długi czas pod AMXX, ale moje operacje na entity nie są jakieś dobre :/


  • +
  • -
  • 0

#4 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 30.03.2015 19:07

Jak ma kolidować z graczem to SOLID_BBOX a jak maprzenikać, ale alarmować touch to SOLID_TRIGGER.

 

 


Ale jak spadnie na coś innego niż gracz to zmieni mu model + brak interakcji z raczem (SOLID_NONE?)

 

Nie czaję, najpierw chciałeś, żeby byt znikał jak dotknie czegoś innego niż gracz. Czyli byt jak dotknie czegokolwiek innego niż gracz to ma mu zmienić model i byt ma stać się już niewrażliwy na dotyk z graczem?

 

Jeśli tak to w touchu sprawdź czy dotknął gracza, jak nie to zmień model i solid na SOLID_NONE, jak nie o to chodzi to objaśnij dokładnie co ma się dziać, bo już nie czaję.


  • +
  • -
  • 1

#5 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 30.03.2015 19:14

To tak:

 

Byt ma lecieć, uwzględnia grawitacje i kolizje.

Jeżeli trafia w gracza to go zabija, jeżeli w coś innego to sobie spada na ziemię i już nie koliduje z niczym, nie łapie toucha wtedy

 

 

 

PS. SOLID_NOT, pomyliłem

 

 


Czyli byt jak dotknie czegokolwiek innego niż gracz to ma mu zmienić model i byt ma stać się już niewrażliwy na dotyk z graczem?

 

Dokładnie


  • +
  • -
  • 1

#6 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 31.03.2015 03:23

No to tak jak pisałem, SOLID_TRIGGER + MOVETYPE_TOSS (czy jakie Ci tam pasuje) oraz rejestrujesz touch klasy Twojego bytu i " * " czyli dowolnej klasy

W touchu prawdzasz czy id bytu dotykającego/dotykanego (musisz sprawdzić w testach czy to byt dotyka entów czy enty bytu) to gracz (is_user_alive) i jesli tak to zadajesz mu obrażenia, a jeśli nie to ustawiasz SOLID_NOT dla swojego entu. 


  • +
  • -
  • 1




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

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