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
 

UberSkill - zdjęcie

UberSkill

Rejestracja: 24.04.2012
Aktualnie: Nieaktywny
Poza forum Ostatnio: 14.08.2013 19:18
-----

#533753 Wymuszenie

Napisane przez Pan Marian w 12.04.2013 16:50

/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#define PLUGIN "Wymuszacz Komend"
#define VERSION "1.0"
#define AUTHOR "Zbysio"

public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)
    set_task(30.0, "Task");
    RegisterHam(Ham_Spawn, "player", "Task", 1);
}
public Task(id)
{
    client_cmd( id , "rate 25000" )
    client_cmd( id , "cl_cmdbackup 2" )
    client_cmd( id , "cl_cmdrate 101" )
    client_cmd( id , "cl_updaterate 101" )
    client_cmd( id , "ex_interp 0.01" )
    client_cmd( id , "fps_max 100" )
    set_hudmessage(255, 0, 0, 0.00, 0.0)
    show_hudmessage(id, "Wymuszono na Tobie komendy")
    
}

public client_connect(id)
{
    client_cmd( id , "rate 25000" )
    client_cmd( id , "cl_cmdbackup 2" )
    client_cmd( id , "cl_cmdrate 101" )
    client_cmd( id , "cl_updaterate 101" )
    client_cmd( id , "ex_interp 0.01" )
    client_cmd( id , "fps_max 100" )
}



#423582 JarHead Rank Mod

Napisane przez Misiaczek ;c w 23.06.2012 16:18

Wina colorstatus ^^

/* ColorStatus
*
* by DarkGL
*
* This file is provided as is (no warranties).
*/

#define STATUS_TASK 486784986
#define STATUS_TASK2 471231345

enum COLOR_STATUS{
RED_STATUS,
BLUE_STATUS,
YELLOW_STATUS,
GREY_STATUS
}

new msgStatusText;
new msgStatusValue;
new msgSayText;

//prefix _colorStatus_

new oldTeam[33],MSG_TYPE[33],Float:fTimeColor[33];

stock initColorStatus(){
msgStatusText = get_user_msgid("StatusText");
msgStatusValue = get_user_msgid("StatusValue");
msgSayText = get_user_msgid("SayText");

register_message(get_user_msgid("StatusText"),"ColorStatusText");
register_message(get_user_msgid("StatusValue"),"ColorStatusValue");
}

public ColorStatusText(msgID, msgDest,msgEnt){
if(!msgEnt || msgDest == MSG_ALL){

new Float:fTime,szRet[256];

get_msg_arg_string(2,szRet,charsmax(szRet));

for(new i = 1;i<33;i++){
if(!is_user_connected(i)) continue;

fTime = fTimeColor[i] > fTimeColor[0] ? fTimeColor[i] : fTimeColor[0];

if(fTime >= get_gametime() || fTime == -1.0) continue;

message_begin(MSG_ONE,msgStatusText,_,i);
write_byte(0);
write_string(szRet);
message_end();
}

return PLUGIN_HANDLED;
}
else if(is_user_connected(msgEnt)){
if(fTimeColor[msgEnt] >= get_gametime() || fTimeColor[msgEnt] == -1.0) return PLUGIN_HANDLED;
}

return PLUGIN_CONTINUE;
}

public ColorStatusValue(msgID, msgDest,msgEnt){
if(!msgEnt || msgDest == MSG_ALL){

new Float:fTime,szRet[256];

get_msg_arg_string(2,szRet,charsmax(szRet));

for(new i = 1;i<33;i++){
if(!is_user_connected(i)) continue;

fTime = fTimeColor[i] > fTimeColor[0] ? fTimeColor[i] : fTimeColor[0];

if(fTime >= get_gametime() || fTime == -1.0) continue;

message_begin(MSG_ONE,msgStatusValue,_,i);
write_byte(get_msg_arg_int(1));
write_short(get_msg_arg_int(2));
message_end();
}

return PLUGIN_HANDLED;
}
else if(is_user_connected(msgEnt)){
if(fTimeColor[msgEnt] >= get_gametime() || fTimeColor[msgEnt] == -1.0) return PLUGIN_HANDLED;
}

return PLUGIN_CONTINUE;
}

stock makeStatusText(id,COLOR_STATUS:color,Float:fTime = 0.0,const szText[] = "",any:...){
new szTextFormated[197];

vformat(szTextFormated, charsmax(szTextFormated), szText, 5);


if(id)
{
MSG_TYPE[id] = MSG_ONE;
fTimeColor[id] = !fTime ? -1.0 : get_gametime() + fTime;
} else {
id = FindPlayerStatus();
MSG_TYPE[id] = MSG_ALL;

if(id == -1) return ;

fTimeColor[0] = !fTime ? -1.0 : get_gametime() + fTime;

}

if(color == YELLOW_STATUS){
message_begin(MSG_TYPE[id],msgStatusText,_,id);
write_byte(0);
write_string(szTextFormated);
message_end();

return ;
}

format(szTextFormated, charsmax(szTextFormated),"%s%s","%p2",szTextFormated);

set_msg_block(msgSayText, BLOCK_ONCE);

message_begin(MSG_TYPE[id],msgStatusText,_,id);
write_byte(0);
write_string(szTextFormated);
message_end();

oldTeam[id] = get_user_team(id);

setTeamMessage(id,color == RED_STATUS ? 1 : color == BLUE_STATUS ? 2 : 3,MSG_TYPE[id]);

message_begin(MSG_TYPE[id],msgStatusValue,_,id);
write_byte(2);
write_short(id);
message_end();

remove_task(id+STATUS_TASK);
remove_task(id+STATUS_TASK2);

set_task(0.1,"returnToStatus",id+STATUS_TASK);
if(fTime != 0.0) set_task(fTime,"deleteStatus",MSG_TYPE[id] == MSG_ALL ? STATUS_TASK2 : id+STATUS_TASK2);
}

