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
 

wiktor000 - zdjęcie

wiktor000

Rejestracja: 03.09.2018
Aktualnie: Nieaktywny
Poza forum Ostatnio: 14.08.2020 09:32
-----

#760869 Advanced info - w której strefie mapy znajduje się gracz, kara za kampienie n...

Napisane przez Rivit w 19.08.2019 20:43

Plugin powstał, po wielu irytujących meczach w cska, gdzie zespół był do kasacji bo dawali albo złe info, ale nie dawali.

 

opis

Zamysł pluginu był banalny. Tworzymy strefy, a potem pokazujemy graczowi, w której strefie na mapie jest.

Plugin ma pare przydatnych rzeczy jak:

  • kreator stref, dzięki któremu możemy utworzyć sobie strefy na mapie (prosty w obsłudze)
  • kara za kampienie na respie
  • pokazywanie, kto gdzie zginął (lub z którego miejsca został zabity)
  • pokazywanie, gdzie leży paka, jeśli jakiś CT ją zauważył
  • jeśli paka leży zaplantowana i ct zobaczy pake to reszta dostanie info na ktorym BS lezy
  • paka może być zaznaczona na radarze
  • jakieś domyślne pozycje, w których jest wyświetlana informacja o strefie na ekranie
  • omijanie pierwszych kilkunastu sekund rundy, po to by nie spamować wiadomościami od początku rundy
  • natyw, którym możemy pobrać strefe, w której znajduje się jakiś gracz/entity
  • system kolejkowania wiadomosci

2.png

 

cvary

info_display_style 2 				// czyja lokalizacje pokazywac?  0 - nikogo (wyłącz), 1 - ofiary, 2 - zabojcy
info_display_zone_only 0 			// pokazywac tylko nazwy stref czy dodatkowy tekst tez? 0 - nie, 1 - tak
info_hud_holdtime 5.0 				// jak dlugo ma byc pokazywana informacja
info_hudpos 2 					// pozycja gdzie wyswietlac wiadomosci, 0 - kolo radaru, 1 - pod death info, 2 - nizej celownika
info_hudcolor "0 200 0" 			// kolor wiadomosci
info_block_time 20.0 				// jak dlugo blokowac informacje od poczatku rundy
info_bomb_info 1 				// czy pokazywac info na temat pozycji bomby, 0 - nie, 1 - tak
info_bomb_reminder 12.0 			// odstep miedzy powiadomieniami o bombie (czyli takie jakby, jak czesto odswiezac ta wiadomosc)
info_bomb_on_radar 1 				// czy pokazywac pozycje bomby na radarze? 0 - nie, 1 - tak
info_player_zone 1 				// czy pokazywac w ktorej strefie jest gracz? 0 - nie, 1 - tak
info_hudpos_player 2 				// pozycja gdzie wyswietlac wiadomosci dla strefy gracza, 0 - pod radarem, 1 - nad death info, 2 - srodek gora, 3 - pod czatem
info_hudcolor_player "90 222 50" 		// kolor wyzej wymienionej wiadomosci
info_kill_resp_time "30.0"                      // po jakim czasie ma sprawdzic polozenie graczy (czyli ile czasu mozna stac na respie po rozpoczeciu rundy), 0.0 zeby wylaczyc

instalacja

https://amxx.pl/topi...-pluginów-amxx/

 

konfiguracja

Dobra, to teraz pare słów o konfiguracji:

 

Aby zabijało graczy na respie to strefa musi zawierać w swojej nazwie "resp" oraz "tt" (wielkość liter nie ma znaczenia). Czyli strefe od respa tt mozemy nazwac "Resp TT", "Respior tT" itd.

 

Menu kreatora stref mamy pod komendą: /strefy  , a także pod klawiszami Z,X,C (radio1,2,3).

Menu jest na flage: ADMIN_RCON czyli flaga "l" (l jak lama)

1.png
 
No i dobra, po ustawieniu i zapisaniu strefek stworzy nam się plik w configs/info_zone/nazwaMapy.ini, gdzie nazwaMapy to nazwa obecnej mapy (a jakże by inaczej?)
Wrzucam Wam już gotowe strefki do mapy de_dust2 (download niżej), które przygotował wiktor000. Dzięki Ci za to  :blaga: . Wystarczy je wrzucić do wyżej wymienionej ścieżki.
 
