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
 

Enson - zdjęcie

Enson

Rejestracja: 15.08.2011
Aktualnie: Nieaktywny
Poza forum Ostatnio: 24.02.2014 11:30
-----

#410363 Dobre i złe nawyki tworzenia menu

Napisane przez GwynBleidD w 14.05.2012 14:00

Krótka przedmowa, czyli o czym ten poradnik

Będzie to poradnik nie o samym tworzeniu menu, lecz o tym jak to, w zależności od sytuacji, robić prawidłowo. Skupię się tutaj wyłącznie na nowym typie menu, który w najnowszym amx umożliwia prawie tą samą funkcjonalność, co stary typ menu, a dużo większą wygodę użycia. Jedynym brakiem tutaj jest brak możliwości utworzenia linii informacyjnej przed pierwszym elementem w menu (czyli zaraz pod tytułem), co jednak można obejść tworząc wielolinijkowy tytuł, o czym na końcu tego tutorialu w ramach bonusu :) W praktyce będzie to prawie wyłącznie o użyciu info w menu, czyli jak go używać z głową i do czego może się przydać.

Omówienie funkcji zostawiam dokumentacji :) Najpierw omówię złe praktyki i opiszę dlaczego są złe


1. Konstruowanie switcha w oparciu o info

Często widzę taki "koszmarek" jak sterowanie switchem w handlerze poprzez info, gdzie w info zawiera się numer pozycji, w postaci tekstu. Jeśli nie wiesz o czym mówię, zobacz przykład:



public show_menu(id) {
    new menu = menu_create("Menu serwera", "handle_menu");
    
    menu_additem(menu, "Wyświetl regulamin", "1");
    if(cs_get_user_team(id)==CS_TEAM_CT)
        menu_additem(menu, "Kup AK47", "2");
    else
        menu_additem(menu, "Kup M4A1", "2");
    menu_additem(menu, "Wyświetl top15", "3");
    menu_additem(menu, "Zobacz inne serwery", "4");
    menu_additem(menu, "Przekaż pieniąde graczowi", "5");
    
    menu_display(id, menu)
}

public handle_menu(id, menu, item) {
    if(item == MENU_EXIT) {
        menu_destroy(menu);
        return PLUGIN_HANDLED;
    }

    new sKey[6], iKey, access, callback;
    menu_item_getinfo(menu, item, access, sKey, 5,_, _, callback);
    iKey = str_to_num(sKey);
    
    switch(iKey) {
        case 1: client_cmd(id, "say /regulamin");
        case 2: daj_bron(id);
        case 3: client_cmd(id, "say /top15");
        case 4: client_cmd(id, "say /serwery");
        case 5: client_cmd(id, "say /przelew");
    }
    
    menu_destroy(menu);
    return PLUGIN_HANDLED;
}

Co tu i dlaczego jest źle? a to, że wymyślamy koło na nowo i marnotrawimy zasoby. Otóż niepotrzebnie używamy 3ciego parametru itemów z menu o nazwie info, aby determinować co klient kliknął w menu, przez co generujemy niepotrzebne utworzenie 3ch zmiennych w handlerze, konieczność pobrania info i przekonwertowania na postać numeryczną + podanie do każdego itemu dodatkowego parametru info, co generuje dodatkowe zużycie zasobów. Może i niewielkie, ale na pewno niepotrzebne :) Więc na pewno tworzenie menu w taki sposób dobrą praktyką nie jest.


ad 1. Konstruowanie switcha w oparciu o parametr item

Teraz poprawna wersja z użyciem, stworzonego do tego celu, parametru item z handlera, który przechowuje numer tego elementu, licząc od 0, czyli ten sam plugin wyglądać może tak:

public show_menu(id) {
    new menu = menu_create("Menu serwera", "handle_menu");
    
    menu_additem(menu, "Wyświetl regulamin");
    if(cs_get_user_team(id)==CS_TEAM_CT)
        menu_additem(menu, "Kup AK47");
    else
        menu_additem(menu, "Kup M4A1");
    menu_additem(menu, "Wyświetl top15");
    menu_additem(menu, "Zobacz inne serwery");
    menu_additem(menu, "Przekaż pieniąde graczowi");
    
    menu_display(id, menu)
}

public handle_menu(id, menu, item) {
    if(item == MENU_EXIT) {
        menu_destroy(menu);
        return PLUGIN_HANDLED;
    }

    switch(item) {
        case 0: client_cmd(id, "say /regulamin");
        case 1: daj_bron(id);
        case 2: client_cmd(id, "say /top15");
        case 3: client_cmd(id, "say /serwery");
        case 4: client_cmd(id, "say /przelew");
    }

    menu_destroy(menu);
    return PLUGIN_HANDLED;
}

i gwarantuję, że zadziała tak samo, a nawet lepiej ;) Numeracja w item jest niezależna od numeracji klawiszy w menu, więc każdy additem i tylko additem zwiększa nam numer o 1, zaczynamy od 0 o czym trzeba pamiętać koniecznie. Exit nie ma numeru 0, ale specjalną wartość nazwaną MENU_EXIT, równą -3 (-2 i -1 to odpowiednio wstecz i dalej).


