
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.
|
Maruda515
Rejestracja: 16.03.2013Aktualnie: Nieaktywny
Poza forum Ostatnio: 07.04.2013 23:38





Statystyki
- Grupa: Użytkownik
- Całość postów: 33
- Odwiedzin: 1 378
- Tytuł: Życzliwy
- Wiek: Wiek nie został ustalony
- Urodziny: Data urodzin nie została podana
-
Imię
Arek
-
Płeć
Mężczyzna
-
Lokalizacja
się nie zmienia
Kontakt
Narzędzia użytkownika
Znajomi
Maruda515 nie posiada znajomych
Ostatnio byli
Brak ostatnio odwiedzających do wyświetlenia
#531115 [ROZWIĄZANE] Nie wyświetla tekstu.
Napisane przez K!113r
w 03.04.2013 19:17

#531137 [ROZWIĄZANE] Nie wyświetla tekstu.
Napisane przez MateuszKuCi
w 03.04.2013 20:15
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "Przywitanie"
#define VERSION "1.0"
#define AUTHOR "KuCi123"
public plugin_init() {
register_plugin("Przywitanko", "1.0", "KuCi123")
register_clcmd("say /hi", "Witam")
}
public Witam(id)
{
client_print(id, print_chat, "Witam :)")
}
#529668 [ROZWIĄZANE] Problem z grawitacją
Napisane przez K!113r
w 30.03.2013 15:10
Drugi parametr to nie jest wartość grawitacji jaką ustawiasz graczowi, tylko stosunek do grawitacji ustawionej na serwerze (sv_gravity)
Przy sv_gravity 800, 0.5 to 400
Przy Twoim 500.0 to trochę duża (400000), co chcesz tym osiągnąć? Bo może jest lepszy sposób na osiągnięcie Twoich założeń.
#529531 Speed na moment
Napisane przez
Gość
w 29.03.2013 21:39
#529553 Speed na moment
Napisane przez
Gość
w 29.03.2013 22:56
#529561 Speed na moment
Napisane przez
Gość
w 29.03.2013 23:22
I to nie po złości.
Powodzenia.
#493342 Ruletka
Napisane przez
Gość
w 24.12.2012 22:18
Pewnie nieraz chciałeś zainstalować na swojego 4funa ruletkę, ale nie mogłeś odnaleźć?
Odnalazłeś, ale mimo to nie podoba Ci się konfiguracja? Udało Ci się skonfigurować kod,
ale ruletka okazała się niewypałem? Gracze blokowali się w ścianie? Tracili kasę, nie mając jej?
Bomba znikała z mapy, przez co nie mogłeś wykonać celów mapy? A może po prostu edycja
Twojej ruletki z dziesiątkami tysięcy linijek Cię przerasta i czujesz duży dyskomfort w edycji?
Nadchodzi Ruletka od Benia

Od teraz każda nagroda w twojej ruletce, to osobny plugin.
Przyjemne API pozwoli kompleksowo i w czytelny sposób edytować nagrody.
Dowolnie możesz konfigurować swoją ruletkę, ustalając cvary nagród czy ruletki,
a instalacja nowej nagrody ogranicza się jedynie do instalacji nowego pluginu.
Stworzenie i dodanie własnej nagrody nie sprawi Ci żadnego problemu.
Nie! dla powtarzających się nagród
Możesz już zapomnieć o losowaniu co chwilę tej samej nagrody dzięki zaawansowanemu
systemowi ograniczania losowania tej samej nagrody w krótkich odstępach czasu.
Nie! dla bezcelowych nagród
Nie otrzymasz już więcej nagrody, która nie przyniesie skutku, jak strata pieniędzy, których
nie masz, a wszystko dzięki ustawionym wymaganiom w SMA dla poszczególnych nagród.
Większe szanse dla wybranych nagród
Każda nagroda może posiadać swoją własną moc, czyli
iloczyn szansy na wylosowanie wobec innych nagród.
System karmy
Ciągłe otrzymywanie dobrych bądź złych nagród zostanie dzięki karmie odwrócone,
do czasu wyrównania karmy. Koniec z ciągle złymi bądź ciągle dobrymi nagrodami.

Ruletka to plugin, który pozwala na wylosowanie przez graczy nagrody po wpisaniu na say /ruletka
Komendy, które aktywują ruletkę, umieszczone są w pliku amxmodx/configs/roulette_keywords.ini
W każdej linii należy umieścić jedną komendę, średnik na początku linijki, nie bierze jej pod uwagę.
Komendy będą działać zarówno wpisane wprost w konsolę, jak i przepisane, bądź poprzedzone slashem
na sayu lub team_sayu. Zmiany dokonane w tym pliku konfiguracyjnym będą widoczne po zmianie mapy.
Dziecinnie proste
W celu ułatwienia edycji i możliwości kompleksowego zarządzania nagrodami, każda nagroda
pisana jest jako osobny plugin, zwyczajowo nazwany jako roulette_nazwa_nagrody.amxx
Multizadaniowość
Każdy gracz może użyć ruletki maksymalnie raz na rundę.
Wielu graczy może grać równocześnie w ruletkę.
(Nie)Odpłatność ruletki
Ustawienie cvaru roulette_prize na dodatnią kwotę, pozwoli na ustalenie odpłatności
ruletki, czyli gra w ruletkę będzie obarczona opłatą w wysokości ustalonej tym cvarem.
Deweloperskie Menu nagród
Ruletka automatycznie dodaje do Menu Administracyjnego (amxmodmenu) Menu "Ruletka".
Menu pozwala na testowanie nowych nagród na Twoim serwerze. Wystarczy wybrać daną
nagrodę i zostanie ona przyznana bez sprawdzania wymogów ani bez odbierania pieniędzy.


Przykładowe, automatycznie wygenerowane menu deweloperskie w amxmodmenu:
http://youtu.be/VT-pa4L6YSk
Gdy nie żyjemy, bądź oglądamy grę jako obserwatorzy, wywołanie danej nagrody
z menu, spowoduje przyznanie jej graczowi, którego właśnie obserwujemy.
Wywołanie nagrody "Bandyci" na widzu z przykładowego menu deweloperskiego:
http://youtu.be/WyHyKYKgObw

roulette_prize 1000 // <0|cena> koszt zagrania w ruletkę (w dolarach) Ustawienie tego cvaru na 0, wyłączy odpłatność ruletki
roulette_ban 20 // <0|liczba> liczba najbliższych losowań, dla których wylosowana nagroda nie będzie brana pod uwagę w losowaniu
roulette_sv_speed 1 // <0|1> jeśli ustawione na 1, ustawiony zostanie cvar sv_maxspeed na 1000, umożliwiając stosowanie bonusów szybkości
roulette_cl_speed 1 // <0|1> jeśli ustawione na 1, cvary prędkości graczy zostaną ustawione na 1000, umożliwiając stosowanie bonusów szybkości
roulette_karma 250 // <-1|liczba> poziom karmy, po przekroczeniu którego zostanie wylosowana nagroda o przeciwnej karmie. -1 wyłącza system karmy

amxmodx
amxmisc
celltrie
colorchat
cstrike
fakemeta
hamsandwich
tutor

Autor: Paweł "benio101" Benetkiewicz
Licencja: PAL


Opcjonalne pliki do wstawienia na fastDL


