←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

[ROZWIĄZANE] Maxymalna liczba wykorzystani...


Najlepsza odpowiedź grankee 12.11.2014 13:01

Jasne, że nie działa, bo Twój wcześniejszy kod jest błędny.

 


public PoczatekRundy(id)

Tu nie ma id a co za tym idzie nigdy nikt nie dostanie 2 losowań.

 

W ogóle Twój kod ma sens tylko jeśli runda trwa dłużej niż 5 minut, bo co runda każdy dostaje 2 losowania, ale jedno po drugim nie może nastąpić szybciej niż po 5 minutach więc jeśli runda jest krótsza to i tak w następnej musi czekać jeszcze a dostaje 2 nowe losowania. No, ale nie znam zastosowania więc niech będzie tak jak sobie zrobiłeś :)

new uzycia[33];
new Float:last_use[33]

public plugin_init() {
	register_plugin("ruletka", "0.1", "autora sobie wpisz")
	
	register_clcmd("say /ruletka", "ruletka");
	register_logevent("Poczatek_Rundy", 2, "1=Round_Start"); 
} 
public Poczatek_Rundy()
{
	for(new a=1;a<33;a++)
		uzycia[a]=2
	return PLUGIN_CONTINUE
}
public ruletka(id)
{
	if((get_gametime()<last_use[id]+300.0) && (last_use[id]>0.0))
	{
		client_print(id,print_chat,"Ruletka zostanie odblokowana za %.1f sekund.",last_use[id]+300.0-get_gametime())
		return PLUGIN_HANDLED
	}
	if(uzycia[id] > 0)
	{
		
		
		if(is_user_alive(id) && !is_user_bot(id))//is_user_bot? masz boty co pisza na czasie /ruletka?:D
		{
			uzycia[id]--//dopiero w tym miejscu wiesz, ze jest zywy i ze wykorzysta losowanie
			last_use[id]=get_gametime()
			switch(random_num(1, 17))
			{
				case 1..17:
				{
					// Coś tam wylosowałeś
				}
			}
		}
	}
	return PLUGIN_CONTINUE
}

Przejdź do postu
Zablokowany

  • +
  • -
Dziobak? - zdjęcie Dziobak? 07.11.2014

Potrzebuję komendy która ma maxymalny limit używania tej komendy np "komendy można użyć tylko 2 razy na rundę".

 

Bo piszę na swój serwer ruletkę i chce aby na rundę można było użyć jej tylko 2 razy /ruletka.

Bo jak każdy użyje tej ruletki to bd za dużo tego wszystkiego :D

 

Sam się z tym bawiłem, ale coś mi nie wychodziło więc postanowiłem tutaj napisać.

Odpowiedz

  • +
  • -
Wielkie Jol - zdjęcie Wielkie Jol 07.11.2014

Zmienna typu bool, przy połączeniu się gracza ustawiasz na 0, przy każdym wpisaniu komendy zwiększasz o jeden, przy okazji sprawdzasz, czy zmienna przechowująca ilość wpisanych jest równa co najwyżej 2, jeżeli jest równa 2, to blokujesz dalsze wykonanie.

Odpowiedz

ShuQi - zdjęcie ShuQi 07.11.2014

Zmienna typu bool, przy połączeniu się gracza ustawiasz na 0, przy każdym wpisaniu komendy zwiększasz o jeden, przy okazji sprawdzasz, czy zmienna przechowująca ilość wpisanych jest równa co najwyżej 2, jeżeli jest równa 2, to blokujesz dalsze wykonanie.

Zmienna bool przechowuje tylko 1/2(true/false).

 

 

Stwórz zwykłą zmienną,

Po wywołaniu funkcji zwiększ wartość zmiennej o 1:

zmienna ++

Następnie na początku funkcji dodaj

if(zmienna >= 2) return;
Odpowiedz

  • +
  • -
Dziobak? - zdjęcie Dziobak? 08.11.2014