Trochę o samym parametrze info

No dobra, ale czym w końcu jest to info? Ano jest to informacja, którą możemy przekazać do handlerów menu, aby poinformować go o tym, co zawiera dana opcja. W przypadku przykładu 1, gdzie tworzymy je w kodzie statycznie lub prawie statycznie (różni się etykieta itemu pod klawiszem 2 w zależności od drużyny w podanym przykładzie) jest całkowicie zbędne. Jednak może się przydać przy tworzeniu dynamicznego menu. Oto następna zła praktyka:


2. Nieprawidłowe menu z graczami

Przyjrzyjmy się przykładowej implementacji menu do przelewu kasy, w którym możemy wybrać danego gracza i przelać mu pieniądze. Dla uproszczenia przyjąłem, że podaną funkcję show_przelew wywołuje handler z poprzedniego menu wyboru ilości kasy do przelania. Ilość ta jest podana w parametrze wartosc. gWartosci to 33 elementowa tablica globalna:

public show_przelew(id, wartosc) {
    new menu = menu_create("Wybierz gracza do przelania kasy", "handle_przelew");
    
    gWartosci[id] = wartosc;
    
    new players[32], num;
    get_players(players, num);
    for(new i=0; i<num; ++i) {
        new name[32];
        get_user_name(players[i], name, 31);
        menu_additem(menu, name);
    }
    
    menu_display(id, menu);
}

public handle_przelew(id, menu, item) {
    if(item == MENU_EXIT) {
        menu_destroy(menu);
        return PLUGIN_HANDLED;
    }

    new players[32], num;
    get_players(players, num);
    przelej_kase(id, players[item], gWartosci[id]);
    
    menu_destroy(menu);
    return PLUGIN_HANDLED;
}

Niby wszystko pięknie, na oko i po pierwszych testach działa, bo przecież itemów tworzymy tyle ile graczy, więc item będzie nam zwracał zawsze pozycję w tablicy players, którą zajmował dany gracz. No prawie... Bo co się stanie jak ktoś wyjdzie z serwera albo ktoś na serwer wejdzie? Jeśli nastąpi to w tablicy po indeksie gracza, którego chcemy wybrać to jeszcze pół biedy, ale jeśli przed to kolejność się zmieni. A niestety widziałem takie praktyki w wielu pluginach... No i w tym momencie dajemy kasę nie temu graczowi co trzeba...


ad 2. Prawidłowo działające menu z graczami

Jak to poprawić? użyć info! Tutaj, w przeciwieństwie do przykładu pierwszego, należy go użyć. Więc używajmy:

public show_przelew(id, wartosc) {
    new menu = menu_create("Wybierz gracza do przelania kasy", "handle_przelew");
    
    new players[32], num;
    new name[32], info[25];
    get_players(players, num);
    for(new i=0; i<num; ++i) {
        get_user_name(players[i], name, 31);
        formatex(info, 24, "%08X%08X%08X", wartosc, players[i], get_user_userid(players[i]));
        /*info[0] = wartosc; POPRAWKA - TEGO SPOSOBU WIĘCEJ NIE UŻYWAMY!
        info[1] = players[i];
        info[2] = get_user_userid(players[i]); */
        menu_additem(menu, name, info);
    }
    
    menu_display(id, menu);
}

public handle_przelew(id, menu, item) {
    if(item == MENU_EXIT) {
        menu_destroy(menu);
        return PLUGIN_HANDLED;
    }
    
    new info[25], access, callback;
    menu_item_getinfo(menu, item, access, info, 24,_, _, callback);
    new tid = hexstr_to_num(info[8], 8); // zaczynamy od 8 znaku i pobieramy 8 z nich, konwertując je z hex na liczbę
    new tuserid = hexstr_to_num(info[16], 8);
    new wartosc = hexstr_to_num(info, 8);
    if(is_user_connected(tid) && tuserid == get_user_userid(tid))
        przelej_kase(id, tid, wartosc);

    menu_destroy(menu);
    return PLUGIN_HANDLED;
}
hexstr_to_num(string[], chars) {
    new result=0;
    for(new i=0; i<chars && string[i]!='^0'; ++i)
        result = result<<4 + (string[i]>'9'?string[i]>'F'?string[i]-'a'+10:string[i]-'A'+10:string[i]-'0');
        return result;
    }
}

