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
 

Gh0st - zdjęcie

Gh0st

Rejestracja: 21.03.2011
Aktualnie: Nieaktywny
Poza forum Ostatnio: 16.12.2023 21:01
*****

#269920 Jak zrobić niekatywne menu

Napisane przez R3X w 14.07.2011 19:52

ostatni argument przy dodawaniu opcji to callback

new callback = menu_makecallback("cbPilnujMiTuMojeMenu");

public cbPilnujMiTuMojeMenu(id, menu, item){
}
teraz w tej funkcji możesz zwrócić ITEM_ENABLED lub ITEM_DISABLED żeby włączyć/wyłączyć daną opcję


new menu;

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)

	menu = menu_create("Wybierz cos", "mcb");
	
	new cb = menu_makecallback("cbPilnujMiTuMojeMenu");
	
	menu_additem(menu, "Dla wszystkich");			//Item = 0
	menu_additem(menu, "Dla wybranych", "", 0, cb);		//Item = 1
}

public cbPilnujMiTuMojeMenu(id, menu, item){
	if(item  == 1){
		if(xp_gracza[id] <= 5){
			return ITEM_DISABLED;
		}
		else{
			return ITEM_ENABLED;
		}
	}
	return ITEM_ENABLED
}

  • +
  • -
  • 1


#109357 Natywy

Napisane przez R3X w 03.02.2010 00:34

Natywy

1. Opis

Funkcje natywne są dostępne dla każdego zainstalowanego pluginu AMXX. Udostępniają funkcje natywne tworzymy z naszego pluginu jakby dodatkową bibliotekę. Dzięki temu mamy możliwość podziału większego dzieła nie tylko na pliki, a na osobne pluginy. Pozwala to na dużą elastyczność kodu oraz pracę z krótszymi, mniej skomplikowanymi programami.

Krótko: Możemy korzystać z danych jednego pluginu w innym.


2. Przygotowanie

Aby to zadziałało potrzeba dwóch współgrających elementów:

  • pluginu-biblioteki, który obsługuje funkcje
  • pliku .inc, który pozwoli korzystać z tych funkcji w innym pluginie
No i pluginu, który będzie korzystał z dobrodziejstw biblioteki.


Na potrzeby tego artykułu stworzę testową bibliotekę <nicto> (czyt. "nic to")

INC
Weźmy się najpierw za plik .inc. Raz dołączony plik nie będzie więcej potrzebny, więc żeby nie powodował problemów ograniczymy jego wykonywanie:

#if defined _nicto_included
	#endinput
#endif

#define _nicto_included

sprawdzamy czy stała "_nicto_included" istnieje (wymyślamy coś własnego, nazwa powinna być unikatowa)
jeśli tak to kończymy plik (#endinput)
jeśli nie to ją definiujemy, potem dołączana jest reszta pliku

dalej informujemy kompilator, że korzystamy z biblioteki nicto:

#pragma library "nicto"

i dalej nagłówki funkcji(nasze natywy lub forwardy[o nich będzie następny artykuł ;P]), stałe, enumeracje lub całe funkcje (stocki)

cały plik inc może wyglądać np tak:

#if defined _nicto_included
	#endinput
#endif

#define _nicto_included

#pragma library "nicto"

enum stan{
	NIC,
	COS
}

native Float:nic();

native cokolwiek(id, stan:s);

native moze_cos(id, Float:fTime, const szMessage[]);

SMA(1)
Pierwszy kod sma to będzie nasza biblioteka. Sam plugin może działać sobie po swojemu tak jak każdy inny. Kluczowym elementem jest fragment:

public plugin_natives(){
	
}

Po pierwsze rejestrujemy bibliotekę:
register_library("nicto");

Po drugie, trzecie i czwarte:
register_native("nic", "n_nic");
register_native("cokolwiek", "n_cokolwiek");
register_native("moze_cos", "n_moze_cos");

register_native("funkcja_biblioteki", "funkcja_pluginu");
funkcja_biblioteki - to ta z inc`a, będzie wywoływana w innych pluginach
funkcja_pluginu - ona będzie odpowiedzialna za działanie tej pierwszej; jej parametry to id pluginu, w którym wywołano natyw oraz ilość argumentów, zwracany typ musi być zgodny z tym podanym dla funkcja_biblioteki w inc`u


Na tym etapie biblioteka wygląda tak:
#include <amxmodx>
#include <amxmisc>

#define PLUGIN "NicTo Lib"
#define VERSION "1.0"
#define AUTHOR "R3X"


public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
}
public plugin_natives(){
	register_library("nicto");
	register_native("nic", "n_nic");
	register_native("cokolwiek", "n_cokolwiek");
	register_native("moze_cos", "n_moze_cos");
}
//plugin - id pluginu
//params - ilość argumentów
public Float:n_nic(plugin, params){
	
}
public n_cokolwiek(plugin, params){
	
}
public n_moze_cos(plugin, params){
	
}