Kilka porad co do ustawiania stref:
  • najlepiej jak strefy będa dość duże, a nie kilka malutkich dotyczących tego samego
  • strefy mogą mieć takie same nazwy
  • strefy nie powinny na siebie nachodzić
  • nie zapomnij zapisać stref :D
 
Reszta konfiguracji jest na początku kodu pluginu. Tam można poustawiać jakies bardziej zaawansowane rzeczy, ale nie trzeba ich ruszac w sumie.
Wyżej wymienione cvary można sobie dopisać do amxx.cfg. Cvary dotyczące kolorów odświeżają się co runde.
 
Jeśli hud by migał (mowa tu o tym, który pokazuje gdzie obecnie się znajdujemy) to można zmienić go na dhud - ale proszę o nowy wątek na forum - tam to rozwiążemy
 
 
inne informacje
Natywy:
// dodaje wiadomosc do kolejki wiadomosci dla danego teamu
// team -> 1 - TT, 2 - CT, 0 - all
// message -> wiadomośc
native info_add_message(team, message[]);


// pobiera informacje o strefie w ktorej znaduje sie byt
// ent -> identyfikator bytu (w szczegolnosci gracza)
// buffer -> tablica, do ktorej zostanie skopiowana informacja o strefie
// len -> dlugosc tablicy
// return - true jesli udalo sie znalezc strefe gracza, false gdy nie
native bool:info_get_entity_zone(ent, buffer[], len)

Radze nie napieprzać natywami w jakimś thinku czy coś.

Dzięki temu łatwo zintegrować (już zostało zrobione) takie info po śmierci, bo to domyślne jest na czacie i słabo widać, tak to jest szansa, że więcej osób zauważy dane info ;)

 

Info po śmierci w załączniku. Skorzystałem z tej wersji pluginu: https://amxx.pl/topi...ci-nowa-wersja/

Info wpisane przez gracza zostanie rozesłane do innych poprzez taki sam hud jak w przypadku informacji o bombie, strefie gracza itp.

 

 

Część kodu zakrzywiłem ze swojego starego antyrushera, który był bazowany na jakimś innym antyrusherze :D

Wszelkie sugestie mile widziane!

 

 

download

Pliki stref (wrzucamy do addons/amxmodx/configs/info_zone):

 

Jeśli ktoś chciałby/zrobiłby konfiguracje/edycje/poprawki pod inne mapki to proszę o wrzutke ;)

 

20.08.2019 - dodanie zabijania graczy kampiących na respie.

04.09.2019 - poprawiono wyświetlanie HELP_LINE

07.09.2019 - poprawka w enumie - nie wpływała na działanie pluginu, ale kłuła w oczy

11.02.2020 - dodanie natywu do pobrania pozycji, dodanie pluginu korzystającego z tego natywu (info po smierci)

Załączone pliki


  • +
  • -
  • 10


#760748 SQL Pomoc

Napisane przez Robiin w 15.08.2019 21:47

Pisane na żywca, nic nie testowałem, tylko skompilowałem.

Spoiler

  • +
  • -
  • 2


#760746 Zrozumieć istotę tablic - wstęp

Napisane przez Robiin w 15.08.2019 21:15

Na wstępnie chciałbym zaznaczyć, że próbując zrozumieć tablice musimy mieć podstawowe (choć w pełni opanowane) informacje co do zwyczajnych zmiennych.

Zakładam również, że wiemy jak wyglądają tablice oraz znamy zasadę liczenia od 0.

 

Po przeczytaniu tego przyjdzie czas na poprawną naukę - to tylko wstęp, do którego można wracać i uzupełniać wiedzę.

 

Czym są tablice?

 

Tablice to nic innego jak zbiór wielu wartości w jednej zmiennej. Pozwalają nam na przechowywanie wielu danych z mniejszą ilością kodu, a co najważniejsze - pozwalają nam na zapis stringów (a właściwie napisów, nie stringów, bo to nie to samo [przynajmniej w tym przypadku]).

 

Żeby w pełni zrozumieć zasadę tablic, trzeba uciec się do zrozumienia tego, jak zbudowany jest język, w którym piszemy.

AMXX (lub też pawn) zmienne przechowuje w czymś, co nazywamy komórką ('cell', z j. ang.), w której przetrzymuje tylko i wyłącznie jedną wartość.

 

 