Instalacja ruletki
Copy & Play: Wypakowujemy zawartość paczki do katalogu cstrike. Gotowe!
Nie trzeba robić nic ponadto, nawet dopisywać pluginu do plugins.ini. Wystarczy zmienić mapę.
Instalacja nagród (tylko dla dodatkowych nagród spoza tej paczki)
Wszystkie pliki nagród (*.amxx) kopiujemy do katalogu addons/amxmodx/plugins
Do pliku addons/amxmodx/configs/plugins-roulette.ini dodajemy ich nazwy wraz z końcówką .amxx
Jeśli korzystasz z WinSCP i chcesz pobrać listę nazw plików do skopiowania, wystarczy, że
zaznaczysz pliki nagród do ruletki, klikniesz PPM › File Names › Copy to Clipboard. Wtedy
wystarczy wkleić gotową listę nagród do ruletki do pliku addons/amxmodx/configs/plugins-roulette.ini
Istotna kolejność (tylko przy instalacji dodatkowych nagród spoza tej paczki)
Zwróć uwagę, by główny plugin roulette.amxx był wpisany na samej górze w pliku konfiguracyjnego plugins-roulette.ini
Dopiero pod wpisem roulette.amxx umieszczaj wpisy plików z nagrodami do ruletki, inaczej się one nie załadują.

Spadochron do ruletki
Standardowy spadochron jest niekompatybilny z większością pluginów i modyfikacji związanych z grawitacją.
Zastąpienie dotychczasowego spadochronu, pluginem Spadochron by H.RED.ZONE, rozwiąże ten problem.
Grawitacja nie będzie się resetowała po użyciu spadochronu, a spadochron graczy niewidzialnych także będzie niewidzialny.

Poniżej przedstawiam opis dla programistów, którzy chcieliby edytować / tworzyć własne nagrody.
Informacje deweloperskie:



Dokumentacja Ruletki
Tworzenie nowej nagrody
W funkcji plugin_init


/*
Registers new prize, native must be placed in plugin_init function
desc - short description for developer menu. Limit: 100 characters
karma - how good is prize
positive value for favorable prizes
negative value for unfavorable prizes
0 for neutral or hard to assess prizes
pwr - the product of chance on the prize drawn, recommended value: POWER
key - translates key if set to true or just register prize with given name
Returns registered prize id. Prize ids begins from 0
*/
native register_prize(desc[200], pwr=POWER, karma=0, bool:key=true);
W pierwszym argumencie podajemy krótki opis nagrody, w drugim zaś moc.
Opis nagrody będzie wyświetlany w menu deweloperskim.
Moc nagrody z kolei określa szansę na wylosowanie nagrody.
Ostatecznie, spośród wszystkich nagród, które spełnią wymagania do zostania wylosowanymi,
losowanie odbędzie się metodą ważoną, czyli każda nagroda uzyska x% szansy na wylosowanie,
przy czym x jest równe ilorazowi mocy tej nagrody oraz sumy mocy wszystkich dostępnych nagród.
Aby ułatwić zmniejszanie mocy dla poszczególnych, potężniejszych nagród,
które chcielibyśmy, by rzadziej były losowane, zdefiniowana została stała POWER,
by możliwe było wygodne zmniejszanie szansy na wylosowanie nagrody kilkukrotnie.
/*
draw power =7!, for example, prize with 3× less chance to get out from draw,
we register with power: POWER/3: register_prize("prize name", POWER/3);
*/
#define POWER 5040
Trzecim argumentem jest karma, która określa, jak dobra jest nagroda.
Dla nagród neutralnych, bądź trudnych do oceny, karma winna wynosić wartość 0.
Dla nagród pozytywnych, bądź negatywnych, wartości winny być dodawane odpowiednio.
Zaleca się, by wartości karmy przyznawane były w zakresie od -100 do 100.
W celu łatwiejszej edycji, stworzone zostało kilka definicji dla karmy:
// some predefines karma levels for prizes
#define KARMA_WORST "-100"
#define KARMA_VERY_BAD "-75"
#define KARMA_BAD "-50"
#define KARMA_QUITE_BAD "-25"
#define KARMA_MINUS "-1"
#define KARMA_NEUTRAL "0"
#define KARMA_PLUS "1"
#define KARMA_QUITE_GOOD "25"
#define KARMA_GOOD "50"
#define KARMA_VERY_GOOD "75"
#define KARMA_BEST "100"
Warunek nagrody
Do kodu dodajemy forward check_prize

/*
Ask for ability to draw the prize for a given player
id - number of player to draw the prize
Returning ROULETTE_ALLOW allows for draw the prize
Returning ROULETTE_BLOCK disallows for draw the prize
*/
forward check_prize(id);
Zwracamy w niej jedną z dwóch wartości
enum{Jeśli chcemy, by nagroda była zawsze dostępna, wpisujemy proste
ROULETTE_BLOCK, // Blocks forward execute or disallow for executing
ROULETTE_ALLOW // Executes the forward or allow for executing
}
public check_prize(id){Możemy jednak ograniczyć nagrodę, np. tylko dla terrorystów:
return ROULETTE_ALLOW;
}
public check_prize(id){Forward może zostać wykonany w momencie zagrania przez któregoś
return get_user_team(id)==1?ROULETTE_ALLOW:ROULETTE_BLOCK;
}
z graczy w ruletkę, więc można założyć, że przynajmniej jeden gracz jest żywy.
Pozwolenie na reset mocy
Do kodu dodajemy także forward power_reset

ROULETTE_ALLOW, bądź ROULETTE_BLOCK. Zwrócenie ROULETTE_ALLOW pozwoli na
zresetowanie mocy nagrody w przypadku, gdy wszystkie nagrody są niedostępne, bądź
podczas banicji ustalanej cvarem roulette_ban, ROULETTE_BLOCK nie pozwoli wymusić
resetu mocy, opcja przydatna, jeśli chcemy twardo ograniczyć użycie nagrody raz na mapę.
/*
Ask for change prize`s power
id - number of player to reset the power
Returning ROULETTE_ALLOW allows for prize`s power reset
Returning ROULETTE_BLOCK disallows for prize`s power reset
*/
forward power_reset(id);
Podobnie, jak dla forwardu check_prize

Wywołanie nagrody
Dodajemy także forward execute_prize

nagrody przez jakiegoś gracza i przyjmie jako jedyny argument jego numer identyfikacyjny (1-32).
Forward wykonywany jest tylko dla żywych graczy, więc sprawdzanie, czy gracz żyje, jest zbędne.
/*
Executes prize by given player
id - number of player wchich drew the prize
*/
forward execute_prize(id);
Zmiana mocy nagrody
Za pomocą natywu change_prize_power

/*
Forces prize power change
id - number of player, which power is changed
if set to 0, power is changed for all players
pwr - new power to set
Returns old player`s prize power or -1 if id is 0
*/
native change_prize_power(id=0, pwr=0);
Opcja ta jest przydatna do ograniczenia gry w ruletkę dla poszczególnego gracza oraz
do manipulacji mocą w przypadku określonych czynności, bądź implementacji systemu
zmniejszającego szanse po każdorazowym wylosowaniu, czy blokowaniu nagrody dla
graczy po określonych wydarzeniach, odciążając nagrodę z losowania właściwego.
Zmiana karmy gracza
Nieraz dokładna karma nagrody będzie możliwa do określenia dopiero po wykonaniu pewnych operacji,
np. wylosowania ilości dodawanego życia. Wówczas warto skorzystać z natywu, dodającego karmę graczowi.
Istotne jest jednak, by początkowa wartość karmy była dodatnia dla pozytywnych nagród bądź ujemna dla negatywnych.
/*
Sets user karma level
id - number of player to set new karma
if set to 0, karma is set to all players
karma - new karma to set
Returns old player`s karma or -1 if id is 0
*/
native set_user_karma(id=0, karma=0);
/*
Gets user karma level
id - number of player to get karma
*/
native get_user_karma(id);
Zmiana karmy nagrody
Można zmienić także domyślną karmę dla nagrody:
/*
Changes prize`s karma
karma - new karma to set
Returns prize`s old karma
*/
native change_prize_karma(karma=0);
Czas do końca rundy
Przydatny natyw, zwracający liczbę sekund do końca rundy.
Zastosowanie głównie przy dobieraniu warunku dostępności nagrody.
/*
Gets time to end of round in seconds
*/
native timeleft();
Multilang
Ruletka jest pluginem w pełni wielojęzycznym.
Zaimplementowana została własna struktura słowników drzewiastych.
/*
Registers new dictionary of keys to translate
file - dictionary`s filename placed in data/lang
*/
native register_translate(file[128]);
/*
Translates key registered by register_translate
id - number of player to translate key for
key - the key to translate
result - the output for translated key
*/
native translate(id, key[128], result[896]);
Wszelkie argumenty tłumaczenia kluczy dotyczą tego właśnie słownika drzewiastego.
Proste informacje
W celu prostego informowania gracza, oraz jego widzów o wylosowanej nagrodzie
i jej przebiegu, stworzony został natyw prize_info