Jak widać potrzebne wartości, czyli id gracza i wartość kasy do przelania. Ale co? Przecież to nie jest napis, tylko tablica... A kto powiedział albo gdzieś napisał, że info musi być napisem? Może być tablicą, wszak napis też jest tablicą, tyle że specyficznie interpretowaną ;) więc zastosowanie jak najbardziej prawidłowe. (Znów aktualizacja! Ostatnio odkryłem, że niestety gdy funkcja napotka wartość 0, przerywa całkowicie wczytywanie dalszych wartości! Musimy więc przerobić liczbę na string!) Utworzyłem prosty string z 3 wartości liczbowych w postaci heksadecymalnej. Użyłem dość dziwnej konstrukcji %08F, zapewnia to wypełnienie zerami z przodu tak, aby liczba zawsze zajmowała 8 znaków. Dlaczego każda ma 8? liczba każda w AMX ma 32 bity, jedna cyfra HEX może zapisać 4, dalej chyba już jasne :) Stworzyłem również funkcję konwertującą string hexadecymalny na liczbę, aby wydobyć ze stringa spowrotem wartości. Dlaczego użyłem HEX? Prościej jest konwertować to na liczbę i zajmuje stałą ilość znaków ;) Teraz już nie martwimy się, że jakiś gracz ucieknie z serwera (no chyba, że ucieka nam gracz, do którego chcemy przelać kasę... ale wtedy po prostu kasa się nie przeleje, chyba że ktoś na miejsce wychodzącego gracza akurat wejdzie, na taki przypadek można zrobić weryfikację nicku lub sid jeszcze) (aktualizowałem kod pluginu zgodnie z sugestią użytkownika sebul) i mamy elegancko zrobione menu :) Jednocześnie zbędna stała się globalna tablica gWartosci, gdyż wartość kasy przesyłamy w tym samym info, co id gracza.
Mam nadzieję, że przykład ten jasno ilustruje do czego info w nowych menu powinno być używane.


3. Menu statyczne wyboru serwera, przykład nieco gorszy

Teraz jeszcze jeden przykład uzasadnionego użycia info, mimo menu statycznego. Oczywiście na początek ten... może tym razem po prostu gorszy, bo jak najbardziej poprawny ;) przykład, menu serwerów:

public show_serwery(id) {
    new menu = menu_create("Wybierz serwer na który chcesz przejść", "handle_serwery");
    
    menu_additem(menu, "Serwer GunGame");
    menu_additem(menu, "Serwer FFA");
    menu_additem(menu, "Serwer Diablo");
    
    menu_display(id, menu);
}

public handle_serwery(id, menu, item) {
    if(item == MENU_EXIT) {
        menu_destroy(menu);
        return PLUGIN_HANDLED;
    }

    switch(item) {
        case 0: client_cmd(id, "Connect 23.123.33.22:27033");
        case 1: client_cmd(id, "Connect 12.34.56.78:27090");
        case 2: client_cmd(id, "Connect 98.76.54.32:27010");
    }

    menu_destroy(menu);
    return PLUGIN_HANDLED;
}

Dlaczego przykład jest gorszy? trudniejszy w edycji, musimy w 2ch miejscach zmieniać, gdy chcemy zmienić listę serwerów.


ad 3. Menu wyboru serwera, przykład lepszy, wygodniejszy

Mimo, że poprawny jest, przedstawiam wariant wygodniejszy:

public show_serwery(id) {
    new menu = menu_create("Wybierz serwer na który chcesz przejść", "handle_serwery");
    
    menu_additem(menu, "Serwer GunGame", "23.123.33.22:27033");
    menu_additem(menu, "Serwer FFA", "12.34.56.78:27090");
    menu_additem(menu, "Serwer Diablo", "98.76.54.32:27010");
    
    menu_display(id, menu);
}

public handle_serwery(id, menu, item) {
    if(item == MENU_EXIT) {
        menu_destroy(menu);
        return PLUGIN_HANDLED;
    }

    new ip[32], access, callback;
    menu_item_getinfo(menu, item, access, ip, 31,_, _, callback);
    client_cmd(id, "Connect %s", ip);
    
    menu_destroy(menu);
    return PLUGIN_HANDLED;
}

W ten oto sposób mamy dużo wygodniejsze dodawanie i edycję listy serwerów, bo dla każdego serwera jest to jedna, przejrzysta linia. Dodatkowo drobną modyfikacją można uzyskać listę serwerów odczytywaną z pliku, nvaulta albo bazy SQL, wstawiając odpowiednią pętlę zamiast additem, oraz dodając obsługę jednego z wymienionych. Tutaj, mimo menu statycznego, mamy w pełni uzasadnione użycie info do determinowania akcji podejmowanej przez menu :)


I na koniec obiecany bonus

Jak wiecie, dzięki starym menu można tworzyć coś, co przypomina, albo i nie przypomina menu, np wyświetlić regulamin na kilkanaście linii i pod nim dać możliwość jego akceptacji. Na nowym menu można dokładnie to samo, wymaga to jednak tricków kilku.

O ile nie ma żadnych problemów, gdy np. chcemy wstawić po każdej opcji w menu linijkę opisującą, albo gdy wszystkie opcje w menu mają być na samej górze, a dodatkowy tekst na dole, gdyż jest coś takiego jak menu_addblank i menu_addtext. Nie możemy ich jednak użyć przed użyciem choć raz menu_additem (nie wiem dlaczego tak twórcy amx głupio zrobili, ale tak zrobili). Jednak jest możliwość ominięcia tego niuansu przez ustawienie potrzebnych nam rzeczy w wielolinijkowym tytule. Tu następne ograniczenie: ustawienie tytułu poprzez menu_create posiada dosyć rygorystyczny limit znaków, musimy więc ustawić to poprzez menu_setprop(menu, MPROP_TITLE, ...) czyli np coś takiego:

    menu = menu_create("Regulamin serwera", "handler");
    menu_setprop(menu, MPROP_TITLE, "Regulamin serwera \yGunGame^n^nNa serwerze obowiązuje\rABSOLUTNY\yzakaz przeklinania^nNie wolno bugować mapy...");

    menu_additem(menu, "Akceptuję regulamin");
    menu_additem(menu, "Nie akceptuję regulaminu");
    menu_addtext(menu, " Nie zaakceptowanie regulaminu wiąże się z 5 minutowym banem");
    menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER);

