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] Losowa zabawa na JB


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

#1 Boski Z Polski

    Profesjonalista

  • Użytkownik

Reputacja: 60
Pomocny

  • Postów:178
  • Steam:steam
  • Imię:Olgierd
  • Lokalizacja:Leszno
Online

Napisano 23.06.2019 14:51

Witam. Mam problem ze zrobieniem losowej zabawy na JB. 

new zabawy[][] = {
	"FREEDAY",
	"AWPDAY",
	"AWPDAY HS",
	"CHOWANY",
	"DZIECI WOJNY",
	"KILLDAY",
	"WOJNA GANGOW",
	"GANIANY",
	"POLOWANIE"
}

W jaki sposób mam tego użyć w jail_set_play_game() ?

jail_set_play_game(random_num(0,sizeof(zabawy) - 1),true);

Próbowałem tak, ale nadal nie wychodziło.


  • +
  • -
  • 0

#2 Robiin

    Godlike

  • Support Team

Reputacja: 1 103
Super Hero

  • Postów:2 043
  • Imię:Robert
  • Lokalizacja:Wrocław
Offline

Napisano 23.06.2019 18:00

Rejestrujesz nowy natyw w silniku jb:

register_native("getGameIndexByName", "native_getGameIndexByName", 1);

Tworzysz public natywu:

public native_getGameIndexByName(name[])
{
	return getGameIndexByName(name);
}

i dodajesz wymaganą funkcję:

public getGameIndexByName(name[])
{
	#define ForDynamicArray(%1,%2) for(new %1 = 0; %1 < ArraySize(%2); %1++)

	new gameName[64];

	ForDynamicArray(i, gZabawyName)
	{
		ArrayGetString(gZabawyName, i, gameName, charsmax(gameName));

		if(equal(gameName, name))
		{
			return i;
		}
	}

	return -1;
}

W pluginie z losowaniem dajesz:

native getGameIndexByName(name[]);

A w losowaniu zabawy robisz:

new randomGame = random_num(0, sizeof(zabawy) - 1),
	gameIndex = getGameIndexByName(zabawy[randomGame]);

if(gameIndex == -1)
{
	log_amx("Nieprawidlowa nazwa zabawy. (%s)", zabawy[gameIndex]);

	return;
}

jail_set_play_game(gameIndex, true); 

Oczywiście nazwy zabaw w tablicy "zabawy" muszą być dokładnie takie same, jak te przy ich rejestrowaniu.


Użytkownik aSiorr edytował ten post 23.06.2019 18:03

  • +
  • -
  • 2

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#3 Boski Z Polski

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 60
Pomocny

  • Postów:178
  • Steam:steam
  • Imię:Olgierd
  • Lokalizacja:Leszno
Online

Napisano 23.06.2019 22:34

Ogólnie mam taki problem: 

L 06/23/2019 - 23:29:44: [AMXX] [0] jail_randomday.sma::losowanie (line 67)
L 06/23/2019 - 23:29:44: [AMXX] [1] jail_randomday.sma::OnGameHudEnd (line 56)
#include <amxmodx>
#include <amxmisc>
#include <jailbreak>

#define PLUGIN "[Jail] RandomDay"
#define VERSION "1.0.0"
#define AUTHOR "Author"

new id_randomday;

native getGameIndexByName(name[]);

new zabawy[][] = {
	"FREEDAY"
}

public plugin_init() 
{
	register_plugin(PLUGIN, VERSION, AUTHOR);
	
	id_randomday = jail_register_game("RANDOMDAY");
}

public OnDayStartPre(day, szInfo[256], szInfo2[512], setting[10], gTimeRound)
{	
	if(day == SRODA || day == id_randomday)
	{
		jail_set_prowadzacy(0);
		jail_set_prisoners_micro(true, true);
		
		setting[0] = 2;
		setting[1] = 1;
		setting[2] = 1;
		setting[4] = 3;
		jail_set_god_ct(true);
		jail_set_ct_hit_tt(true);
	}
}

public OnDayStartPost(day)
{
	if(day == SRODA || day == id_randomday)
	{
		for(new i=1; i<=MAX; i++)
		{
			jail_open_cele();
			jail_set_game_hud(5, "Dzisiaj jest LOSOWANIE na zabawe", 255, 212, 0, -1.0, -1.0);
		}
	}
}