/*
Shows information of drawed message to winner and his spectators
id - number of player to show the information
color - color of the message to show.
Available colors to choose:
YELLOW, GREEN, RED, BLUE
key - translates key if set to true or just shows given message
msg - message to show for a player. Limit of 190 characters
msgSpec - message to show for player`s spectators. Same limit.
channel - binary sum of channels message to show
1 - ColorChat
2 - Tutor
4 - Center
time - how long the tutor message have to lasts (float value)
*/
native prize_info(id, color=INFO_YELLOW, msg[190]="", msgSpec[190]="", bool:key=true, channel=3, Float:time=10.0);
enum(<<=1){ // Message channels used in prize_info native
MSG_COLORCHAT=1,
MSG_TUTOR,
MSG_CENTER
}
enum{ // Colors are projected to be compatible with ColorChat
INFO_YELLOW=1, // Yellow color has been added to make names more sense
INFO_GREEN,
INFO_RED=5,
INFO_BLUE
}
Proste odliczanie
Nie tylko informacje na sayu / tutorze są przydatne.
Gotowy jest też natyw do prostego odliczania:
/*
Shows counter centered information to winner and his spectators
Uses client_print print_center in format: "translated_key: number"
id - number of player to show the counter
key - the key to translate, being the prize name
number - number to show (f.e. seconds left, HP left, etc.)
spect - specifies, if show counter to spectators too.
*/
native prize_counter(id, key[128], number, bool:spect=true);
Szablon nagrody
#include <amxmodx>
#include <roulette>
public plugin_init(){
register_plugin("Roulette Prize name", "0.1", "Prize Author");
register_prize("Prize name: Short prize description");
}
public execute_prize(id){
}
public check_prize(id){
return ROULETTE_ALLOW;
}
public power_reset(id){
return ROULETTE_ALLOW;
}
Flaga FCVAR_SHOWALL
W celu prostszej rejestracji cvarów o flagach z odnotowywanymi zmianami, dodana została definicja:
// defines cvar bitsum value, showing cvar`s existing and every change
#define FCVAR_SHOWALL FCVAR_ARCHIVE|FCVAR_SERVER
Limitacja miękka globalna
Standardowo, plugin ruletki, ogranicza losowanie tej samej nagrody
dla jednego gracza w bliskim odstępie losowań, domyślnie ta sama
nagroda może wystąpić dopiero po wylosowaniu 20 innych nagród.
Wyjątkiem jest przypadek, gdy żadna nagroda nie jest dostępna do
wylosowania. Wtedy dochodzi do próby zresetowania mocy nagród.
Szablon kodu do miękkiej limitacji globalnej na liczbę rund ustawianą
cvarem roulette_prize_name_rounds_ban o domyślnej wartości 20.
#include <amxmodx>
#include <roulette>
new ban=0, c_rounds_ban;
public plugin_init(){
register_plugin("Roulette Prize name", "0.1", "Prize Author");
register_prize("Prize name: Short prize description");
register_logevent("roundStart", 2, "1=Round_Start");
c_rounds_ban=register_cvar("roulette_prize_name_rounds_ban", "20", FCVAR_SHOWALL);
}
public execute_prize(id){
change_prize_power(id, 0);
ban=get_pcvar_num(c_rounds_ban);
}
public roundStart(){
if(ban){
--ban;
}
}
public check_prize(id){
return ban?ROULETTE_BLOCK:ROULETTE_ALLOW;
}
public power_reset(id){
return ROULETTE_ALLOW;
}
Limitacja twarda globalna
Limitacja twarda różnić się będzie tym, że wymuszenie resetu mocy nagrody będzie
blokowane poprzez zwrócenie ROULETTE_BLOCK w wywołaniu forwardu power_reset