I w taki sposób uzyskujemy ładny, czytelny regulamin, na nowych menu, z możliwością akceptacji ;) Prawda, że proste :)

Dziękuję za dotrwanie do końca :D

Copyright © Wszelkie prawa zastrzeżone
Kopiowanie tego poradnika lub treści w nim zawartych bez wyraźnej zgody autora jest zabronione i będzie ścigane z mocy prawa


  • +
  • -
  • 20


#37146 Gracze moga podnosić broń/ nie mogą podnosić broni

Napisane przez FakeNick w 23.01.2009 23:05




#include <amxmodx>

#include <hamsandwich>



//Pcvary

new pcvar_weapon



//Informacja o wersji

new const VERSION[] = "1.0"



public plugin_init()

{

	register_plugin("No weapon", VERSION, "FakeNick")

	

	//Rejestrujemy cvara

	pcvar_weapon = register_cvar("no_weapon","0")

	

	//Rejestrujemy touch'a dla danych byt'ow

	RegisterHam(Ham_Touch, "weaponbox", "fw_TouchWeapon")

	RegisterHam(Ham_Touch, "armoury_entity", "fw_TouchWeapon")

	RegisterHam(Ham_Touch, "weapon_shield", "fw_TouchWeapon")

}

public fw_TouchWeapon(weapon,id)

{

	//To nie gracz dotknal broni

	if (!is_user_connected(id))

		return HAM_IGNORED;

	

	//Sprawdzamy ustawienia cvara

	switch(get_pcvar_num(pcvar_weapon))

	{

		case 0 : return HAM_IGNORED;  // Wszyscy moga podnosic bron

		

		case 1 : // Tylko CT moga podnosic bron

		{

			if(get_user_team(id) == 1)

				return HAM_SUPERCEDE;

		}

		

		case 2 : // Tylko TT moga podnosic bron

		{

			if(get_user_team(id) == 2)

				return HAM_SUPERCEDE;

		}

		

		case 3 : return HAM_SUPERCEDE ; // Nikt nie moze podnosic broni

	}

	

	return HAM_IGNORED;

}

  • +
  • -
  • 6


#373072 Zakaz podnoszenia broni z ziemii.

Napisane przez Goliath w 29.02.2012 18:29

Nakupenda., pierwszy parametr Ham_Touch to ID bytu broni leżącej na ziemi, a nie ID broni. Powinno być raczej tak:
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>

public plugin_init()
{
register_plugin( "Block Weapon Pickup", "1.0", "Wrecked" )

RegisterHam( Ham_Touch, "weaponbox", "HamTouchPre", 0 )
RegisterHam( Ham_Touch, "armoury_entity", "HamTouchPre", 0 )
}

public HamTouchPre( weapon ) {
if(!pev_valid(weapon))
return HAM_IGNORED;

new name[20];
pev(weapon, pev_model, name, 19);
if(containi(name, "w_backpack") != -1)
return HAM_IGNORED;

return HAM_SUPERCEDE;
}

  • +
  • -
  • 1


#193963 Exp dla najlepszych 3 graczy

Napisane przez ToRRent w 05.12.2010 10:51

[COD] Exp dla najlepszych 3 graczy na mapie
v0.69

Dołączona grafika
Pod koniec mapy 3 graczy z największą liczbą fragów otrzymują bonusowe doświadczenie

Dołączona grafika
amxmodx
amxmisc
codmod

Dołączona grafika
Do poprawnego działania pluginu wymagany jest najnowszy QTM_CODmod (wersja finalna)

Changelog wersji v0.69:
- Problem z nie pokazywaniem ilości doświadczenia rozwiązany

Dołączona grafika
cod_exp1 "300" // ilosc doswiadczenia za 1 miejsce
cod_exp2 "150" // ilosc doswiadczenia za 2 miejsce
cod_exp3 "75" // ilosc doswiadczenia za 3 miejsce

Dołączona grafika
plik cod_nagrody_exp.sma należy umieścić w addons/amxmodx/scripting
plik cod_nagrody_exp.amxx należy umieścić w addons/amxmodx/plugins

Dołączona grafika
otwórz plik plugins-codmod.ini znajdujący się w addons/amxmodx/configs i pod linijką
QTM_CodMod.amxx
dopisz
cod_nagrody_exp.amxx

Dołączona grafika
Załączony plik  cod_nagrody_exp.sma   3,28 KB  3468 Ilość pobrań
  cod_nagrody_exp.amxx
Załączony plik  cod_nagrody_exp.amxx   4,06 KB  536 Ilość pobrań

  • +
  • -
  • 36


#590861 [Zapowiedz] AMXX Editor Online

Napisane przez DarkGL w 06.12.2013 17:24

