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] Autorespawn z określoną liczbą żyć


Najlepsza odpowiedź Kameha, 19.01.2013 00:02

Po 1. Jeżeli chcesz sprawdzić warunek w pierwszym bloku kodu gdzie masz

if(zycia[id]=3){


Jak już chcesz sprawdzić, czy gracz rzeczywiście ma 3 życia. Używasz do tego operatorów logicznych czyli( ==, !=, >=, <=, >, <) i łączenia
zapytań (&& (i), || (lub))

W Twoim przypadku powinno to wyglądać tak:
if(zycia[id]>0){

Po 2. W drugim bloku widzę że już to poprawiłeś, lecz zrobiłeś kilka niedomówień jakimi są
zmienna globalna maxPlayers, do której pasowało by wczytywać liczbę graczy jaką serwer może osiągnąć. Nie jestem pewien jak to w Pawn
wygląda ale istnieje możliwość, że ID gracza nie zmienia się tylko zostaje do końca sesji (nie sprawdzałem). A więc jeżeli wejdzie i
zostanie mu przypisany ID = 30 i nagle na serwerze zostanie 10 osób to niema sensu pobierania aktualnej ilości graczy lecz maksymalną jaką
serwer potrafi osiągnąć. Bynajmniej zrobiłbym to tak:
public PoczatekRundy()
{
for(new i=1; i<=32; ++i) // Po co tworzyć zmienną, która posłuży Ci tylko temu
{
if(is_user_connected(i))
{
zycia[i]=3;
}
}
}


Jeżeli chcesz ustawiać graczom ilość żyć przy połączeniu to radziłbym użyć w tym celu client_connect(id)
Twierdzisz że ustawiłeś, że osoba która wejdzie ma 3 życia i wyświetla w dalszym ciągu brak. Jednak problem tkwi w tym że nie ustawiasz im
tej ilości, a if jest dobrze skonstruowany.

Mam nadzieję że coś pomogłem, jeżeli będziesz mieć jeszcze z czymś problem to pisz.
Pozdrawiam,
Kameha Przejdź do postu


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

#1 DioW

    Pomocny

  • Użytkownik

Reputacja: 10
Początkujący

  • Postów:51
  • GG:
  • Imię:Jan
  • Lokalizacja:Szczecin
Offline

Napisano 18.01.2013 20:58

Witam, problem mam następujący.
Próbuję napisać spawnera który tak:
-Osoba która wejdzie w trakcie rundy nie spawni się (widzi napis ze musi czekac)
-Na początku każdej rundy gracze otrzymują 3 życia (widoczne na HUDZIE)
-Każdy jak zginie respawni się (w różnych miejscach - nie tylko spawn TT&CT)
-Po 3'ch śmierciach wszystkich graczy, zaczyna się nowa runda.

No więc zrobiłem tyle:

1. Próby HUD'a
#include <amxmodx>
#include <amxmisc>
#include <csx>
#include <fun>
#include <cstrike>
#include <hamsandwich>

#define PLUGIN "HUD"
#define AUTHOR "ezo"
#define VERSION "1.0"


new zycia[33];

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("HLTV", "NewRound", "a", "1=0", "2=0")
register_event("DeathMsg", "Death", "ade");


}
public Death(id)
{
zycia[id] = zycia[id] - 1
if(zycia[id]>0){
ExecuteHamB(Ham_CS_RoundRespawn, id)
}
return PLUGIN_CONTINUE
}

public client_connect(id){

zycia[id] = 0;

}
public NewRound(id)
{
zycia[id] = 3;
}

public pokaz_hud(id)
{

new fragi = get_user_frags(id)
new dedy = get_user_deaths(id)

if(is_user_connected(id))
{
if(zycia[id]=3){
set_hudmessage(255, 255, 0, 0.02, 0.15, 0, 0.0, 0.3, 0.0, 0.0);
show_hudmessage(id, "^n[Fragi: %i]^n[Pozostale zycia: %i]^n^n[Forum: Up-Life.eu]", fragi, zycia)
}
else{
set_hudmessage(255, 255, 0, 0.02, 0.15, 0, 0.0, 0.3, 0.0, 0.0);
show_hudmessage(id, "^n[Fragi: %i]^n[Pozostale zycia: BRAK]^n^n[Forum: Up-Life.eu]", fragi)
}
}
else
{
remove_task(id)
}

return PLUGIN_HANDLED
}
public client_putinserver(id)
{
set_task(0.04, "pokaz_hud", id,_,_,"b");
}



2. Próby Respa + HUDA
#include <amxmodx>
#include <amxmisc>
#include <fun>

#define PLUGIN "One in The Chamber"
#define VERSION "1.0"
#define AUTHOR "diow"

new zycia[33];
new maxPlayers;

public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("DeathMsg","func_death","a")
register_logevent("PoczatekRundy", 2, "1=Round_Start");
}
public client_putinserver(id)
{
set_task(0.04, "pokaz_hud", id,_,_,"b");
zycia[id]=0;
}

