Skocz do zawartości

  • Zaloguj korzystając z Facebooka Zaloguj korzystając z Twittera Zaloguj przez Steam Zaloguj poprzez Google      Logowanie »   
  • Rejestracja

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

Rangeban bez banowania adminów.


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

#1 wizu

    Godlike

  • Przyjaciel

Reputacja: 224
Profesjonalista

  • Postów:1217
  • GG:
  • Lokalizacja:Sanok
Offline

Napisano 13.09.2008 11:25

Witam. Na samym początku chciałbym poznać zasadę banowania tego pluginu.
#include <amxmodx>
#include <amxmisc>

public plugin_init()
{
	register_plugin("RangeBan", "1.0", "neuromancer")
	register_dictionary("admincmd.txt")
	register_dictionary("common.txt")
	register_concmd("amx_rangeban", "cmdRangeBan", ADMIN_BAN, "<name or #userid> <range> <minutes> [reason]")
}

public cmdRangeBan(id, level, cid)
{
	if (!cmd_access(id, level, cid, 3))
		return PLUGIN_HANDLED
	
	new target[32], cmdrange[2], minutes[8], reason[64]
	
	read_argv(1, target, 31)
	read_argv(2, cmdrange, 1)
	read_argv(3, minutes, 7)
	read_argv(4, reason, 63)
	new range = str_to_num(cmdrange[0])
	
	if(range > 3)
	{
		console_print(id, "[AMXX] Range is too big!")
	}
	else {

	new player = cmd_target(id, target, 9)
	
	if (!player)
		return PLUGIN_HANDLED
	
	new authid[32], name2[32], authid2[32], name[32]
	new userid2 = get_user_userid(player)
	
	get_user_authid(player, authid2, 31)
	get_user_authid(id, authid, 31)
	get_user_name(player, name2, 31)
	get_user_name(id, name, 31)
	
	log_amx("RangeBan: ^"%s<%d><%s><>^" ban and kick ^"%s<%d><%s><>^" (minutes ^"%s^") (reason ^"%s^")", name, get_user_userid(id), authid, name2, userid2, authid2, minutes, reason)

	new temp[64], banned[16], nNum = str_to_num(minutes)
	if (nNum)
		format(temp, 63, "%L", player, "FOR_MIN", minutes)
	else
		format(temp, 63, "%L", player, "PERM")
	format(banned, 15, "%L", player, "BANNED")

	new address[32]
	get_user_ip(player, address, 31, 1)
	new ip1[4], ip2[4], ip3[4], ip4[4], tmp1[32], tmp2[32], iptoban[32]
	
	strtok(address, ip1, 3, tmp1, 31, '.')
	strtok(tmp1, ip2, 3, tmp2, 31, '.')
	strtok(tmp2, ip3, 3, ip4, 3, '.')
	if (range == 0)
	{
		format(iptoban, 31, "%s.%s.%s.%s", ip1, ip2, ip3, ip4)
	}
	if(range == 1)
	{
		format(iptoban, 31, "%s.%s.%s.0", ip1, ip2, ip3)
	}
	if(range == 2)
	{
		format(iptoban, 31, "%s.%s.0.0", ip1, ip2)
	}
	if(range == 3)
	{
		format(iptoban, 31, "%s.0.0.0", ip1)
	}

	if (reason[0])
		server_cmd("kick #%d ^"%s (%s %s)^";wait;addip ^"%s^" ^"%s^";wait;writeip", userid2, reason, banned, temp, minutes, iptoban)
	else
		server_cmd("kick #%d ^"%s %s^";wait;addip ^"%s^" ^"%s^";wait;writeip", userid2, banned, temp, minutes, iptoban)

	new activity = get_cvar_num("amx_show_activity")
	if (activity != 0)
	{
		new players[32], pnum, msg[256], len
		get_players(players, pnum, "c")
		
		for (new i = 0; i < pnum; i++)
		{
			len = format(msg, 255, "%L", players[i], "ADMIN")
			
			if (activity == 1)
				len += copy(msg[len], 255-len, ":")
			else
				len += format(msg[len], 255-len, " %s:", name)
			
			len += format(msg[len], 255-len, " %L", players[i], "BAN")
			len += format(msg[len], 255-len, " %s ", name2)
		
			if (nNum)
				format(msg[len], 255-len, "%L", players[i], "FOR_MIN", minutes)
			else
				format(msg[len], 255-len, "%L", players[i], "PERM")
			
			client_print(players[i], print_chat, "%s", msg)
		}
	}
	console_print(id, "[AMXX] %L", id, "CLIENT_BANNED", name2)
	}
	return PLUGIN_HANDLED
}