Funkcja nic ma nagłówek: native Float:nic();
=żadnych parametrów, a zwracać ma floata

skoro 'nic', to możemy zrobić np. to:
public Float:n_nic(plugin, params){
	return 0.0;
}



Funkcja cokolwiek korzysta z typu danych deklarowanego w samym incu. Nic nie stoi na przeszkodzie, aby go tu dołączyć. Problemy się zaczną, gdy będziemy wywoływać własne funkcje natywne w pluginie-bibliotece. Po prostu to nie przejdzie :D



w n_cokolwiek oczekujemy 2 parametrów id, i s; musimy mieć pewność, że są:



public n_cokolwiek(plugin, params){
 	if(params < 2){
 		log_amx("Zbyt malo parametrow funkcji cokolwiek!");
 		return 0;
 	}
 	return 1;

 }



Wartość samych parametrów pobrać nam pozwolą funkcje dla danego typu danych:



get_string(param, dest[], maxlen); // tekst

get_param(param); //komórka pamięci (int, char, bool)

Float:get_param_f(param); //float



get_param_byref(param); // komórka przez referencję

Float:get_float_byref(param); //float przez referencję



get_array(param, dest[], size); //tablica komórek

get_array_f(param, Float:dest[], size); //tablica float`ów




Jako, że tablice bez ‘const’ i jawne referencje pozwalają na zmianę wartości argumentów istnieją też odpowiedniki set_*



set_string(param, dest[], maxlen);


set_param_byref(param, value);

set_float_byref(param, Float:value);



set_array(param, const source[], size);

set_array_f(param, const Float:source[], size);






W każdym przypadku param to numer parametru licząc od lewej zaczynając od 1.





Skupmy się na pobieraniu. Natyw cokolwiek przekazuje id oraz stan:s. Ich wartości w n_cokolwiek to:



new id = get_param(1);
new stan:s = stan:get_param(2);


Aby zachować układ zmiennych i uniknąć ‘tag mismatch’ dokonałem rzutowania do stan:



Załóżmy, że id to index gracza, a funkcja pokazuje mu na czacie komunikat zależny od stanu COS/NIC. Biblioteka powinna teraz wyglądać tak:



#include <amxmodx>
 #include <amxmisc>
 #include <nicto>

 #define PLUGIN "NicTo Lib"
 #define VERSION "1.0"
 #define AUTHOR "R3X"


 public plugin_init() {
 	register_plugin(PLUGIN, VERSION, AUTHOR)
 }

 public plugin_natives(){
 	register_library("nicto");
 	register_native("nic", "n_nic");
 	register_native("cokolwiek", "n_cokolwiek");
 	register_native("moze_cos", "n_moze_cos");

 }
 //plugin - id pluginu
 //params - ilość argumentów
 public Float:n_nic(plugin, params){
 	return 0.0;
 }
 public n_cokolwiek(plugin, params){
 	if(params < 2){
 		log_amx("Zbyt malo parametrow funkcji cokolwiek!");
 		return 0;
 	}

 	new id = get_param(1);
 	if(!is_user_connected(id))
 		return 0;

 	new stan:s = stan:get_param(2);
 	switch(s){
 		case NIC: client_print(id, print_chat, "NIC");
 		case COS: client_print(id, print_chat, "COS");
 	default: return 0;
 	}
 	return 1;
 }

 public n_moze_cos(plugin, params){

 	

 }



Do pełniejszego obrazu natywu potrzebujemy danych z tego pluginu. Utwórzmy tablicę globalną giRandom [33], i przy wejściu na serwer przypiszmy graczowi losową liczbę 0-100.



Niech funkcja może_cos zwróci wartość tablicy z podanego indeksu (id) i wrzuci do logów wartości fTime i szMessage[].



public n_moze_cos(plugin, params){
 	if(params < 3){
 log_amx("Zbyt malo parametrow funkcji moze_cos!");
 		// -1 nie mieści się w przedziale 0-100, więc będzie można wychwycić błąd
 return -1; 
 	}

 	new id = get_param(1);
 	if(id < 0 || id > 32) //nie musi byc gracza, wystarczy ze jest taki indeks w tablicy
 		return -1;

 	new Float:fTime = get_param_f(2);
 	new szMessage[32];
 	get_string(3, szMessage, 31);
 	log_amx("fTime=%f, szMessage = %s",fTime, szMessage);

 	return giRandom[id];

 }

SMA(2)
Teraz pora na plugin, który będzie korzystał z biblioteki. Po prostu dołączamy <nicto> i używamy podanych funkcji np tak:

#include <amxmodx>
#include <amxmisc>
#include <nicto>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "R3X"