Pojęcia

 

  • Rozmiar tablicy - jest to maksymalna ilość komórek, jakie udostępni nam dana tablica.
  • Typ danych tablicy - typ danych, jakie przechowuje tablica. Cała tablica musi przechowywać ten sam typ danych. (przykładowo Float - dla liczb zmiennoprzecinkowych, bool - dla wartości logicznych)
  • Indeks gracza - unikalny identyfikator gracza przypisywany do niego przy wejściu na serwer (min. 1 max. 32)
  • Indeks tablicy - identyfikator 'pola', z którego chcemy wyciągnąć dane z tablicy
  • charsmax - funkcja w amxx zwracająca maksymalną ilość wartości, jaką możemy 'włożyć' do tablicy

 

Jak działają tablice?

 

 

Sprawa jest bardzo prosta, choć często wyolbrzymiana do tego stopnia, że niejeden sobie odpuścił i zrobił tak:

 

 

 

Zwykła zmienna będzie miała możliwość przechowania tylko jednej wartości w ten sposób:

Zmienna o nazwie 'var' przechowująca wartość '5'.

new var = 5;

Tablice dają nam możliwość przechowania więcej niż jednej wartości, w ten sposób:

Tablica o nazwie 'arr' przechowująca wartości '5' i '6' na indeksach '0' i '1'.

new arr[2]; // Inicjacja tablicy o rozmiarze 2.

arr[0] = 5; // Przypisywanie wartosci '5' do indeksu '0' tablicy 'arr'.
arr[1] = 6; // Przypisywanie wartosci '6' do indeksu '1' tablicy 'arr'.

Możemy ich używać np. do przechowywania informacji o graczach. W tym celu musimy stworzyć tablicę o wielkości o 1 większej niż ilość graczy (domyślnie 32).

 

 

Stwórzmy trzy tablice, które będą przechowywać:

  • Pieniądze gracza (float)
new Float:userMoney[33];
  • Poziom gracza (int)
new userLevel[33];
  • Informacje czy gracz ma vipa (bool)
new bool:isVip[33];

Dlaczego rozmiar to 33:

  • Maksymalna ilość graczy to 32
  • Liczymy od zera (tak wiec jeśli dalibyśmy 32, gracz z indeksem 32 byłby powodem wyjścia poza wielkość tablicy)

 

Przypuśćmy, że na serwerze mamy obecnych trzech graczy. Oto ich dane dla poszczególnych tablic:

// Gracz o indeksie 1:
userMoney[index] = 7.15;
userLevel[index] = 10;
isVip[index] = false;

// Gracz o indeksie 2:
userMoney[index] = 4.19;
userLevel[index] = 3;
isVip[index] = true;

// Gracz o indeksie 3:
userMoney[index] = 9.18;
userLevel[index] = 9;
isVip[index] = true;

Jak wygląda to od strony tablicy:

userMoney[0] = 0.0;
userMoney[1] = 7.15;
userMoney[2] = 4.19;
userMoney[3] = 9.18;

userLevel[0] = 0;
userLevel[1] = 10;
userLevel[2] = 3;
userLevel[3] = 9;


isVip[0] = false;
isVip[1] = false;
isVip[2] = true;
isVip[3] = true;

Dlaczego wszystkie pola z indeksem '0' są równe zero? Dlatego, że nigdy ich nie ustawiliśmy. Gracze na serwerze mają indeksy 1, 2 oraz 3, tak więc tylko te indeksy tablicy będą zmienione.

 

 

Napisy

 

Sprawa z napisami nie jest skomplikowana. Oczywistym powinno już być, że do przechowania napisu musimy mieć tablicę.

Przykładowym napisem będzie "amxx" - chcemy go zapisać do tablicy.

 

Tworzenie tablicy o wielkości 10, żeby na pewno zmieścić nasz napis:

new text[10];

Dodawanie napisu:

formatex(text, charsmax(text), "amxx");

Gotowe - ale co tak naprawdę się stało; do tablicy 'text' przypisane zostały litery, więc tablica teraz wygląda tak:

text[0] = 'a';
text[1] = 'm';
text[2] = 'x';
text[3] = 'x';

Dostęp do konkretnych wartości

 

