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
 

Aramis - zdjęcie

Aramis

Rejestracja: 08.05.2016
Aktualnie: Nieaktywny
Poza forum Ostatnio: 17.03.2023 23:19
-----

Moje tematy

[ROZWIĄZANE] [Problem] Menu wyboru VIPa tylko na mapach DE/CS

03.02.2023 00:30

Mam VIPa z forumowego generatora. Tworzy on menu od trzeciej rundy:

public menu_handler(id, menu, item){
	if(is_user_alive(id)){
		if(gRound>=3){
			if(item==0){
				menu_1_handler(id);
			}
			if(item==1){
				menu_2_handler(id);
			}
			if(item==2){
				menu_3_handler(id);
			}
		}
	}
	menu_destroy(menu);
	return PLUGIN_HANDLED;

Czy jest możliwość, żeby funkcja dodatkowo sprawdzała rodzaj granej mapy? Chciałbym, aby menu włączało się tylko dla map CS/DE, ale było nieaktywne gdy grane są AIM/FY itd.

 

[ROZWIĄZANE] [Problem] Formatowanie w HTML

01.02.2023 03:44

Mam dwa pluginy, jeden wykorzystuje komendę /topczas do sprawdzania ile kto przegrał na serwerze.

Drugi to medale, który wyświetla ilość medali i ich sumę w komendzie /medale.

 

Chciałbym, aby ten pierwszy też był tak ładnie sformatowany jak ten drugi. Czy ktoś może mi pomóc? :)

 

Próbowałem na własną rękę, ale paliło to na panewce...

 

Kod .sma dla medali:

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <sqlx>
#include <colorchat>

new const nazwy[][] 	= { "Zlote", "Srebrne", "Brazowe" }

new Handle: g_SqlTuple;
new gQuery[512];

enum _:staty { KILL, GOLD, SILVER, BRONZE }
enum _:cvary { HOST, PASS, USER, DBNAME, MIMPLR }

new gStaty[staty][33];
new gCvary[cvary];
new gNick[33][33];

new gData[2048], len, gLast;

public plugin_end() SQL_FreeHandle(g_SqlTuple);

public plugin_init() {
	register_plugin("Medale SQL Ver", "1.0", "byCZEK");
	
	register_event("DeathMsg", "event_death", "a");
	
	register_message(SVC_INTERMISSION, "MsgIntermission");
	
	register_clcmd("say /medale", "MenuMedali");
	
	gCvary[HOST] 	= register_cvar("medale_hostname",	"hostname");
	gCvary[PASS] 	= register_cvar("medale_password", 	"password");
	gCvary[USER] 	= register_cvar("medale_username",	"username");
	gCvary[DBNAME] 	= register_cvar("medale_dbname", 	"db");
	gCvary[MIMPLR]	= register_cvar("medale_minp", 		"3");
	
	new temp[staty][64];
	
	get_pcvar_string(gCvary[HOST], 		temp[HOST], 63);
	get_pcvar_string(gCvary[PASS], 		temp[PASS], 63);
	get_pcvar_string(gCvary[USER], 		temp[USER], 63);
	get_pcvar_string(gCvary[DBNAME], 	temp[DBNAME], 63);
	
	g_SqlTuple = SQL_MakeDbTuple(temp[HOST], temp[USER], temp[PASS], temp[DBNAME]);
	
	if(g_SqlTuple == Empty_Handle)
		set_fail_state("Nie mozna utworzyc uchwytu do polaczenia.");
	
	new iErr, szError[32];
	new Handle:link = SQL_Connect(g_SqlTuple, iErr, szError, 31);
	if(link == Empty_Handle){
		log_amx("Error (%d): %s", iErr, szError);
		set_fail_state("Brak polaczenia z baza danych");
	}
	
	new Handle:query;	
	query = SQL_PrepareQuery(link,
	"CREATE TABLE IF NOT EXISTS `medale` ( \
		`id` int(5) NOT NULL auto_increment, \
		`nick` varchar(36) NOT NULL, \
		`kill` INT(11) NOT NULL  DEFAULT 0, \
		`gold` INT(11) NOT NULL  DEFAULT 0, \
		`silver` INT(11) NOT NULL  DEFAULT 0, \
		`bronze` INT(11) NOT NULL  DEFAULT 0, \
		PRIMARY KEY  (`id`) \
	)");
	SQL_Execute(query);
	SQL_FreeHandle(query);
	
	WczytajMedale();
}