public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	log_amx("Nic:%f", nic());
	register_clcmd("say /cokolwiek","cmdCokolwiek");
}
public cmdCokolwiek(id){
	cokolwiek(id, NIC);
	moze_cos(id, 3.14, "Pi");
	return PLUGIN_CONTINUE;
}


Info:
ważne by plugin korzystający z biblioteki był niżej w plugins.ini niż sama biblioteka. W innym przypadku plugin korzystający z biblioteki musisz przefiltrować natywy:
set_native_filter

Załączone pliki


  • +
  • -
  • 45


#269734 [Mod By My] Exp Nie leci

Napisane przez sebul w 14.07.2011 13:31

#include <amxmodx>
#include <nvault>
#include <ColorChat>

#define PLUGIN "ZM-ExMod"
#define VERSION "1.0"
#define AUTHOR "Gh0st"


new xp_gracza[33];
new level_gracza[33];

new g_vault;
new Zapis;
new SyncMessage;
new zm_exp;

new const xp_na_poziom[22] = {
0,
75,
300,
675,
1200,
1875,
2700,
3675,
4800,
6075,
7500,
9075,
10800,
12675,
14700,
16875,
19200,
21675,
24300,
27075,
30000,
1073741824,
}

new Ranga[][] = { "Brak Rangi", "Amatorv2", "Amatorv3", "Amatorv4", "Zawodowiec1", "Zawodowiecv2", "Zawodowiec3", "Zawodowiecv4", "Zawodowiecv5", "Zawodowiecv6", "Zawodowiecv7", "Zawodowiecv8", "Zawodowiecv9", "Zawodowiecv10", "Zawodowiecv11", "Zawodowiecv13", "Zawodowiecv14", "Zawodowiecv15", "Zawodowiecv16", "Zawodowiecv17", "Zawodowiecv18" }

public plugin_init() {
g_vault = nvault_open("ZombieExpMod")

register_plugin(PLUGIN, VERSION, AUTHOR)

register_event("DeathMsg", "DeathMsg", "a")

zm_exp = register_cvar("zm_killxp", "100")
Zapis = register_cvar("zm_savetype", "2") // 1 - SteamID // 2 - Nick

SyncMessage = CreateHudSyncObj()
}
public DeathMsg()
{
new kid = read_data(1) //Zabojca
new vid = read_data(2)
if(is_user_connected(kid) && is_user_connected(vid) && get_user_team(kid) != get_user_team(vid)) {
daj_xp(kid, get_pcvar_num(zm_exp))
Zapisz(vid)
}
}
public daj_xp(id, amount)
{
xp_gracza[id] += amount;
SprawdzPoziom(id)
}
public SprawdzPoziom(id)
{
if(level_gracza[id] < 22)
{
new bool:level_up;
while(xp_gracza[id] >= xp_na_poziom[level_gracza[id]]) //ZAWIERA PETLE WHILE
{
level_gracza[id]++;
level_up = true;
}
if(level_up) {
ColorChat(id,GREEN,"Awansowales na poziom:^x01 %i", level_gracza[id]);
Zapisz(id)
}
PokazInformacje(id);
}
}
public Zapisz(id) //zapisz
{
new AuthID[35]
if(get_pcvar_num(Zapis) == 1)
get_user_authid(id,AuthID,34)
else if(get_pcvar_num(Zapis) == 2)
get_user_name(id,AuthID,34)

new vaultkey[64],vaultdata[128]
formatex(vaultkey,63,"%s-ZM",AuthID)
formatex(vaultdata,127,"%i %i",xp_gracza[id], level_gracza[id])
nvault_set(g_vault,vaultkey,vaultdata)
return PLUGIN_CONTINUE
}

public Wczytaj(id) //wczytaj
{
new AuthID[35]

if(get_pcvar_num(Zapis) == 1)
get_user_authid(id,AuthID,34)
else if(get_pcvar_num(Zapis) == 2)
get_user_name(id,AuthID,34)

new vaultkey[64],vaultdata[128]
formatex(vaultkey,63,"%s-ZM",AuthID)
nvault_get(g_vault,vaultkey,vaultdata,127)

new xpgracza[12], levelgracza[4]
parse(vaultdata, xpgracza, 11, levelgracza, 3)

xp_gracza[id] = str_to_num(xp_gracza)
level_gracza[id] = str_to_num(levelgracza) > 1 ? str_to_num(levelgracza) : 1

return PLUGIN_CONTINUE
}
public client_disconnect(id)
{
Zapisz(id)
remove_task(id);
}
public client_putinserver(id)
{
Wczytaj(id)
set_task(0.5, "PokazInformacje", id, _, _, "b")
}
public PokazInformacje(id)
{
if(!is_user_alive(id))
return PLUGIN_CONTINUE

new AuthID2[35]
get_user_name(id,AuthID2,34)

set_hudmessage(255, 255, 255, 0.05, -1.0, 0, 0.5, 0.5, 0.0, 0.0, 2)
ShowSyncHudMsg(id, SyncMessage, "[Name: %s]^n[Poziom: %i] [Doswiadczenie: %i]^n[Ranga: %s]", AuthID2, level_gracza[id], xp_gracza[id], Ranga[level_gracza[id]]);

return PLUGIN_CONTINUE;
}

  • +
  • -
  • 1