public OnGameHudEnd(day)
{
	if(day == SRODA || day == id_randomday)
	{
		losowanie()
	}
}

public losowanie()
{
	new randomGame = random_num(0, sizeof(zabawy) - 1),
	gameIndex = getGameIndexByName(zabawy[randomGame]);
	
	if(gameIndex == -1)
	{
		log_amx("Nieprawidlowa nazwa zabawy. (%s)", zabawy[gameIndex]); ****Error 
		
		return;
	}
	
	jail_set_play_game(gameIndex, true); 	
}

Wyłączyłem wszystkie zabawy żeby na serwerze został tylko FD

id_freeday = jail_register_game("FREEDAY");

P.S Oczywiście w silniku dodany natyw

 

Rejestrujesz nowy natyw w silniku jb:

register_native("getGameIndexByName", "native_getGameIndexByName", 1);

Tworzysz public natywu:

public native_getGameIndexByName(name[])
{
	return getGameIndexByName(name);
}

i dodajesz wymaganą funkcję:

public getGameIndexByName(name[])
{
	#define ForDynamicArray(%1,%2) for(new %1 = 0; %1 < ArraySize(%2); %1++)

	new gameName[64];

	ForDynamicArray(i, gZabawyName)
	{
		ArrayGetString(gZabawyName, i, gameName, charsmax(gameName));

		if(equal(gameName, name))
		{
			return i;
		}
	}

	return -1;
}

 


  • +
  • -
  • 0

#4 Robiin

    Godlike

  • Support Team

Reputacja: 1 103
Super Hero

  • Postów:2 043
  • Imię:Robert
  • Lokalizacja:Wrocław
Offline

Napisano 24.06.2019 00:09

No jasne, że tak.. Mój błąd:

public losowanie()
{
	new randomGame = random_num(0, sizeof(zabawy) - 1),
	gameIndex = getGameIndexByName(zabawy[randomGame]);
	
	if(gameIndex == -1)
	{
		log_amx("Nieprawidlowa nazwa zabawy. (%i)", randomGame);
		
		return;
	}
	
	jail_set_play_game(gameIndex, true); 	
}

  • +
  • -
  • 1

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#5 Boski Z Polski

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 60
Pomocny

  • Postów:178
  • Steam:steam
  • Imię:Olgierd
  • Lokalizacja:Leszno
Online

Napisano 24.06.2019 01:38

 

No jasne, że tak.. Mój błąd:

public losowanie()
{
	new randomGame = random_num(0, sizeof(zabawy) - 1),
	gameIndex = getGameIndexByName(zabawy[randomGame]);
	
	if(gameIndex == -1)
	{
		log_amx("Nieprawidlowa nazwa zabawy. (%i)", randomGame);
		
		return;
	}
	
	jail_set_play_game(gameIndex, true); 	
}
L 06/24/2019 - 02:36:43: [AMXX]    [0] jail_randomday.sma::losowanie (line 67)
L 06/24/2019 - 02:36:43: [AMXX]    [1] jail_randomday.sma::OnGameHudEnd (line 56)

  • +
  • -
  • 0

#6 Robiin

    Godlike

  • Support Team

Reputacja: 1 103
Super Hero

  • Postów:2 043
  • Imię:Robert
  • Lokalizacja:Wrocław
Offline

Napisano 24.06.2019 06:05

Nie dajesz mi pełnego logu błędu. Nie cytuj posta nad Tobą, bo to bez sensu
  • +
  • -
  • 1

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#7 Boski Z Polski

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 60
Pomocny

  • Postów:178
  • Steam:steam
  • Imię:Olgierd
  • Lokalizacja:Leszno
Online

Napisano 24.06.2019 10:52

L 06/24/2019 - 11:50:32: [AMXX] Displaying debug trace (plugin "jail_randomday.amxx", version "1.0.0")
L 06/24/2019 - 11:50:32: [AMXX] Run time error 4: index out of bounds 
L 06/24/2019 - 11:50:32: [AMXX]    [0] jail_randomday.sma::losowanie (line 67)
L 06/24/2019 - 11:50:32: [AMXX]    [1] jail_randomday.sma::OnGameHudEnd (line 56)

  • +
  • -
  • 0