public client_putinserver(id) {
	Wyczysc(id);		
	get_user_name(id, gNick[id], 32);
	
	formatex(gQuery, charsmax(gQuery), "SELECT * FROM `medale` WHERE `nick` = ^"%s^"", gNick[id]);
	new ids[1]; ids[0] = id;
	SQL_ThreadQuery(g_SqlTuple, "handleLoadData", gQuery, ids, 1);
}

public client_disconnect(id) {
	formatex(gQuery, charsmax(gQuery), "UPDATE `medale` SET `kill` = %d, `gold` = %d, `silver` = %d, `bronze` = %d WHERE `nick` = ^"%s^"", gStaty[KILL][id], gStaty[GOLD][id], gStaty[SILVER][id], gStaty[BRONZE][id], gNick[id]);
	SQL_ThreadQuery(g_SqlTuple, "handleStandard", gQuery);
	
	Wyczysc(id);
}

public Wyczysc(id) {
	for(new i = 0; i < staty; i++)
		gStaty[i][id] = 0;
}

public WczytajMedale() {
	gLast = get_systime();
	SQL_ThreadQuery(g_SqlTuple, "handeLoadRank", "SELECT * FROM `medale` ORDER BY `gold` DESC LIMIT 15");
}

public handleLoadData(failstate, Handle:query, error[], errnum, data[], size){
	if(failstate != TQUERY_SUCCESS){
		log_amx("SQL Load error: %s",error);
		return;
	}
	
	new id = data[0];
	if(!is_user_connected(id)) return;
	
	if(SQL_MoreResults(query)) {
		gStaty[KILL][id]		= SQL_ReadResult(query, 2);
		gStaty[GOLD][id]		= SQL_ReadResult(query, 3);
		gStaty[SILVER][id]		= SQL_ReadResult(query, 4);
		gStaty[BRONZE][id]     		= SQL_ReadResult(query, 5);
	} else {		
		formatex(gQuery, charsmax(gQuery), "INSERT INTO `medale` (`nick`) VALUES (^"%s^")", gNick[id]);
		SQL_ThreadQuery(g_SqlTuple, "handleStandard", gQuery);
	}
}

public handleStandard(failstate, Handle:query, error[], errnum, data[], size) {
	if(failstate != TQUERY_SUCCESS) {
		log_amx("SQL Insert error: %s",error);
		return;
	}
}

public event_death() {
	new kid = read_data(1);
	new vid = read_data(2);
	
	if(kid != vid && get_user_team(kid) != get_user_team(vid))
		gStaty[KILL][kid]++;
}

public MenuMedali(id) {
	new m = menu_create("[BLABLA] Menu medali:", "MenuMedali_");
	
	menu_additem(m, "Twoje medale");
	menu_additem(m, "Ranking medali");
	
	menu_setprop(m, MPROP_EXIT, MEXIT_ALL);
	menu_display(id, m);
}

public MenuMedali_(id, m, i) {
	if(i == MENU_EXIT) {
		menu_destroy(m);
		return PLUGIN_CONTINUE;
	}
	
	switch(i) {
		case 0: { TwojeMedale(id); 	}
		case 1: { RankingMedali(id); 	}
	}
	
	return PLUGIN_CONTINUE;
}

public TwojeMedale(id) {
	new m = menu_create("Twoje medale", "TwojeMedale_");
	new t[128];
	
	for(new i = 1; i < staty; i++) {
		formatex(t, charsmax(t), "%s: \r%d", nazwy[i-1], gStaty[i][id]);
		menu_additem(m, t);
	}
	
	menu_display(id, m);
}

public TwojeMedale_(id, m) menu_destroy(m);