public deleteStatus(id){
id-=STATUS_TASK2;

new Float:fTime;

if(!id){
for(new i = 1;i<33;i++){
if(!is_user_connected(i)) continue;

fTime = fTimeColor[i] > fTimeColor[0] ? fTimeColor[i] : fTimeColor[0];

if(fTime >= get_gametime() || fTime == -1.0) continue;

message_begin(MSG_ONE,msgStatusText,_,i);
write_byte(0);
write_string("");
message_end();

message_begin(MSG_ONE,msgStatusValue,_,i);
write_byte(1);
write_short(0);
message_end();

message_begin(MSG_ONE,msgStatusValue,_,i);
write_byte(2);
write_short(0);
message_end();

message_begin(MSG_ONE,msgStatusValue,_,i);
write_byte(3);
write_short(0);
message_end();
}
}
else if(is_user_connected(id)){
fTime = fTimeColor[id] > fTimeColor[0] ? fTimeColor[id] : fTimeColor[0];

if(fTime >= get_gametime() || fTime == -1.0) return ;

message_begin(MSG_ONE,msgStatusText,_,id);
write_byte(0);
write_string("");
message_end();

message_begin(MSG_ONE,msgStatusValue,_,id);
write_byte(1);
write_short(0);
message_end();

message_begin(MSG_ONE,msgStatusValue,_,id);
write_byte(2);
write_short(0);
message_end();

message_begin(MSG_ONE,msgStatusValue,_,id);
write_byte(3);
write_short(0);
message_end();
}
}

public returnToStatus(id){
id-=STATUS_TASK;

set_msg_block(msgSayText, BLOCK_ONCE);

setTeamMessage(id,oldTeam[id],MSG_TYPE[id]);
}

stock setTeamMessage(id, team,type){
static msgTeamInfo;

if(!msgTeamInfo) msgTeamInfo = get_user_msgid("TeamInfo");

static TeamName[][] =
{
"",
"TERRORIST",
"CT",
"SPECTATOR"
};

message_begin(type, msgTeamInfo, _, id);
write_byte(id);
write_string(TeamName[team]);
message_end();
}

stock FindPlayerStatus()
{
static maxPlayers;
static i;
i = -1;

if(!maxPlayers) maxPlayers = get_maxplayers();

while(i <= maxPlayers)
{
if(is_user_connected(++i))
{
return i;
}
}

return -1;
}


colorstatus bez zmiany nicku :P Dark coś tam gadał ze błędy mogą być ale u mnie działało gites :P
  • +
  • -
  • 1


#284438 Instalacja SourceBans

Napisane przez Hiroshima w 17.08.2011 23:47

SourceBans
ver. 1.4.8

Wymagania:
-serwer www
-baza mysql
-serwer na silniku Source
-SourceMod 1.3.8
-umiejetnosc myslenia

Przejdź do instalacji po stronie serwera: Instalacja na serwerze↵


INSTALACJA PO STRONIE WWW



1. Pobieramy paczke w wersji 1.4.8: Załączony plik  SourceBans-1.4.8.zip   9,78 MB  1626 Ilość pobrań


2. Uploadujemy zawartosc plik web na FTP serwera
3. Odpalamy przeglądarke i wpisujemy adres do naszego Sourcebans konczac go na /install/ (przyklad: http://jakas.strona....cebans/install/ )
Powinnismy zobaczyc cos takiego:

Dołączona grafika

Po przeczytaniu licencji, znaznaczamy, że się z nią zapoznaliśmy i klikamy OK

Dalszy krok to wypełnienie danych do bazy MySQL:

Dołączona grafika

Po wypełnieniu danych klikamy OK i jeśli wszystko wpisaliśmy dobrze powinniśmy zobaczyć następny krok.

Dołączona grafika

Tutaj musimy nadać odpowiednie CHMODy plikom o które prosi nas skrypt.
Są to katalogi:
/demos
/themes_c
/images/games
/images/maps

Następnie musimy zmienić plik config.dist.php na config.php w glownym folderze SourceBans.

Jeśli poprawnie ustawimy CHMODy klikamy na "check" i powinno nam się wyświetlić coś takiego:

Dołączona grafika

Oczywiście klikamy OK i przechodzimy do części tworzenia admina:

Dołączona grafika

Wypełniamy wszystkie dane jak na screenie i przechodzimy dalej.


Tutaj skrypt zapyta nas czy chcemy importować dane z AMXBans (oczywiście, jeśli nie korzystaliśmy wcześniej z AMXBans i nie mamy swojej listy banów omijamy ten krok i przechodzimy do ostatniego punktu, ktory opisałem poniżej; pod screenem)
Musimy usunąć lub zmienić nazwę katalogu install i updater aby poprawnie zakończyć instalacje naszego SourceBans.

Dołączona grafika

Jeśli zdecydowaliśmy się na import danych z AMXBans klikamy w przycisk widoczny na screenie powyżej i naszym oczom powinno się ukazać coś takiego:

Dołączona grafika

Wypełniamy dane tak jak na screenie i import powinien rozpocząć się automatycznie.



INSTALACJA PO STRONIE SERWERA





Teraz pora na konfiguracje po stronie serwera. Więc wpierw musimy się zalogować na FTP, osobiście używam programu Total Commander a wiec na nim będzie się poradnik opierał :)
Dołączona grafika

Gdy nam się pojawi okno programu wybieramy zakładkę Sieć ;)

Dołączona grafika

Z Zakładki Sieć wybieramy Połączenie FTP

Dołączona grafika

Z Menu które nam się pojawi wybieramy nasz serwer i klikamy Połącz

Dołączona grafika


Gdy zalogujemy się na FTP wchodzimy w katalog orangebox

Dołączona grafika

Następnie przechodzimy do katalogu który odpowiada naszej grze ;)(cstrike dla CS: Source, tf2 - dla TeamFortres 2, itp)

Dołączona grafika

Kiedy już znajdujemy się w katalogu zgodnym z naszym modem( w moim wypadku to katalog cspromod ponieważ mam serwer ProMod ) wchodzimy do katalogu Addons

Dołączona grafika


Następnie przechodzimy do katalogu sourcemod

Dołączona grafika

Następnie wchodzimy do katalogu configs

Dołączona grafika

Gdy juz jesteśmy w katalogu configs szukamy pliku databases.cfg

Dołączona grafika

Pobieramy plik na nasz dysk twardy i otwieramy go naszym edytorem tekstowyn np. NotePad++, Notatnik, WordPad ( osobiście polecam NotePad++ )

Standardowo zawartość pliku databases.cfg wygląda tak:
"Databases"
{
"driver_default" "mysql"

"default"
{
"driver" "default"
"host" "localhost"
"database" "sourcemod"
"user" "root"
"pass" ""
//"timeout" "0"
//"port" "0"
}

"storage-local"
{
"driver" "sqlite"
"database" "sourcemod-local"
}

"clientprefs"
{
"driver" "sqlite"
"host" "localhost"
"database" "clientprefs-sqlite"
"user" "root"
"pass" ""
//"timeout" "0"
//"port" "0"
}

}


pod
"clientprefs"
{
"driver" "sqlite"
"host" "localhost"
"database" "clientprefs-sqlite"
"user" "root"
"pass" ""
//"timeout" "0"
//"port" "0"
}


