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

[ROZWIĄZANE] Problem z cs_reset_user_model


  • Zamknięty Temat jest zamknięty
8 odpowiedzi w tym temacie

#1 Fabregas21

    Banned

  • Zbanowany

Reputacja: 0
Nowy

  • Postów:17
  • GG:
  • Imię:Patryk
  • Lokalizacja:Białystok
Offline

Napisano 30.07.2012 11:35

Witam :)
Mam problem z natywem cs_reset_user_model w pluginie Losowanie Mikołaja (załączony poniżej). Wcześniej plugin losuje gracza, który jest mikołajem i daje mu dodatkowe moce (dzieje się tak co rundę). Jednak w moim przypadku gracz, który został wylosowany w poprzedniej rundzie na mikołaja jest nim nadal i w końcu dochodzi do tego, że wszyscy mają model mikołaja.
Chciałbym więc, aby co runde było po 1 mikołaju w CT i TT.

Załączone pliki



#2 Fabregas21

    Banned

  • Autor tematu
  • Zbanowany

Reputacja: 0
Nowy

  • Postów:17
  • GG:
  • Imię:Patryk
  • Lokalizacja:Białystok
Offline

Napisano 30.07.2012 17:24

Proszę o sprawdzenie, dlaczego model nie zostaje przywrócony na domyślny (zrestartowany) i napisać, co mam po kolei zrobić :)

#3 Gość_21977_*

  • Gość

Reputacja: 0

Offline

Napisano 31.07.2012 04:12

42
if(!is_user_alive(attacker) || !is_user_connected(attacker))
Wystarczy samo sprawdzenie, czy gracz żyje.
Jeśli żyje, to znaczy, że jest połączony z serwerem.

Warto natomiast sprawdzić, czy atakujący jest w ogóle graczem (id ∈ [1 ; 32] ∩ ℕ).
46
if(mikolaj[id]){
To samo,wypadałoby sprawdzić, czy ofiarą jest gracz.

27
public Odrodzenie(id){
mikolaj[id] = false
cs_reset_user_model(id)
return PLUGIN_CONTINUE;
}
Dodać należy warunek, czy odrodzony gracz żyje.
Zauważ, że Ham_Spawned_Post wykonuje się także w momencie dołączenia do serwera.
Przydałoby się także dodać drobny interwał, aby mieć pewność, że wykonane zostały podstawowe komendy spawnu.

53
los_mikolaj_ct()
i adekwatnie 68
los_mikolaj_tt
Nie, nie, jeszcze raz nie.
Bardzo łatwo o zapętlenie się i crash. Nie masz absolutnie żadnej pewności, że funkcja się kiedykolwiek zakończy.
Nie możesz założyć, że istnieje przynajmniej jeden gracz, który spełnia warunki na zostanie wylosowanym.
Już o wydajności funkcji nie wspomnę. Ponadto, nie sprawdzasz, czy gracz to osoba, bot, czy HLTV.
Podam Ci przykład, jak powinno zostać to wylosowane.

public los_mikolaj_ct(){
new ct[33],num=-1;//w tablicy ct będziemy przechowywać numery id osób, spełniających warunek do zostania wylosowanymi, num to liczba tych kandydatów
for(new id=1;id<get_maxplayers();++id){// dla każdego gracza
if(is_user_alive(id) && get_user_team(id)==2 && !is_user_bot(id) && !is_user_hltv(id)){// sprawdzamy, czy żyje (jeśli nie ma go na serwerze, to nie żyje), czy spełnia warunek bycia CT, czy nie jest botem ani HLTV
ct[++num]=id;//jeśli spełnia warunki, to dodajemy go do tablicy i preinkrementujemy liczbę kandydatów
}
}
if(++num){//jeśli istnieje chociaż jeden kandydat, to losujemy mikołaja, w przeciwnym przypadku, nie.
new rand=ct[random(num)];//losujemy zwycięzcę i pobieramy jego id z tabeli, reszta jest oczywista
ColorChat(rand, BLUE, "Jestes Mikolajem CT");
cs_set_user_model(rand, "santact");
set_user_health(rand, get_user_health(rand)+get_cvar_num("santa_hp"));
set_user_armor(rand, get_cvar_num("santa_armor"));
mikolaj[rand]=true;
}
return PLUGIN_CONTINUE;
}


#4 Fabregas21

    Banned

  • Autor tematu
  • Zbanowany

Reputacja: 0
Nowy

  • Postów:17
  • GG:
  • Imię:Patryk
  • Lokalizacja:Białystok
Offline

Napisano 31.07.2012 10:10

27

public Odrodzenie(id){
mikolaj[id] = false
cs_reset_user_model(id)
return PLUGIN_CONTINUE;
}

Dodać należy warunek, czy odrodzony gracz żyje.
Zauważ, że Ham_Spawned_Post wykonuje się także w momencie dołączenia do serwera.
Przydałoby się także dodać drobny interwał, aby mieć pewność, że wykonane zostały podstawowe komendy spawnu.


Chciałbym, aby wylosowany gracz stracił swój model i umiejętności na koniec rundy (po automatycznej komendzie sv_restart ""), a nie po tym jak zginie / odrodzi się.
Tak sądzę, że to:
13
RegisterHam(Ham_Spawn, "player", "Respawn", 1);

można zastąpić tym:
register_logevent("KoniecRundy", 2, "1=Round_End");


27
natomiast to:
public Respawn(id)

tym:
public KoniecRundy(id)


Ale nie jestem tego w ogóle pewnien.....
Proszę, napisz mi co mam po kolei zrobić, aby działo się tak, jak wyżej napisałem.

#5 Nenczoks

    Banned

  • Zbanowany

Reputacja: 50
Pomocny

  • Postów:358
  • Lokalizacja:Warszawa
Offline

Napisano 31.07.2012 10:47

Można tak zrobić, tylko koniec rundy nie ma (id), więc trzeba zrobić pętlę for(new i=0...), lecz lepiej przy każdym spawnie gracza mu to usuwać (ham_spawn).

Użytkownik Nenczoks edytował ten post 31.07.2012 10:49


#6 Fabregas21

    Banned

  • Autor tematu
  • Zbanowany

Reputacja: 0
Nowy

  • Postów:17
  • GG:
  • Imię:Patryk
  • Lokalizacja:Białystok
Offline

Napisano 31.07.2012 14:52

27

public Odrodzenie(id){
mikolaj[id] = false
cs_reset_user_model(id)
return PLUGIN_CONTINUE;
}


Czyli w jaki sposób mam zmienić ten wycinek z sma ? Mogę prosić o jego przerobienie :)

#7 Nenczoks

    Banned

  • Zbanowany

Reputacja: 50
Pomocny

  • Postów:358
  • Lokalizacja:Warszawa
Offline

Napisano 31.07.2012 15:59

Spoiler


Sprawdź teraz?

#8 Fabregas21

    Banned

  • Autor tematu
  • Zbanowany

Reputacja: 0
Nowy

  • Postów:17
  • GG:
  • Imię:Patryk
  • Lokalizacja:Białystok
Offline

Napisano 31.07.2012 16:36

Ok działa :) Leci +
Można zamknąć :)

#9 Gość_21977_*

  • Gość

Reputacja: 0

Offline

Napisano 31.07.2012 16:43

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Pomoc udzielona

Jeśli się z tym nie zgadzasz, Dołączona grafika raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL




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

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