Aby dostać się do konkretnych wartości, jakie przechowuje tablica musimy mieć indeks - numer 'pola' w tablicy, z którego chcemy wyciągnąć dane.

W przypadku graczy nie jest to dużym problemem - wystarczy podać indeks gracza, a w rezultacie otrzymamy jego dane (dlatego, że byliśmy mądrzejsi i zrobiliśmy tablicę o rozmiarze 33, a nie 32).

Jeśli chodzi o pozostałe przypadki, tutaj sprawa się komplikuje - choć nieznacznie.

 

Wystarczy nam tylko trzeźwe myślenie i trochę wyobraźni.

Aby wyświetlić napis, musimy do funkcji wyświetlającej podać jako argument tę tablicę, w której przechowywany jest dany napis, na którym nam zależy - w tym przypadku nie musimy podawać indeksu, bo nie chcemy pobierać jednej wartości, ale każdą komórkę. (nie chcemy wyświetlać jednej litery, tylko cały napis)

 

W amxxie nie możemy zwrócić napisu, bo jest to tablica (a zwrócić możemy tylko jedną wartość). Obejściem tego problemu jest przekazywanie tablicy.

 

Sposób zły (zwracający tylko jedną wartość, w przypadku napisu tylko jedną literę):

Spoiler

 

Sposób dobry:

Spoiler

 

Sedno - przykłady

 

 

Przechowywanie danych o statusie vip każego gracza z osobna:

Spoiler

 

Wyświetlanie napisu "Informacja w konsoli serwera" w konsoli serwera:

Spoiler

 

Zwiększanie kasy graczowi, który wpisze komendę (z ograniczeniem do jednego na mapę) [nie zwracać uwagi na sam fakt, że można to obejść reconnectując, to tylko przykład :) ]:

Spoiler

 

 

Formatowanie tekstu "amxx" w funkcji:

Spoiler

 

Poszczególne indeksy (dla zobrazowania tablicy):

Spoiler

Wyobrażenie tablicy kluczem do jej zarządzania

 

Jeśli będziemy w stanie wyobrazić sobie jak wygląda tablica, z łatwością będziemy mogli nią zarządzać.

Tablica o rozmiarze 4, która przechowuje dane 3 graczy:

new userData[4];

userData[0] = 0;
userData[1] = 100;
userData[2] = 25;
userData[3] = 7; 

Żeby dostać się do poszczególnych wartości, wystarczy, że jako indeks pola użyjemy indeksu gracza:

userData[index]; 

Jeśli jesteśmy sami na serwerze, nasz indeks będzie (prawdopodobnie) 1, tak więc operacja pokazana powyżej zwróci 100.

 

 

 

Lektura wyczerpująca, niedokładna i pewnie nudna - dlatego jest to tylko wstęp, a o właściwe korzystanie z tablic należy zadbać samemu. Zadawanie pytań na forum nie jest niczym złym, do tego też zachęcamy.


  • +
  • -
  • 15


#760729 Cvary nie działają

Napisane przez AwIlL^^ w 15.08.2019 12:58

Nie przypisałeś wskaźników do zmiennych, które są zwracane przez natyw "register_cvar"
  • +
  • -
  • 1


#760730 Cvary nie działają

Napisane przez Komiks007 w 15.08.2019 13:03

	register_cvar("ile_16000","30")
	register_cvar("ile_8000","14")
	register_cvar("ile_4000","6")

->

	ile_16000 = register_cvar("ile_16000","30")
	ile_8000 = register_cvar("ile_8000","14")
	ile_4000 = register_cvar("ile_4000","6")

  • +
  • -
  • 1


#760715 Zapis do pliku vault zmienna +1

Napisane przez Robiin w 14.08.2019 21:56

Spoiler

  • +
  • -
  • 1


#760633 HUD, po smierci i przed smiercia

Napisane przez Hiko w 12.08.2019 12:35

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fakemeta>
#include <csx>
#include <fun>
#include <colorchat>
#define TASK 666