Tzn wiem, że dodaje do listip.cfg np 83.1.0.0 i wtedy gdy ktoś ma IP np 83.1.23.233 to go nie wpuści. Ale właśnie tu mam problem. Bo nie wiem, czy amx ma w sobie wbudowane takie coś, że jak czyta lisip.cfg, to jak widzi 83.1.0.0 to obrazu interpretuje to ( te zera) jako każdy adres z początkiem 83.1 czy może jakaś funkcja pluginu blokuje ten adres IP. Przeleciałem źródło rangebana ale nie znalazłem tam żadnej takiej funkcji. chciałbym przerobić ten plugin, żeby ban na zakres był aktywny, ale gdy z tego zakresu próbuje się połączyć admin, to go puszcza. Jednak nie widzę możliwości przerobienia go. Mam nadzieję, że napisałem to zrozumiale. Dzięki za pomoc.
  • +
  • -
  • 0

#2 mgr inż. Pavulon

    C35H60Br2N2O4

  • Przyjaciel

Reputacja: 1725
Godlike

  • Postów:6881
  • Steam:steam
  • Imię:Konrad
  • Lokalizacja:Koniecpol
Offline

Napisano 13.09.2008 11:39

Ban na IP xxx.xxx.0.0 to ma amxx wbudowany i przeróbka tego plugina nic nie da, dopóki zasada pozostanie ta sama.
Jedynie jakiś inny plugin który nie będzie zapisywał banów w pliku listip.cfg tylko swoim.
  • +
  • -
  • 0

#3 wizu

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 224
Profesjonalista

  • Postów:1217
  • GG:
  • Lokalizacja:Sanok
Offline

Napisano 13.09.2008 12:30

Obawiałem się najgorszego :/
Ale nic, będę musiał wziąć się za pisanie.
  • +
  • -
  • 0

#4 mgr inż. Pavulon

    C35H60Br2N2O4

  • Przyjaciel

Reputacja: 1725
Godlike

  • Postów:6881
  • Steam:steam
  • Imię:Konrad
  • Lokalizacja:Koniecpol
Offline

Napisano 13.09.2008 12:54

To nie musi być takie trudne.
Zamiast addip (które bez pluginu i tak może banować zakres) i IP w formacie XXX.XXX.0.0 np. zapisz do pliku IP bez 0 tj XXX.XXX. a przy wchodzeniu na serwa sprawdzaj czy któraś z linijek w pliku zawiera się w IP gracza.

if (get_user_flags(id)&ADMIN_KICK) return PLUGIN_HANDLED
new userIP[16], plikIP[16]
get_user_ip(id, userIP, 15)
plikIP = ip_pobrane_z_pliku
new userID = get_user_userid(id)  
if (contain(userIP, plikIP)!=-1) server_cmd("kick #%d ^"%s^"", userID, Powod)

  • +
  • -
  • 0

#5 grankee

    Godlike

  • Support Team

Reputacja: 507
Wszechwiedzący

  • Postów:1500
  • Lokalizacja:Radom
Offline

Napisano 14.09.2008 11:43

wizu po co Ci to? przecież masz lepszy plugin ode mnie :P
  • +
  • -
  • 0

#6 wizu

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 224
Profesjonalista

  • Postów:1217
  • GG:
  • Lokalizacja:Sanok
Offline

