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] Maxymalna liczba wykorzystania komendy


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


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

#1 Dziobak?

    Wszechmogący

  • Power User

Reputacja: 271
Wszechwidzący

  • Postów:645
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Radom
Offline

Napisano 07.11.2014 22:35

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ć.


  • +
  • -
  • 0

#2 Wielkie Jol

    REPREZENTUJE SIEBIE I CAŁĄ GALAKTYKĘ

  • Support Team

Reputacja: 683
Wszechmogący

  • Postów:1 258
  • GG:
  • Lokalizacja:AMXX
Offline

Napisano 07.11.2014 22:48

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.


  • +
  • -
  • 0

"Żaden etyczny inżynier oprogramowania nie zgodzi się napisać procedury zniszczBagdad. Jego poczucie etyki domaga się, aby napisał procedurę zniszczMiasto, a Bagdad przekazał jako parametr" - Nathaniel Borenstein.


#3 ShuQi

    Pomocny

  • Zbanowany

Reputacja: 5
Nowy

  • Postów:60
  • Lokalizacja:Rzeszów
Offline

Napisano 07.11.2014 23:15

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;


#4 Dziobak?

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 271
Wszechwidzący

  • Postów:645
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Radom
Offline

Napisano 08.11.2014 00:19


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.


  • +
  • -
  • 0

#5 Sloenthran

    Profesjonalista

  • Użytkownik

Reputacja: 161
Profesjonalista

  • Postów:169
  • Steam:steam
  • Imię:Dawid
  • Lokalizacja:-
Offline

Napisano 08.11.2014 08:26

#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

  • +
  • -
  • 0

#6 Dziobak?

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 271
Wszechwidzący

  • Postów:645
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Radom
Offline

Napisano 08.11.2014 14:50

#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 :/


  • +
  • -
  • 0

#7 Wielkie Jol

    REPREZENTUJE SIEBIE I CAŁĄ GALAKTYKĘ

  • Support Team

Reputacja: 683
Wszechmogący

  • Postów:1 258
  • GG:
  • Lokalizacja:AMXX
Offline

Napisano 08.11.2014 15:27

#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.
}

  • +
  • -
  • 1

"Żaden etyczny inżynier oprogramowania nie zgodzi się napisać procedury zniszczBagdad. Jego poczucie etyki domaga się, aby napisał procedurę zniszczMiasto, a Bagdad przekazał jako parametr" - Nathaniel Borenstein.


#8 Dziobak?

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 271
Wszechwidzący

  • Postów:645
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Radom
Offline

Napisano 08.11.2014 16:14

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.

 

 


  • +
  • -
  • 0

#9 Wiktor.?

    Profesjonalista

  • Zbanowany

Reputacja: 41
Pomocny

  • Postów:156
  • GG:
  • Imię:Wiktor
  • Lokalizacja:Polski
Offline

Napisano 08.11.2014 18:07

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


#10 Dziobak?

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 271
Wszechwidzący

  • Postów:645
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Radom
Offline

Napisano 08.11.2014 22:08

 

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.


  • +
  • -
  • 0

#11 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 10.11.2014 18:24

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?


  • +
  • -
  • 0

#12 Dziobak?

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 271
Wszechwidzący

  • Postów:645
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Radom
Offline

Napisano 10.11.2014 19:07

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


  • +
  • -
  • 0

#13 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 12.11.2014 02:05

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

  • +
  • -
  • 0

#14 Dziobak?

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 271
Wszechwidzący

  • Postów:645
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Radom
Offline

Napisano 12.11.2014 12:04

Nie działa :<


  • +
  • -
  • 0

#15 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 12.11.2014 13:01   Najlepsza odpowiedź

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
}


  • +
  • -
  • 1




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

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