public RankingMedali(id) {
	if(get_systime() - gLast > 20) {
		WczytajMedale();
	}
	
	show_motd(id, gData, "TOP15 - Medale");
}

public handeLoadRank(failstate, Handle:query, error[], errnum, data[], size) {
	if(failstate != TQUERY_SUCCESS) {
		log_amx("SQL Load error: %s",error);
		return;
	}
	
	new nick[33], medale[4], i = 0;
	len = formatex(gData, charsmax(gData), "<body bgcolor=#000000><font color=#FFB000><pre>%2s %-22.22s %6s %8s %8s %5s^n", "#", "Nick", nazwy[0], nazwy[1], nazwy[2], "Suma");
	
	while(SQL_MoreResults(query)) {
		i++;
		SQL_ReadResult(query, 1, nick, 32);
		
		medale[0] = SQL_ReadResult(query, 3);
		medale[1] = SQL_ReadResult(query, 4);
		medale[2] = SQL_ReadResult(query, 5);
		
		medale[3] = medale[0] + medale[1] + medale[2];
		
		replace_all(nick, charsmax(nick), "<", "[");
		replace_all(nick, charsmax(nick), ">", "]");
		
		len += formatex(gData[len], charsmax(gData) - len, "%2d %-22.22s %6d %8d %8d %5d^n", i, nick, medale[0], medale[1], medale[2], medale[3]);
		
		SQL_NextRow(query);
	}
}

public MsgIntermission() {
	new name[33], players[32], best[3], num, id, fragi;
	get_players(players, num, "h");
	
	if(num < get_pcvar_num(gCvary[MIMPLR]))
		return PLUGIN_CONTINUE;
	
	new const typ[][] = { "Zloty", "Srebrny", "Brazowy" }
	
	for(new i = 0; i < 3; i++) {
		for(new j = 0; j < num; j++) {
			id = players[j];
			
			if(!is_user_connected(id) || best[0] == id || best[1] == id)
				continue;
			
			if(get_user_frags(id) > fragi) {
				fragi = get_user_frags(id);
				best[i] = id;
			}
		}
		fragi = 0;
		
		if(best[i]) {
			gStaty[1+i][best[i]]++;
			get_user_name(best[i], name, 32);
			ColorChat(0, TEAM_COLOR, "[BLABLA]^x04[Medale]^x03 %s^x01 -^x04 %s medal! ^x03(%i miejsce)", name, typ[i], i+1);
		}
	}
	return PLUGIN_CONTINUE;
}

Kod .sma dla czasu gry:

#include <amxmodx>
#include <amxmisc>
#include <fvault>
#include <colorchat>

#define PLUGIN "Time"
#define VERSION "1.1"
#define AUTHOR "StarMazter"

#define MAXPLAYERS 32
#define MAX_BUFFER_LENGTH 2047

new szVault[] = "Time";

new iTotalLevels = 1;

new szLevels[][128] = {
	"Noob 1",
	"Noob 2"
};

new szTimes[][64] = {
	"1",
        "2"
};

new Trie:SaveTime;
new Trie:Rank;
new Trie:Name;

new TotalRanks;

new iCurrentTime[MAXPLAYERS+1];

new sBuffer[MAX_BUFFER_LENGTH + 1]  

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR);
	
	register_clcmd("say /topczas", "CmdTimeTop"); // Register Commands.
	register_clcmd("say /czas", "CmdTime");
	register_clcmd("say /poziomy", "CmdLevels");
}

public plugin_cfg()
{
	SaveTime = TrieCreate();
	Rank = TrieCreate()
	Name = TrieCreate()
	LoadData();
}

public plugin_end()
{
	TrieDestroy(SaveTime); // Delete Trie to prevent bugs
	TrieDestroy(Rank);
}