Napisano 14.09.2008 12:23

Hehe, ale jednak nie obraź się, ale wolałbym wiedzieć na czym stoję. (czyt. sma pls) :)

[ Dodano: 14-09-2008, 14:47 ]
sorki, za post pod postem ale wypadł nowy problem, a tematu nowego nie ma co zakładać.
Nie wiem czemu, ale ten kod nie działa
public client_connect(id)
{ 
if (get_user_flags(id) & ADMIN_LEVEL_<img src='http://amxx.pl/public/style_emoticons/<#EMO_DIR#>/cool.gif' class='bbc_emoticon' alt='B)' />
{
client_print ( id, print_console, "Witam admina")	
} else
{
new userIP[16]
get_user_ip(id, userIP, 15)
new userID = get_user_userid(id) 
if (contain(userIP, "83.21")!=-1) server_cmd("kick #%d ^"masz bana^"", userID)
if (contain(userIP, "83.26")!=-1) server_cmd("kick #%d ^"masz bana^"", userID)
}
return PLUGIN_HANDLED
}
Jest to postać po 6 przeróbkach, kombinowałem, ale nie wiem czemu nie działa.
Tzn działa, ale wywala każdego z tego zakresu. Nawet admina. Flagi ma ustawione. Próbowałem z is_user_admin, itp ale też nie działało. Nawet dodałem to
client_print ( id, print_console, "Witam admina")
Żeby zobaczyć czy mi wpisze przy wejściu na serwer, ale nie. (jestem adminem, ale z innego ip)

Chyba, że na poziomie client_connect flagi nie są jeszcze przypisane.
  • +
  • -
  • 0

#7 grankee

    Godlike

  • Support Team

Reputacja: 507
Wszechwiedzący

  • Postów:1500
  • Lokalizacja:Radom
Offline

Napisano 14.09.2008 14:27

Dokładnie, flagi są przypisane na poziomie client_authorized(id)- użyj jej zamiast client_connect.
Jeśli tworzysz tablice 15 elementową to raczej nie będzie możliwe potrać port do niej(nie zmieści się) więc popraw funkcję na
get_user_ip(id,userIP,15,1)
1 dajesz jeśli ma nie pobierać portu
Następna sprawa, po co handlujesz plugin? na końcu zamień na return plugin_continue.
  • +
  • -
  • 0

#8 wizu

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 224
Profesjonalista

  • Postów:1217
  • GG:
  • Lokalizacja:Sanok
Offline

Napisano 14.09.2008 14:36

Dzięki wielkie.
A co do uchwytu, to do tego jeszcze w cpp nie doszedłem i nie wiem do czego to, a że tak było w jakimś pluginie to też tak dałem :)
  • +
  • -
  • 0

#9 grankee

    Godlike

  • Support Team

Reputacja: 507
Wszechwiedzący

  • Postów:1500
  • Lokalizacja:Radom
Offline

Napisano 14.09.2008 15:31

heh wizu po co Ci kod tego ban_neo skoro takich podstaw nie wiesz to nie wiele z niego zrozumiesz:P a opublikowanie go jest wykluczone
  • +
  • -
  • 0

#10 wizu

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 224
Profesjonalista

  • Postów:1217
  • GG:
  • Lokalizacja:Sanok
Offline

Napisano 14.09.2008 19:05

Z natury jestem nieufny i obawiam się kilku linijek :P
new sciezka[ 64 ], nazwa[128]
get_configsdir( sciezka, 63 )
formatex( nazwa, 127, "%s/users.ini", sciezka )
read_file ( nazwa...
Żartuje oczywiście, ale jednak wole mieć sma pluginów. Zawsze coś zmienić można, poznać zasadę działania :) ( to mnie najbardziej interesuje) bo mnie bardzo zaciekawiłeś :P
  • +
  • -
  • 0

#11 choyrack

    Wszechpomocny

  • Użytkownik

Reputacja: 64
Pomocny

  • Postów:369
  • GG:
  • Lokalizacja:Wrocław
