Ustawienie odpowiedniego movetype - grawit...
Rivit
28.03.2015
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ł?
grankee
29.03.2015
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
Rivit
30.03.2015
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
grankee
30.03.2015
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ę.
Rivit
30.03.2015
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
grankee
31.03.2015
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.