LoadData()
{
	new iTotal = fvault_size(szVault);

	new szSteamId[32], szName[32], szTime[32], szData[64], szKey[32];
	for( new i = 0; i < iTotal; i++ )
	{
		fvault_get_keyname(szVault, i, szSteamId, sizeof(szSteamId) - 1); // Return Saved Values.
		fvault_get_data(szVault, szSteamId, szData, sizeof(szData) - 1);
		
		parse(szData, szName, sizeof(szName) - 1, szTime, sizeof(szTime) - 1)
		
		TrieSetCell(SaveTime, szSteamId, str_to_num(szTime)) // Set the players new time to the Cell.
		
		num_to_str(TotalRanks, szKey, sizeof(szKey) - 1)
		
		TrieSetString(Name, szKey, szName)
		TrieSetCell(Rank, szKey, str_to_num(szTime))
		TotalRanks++
	}
}

SaveData(id)
{
	new szSteamId[32], szName[32], szTime[32], szData[64];
	get_user_authid(id, szSteamId, 31) // Retrieve Steamid.
	get_user_name(id, szName, 31)
	
	TrieSetCell(SaveTime, szSteamId, iCurrentTime[id]) // Set the players new time to the Cell.
	
	num_to_str(iCurrentTime[id], szTime, sizeof(szTime) - 1) // Set the num to a string
	formatex(szData, sizeof(szData) - 1, "^"%s^" %s", szName, szTime)
	
	fvault_set_data(szVault, szSteamId, szData) // Set data to the vault.
}

public client_authorized(id)
{
	new szSteamId[32];
	get_user_authid(id, szSteamId, sizeof(szSteamId) - 1) // Retrieve Steamid.
	
	TrieGetCell(SaveTime, szSteamId, iCurrentTime[id]); // Load user's old time.
}

public client_disconnected(id)
{
	new iAddTime = get_user_time(id); // Getting the user's hes current time.
	
	iCurrentTime[id] += iAddTime; // Adding  hes new time to hes old time.
	
	SaveData(id)
}

public CmdTimeTop(id)
{
	new iRanks[10], iRanking[10], szKey[5], iTemp, z
	
	for(new x; x < 10; x++)
	{
		for(new i=0; i <= TotalRanks; i++)
		{
			num_to_str(i, szKey, sizeof(szKey) - 1)
			TrieGetCell(Rank, szKey, iTemp)
			
			if(x == 0)
			{
				if(iRanks[x] < iTemp)
				{
					iRanks[x] = iTemp
					iRanking[x] = i
					
					if(z<x)
						z=x
				}
			}
			else
			{
				if(iRanks[x] < iTemp && iRanks[x-1] > iTemp)
				{
					iRanks[x] = iTemp
					iRanking[x] = i
					
					if(z<x)
						z=x
				}
			}
		}
	}
		
	new szName[32]
	new iLen
	
	iLen = format(sBuffer, MAX_BUFFER_LENGTH, "<body bgcolor=#000000><font color=#FFB000><pre>")
	iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "#%s             %s              %s^n", "Rank", "Nick", "Czas na serwerze")
	
	for(new y; y <= z; y++)
	{
		num_to_str(iRanking[y], szKey, sizeof(szKey) - 1)
		TrieGetCell(Rank, szKey, iTemp)
		TrieGetString(Name, szKey, szName, sizeof(szName) - 1)
	
		iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "#%i              %s                              %i ^n", y + 1, szName, iTemp)
	}
	
	show_motd(id, sBuffer, "Czas gry - TOP 10")
}



public CmdTime(id)
{
	new iSecTempTime, iLevel, iRank, iTime, szKey[5];
	
	iSecTempTime = (iCurrentTime[id] + get_user_time(id)) // Get user's current time
	
	for(new i; i < iTotalLevels; i++)
	{
		if((iSecTempTime/3600) >= str_to_num(szTimes[i])) // Compare with presseted levels.
		{
			iLevel++ // Add a level
		}
	}
	
	iRank=1
	
	for(new i; i < TotalRanks + 1; i++)
	{
		num_to_str(i, szKey, sizeof(szKey) - 1)
		TrieGetCell(Rank, szKey, iTime)
		
		if(iCurrentTime[id] < iTime)
		{
			iRank++
		}
	}
	
	ColorChat(id,TEAM_COLOR,"[BLABLA]^1 Twoj czas gry:^4 %i ^1godzin. Ranking:^4 %i^1/^4%i ^3[%i minut]", iSecTempTime/3600, iRank, TotalRanks, iSecTempTime/60);
	ColorChat(id,TEAM_COLOR,"[BLABLA]^1 %s", szLevels[iLevel])
}