Offline

Napisano 14.09.2008 20:53

wizu, Na stronie http://www.amxmodx.org/uaio_check.cgi
  • +
  • -
  • 0

#12 wizu

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 224
Profesjonalista

  • Postów:1217
  • GG:
  • Lokalizacja:Sanok
Offline

Napisano 14.09.2008 20:59

O kurde nie wiedziałem :) Dzięki.
Działa to tylko przy uaio_admin.amxx?
  • +
  • -
  • 0

#13 choyrack

    Wszechpomocny

  • Użytkownik

Reputacja: 64
Pomocny

  • Postów:369
  • GG:
  • Lokalizacja:Wrocław
Offline

Napisano 14.09.2008 21:18

wizu, Nie no tam każdy plugin możesz sprawdzić, to tylko jest podane dla przykładu.
Dokładnie mówiąc tam sprawdza czy w pluginie nie ma kodu, "który pozwala każdemu graczowi, który zna sekretną komendę stać się adminem"
  • +
  • -
  • 0

#14 wizu

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 224
Profesjonalista

  • Postów:1217
  • GG:
  • Lokalizacja:Sanok
Offline

Napisano 15.09.2008 08:02

Aha, a nie wiesz, czy może też sprawdza, czy nie wysyłą gdzieś zawartosci users.ini?
  • +
  • -
  • 0

#15 grankee

    Godlike

  • Support Team

Reputacja: 507
Wszechwiedzący

  • Postów:1500
  • Lokalizacja:Radom
Offline

Napisano 15.09.2008 19:38

ten skrypt jest lipny albo ja jestem za sprytny :P
  • +
  • -
  • 0

#16 darkman

    Wszechwiedzący

  • Przyjaciel

Reputacja: 85
Zaawansowany

  • Postów:553
  • Lokalizacja:inactive
Offline

Napisano 15.09.2008 19:44

choyrack, kolejna osoba która sie głupot naczytała po necie :D nie ma dojścia do kodu skompilowanego pluginu, jedyną możliwością jest ręczna dekompilacja pluginu(bardzo skomplikowana)
  • +
  • -
  • 0

#17 grankee

    Godlike

  • Support Team

Reputacja: 507
Wszechwiedzący

  • Postów:1500
  • Lokalizacja:Radom
Offline

Napisano 15.09.2008 21:39

tzn, może i nie ma dostępu do kodu, ale może być skrypt, który odczytuje jego działanie
  • +
  • -
  • 0

#18 choyrack

    Wszechpomocny

  • Użytkownik

Reputacja: 64
Pomocny

  • Postów:369
  • GG:
  • Lokalizacja:Wrocław
Offline

Napisano 16.09.2008 09:54

Ja przypuszczam, że ten skrypt sprawdza czy nie ma w kodzie maszynowym czegoś co może być efektem ingerencji w users.ini, dodawnie adminów do bazy danych, itp.

Wiadomo, że zdekompilować pluginu nie można (znaczy można ale po co :?: - oczywiście nie do jawnego kodu ale do jakieś postać, która można już edytować) ale jest możliwe jego debugowanie i sprawdzanie co plugin robi na konkretną czynność jaką mu się zada.
  • +
  • -
  • 0

#19 grankee

    Godlike

  • Support Team

Reputacja: 507
Wszechwiedzący

  • Postów:1500
  • Lokalizacja:Radom
Offline

Napisano 17.09.2008 17:34

choyrack, mam wrażenie, że albo nie rozumiesz niektórych słów, których używasz, albo nie potrafisz sklecić sensownie zdania.
  • +
  • -
  • 0

#20 choyrack

    Wszechpomocny

  • Użytkownik

Reputacja: 64
Pomocny

  • Postów:369
  • GG:
  • Lokalizacja:Wrocław
Offline

Napisano 17.09.2008 18:06

grankee, Skoro wiesz lepiej to cieszy mnie to bardzo, oby więcej takich użytkowników.
  • +
  • -
  • 0




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

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