#8 Robiin

    Godlike

  • Support Team

Reputacja: 1 103
Super Hero

  • Postów:2 043
  • Imię:Robert
  • Lokalizacja:Wrocław
Offline

Napisano 24.06.2019 15:43

Na pewno podmieniłeś mój kod z poprzedniego posta? Tam nie ma nawet tablicy, w której indeks mógły wychodzić poza jej wielkość. Na pewno to jest 67 linijka?


  • +
  • -
  • 1

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#9 Boski Z Polski

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 60
Pomocny

  • Postów:178
  • Steam:steam
  • Imię:Olgierd
  • Lokalizacja:Leszno
Online

Napisano 24.06.2019 23:58

#include <amxmodx>
#include <amxmisc>
#include <jailbreak>

#define PLUGIN "[Jail] RandomDay"
#define VERSION "1.0.0"
#define AUTHOR "Author"

new id_randomday;

native getGameIndexByName(name[]);

new zabawy[][] = {
	"FREEDAY",
	"AWPDAY",
	"AWPDAY HS",
	"CHOWANY",
	"DZIECI WOJNY",
	"KILLDAY",
	"WOJNA GANGOW",
	"GANIANY",
	"POLOWANIE"
}
public plugin_init() 
{
	register_plugin(PLUGIN, VERSION, AUTHOR);
	
	id_randomday = jail_register_game("RANDOMDAY");
}

public OnDayStartPre(day, szInfo[256], szInfo2[512], setting[10], gTimeRound)
{	
	if(day == SRODA || day == id_randomday)
	{
		jail_set_prowadzacy(0);
		jail_set_prisoners_micro(true, true);
		
		setting[0] = 2;
		setting[1] = 1;
		setting[2] = 1;
		setting[4] = 3;
		jail_set_god_ct(true);
		jail_set_ct_hit_tt(true);
	}
}

public OnDayStartPost(day)
{
	if(day == SRODA || day == id_randomday)
		
	for(new i=1; i<=MAX; i++)
	{
		jail_open_cele();
		jail_set_game_hud(5, "Dzisiaj jest LOSOWANIE na zabawe", 255, 212, 0, -1.0, -1.0);
	}
}

public OnGameHudEnd(day)
{
	if(day == SRODA || day == id_randomday)
	{
		losowanie(day)
	}
}

public losowanie(day)
{
	if(day == SRODA || day == id_randomday)
	{
		new randomGame = random_num(0, sizeof(zabawy) - 1),
		gameIndex = getGameIndexByName(zabawy[randomGame]);
		
		if(gameIndex == -1)
		{
			log_amx("Nieprawidlowa nazwa zabawy. (%i)", randomGame);
			
			return;
		}
		
		jail_set_play_game(gameIndex, true); 	
	}
}
L 06/25/2019 - 00:50:13: [AMXX] Displaying debug trace (plugin "jail_randomday.amxx", version "1.0.0")
L 06/25/2019 - 00:50:13: [AMXX] Run time error 4: index out of bounds 
L 06/25/2019 - 00:50:13: [AMXX]    [0] jail_randomday.sma::losowanie (line 67)
L 06/25/2019 - 00:50:13: [AMXX]    [1] jail_randomday.sma::OnGameHudEnd (line 56)
 
Ogólnie jak skróciłem kod to zawsze było że w 67 jest błąd. Może coś w silniku jest źle? (W silniku dodałem Twój kod)
 
jail_freeday.amxx
jail_awp.amxx
jail_awphs.amxx	
jail_chowany.amxx
jail_dzieciwojny.amxx
jail_kd.amxx
jail_wojnagangow.amxx
jail_ganiany.amxx
jail_polowanie.amxx
jail_randomday.amxx 

 


Użytkownik Boski Z Polski edytował ten post 24.06.2019 23:59

  • +
  • -
  • 0

#10 Robiin

    Godlike

  • Support Team

Reputacja: 1 103
Super Hero

  • Postów:2 043
  • Imię:Robert
  • Lokalizacja:Wrocław
Offline

Napisano 25.06.2019 01:28

Nie kompilujesz dobrze kodu, albo coś masz źle.

56 linijka to "}"