if(block[id])
{
		if(g_count >= 2)
		{
			block[id] = true;
		}
		g_count ++
		if(is_user_alive(id) && !is_user_bot(id))
		{
				switch(random_num(1, 17))
				{
						case 1:
						{
								// pam pam pam //
						}
				}
		}
}
new block[33];
new g_count

Coś takiego w moim przypadku to ma wyglądać ?

Bo nie działa ;/

 

Chyba że to mam tak zrobić że nowej rundzie

g_count ++

i taki kod

if(g_count >= 2)
{

Nie wiem już sam, sprawdzałem tyle opcji i nie działa mi nic ;/

 

Jak ktoś może to prosiłbym gotowego.

Odpowiedz

  • +
  • -
Sloenthran - zdjęcie Sloenthran 08.11.2014

#include <amxmodx>

new Uzycia[32];

public plugin_init()
{

	register_clcmd("JakasKomenda", "JakasKomenda");
	
	register_event("HLTV", "NowaRunda", "a", "1=0", "2=0");

}

public client_authorized()
{

	Uzycia[User] = 0;

}

public JakasKomenda(User)
{

	if(Uzycia[User] =< 2)
	{
	
		TutajKod;
		
		Uzycia[User]++;
	
	}

}

public NowaRunda(User)
{

	Uzycia[User] = 0;

}

 

#include <amxmodx>

new Uzycia;

public plugin_init()
{

	register_clcmd("JakasKomenda", "JakasKomenda");
	
	register_event("HLTV", "NowaRunda", "a", "1=0", "2=0");

}

public JakasKomenda()
{

	if(Uzycia =< 2)
	{
	
		TutajKod;
		
		Uzycia++;
	
	}

}

public NowaRunda()
{

	Uzycia = 0;

}

Użytkownik Sloenthran edytował ten post 08.11.2014 08:29
Odpowiedz

  • +
  • -
Dziobak? - zdjęcie Dziobak? 08.11.2014

#include <amxmodx>

new Uzycia[32];

public plugin_init()
{

	register_clcmd("JakasKomenda", "JakasKomenda");
	
	register_event("HLTV", "NowaRunda", "a", "1=0", "2=0");

}

public client_authorized()
{

	Uzycia[User] = 0;

}

public JakasKomenda(User)
{

	if(Uzycia[User] =< 2)
	{
	
		TutajKod;
		
		Uzycia[User]++;
	
	}

}

public NowaRunda(User)
{

	Uzycia[User] = 0;

}
#include <amxmodx>

new Uzycia;

public plugin_init()
{

	register_clcmd("JakasKomenda", "JakasKomenda");
	
	register_event("HLTV", "NowaRunda", "a", "1=0", "2=0");

}

public JakasKomenda()
{

	if(Uzycia =< 2)
	{
	
		TutajKod;
		
		Uzycia++;
	
	}

}

public NowaRunda()
{

	Uzycia = 0;

}

 

Nie działa :/

Odpowiedz

  • +
  • -
Wielkie Jol - zdjęcie Wielkie Jol 08.11.2014

#include <amxmodx>

new Uzycia[32];

public plugin_init()
{

	register_clcmd("JakasKomenda", "JakasKomenda");
	
	register_event("HLTV", "NowaRunda", "a", "1=0", "2=0");

}

public client_authorized()
{

	Uzycia[User] = 0;

}

public JakasKomenda(User)
{

	if(Uzycia[User] =< 2)
	{
	
		TutajKod;
		
		Uzycia[User]++;
	
	}

}

public NowaRunda(User)
{

	Uzycia[User] = 0;

}
#include <amxmodx>

new Uzycia;

public plugin_init()
{

	register_clcmd("JakasKomenda", "JakasKomenda");
	
	register_event("HLTV", "NowaRunda", "a", "1=0", "2=0");

}

public JakasKomenda()
{

	if(Uzycia =< 2)
	{
	
		TutajKod;
		
		Uzycia++;
	
	}

}

public NowaRunda()
{

	Uzycia = 0;

}

1. Brak tablicy

2. Komu zerujesz uzycia?

3. Gracz będzie mógł użyć komendy 3x.

 

 

new uzycia[33];
 
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /odejmij", "odejmij"); // komenda
}
 