#22865 American Football Mod V.4.0

Napisane przez zer0. w 08.11.2008 10:36

American Football Mod V.4.0
Amerykanski Football jest modem counterstike symulujacym gre w piłkę nożną. Gra sie na stadionie dwoma drużynami.
Zespoły mogą być w dowolnym miejscu od 1 do 11 zawodników. Gra jest kontynuowana do czasu, gdy jeden zespół zdobył maksymalny limit gości i gra jest zakończona. Te dwa zespoły muszą czekać przez 30 sekund, aby uruchomić ponownie nowa rozgrywkę.

Moduły do odblokowania:
fakemeta
cstrike
fun
nvault

Cvary:
m_downs (d:3) - ilość upadków zespołu, aby dojść do pierwszej linii, póki piłka jest w ciągłym ruchu
fm_helpmsg (d:1) - "autopomoc" na gorze ekranu
fm_kickoffs (d:1) - ON/OFF Kickoffs, aby uruchomić grę
fm_kickminlen (d:30) - minimalna długość kopnięcia w piłkę, aby Kickoff zareagował
fm_fieldgoals (d:1) - ON/OFF zakres celów
fm_maxscore (d:49) - Maksymalna ilość player'ow
fm_maxspeed (d:260) - Maksymalna prędkość biegania
fm_playclock (d:5) - ilość czasu (w sekundach) do QB
fm_freezeuser (d:1) - 0= nie zamraża WR / 1= blokuje WR, ale pozwala graczom na kucanie / 2= całkowicie zawiesza WR / 3= całkowicie zawiesza WR chyba, ze piłka jest blisko linii albo cel
fm_allowpitch (d:1) - pozwala na odtwarzanie w piłce nożnej
fm_fumblerate (d:50) - jak często prowadzi do rozwiązania ( 0= żeby wyłączyć )
fm_rushclock (d:0) - Mississippi Rush licznika
fm_afktimer (d:40) - czas w sekundach, zanim gracz zostanie przeniesiony do spec jeśli jest AFK
fm_evenusers (d:4) - jeśli jeden zespół ma więcej graczy następnie Rush sie wyłączą
fm_allowburst (d:1) - pozwala na korzystanie z odtwarzacza
fm_burstspeed (d:350) - maksymalna prędkość biegu gracza z Burst Speed
fm_allowpushoff (d:1) - pozwala na odtwarzacz pchanie / zablokowanie
fm_allowstatreset (d:1) - reset swoich statystyk

Konfiguracja Serwera:
Maksymalna ilość graczy - 10-14
Grawitacja - 500-600, lecz zaleca sie 600

Komendy Gracza:
say /qb - włącza mecz ( Quarterback )
say /help - menu pomocy
say /start - rozpoczęcie nowej gry
say /switch - zamiana drużyn
press +USE key (default "e") - gracz może wykorzystać Speed Burst
press +RELOAD key (default "r") - gracz stosuje mocne kopniecie piłki
press radio1 key (default "z") - uruchamia pole celu

Komendy Admina:
amx_setqb - gracza będzie obecny w składzie QB
amx_setdown <#> - ustawia posiadanie piłki dla danej drużyny
amx_setscore <#> - ustawia gości z danego zespołu
amx_makeburst - gracza może wykorzystać Speed Burst
amx_makekick - przystanki obecnych i siły zespołu kickoff do drugiej drużyny
amx_scrim - włącza tryb turnieju
amx_end - koniec gry
amx_shake - losowo mixy wszystkich zespołów razem. ( Administratorzy i boty są nienaruszone )

Mapy:
Football Mod jest wykorzystywany na mapach de_dust2 oraz na de_rats ..
Dodatkowo w załączniku znajdują sie mapy:
• fm_stadium
• fm_spacebowl
• fm_moneymap
• fm_marioworld
• fm_longhorn
• fm_legoland
• fm_highschool
• fm_phootball
• fm_openfield
• fm_football
• fm_bloodbowl

Instalacja:
Standardowa http://amxx.pl/viewtopic.php?t=20
Ściągnięte pliki z formatem .zip wypakuj i wklej do folderu cstrike

Kliknij, aby zobaczyć serwery z tym Modem

Screeny:
Dołączona grafika
Dołączona grafika
Dołączona grafika
Dołączona grafika


Przepraszam za mój łamany angielski, jeżeli jakieś zdanie jest źle sformułowane proszę o poprawienie.

# Nowsza wersja American Football Mod v5.0

Załączone pliki


  • +
  • -
  • 2