Zrzut ekranu z 2013-12-02 13:10:31.png

 

Cel to wpełni działające środowisko programistyczne w przeglądarce ( wraz z znanymi ułatwieniami tzn. generatory ) oraz możliwość przenoszenia kodu między różnymi komputerami itp.

 

Mam nadzieję że projekt uda się ukończyć jednak jest mnóstwo problemów z obsługą w różnych przeglądarkach oraz problemów wydajnościowych.


  • +
  • -
  • 63


#300752 JailBreak gangi

Napisane przez Kapucha112 w 27.09.2011 13:50

opis


Stworzony przez : nikhilgupta345
Spolszczenie : F0RCE
Plugin ten pozwala na tworzenie gangów przez więźniów na serwerach typu JailBreak.
Po utworzeniu gangu można ulepszać umiejętności gangu, które działają na każdego w gangu.

Lista funkcji pluginu:

Stwórz gang - Pozwala na stworzenie gangu po uiszczeniu opłaty.
Zaproś do gangu - Tylko leader gangu może zapraszać innych do gangu.
Umiejętności - Otwiera menu z umiejętnościami. Każdy z gangu może ulepszać umiejętności całego gangu!
Top-10 -Pokazuje TOP10 wszystkie gangów. Uwaga sortowane są poprzez zabójstwa!
Opuść Gang - Pozwala na opuszczenie gangu! Uwaga Leader gangu może opuścić gang dopiero, gdy zrzeknie się przywództwa!
Menu Leadera Gangu - Pokazuje menu z opcjami Leadera gangu. Przywódca może wyrzucać z gangu, rozwiązać gang, lub przenieść przywództwo..
Gracze Online - Pokazuje graczy online z Twojego gangu.

inne informacje
Lista umiejętności:

Siłownia - Zwiększa poziom życia dla całego gangu!
Kradzież - Zwiększa ilość zarabianej kasy w gangu!
Grawitacja - Zmniejsza grawitacje dla calego gangu!
Atak - Zwiększa atak wszystkich członków gangu!
Speed - Zwiększa szybkość wszystkich w gangu
Obezwładnienie - Szansa na obezwładnienie strażnika(Wyleci mu broń z dłoni jak go zaatakujesz). (%1 większej szansy co level)


cvary

jb_gang_cost - Koszt utworzenia gangu.
jb_health_cost - Koszt ulepszenia siłowni.
jb_stealing_cost - Koszt ulepszenia kradzieży.
jb_gravity_cost - Koszt ulepszenia grawitacji.
jb_damage_cost - Koszt ulepszenia ataku.
jb_stamina_cost - Koszt ulepszenia speeda.
jb_weapondrop_cost - Koszt ulepszenia obezwładnienia.
jb_health_max - Maksymalny poziom ulepszenia siłowni.
jb_stealing_max - Maksymalny poziom ulepszenia kradzieży.
jb_gravity_max - Maksymalny poziom ulepszenia gravitacji.
jb_damage_max - Maksymalny poziom ulepszenia ataku.
jb_stamina_max - Maksymalny poziom ulepszenia speeda.
jb_weapondrop_max - Maksymalny poziom ulepszenia obezwładnienia.
jb_health_per - Ilosc HP za ulepszenia siłowni.
jb_stealing_per - Ilosc $$ za ulepszenia ulepszenia kradzieży.
jb_gravity_per - O ile mniejsza grawitacja za ulepszenia grawtacji.
jb_damage_per - O ile więcej obrażeń zadajemy za ulepszenia ataku.
jb_stamina_per - O ile szybciej biegamy za ulepszenia speeda.
jb_weapondrop_per - Ile % szans za ulepszenie Obezwładnienia.



instalacja

1# Pobierz plugin(Lub źródło i dodatkowe includy)
2# Umieść 'jb_gangs.amxx' w folderze addons/amxmodx/plugins/
3# Otwórz plik plugins.ini
4# Dodaj linijke 'jb_gangs.amxx' na samym dole.
5# Zresetuj serwer lub zmień mapę

komendy

/gang -> Otwiera menu gangów
/gangy -> Otwiera menu gangów

wymagane moduly

#include < amxmodx >
#include < amxmisc >
#include < sqlvault_ex >
#include < cstrike >
#include < colorchat >
#include < hamsandwich >
#include < fun >

Podziękowania:

F0RCE - Cały pomysł pluginu i udział w Beta Testach (Ja)
Exolent - SQLVault

Mam powód by wrzucać ten plugin. Miał on być dostępny tylko dla mnie, jednak zdecydowałem razem z autorem wrzucić go publicznie.
Zostałem także upoważniony przez autora, by donosić o wszelkich błędach i sugestiach.
Spolszczyłem ten plugin, jeżeli będą jakieś błędy w tłumaczeniu to proszę donosić w tym temacie.

Aktualnie plugin zapisuje leadera gangu na STEAMID. Postaramy się wykonać to tak, aby dało się zapisywać na NICK/IP.

Wrzucam od razu spolszczoną wersje i plik AMXX.
Nie każdy umie kompilować lokalnie więc z pewnością powinno to ułatwić sprawę.

Pozdrawiam.


Changelog:

September 26, 2011 - v1.0 - Wydanie pluginu
September 27, 2011 - v1.01 - Dodanie nowych cvarow, załatanie błędów.

  • Musisz mieć oba sqlvault .inc w folderze include aby plugin kompilował się poprawnie.
  • Plugin utworzy plik z nazwą 'jb_gangs.ini' w Twoim folderze configs, gdzie sa wszystkie nazwy, i umiejętności gangu. Możesz edytować umiejętności gangu, ale zmiany w nazwie spowodują błędy zapisu.
  • Plugin uzywa SQL do zapisu..

Załączone pliki


  • +
  • -
  • 53


#414821 Call of Duty: MW Mod [UPDATE]

Napisane przez sebul w 26.05.2012 22:47

Postanowiłem poprawić trochę zapis oraz odczyt z pliku vault, dodałem także automatyczne usuwanie nie używanych kont co 30 dni (można zmienić) oraz staty z expem mniejszym niż 1, nie zapisują się. Teraz raczej już nikomu się nie przydarzy coś takiego jak samoistne usuwanie statów, bo powodem jest zbyt duży plik vault. Do tego chyba większość wie, że im większy plik vault, tym bardziej obciąża serwer, więc takie usuwanie na pewno jest dobrym rozwiązaniem.

Załączone pliki


  • +
  • -
  • 27


#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


#74946 Ranga

Napisane przez R3X w 31.07.2009 15:47

Ranga

Jest to zoptymalizowany, łatwiejszy w konfiguracji plugin Sn!ffera. Dodałem też opcję top10 i cvar do informacji na HUD.

Źródło na który oparty jest plugin: Ranga - Nieoficjalny polski support AMX Mod X

Komendy w czacie
/top10
pokazuje top10
/rank
pokazuje informacje dot. rangi i statystyk
/rangi
pokazuje listę rang
Konfiguracja

Cvary
rangi_maxname "Nazwa"
domyślnie "Reszta jest milczeniem"
Ranga gracza, który przekroczył wszystkie podane progi fragów
rangi_hud 0|1
domyślnie 0
Zmień na 1 jeśli chcesz pokazywać graczowi info na HUD non-stop, 0- tylko komenda
rangi_top10 0|1
domyślnie 1
Zmień na 0 jeśli chcesz wyłączyć opcję Top10
rangi_list 0|1
domyślnie 1
Zmień na 0 jeśli chcesz wyłączyć opcję Listy rang

Rangi
Plik amxmodx/configs/rangi.ini zawiera listę rang i progów fragów w systemie:

"Nazwa rangi" "górny próg"

Cytując oryginalną zawartość tego pliku:

"Wiesniak" 29
"Lama" 59

Wieśniak jest pierwszy, więc nie ma dolnego progu, górny ustawiamy na 29 stąd gracze z fragami mniejszymi 29 mają rangę wieśniak.

Kolejna jest lama, której dolny próg wynosi (górny poprzedniego + 1) => 29+1=30, górny próg ustawiamy na 59 stąd gracze z fragami 30-59 mają rangę lama.

itd

Ważne: progi muszą być wpisane w kolejności rosnącej!

Maksymalna ilość wpisów (rang) to domyślnie 20, można zmienić w sobie kodzie:
#define LEVELS 20

Załączone pliki

  • Załączony plik  rangi.rar   14,49 KB  4854 Ilość pobrań

  • +
  • -
  • 16


#383 mapchooser4

Napisane przez bicek w 19.01.2008 03:17

mapchooser4
Czwarta odsłona standardowego pluginu do votowania map. Plugin posiada dużo nowych funkcji, takich jak zapamiętanie pięciu ostatnio granych map i nie wyświetlania ich w głosowaniu. Można także włączyć nominowanie map ;)
*NEW! - Dodano opcję rockthevote i plik z mapami gdy jest mało graczy (poniżej 10)

Instalacja:
Tak jak każdy inny plugin :P
wyłączyć standardowy mapchooser.amxx!

Cvar'y:
dopisujemy oczywiście do amxx.cfg i ustawiamy według uznania :)
amx_mapchooser_type "1"	 	// 0-mapy do votowania wybierane sa z pliku, 1-nominowanie map do votowania, 2-brak votowania
amx_mapchooser_mapsloc "0" 	// 0-używa amx_mapchooser_mapsfile, 1-używa mapcycle, 2-używa folderu z mapami
amx_mapchooser_mapsfile "maps.ini" // nazwa pliku w amxmodx/configs/ ,używany go kiedy amx_mapchooser_mapsloc ustawione jest na "0"
amx_mapchooser_mapsfile_s "maps_small.ini" // plik użyty kiedy amx_mapchooser_mapsloc jest ustawiony na 0 
i jest poniżej 10 osób na serwerze. Trzeba stworzyć ten plik
amx_nominfromfile "0" 		// 0-gracze mogą nominować wszystkie mapy z folderu map, 1-gracze mogą nominować tylko mapy z amx_mapchooser_mapsfile
amx_maxnominperplayer "1" 	// ile map może nominować jeden gracz
amx_map_history 5 			// Ile ostatnich granych map nie ma być w vote
amx_extendmap_max "10" 		// maksymalny czas dla całkowitego rozszerzenia mapy (w minutach)
amx_extendmap_step "10" 		// z jakim czasem mapa zostanie rozszerzona (czas w minutach)
amx_ext_round_max "1" 		// ile razy mapa może być rozszerzana
amx_ext_round_step "1" 		// z jaką liczbą rund mapa zostanie rozszerzona
amx_ext_win_max "1" 		// ile razy mapa może być rozszerzana
amx_ext_win_step "1" 		// z jaką liczbą rund mapa zostanie rozszerzona
amx_rtv "1"				// włączyć/wyłączyć opcję rockthevote (wymuszanie głosowania)
amx_rtv_percent "0.6"			// stosunek (%/100) ile graczy musi powiedzieć rockthevote aby wymusić głosowanie
amx_rtv_min_time "10"		// minimalny czas (w minutach) wymagany od rozpoczęcia mapy aby wymusić głosowanie (możliwość użycia opcji rockthevote)
amx_rtv_map_time "10"		// czas pomiędzy sukcesem głosowania na mapie (po rtv) i zmianie mapy (zamiast czekać do końca rundy)