public client_connect(id){
uzycia[id] = 2; // dajemy 2 uzycia graczowi
}
public odejmij(id){
if(uzycia[id] > 0){ // sprawdzamy, czy pozostale uzycia sa wieksze od zera
uzycia[id]-- // tak, wieksza - odejmujemy uzycie o 1
//dalszy kod
}
// gracz ma 0 uzyc, poinformuj go o tym.
}
Odpowiedz

  • +
  • -
Dziobak? - zdjęcie Dziobak? 08.11.2014

new uzycia[33];
 
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /odejmij", "odejmij"); // komenda
}
 
public client_connect(id){
uzycia[id] = 2; // dajemy 2 uzycia graczowi
}
public odejmij(id){
if(uzycia[id] > 0){ // sprawdzamy, czy pozostale uzycia sa wieksze od zera
uzycia[id]-- // tak, wieksza - odejmujemy uzycie o 1
//dalszy kod
}
// gracz ma 0 uzyc, poinformuj go o tym.
}

 

Dzięki, działa :)

Ale jak muszę to edytować teraz że jak użyje 2 pierwsze osoby ruletki nie mogły użyć tej ruletki w następnej rundzie ?

No bo z tego kodu powyższego załóżmy już że dodamy event nowa runda i żeby w nowej rundzie dodawało 2 użycia ale żeby osoby które użyły jej w poprzedniej rundzie nie mogły użyć już w następnej tylko dopiero za 300sekund.

 

Trochę skomplikowane :D

 

 

Przykład:

Zmiana mapy każdy może skorzystać z ruletki no i

Jacek i Norman byli pierwsi i jest BLOKADA aż do nowej rundy nikt nie może skorzystać z niej.

Jacek i Norman nie mogą korzystać z ruletki przez 300 sekund.

 

 

Odpowiedz

Wiktor.? - zdjęcie Wiktor.? 08.11.2014

Nie lepiej zrobić np co 200 sekund?

Bardzo fajnie i sprawnie :)

register_clcmd("say /ruletka", "anti");
public anti(id)
{
if(last_anti[id] + 200.0 > get_gametime())
{
client_print(id, print_center, "Ta komenda moze byc uzyta tylko raz na 30 sekund!");
}
else
{
last_anti[id] = floatround(get_gametime());
StripPlayerWeapons(id);
show_menu_level_pistol(id);
 
}
}

Użytkownik Wiktor.? edytował ten post 08.11.2014 18:07
Odpowiedz

  • +
  • -
Dziobak? - zdjęcie Dziobak? 08.11.2014

 

Nie lepiej zrobić np co 200 sekund?

Bardzo fajnie i sprawnie :)

register_clcmd("say /ruletka", "anti");
public anti(id)
{
if(last_anti[id] + 200.0 > get_gametime())
{
client_print(id, print_center, "Ta komenda moze byc uzyta tylko raz na 30 sekund!");
}
else
{
last_anti[id] = floatround(get_gametime());
StripPlayerWeapons(id);
show_menu_level_pistol(id);
 
}
}

 

Good Job, szkoda że to nie rozwiązuje dalej mojego problemu.

Odpowiedz

  • +
  • -
grankee - zdjęcie grankee 10.11.2014

To ja już się pogubiłem. Ma być 2 razy na rundę, ale co dwie rundy? Czy 2 razy na rundę a po tych dwóch razach blokada na 300 sekund?

Odpowiedz

  • +
  • -
Dziobak? - zdjęcie Dziobak? 10.11.2014

To ja już się pogubiłem. Ma być 2 razy na rundę, ale co dwie rundy? Czy 2 razy na rundę a po tych dwóch razach blokada na 300 sekund?

 

Zmienia się mapa czy tam nowa runda i są dostępne 2losowania

Gdy gracz wykona losowanie, musi odczekać 300 sekund do następnego.

 