dodajemy to co wygenerował nam instalator SourceBans na sam koniec aby wyglądało to mniej więcej tak
"clientprefs"
{
"driver" "sqlite"
"host" "localhost"
"database" "clientprefs-sqlite"
"user" "root"
"pass" ""
//"timeout" "0"
//"port" "0"
}

"sourcebans"
{
"driver" "mysql"
"host" "localhost"
"database" "sourcebans"
"user" "sourcebans"
"pass" "MojeSuperTajneHasloPownedHaxiorki:F"
}


Plik końcowy powinien wyglądać tak
"Databases"
{
"driver_default" "mysql"

"default"
{
"driver" "default"
"host" "localhost"
"database" "sourcemod"
"user" "root"
"pass" ""
//"timeout" "0"
//"port" "0"
}

"storage-local"
{
"driver" "sqlite"
"database" "sourcemod-local"
}

"clientprefs"
{
"driver" "sqlite"
"host" "localhost"
"database" "clientprefs-sqlite"
"user" "root"
"pass" ""
//"timeout" "0"
//"port" "0"
}

"sourcebans"
{
"driver" "mysql"
"host" "localhost"
"database" "sourcebans"
"user" "sourcebans"
"pass" "MojeSuperTajneHasloPownedHaxiorki:F"
}
}


Po czym zapisujemy plik i wgrywamy go na FTP.

Po wgraniu pliku cofamy się do katalogu głównego sourcemod'a

Dołączona grafika


Zaznaczamy wszystkie pliki( prawym przyciskiem myszy ) z katalogu sourcemod z folderu który znajduje sie w SourceBans
Katalogi powinny zmienić kolor z Czarnego na Czerwony tak jak na załączonym zdjęciu
Dołączona grafika

Po czym klikamy przycisk F5 Kopiowanie i czekamy aż pliki wgrają się na serwer ;)
  • +
  • -
  • 11


#421953 [ROZWIĄZANE] Edycja BF2 v1.5.5a

Napisane przez Misiaczek ;c w 19.06.2012 12:06

w jarhead.sma dodaj

#include <colorstatus>


znajdz i usun
new gmsgStatusText;


znajdz i usun
msgStatusText = get_user_msgid("StatusText");


znajdz i usun
register_message(get_user_msgid("StatusValue"), "Message_StatusValue");


dodaj pod
//Register all the say commands

to
initColorStatus()


teraz zapisujemy sma i je zamykamy.


otwieramy pliki events.inl

szukamy i usuwamy
public Message_StatusValue()
{
if ( !get_pcvar_num(gPcvarBF2Active) || !get_pcvar_num(gPcvarStatusText) ) return;

//Block the name info, of person you aim at
set_msg_block(gmsgStatusText, BLOCK_SET);
}


teraz zapisujemy plik inl i go zamykamy.


otwieramy pliki hud.inl

znajdz i usun
static HUD[64];


znajdz
formatex(HUD, charsmax(HUD), "[JHD] Wczytuje Dane...");

zamien na
if(get_user_team(id) == 1)
{
makeStatusText(id,RED_STATUS,0.0,"[JHD] Wczytuje Dane...");
}
else if(get_user_team(id) == 2)
{
makeStatusText(id,BLUE_STATUS,5.0,"[JHD] Wczytuje Dane...");
}
else
{
makeStatusText(id,GREY_STATUS,0.0,"[JHD] Wczytuje Dane...");
}


znajdz
formatex(HUD, charsmax(HUD), "[JHD] Zabicia: %d/%d  Ranga: %s  Zlote medale: %d", totalkills[id], nextrankxp, gRankName[rank], gold[id]);

zamien na
if(get_user_team(id) == 1)
{
makeStatusText(id,RED_STATUS,0.0,"[JHD] Zabicia: %d/%d Ranga: %s Zlote medale: %d", totalkills[id], nextrankxp, gRankName[rank], gold[id]);
}
else if(get_user_team(id) == 2)
{
makeStatusText(id,BLUE_STATUS,5.0,"[JHD] Zabicia: %d/%d Ranga: %s Zlote medale: %d", totalkills[id], nextrankxp, gRankName[rank], gold[id]);
}
else
{
makeStatusText(id,GREY_STATUS,0.0,"[JHD] Zabicia: %d/%d Ranga: %s Zlote medale: %d", totalkills[id], nextrankxp, gRankName[rank], gold[id]);
}


znajdz i usun
message_begin(MSG_ONE_UNRELIABLE, gmsgStatusText, {0,0,0}, id);
write_byte(0);
write_string(HUD);
message_end();


teraz zapisujemy plik inl i go zamykamy.

Gotowe ;)
  • +
  • -
  • 1


#416401 [ROZWIĄZANE] Edycja BF2 v1.5.5a

Napisane przez Gość w 01.06.2012 00:28

Aktualizowałem:
  • Załączony plik  jarhead.sma   5,51 KB  51 Ilość pobrań
      jarhead.amxx ← nie pobieraj
  • dodałem w globalu: new menuItemSelection[33];
  • dodałem w plugin_init():
  • register_clcmd("zabierz_fragi", "zabierz_fragi", ADMIN_LEVEL, "Zabiera wybrana liczbe fragow");
  • register_clcmd("dodaj_zlote_medale", "dodaj_zlote_medale", ADMIN_LEVEL, "Dodaje wybrana liczbe zlotych medali");
  • register_clcmd("zabierz_zlote_medale", "zabierz_zlote_medale", ADMIN_LEVEL, "Zabiera wybrana liczbe zlotych medali");
[*]Załączony plik  const.inl   1,96 KB  55 Ilość pobrań

  • dodałem MENU_:
    • #define MENU_FRAGI2 5
    • #define MENU_ZLOTEMEDALE 6
    • #define MENU_ZLOTEMEDALE2 7
  • stworzyłem MENUITEM_:
    • #define MENUITEM_FRAGI 1
    • #define MENUITEM_ZLOTE_MEDALE 2
[*]Załączony plik  menu.inl   10,62 KB  46 Ilość pobrań

  • dodałem funkcje:
    • wybierziloscfragow2()
    • wybierzilosczlotychmedali()
    • wybierzilosczlotychmedali2()
    • zabierz_fragi()
    • dodaj_zlote_medale()
    • zabierz_zlote_medale()
  • do funkcji dodaj_fragi() dodałem
    • menuItemSelection[id]=MENUITEM_FRAGI;
  • w menu_handler() :: switch (menuselection[id]){}:
    • dodałem case MENU_FRAGI2:{}
    • dodałem case MENU_ZLOTEMEDALE:{}
    • dodałem case MENU_ZLOTEMEDALE2:{}
    • dodałem menuItemSelection[id]=MENUITEM_FRAGI;
      w trzech pierwszych case`ach swicha case`a MENU_FRAGI:{}
    • case MENU_GRACZ:{} został dość mocno przebudowany.
      Odczytuje, czy ma dodać fragi, czy medale (menuItemSelection[id], MENUITEM_(FRAGI|ZLOTE_MEDALE))
      W zależności od tego, czy odbiera, czy dodaje, wyświetla odpowiedni komunikat i zapisuje odpowiedni log.
      To menuItemSelection zostało stworzone gwoli zasady DRY,
      a wartości od razu są ujemne bądź nieujemne, zgodnie z zasadą KISS.