public PoczatekRundy()
{
for(new i=1; i<=maxPlayers; ++i)
{
if(is_user_connected(i))
{
zycia[i]=3;
}
}
}

public func_death(){
set_task(3.0, "r_spawn", read_data(2))
}

public r_spawn(id){
spawn(id)
}

public pokaz_hud(id)
{
new fragi = get_user_frags(id)
if(is_user_connected(id))
{
if(zycia[id]>0){
set_hudmessage(255, 255, 0, 0.02, 0.15, 0, 0.0, 0.3, 0.0, 0.0);
show_hudmessage(id, "^n[Fragi: %i]^n[Pozostale zycia: %i]^n^n[Forum: xxxx]", fragi, zycia)
}
else{
set_hudmessage(255, 255, 0, 0.02, 0.15, 0, 0.0, 0.3, 0.0, 0.0);
show_hudmessage(id, "^n[Fragi: %i]^n[Pozostale zycia: BRAK]^n^n[Forum: xxxx]", fragi)
}
}
else
{
remove_task(id)
}

return PLUGIN_HANDLED
}


I mam 2 w zasadzie problemy, pierwszy to taki iż jak zrobić żeby gracz który wchodzi miał zmienną "zycia[id]" na 0 -> Client_puttinserver? (nie dziala, znaczy ustawia wartość 0, a na nowej rundzie jest dalej zero)
Kolejne, to brak wyświetlania w HUDZIE, nawet jak ustawie że osoba wchodząca ma 3życia, to i tak widnieje napis BRAK.
A w Pkt. 2 respawnuje wszystkich zawsze, nie zaleznie od tego ile razy zginą (ale to wiem, bo nie ma w ogóle funkcji death, w której odejmuje wartość zycie - to umiem zrobic)

A więc mam prośbę w pomocy nad tym pluginem.
Dzięki wielkie.

Użytkownik DioW edytował ten post 18.01.2013 20:59

  • +
  • -
  • 0

#2 Kameha

    Początkujący

  • Użytkownik

Reputacja: 3
Nowy

  • Postów:14
  • Lokalizacja:Assambler
Offline

Napisano 19.01.2013 00:02   Najlepsza odpowiedź

Po 1. Jeżeli chcesz sprawdzić warunek w pierwszym bloku kodu gdzie masz
if(zycia[id]=3){


Jak już chcesz sprawdzić, czy gracz rzeczywiście ma 3 życia. Używasz do tego operatorów logicznych czyli( ==, !=, >=, <=, >, <) i łączenia
zapytań (&& (i), || (lub))

W Twoim przypadku powinno to wyglądać tak:
if(zycia[id]>0){

Po 2. W drugim bloku widzę że już to poprawiłeś, lecz zrobiłeś kilka niedomówień jakimi są
zmienna globalna maxPlayers, do której pasowało by wczytywać liczbę graczy jaką serwer może osiągnąć. Nie jestem pewien jak to w Pawn
wygląda ale istnieje możliwość, że ID gracza nie zmienia się tylko zostaje do końca sesji (nie sprawdzałem). A więc jeżeli wejdzie i
zostanie mu przypisany ID = 30 i nagle na serwerze zostanie 10 osób to niema sensu pobierania aktualnej ilości graczy lecz maksymalną jaką
serwer potrafi osiągnąć. Bynajmniej zrobiłbym to tak:
public PoczatekRundy()
{
for(new i=1; i<=32; ++i) // Po co tworzyć zmienną, która posłuży Ci tylko temu
{
if(is_user_connected(i))
{
zycia[i]=3;
}
}
}


Jeżeli chcesz ustawiać graczom ilość żyć przy połączeniu to radziłbym użyć w tym celu client_connect(id)
Twierdzisz że ustawiłeś, że osoba która wejdzie ma 3 życia i wyświetla w dalszym ciągu brak. Jednak problem tkwi w tym że nie ustawiasz im
tej ilości, a if jest dobrze skonstruowany.

Mam nadzieję że coś pomogłem, jeżeli będziesz mieć jeszcze z czymś problem to pisz.
Pozdrawiam,
Kameha

Użytkownik Kameha edytował ten post 19.01.2013 00:03

  • +
  • -
  • 0

#3 DioW

    Pomocny

  • Autor tematu
  • Użytkownik

Reputacja: 10
Początkujący

  • Postów:51
  • GG:
  • Imię:Jan
  • Lokalizacja:Szczecin
Offline

Napisano 22.01.2013 21:02

Jak dawałem >0 Nie odpalało HUD'a (nie pokazywało żyć).
też byłem zdziwiony.
  • +
  • -
  • 0




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

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