67 linijka to "{"


  • +
  • -
  • 1

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#11 janofer

    Zaawansowany

  • Użytkownik

Reputacja: 7
Nowy

  • Postów:78
  • Lokalizacja:Trojmiasto
Offline

Napisano 25.06.2019 07:16

Spoiler

49 linijka brak nawiasów dla IF {}?


Użytkownik janofer edytował ten post 25.06.2019 07:18

  • +
  • -
  • 1

#12 Boski Z Polski

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 60
Pomocny

  • Postów:178
  • Steam:steam
  • Imię:Olgierd
  • Lokalizacja:Leszno
Online

Napisano 25.06.2019 10:27

Dodałem 

losowanie(day)

do

OnDayStartPost(day)

i nie pojawia się już errorlog, ale pojawia

L 06/25/2019 - 11:21:31: [jail_randomday.amxx] Nieprawidlowa nazwa zabawy. (0)

w zwykłym logu. Nazwy zabaw na 100% dobrze.


  • +
  • -
  • 0

#13 Robiin

    Godlike

  • Support Team

Reputacja: 1 103
Super Hero

  • Postów:2 043
  • Imię:Robert
  • Lokalizacja:Wrocław
Offline

Napisano 25.06.2019 16:01

Najwyraźniej w silniku są zapisane inaczej albo po prostu źle je wpisałeś.
  • +
  • -
  • 1

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#14 Boski Z Polski

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 60
Pomocny

  • Postów:178
  • Steam:steam
  • Imię:Olgierd
  • Lokalizacja:Leszno
Online

Napisano 26.06.2019 13:12


Najwyraźniej w silniku są zapisane inaczej

 

Chodzi o native jail_register_game(name_game[]) w zabawie?


  • +
  • -
  • 0

#15 Robiin

    Godlike

  • Support Team

Reputacja: 1 103
Super Hero

  • Postów:2 043
  • Imię:Robert
  • Lokalizacja:Wrocław
Offline

Napisano 26.06.2019 13:14

Tak
  • +
  • -
  • 1

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#16 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 26.06.2019 13:33

Trza było może uzyć equali albo containi

 

Bo wielkośc liter może mieć znaczenie.

 


Rivit (26.06.2019 13:35):
Generalnie wielkość może mieć znaczenie

  • +
  • -
  • 1

#17 Robiin

    Godlike

  • Support Team

Reputacja: 1 103
Super Hero

  • Postów:2 043
  • Imię:Robert
  • Lokalizacja:Wrocław
Offline

Napisano 26.06.2019 17:20


Trza było może uzyć equali albo containi

 


Oczywiście nazwy zabaw w tablicy "zabawy" muszą być dokładnie takie same, jak te przy ich rejestrowaniu.

 

Może i mogłem użyć, w zabawach nie powtarzają się często nazwy, ale wciąż, dokładnie takie same to dokładnie takie same.


  • +
  • -
  • 1

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#18 Boski Z Polski

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 60
Pomocny

  • Postów:178
  • Steam:steam
  • Imię:Olgierd
  • Lokalizacja:Leszno
Online

Napisano 26.06.2019 22:34


Trza było może uzyć equali albo containi

 

Przy użyciu contain/containi zawsze włączała się pierwsza zabawa.

 

Przy użyciu equal/equali pojawia się [jail_randomday.amxx] Nieprawidlowa nazwa zabawy. (liczba


  • +
  • -
  • 0

#19 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 26.06.2019 22:43

A zmień handler od natywu na taki:

public native_getGameIndexByName(const name[])
{
	param_convert(1);
	return getGameIndexByName(name);
}

i potestuj. 

 


Rivit (27.06.2019 09:26):
Z tym constem - możliwe

  • +
  • -
  • 1

#20 Boski Z Polski

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 60
Pomocny

  • Postów:178
  • Steam:steam
  • Imię:Olgierd
  • Lokalizacja:Leszno
Online

Napisano 27.06.2019 09:07

A zmień handler od natywu na taki:

public native_getGameIndexByName(const name[])
{
	param_convert(1);
	return getGameIndexByName(name);
}

i potestuj. 

Działa tylko że przy kompilowaniu nie powinien znajdować się (const name[]), a samo (name[])


  • +
  • -
  • 0




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

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