#define PLUGIN "Rangi Serwer, Rangi Chat, Prefixy"
#define VERSION "3.0"
#define AUTHOR "Paranormal Activity` - przerobka"
native cod_get_user_coins(id);
new countdown;
new ranga[33];
new const limit = 18;
new const limit_min = 1
new const rangi[][] = {
	{80, "Silver I"},
	{150, "Silver II"},
	{220, "Silver III"},
	{350, "Silver IV"},
	{400, "Silver Elite"},
	{500, "Silver Elite Master"},
	{550, "Gold Nova I"},
	{750, "Gold Nova II"},
	{1000, "Gold Nova III"},
	{2250, "Gold Nova Master"},
	{3500, "Master Guardian I"},
	{4500, "Master Guardian II"},
	{5500, "Master Guardian Elite"},
	{6000, "Distinguished Master Guardian"},
	{7500, "Legendary Eagle"},
	{8900, "Legendary Eagle Master"},
	{9999, "Supreme Master First Class"},
	{999999, "THE GLOBAL ELITE"}
}

new Float:liczby[] = {0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0, 1.05, 1.1, 1.15, 1.2, 1.25, 1.3, 1.35, 2000.0}
public logevent_round_start()
{
	countdown = 20
	remove_task(8444)
	set_task(1.0, "odliczanie", 8444,_, _, "a", countdown);
}
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_clcmd("say /rangi", "motd")
	register_cvar("rangi_kolor", "2")
	register_message(get_user_msgid("SayText"),"handleSayText");
	register_message(get_user_msgid("SayText"),"handleSayText1");
	register_logevent("logevent_round_start", 2, "1=Round_Start") 
}

public client_connect(id)
{
	if(is_user_bot(id) || is_user_hltv(id))
		return
	
	new param[1]
	param[0] = id
	set_task(1.0,"rank",TASK+id,param,1,"b")
}

public client_disconnect(id)
{
	if(is_user_bot(id) || is_user_hltv(id))
		return
	
	if(task_exists(TASK+id))
		remove_task(TASK+id)
}

public rank(param[])
{
	new id = param[0]
	new stats[8]
	new body[8]
	static stats1[8], body1[8], rankpos, rankmax
	get_user_stats(id, stats, body)
	rankpos = get_user_stats(id, stats1, body1);
	
	rankmax = get_statsnum();
	
	if(!is_user_alive(id))
	{
		id = pev(id, pev_iuser2);
		if(!id)
			id = param[0]
		new Float:kdratio[33]
		kdratio[id] = float(stats[0]) / float(stats[1])
		
		
		if(kdratio[id] >= liczby[ranga[id]] && stats[0] >= rangi[ranga[id]][0] && ranga[id] < limit)
			ranga[id]++
		
		if(kdratio[id] < liczby[ranga[id]] && ranga[id] > limit_min)
			ranga[id]--
		
		set_hudmessage(0, 255, 0, 0.01, 0.18)
		show_hudmessage(id, "[Forum: szukamy.pl]^n[Ranga: %s]^n[Zabojstwa: %d]^n[K/D Ratio: %0.2f%]^n[Rank: %d / %d]^n[Monety %i]^n[VIP: %s]^n[Czas TT: %i]^n^n[/menu - zobacz]", rangi[ranga[id]][1], stats[0], kdratio[id], rankpos, rankmax,cod_get_user_coins(id),get_user_flags(id) & ADMIN_LEVEL_H ? "TAK" : "NIE",countdown)
	}
	new Float:kdratio[33]
	kdratio[id] = float(stats[0]) / float(stats[1])
	
	
	if(kdratio[id] >= liczby[ranga[id]] && stats[0] >= rangi[ranga[id]][0] && ranga[id] < limit)
		ranga[id]++
	
	if(kdratio[id] < liczby[ranga[id]] && ranga[id] > limit_min)
		ranga[id]--
	
	set_hudmessage(0, 255, 0, 0.01, 0.18)
	show_hudmessage(id, "[Forum: szukamy.pl]^n[Ranga: %s]^n[Zabojstwa: %d]^n[K/D Ratio: %0.2f%]^n[Rank: %d / %d]^n[Monety %i]^n[VIP: %s]^n[Czas TT: %i]^n^n[/menu - zobacz]", rangi[ranga[id]][1], stats[0], kdratio[id], rankpos, rankmax,cod_get_user_coins(id),get_user_flags(id) & ADMIN_LEVEL_H ? "TAK" : "NIE",countdown)
	if(is_user_alive(id) && cs_get_user_team(id) == 1)
	{
		
		if(cs_get_user_buyzone(id) && countdown == 1)
		{	
			ColorChat(id, BLUE, " RESP TT DO 1:40")
			ColorChat(id, RED, " RESP TT DO 1:40")
			ColorChat(id, GREEN , "^x01 RESP TT DO 1:40") 			 
			user_kill(id);
			
		}
		
	}
}
public odliczanie()
{
	if(countdown <= 0)
	{
		remove_task(8444)
		return;
	}
	countdown--;
}