public CmdLevels(id)
{
	ColorChat(id,TEAM_COLOR,"[BLABLA]^1 Sprawdz konsole.");
	
	for(new i; i < iTotalLevels; i++) 
	{
		console_print(id, "%s", szLevels[i]) // Print all levels in user's console
	}
}

Wiem, że główna zmiana będzie pod względem:

<body bgcolor=#000000><font color=#FFB000><pre>%2s %-22.22s %6s %8s %8s %5s^n

Tylko jak to spiąć w całość... Chciałbym, żeby to było wyświetlane tj. w normalnym TOP15, z takim ładnym formatowaniem. Proszę o pomoc :)

 

[ROZWIĄZANE] [Problem] Licznik wizyt na serwerze

31.01.2023 16:42

Mam plugin, który zlicza liczbę wizyt na serwerze i pokazuje je na życzenie. Problem w tym, że po wejściu na serwer komunikat pokazuje poprawną liczbę, np. "To Twoja 3 wizyta" - i to się zgadza. Natomiast po wpisaniu "/visits" pokazuje liczbę wizyt, która niestety wynosi 49 lub 50 (zależnie od gracza), i nie ulega ona zmianie. Próbowałem usuwać cały plik "visitcounter_db" z nvault, ale wtedy znowu zlicza w pierwszym komunikacie poprawnie od pierwszej wizyty, a po użyciu komendy bez zmian - 49/50. Pewnie drobnostka, proszę o zerknięcie :)

 

Oto kod:

#include <amxmodx>
#include <amxmisc>
#include <nvault>
#include <colorchat>

#define PLUGIN "VisitCounter"
#define VERSION "1.1"
#define AUTHOR "Sebxx"

new c_tmp1, c_tmp2, c_tmp3, c_str1, c_str2, g_vault, visits, last_visit
new stamp[11], prefix[33], web_addr[33], szSteam[35], temp[19], tmp[7]

public plugin_init() 
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	g_vault = nvault_open("visitcounter_db")

	register_clcmd("say /visits", "show_visits")			// komenda do sprawdzania liczby wizyt
	c_str1 = register_cvar("visitcounter_prefix", "[CIACH]")	// prefix przed komunikatami
	c_str2 = register_cvar("visitcounter_webaddr", "www.CIACH.pl")	// adres sieci w komunikacie
	c_tmp1 = register_cvar("visitcounter_adson", "0")		// wlacz komunikat z liczba wizyt
	c_tmp2 = register_cvar("visitcounter_adstime", "0.0")		// co ile sekund wyswietlac komunikat?
	c_tmp3 = register_cvar("visitcounter_interval", "1800")		// po jakim czasie naliczyc nowe wejscie?
}

public client_authorized( id, const authid[] )
{
	if( !is_user_bot( id ) && !is_user_hltv( id ) )
	{
		set_task(10.0, "counter", id, _, _, "a", 1)
		if ( get_pcvar_num(c_tmp1) == 1 )
		{
			set_task(get_pcvar_float(c_tmp2), "show_visits", id, _, _, "b")
		}
	}
}