[/list]Próbowałem zastosować ColorStatus, ale nie działało mi.
Może jest ktoś w stanie napisać kolorowy status zamist zwykłego?

[info='edit']
Mogę napisać kolorowy czat, ale trzeba zmniejszyć trochę długość tekstu.
Będę wypatrywał ew. odpowiedzi autora tematu.
[/info]

//JarHead Desert Rank Mod HUD File
//Contains all the HUD functions.

#if defined jhd_hud_included
#endinput
#endif
#define jhd_hud_included

//Displays the HUD to the user
public DisplayHUD(id)
{
if ( !get_pcvar_num(gPcvarJHDActive) ) return;
if ( !is_user_alive(id) || is_user_bot(id) ) return;

static HUD[64];

if ( !gStatsLoaded[id] )
{
formatex(HUD, charsmax(HUD), "[JHD] Wczytuje Dane...");
}
else
{
new rank = g_PlayerRank[id];
new nextrank;

switch(rank)
{
case 16, 19, 20, 21: nextrank = 15;
case 17: nextrank = 7;
case 18: nextrank = 8;
default: nextrank = rank;
}

++nextrank;

new nextrankxp = floatround(gRankXP[nextrank] * 0.1);

formatex(HUD, charsmax(HUD), "[JHD] Zabicia: %d/%d Ranga: %s Zlote medale: %d", totalkills[id], nextrankxp, gRankName[rank], gold[id]);
}

message_begin(MSG_ONE_UNRELIABLE, gmsgStatusText, {0,0,0}, id);
write_byte(0);
write_string(HUD);
message_end();

//makeStatusText(id,((get_user_team(id)-1)?BLUE_STATUS:RED_STATUS),0.0,"%s",HUD);
}


[success='ZIP']Załączony plik  jhd-cstrike.zip   246,98 KB  66 Ilość pobrań
[/success]


#414242 Wymuszanie komend+info

Napisane przez Marcon w 25.05.2012 18:19

Teoretycznie już skończyłem, ale jak zauważyłem ex_interp jest bugnięty tzn. mimo dobrych ustawień pisze, że jest błędny.
Ja pomysłu nie mam jak go rozwiązać, może ktoś pomoże?


Funkcją query_client_cvar nie pobierzesz wartości ex_interp od graczy Non-Steam. Stąd opisany przez Ciebie błąd. Skorzystaj z dobrodziejstw funkcji get_uc ;)
  • +
  • -
  • 1


#414074 Wymuszanie komend+info

Napisane przez dziubdziubek w 25.05.2012 06:23

Teoretycznie już skończyłem, ale jak zauważyłem ex_interp jest bugnięty tzn. mimo dobrych ustawień pisze, że jest błędny.
Ja pomysłu nie mam jak go rozwiązać, może ktoś pomoże?
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "Perfect Head"
#define VERSION "1.0"
#define AUTHOR "dziubdziubek"

public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
  register_logevent("Poczatek_Rundy", 2, "1=Round_Start")
}
public ustaw_komendy()
{
new i
for(i=1;i<32;++i)
{
  if(is_user_connected(i))
  {
   client_cmd(i,"ex_interp 0.01")
   client_cmd(i,"cl_updaterate 100")
   client_cmd(i,"cl_cmdrate 100")
   client_cmd(i,"rate 25000")
  
   set_hudmessage(170, 0, 255, 0.1, 0.1, 0, 6.0, 5.0)
   show_hudmessage(i, "Ustawiono ^nex_interp 0.01^ncl_updaterate 100^ncl_cmdrate 100^nrate 25000")
  }
}
}
public Poczatek_Rundy()
{
new i
for(i=1;i<32;++i)
{
  if(is_user_connected(i)&&!is_user_bot(i))
  {
   query_client_cvar(i,"rate","wyniki_rate")
   query_client_cvar(i,"cl_updaterate","wyniki_update")
   query_client_cvar(i,"cl_cmdrate","wyniki_cmdrate")
   query_client_cvar(i,"ex_interp","wyniki_interp")
   ustaw_komendy()
  }
}
}
public wyniki_rate(id, const cvar[], const value[])
{
if(!equal(value,"25000"))
{
  new name[32]
  get_user_name(id,name,31)
  client_print(0,print_chat,"Gracz %s ma zle ustawione rate %s",name,value)
  ustaw_komendy()
}
}
public wyniki_interp(id, const cvar[], const value[])
{
  if(equal(value,"0.01"))
{
  new name[32]
  get_user_name(id,name,31)
  client_print(0,print_chat,"Gracz %s ma zle ustawione ex_interp %s",name,value)
  ustaw_komendy()
}
}
public wyniki_cmdrate(id, const cvar[], const value[])
{
  if(!equal(value,"100"))
{
  new name[32]
  get_user_name(id,name,31)
  client_print(0,print_chat,"Gracz %s ma zle ustawione cl_cmdrate %s",name,value)
  ustaw_komendy()
}
}
public wyniki_update(id, const cvar[], const value[])
{
  if(!equal(value,"100"))
{
  new name[32]
  get_user_name(id,name,31)
  client_print(0,print_chat,"Gracz %s ma zle ustawione cl_updaterate %s",name,value)
  ustaw_komendy()
}
}

  • +
  • -
  • 1


#413721 Wymuszanie komend+info

Napisane przez dziubdziubek w 23.05.2012 17:51

Co do 3 to robię, a 4 według mnie można zmienić po ustawieniach(10 sec po rozpoczęciu rundy jakimś bindem).
Nazwa już dodana ;)
  • +
  • -
  • 1


#388016 AMX Wiki

Napisane przez GwynBleidD w 29.03.2012 18:24

Amxx.pl jest portalem o AMX, na którym ludzie mogą się czegoś nauczyć, zadać pytania, poczytać tutoriale, zamieścić swoje własne rozwiązania i pluginy, pobierać pluginy i nie tylko. Jest tylko jedno ale... Forum niekoniecznie jest najlepsze do tych wszystkich zadań, lepszym rozwiązaniem byłoby tutaj wiki. Nie chodzi mi o dokumentację komend, bo to jest trochę osobna rzecz, ale o dokumentację AMX jako całości. Np artykuł o SQL zamieszczony na tym forum dobrze nadaje się do takiego wiki. O natywach, forwardach także.

