Skocz do zawartości

  • Zaloguj korzystając z Facebooka Zaloguj korzystając z Twittera Zaloguj przez Steam Zaloguj poprzez Google      Logowanie »   
  • Rejestracja

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

Dzialac dziala, ale nie poprawnie. Bledzik przy rozdaniu broni?


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

#1 MalySzkrab3k

    Początkujący

  • Użytkownik

Reputacja: 0
zer0.

  • Postów:10
  • Lokalizacja:London
Offline

Napisano 25.12.2012 18:17

Witam, jest to kawałek z mojego pluginu który wywołuje napisana wcześniej pętla, a mianowicie chodzi o to, ze gdy zostaje 2 terrorystów nie zabiera broni obydwom więźnia, zabiera tylko jednemu. Co robię złe ? Co jest nie tak?


public Sprawdz2()
{
if(terro_alive == 2)
{
for(new i=2; i<=maxpl; i++)
{
if(is_user_alive(i) && is_user_connected(i) && get_user_team(i) == 1)
{
if(task_exists(999)) remove_task(999);
set_user_maxspeed(i, 250.0);
set_user_health(i, 50);
strip_user_weapons(i);
give_item(i, "weapon_knife");
return FMRES_HANDLED;
}
}
}
return PLUGIN_HANDLED;
}

Użytkownik MalySzkrab3k edytował ten post 25.12.2012 18:21

  • +
  • -
  • 0

#2 GwynBleidD

    Godlike

  • Administrator

Reputacja: 1849
Godlike

  • Postów:3066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 25.12.2012 21:06

Po pierwsze, wbij sobie na zawsze do głowy jeśli chcesz pisać pluginy, czy programować w jakimkolwiek innym języku programowania 2 zasady:/
1. WCIĘCIA W KODZIE - to podstawa podstaw! Poprawia znacząco czytelność kodu, nie tylko Tobie jako autorowi, ale też innym, do których się zwracasz o pomoc.
2. CZYTELNOŚĆ KODU - zawsze dbaj o to, żeby kod był czytelny i zrozumiały, opatrzony komentarzami w odpowiednich miejscach...

A teraz do rzeczy. Widzę skleiłeś 2 pluginy ze sobą, nie do końca rozumiejąc chyba co robisz...

for(new i=2; i<=maxpl; i++)

Co tu robi ta dwójka? Widzę, że nie do końca rozumiesz jak działają pętle. Tą dwójką spowodowałeś, że gracze będą sprawdzani począwszy od tego z id=2, czyli jeden zostanie pominięty (z id=1).

if(task_exists(999)) remove_task(999); 

Ta linia powinna być poza pętlą, ABSOLUTNIE! Po co dla każdego terrorysty ten task usuwać?

return FMRES_HANDLED; 

Tu właśnie leży główny problem... return powoduje wyjście z aktualnie wykonywanej funkcji, zwracając to co po słówku return stoi. Czyli w tym przypadku szukasz terrorysty, zaczynając od id=2, gdy go znajdziesz to zabierasz mu wszystko, dajesz nóż i sobie z funkcji wychodzisz, więc następnego terrorysty raczej ta funkcja nie znajdzie, nie sądzisz? Wystarczy usunąć tą linię i będzie OK.

Poza tym takie pytanie, gdzie Ty wykonujesz tą funkcję? Co ją wywołuje? Bo z jednego returna wynika, że fakemeta, a z drugiego że to zwykły event z AMX...
  • +
  • -
  • 0
NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark




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

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