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

Pytanie o pętle i problem z odliczaniem


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

#1 Andrzejek

    Ucze się :]

  • Power User

Reputacja: 136
Zaawansowany

  • Postów:1 300
  • Imię:Andrzej
Offline

Napisano 25.01.2013 09:39

Witam, mam do was kilka pytań

1. Jak lepiej robić mod? Jeden plugin (cały system) czy osobne pluginy?
2. Poproszę o poprawną pętle, bo kiedyś mi Benio podał ale nie zapisałem sobie, bo mam np. taką:



for(new i = 1; i<= maxpl; i++) {
if(is_user_connected(i) && is_user_alive(i)) {
if(get_user_team(i) == 2) {
}

if(get_user_team(i) == 1) {
}
}
}



Co oznacza is_user_connected(id)? jak dopisze przed !
Co oznacza is_user_alive(id)? jak dopisze przed !

3. Odliczanie:



new Odliczanie[33]

public UruchomOdliczanie(id)
{
set_user_godmode(id, 1)

Odliczanie[id] = 30

if(task_exists(id + 3431))
{
remove_task(id + 3431)
}
set_task(1.0, "Koniec", id + 3431, _, _, "b")

return PLUGIN_CONTINUE
}
public Koniec(task_id)
{
new id = task_id - 3431

set_hudmessage(0, 255, 0, 0.03, 0.76, 2, 0.02, 1.0, 0.01)
show_hudmessage(id, "Za %d sekund stracisz Niesmiertelnosc.", Odliczanie[id])

Odliczanie[id] -= 1

if(Odliczanie[id] <= 0)
{
set_user_godmode(id, 0);
}
}



I jak mamy

show_hudmessage(id, "Za %d sekund stracisz Niesmiertelnosc.", Odliczanie[id])


to czy dało by to dodać do innej osobnej funkcji? Jeśli tak to proszę o przykład

Źródło odliczania: http://amxx.pl/topic...ryb-odliczania/

4. Kolejne odliczanie:

start(99912, 30);

public start(taskid, start)
{
static count;
if(start)
count = start;

if(--count > 0)
{
set_hudmessage(255, 0, 0, 0.10, 0.23, 0, 6.0, 1.0)
ShowSyncHudMsg(0, hud3, "Jakis tekst")

if(count <= 10)
{
new word[6];
num_to_word(count, word, 5);
client_cmd(0, "spk ^"%s^"", word);
}
set_task(1.0, "start", taskid);
}
else
{
//wywolanie dalszej funkcji
}
}



Jak zrobić np. 2 odliczania w 1 funkcji? Żeby jak najmniej kodu zajmowało ale żeby dobrze działało
  • +
  • -
  • 0

Mam do sprzedania pluginy AMXX pod serwery typu, JB, ONLY DD2, ZOMBIE, COD MOD, DR i inne...

 

Jeżeli jesteś zainteresowany(a), napisz na PW lub GG 42384104


#2 AztekHQS

    Banned

  • Zbanowany

Reputacja: 98
Zaawansowany

  • Postów:279
  • Lokalizacja:Polska
Offline

Napisano 25.01.2013 09:47

1. Jak lepiej robić mod? Jeden plugin (cały system) czy osobne pluginy?
2. Poproszę o poprawną pętle, bo kiedyś mi Benio podał ale nie zapisałem sobie, bo mam np. taką:


Co oznacza is_user_connected(id)? jak dopisze przed !
Co oznacza is_user_alive(id)? jak dopisze przed !



Jak zrobić np. 2 odliczania w 1 funkcji? Żeby jak najmniej kodu zajmowało ale żeby dobrze działało

1. Jeśli chcesz na prawdę duży mod to lepiej w osobnych pluginach.
2. Pętla od benia jest dobra ale usunąłbym sprawdzanie czy gracz jest połączony, bo po tym jest sprawdzanie czy jest żywy, a jak jest żywy to musi być połączony