Załączone pliki




#355242 ScreenShot'y Zapis SQL

Napisane przez byCZUS w 29.01.2012 16:13

ScreenShot SQL!
by byCZUS & Gh0st

opis

Witam, jakiś czas temu napisałem sobie plugin do ss'ów, w którym można zmienić typ robionego screena (BMP / TGA).
Po zrobieniu danej ilości screenów plugin automatycznie banuje(zależne od cvarów). Po włączeniu zapisu SQL i wpisaniu poprawnych danych tabela zostaje stworzona automatycznie.

Można sobie wyłączyć zapis SQL dodając // przed
#define SQL_ZAPIS


instalacja

Standardowa, jeżeli chodzi o amxx.
Skrypt php wgrywamy na stronę i edytujemy plik data.php, ustawiamy dane do SQL !

komendy admina

amx_ss <authid, nick or #userid> [screens] [type 0/1]
amx_screen <authid, nick or #userid> [screens] [type 0/1]


Aby screeny zostały zrobione wystarczy wpisać amx_ss nick, jeżeli nie podamy ilości zostanie zrobione 5 ss'ów BMP.

cvary

ss_hostname "" - hostname bazy danych, jeżeli wybrany zapis SQL
ss_username "" - użytkownik bazy danych, jeżeli wybrany zapis SQL
ss_password "" - hasło bazy danych, jeżeli wybrany zapis SQL
ss_database "" - nazwa bazy danych, jeżeli wybrany zapis SQL
ss_mscreens "10" - maksymalna ilość screenów
ss_interval "1.0" - co ile robione są screeny
ss_sitemap "http://amxx.pl" - strona wyświetlana w konsoli
ss_banplayer "1" - 0/1 Czy ma banować gracza
ss_bantime "0" - jeżeli banować to czas (0 perm)
ss_banreason "Wrzuc screeny na forum" - powód bana

inne informacje

NOWY TYP BANOWANIA (BMP + TGA jednocześnie)

Warto też dodać sobie do addons/amxmodx/configs/clcmds.ini takie coś

"3 Screeny BMP" "amx_ss #%userid% 3 0" "bd" "u"
"3 Screeny TGA" "amx_ss #%userid% 3 1" "bd" "u"
"5 Screenow BMP" "amx_ss #%userid% 5 0" "bd" "u"
"5 Screenow TGA" "amx_ss #%userid% 5 1" "bd" "u"


Pozwoli nam to łatwiej robić screeny danemu graczowi :] (Komendy gracza) w amxmodmenu

Teraz czas na demo jak to wszystko wygląda z poziomu przeglądarki Screeny

Dodam, że początkowo skrypt długo może się ładować bo sprawdza mapy na gametrackerze jeżeli je znajdzie to zostaną pobrane i wczytywane już będą z naszej strony (folder maps). Dodatkowo, obrazki są skalowane do odpowiedniej wielkości by mniej ważyły.

Szczególne podziękowania dla Gh0st za napisanie skryptu PHP !

Masz propozycje ? Napisz !!

No to aktualizacja, ver 1.2

Wypieramy Amxbans ScreenShot !

1.0 - Pierwsze wydanie.
1.1 - Dodano: menu w amxmodmenu, ułatwia pracę !

screenshot
Dołączona grafika
Dołączona grafika
Dołączona grafika

Zachęcam do downloadu :D I testowania, jeżeli występują błędy proszę pisać :]

To co wyświetla się w Ilość screenów można zmieniać w
new const menu_ss[][] = {
{ 3, BMP }, { 5, BMP }, // Ilosc, Typ
{ 3, TGA }, { 5, TGA }
};


download
W paczce są stare pliki sma !

Załączone pliki


  • +
  • -
  • 37


#87236 [Poradnik] Instalacja Psychostats

Napisane przez MaTusz w 13.10.2009 04:28

Zamieszczam swój Poradnik,myśle że bardziej zrozumiały i opisany niż ten co jest w Tym temacie Dołączona grafika
Proszę o nie usuwanie,na pewno się przyda Dołączona grafika