Ktoś powie: przecież na forum też można to zamieścić. Owszem, ale na Wiki można stworzyć wygodniejszą strukturę, edytować artykuły mogą wszyscy (oczywiście edycja przez zwykłych użytkowników musiałaby być zatwierdzona przez administrację), wymusza pewną konwencję struktury artykułów (dzięki czemu wszystkie są bardzo czytelne) i umożliwia więcej opcji dotyczących zamieszczania treści. Co prawda nie ma możliwości tworzenia wtedy komentarzy do tutoriala, ale po co one wtedy, skoro każdy może sam poprawić błąd, czy napisać coś jaśniej (a do tego chyba wyłącznie komentarze służą, bo przecież pytania gdy ktoś nie rozumie czegoś raczej powinny trafiać do osobnych tematów).

AMX posiada swoje anglojęzyczne wiki, jednak nie jest ono dobrze rozwinięte. A to za sprawą tego, że nie jest promowane. Ludzie piszą swoje artykuły na forum, bo więcej osób z niego korzysta. W niewielu miejscach widać linki do wiki i stąd niska jego popularność. Tutaj gdyby zacząć od przeniesienia wszystkich wartościowych tutoriali do wiki (przez wartościowe mam na myśli poprawne, będące na czasie itp), usunąć dział poradników z informacją, że wszystko znajduje się i powinno być umieszczane na wiki, oraz umieścić widoczny link w headerze forum + gdzieś w strukturze tematów (np zamiast poradników) to zyskałoby ono popularność. No i polska mogłaby się pochwalić lepszym wiki, niż oryginalne :D

Jeśli chodzi o samo utworzenie i utrzymywanie wiki (+podpięcie jakoś pod forum) to mogę się zgłosić do pomocy przy tym. Nie mówię, że to zrobię, ale trochę prac przy tym mogę wykonać. Nie znam się co prawda na IPB, gdyż nie prowadzę żadnego forum opartego o ten skrypt, ale dobrze znam vBulletin, a to jest tak jak z nauką programowania: jeśli umiesz naprawdę programować w jednym języku, to nauka drugiego trwa tylko chwilę :)
  • +
  • -
  • 2


#413860 [ROZWIĄZANE] Edycja BF2 v1.5.5a

Napisane przez G[o]Q w 24.05.2012 12:44

Wiadomość wygenerowana automatycznie


Ten temat został otwarty przez moderatora.

Powód: Temat otwarty na prośbę użytkownika.


Z pozdrowieniami,
Zespół AMXX.PL
  • +
  • -
  • 1


#413684 Wymuszanie komend+info

Napisane przez dziubdziubek w 23.05.2012 16:54

Póki co jest 1 i 2:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "WymusKomende"
#define VERSION "1.0"
#define AUTHOR "dziubdziubek"

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

  register_logevent("Poczatek_Rundy", 2, "1=Round_Start")
}
public Poczatek_Rundy()
{
new i
for(i=1;i<32;++i)
{
  if(is_user_connected(i))
  {
   client_cmd(i,"ex_interp 0.01")
   client_cmd(i,"cl_updaterate 100")
   client_cmd(i,"cl_cmdrate 100")
   client_cmd(i,"rate 25000")
   set_hudmessage(170, 0, 255, 0.0, -1.0, 0, 6.0, 5.0)
   show_hudmessage(i, "Ustawiono ^nex_interp 0.01^ncl_updaterate 100^ncl_cmdrate 100^nrate 25000")
  }
}
}
Co do 4 to chyba zawsze idzie wymusić.
  • +
  • -
  • 1


#280544 Autoresponder/Advertiser - advanced version

Napisane przez sebul w 09.08.2011 23:27

opis
Plugin co jakiś czas (ustawiany cvarami) wyświetla na chacie różne reklamy, informacje, itp. Jest to przeróbka istniejącego już pluginu, ale ta wersja przepisana jest na nowo, działa na dynamicznej tablicy array (dlatego też kod jest dużo krótszy) oraz ma więcej opcji. Reklamy można ustawić tak, aby wyświetlały się one na konkretnych mapach, mapach z określonym prefixem (np. de, cs, itp.), od określonej ilości graczy (znajdujących się na serwerze), do określonej ilości graczy, czy też w określonych godzinach. Opcje te można ze sobą łączyć, np. "na y mapie" z "od x ilości graczy", "na mapie o prefixie y" z "do x ilości graczy" oraz "od x do y godziny", itp. Nie zalecane jest łączenie ze sobą opcji "na y mapie" z "na mapie o prefixie y" oraz "od x ilości graczy" z "do x ilości graczy".
Reklamy można "kolorować" poprzez tagi ([normal], [team], [green]) oraz został dodany tag ([.you]), dzięki któremu możemy w reklamie wyświetlić nick gracza oglądającego reklamę.
Przykładowe reklamy znajdują się już w "advertisements.ini".
Spoiler

Myślałem też nad tym, aby dodać opcję z godziną, czyli od x godziny wyświetlało by reklamę, albo do x godziny, ale nie wiem czy jest sens, no i na razie zostawiam to tak jak jest.

UWAGA!! 20.04.2013
Ważna aktualizacja pluginu, która eliminuje możliwość wyłączenia się serwera przy ustawieniu zbyt długiej wiadomości, do tego kod pluginu został "odświeżony".

screenshot
reklamae.jpg

cvary
ad_react_all "1" // 1 - pokazuj odpowiedź na dany tekst każdemu na serwerze, 0 - pokazuj tylko temu kto napisał
ad_rand_min "40" // minimalny odstęp pomiędzy reklamami
ad_rand_max "60" // maksymalny odstęp pomiędzy reklamami
instalacja
Standardowa.

download
Załączony plik  ad_manager_array.sma   9,45 KB  2415 Ilość pobrań
  ad_manager_array.amxx
Załączony plik  advertisements.ini   1,63 KB  5126 Ilość pobrań

  • +
  • -
  • 62


#323980 ad_manager

Napisane przez sebul w 19.11.2011 20:32

http://amxx.pl/topic...vanced-version/ i nie będziesz musiał się bawić w edycję pliku sma.
  • +
  • -
  • 1


#323942 ad_manager

Napisane przez Pro100WBANiE w 19.11.2011 19:53

Chciałbym żeby reklama wyświetla się co 20 sec :

