←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

[ROZWIĄZANE] Wykrycie strzału

Zablokowany

  • +
  • -
BoB0_ - zdjęcie 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. 

 

Odpowiedz

  • +
  • -
dasiek - zdjęcie 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? 

Odpowiedz

  • +
  • -
BoB0_ - zdjęcie 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. 

Odpowiedz

  • +
  • -
dasiek - zdjęcie 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. 

Odpowiedz

  • +
  • -
BoB0_ - zdjęcie 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
Odpowiedz

  • +
  • -
dasiek - zdjęcie 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? )

Odpowiedz

GT Team - zdjęcie 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 ^^
Odpowiedz

  • +
  • -
BoB0_ - zdjęcie 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?

Odpowiedz

  • +
  • -
K!113r - zdjęcie 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.

Odpowiedz

  • +
  • -
BoB0_ - zdjęcie 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?

Odpowiedz

  • +
  • -
BoB0_ - zdjęcie 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 .

 

Odpowiedz

  • +
  • -
Kawon - zdjęcie Kawon 08.06.2013

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Pomoc udzielona

Jeśli się z tym nie zgadzasz, report.png raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL
Odpowiedz
Zablokowany