/* 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" ) }
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.
|
UberSkill
Rejestracja: 24.04.2012Aktualnie: Nieaktywny
Poza forum Ostatnio: 14.08.2013 19:18





Statystyki
- Grupa: Użytkownik
- Całość postów: 81
- Odwiedzin: 3 299
- Tytuł: Zaawansowany
- Wiek: 33 lat
- Urodziny: Styczeń 9, 1992
-
Imię
Patryk
-
Płeć
Mężczyzna
-
Lokalizacja
Słupsk
#533753 Wymuszenie
Napisane przez
Pan Marian
w 12.04.2013 16:50
#423582 JarHead Rank Mod
Napisane przez Misiaczek ;c
w 23.06.2012 16:18

/* 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


#284438 Instalacja SourceBans
Napisane przez Hiroshima
w 17.08.2011 23:47
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:

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:

Po przeczytaniu licencji, znaznaczamy, że się z nią zapoznaliśmy i klikamy OK
Dalszy krok to wypełnienie danych do bazy MySQL:

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

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:

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

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.

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:

Wypełniamy dane tak jak na screenie i import powinien rozpocząć się automatycznie.
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ł


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


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

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

Gdy zalogujemy się na FTP wchodzimy w katalog orangebox

Następnie przechodzimy do katalogu który odpowiada naszej grze


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

Następnie przechodzimy do katalogu sourcemod

Następnie wchodzimy do katalogu configs

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

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

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

Po czym klikamy przycisk F5 Kopiowanie i czekamy aż pliki wgrają się na serwer

#421953 [ROZWIĄZANE] Edycja BF2 v1.5.5a
Napisane przez Misiaczek ;c
w 19.06.2012 12:06
#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

#416401 [ROZWIĄZANE] Edycja BF2 v1.5.5a
Napisane przez
Gość
w 01.06.2012 00:28
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");

- 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

- 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.
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']

[/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

#414074 Wymuszanie komend+info
Napisane przez dziubdziubek
w 25.05.2012 06:23
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() } }
#413721 Wymuszanie komend+info
Napisane przez dziubdziubek
w 23.05.2012 17:51
#388016 AMX Wiki
Napisane przez GwynBleidD
w 29.03.2012 18:24
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

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ę

#413860 [ROZWIĄZANE] Edycja BF2 v1.5.5a
Napisane przez G[o]Q
w 24.05.2012 12:44
#413684 Wymuszanie komend+info
Napisane przez dziubdziubek
w 23.05.2012 16:54
/* 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ć.
#280544 Autoresponder/Advertiser - advanced version
Napisane przez sebul
w 09.08.2011 23:27

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".
Normalna [green]reklama wyswietlana zawsze [team][you][normal], idz sobie... @czit~Ktos napisal wyraz, [green]w ktorym znajduje sie slowo [team]"czit" %map aim_map%~Gramy mape [team]aim_map %prefix de%~Gramy mape z prefixem [team]de %min_players 4%~Jest nas [team]wiecej[normal] na serwerze niz 3 %max_players 5%~Jest nas [team]mniej[normal] na serwerze niz 6. [green][you][normal] zapros znajomych na serwer! %time 10-11%~Mamy [green]godzine [team]10 %prefix de%~@mama~[green]Ktos napisal mama [normal]na mapie z prefixem [team]de %map de_dust%min_players 4%~Jest nas [team]wiecej[normal] niz 3 na mapie de_dust %prefix cs%max_players 5%~Jest nas [team]mniej[normal] niz 6 na mapie z prefixem [team]cs. [green][you][normal] zapros znajomych na serwer! %max_players 4%time 22-4%~Jest nas [team]mniej[normal] niz 5 i mamy godzine pomiedzy 22 a 4 w [team]nocy %map de_aztec%max_players 5%~@aim~Na mapie [team]de_aztec [normal]gdy jest mniej niz 6 graczy [green]nie ma aimow %prefix aim%min_players 5%time 19-0%~Gramy mape z prefixem [team]aim[normal], jest nas wiecej niz 4 oraz mamy godzine pomiedzy [green]19 a 12 w nocy
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".



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

Standardowa.




#323980 ad_manager
Napisane przez sebul
w 19.11.2011 20:32
#323942 ad_manager
Napisane przez Pro100WBANiE
w 19.11.2011 19:53
#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); } } }
#404613 [ROZWIĄZANE] Edycja BF2 v1.5.5a
Napisane przez
Gość
w 01.05.2012 16:45
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.

- AMXX.pl: Support AMX Mod X i SourceMod
- → Przeglądanie profilu: Reputacja: UberSkill
- Regulamin