#269155 [Problem] Licznik rund do zmiany mapy by me

Napisane przez Gość w 12.07.2011 21:10

ID - jest to ID gracza, nie serwera, nie wydarzenia tylko gracza. Jeśli chcesz coś pokazać graczowi dajesz id np. client_cmd(id..

A licznik rund nie korzysta z ID bo nie jest graczem ? :P

Mogłoby być tak:

public Poczatek_Rundy()	
{
for(new i=1; i<33; i++) {

set_hudmessage(0, 255, 0, 0.5, 0.2, 0, 6.0, 6.0)
show_hudmessage(i, "Do Zmiany Mapy pozostalo : %i Rund", ilosc_rund)
}
}


ale po co jak 0 = wszyscy gracze ;)


#35733 FakeFull Original v1.7.6

Napisane przez Abes Mapper w 18.01.2009 13:31

FakeFull Original v1.7.6
by (current) JTP10181, (oryginal) Freecode


Dołączona grafika
Plugin daje na serwer fikcyjne boty. Po prostu siedzą sobie na serwerze (na spec).
Jak wchodzi jakiś gracz to jeden bot wychodzi.

Dołączona grafika
amx_addfake <X | @FILL> - Dodaj X botów (X - ilość botów) albo zapełnij serwer (@FILL)
amx_removefake <X | @ALL> - Skasuj X botów (X - ilość botów) albo skasuj wszystkie (@ALL)

Dołączona grafika
Dodaj całość do amxx.cfg

// ****************** FakeFull Settings ******************
//Włącz plugin automatycznie.
//ff_players musi być większe niż 0.
//<1 = ON || 0 = OFF>
ff_automode 1

//Minimum botów które wbiją na serwer.
//Nie wolno ustawiać większej wartości niż taką
//jaką twój serwer może pomieścić graczy bo nikt nie będzie mógł wejść.
//Wymagana wartość powyżej 0 dla ff_automode 1.
ff_players 2

//Opóźnienie kiedy bot wchodzi lub wychodzi.
//Wymagane powyżej 0 dla ff_automode 1 lub ręczne dodawanie botów.
ff_delay 1


Dołączona grafika
Standardowa [ http://amxx.pl/viewtopic.php?t=20 ]
Plik botnames.txt dodajemy do addons/amxmodx/configs
Tam edytujemy nazwy botów.

Dołączona grafika
Fakemeta
Fun

Załączone pliki


  • +
  • -
  • 32


#269149 Plugin na boty na speca

Napisane przez Gość w 12.07.2011 21:05

FakeFull Original v1.7.6 - AMXX.pl: Support AMX Mod X


#218058 Przekierowanie gracza

Napisane przez Gość w 21.02.2011 21:32

Cześć, zrobiłem sobie taki plugin:
#include <amxmisc>

public plugin_init() {
register_plugin("Redirect","1.0a","deLL")

register_cvar("amx_redirect_maxplayers","0")
register_cvar("amx_redirect_server","")
register_cvar("amx_redirect_serverport","")
register_cvar("amx_redirect_serverpw","")
register_cvar("amx_redirect_servertype", "")
}

public client_connect(id)
{
new redirect_server[64], redirect_serverpw[32], redirect_servertype[32], name[32]
new redirect_maxplayers = get_cvar_num("amx_redirect_maxplayers")
new redirect_serverport = get_cvar_num("amx_redirect_serverport")
get_cvar_string("amx_redirect_server",redirect_server,63)
get_cvar_string("amx_redirect_serverpw",redirect_serverpw,31)
get_cvar_string("amx_redirect_servertype", redirect_servertype, 31)

get_user_name(id, name, 31)

if ( (get_playersnum() >= redirect_maxplayers) && (!is_user_admin(id)) && (!has_flag(id, "ab"))) {
if ( !equal(redirect_serverpw, "") ) {
client_cmd(id, "echo ^"[AMXX] Przekierowanie - Haslo serwera to %s^";passworedirect %s",redirect_serverpw,redirect_serverpw)
client_cmd(id, "echo ^"[AMXX] Przekierowanie - Lacze na serwer %s:%d^"passworedirect %s;connect %s:%d",redirect_serverpw, redirect_server, redirect_serverport, redirect_server,redirect_serverport)
} else {
client_cmd(id, "echo ^"[AMXX] Przekierowanie - Lacze na serwer %s:%d^";connect %s:%d",redirect_server,redirect_serverport,redirect_server,redirect_serverport)
}
client_print(0, print_chat, "[AMXX] Gracz %s zostal przekierwany na serwer %s MOD. Sprawdz to: %s:%d", name, redirect_servertype, redirect_server, redirect_serverport)
}
}


I jak widać jest w warunku, że
&& (!is_user_admin(id)) && (!has_flag(id, "ab"))
, ale jak admin wchodzi, to też go przekierowuje, co jest źle?


#269146 [Problem] Licznik rund do zmiany mapy by me

Napisane przez Gość w 12.07.2011 21:00

Uuu :( Dużo pracy przed Tobą.

Przetestuj:

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "Tomek"

new ilosc_rund;
new cvar_ilosc_rund;

public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)

cvar_ilosc_rund = register_cvar("ilosc_rund", "15");

register_logevent("Koniec_Rundy", 2, "1=Round_End")
register_logevent("Poczatek_Rundy", 2, "1=Round_Start")

ilosc_rund = get_pcvar_num(cvar_ilosc_rund);
}
public Koniec_Rundy()
ilosc_rund--