#include <amxmodx>
#include <amxmisc>
#pragma semicolon 0
new const PLUGIN[] = "Autoresponder/Advertiser";
new const VERSION[] = "0.5";
new const AUTHOR[] = "MaximusBrood";
#define NORM_AD 0
#define SAY_AD 1
#define COND 0
#define STORE 1
#define COND_TKN '%'
#define SAY_TKN '@'
#define COND_STKN "%"
#define DEVIDE_STKN "~"
#define SAY_STKN "@"
//-.-.-.-.-.-.-.-.DEFINES.-.-.-.-.-.-.-.-.-.-.
//Maximum amount of ads
#define MAXADS 64
//Minimum difference between two different ads (float)
new const Float:RAND_MIN = 60.0;
//Maximum difference between two different ads (float)
new const Float:RAND_MAX = 80.0;
//-.-.-.-.-.-.-.-.END DEFINES..-.-.-.-.-.-.-.
//Stores
new sayConditions[MAXADS][3][32];
new normConditions[MAXADS][3][32];
new normStore[MAXADS][128];
new sayStore[MAXADS][2][128];
new gmsgSayText;
//Counters
new adCount[2] = {0, 0};
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR);
register_cvar("admanager_version", "0.5", FCVAR_SERVER);

register_cvar("ad_react_all", "1");

gmsgSayText = get_user_msgid("SayText");

register_clcmd("say","eventSay");
register_clcmd("say_team","eventSay");

//Delay the load proces by 10 sec because we don't want to get more load
//on the already high-load mapchange.
//Too soon to affect players while playing, too late to create time-out @ mapchange
set_task(10.0, "load");
}
public load()
{
//Load the data
new filepath[64];
get_configsdir(filepath, 63);
format(filepath, 63, "%s/advertisements.ini", filepath);

if(file_exists(filepath))
{
  new output[512], conditions[128], temp[64], type;
 
  //Open file
  new fHandle = fopen(filepath, "rt");
 
  //Checks for failure
  if(!fHandle)
  return;
 
  //Loop through all lines
  for(new a = 0; a < MAXADS && !feof(fHandle); a++)
  {
   //Get line
   fgets(fHandle, output, 511);
  
  
   //Work away comments
   if(output[0] == ';' || !output[0] || output[0] == ' ' || output[0] == 10)
   {
    //Line is not counted
    a--;
    continue;
   }
  
   //Reset type
   type = 0;
  
   //Check if it contains conditions
   if(output[0] == COND_TKN)
   {
    //Cut the conditions off the string
    split(output, conditions, 127, output, 511, DEVIDE_STKN);
   
    //Determine if its say check or normal ad
    type = output[0] == SAY_TKN ? 1 : 0;
   
    //Put the conditions in own space
    for(new b = 0; b < 3; b++)
    {
	 new sort[16], cond[32], numb;
	
	 //Remove the % from line
	 conditions[0] = ' ';
	 trim(conditions);
	
	 //Get one condition from the line
	 split(conditions, temp, 64, conditions, 127, COND_STKN);
	
	 split(temp, sort, 15, cond, 31, " ");
	
	 if(equali(sort, "map"))
	 {
	  numb = 0;
	 } else if(equali(sort, "min_players"))
	 {
	  numb = 1;
	 } else if(equali(sort, "max_players"))
	 {
	  numb = 2;
	 } else
	 {
	  continue;
	 }
	
	 //Copy it to its final resting place ^^
	 setString(COND, type, cond, adCount[type], numb);
	
	 //Exit if it hasn't got more conditions
	 if(!conditions[0])
	 break;
    }
   }
  
   if(type == 0)
   type = output[0] == SAY_TKN ? 1 : 0;
  
   if(type == SAY_AD)
   {
    new said[32], answer[128];
   
    //Remove the @ from line
    output[0] = ' ';
    trim(output);
   
    split(output, said, 31, answer, 127, DEVIDE_STKN);
   
    //Apply color
    setColor(answer, 127);
   
    //Save it
    setString(STORE, SAY_AD, said, adCount[SAY_AD], 0);
    setString(STORE, SAY_AD, answer, adCount[SAY_AD], 1);
   } else//if(type == NORM_AD)
   {
    //Apply color
    setColor(output, 511);
   
    //Save it
    setString(STORE, NORM_AD, output, adCount[NORM_AD]);
   }
  
   //Increment the right counter
   adCount[NORM_AD] += type == NORM_AD ? 1 : 0;
   adCount[SAY_AD]  += type == SAY_AD  ? 1 : 0;
  }
 
  //Set a first task, if there are any normal ads
  if(adCount[NORM_AD] != 0)
  set_task(random_float(RAND_MIN, RAND_MAX), "eventTask");
 
  //Close file to prevent lockup
  fclose(fHandle);
}
}
new currAd = -1;
public eventTask()
{
//Go past all ads and check conditions
for(new a = 0; a < adCount[NORM_AD]; a++)
{
  //Put current ad to the next one
  currAd = currAd == adCount[NORM_AD] - 1 ? 0 : currAd + 1;
 
  if(checkConditions(currAd, NORM_AD))
  {
   //Display the ad
   new data[3];
   data[0] = currAd;
   data[1] = NORM_AD;
   data[2] = 0;
   displayAd(data);
  
   break;
  }
}

//Set a new task
set_task(random_float(RAND_MIN, RAND_MAX), "eventTask");

return PLUGIN_CONTINUE;
}
public eventSay(id)
{
//If nothing is said, don't check
if(adCount[SAY_AD] == 0)
return PLUGIN_CONTINUE;

new talk[64], keyword[16];
read_args(talk, 63) ;

//En nu rennen voor jullie zakgeld klootzjakken!
for(new a = 0; a < adCount[SAY_AD]; a++)
{
  //Get the string
  getString(STORE, SAY_AD, keyword, 15, a, 0);
 
  if(containi(talk, keyword) != -1)
  {
   //Check the rest if it fails to conditions
   if(!checkConditions(a, SAY_AD))
   continue;
  
   new data[3];
   data[0] = a;
   data[1] = SAY_AD;
   data[2] = id;
  
   //Set the task
   set_task(0.3, "displayAd", 0, data, 3);
  
   //Don't execute more of them
   break;
  }
}

return PLUGIN_CONTINUE;
}
public displayAd(params[])
{
//Get the string that is going to be displayed
new message[128];
getString(STORE, params[1], message, 127, params[0], params[1]);

//If its enabled by cvar and id is set, display to person who triggered message only
if(get_cvar_num("ad_react_all") == 0 && params[2] != 0)
{
  new name[64];
  get_user_name(params[2],name,charsmax(name));
  replace_all(message,charsmax(message),"[you]",name)
  message_begin(MSG_ONE, gmsgSayText, {0,0,0}, params[2]);
  write_byte(params[2]);
  write_string(message);
  message_end();
 
} else
{
  //Display the message to everyone
  new plist[32], playernum, player;
 
  get_players(plist, playernum, "c");
 
  for(new i = 0; i < playernum; i++)
  {
   player = plist[i];
   new temp[128];
   copy(temp,charsmax(temp),message);
   new name[64];
   get_user_name(player,name,charsmax(name));
   replace_all(temp,charsmax(temp),"[you]",name)
   message_begin(MSG_ONE, gmsgSayText, {0,0,0}, player);
   write_byte(player);
   write_string(temp);
   message_end();
  }
}

return PLUGIN_HANDLED;
}
//---------------------------------------------------------------------------
//							    STOCKS
//---------------------------------------------------------------------------
stock checkConditions(a, type)
{
//Mapname
if((type == NORM_AD && normConditions[a][0][0]) || (type == SAY_AD && sayConditions[a][0][0]))
{
  new mapname[32];
  get_mapname(mapname, 31);
 
  if(! (type == NORM_AD && equali(mapname, normConditions[a][0]) ) || (type == SAY_AD && equali(mapname, sayConditions[a][0]) ) )
  return false;
}

//Min Players
if((type == NORM_AD && normConditions[a][1][0]) || (type == SAY_AD && sayConditions[a][1][0]))
{
  new playersnum = get_playersnum();
 
  if( (type == NORM_AD && playersnum < str_to_num(normConditions[a][1]) ) || (type == SAY_AD && playersnum < str_to_num(sayConditions[a][1]) ) )
  return false;
}

//Max Players
if((type == NORM_AD && normConditions[a][2][0]) || (type == SAY_AD && sayConditions[a][2][0]))
{
  new playersnum = get_playersnum();
 
  if( (type == NORM_AD && playersnum > str_to_num(normConditions[a][2]) ) || (type == SAY_AD && playersnum > str_to_num(sayConditions[a][2]) ) )
  return false;
}

//If everything went fine, return true
return true;
}
stock setColor(string[], len)
{
if (contain(string, "!t") != -1 || contain(string, "!g") != -1 || contain(string,"!n") != -1)
{
  //Some nice shiny colors ^^
  replace_all(string, len, "!t", "^x03");
  replace_all(string, len, "!n", "^x01");
  replace_all(string, len, "!g", "^x04");
 
  //Work away a stupid bug
  format(string, len, "^x01%s", string);
}
}
stock getString(mode, type, string[], len, one, two = 0)
{
//server_print("mode: %d type: %d len: %d one: %d two %d", mode, type, len, one, two);

//Uses the fact that a string is passed by reference
if(mode == COND)
{
  if(type == NORM_AD)
  {
   copy(string, len, normConditions[one][two]);
  } else//if(type = SAY_AD)
  {
   copy(string, len, sayConditions[one][two]);
  }
} else//if(mode == STORE)
{
  if(type == NORM_AD)
  {
   copy(string, len, normStore[one]);
  } else//if(type == SAY_AD)
  {
   copy(string, len, sayStore[one][two]);
  }
}
}
stock setString(mode, type, string[], one, two = 0)
{
if(mode == COND)
{
  if(type == NORM_AD)
  {
   copy(normConditions[one][two], 31, string);
  } else//if(type = SAY_AD)
  {
   copy(sayConditions[one][two], 31, string);
  }
} else//if(mode == STORE)
{
  if(type == NORM_AD)
  {
   copy(normStore[one], 127, string);
  } else//if(type == SAY_AD)
  {
   copy(sayStore[one][two], 127, string);
  }
}
}

  • +
  • -
  • 0


