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

Sprawdzenie czy pobrano wartość


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

#1 ziutek_82

    Życzliwy

  • Użytkownik

Reputacja: 2
Nowy

  • Postów:30
  • Lokalizacja:sie biora dzieci?
Offline

Napisano 15.11.2009 04:44

Jest troche pozno i moze stad moj problem z mysleniem ale nie wiem jak sprawdzic czy jest wartosc w miejscu
g_IPDescription[id] potrzebuje warunek ktory sprawdza czy w tablicy jest tekst jesli jest to warunek1 else warunek2
if g_IPDescription[id] jest rozne od 0 to
  • +
  • -
  • 0

#2 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 985
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Online

Napisano 15.11.2009 10:37

if( g_IPDescription[id] != 0){

//jakis kod

else

{

//inny kod

}

  • +
  • -
  • 0

#3 ziutek_82

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 2
Nowy

  • Postów:30
  • Lokalizacja:sie biora dzieci?
Offline

Napisano 15.11.2009 19:08

Nie udalo mi sie w ten sposob skompilowac

plugin ma kod
#include <amxmodx>
#include <amxmisc>
#define MAX_PLAYERS 32
#define MAX_DESCRIPTION_LEN 64
#define MAX_HOSTNAME_LEN 180
#define SHIFT_8  8
#define SHIFT_16 16
#define SHIFT_24 24
#define MAX_SUBNETS 1024 // Maximum records in ipdesc.ini file
enum ChatColor
{
	CHATCOLOR_YELLOW = 1, 	// Yellow
	CHATCOLOR_GREEN, 		// Green Color
	CHATCOLOR_TEAM_COLOR, 	// Red, grey, blue
	CHATCOLOR_GREY, 		// grey
	CHATCOLOR_RED, 			// Red
	CHATCOLOR_BLUE, 		// Blue
}

new PLUGINNAME[] = "ShowIP"
new PLUGINVERSION[] = "1.61"
new g_SubnetIP[MAX_SUBNETS]
new g_SubnetMask[MAX_SUBNETS]
new g_SubnetDescription[MAX_SUBNETS][MAX_DESCRIPTION_LEN + 1]
new g_SubnetCount = 0
new g_IPDescription[MAX_PLAYERS + 1][MAX_DESCRIPTION_LEN + 1]
new g_HostName[MAX_PLAYERS + 1][MAX_HOSTNAME_LEN + 1]
new amx_showip_unknown
public plugin_init()
{
	register_plugin(PLUGINNAME, PLUGINVERSION, "ahtoh")

	register_cvar(PLUGINNAME, PLUGINVERSION, FCVAR_SERVER | FCVAR_SPONLY)
	register_concmd("amx_ip", "cmdShowIP", ADMIN_KICK,"- shows players IPs")

	new configsDir[64]
	get_configsdir(configsDir, sizeof(configsDir)-1)
	format(configsDir, sizeof(configsDir)-1, "%s/ipdesc.ini", configsDir)

	loadSubnets(configsDir) // Load IP Descriptions from ipdesc.ini
	
}

public cmdShowIP(id)
{
        new mapname[32]
        new online = get_playersnum()
        new maxplayers = get_cvar_num ("sv_visiblemaxplayers")
	new players[32], inum, userip[16], name[32]
	
	get_mapname(mapname, 31)
	get_players(players, inum)
        console_print(id, "")
        console_print(id, "")
        console_print(id, "")
	console_print(id, "____________________________________________")
 	console_print(id, "")
	console_print(id, "   - Nazwa serwera: FragArena [FFA] @ FragArena.pl | HitMe.pl")
   	console_print(id, "   - IP Serwera: 91.203.133.28:27050")
 	console_print(id, "   - Biezaca mapa: %s", mapname)
 	console_print(id, "   - Graczy na serwerze: %d/%d", online, maxplayers)
        console_print(id, "")
	console_print(id, "Lista graczy:")
	for (new a = 0; a < inum; ++a)
	{
		get_user_ip(players[a],userip,sizeof(userip)-1,1)
		get_user_name(players[a], name, sizeof(name)-1)
		console_print(id, "%2d  %-25.24s %-20s %-33.32s %s", players[a], name, userip, g_HostName[players[a]], g_IPDescription[players[a]])
	}
        console_print(id, "")
	console_print(id, "____________________________________________")
	
	return PLUGIN_HANDLED
}

public client_authorized(id)
{
	new userip[16]
	get_user_ip(id,userip,sizeof(userip)-1,1)
	get_ip_description(userip, g_IPDescription[id], MAX_DESCRIPTION_LEN)
	return PLUGIN_CONTINUE
}

// Find subnet description
get_ip_description(const ip[], description[], maxlen)
{
	new numIP = ip_to_num(ip)

	for (new i = 0; i < g_SubnetCount; i++)
	{
		if (apply_mask(numIP, g_SubnetMask[i]) == g_SubnetIP[i])
		{
			copy(description, maxlen, g_SubnetDescription[i])
			return 0
		}
	}

	get_pcvar_string(amx_showip_unknown, description, maxlen)

	return -1
}

// IP to NUM
ip_to_num(const ip[])
{
	new n1[4], n2[4], n3[4], n4[4]
	new tmpStr[16]
	
	copy(tmpStr, sizeof(tmpStr)-1, ip)
	replace_all(tmpStr, sizeof(tmpStr)-1, ".", " ")
	if (parse(tmpStr, n1, sizeof(n1)-1, n2, sizeof(n2)-1, n3, sizeof(n3)-1, n4, sizeof(n4)-1) != 4)
		return -1 // wrong ip address
		
	return (str_to_num(n1) << SHIFT_24) + (str_to_num(n2) << SHIFT_16) + (str_to_num(n3) << SHIFT_8) + str_to_num(n4)
}

// this rounds ip to its subnet by given mask
apply_mask(const numIP, const maskBit)
{
	if (maskBit < 0 || maskBit > 32)
		return -1 // wrong mask

	new shift = 32 - maskBit
	
	return (numIP >> shift) << shift 
}

loadSubnets(szFilename[])
{
	g_SubnetCount = 0
	
	new File=fopen(szFilename,"r");

	if (File)
	{
		new Text[256]
		new subnet[24], subnetIP[16], subnetMask[8]
	
		while(g_SubnetCount < MAX_SUBNETS && !feof(File))
		{
			fgets(File,Text,sizeof(Text)-1);

			trim(Text)
			
			// comment or blank line
			if (Text[0]==';' || Text[0] == 0) 
			{
				continue;
			}

			strbreak(Text, subnet, sizeof(subnet)-1, g_SubnetDescription[g_SubnetCount], MAX_DESCRIPTION_LEN)

			replace(subnet, sizeof(subnet)-1, "/", " ")
			if (parse(subnet, subnetIP, sizeof(subnetIP)-1, subnetMask, sizeof(subnetMask)-1) != 2)
				continue // wrong subnet
			
			g_SubnetIP[g_SubnetCount] = ip_to_num(subnetIP)
			g_SubnetMask[g_SubnetCount] = str_to_num(subnetMask)
			
			++g_SubnetCount
		}
	}

	return 1
}
Funkcja o ktora mi chodzi ma wyswietlac opis sieci pobany z pliku
Chce zrobic cos takiego, ze gdy adresu nie ma w pliku to g_IPDescription[id] powinno byc rowne 0
czyli
if( g_IPDescription[id] != 0){
console_print(id,"%d - %s - %s - NonSteam - %s ", players[a], name, userip,g_IPDescription[players[a]])
}
else console_print(id,"%d - %s - %s - NonSteam", players[a], name, userip)

Roznica subtelna ale podoba mi sie gdy jest "-" pomiedzy wyswietlanymi informacjami a gdy g_IPDescription[id] jest pusty to zostaje mi "-" na koncu linijki

obecnie przy probie kompilacji mam blad
Error: Array must be indexed (variable "g_IPDescription") on line 71
Error: Invalid expression, assumed zero on line 73

[ Dodano: 17-11-2009, 05:10 ]
No dobra uzyskalem dane przy pomocy komendy
if(str_to_float(g_IPDescription[players[a]])!=0)
Plugin dziala jak nalezy i wypisuje Opis sieci przy pomocy g_IPDescription
Mam tylko jedno pytanie, gdy pobieram tekst przy pomocy tej komendy
to tlumaczac na komputerowy :P
Jezeli zamien_dane_na_tekst(dane)jest rozny od zera to
warunek1
w przeciwnym wypadku
warunek2

Nie wiem tylko czy ja to dobrze sobie tlumacze ale jak dam ten warunek to komendy sa odwrotnie czyli jesli pobierze mi tekst z pliku czyli jest on rozny od zera to wykonuje warunek2
a gdy tego tekstu w pliku nie ma to robi warunek1 :P
Jest mi ktos w stanie wytlumaczyc dlaczego tak sie dzieje ?
  • +
  • -
  • 0




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

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