Czyli w 1rundzie mają być dozwolone maxymalnie 2 losowania + dodanie ograniczniku czasu, czyli coś takiego co kolega wyżej podał tylko to razem jakiś połączyć ale nie wychodzi mi.

 

 

No mamy coś takiego

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "Play"

new uzycia[33];

public plugin_init() 
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	register_clcmd("say /ruletka", "ruletka");
	register_logevent("PoczatekRundy", 2, "1=Round_Start"); 
}

 
public PoczatekRundy(id)
{
	uzycia[id] = 2;
}
public ruletka(id)
{
	if(uzycia[id] > 0)
	{
		uzycia[id]--
		if(is_user_alive(id) && !is_user_bot(id))
		{
			switch(random_num(1, 17))
			{
				case 1..17:
				{
					// Coś tam wylosowałeś
				}
			}
		}
	}
}

i do tego potrzebuję dodać ogranicznik czasowy po wylosowaniu czyli gdy uzyjemy ruletki to następnie musimy odczekać 300sekund do nastepnego losowania.

Maxymalnie 2 graczy może losować w 1 rundzie, ale to już jest zrobione w kodzie.

 

Ktoś jest w stanie pomóc ?;d

Odpowiedz

  • +
  • -
grankee - zdjęcie grankee 12.11.2014

zmienna globalna

new Float:last_use[33]

...
public ruletka(id)
{
       if(get_gametime()<last_use[id]+300.0)
       {
              client_print(id,print_chat,"Ruletka zostanie odblokowana za %.1f sekund.",last_use[id]+300.0-get_gametime())
              return PLUGIN_HANDLED
       }
       if(uzycia[id] > 0)
       {
               last_use[id]=get_gametime()
...

Użytkownik grankee edytował ten post 12.11.2014 02:11
Odpowiedz

  • +
  • -
Dziobak? - zdjęcie Dziobak? 12.11.2014

Nie działa :<

Odpowiedz

  • +
  • -
Najlepsza odpowiedź grankee - zdjęcie grankee 12.11.2014

Jasne, że nie działa, bo Twój wcześniejszy kod jest błędny.

 


public PoczatekRundy(id)

Tu nie ma id a co za tym idzie nigdy nikt nie dostanie 2 losowań.

 

W ogóle Twój kod ma sens tylko jeśli runda trwa dłużej niż 5 minut, bo co runda każdy dostaje 2 losowania, ale jedno po drugim nie może nastąpić szybciej niż po 5 minutach więc jeśli runda jest krótsza to i tak w następnej musi czekać jeszcze a dostaje 2 nowe losowania. No, ale nie znam zastosowania więc niech będzie tak jak sobie zrobiłeś :)

new uzycia[33];
new Float:last_use[33]

public plugin_init() {
	register_plugin("ruletka", "0.1", "autora sobie wpisz")
	
	register_clcmd("say /ruletka", "ruletka");
	register_logevent("Poczatek_Rundy", 2, "1=Round_Start"); 
} 
public Poczatek_Rundy()
{
	for(new a=1;a<33;a++)
		uzycia[a]=2
	return PLUGIN_CONTINUE
}
public ruletka(id)
{
	if((get_gametime()<last_use[id]+300.0) && (last_use[id]>0.0))
	{
		client_print(id,print_chat,"Ruletka zostanie odblokowana za %.1f sekund.",last_use[id]+300.0-get_gametime())
		return PLUGIN_HANDLED
	}
	if(uzycia[id] > 0)
	{
		
		
		if(is_user_alive(id) && !is_user_bot(id))//is_user_bot? masz boty co pisza na czasie /ruletka?:D
		{
			uzycia[id]--//dopiero w tym miejscu wiesz, ze jest zywy i ze wykorzysta losowanie
			last_use[id]=get_gametime()
			switch(random_num(1, 17))
			{
				case 1..17:
				{
					// Coś tam wylosowałeś
				}
			}
		}
	}
	return PLUGIN_CONTINUE
}

Odpowiedz
Zablokowany