public motd(id)
	if(is_user_connected(id))
	show_motd(id, "rangi.txt", "Rangi na serwerze:");

public handleSayText(msgId,msgDest,msgEnt)
{
	new id = get_msg_arg_int(1);
	if(!is_user_connected(id))      
		return;
	
	new szTmp[256],szTmp2[256];
	get_msg_arg_string(2,szTmp, charsmax(szTmp));
	
	new szPrefix[64];
	formatex(szPrefix,charsmax(szPrefix),"^x04[%s]", rangi[ranga[id]][1]);
	if(!equal(szTmp,"#Cstrike_Chat_All"))
	{
		add(szTmp2,charsmax(szTmp2),szPrefix);
		add(szTmp2,charsmax(szTmp2)," ");
		add(szTmp2,charsmax(szTmp2),szTmp);
	}
	else
	{
		add(szTmp2,charsmax(szTmp2),szPrefix);
		add(szTmp2,charsmax(szTmp2),"^x03 %s1^x01 :  %s2");
	}
	
	set_msg_arg_string(2,szTmp2);
}

public handleSayText1(msgId,msgDest,msgEnt){
	new id = get_msg_arg_int(1);
	
	if(!is_user_connected(id))	return PLUGIN_CONTINUE;
	
	new szTmp[256],szTmp2[256];
	get_msg_arg_string(2,szTmp, charsmax( szTmp ) )
	new szPrefix[64];
	
	if(get_user_flags(id) & ADMIN_LEVEL_H)
		szPrefix = "^4[VIP]";
	
	
	if(!equal(szTmp,"#Cstrike_Chat_All")){
		add(szTmp2,charsmax(szTmp2),szPrefix);
		add(szTmp2,charsmax(szTmp2)," ");
		add(szTmp2,charsmax(szTmp2),szTmp);
	}
	else{
		add(szTmp2,charsmax(szTmp2),szPrefix);
		add(szTmp2,charsmax(szTmp2),"^x03 %s1^x01 :  %s2");
	}
	
	set_msg_arg_string(2,szTmp2);
	
	return PLUGIN_CONTINUE;
}

/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1045\\ f0\\ fs16 \n\\ par }
*/


  • +
  • -
  • 1


#759336 Skiny za Monety

Napisane przez Toldi w 22.05.2019 20:15

opis

 

Jak nazwa wskazuje plugin daje nam możliwość kupna skinów do każdej broni (prawie...). 

Do działania tego pluginu niezbędne jest wgranie monet z coda: https://amxx.pl/topi...-system-monet/ oraz baza danych.

Myślałem nad tym żeby wbudować własny system monet do pluginu ale po co skoro jest już taki plugin w dodatku z tak dużo możliwością konfiguracji za co lecą monety (hosty, vip, itp.)

 

konfiguracja

"Id broni" "Nazwa skina" "Lokalizacja" "Cena" "Flagi"

Id broni - id broni do której ma być dodany skin (nie CSW_). Tu macie spis: https://wiki.alliedm...ons_Information

Nazwa skina - Oczywiste. Max 32 znaki.

Lokalizacja - Ścieżka do naszego modelu. Nie trzeba dopisywać models/ na początku plugin zrobi to za was.

Cena - Ustawiając na 0 skin jest darmowy.

Flagi - Zostaw samo "" żeby skin był dostępny dla każdego. Oczywiście możesz tam wpisać do 5 flag. Wystarczy że gracz będzie posiadał co najmniej jedną z nich żeby mógł kupić/nosić skina. Dobra alternatywa jako dodatek dla vipa, klas premium na codzie itp. Nawet jeżeli skin ma być dostępny dla każdego dopisz na końcu samo "" żeby wszystko działało jak należy.

 

cvary

// SQL
szm_host "localhost" // Host bazy danych
szm_user "root" // Nazwa użytkownika
szm_pass "tajnehaslo" // Haslo do bazy
szm_db "skiny" // Nazwa bazy danych