public counter(id)
{
	if ( is_user_connected( id ) )
	{
		get_user_authid( id, szSteam, charsmax( szSteam ) )
		get_pcvar_string( c_str1, prefix, charsmax(prefix) )
		get_pcvar_string( c_str2, web_addr, charsmax(web_addr) )

		if ( nvault_get( g_vault , szSteam , temp , charsmax( temp ) ) )
		{
			strtok(temp, tmp, charsmax( tmp ), stamp, charsmax( stamp ), ';');
			last_visit = str_to_num( stamp )

			if ( last_visit + get_pcvar_num( c_tmp3 ) <= get_systime() )
			{
				visits = str_to_num( tmp ) + 1
				ColorChat( id, TEAM_COLOR, "%s^x01 To Twoja %d wizyta na naszym serwerze.", prefix, visits )
				ColorChat( id, TEAM_COLOR, "%s^x01 Zarejestruj sie na ^x03%s^x01!", prefix, web_addr )
			}
			else
			{	
				return PLUGIN_CONTINUE
			}
		}
		else
		{	
			visits = 1
			ColorChat( id, TEAM_COLOR, "%s^x01 To Twoja pierwsza wizyta na naszym serwerze!", prefix )
			ColorChat( id, TEAM_COLOR, "%s^x01 Zarejestruj sie na ^x03%s^x01!", prefix, web_addr )
		}

		num_to_str( visits, tmp, charsmax(tmp) )
		num_to_str( get_systime(), stamp, charsmax(stamp) )

		new iLen = 0, iMax = sizeof( temp ) - 1;
		iLen += formatex( temp[iLen], iMax - iLen, tmp )
		iLen += formatex( temp[iLen], iMax - iLen, ";" )
		iLen += formatex( temp[iLen], iMax - iLen, stamp )

		nvault_set( g_vault, szSteam, temp )
	}

	return PLUGIN_CONTINUE
}

public show_visits(id)
{
	if ( is_user_connected( id ) )
	{
		get_user_authid( id, szSteam, charsmax( szSteam ) )
		get_pcvar_string( c_str1, prefix, charsmax(prefix) )
		get_pcvar_string( c_str2, web_addr, charsmax(web_addr) )

		nvault_get( g_vault , szSteam , temp , charsmax( temp ) )
		
		strtok(temp, tmp, charsmax( tmp ), stamp, charsmax( stamp ), ';');

		ColorChat( id, TEAM_COLOR, "%s^x01 To Twoja %d wizyta na naszym serwerze.", prefix, tmp )
		ColorChat( id, TEAM_COLOR, "%s^x01 Zarejestruj sie na ^x03%s^x01!", prefix, web_addr )
	}
}

public client_disconnected(id)
{
	if( task_exists(id) )
	{
		remove_task(id)
	}
}

public plugin_end()
{
	if( g_vault != INVALID_HANDLE )
	{
		nvault_close(g_vault)
	}
}

[ROZWIĄZANE] [Problem] Kościotrup po śmierci - freelook poza mapą

28.01.2023 00:53

Mam problem z tym pluginem:

https://amxx.pl/topic/96569-deathbonesamxx-zamiana-graczy-w-ko%C5%9Bciotrupy/

Po zginięciu gracz zamiast uzyskać podgląd na kolejnego grającego gracza "ląduje" pod mapą z ustawionym freelookiem. Oczywiście, można sobie wybrać spacją kogo chce się obserwować, ale powinien od razu przechodzić do tego widoku zamiast lądować gdzieś w zgliszczach :)

Stary plugin, w temacie jest .sma - może da się coś z tym zrobić?

AMX 1.9

 

[ROZWIĄZANE] [Problem] Poprawne zliczanie ilości rozegranych rund przez VIP

26.01.2023 21:33

Witam, mam problem z VIPem wygenerowanym przez tutejszy generator.

 

Na serwerze mam zainstalowany plugin 60 sek. rozgrzewki na noże. W trakcie rozgrzewki plugin pauzuje wykonywanie plików odpowiedzialnych za działanie VIPa, wznawia w momencie zakończenia rozgrzewki.

W pluginie VIP ustawione mam, aby ten od 3 rundy otrzymywał konkretny zestaw broni. Jednakże ilość tych rund nie jest brana pod uwagę względem wznowienia działania pluginu, tj. jeśli podczas rozgrzewki gracz zginie dwa razy, to po restarcie plugin uznaje, że jest to już trzecia runda, w efekcie od pierwszej "normalnej" dostaje już do wyboru zestaw broni.

 

Nie wiem, który kod wklejać, czy jest sens podawania .sma z generatora? Ew. kod pluginu rozgrzewki?

 

Proszę o podpowiedź, co trzeba to wstawię, dziękuję :)