Jeśli dodasz ! przed is_user_connected(id) to funkcja sprawdza czy index (ID jest niepołączony
Jeśli dodasz ! przed is_user_alive(d) to funkcja sprawdza czy index (ID) jest nieżywy
Najlepszy serwer JailBreak!
IP: 31.186.83.208:27043
Dołączona grafika

#3 speedkill

    Godlike

  • Przyjaciel

Reputacja: 1 592
Godlike

  • Postów:2 733
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Prudnik
Offline

Napisano 25.01.2013 09:54

Ad.1) Najlepiej podzielić na osobne pluginy, ma się wtedy o wiele większą swobodę przy edytowaniu pluginu.
Ad.2) Skoro sprawdzasz, czy gracz żyję nie potrzebujesz sprawdzania, czy jest połączony z serwerem. Wykrzyknik jest to negacja -> http://pl.wikipedia.org/wiki/Negacja jeżeli dodajesz znak negacji przed is_user_alive(id), to sprawdzasz czy gracz nie żyje, tak samo z is_user_connected(id). Co do pętli:

//Globalne
new maxpl;

public plugin_cfg(){
    maxpl = get_maxplayers();
}

//Pętla
for(new i = 1; i <= maxpl; i++){
    if(is_user_alive(i)){
        if(get_user_team(i) == 1){

        }
        else if(get_user_team(i) == 2){

        }
    }
}

Jak widzisz, usunąłem sprawdzanie czy gracz jest połączony. Dodałem także przy warunku z teamem gracza else if.

Ad.3) Można przenieść, ale po co ? Dla pokazania huda nie ma sensu tworzyć nowej funkcji, chyba, że używasz tego huda / odliczania wiele razy w innych funkcjach, wtedy można stworzyć jedną funkcję, która będzie pokazywać wiadomość na hud.

new Odliczanie[33]

public UruchomOdliczanie(id)
{
    set_user_godmode(id, 1)

    Odliczanie[id] = 30

    if(task_exists(id + 3431))
    {
        remove_task(id + 3431)
    }
    set_task(1.0, "Koniec", id + 3431, _, _, "b")

    return PLUGIN_CONTINUE
}
public Koniec(task_id)
{
    new id = task_id - 3431

    MojaFunkcja(id);

    Odliczanie[id] -= 1

    if(Odliczanie[id] <= 0)
    {
        set_user_godmode(id, 0);
    }
}
public MojaFunkcja(id){
    set_hudmessage(0, 255, 0, 0.03, 0.76, 2, 0.02, 1.0, 0.01)
    show_hudmessage(id, "Za %d sekund stracisz Niesmiertelnosc.", Odliczanie[id])
}

Jak pisałem, takie coś nie ma sensu.

Ad.4) Dwa odliczania w jednej funkcji nie będą opytmalne.
  • +
  • -
  • 0

If you can dream it, you can do it.


#4 Andrzejek

    Ucze się :]

  • Autor tematu
  • Power User

Reputacja: 136
Zaawansowany

  • Postów:1 300
  • Imię:Andrzej
Offline

Napisano 25.01.2013 10:06

1. Czyli muszę własny include?
2. To była z kodu zabrana pętla, a Benio mi podawał taką bardziej optymalną pętle: new team switch case 1: coś takiego nie pamietam dokładnie :)
3. OK dzięki sprawdzę, bo mi chodzi że na serwerze max mogą być pokazywane 4 hudy, i dlatego chce dodać odliczanie do 1 huda, żeby były 3 hudy na serwerze.
4. Ok, dzięki czyli osobne pluginy tylko :D
  • +
  • -
  • 0

Mam do sprzedania pluginy AMXX pod serwery typu, JB, ONLY DD2, ZOMBIE, COD MOD, DR i inne...

 

Jeżeli jesteś zainteresowany(a), napisz na PW lub GG 42384104


#5 speedkill

    Godlike

  • Przyjaciel

Reputacja: 1 592
Godlike

  • Postów:2 733
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Prudnik
Offline

Napisano 25.01.2013 10:14

Ad.1) Musisz poczytać o natywach.
Ad.2) Można dodać switch(get_user_team(i)), a potem dodać case 1, case 2.
Ad.3) Używaj: CreateHudSyncObj()
Ad.4) Tutaj zależy, bo może być osobny plugin, jak i osobna funkcja do odliczania.
  • +
  • -
  • 0

If you can dream it, you can do it.





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

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