// Inne
szm_prefix "[Skiny_za_Monety]" // prefix w sayu
szm_logs "1" // Pokaz >  0 - Brak logow | 1 - Wszystkie | 2 - Nie wczytane ... skiny
szm_showhud "1" // 0 wyłącz | 1 wlacz HUD

komendy

new const commands[][]=
{
	"say /skin",
	"say /skiny",
	"say /skins",	
	
	"say_team /skin",
	"say_team /skiny",
	"say_team /skins" // otwiera glowne menu
}

/models - włącza/wyłącza widoczność skinów.

/hud - włącza/wyłącza HUD.

 

inne informacje

Za każdym razem gdy gracz kupi skina zostaje dodany wpis do logów pluginu z nickiem, ip, sid gracza i informacją jaki skin do jakiej broni został kupiony. Plugin posiada własną bibliotekę dzięki czemu możecie pisać własne pluginy np. drop skina ze skrzynki po ofierze itp. Modeli nie dodaje bo trochę to waży a i tak każdy z was swoje doda. Przez pewien czas testowałem działanie pluginy ale wątpię żebym znalazł wszystkie bugi więc nie zdziwcie się jak coś będzie szwankować.

 

Wersja 2.2

 

1. W tej wersji dodano nową, łatwiejszą funkcję wyboru pomiędzy wszystkimi broniami w menu a wybranymi przez nas. Jeśli nie chcesz wszystkich broni w menu za komentuj linię 11 (w admin menu linia 9)

#define ALL_WEAPON_MENU

na

//#define ALL_WEAPON_MENU 

2. Dodano 2 nowe natywy, które znajdziesz w zaktualizowanej bibliotece. Pierwszy do zwrócenia ilości poprawnie wgranych skinów. Drugi do otwarcia menu admina.

3. Udostępniam menu admina w którym można zarządzać również monetami. Menu jest (według mnie) bardzo wygodne gdyż w każdej chwili można zmienić dowolną opcję bez konieczności robienia wszystkiego od początku. Wszystkie czynności które zostały zatwierdzone lądują do logów z SID/IP (SID - dla Steam | IP - dla NonSteam) admina i gracza, któremu został dany/zabrany przedmiot.

Spoiler

4. Dodano dwie nowe komendy dla admina.

/szm_daj - odblokowuje wszystkie skini
/szm_zabierz - zabiera wszystkie skiny prócz tych które są darmowe 

5. Flagę dostępu ustawiasz w linii 14 (dla admin menu w linii 8)

#define FLAGA_DOSTEPU ADMIN_IMMUNITY

6. Drobne poprawki kodu.

 

16/11/2019 

- Usunięto możliwość zabrania więcej monet niż gracz miał.

--------------------------------------------------------------------------------------------------------------------------------

 

17/01/2021

- Naprawiono błąd przez który można było strzelać kosą/wyciągało się nie tą broń co trzeba.

- Od teraz gdy stracimy konto VIP nie można zakładać skinów dostępnych na tę flagę.

- Od teraz wszystkie błędy dotyczące zapisu będą lądować do pliku ERROR_SZM_DATABASE.log

- Kilka drobnych poprawek w kodzie.

 

Admin Menu

- Naprawiono błąd przez który nie można było dać graczowi monet.

- Kilka drobnych poprawek w kodzie.

 

Oczywiście menu admina działa tylko z wersją 2.2 i wyżej.

Pisząc nowe lub edytując powyższe pluginy MUSISZ kompilować je najnowszą biblioteką (jest w paczce v2.2).

 

download

Załączone pliki


  • +
  • -
  • 11


#760272 Skiny za Monety

Napisane przez Toldi w 31.07.2019 22:02

Nowa baza danych naprawiła błąd. Być może przy dodawaniu skinów coś źle zrobić. Jeśli by komuś taki błąd wystąpił wystarczy zresetować wartość w kolumnie currentmodel lub ręcznie u wybranego gracza podmienić wszędzie na -1.


  • +
  • -
  • 1


#752751 [ROZWIĄZANE] Pluginy amxx eventy

Napisane przez Maciuś20 w 19.10.2018 19:47

o to Ci chodzi? 

 

https://amxx.pl/doku...8/is_user_alive

https://amxx.pl/doku...get_user_health


  • +
  • -
  • 1