public Poczatek_Rundy()
{
set_hudmessage(0, 255, 0, 0.5, 0.2, 0, 6.0, 6.0)
show_hudmessage(0, "Do Zmiany Mapy pozostalo : %i Rund", ilosc_rund)
}



#267531 Statystyki - Call of Duty MW Mod

Napisane przez R3X w 07.07.2011 18:34

Statystyki - Call of Duty MW Mod

Przepisałem statystyki tego moda stąd

Statystyki mają całkowicie nowe API, przygotowane do obsługi wielu wersji moda w jednym skrypcie. Aktualnie są to wersje:
  • [nVault] Cod Mod Beta
  • [nVault] Cod Mod Final
  • [MySQL] Cod Mod MySQL (wersja z 3 tabelami)
  • [MySQL] Cod Mod MySQL (wersja DarkGL)
nie zoptymalizowałem jeszcze odczytu nVault pod względem pamięci (czyli duże pliki ciągle będą kłopotem), ale zamierzam się za to zabrać

Konfiguracja jest teraz dużo łatwiejsza, dzięki formularzowi: URL/do/statow/configure.php , jest on pokazywany jeśli plik config.php nie istnieje. Stary config nie zadziała, trzeba powpisywać dane jeszcze raz.
Jak ktoś miał własny skin to zawartość prelisting() ,poza tabelą, wylądowała w funkcji HTML_Begin(), po tej zmianie powinno działać

Uwaga
Po instalacji i konfiguracji należy usunać plik configure.php


Najczęstsze błędy:

Błąd przetwarzania pliku .vault

brak plik CodMod.vault

Warning: ftp_fget() [function.ftp-fget]: /CodMod.vault: No such file or directory in /home3/stacjafr/public_html/statycod/update.php on line 29

niedopasowana ścieżka dla danych do FTP, trzeba podać całą ścieżkę od podłączenia się na serwer FTP do pliku CodMod.vault
wszystko/po/drodze/do/cstrike/addons/amxmodx/data/

Read failed

niekompletny plik .vault lub niedopasowana wersja stat (np. plik z bety, staty przełączone na final)


Aktualizacja:
- naprawiona automatyczna aktualizacja
zmienione pliki to:
  • update.php
  • DataSets/nvault/nvaultDataSet.php

Załączone pliki


  • +
  • -
  • 32


#268154 public albo warunek

Napisane przez Onyke w 09.07.2011 16:28

public call_cast(id)
  • +
  • -
  • 2


#189994 [CodMOd(nowy)]Dodawanie klasy

Napisane przez TenKtośToJa w 19.11.2010 21:36

Witam,pokaże jak dodać nową klasę do nowego cod moda
Premium:
Otwieramy np Codclass_admiral.sma
i szukamy
new const nazwa[] = "Admiral";
Zamieniamy Admiral na naszą nazwe klasy
np.
new const nazwa[] = "GunMan";
sZUKAMY

new const opis[] = "Ma podwojny skok, 20 hp oraz pelen magazynak za kazde zabojstwo";
new const bronie = 1<<CSW_FAMAS;
new const zdrowie = 30;
new const kondycja = 38;
new const inteligencja = 0;
new const wytrzymalosc = 20;
new const opis[]
To opis klasy
new const bronie
Broń patrz na wzór.DOdajemy wg wzoru nie jak w starym codzie.
aby dodać wiecej niz 1 broń
robimy tak
new const bronie = 1<<CSW_AUG | 1<<CSW_HEGRENADE | 1<<CSW_SMOKEGRENADE | 1<<CSW_FLASHBANG;
Dzięki MasteR99

new const zdrowie = 30;
new const kondycja = 38;
new const inteligencja = 0;
new const wytrzymalosc = 20;
To są statystyki
sZUKAMY
public cod_class_enabled(id)
{
	if(!(get_user_flags(id) & ADMIN_LEVEL_H))
	{
		client_print(id, print_chat, "[Admiral] Nie masz uprawnien, aby uzywac tej klasy.")
		return COD_STOP;
	}
	ma_klase[id] = true;
	return COD_CONTINUE;
}