#404613 [ROZWIĄZANE] Edycja BF2 v1.5.5a

Napisane przez Gość w 01.05.2012 16:45

1. Usunąłem z pluginu cstrike/sound/jhdrank/award.wav, gdyż i tak nie ma odznak, nie jest też precachowany, w ogóle go nie ma, więc i na serwerze jest niepotrzebny.
Plik ten (award.wav) możesz śmiało usunąć. cstrike/sound/jjhdrank/promotion.wav natomiast zostaw! Jest odtwarzany w momencie awansu do kolejnej rangi.
Bez promotion.wav plugin nie wystartuje, a award.wav jest już niepotrzebny, bo zdobywanie odznak (których de facto niema) jest oczywiście niemożliwe.

2. Usunąłem resztę niepotrzebnych zmiennych i funkcji, większość jako pozostałości po skomplikowanym menu oraz odznakach.
Antybuga związanego z cichym chodzeniem też usunąłem, bo miał związek z odznakami.

3. Zmieniłem autora na pRED*, gdyż w obliczu takich cięć, to on znów jest głównym autorem, ale zostawiłem notkę o MisieQ
register_plugin(gPluginName, gPluginVersion, "pRED*"); // Bazuje na Battlefield 2: Rank Mod 1.5.3 by pRED*
// Plugin spolszczony przez MisieQ i zmodyfikowany


4. BF2mod standardowo nawet w Colormodzie dla zlota nie ma ColorChata. Chyba dlatego, ze wtedy kolor jest zloty :)
Dlatego dla zlota specjalnie ColorChata nie pisalem.

5. Odnośnie rang: Mamy następujące rangi:
new const gRankName[MAX_RANKS+5][] =
{
"Szeregowy", //0
"Starszy Szeregowy",
"Kapral",
"Starszy Kapral",
"Plutonowy",
"Sierzant",
"Starszy Sierzant",
"Mlodyszy Chorazy", //7
"Chorazy", //8
"Starszy Chorazy",
"Chorazy Sztabowy",
"Podporucznik",
"Porucznik",
"Kapitan",
"Major",
"Podpulkownik", //15
"Pulkownik", //16
"General Brygady", //17 (Ranga specjalna)
"General Dywizji", //18 (Ranga specjalna)
"General Broni", //19 (Ranga specjalna)
"General", //20 (Ranga specjalna, wym. 2. miejsce w rankingu)
"Marszalek Polski" //21 (Ranga specjalna, wym. 1. miejsce w rankingu)
};

Oraz następujące wymagania dla rang specjalnych:
switch(newrank)
{
case 7:
if ( numofbadges[id] >= MAX_BADGES )
g_PlayerRank[id] = 17;
case 8:
if ( numofbadges[id] >= (MAX_BADGES*2) )
g_PlayerRank[id] = 18;
case 15:
if ( numofbadges[id] == (MAX_BADGES*3) )
g_PlayerRank[id] = 19;
case 16:
//If active, Lieutenant General and General require all badges
if ( get_pcvar_num(gPcvarBadgesActive) && numofbadges[id] != (MAX_BADGES*4) )
g_PlayerRank[id] = 15; //If badges active and they don't have all badges demote back to Brigadier General
else if ( ranked == 2 )
g_PlayerRank[id] = 20; //Promote to General if Number 2 ranked.
else if ( ranked == 1 )
g_PlayerRank[id] = 21; //Promote to Marszalek Polski if Number 1 ranked.
}

