[ROZWIĄZANE] Wykrycie strzału
BoB0_
07.06.2013
Witam.
Czy ta funkcja: cs_get_user_stationary ( index ) zwraca wartość gdy gracz strzela czy tylko gdy posiada broń stacjonarną i nie koniecznie z niej strzela. Jeżeli nie prosiłby o podpowiedź która z funkcji zwraca taką wartość.
Dziękuję i pozdrawiam.
dasiek
07.06.2013
Z dokumentacji :
Zwraca 1 jeżeli gracz korzysta z broni stacjonarnej, w przeciwnym wypadku 0.
Opisz dokładniej co chcesz zrobić. Chcesz złapać moment kiedy gracz strzeli?
BoB0_
07.06.2013
Nie dokładnie. Chciałbym wykorzystać to do warunku, czyli: Jeżeli gracz strzela nie może czegoś zrobić. Np postawić apteczki.
dasiek
07.06.2013
pierwsze co mi przychodzi na myśl to coś w ten deseń
public funkcja_stawiania_apteczki(pewnie_id) { if(get_user_buttons(pewnie_id) & IN_ATTACK) { //nie stawia bo strzela } else { //stawia bo nie strzela } }
w funkcji do postawienia apteczki sprawdzasz czy trzyma IN_ATTACK (czyli klawisz strzelania ) pewnie nie jest to zbyt dobre rozwiązanie.
BoB0_
07.06.2013
public cod_class_skill_used(id){ if (!ilosc_apteczek_gracza[id]) { client_print(id, print_center, "Masz tylko 2 apteczki na runde!"); return PLUGIN_CONTINUE; } if (get_user_buttons(id) & IN_ATTACK) { client_print(id, print_center, "Przestan strzelac aby postawic apteczke!"); return PLUGIN_CONTINUE; } ilosc_apteczek_gracza[id]--; new Float:origin[3]; entity_get_vector(id, EV_VEC_origin, origin); new ent = create_entity("info_target"); entity_set_string(ent, EV_SZ_classname, "medkit"); entity_set_edict(ent, EV_ENT_owner, id); entity_set_int(ent, EV_INT_solid, SOLID_NOT); entity_set_vector(ent, EV_VEC_origin, origin); entity_set_float(ent, EV_FL_ltime, halflife_time() + 7 + 0.1); entity_set_model(ent, "models/w_medkit.mdl"); set_rendering ( ent, kRenderFxGlowShell, 255,0,0, kRenderFxNone, 255 ) ; drop_to_floor(ent); entity_set_float(ent, EV_FL_nextthink, halflife_time() + 0.1); return PLUGIN_CONTINUE; }
Coś takiego mniej więcej czy może do innego publica? Zobaczę jak działa ten twój pomysł. Dodatkowo dlaczego uważasz że jest zły?
Użytkownik BoB0_ edytował ten post 07.06.2013 12:02
dasiek
07.06.2013
Dodatkowo dlaczego uważasz że jest zły?
Dawno nie odpalałem amxxstudio , człowiek zapomina pewnych rzeczy. Pamiętam że z moich początków na Codzie (jeszcze starym) Zrobiłem coś na wzór tego co Ci podałem tylko nie pamiętam jak to działało a sprawdzić też nie mam jak zbytnie. Znając życie można to rozwiązać inaczej (może za pomocą Ham Sandwoch łapiąc moment ataku? )
GT Team 07.06.2013
public cod_class_skill_used(id){ if (!ilosc_apteczek_gracza[id]) { client_print(id, print_center, "Masz tylko 2 apteczki na runde!"); return PLUGIN_CONTINUE; } if(get_user_buttons(id) & IN_ATTACK) { client_print(id, print_center, "Nie mozesz postawic apteczki, ponieważ strzelasz!"); return PLUGIN_CONTINUE; } if (get_user_buttons(id) & IN_ATTACK) { client_print(id, print_center, "Przestan strzelac aby postawic apteczke!"); return PLUGIN_CONTINUE; } ilosc_apteczek_gracza[id]--; new Float:origin[3]; entity_get_vector(id, EV_VEC_origin, origin); new ent = create_entity("info_target"); entity_set_string(ent, EV_SZ_classname, "medkit"); entity_set_edict(ent, EV_ENT_owner, id); entity_set_int(ent, EV_INT_solid, SOLID_NOT); entity_set_vector(ent, EV_VEC_origin, origin); entity_set_float(ent, EV_FL_ltime, halflife_time() + 7 + 0.1); entity_set_model(ent, "models/w_medkit.mdl"); set_rendering ( ent, kRenderFxGlowShell, 255,0,0, kRenderFxNone, 255 ) ; drop_to_floor(ent); entity_set_float(ent, EV_FL_nextthink, halflife_time() + 0.1); return PLUGIN_CONTINUE; }poskładane
BoB0_
07.06.2013
Czy to:
if(get_user_buttons(id) & IN_ATTACK) { client_print(id, print_center, "Nie mozesz postawic apteczki, ponieważ strzelasz!"); return PLUGIN_CONTINUE; } i to: if (get_user_buttons(id) & IN_ATTACK) { client_print(id, print_center, "Przestan strzelac aby postawic apteczke!"); return PLUGIN_CONTINUE; }
to nie jest to samo?
K!113r
07.06.2013
zastosuj wersje od Cheq, nie ma sensu sprawdzać prawie tego samego warunku dwa razy (użyj z else)
@GT Team niepotrzebnie sprawdzasz podobny warunek 2 razy, do tego tylko w jednym powinieneś coś zwracać (w tym co jest że aktualnie strzela), gdyż kod za if'ami się nigdy nie wykona.
BoB0_
07.06.2013
public cod_class_enabled(id) { if(!(get_user_flags(id) & ADMIN_LEVEL_G)) { client_print(id, print_chat, "[Medyk+] Nie masz uprawnien, aby uzywac tej klasy.") return COD_STOP; } ColorChat(id, GREEN, "Klasa stworzona przez www.***"); ilosc_apteczek_gracza[id] = 2; ma_klase[id] = true } public cod_class_disabled(id) { ma_klase[id] = false } public cod_class_skill_used(id) { if (!ilosc_apteczek_gracza[id]) { client_print(id, print_center, "Masz tylko 2 apteczki na runde!"); return PLUGIN_CONTINUE; } else if (get_user_buttons(id) & IN_ATTACK) { client_print(id, print_center, "Przestan strzelac aby postawic apteczke!"); return PLUGIN_CONTINUE; } else { ilosc_apteczek_gracza[id]--; new Float:origin[3]; entity_get_vector(id, EV_VEC_origin, origin); new ent = create_entity("info_target"); entity_set_string(ent, EV_SZ_classname, "medkit"); entity_set_edict(ent, EV_ENT_owner, id); entity_set_int(ent, EV_INT_solid, SOLID_NOT); entity_set_vector(ent, EV_VEC_origin, origin); entity_set_float(ent, EV_FL_ltime, halflife_time() + 7 + 0.1); entity_set_model(ent, "models/w_medkit.mdl"); set_rendering ( ent, kRenderFxGlowShell, 255,0,0, kRenderFxNone, 255 ) ; drop_to_floor(ent); entity_set_float(ent, EV_FL_nextthink, halflife_time() + 0.1); return PLUGIN_CONTINUE; } }
Coś takiego, bo nie wiem czy dobrze zrozumiałem?
BoB0_
08.06.2013
public cod_class_skill_used(id) { if (!ilosc_apteczek_gracza[id]) { client_print(id, print_center, "Masz tylko 2 apteczki na runde!"); return PLUGIN_CONTINUE; } if (get_user_button(id) & IN_ATTACK) { client_print(id, print_center, "Przestan strzelac aby postawic apteczke!"); return PLUGIN_CONTINUE; } else ilosc_apteczek_gracza[id]--; new Float:origin[3]; entity_get_vector(id, EV_VEC_origin, origin); new ent = create_entity("info_target"); entity_set_string(ent, EV_SZ_classname, "medkit"); entity_set_edict(ent, EV_ENT_owner, id); entity_set_int(ent, EV_INT_solid, SOLID_NOT); entity_set_vector(ent, EV_VEC_origin, origin); entity_set_float(ent, EV_FL_ltime, halflife_time() + 7 + 0.1); entity_set_model(ent, "models/w_medkit.mdl"); set_rendering ( ent, kRenderFxGlowShell, 255,0,0, kRenderFxNone, 255 ) ; drop_to_floor(ent); entity_set_float(ent, EV_FL_nextthink, halflife_time() + 0.1); return PLUGIN_CONTINUE; }
W ten sposób wszystko działa .
Kawon
08.06.2013
Ten temat został zamknięty przez moderatora.
Powód: Pomoc udzielona
Jeśli się z tym nie zgadzasz, raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.
Z pozdrowieniami,
Zespół AMXX.PL