Zamieniamy
if(!(get_user_flags(id) & ADMIN_LEVEL_H))
na własną flagę
Tam gdzie [Admiral] Wpisujemy w moim przypadku GunMan
Szukamy
cod_set_user_xp(killer, cod_get_user_xp(killer)+10);
Tam gdzie +10 wpisujemy jego exp za fraga;]
To chyba koniec
jest to nowy mod i jeszcze nie rozkminiłem go;]
aa I JESZCZE trzeba zmienić nazwę pliku na codclass_GunMan i skompliować.
Dopisujemy do plugins-codmod.ini
codclass_GunMan.amxx
i zmieniamy mape na serwie i mamy klasę;]
  • +
  • -
  • 4


#265770 Dodawanie X punktow w statystyke

Napisane przez DarkGL w 03.07.2011 13:50

Gracz może napisać ile chce dodać punktów
do zmiennych globalnych (na samej górze pluginu już po #include ale przed pierwszym public)
#define MAX_PKT 100

enum umiejetnosci{
	eInteligencja,
	eZdrowie,
	eWytrzymalosc,
	eKondycja
}

new umiejetnosci:iModePrzydziel[33];

#define MAX_PKT 100 - tutaj ustawiamy maksymalny level umiejętności

do plugin_init
register_clcmd("wprowadz_ilosc_pkt","iDodaj")

w dowolne miejsce
public iDodaj(id)
{
	new szDodaj[196];
	read_args(szDodaj,charsmax(szDodaj))
	remove_quotes(szDodaj)
	if(is_str_num(szDodaj)) 
	{
		new iIle = str_to_num(szDodaj)
		if(iIle > punkty_gracza[id]){
			ColorChat(id, GREEN, "[COD:MW]^x01 Masz za malo punktow");
			
			if(punkty_gracza[id]>0)
				PrzydzielPunkty(id);
				
			return PLUGIN_CONTINUE;
		}
		
		switch(iModePrzydziel){
			case eInteligencja:{
				if(inteligencja_gracza[id] + iIle > MAX_PKT){
					iIle = MAX_PKT - inteligencja_gracza[id];
				}
				inteligencja_gracza[id] += iIle;
				punkty_gracza[id] -= iIle;
				ColorChat(id, GREEN, "[COD:MW]^x01 Dodales %d punktow w inteligencje. %s", iIle,inteligencja_gracza[id] >= 100 ? "Maksymalny poziom osiagniety":"");
			}
			case eZdrowie:{
				if(zdrowie_gracza[id] + iIle > MAX_PKT){
					iIle = MAX_PKT - zdrowie_gracza[id];
				}
				zdrowie_gracza[id] += iIle;
				punkty_gracza[id] -= iIle;
				ColorChat(id, GREEN, "[COD:MW]^x01 Dodales %d punktow w zycie. %s", iIle,zdrowie_gracza[id] >= 100 ? "Maksymalny poziom osiagniety":"");
			}
			case eWytrzymalosc:{
				if(wytrzymalosc_gracza[id] + iIle > MAX_PKT){
					iIle = MAX_PKT - wytrzymalosc_gracza[id]
				}
				wytrzymalosc_gracza[id] += iIle;
				punkty_gracza[id] -= iIle;
				ColorChat(id, GREEN, "[COD:MW]^x01 Dodales %d punktow w wytrzymalosc %s", iIle,wytrzymalosc_gracza[id] >= 100 ? "Maksymalny poziom osiagniety":"");
			}
			case eKondycja:{
				if(kondycja_gracza[id] + iIle > MAX_PKT){
					iIle = MAX_PKT - kondycja_gracza[id];
				}
				kondycja_gracza[id] += iIle;
				punkty_gracza[id] -= iIle;
				ColorChat(id, GREEN, "[COD:MW]^x01 Dodales %d punktow w kondycje. %s", iIle,kondycja_gracza[id] >= 100 ? "Maksymalny poziom osiagniety":"");
			}
		}
		if(punkty_gracza[id]>0)
			PrzydzielPunkty(id);
	}
	else{
		ColorChat(id, GREEN, "[COD:MW]^x01 Tylko cyfry!");
		
		if(punkty_gracza[id]>0)
				PrzydzielPunkty(id);
				
		return PLUGIN_CONTINUE;
	}
	return PLUGIN_CONTINUE;
}

Standardowe funkcje PrzydzielPunkty i PrzydzielPunkty_Handler podmieniamy na
public PrzydzielPunkty(id)
{
	new inteligencja[65];
	new zdrowie[60];
	new wytrzymalosc[60];
	new kondycja[60];
	new tytul[25];
	format(inteligencja, 64, "Inteligencja: \r%i \y(Zwieksza obrazenia zadawane przedmiotami)", inteligencja_gracza[id]);
	format(zdrowie, 59, "Zycie: \r%i \y(Zwieksza zycie)", zdrowie_gracza[id]);
	format(wytrzymalosc, 59, "Wytrzymalosc: \r%i \y(Zmniejsza obrazenia)", wytrzymalosc_gracza[id]);
	format(kondycja, 59, "Kondycja: \r%i \y(Zwieksza tempo chodu)", kondycja_gracza[id]);
	format(tytul, 24, "Przydziel Punkty(\r%i):", punkty_gracza[id]);
	new menu = menu_create(tytul, "PrzydzielPunkty_Handler");
	menu_additem(menu, inteligencja);
	menu_additem(menu, zdrowie);
	menu_additem(menu, wytrzymalosc);
	menu_additem(menu, kondycja);
	menu_additem(menu,"Dodaj X punktow w Inteligencje");
	menu_additem(menu,"Dodaj X punktow w Zycie");
	menu_additem(menu,"Dodaj X punktow w Wytrzymalosc");
	menu_additem(menu,"Dodaj X punktow w Kondycje");
	
	menu_display(id, menu);
	#if defined BOTY
	if(is_user_bot2(id))
		PrzydzielPunkty_Handler(id, menu, random(4));
	#endif
}

public PrzydzielPunkty_Handler(id, menu, item)
{
	client_cmd(id, "spk QTM_CodMod/select");
	
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_CONTINUE;
	}
	switch(item) 
	{ 
		case 0: 
		{    
			if(inteligencja_gracza[id]<MAX_PKT)
				inteligencja_gracza[id]++;
			else 
				ColorChat(id, GREEN, "[COD:MW]^x01 Maxymalny poziom inteligencji osiagniety");
			
		}
		case 1: 
		{    
			if(zdrowie_gracza[id]<MAX_PKT)
				zdrowie_gracza[id]++;
			else 
				ColorChat(id, GREEN, "[COD:MW]^x01 Maxymalny poziom sily osiagniety");
		}
		case 2: 
		{    
			if(wytrzymalosc_gracza[id]<MAX_PKT)
				wytrzymalosc_gracza[id]++;
			else 
				ColorChat(id, GREEN, "[COD:MW]^x01 Maxymalny poziom zrecznosci osiagniety");
			
		}
		case 3: 
		{    
			if(kondycja_gracza[id]<MAX_PKT)
				kondycja_gracza[id]++;
			else 
				ColorChat(id, GREEN, "[COD:MW]^x01 Maxymalny poziom zwinnosci osiagniety");
		}
		case 4:
		{
			if(inteligencja_gracza[id]<MAX_PKT){
				client_cmd(id, "messagemode wprowadz_ilosc_pkt");
				iModePrzydziel[id] = eInteligencja;
				return PLUGIN_HANDLED;
			}
		}
		case 5:
		{
			if(punkty_gracza[id]){
				client_cmd(id, "messagemode wprowadz_ilosc_pkt");
				iModePrzydziel[id] = eZdrowie;
				return PLUGIN_HANDLED;
			}
			
		}
		case 6:
		{
			if(punkty_gracza[id]){
				client_cmd(id, "messagemode wprowadz_ilosc_pkt");
				iModePrzydziel[id] = eWytrzymalosc;
				return PLUGIN_HANDLED;
			}
			
		}
		case 7:
		{
			if(punkty_gracza[id]){
				client_cmd(id, "messagemode wprowadz_ilosc_pkt");
				iModePrzydziel[id] = eKondycja;
				return PLUGIN_HANDLED;
			}
		}
	}
	punkty_gracza[id]--;
	if(punkty_gracza[id]>0)
		PrzydzielPunkty(id);
	
	return PLUGIN_CONTINUE;
	
}
to wszystko