Nie ma już odznak, więc dla odznak 17,18,19 zmieniłem następujące warunki:
Dla 17 (General Brygady) zamiast min. 1/4 odznak zdobytych z możliwych do zdobycia, trzeba zdobyć min. 40 złotych medali.
Dla 18 (General Dywizji) zamiast min. 1/2 odznak zdobytych z możliwych do zdobycia, trzeba zdobyć min. 60 złotych medali.
Dla 19 (General Broni) zamiast min. 3/4 odznak zdobytych z możliwych do zdobycia, trzeba zdobyć min. 100 złotych medali.

20 (Generał) Wymagane 2. miejsce w rankingu (Wymóg wszystkich odznak zamieniony na min. 100 złotych medali)
21 (Marszalek Polski) Wymagane 1. miejsce w rankingu (Wymóg wszystkich odznak zamieniony na min. 100 złotych medali)
Dodałem także stałe dla ilości wymaganych złotych medali:
new const gRankGold[5]= // Wymagana liczba zlotych medali
{
40, // General Brygady
60, // General Dywizji
100, // General Broni
100, // General
100 // Marszalek Polski
}

Stąd nowe wymagania odnośnie 5 rang specjalnych (17-21):

if ( g_PlayerRank[id]==17 && gold[id] < gRankGold[0] )
g_PlayerRank[id] = 7; //Degrade if the requirements became higher
if ( g_PlayerRank[id]==18 && gold[id] < gRankGold[1] )
g_PlayerRank[id] = 8; //Degrade if the requirements became higher
if ( g_PlayerRank[id]==19 && gold[id] < gRankGold[2] )
g_PlayerRank[id] = 15; //Degrade if the requirements became higher
if ( g_PlayerRank[id]==20 && gold[id] < gRankGold[3] )
g_PlayerRank[id] = 16; //Degrade if the requirements became higher
if ( g_PlayerRank[id]==21 && gold[id] < gRankGold[4] )
g_PlayerRank[id] = 16; //Degrade if the requirements became higher

switch(newrank)
{
case 7:
if ( gold[id] >= gRankGold[0] )
g_PlayerRank[id] = 17;
case 8:
if ( gold[id] >= gRankGold[1] )
g_PlayerRank[id] = 18;
case 15:
if ( gold[id] >= gRankGold[2] )
g_PlayerRank[id] = 19;
case 16:
if ( ranked == 2 && gold[id] >= gRankGold[3] )
g_PlayerRank[id] = 20; //Promote to General if Number 2 ranked.
else if ( ranked == 1 && gold[id] >= gRankGold[4] )
g_PlayerRank[id] = 21; //Promote to Marszalek Polski if Number 1 ranked.
}

6. Stock Create_TE_PLAYERATTACHMENT, jako jedyny pozostały w effect.inl, przeniosłem do stocks.inl,
tym samym pozbywając się effects.inl (Możesz śmiało wyrzucić effect.inl)

7. Choć show_rankhelp(id) nie jest używane (cmds.inl), to zostawiłem, i zaktualizowałem o zmiany
w systemie rankingowym (usunięcie odznak) może kiedyś Ci się przyda taka informacja do wstawienia.
Jeśli chcesz używać, to odkomentuj linijki 121-122 w plugin_init głównego pliku. Bez problemu zmienisz też
nazwę ewentualnej komendy na to z /rankhelp an inną, po prostu zmieniając ją w tych dwóch linijkach kodu.

8. Informację o złotych medalach w lewym dolnym rogu dodałem.

9. Usunąłem drobne niedopatrzenie w ham.inl dotyczące botów w CZ.

10. Usunąłem też dużo innych niepotrzebnych stocków, głównie z fakemety.

11. Usunąłem całe BF2menu, zamiast tego dodałem komednę /adminmenu, otwierającą Menu Administracji.
W Menu Administracji można 1. Dodać fragi (10, 100, 1000 lub własną liczbę) - wymagana flaga ADMIN_LEVEL.
Lub można 2. Zresetować wszystkie statystyki (wymagana flaga ADMIN_RESET). Jest pytanie bezpieczeństwa.

12. Zabieranie fragów (czyli dodawanie ujemnej liczby fragów) jest dostępne tylko dla Admina z flagą ADMIN_RESET.
Możliwe jest to przez komendę add_kills w konsoli lub poprzez Menu Admina -> 1 -> 4 -> Podanie ujemnej wartości -> Wybór gracza.
W takim wypadku zostanie wyświetlony stosowny komunikat zamiast odbierać fragi graczowi.

Przy domyślnych ustawieniach zarówno ADMIN_LEVEL, jak i ADMIN_RESET to flaga A (immunitet) i niniejszy punkt nie ma znaczenia.

13. Podsumowując, dostępne są następujące komendy:

add_kills <komu dodac zabicia> <ile zabic dodac> (w konsoli) dla Adminów z flagą ADMIN_LEVEL (domyślnie flaga A -immunitet, DEFINE linijki 6. głównego pliku);
/adminmenu dostępne na sayu lub teamsayu dla Adminów z flagą ADMIN_LEVEL lub ADMIN_RESET (domyślnie flaga A -immunitet, DEFINE linijki 6-7 głównego pliku);
/mestats dostępne dla każdego na sayu lub teamsayu.
/serverstats dostępne dla każdego na sayu lub teamsayu.
/whostats <czyje statystki pokazac> dostępne dla każdego na sayu lub teamsayu.
oraz /rankhelp (jeśli odkomentujesz linijki 121-122 w pliku głównym) dostępne dla każdego na sayu lub teamsayu.

BTW. Zdaje się, że wszystko działa, przetestowałem u siebie, kod zdaje się być OK.
Posprawdzaj i daj znać. Mam nadzieję, że nic nie przeoczyłem.

PS. Odnośnie zapisu vault z głównymi statami serwera (komenda /serverstats) - widziałem, że coś zmieniłeś.
Było OK, więc jeśli teraz nie działa, to musisz ponownie to sprawdzić, wierzę, że wiesz, co zmieniłeś, więc nie sprawdzałem.

PPS. To by było na tyle. Wszystko Ci opisałem, kod masz cały dostępny poniżej.

Załączony plik  jhd-cstrike.zip   244,73 KB  72 Ilość pobrań