enum{
ROULETTE_BLOCK, // Blocks forward execute or disallow for executing
ROULETTE_ALLOW // Executes the forward or allow for executing
}
W podobny sposób można zmienić domyślną liczbę limitacji dla poszczególnych użytkowników.
Tworzenie funkcji czasowej
#include <amxmodx>Stworzyliśmy zmienną globalną prize[33], przechowującą licznik czasu dla poszczególnych graczy.
#include <hamsandwich>
#include <roulette>
new maxPlayers, prize[33];
public plugin_init(){
register_plugin("Roulette Prize name", "0.1", "Prize Author");
register_prize("Prize name: Short prize description");
register_logevent("roundEnd", 2, "1=Round_End");
register_logevent("roundEnd", 2, "1=Game_Commencing");
RegisterHam(Ham_Killed, "player", "killed", 1);
}
public plugin_cfg(){
maxPlayers=get_maxplayers();
}
public execute_prize(id){
prize[id]=20;
new data[1];
data[0]=id;
set_task(1.0, "timer", _, data, 1, "a", prize[id]);
}
public timer(data[]){
new id=data[0];
if(is_user_alive(id) && prize[id]){
if(--prize[id]){
// tutaj wykonujemy kod co sekunde, dla dodatniego licznika czasu
} else {
// licznik czasu wlasnie dobiegl zera, wykonujemy pewien, inny kod
}
}
}
public killed(vid, kid, shouldgib){
if(prize[vid]){
prize[vid]=0;
}
}
public client_putinserver(id){
prize[id]=0;
}
public roundEnd(){
remove_task();
for(new i=1; i<=maxPlayers; ++i){
prize[i]=0;
}
}
public check_prize(id){
return ROULETTE_ALLOW;
}
public power_reset(id){
return ROULETTE_ALLOW;
}
Licznik przyjmie pewną wartość, gdy gracz wylosuje nagrodę (execute_prize

gracza, który będzie wykonywać się co sekundę. W przykładzie ustawiono czas na 20 sekund.
Następnie, co sekundę wywoływana będzie funkcja timer, w której to już musimy sprawdzić, czy gracz żyje
oraz posiada timer, czyli ma nagrodę aktywną. Tu też zmniejszamy czas i wykonujemy odpowiedni kod.
Koniec nagrody może nastąpić standardowo na 3 sposoby:
- Koniec czasu (licznik osiągnął wartość zerową)
- Zabicie gracza (stąd funkcja killed)
- Koniec rundy (funkcja roundEnd)
Należy pamiętać, by uwzględnić wszystkie wymienione możliwości skończenia się czasu.
Po skończonym czasie możemy też bez problemu wywołać funkcję, przywracającą gracza
do normalności, jeśli wykonywaliśmy na nim zaawansowane operacje, np. oddać mu nóż.
Funkcja czasowa z licznikiem
Dodamy teraz funkcjonalny licznik do naszej funkcji czasowej, czyli baza praktyczna.
Skorzystamy także z czasu losowanego, ograniczanego wartościami dwóch cvarów.
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <roulette>
new maxPlayers, prize[33];
new c_prize_min, c_prize_max;
public plugin_init(){
register_plugin("Roulette Prize name", "0.1", "Prize Author");
register_prize("Prize name: Short prize description");
register_logevent("roundEnd", 2, "1=Round_End");
register_logevent("roundEnd", 2, "1=Game_Commencing");
RegisterHam(Ham_Killed, "player", "killed", 1);
c_prize_min=register_cvar("c_prize_name_min", "10", FCVAR_SHOWALL);
c_prize_max=register_cvar("c_prize_name_max", "20", FCVAR_SHOWALL);
}
public plugin_cfg(){
maxPlayers=get_maxplayers();
}
public execute_prize(id){
// gracz o numerze id wylosowal nagrode
// tutaj wykonujemy operacje tuz po wylosowaniu nagrody
prize[id]=random_num(get_pcvar_num(c_prize_min), get_pcvar_num(c_prize_max));
prize_info(id, INFO_BLUE, "PRIZE_NAME_DESC", "PRIZE_NAME_DESC_SPEC");
prize_counter(id, "PRIZE_NAME", prize[id]);
new data[1];
data[0]=id;
set_task(1.0, "timer", _, data, 1, "a", prize[id]);
}
public timer(data[]){
new id=data[0];
if(is_user_alive(id) && prize[id]){
if(--prize[id]){
// tutaj wykonujemy kod co sekunde, dla dodatniego licznika czasu
prize_counter(id, "PRIZE_NAME", prize[id]);
} else {
// licznik czasu wlasnie dobiegl zera, wykonujemy pewien, inny kod
prize_info(id, .key=false, .channel=MSG_CENTER);
}
}
}
public killed(vid, kid, shouldgib){
if(prize[vid]){
prize[vid]=0;
}
}
public client_putinserver(id){
prize[id]=0;
}
public roundEnd(){
remove_task();
for(new i=1; i<=maxPlayers; ++i){
prize[i]=0;
}
}
public check_prize(id){
return ROULETTE_ALLOW;
}
public power_reset(id){
return ROULETTE_ALLOW;
}
W momencie wygrania nagrody, wypisujemy dla gracza oraz wszystkich, którzy go obserwują,
informację o nagrodzie zarówno na sayu, jak i w Tutorze. Do tego wyświetlany jest licznik czasu
na środku ekranu. W przykładzie zastosowano kolory czerwone, oznaczające zazwyczaj złą nagrodę,
jednak inwencja kolorystyki pozostaje wolą autora danej nagrody, choć zaleca się używanie kolorów
zielonych wobec dobrej nagrody, czerwonych wobec złej, niebieskich wobec neutralnych / informacji.
W ruletce wykorzystywany jest tutor, tak więc konieczne jest, by został on pobrany i był umieszczony na serwerze.
Skopiuj po prostu zawartość archiwum tutor.rar do katalogu cstrike na serwerze, a plik tutor.inc
do folderu scripting/include, by móc kompilować takie pluginy. Oficjalny temat o Tutorze na forum.


Tutor będzie działał poprawnie u graczy dopiero za drugim wejściem na serwer, będzie działał zarówno
u graczy CS CZ, jak i CS 1.6. Funkcje tutorPrecache oraz tutorInit są konieczne do działania tutora.
Poza tutorem, w wielu nagrodach wykorzystywany jest także stock StripWeapons,
który pozwala na pozbawienie gracza wybranej broni, bądź typu broni.

Limit miękki gracza
Po otrzymaniu nagrody, wywołujemy na graczu
change_prize_power(id, 0);
Dzięki temu, gracz nie wylosuje nagrody
aż do końca mapy lub resetu mocy nagród.
Changelog
24.12.2012 1.0 N Init version
28.12.2012 2.0 + Added custom configuration files. Plugin is fully plug & play now
03.01.2013 2.1 $ Fixed incorrect plugin native change prize power call
04.01.2013 2.2 + Added cutom map`s custom configuration files settings service
08.01.2013 3.0 % Improved memory usage, replacing stable tables with the cellarray
11.01.2013 3.1 $ Fixed the ArrayGetArray incorect identifier usage
13.01.2013 4.0 + Added multilanguage service, changed main plugin language to english
13.01.2013 4.0.1 $ Changed variables names and comments to english
13.01.2013 4.0.2 $ Fixed null sized array initialize while no prizes
13.01.2013 4.1 % Improved menu show while no prizes
13.01.2013 4.2 $ No more searching for winning prize`s execute forward id twice
28.01.2013 5.0 % Merged ConnorMcLeod`s get_remaining_seconds and Roulette
28.01.2013 5.0.1 + Added timeleft native
29.01.2013 5.1 + Added register_translate and translate natives
30.01.2013 5.1.1 $ Fixed translations for tutor
30.01.2013 5.2 + Added prize_info native
30.01.2013 5.3 $ Added register_prize multilang support
30.01.2013 5.3.1 % Improved some comparisons usage
30.01.2013 5.3.2 $ Fixed infinity loop bug when prize`s default power is 0
01.02.2013 6.0 + Added karma system
02.02.2013 6.0.1 % Improved some natives returns
02.02.2013 6.1 + Added change_prize_karma, set_user_karma and get_user_karma natives
03.02.2013 6.1.1 % Improved some natives parameters and variables usage
03.02.2013 6.1.2 + Added source code sections and some comments blocks
04.02.2013 6.1.3 + Added KARMA_* defines in INC file
04.02.2013 6.1.4 + Added POWER_STR, allowing use it directly in prize`s power cvars
04.02.2013 6.2 % Reduced POWER(_STR) to 7! to avoid integer overflow more effectively
04.02.2013 6.2.1 + Added FCVAR_SHOWALL definition to simplify registering some cvars
05.02.2013 6.2.2 $ Fixed translate native not returning translated string
05.02.2013 6.2.3 + Added credits informations in info section of SMA file
05.02.2013 6.3 + Added prize_counter native to simplify showing counters
06.02.2013 6.3.1 % Moved descriptions in INC file over the content to cooperate with editors
05.03.2013 6.3.2 % Changed array of booleand into bitsum, added bitsum defines
#493345 Ruletka
Napisane przez
Gość
w 24.12.2012 22:22
Amator Budownictwa

Daje graczowi TMP z 30 nabojami, 500 AP i hełm.
Gracz otrzymuje 90% szansy na uniknięcie obrażeń.
Za każde trafienie wroga, dostaje 2 ammo, za zabicie, 5 ammo.
W trakcie trwania nagrody, nie może kupować, ani podnosić arsenału.
Wymagania
Minimum 30 sekund do końca rundy
Arsenał

Daje graczowi pełen arsenał broni.
Gracz traci bronie i granaty. Otrzymuje 2HE, 2FB, 1SG,
kamizekę z 200AP, hełm, dEagle, autopompę, AWP i krowę.
Jako CT dostaje też M4, FiveseveN i zestaw rozbrajający.
Jako Terrorysta, dostaje także AK47 i Dual Elites.
Wymagania
Brak broni podstawowej (slot1)
AWP

Daje graczowi AWP.
Gracz traci pistolet.
Wymagania
Brak broni podstawowej (slot1)
Posiadanie pistoletu (slot2)
Bandyci

Gracz traci cały arsenał.
Oczywiście nóż, zestaw rozbrajający, ani
ewentualna bomba nie zostaną zabrane.
Wymagania
Posiadanie broni podstawowej (slot1) LUB
Pistoletu oraz min. jednego granatu
Błyskawica

Gracz zostanie uderzony błyskawicą,
chwilowo oślepiony, ziemia się zatrzęsie
oraz gracz zostanie na chwilę podpalony.
http://youtu.be/iqOF3kv5dK8
Wymagania
Minimum 10 sekund do końca rundy

roulette_lightning_min 20 // <minimalne obrażenia od błyskawicy>
roulette_lightning_max 50 // <maksymalne obrażenia od błyskawicy>
roulette_lightning_burn_min 2 // <minimalny czas podpalenia>
roulette_lightning_burn_max 8 // <maksymalny czas podpalenia>
Bomberman

Gracz może kłaść bombę wszędzie.
Wymagania
Posiadanie bomby
Bóg

Gracz dostaje GodModa na ograniczony czas.
http://youtu.be/3qdmkXzhzao
Wymagania
Minimum roulette_god_speed+5 sekund do końca rundy

roulette_god_min 10 // <minimalny czas trwania GodModa>
roulette_god_max 20 // <maksymalny czas trwania GodModa>
roulette_god_speed 450 // <prędkość gracza podczas GodModa>
Cichobiegi

Nie słychać kroków gracza.
Wymagania
Minimum 30 sekund do końca rundy
Cienias

Zadajesz 2× mniej obrażeń.
Wymagania
Brak
Czapka niewidka

Gracz staje się niewidzialny na ograniczony czas.
Wymagania
Minimum roulette_invisible_cap_max+5 sekund do końca rundy

roulette_invisible_cap_min 12 // <minimalny czas trwania niewidzialności>
roulette_invisible_cap_max 26 // <maksymalny czas trwania niewidzialności>
roulette_invisible_cap_speed 500 // <prędkość gracza podczas trwania nagrody>
Duch

Gracz dostaje NoClipa na ograniczony czas.
Wymagania
Minimum roulette_ghost_max+5 sekund do końca rundy

roulette_ghost_min 8 // <minimalny czas trwania NoClipa>
roulette_ghost_max 22 // <maksymalny czas trwania NoClipa>
roulette_ghost_speed 500 // <prędkość gracza podczas NoClipa>
ESP

Wygrywasz ESP
Wymagania
Brak
Główka

Możesz zabić z broni tylko HeadShotem.
Wymagania
Brak
Granaty

Dostajesz losową liczbę granatów.
Wymagania
Brak

roulette_grenades_he_min 4 // <minimalna liczba HE do wylosowania>
roulette_grenades_he_max 8 // <maksymalna liczba HE do wylosowania>
roulette_grenades_fb_min 6 // <minimalna liczba FB do wylosowania>
roulette_grenades_fb_max 12 // <maksymalna liczba FB do wylosowania>
roulette_grenades_sg_min 2 // <minimalna liczba SG do wylosowania>
roulette_grenades_sg_max 4 // <maksymalna liczba SG do wylosowania>
Hacker

Dostajesz mnóstwo życia.
Wymagania
Brak

roulette_hacker_life 150 // <liczba punktów życia, jakie otrzyma gracz>
Hazardzista

Zmienia stan gotówki na losową liczbę dolarów.
Wymagania
Brak

roulette_gambler_min 1 // <minimalna liczba dolarów do wylosowania>
roulette_gambler_max 10000 // <maksymalna liczba dolarów do wylosowania>
Idiota

Zmienia model gracza na idiotę.
Wymagania
Minimum 30 sekund do końca rundy
Kameleon

Daje graczowi przebranie przeciwnej drużyny.
Po chwili teleportuje go na miejsce spawnu wroga.
Wymagania
Minimum 45 sekund do końca rundy
Karma

Gracz zostaje slapowany przez ograniczony czas.
Wymagania
Minimum roulette_karma_num_max+5 sekund do końca rundy

roulette_karma_num_min 5 // <minimalny czas trwania slapowania>
roulette_karma_num_max 15 // <maksymalny czas trwania slapowania>
roulette_karma_dmg_min 1 // <minimalna wartość obrażeń każdego slapa>
roulette_karma_dmg_min 9 // <maksymalna wartość obrażeń każdegoslapa>
Kasyno

Gracz przegrywa określoną liczbę dolarów.
Wymagania
Minimum dwukrotność roulette_casino_money dolarów

roulette_casino_money 3000 // <liczba przegrywanych dolarów>
Kieszonkowe

Gracz wygrywa określoną liczbę dolarów.
Wymagania
Nie więcej, niż roulette_pocket_money_money dolarów.

roulette_pocket_money_money 3000 // <liczba wygrywanych dolarów>
Kopniak

Gracz dostaje kopniaka, tracąc pewną liczbę HP.
Wymagania
Brak

roulette_kick_min 15 // <minimalna liczba zabieranych punktów życia>
roulette_kick_max 25 // <maksymalna liczba zabieranych punktów życia>
Krowa

Gracz dostaje krowę, traci inne bronie.
Wymagania
Posiadanie jakiejkolwiek broni
Ludzka Bomba

Gracz zostaje ludzką bombą.
Wybucha wraz ze śmiercią bądź końcem czasu.
Wymagania
Minimum roulette_human_bomb_max+5 sekund do końca rundy
Limit globalny
Co min. roulette_human_bomb_rounds_ban rund

roulette_human_bomb_min 20 // <minimalny czas do wybuchu bomby>
roulette_human_bomb_max 40 // <maksymalny czas do wybuchu bomby>
roulette_human_bomb_range 1000 // <zasięg rażenia bomby>
roulette_human_bomb_rounds_ban 5 // <liczba rund limitu globalnego>
Łuskator

Gracz nie musi przeładowywać amunicji.
Amunicja zadaje o 25% więcej obrażeń.
Bonus trwa aż do śmierci lub końca mapy.
Wymagania
Minimum 5 sekund do końca rundy
Brak właśnie aktywnego Łuskatora
Mała Niewidzialność

Gracz jest prawie niewidzialny nawet z bronią.

roulette_small_invisibility_min 10 // <0-254> minimalna wartość niewidzialności
roulette_small_invisibility_max 50 // <0-255> maksymalna wartość niewidzialności
Wymagania
Brak
Małpa

Gracz wysoko skacze.

roulette_monkey_min 0.2 // <0.0-0.99> minimalny iloczyn grawitacji (float)
roulette_monkey_max 0.5 // <0.0-1.0> maksymalny iloczyn grawitacji (float)
Wymagania
Brak
Medyk

Gracz ma zmienione HP na losową liczbę.
Wymagania
Brak

roulette_medic_min 1 // minimalna liczba życia do wylosowania
roulette_medic_max 200 // maksymalna liczba życia do wylosowania
Multijump

Gracz dostaje multijumpa do końca mapy.
Wymagania
Minimum 5 minut do końca mapy
Brak aktywowanego multijumpa
Limit twardy użytkownika
Raz wylosowana nagroda przez danego użytkownika
nie będzie losowana dla niego ponownie. Wszelkie próby
zresetowania mocy dla tego użytkownika będą blokowane.

roulette_multijump_jumps 3 // <liczba dodatkowych skoków w powietrzu>
Niewidzialny Bóg

Gracz staje się niewidzialny ani niezniszczalny na określony czas.
Wymagania
Minimum roulette_invisible_god_max+5 sekund do końca rundy
Limit miękki gracza
Gracz nie będzie mógł ponownie wylosować nagrody.
aż do końca mapy lub do zresetowania mocy nagród.

roulette_invisible_god_min 14 // <minimalny czas trwania nagrody>
roulette_invisible_god_max 16 // <maksymalny czas trwania nagrody>
roulette_invisible_god_speed 500 // <prędkość gracza podczas trwania nagrody>
Ninja

Gracz zostaje Ninja.
Ma tylko nóż, nie słychać jego kroków.
Biega trochę szybciej, bardzo wysoko skacze.
Jest prawie niewidzialny, ale ma tylko 50 HP.
W trakcie trwania nagrody, nie może kupować, ani podnosić arsenału.
http://youtu.be/XbElPGEQoGE
Wymagania
Minimum 30 sekund do końca rundy
Nożownik

Gracz zostaje nożownikiem.
Dostaje dużo życia i szybciej biega.
W trakcie trwania nagrody, nie może kupować, ani podnosić arsenału.
http://youtu.be/ErMpU4yjA9w
Wymagania
Minimum 30 sekund do końca rundy

roulette_cutthroat_speed 500 // <prędkość nożownika>
roulette_cutthroat_hp 1000 // <liczba życia nożownika>
Obrażenia

Gracz zadaje losową liczbę obrażeń.
Wymagania
Brak

roulette_damage_min 1 // <minimalna liczba obrażeń>
roulette_damage_max 111 // <maksymalna liczba obrażeń>
Ogień

Gracz płonie aż do śmierci lub końca rundy.
Wymagania
Minimum 30 sekund do końca rundy
Limit miękki gracza
Gracz nie będzie mógł ponownie wylosować nagrody.
aż do końca mapy lub do zresetowania mocy nagród.

roulette_fire_min 1 // <minimalna liczba obrażeń co sekundę>
roulette_fire_max 3 // <maksymalna liczba obrażeń co sekundę>
Podatek

Gracz płaci podatek w punktach życia.
Wymagania
Brak

roulette_tax_vat 23 // <wysokość podatku w HP>
Przebieraniec

Gracz ostaje strój wroga.
Wymagania
Minimum 35 sekund do końca mapy
Rambo

Gracz zostaje Rambo.
Dostaje krowę i obrażenia * 100 przez limitowany czas.
Wymagania
Minimum roulette_rambo_max+5 sekund do końca mapy

roulette_rambo_min 15 // <minimalny czas trwania Rambo>
roulette_rambo_max 25 // <maksymalny czas trwania Rambo>
Rany

Doznajesz 2× więcej obrażeń.
Wymagania
Brak
Samobójca

Gracz zostaje samobójcą.
Dostaje nóż, 25000 HP i szybciej bieg.
Po 30 sekundach lub klikając LPM+PPM,
wybucha, zabijając pobliskich wrogów.
Samobójca traci wszystkie bronie poza nożem.
W trakcie trwania nagrody, nie może kupować, ani podnosić arsenału.
Wymagania
Brak
Limit globalny
Co min. roulette_suicide_bomber_rounds_ban rund

roulette_suicide_bomber_min 25 // <minimalny czas do automatycznego wybuchu samobójcy>
roulette_suicide_bomber_max 35 // <maksymalny czas do automatycznego wybuchu samobójcy>
roulette_suicide_bomber_speed 400 // <prędkość samobójcy>
roulette_suicide_bomber_range 777 // <zasięg rażenia wybuchu samobójcy>
roulette_suicide_bomber_rounds_ban 5 // <liczba rund limitu globalnego>
Schabowy

Gracz je schaba.
Dostaje losową liczbę HP.
Wymagania
Maksymalnie dwukrotność dodawanego życia ze schabowego

roulette_schnitzel_hp 100 // <liczba dodawanego HP za zjedzenie schabowego>
Słoń

Gracz zostaje słoniem i nisko skacze.
Wymagania
Brak

roulette_elephant_min 1.5 // <minimalny iloczyn grawitacji> (float)
roulette_elephant_max 2.5 // <maksymalny iloczyn grawitacji> (float)
Snajper

Gracz zostaje snajperem.
Dostaje 222 HP, AWP i jest prawie niewidzialny. Traci inne bronie.
W trakcie trwania nagrody, nie może kupować, ani podnosić arsenału.
Wymagania
Minimum roulette_sniper_max+5 sekund do końca rundy

roulette_sniper_min 15 // <minimalny czas trwania nagrody>
roulette_sniper_max 25 // <maksymalny czas trwania nagrody>
Staruch

Gracz porusza się dużo wolniej przez określony czas.
Wymagania
Minimum roulette_old_man_max+5 sekund do końca rundy

roulette_old_man_min 8 // <minimalny czas trwania nagrody>
roulette_old_man_max 15 // <maksymalny czas trwania nagrody>
roulette_old_man_speed 72 // <prędkość starucha>
Strata fragów

Gracz traci losową liczbę fragów.
Wymagania
Brak

roulette_frag_loss_min 1 // <minimalna liczba fragów do stracenia>
roulette_frag_loss_max 2 // <maksymalna liczba fragów do stracenia>
Strata gotówki

Gracz traci całą gotówkę.
Wymagania
Minimum 5000 dolarów
Strata zgonów

Gracz tarci losową liczbę zgonów.
Wymagania
Brak

roulette_death_loss_min 1 // <minimalna liczba zgonów do stracenia>
roulette_death_loss_max 5 // <maksymalna liczba zgonów do stracenia>
Szybcior

Gracz biega bardzo szybko przez limitowany czas.
Wymagania
Minimum roulette_windman_max+5 sekund do końca rundy

roulette_windman_min 12 // <minimalny czas trwania nagrody>
roulette_windman_max 24 // <maksymalny czas trwania nagrody>
roulette_windman_speed 1000 // <2-1000> szybkość biegu podczas nagrody
Ślepiec

Gracz ślepnie na określoną liczbę sekund.
Wymagania
Minimum roulette_blind_max+5 sekund do końca rundy

roulette_blind_min 10 // <minimalny czas oślepienia>
roulette_blind_max 15 // <maksymalny czas oślepienia>
Teleport

Gracz zostaje teleportowany na resp wroga.
Wymagania
Minimum 40 sekund do końca rundy

roulette_teleport_min 3 // <minimalny czas do teleportu>
roulette_teleport_max 6 // <maksymalny czas do teleportu>
Weteran noża

Gracz jest całkowicie niewidzialny z nożem w ręku.
Wymagania
Minimum 45 sekund do końca rundy
Wieśniak

Gracz zostaje wieśniakiem.
Za każde trafienie wroga, dostaje 2 ammo, za zabicie, 5 ammo.
Dostaje UZI z jednym magazynkiem z szansą 20% na obrażenia ×1000.
W trakcie trwania nagrody, nie może kupować, ani podnosić arsenału.
Wymagania
Minimum 30 sekund do końca rundy
Wolny frag

Gracz zostaje teleportowany na resp wroga z dEagle.
Następnie zostaje na ograniczony czas zakopany pod ziemią.
W trakcie trwania nagrody, nie może kupować, ani podnosić arsenału.
Wymagania
Minimum 40 sekund do końca rundy

roulette_free_frag_min 3 // <minimalny czas do teleportacji>
roulette_free_frag_min 6 // <maksymalny czas do teleportacji>
roulette_free_frag_time 15 // <czas zakopania pod ziemią po teleportacji>
Wygrana gotówka

Gracz wygrywa gotówkę.
Wymagania
Mniej, niż 10000 dolarów

roulette_money_win_min 1000 // <minimalna gotówka do wygrania>
roulette_money_win_max 13000 // <maksymalna gotówka do wygrania>
Wygrane fragi

Gracz wygrywa fragi.
Wymagania
Brak

roulette_frag_win_min 1 // <minimalna liczba wygranych fragów>
roulette_frag_win_max 3 // <maksymalna liczba wygranych fragów>
Wygrane zgony

Gracz wygrywa zgony.
Wymagania
Brak

roulette_death_win_min 1 // <minimalna liczba wygranych zgonów>
roulette_death_win_max 3 // <maksymalna liczba wygranych zgonów>
Wygrane życie

Gracz wygrywa życie.
Wymagania
Nie więcej, niż 111 HP

roulette_life_win_min 50 // <minimalne HP do wygrania>
roulette_life_win_max 150 // <maksymalne HP do wygrania>
Zakopane

Gracz traci wszystkie bronie i zostaje zakopany pod ziemią na ograniczony czas.
Wymagania
Minimum roulette_buried_max+5 sekund do końca rundy

roulette_buried_min 15 // <minimalny czas trwania nagrody>
roulette_buried_max 25 // <maksymalny czas trwania nagrody>
Zboczeniec

Gracz zostaje zboczeńcem i zabija, gwałcąc swoją wielką, zieloną pałą.
Traci wszystkie bronie, wraz z nożem. jest nieśmiertelny, szybko biega.
W trakcie trwania nagrody, nie może kupować, ani podnosić arsenału.
http://youtu.be/hZV2gMBCHJI
Wymagania
Minimum roulette_rapist_max+5 sekund do końca rundy
Limit miękki gracza
Gracz nie będzie mógł ponownie wylosować nagrody.
aż do końca mapy lub do zresetowania mocy nagród.

roulette_rapist_min 20 // <minimalny czas trwania nagrody>
roulette_rapist_max 30 // <maksymalny czas trwania nagrody>
roulette_rapist_speed 300 // <prędkość zboczeńca>
Zeus

Gracz zostaje Zeusem.
Gracz dostaje NoClipa i GodModa na ograniczony czas.
Wymagania
Brak
Limit miękki gracza
Gracz nie będzie mógł ponownie wylosować nagrody.
aż do końca mapy lub do zresetowania mocy nagród.

roulette_zeus_min 12 // <minimalny czas trwania nagrody>
roulette_zeus_max 18 // <maksymalny czas trwania nagrody>
roulette_zeus_speed 700 // <prędkość Zeusa>
Zmartwychwstanie

Gracz dostaje 3 dodatkowe życia.
http://youtu.be/vPoGLWwP4x4
Wymagania
Minimum 5 minut do końca mapy
Brak aktywowanego multijumpa
Limit twardy użytkownika
Raz wylosowana nagroda przez danego użytkownika
nie będzie losowana dla niego ponownie. Wszelkie próby
zresetowania mocy dla tego użytkownika będą blokowane.
Żebrak

Gracz wyżebrze pod kościołem pewną liczbę dolarów.
Wymagania
Maksymalnie dwukrotność roulette_pauper_money dolarów

roulette_pauper_money 1500 // <liczba dodawanych dolarów graczowi>
#529509 Zmiana prędkości gracza
Napisane przez
Gość
w 29.03.2013 21:05
Prędkość, z jaką porusza się gracz to iloczyn jego maksymalnej prędkości oraz spowolnienia (np. po skoku, otrzymaniu niektórych obrażeń czy podczas używania spadochronu).
Jednakże chcąc dodać graczowi bonus prędkości, bądź go spowolnić, wystarczy się skupić na jego maksymalnej prędkości i tym się właśnie zajmiemy.
Prędkość standardowa
Standardowo, prędkość maksymalna gracza jest ustalana głównie w 3 sytuacjach (dla CS 1.6):
- Przy aktywowaniu broni, gdzie wartość maksymalnej prędkości gracza jest ustalana w zależności od przyjmowanej broni (210 - 260):
- 210: AWP, G3SG1, SG550
- 220: M249
- 221: AK47
- 230: M3, M4A1
- 235: SG552
- 240: XM1014, Galil, Famas, AUG
- 245: P90
- 250: Glock, USP, P228, dEagle, Elites, FiveseveN, UZI, TMP, MP5, UMP ,Knife , HE, FB, SG, C4
- 260: Scout
- Przy rozpoczęciu podkładania bomby (0)
- Przy rozpoczęciu rozbrajania bomby (0)
Maksymalna prędkość graczy jest ograniczona bezwzględnie:
- do 1000 przez HLDS
- przez cvar serwera sv_maxspeed
- przez cvary każdego z graczy:
- cl_forwardspeed dla biegu do przodu
- cl_backspeed dla biegu do tyłu
- cl_sidespeed dla biegu w bok
- cl_upspeed dla szybkości wspinania się po drabinie
- cl_downspeed dla szybkości schodzenia z drabiny
warto ustawić cvar serwera sv_maxspeed na 1000.
Do tego, możemy zmieść graczom limity ustalone przez nich samych:
public client_connect(id){
client_cmd(id, "cl_forwardspeed 1000");
client_cmd(id, "cl_backspeed 1000");
client_cmd(id, "cl_sidespeed 1000");
client_cmd(id, "cl_upspeed 1000");
client_cmd(id, "cl_downspeed 1000");
}
Zmiana prędkości gracza
Maksymalna prędkość gracza zapisana jest jako dana prywatna bytu (pdata) pod identyfikatorem pev_maxspeed.
Jednak dużo łatwiej będzie nam korzystać z gotowych natywów set_user_maxspeed


jednakże, jak już wiemy, prędkość gracza zmienia się m.in. wraz z aktywowaniem broni, a więc samo przypisanie jej do gracza nie wystarczy.
W tym celu, poza zmianą prędkości gracza w miejscu, będziemy musieli oznaczyć go jako posiadacza
bonusu prędkości, by w momencie, gdy zaistnieje reset jego prędkości, ponownie nadać utracony bonus.
Event zmiany prędkości
Do wykrycia resetu maksymalnej prędkości u gracza, służy event HamSandwich: Ham_CS_Player_ResetMaxSpeed.
RegisterHam(Ham_CS_Player_ResetMaxSpeed, "player", "speed", 1);
Funkcja Ham_CS_Player_ResetMaxSpeed wyłapuje dokładnie i tylko reset prędkości gracza, czyli właśnie to, czego chcemy.
Ham_CS_Player_ResetMaxSpeed jest częścią HamSandwich od wersji 1.3. Jeśli korzystasz ze starszej wersji HamSandwich,
zalecam Ci zaktualizować go do najnowszej wersji 1.3, dzięki czemu zyskasz dość sporo nowych eventów do wykorzystania.
Jeśli jednak masz starą wersję i nie chcesz aktualizować modułu kanapki z szynką, zamiast eventu Ham_CS_Player_ResetMaxSpeed,
użyj eventu, który wykonuje się przy każdym procesie myślenia przedmiotów, czyli zawsze, gdy potrzeba, oraz
przy zmianie właściwości przedmiotów, zwłaszcza broni, podczas przeładowania, czy oddawania strzałów,
czyli Ham_Item_PreFrame. Dla wersji HamSandwich starszych, niż 1.3 jest to jedyne rozwiązanie.
WebKompilator na AMXX.pl posiada ham_const.inc w wersji 1.3, a więc obsługuje najnosze eventy HamSandwich.
Jeśli tworzysz uniwersalny plugin, bądź modyfikację i nie wiesz, czy Administrator korzysta z aktualnej wersji HamSandwich, czy nie,
warto sprawdzić, czy można wykorzystać event Ham_CS_Player_ResetMaxSpeed, czy będzie trzeba użyć Ham_Item_PreFrame.
RegisterHam(get_player_resetmaxspeed_func(), "player", "speed", 1);Autor funkcji get_player_resetmaxspeed_func: ConnorMcLeod.
Ham:get_player_resetmaxspeed_func(){
#if defined Ham_CS_Player_ResetMaxSpeed
return IsHamValid(Ham_CS_Player_ResetMaxSpeed)?Ham_CS_Player_ResetMaxSpeed:Ham_Item_PreFrame;
#else
return Ham_Item_PreFrame;
#endif
}
Przykładowe zastosowanie
Przykład pluginu, który na początku każdej rundy, przyzna losowemu graczowi buff prędkości do 1000.0 wraz z komentarzami.
#include <amxmodx>
#include <fun>
#include <HamSandwich>
// makrodefinicje obsługi Sumy bitów
#define SetBit(%1,%2) (%1|=(1<<(%2)))
#define ClearBit(%1,%2) (%1&=~(1<<(%2)))
#define CheckBit(%1,%2) (%1&(1<<(%2)))
// zmienna jako suma bitów, określająca, czy gracz ma bonus prędkości
new speedbuff;
// zmienna z maksymalną liczbą graczy na serwerze
new maxPlayers;
public plugin_init(){
// Rejestruje plugin
register_plugin("Random speed buff", "1.0", "benio101");
// Rejestruje najlepszy dostępny event resetu prędkości gracza
RegisterHam(get_player_resetmaxspeed_func(), "player", "speed", 1);
// Rejestruje event nowej rundy
register_logevent("roundStart", 2, "1=Round_Start");
// Rejestruje event końca rundy
register_logevent("roundEnd", 2, "1=Round_End");
}
public plugin_cfg(){
//pobiera maksymalną liczbę graczy na serwerze
maxPlayers=get_maxplayers();
}
// Wybiera najlepszy dostępny event resetu prędkości gracza
Ham:get_player_resetmaxspeed_func(){
#if defined Ham_CS_Player_ResetMaxSpeed
return IsHamValid(Ham_CS_Player_ResetMaxSpeed)?Ham_CS_Player_ResetMaxSpeed:Ham_Item_PreFrame;
#else
return Ham_Item_PreFrame;
#endif
}
// obsługa nowej rundy
public roundStart(){
// pobieranie id żywych graczy
new player_ids[32], players=-1;
for(new i=1; i<=maxPlayers; ++i){
if(is_user_alive(i)){
player_ids[++players]=i;
}
}
if(++players){
// losujemy zwycięzcę speed buffa
new winner=player_ids[random(players)];
// dodajemy jej buffa prędkości w miejscu
set_user_maxspeed(winner, 1000.0);
// oznaczamy gracza jako posiadającego buffa
SetBit(speedbuff, winner);
}/*{
else brak żywych graczy, nie losujemy
}*/
}
// obsługa bonusu prędkości
public speed(id){
if(
// sprawdzamy, czy gracz żyje
is_user_alive(id)
// oraz, czy posiada buff prędkości
&& CheckBit(speedbuff, id)
){
// jeśli posiada, to ustawiamy mu prędkość znów na 1000.0
set_user_maxspeed(id, 1000.0);
}
}
public client_connect(id){
// zapobiegamy odziedziczeniu buffa przez nowego gracza,
// który otrzymał id szczęśliwca, który opuścił serwer
ClearBit(speedbuff, id);
}
public roundEnd(){
// runda się skończyła, usuwamy wszelkie bonusy prędkości
speedbuff=0;
}
Dlaczego CurWeapon NIE JEST eventem od resetu prędkości
CurWeapon jest eventem, wywoływanym w momencie zmiany stanu broni.
Czyli m.in. po każdym strzale, zmianie broni, przeładowaniu czy zakupieniu.
Wiele osób BŁĘDNIE wykorzystuje event CurWeapon zamiast Ham_CS_Player_ResetMaxSpeed.
Wymienię tutaj kilka najważniejszych z negatywnych skutków tego tragicznego rozwiązania.
CurWeapon nie wykonuje się po spawnie graczy (choć powinien) i zmiana prędkości gracza
zachodzi w praktyce dopiero po zmianie broni, bądź oddanym strzale czy przeładowaniu.
CurWeapon zachodzi w momencie, kiedy zmienia się stan broni, jak wspomniałem, m.in.
podczas strzału, choć nie powinien. Jest to zdecydowanie niepotrzebne i wpływa zauważalnie
na zwiększenie lagów na serwerze. Używanie tego rozwiązania w połączeniu z wymagającymi
obliczeniami, znacząco zwiększa lagi gracza i potem na forum pojawiają się tematy "Zacina mi CS, jak strzelam".
CurWeapon wykonuje się dopiero pewien czas po evencie resetu prędkości gracza, przez co
możemy zauważyć dość irytujące "bujanie' postacią podczas strzelania, czy zmiany broni.
CurWeapon jest eventem zawodnym. Innymi słowy, może się nie wykonać, tym
samym, nie reustalić prędkości gracza po resecie jego maksymalnej prędkości.
Wystarczy bardzo szybko zmienić dokładnie czterokrotnie broń (z jednej na drugą),
by zyskał status zawodnego i nie wykonał się, nie przyznając nam buffu, czy antybuffu.
Dla standardowego połączenia, jest to okres ok. 1/4 sekundy. Czterokrotna zmiana
broni w tym czasie nie jest trudna, zapewne zgodzą się ze mną Ci, którzy odblokowali
labirynt w ukrytej krainie w Raymanie 2 bez wpisywania tajnego kodu w menu głównym.
Przykład nieskutecznego działania eventu CurWeapon dla przykładowego pluginu:
#include <amxmodx>
#include <fun>
public plugin_init(){
register_plugin("1000 speed", "1.0", "benio101");
register_event("CurWeapon", "CurWeapon", "be");
}
public CurWeapon(id){
set_user_maxspeed(id, 75.0);
}
http://youtu.be/ecZx0SFWqpg
Jeśli nie potraficie w ciągu ok. 1/4 sekundy czterokrotnie zmienić broni,
a chcielibyście się przekonać, że CurWeapon faktycznie NIE ZAWSZE działa,
załączam Wam config, który możecie sobie zbindować pod wodolny klawisz.
Po wciśnięciu klawisza, wasza prędkość wróci do podstawowej (zignoruje efekt
speed buffa, spowolnienia, czy unieruchomienia) o ile jest on nadawany przez CurWeapon.
Config z bindem pod klawisz "L", wymaga posiadania noża oraz pistoletu:
alias "waits" "wait; wait; wait; wait; wait; wait"
bind "l" "slot2; wait; slot3; waits; slot2; waits; slot3; waits; slot2;"
Jak widzicie, zmienia on broń dokładnie czterokrotnie w ok. 1/4 sekundy.
Pierwsza zmiana służy jedynie upewnieniu się, że rozpoczniemy zmiany od pistoletu.
Dla wolnego połączenia lub mulącego serwera / CSa, należy zmniejszyć liczbę
wait w aliasie z 6 do ok. 4. Zainteresowani zresztą trafią na to metodą prób i błędów.
#529452 Speed na moment
Napisane przez
Gość
w 29.03.2013 17:12
#529428 Speed na moment
Napisane przez K!113r
w 29.03.2013 16:29
#529434 Speed na moment
Napisane przez
Gość
w 29.03.2013 16:36
W celu zachowania prędkości, skorzystaj z hamowego eventu Ham_CS_Player_ResetMaxSpeed.
Jeśli masz starą wersję HamSandwich (poniżej v. 1.3), użyj eventu Ham_Item_PreFrame.
RegisterHam(Ham_CS_Player_ResetMaxSpeed, "player", "speed", 1);
Poza ustawieniem prędkości na 750.0, zapisz informację o tym, że gracz ma bonus prędkości.
Ustalaj prędkość dla gracza tak długo, jak posiada bonus prędkości poprzez:
public speed(id){
if(is_user_alive(id) && /* identyfikacja gracza z bonusem prędkości */){
set_user_maxspeed(id, 750.0);
}
}
#528083 Blokada kupna bronii
Napisane przez JabLuszko
w 25.03.2013 19:14
Do stripów już Ci linkowałem, jak chcesz KONIECZNIE zabrać mu jedną broń to powinieneś użyć czegoś w okolicach http://amxx.pl/topic...ip-user-weapon/ lub http://darkgl.amxx.p...broni-graczowi/
Usuń mu wszystkie bronie na początku rundy, potem daj nóż i niech sobie kupuje co chce - to jest "poprawne" podejście do tematu.
#528044 Blokada kupna bronii
Napisane przez K!113r
w 25.03.2013 17:35
#528062 Blokada kupna bronii
Napisane przez K!113r
w 25.03.2013 18:26
- AMXX.pl: Support AMX Mod X i SourceMod
- → Przeglądanie profilu: Reputacja: Maruda515
- Regulamin