zostałem o to poproszony pomysł należy do Frajer'a [CoD Stary] Pewna funkcja - AMXX.pl: Support AMX Mod X :)
  • +
  • -
  • 5


#267965 Dodatkowe Obrazenia Z broni

Napisane przez Stachuu :D ?? w 08.07.2011 20:40

if (damage > 0 && weapon == CSW_xxx && player_class[attacker_id] == Killer)
{
new dmg = damage/10
if (is_user_alive(id)) change_health(id,-dmg,0,"")
}


??
  • +
  • -
  • 1


#268026 Dodatkowe Obrazenia Z broni

Napisane przez Stachuu :D ?? w 08.07.2011 23:15

omg ...
w
public Damage(id)


gdzieś pod

if (is_user_connected(attacker_id) && attacker_id != id)

dajemy

if (damage > 0 && weapon == CSW_xxx && player_class[attacker_id] == Killer)
{
new dmg = damage/10
if (is_user_alive(id)) change_health(id,-dmg,0,"")
}


i juz .

małe wytłumaczenie
jeśli damage jest większe niż 5 a klasa atakująca to Killer to zabiera nam dodatkowo 1/10 damage czyli 10% więcej

np
new dmg = damage/5 = 1/5 czytaj 20% itp ..
  • +
  • -
  • 1