Instalacja Psychostats 3.1


<p>Wymagania:

~ Hosting WWW ( W tym poradniku wykorzystałem hosting Hitme.pl ale na większości hostingów wygląda tak samo )
~ Psychostats ( Poradnik dla wersji 3.1 - przy innych wersjach prawdopodobnie będzie tak samo )
~ PHP w wersji 5 lub wyższej
~ Baza MySQL ( z możliwością zdalnych połączeń )
~ PERL ( w większości płatnych serwerów )
~ CRON TAB ( inaczej Harmonogram Zadań )


1. Tworzenie bazy danych pod Psychostats:

~ W tym celu logujemy się do naszego panelu administracyjnego (w tym przypadku Cpanel)
~ Przechodzimy do zakładki Kreator baz MySQL i tworzymy baze danych,nadając jej swoją nazwe i hasło (można wygenerować za pomocą przycisku Dołączona grafika lub wpisać swoje) i nadajemy prawa dostępu.

Dołączona grafika
Dołączona grafika
Dołączona grafika
Dołączona grafika

~ Klikamy Następny Krok i nasza baza została utworzona
~ Nie zapomnijcie o zapisaniu sobie nazwy bazy,użytkownika i hasła,w naszym przypadku będzie to wyglądało tak:

nazwa bazy = psychost_psychostats
użytkownik bazy = psychost_matusz
hasło bazy = |u|u/19Pz,zt

2. Przygotowanie do Instalacji:

~ Ściągamy najnowszą wersje Psychostats 3.1 pod Linuxa STĄD lub MIRROR Linux
~ Rozpakowujemy na Pulpit

3. Kopiowanie na FTP:

~ Do głownego Katalogu serwera (przed public_html) kopiujemy katalog lib oraz pliki stats.cfg i stats.pl

Dołączona grafika

~ Ustawiamy atrybuty 777 (CHMOD 777) na plik stats.pl

Dołączona grafika

~ Edytujemy plik stats.cfg i stats.pl dopisując dane

W stats.cfg
dbtype = mysql
dbhost = localhost
dbport =
dbname = psychost_psychostats
dbuser = psychost_matusz
dbpass = |u|u/19Pz,zt
dbtblprefix = ps_

W stats.pl (na samym dole)
dbtype = mysql
dbhost = localhost
dbport =
dbname = psychost_psychostats
dbuser = psychost_matusz
dbpass = |u|u/19Pz,zt
dbtblprefix = ps_

~ Następnie w katalogu public_html tworzymy folder o nazwie psychostats

Dołączona grafika

~ I kopiujemy do niego zawartość folderu upload (podkreślam zawartość nie folder)

Dołączona grafika

~ Następnie wchodzimy do katalogu psychostats , szukamy pliku config.php i nadajemy mu odpowiednie atrybuty (CHMOD) 777

Dołączona grafika

~ Zawartość pliku (po instalacji psychostats) config.php powinna wyglądać w ten sposób:

[code=auto:0]

Załączone pliki


  • +
  • -
  • 21


#152655 damagebits

Napisane przez Miczu w 18.07.2010 19:46

Scrypt do sprawdzania rodzaju obrażen - bitów obrażeń.

Spoiler


4098 - broń palna cs'a, nóż
(1<<24) - He_granade (tak naprawdę nie ma definicji takiej jak DMG_HEGRANADE

Ps. nie wiem czy to się przyda komuś, ale macie :)
  • +
  • -
  • 7


#284437 Map Spawns Editor v1.0

Napisane przez Lunatic w 17.08.2011 23:37

Dołączona grafika
Za pomocą tego pluginu z łatwością można edytować, kasować i dodawać spawany na mapach za pomocą wygodnego menu.

Dołączona grafika
* amx_spawn_editor 1/0 // Włącz / Wyłącz edycję
* amx_editor_menu // Otwórz menu edycji

Dołączona grafika
// Standardowa
1. Plik Map_Spawns_Editor.amxx wrzucić do \addons\amxmodx\plugins
2. W pliku \addons\amxmodx\configs\plugins.ini dodać na koniec Map_Spawns_Editor.amxx
3. Plik map_spawns_editor.txt wrzucić do \addons\amxmodx\data\lang
4. Zresetować serwer lub zmienić mapę

Załączone pliki


  • +
  • -
  • 32


#67274 Colored Smokenades

Napisane przez Abes Mapper w 15.06.2009 22:17

Colored Smokenades
by xPaw


Dołączona grafika
Ten plugin robi kolorowe dymy dla smokegrenade :D

Dołączona grafika
sv_colored_smoke 1
//0 - kolorowe dymy wyłączone
//1 - losowe wybieranie spośród 6-ściu kolorów
//2 - Według drużyny - dym będzie miał kolor drużyny która żuciła granat


Dołączona grafika
Standardowa [ http://amxx.pl/viewtopic.php?t=20 ]
sprites.zip wypakować do cstrike

Dołączona grafika
Dołączona grafika Dołączona grafika

Dołączona grafika
Dym nie znika na początku nowej rundy

Załączone pliki


  • +
  • -
  • 18