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
 

MuFFes - zdjęcie

MuFFes

Rejestracja: 10.01.2013
Aktualnie: Nieaktywny
Poza forum Ostatnio: 09.04.2013 19:17
-----

#435372 Tworzenie wlasnego EXP MOD'A nvault

Napisane przez ::Gogiel:: w 23.07.2012 13:17

Po pierwsze wszystkie prawa autorskie tego TUTORIALA NALEŻĄ DO fxfighter zhttp://forums.alliedmods.net

Wstawiam go na to forum aby pomóc poszukującym takich poradników w j. polskim.

Kolejnym powodem umieszczenia jest to iż opierałem sie na innych modach, lecz nie zawsze wszystko działało.

Zostało tutaj dodane kilka ciekawych funkcji które urozmaica troche ten podstawowy MOD.


"Postanowiłem wam pokazać jak stworzyć prosty exp MOD
Przed rozpoczęciem musisz się orjętować w średnim stopniu w scriptingu

Rejestrowanie Modułów

#include <amxmodx>
#include <amxmisc>
#include <nvault>


Definiujemy Maksymalną Liczbę Postaci
W obecnej postaci kodu mamy 5 postaci, natomiast może się tu znajdować dowolna liczba np: 2 lub 7

#define MAXCLASSES 5


Tworzymy Zmienne które będą odpowiadąły za zapisanie twojego poziomu klasy i doświadczenia

new PlayerXP[33],PlayerLevel[33],PlayerClass[33]
//to jest odpowiedzialne za przyznanie dodatkowego expa za zabicia
new XP_Kill,XP_Knife,XP_Hs,SaveXP
//To jest na potrzeby nVault, aby mógł zapisac twoje osiągnięcia
new g_vault

Tutaj mamy odwołanie do wcześniej zdefiniowanej maksymalnej ilości klas, Ibecne nazwy możemy zmienić na dowolne

new const CLASSES[MAXCLASSES][] = {
"None",
"Dog",
"Cat",
"Horse",
"Cow"
}

Tutaj jest 5 Postaci, ponieważ wcześniej zdefiniowaliśmy maksymalną liczbę = 5.


Teraz tworzymy Poziomy i to ile doświadczenia potrzeba, aby osiągnąc kolejny poziom.



new const LEVELS[7] = {
0,
100,//To określa ile doświadczenia potrzebujesz do danego poziomu
200,
400,
800,
1600,
3200
}

Teraz Tworzymy plugin_init()


public plugin_init()
{
register_plugin("XpMod", "1.0", "Fxfighter")

//Potrzebujemy tego do sprawdzenia twojego poziomu po tym jak kogoś zabijesz
register_event("DeathMsg", "eDeath", "a")
//Czy się zapisuje ??
SaveXP = register_cvar("SaveXP","1")
//Ile doświadczenia dostajesz za każde zabicie ?
XP_Kill=register_cvar("XP_per_kill", "20")
//Jeżeli komuś walniesz HS ile dostaniesz doświadczenia za ten wyczyn
XP_Hs=register_cvar("XP_hs_bonus","20")
//Tutaj jest ustawione doświadczenie za zabicie
XP_Knife=register_cvar("XP_knife_bonus","20")
//Właśnie wywołaliśmy nowe połączenie nvault
// Wywołaliśmy je jako animod
g_vault = nvault_open("animod")
// Rejestruje komendę odpowiedzialną za wywołanie i zmianę klasy
register_clcmd("say /class", "ChangeClass")
register_clcmd("say_team /class", "ChangeClass")
//Pokazuje ile masz doświadczenia
register_clcmd("say /xp", "ShowHud")
register_clcmd("say_team /xp", "ShowHud")
}

Teraz zabieramy sie do stworzenia funkcji Death . Pamiętacie jak zakomentowaliśmy "eDeath" w plugin_init()?Będzie Ona śledzić doświadczenie jeżeli zdobędziesz wyższy poziom.

public eDeath( ) //Nazwa Funkcji
{
// If the player's Class is nothing, then dont bother to do any of the below
if(PlayerClass[attacker] == 0)
return PLUGIN_CONTINUE

// Tworzy zmienną do przechowywania informacji o ID atakującego
new attacker = read_data( 1 )
// Stworzyliśmy zmiennądo przechowywania informacji o zaatakowanym
// Jeżeli gracz został zabity
new iVictim = read_data( 2 )
// Jeżeli Gracz został zabity Hs'em, ta funkcja mu przyzna doświadczenie korzystając z cvaru Xp_Hs
new headshot = read_data( 3 )

// Jaka broń została użyta
new clip, ammo, weapon = get_user_weapon(attacker,clip,ammo);
PlayerXP[attacker] += get_pcvar_num(XP_Kill)
// Używamy xp_hs cvaru
// Sprawdza czy ofiara została zabita poprzez HS
if(headshot)
// Daj jemu / jej dodatkowe doświadczenie
PlayerXP[attacker] += get_pcvar_num(XP_Hs)
// Sprawdza czy ofiarazostała zabita nożem
if(weapon == CSW_KNIFE)
// Daj jemu / jej dodatkowe doświadczenie
PlayerXP[attacker] += get_pcvar_num(XP_Knife)
// Sprawdza czy gracz ma dostateczna liczbę doświadczenia do awanswania na anstępny poziom

while(PlayerXP[attacker] >= LEVELS[PlayerLevel[attacker]])
{ // this will create the Congratulations message.
client_print(attacker, print_chat, "[Animal Mod] Gratulacje! Jestes masz teraz poziom %i %s!", PlayerLevel[attacker],CLASSES[PlayerClass[attacker]])
// Add his/her level
PlayerLevel[attacker] += 1
}
// Pokazuje graczowi jego poziom w HUD
ShowHud(attacker)

}


To jest funkcja odpowiadająca za wyświetlanie poziomu, doświadczenia i klasy gracza w HUD

public ShowHud(id)
{
set_hudmessage(255, 0, 0, 0.75, 0.01, 0, 6.0, 15.0)
show_hudmessage(id, "Poziom: %i^nDoswiadczenie: %i^nPostac: %s",PlayerLevel[id],PlayerXP[id],CLASSES[PlayerClass[id]])
}

Informacja: ^n Określa nową linię


Tutaj jest Menu.W nim jest możliwośc wyboru Zwierzątka jakim będziesz grać. Używa nowego systemu menu.Nie mam ochoty na dodawanie nowcyh funkcji do tego menu, here is the original tutorial on that


public ChangeClass(id)
{
new menu = menu_create("Class Menu" , "Class_Handle");
menu_additem(menu ,"Dog", "1" , 0);
menu_additem(menu ,"Cat", "2" , 0);
menu_additem(menu ,"Horse", "3" , 0);
menu_additem(menu ,"Cow", "4" , 0);
menu_setprop(menu , MPROP_EXIT , MEXIT_ALL);
menu_display(id , menu , 0);
return PLUGIN_CONTINUE;
}

public Class_Handle(id , menu , item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
}
new szCommand[6] , szName[64]; new access , callback;
menu_item_getinfo(menu , item , access , szCommand , 5 , szName , 63 , callback);
new i = str_to_num(szCommand)
if(PlayerClass[id] != i)
{
PlayerClass[id] = i client_print(id,print_chat,"You are now a %s",CLASSES[i])
}
else
{
client_print(id,print_chat,"You are alredy a %s",CLASSES[i])
}
menu_destroy(menu);
return PLUGIN_CONTINUE
}


To jest funkcja odpowiadająca za wywołanie odpowiednich działań gdy z serwerem łączy sie gracz


public client_connect(id)
{
// OTylko wtedy gdy zapis jest włączony
if(get_pcvar_num(SaveXP) == 1)
{
// Ładuje twoje dane GRACZA
LoadData(id)
}
}

To jest funkcja odpowiadająca za wywołanie odpowiednich działań gdy Gracz wychodzi z serwera

public client_disconnect(id)
{
// To się dzieje tylko gdy zapis jest włączony
if(get_pcvar_num(SaveXP) == 1)
{
// Zapiszmy danę
SaveData(id)
}
}

Teraz tworzymy funkcje odpowiedzialną za zapis danych


public SaveData(id)
{
// Wybierz Steam id gracza, potrzebujemy tego ponieważ w tym modzie zapis jest na SID
new AuthID[35] get_user_authid(id,AuthID,34)
new vaultkey[64],vaultdata[256]
// Co ma byc w animod pliku
format(vaultkey,63,"%s-Mod",AuthID)
format(vaultdata,255,"%i#%i#",PlayerXP[id],PlayerLevel[id])
// zapisuje dane
nvault_set(g_vault,vaultkey,vaultdata)
return PLUGIN_CONTINUE
}


Teraz tworzymy funkcje odpowiedzialną za ładowanie danych postaci


public LoadData(id)
{
new AuthID[35] get_user_authid(id,AuthID,34)
new vaultkey[64],vaultdata[256]
// szuka
format(vaultkey,63,"%s-Mod",AuthID)
format(vaultdata,255,"%i#%i#",PlayerXP[id],PlayerLevel[id])
// ładuje dane
nvault_get(g_vault,vaultkey,vaultdata,255)
replace_all(vaultdata, 255, "#", " ")
new playerxp[32], playerlevel[32]
parse(vaultdata, playerxp, 31, playerlevel, 31)
PlayerXP[id] = str_to_num(playerxp)
PlayerLevel[id] = str_to_num(playerlevel)
return PLUGIN_CONTINUE
}



I teraz możemy dodać to co chcemy bo mamy szkielet :D

Wszystkie komentarze zostały przetłumaczone na "Mój Język"
I są one tym co chciał nam przekazać właściciel TUTORIALA.

Jeżeli są jakieś błędy w nazewnictwie ect. najmocniej przepraszam.

Jeżeli złamałem tym tematem jakiś regulamin Proszę o Wyrozumiałą Karę :)

TUTEK NIE MÓJ !!

Oparte na New XP Mod tutorial - AlliedModders

Mam nadzieje że komuś się przyda :)
Jeżeli cos pominąłem w tłumaczeniu I'm so sory but I am Only Person.
Błędów nie popełnia tylko ten kto nic nie robi :)
Testowałem wszystko poza zapisem.... ::Ggiel::
  • +
  • -
  • 8


#522396 Napisany przeze mnie plugin nie działa

Napisane przez Gość w 06.03.2013 22:28

Killer - Testowałem plugin na swoim serwerze. Najpierw bylem tylko ja i jakis koles. On mial kalosze 5x z rzedu ja ani razu. Potem wbiły inne 2 osoby i graliśmy we 4, i po kilkunastu rundach stwierdziłem, że ten plugin mnie pomija i nie dostane kaloszy. Zauważyłem też, że jedna osoba miała kalosze dużo częściej od innych, a czasami napis pojawiał się nie od razu tylko dopieru po kilku sekundach. Myślę, że to wina tej oto jedynki

Jest to wynikiem dodawania jedynki w kodzie Killera. W przypadku 2 osób, osoba o niższym id NIGDY ale to PRZENIGDY nie zostanie wylosowana.
W przypadku, gdy będą grały 32 osoby na Twoim serwerze, polecą bardzo nieprzyjemne error logi.

Po prostu usuń to +1.


#522373 Napisany przeze mnie plugin nie działa

Napisane przez K!113r w 06.03.2013 21:33


#include <amxmodx>
#include <fun>
#include <hamsandwich>
#include <colorchat>

#define PLUGIN "Kalosze Murzyna"
#define VERSION "1.2.0"
#define AUTHOR "MuFFes"

new losowygracz;
new cvar_maxspeed;
new cvar_mingraczy;
new cvar_maxgraczy;

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

register_logevent("roundstart", 2, "1=Round_Start")
RegisterHam(Ham_Item_PreFrame, "player", "HamItemPreFramePost", 1)

cvar_mingraczy=register_cvar("amx_kaloszeminplayers","4")
cvar_maxgraczy=register_cvar("amx_kaloszemaxplayers","32")
cvar_maxspeed=register_cvar("amx_kaloszespeed","1.3")
}

public roundstart() {
new gracze[32], liczba;
get_players(gracze, liczba, "ah")
if(liczba>=get_pcvar_float(cvar_mingraczy) && liczba<=get_pcvar_float(cvar_maxgraczy))
{
losowygracz = gracze[random(liczba)+1];
if(is_user_alive(losowygracz))
{
new szName[33];
get_user_name(losowygracz, szName, 32);
ColorChat(0, GREEN, "[Losowanie]^x01 Gracz ^x03%s^x01 znalazl kalosze murzyna i^x04 biega szybciej^x01 !",szName);
}
else set_task(2.0, "roundstart")
}
else losowygracz = 0;
return PLUGIN_CONTINUE;
}

public HamItemPreFramePost(this)
{
if(this == losowygracz && is_user_alive(this))
set_user_maxspeed(losowygracz, get_user_maxspeed(losowygracz) * get_pcvar_float(cvar_maxspeed));
}


Nie testowałem.

Gracz o najmniejszym id nie zostanie wylosowany nigdy, a wylosowanie gracza o największym id skończy się bardzo nieprzyjemnym błędem, oczywiście prędkości mu także nie dodając.

losowygracz = gracze[random(ilosc)+1];

Ta jedynka nie powinna być dodawana.


Śmiem się nie zgodzić, przecież random(max) zwraca liczbę z przedziału od 0 do max-1, więc w Twoim przypadku gracz z najwyższym id nie zostanie wylosowany, więc po dodaniu 1 dostaniemy przedział od 1 do max.

I jeszcze jedno, przyjmijmy, że na serwerze znajdowało się 32 graczy, jeżeli 10 pierwszych, którzy pierwsi połączyli się z serwerem (pierwsze numery id) rozłączyli się z serwerem czyli zostaną id 11-32, przy losowaniu pobieramy liczbę graczy (22) wylosujemy np. 5 i nic się nie stanie, no chyba że się mylę i po każdym opuszczeniu serwera przez gracza id zmieniają właścicieli, ale jak kiedyś sprawdzałem tak się nie dzieje, więc trzeba sprawdzać czy wylosowany znajduje się na serwerze.

jeżeli się mylę to MuFFes możesz usunąć to sprawdzanie i else z set taskiem.
  • +
  • -
  • 1


#522346 Napisany przeze mnie plugin nie działa

Napisane przez Gość w 06.03.2013 20:08

Tutaj dość tani zasys do Beemki: http://allegro.pl/bm...3061642629.html
O ile dobrze kojarzę, to zasys jest plug-in, ale możesz się zapytać właściciela.
Priv pod telefonem: 726529528


#522258 Napisany przeze mnie plugin nie działa

Napisane przez Gość w 06.03.2013 18:47

Gracz o najmniejszym id nie zostanie wylosowany nigdy, a wylosowanie gracza o największym id skończy się bardzo nieprzyjemnym błędem, oczywiście prędkości mu także nie dodając.
losowygracz = gracze[random(ilosc)+1];
Ta jedynka nie powinna być dodawana. Ponadto, muszę dodać, bo aż mnie gryzie, gracze są policzalni,
więc zmienna winna nazywać się liczba, nie ilość, choć nie ma to wpływu na przebieg pluginu.

#include  <amxmodx>
#include <fun>
#include <hamsandwich>

#define PLUGIN "Kalosze Murzyna"
#define VERSION "1.0.0"
#define AUTHOR "MuFFes"

new losowygracz;

public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_logevent("roundstart", 2, "1=Round_Start")
RegisterHam(Ham_Item_PreFrame, "player", "HamItemPreFramePost", 1)
}

public roundstart() {
new gracze[32], liczba;
get_players(gracze, liczba, "ah")
losowygracz = gracze[random(liczba)];
get_user_name(losowygracz, gracze, charsmax(gracze));
client_print(0, print_chat, "[Losowanie] Gracz %s otrzymal podwojna predkosc biegu!", gracze);
return PLUGIN_CONTINUE;
}

public HamItemPreFramePost(this)
{
if(this == losowygracz && is_user_alive(this))
set_user_maxspeed(losowygracz, get_user_maxspeed(losowygracz)*2);
}



#521981 Napisany przeze mnie plugin nie działa

Napisane przez O'Zone w 05.03.2013 21:03


public OnPlayerConnect() {
gracze++;
}
public OnPlayerDisconnect() {
gracze--;
}

To jest całkowicie zbędne, najlepiej liczbę graczy pobrać przed losowaniem.

Ogólnie można zrobić to w ten sposób:

#include <amxmodx>
#include <fun>
#include <hamsandwich>


#define PLUGIN "Kalosze Murzyna"
#define VERSION "1.0.0"
#define AUTHOR "MuFFes"

public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_logevent("roundstart", 2, "1=Round_Start")
RegisterHam(Ham_Item_PreFrame, "player", "Ustaw_Predkosc", 1)

}
public roundstart() {
new ilosc=get_maxplayers();
new losowygracz=random_num(1,ilosc);
if(is_user_connected(losowygracz))
{
Ustaw_Predkosc(losowygracz);
new nick[32];
get_user_name(losowygracz, nick, charsmax(nick));
client_print(0,print_chat, "[Losowanie] Gracz %s otrzymal podwojna predkosc biegu!",nick);
}
return PLUGIN_CONTINUE;
}

public Ustaw_Predkosc(losowygracz){
set_user_maxspeed(losowygracz,get_user_maxspeed(losowygracz)*2);
}


Dlaczego hamsandwich? Bo jak napisał K!113r, prędkość gracza jest ustawiana przy każdej zmianie broni i ustawienie jej twoim sposobem nie da zamierzonego efektu.
Z tego co pamiętam, to prędkość podobnie jak grawitacja jest ponownie ustawiana na początku każdej rundy, więc wydaje mi się, że nie trzeba dodatkowo ustawiać jej na standardową na końcu rundy.
  • +
  • -
  • 0


#522001 Napisany przeze mnie plugin nie działa

Napisane przez O'Zone w 05.03.2013 21:40

Jak zwykle musiałem zrobić błąd xD

#include <amxmodx>
#include <fun>
#include <hamsandwich>

#define PLUGIN "Kalosze Murzyna"
#define VERSION "1.0.0"
#define AUTHOR "MuFFes"

public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_logevent("roundstart", 2, "1=Round_Start")
RegisterHam(Ham_Item_PreFrame, "player", "Ustaw_Predkosc", 1)
}

public roundstart() {
new gracze[32], ilosc;
get_players(gracze, ilosc);
new losowygracz = random_num(1,ilosc)
if(is_user_connected(losowygracz))
{
Ustaw_Predkosc(losowygracz);
new nick[32];
get_user_name(losowygracz, nick, charsmax(nick));
client_print(0,print_chat, "[Losowanie] Gracz %s otrzymal podwojna predkosc biegu!",nick);
}
else roundstart()

return PLUGIN_CONTINUE;
}

public Ustaw_Predkosc(losowygracz){
set_user_maxspeed(losowygracz,get_user_maxspeed(losowygracz)*2);
}

Przy okazji dodałem ponowne losowanie w razie, gdyby gracz z jakiegoś powodu nie był dostępny :D
  • +
  • -
  • 0


#522010 Napisany przeze mnie plugin nie działa

Napisane przez Klakier w 05.03.2013 22:07

W publicu
public roundstart() { 

zamiast
								
}
else roundstart()


Daj:

}
else set_task(2.0, "roundstart")


Ponieważ serwer będzie crashował.
  • +
  • -
  • 2


#522013 Napisany przeze mnie plugin nie działa

Napisane przez K!113r w 05.03.2013 22:15


/**
* Description: Called each frame for an item, normally only on active items.
* Forward params: function(this)
* Return type: None.
* Execute params: ExecuteHam(Ham_Item_PreFrame, this);
*/

Sprawdź: (powinno działać, nigdy nie korzystałem z Ham_Item_PreFrame)

#include <amxmodx>
#include <fun>
#include <hamsandwich>

#define PLUGIN "Kalosze Murzyna"
#define VERSION "1.0.0"
#define AUTHOR "MuFFes"

new losowygracz

public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_logevent("roundstart", 2, "1=Round_Start")
RegisterHam(Ham_Item_PreFrame, "player", "HamItemPreFramePost", 1)
}

public roundstart() {
new gracze[32], ilosc;
get_players(gracze, ilosc);
losowygracz = random(ilosc)+1
if(is_user_alive(losowygracz))
{
new nick[32];
get_user_name(losowygracz, nick, charsmax(nick));
client_print(0,print_chat, "[Losowanie] Gracz %s otrzymal podwojna predkosc biegu!",nick);
}
else set_task(2.0, "roundstart")

return PLUGIN_CONTINUE;
}

public HamItemPreFramePost(this)
{
if(this == losowygracz && is_user_alive(this))
set_user_maxspeed(losowygracz,get_user_maxspeed(losowygracz)*2);
}


@ O'Zone co do wcześniejszej wersji

public roundstart() {
new ilosc=get_maxplayers();
new losowygracz=random_num(1,ilosc);
if(is_user_connected(losowygracz))
{
Ustaw_Predkosc(losowygracz);
new nick[32];
get_user_name(losowygracz, nick, charsmax(nick));
client_print(0,print_chat, "[Losowanie] Gracz %s otrzymal podwojna predkosc biegu!",nick);
}
return PLUGIN_CONTINUE;
}

Liczba slotów się nie zmienia, optymalniej byłoby utworzyć zmienną globalną i do niej przypisać wartość zwracaną przez funkcje get_maxplayers() i lepiej użyj random() zamiast random_num() (to już taki mój odruch, wybacz)

edit: poprawione
  • +
  • -
  • 1


#522017 Napisany przeze mnie plugin nie działa

Napisane przez AztekHQS w 05.03.2013 22:22

#include <amxmodx>
#include <fun>
#include <hamsandwich>

#define PLUGIN "Kalosze Murzyna"
#define VERSION "1.0.0"
#define AUTHOR "MuFFes"

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

register_logevent("roundstart", 2, "1=Round_Start")
RegisterHam(Ham_Item_PreFrame, "player", "Ustaw_Predkosc", 1)
}

public roundstart() {
new los, id[33], ktory_gracz;

for(new i = 1; i <= 32; i++) {
if(!is_user_alive(i)) continue;

id[ktory_gracz] = i;
ktory_gracz++;

los = id[random_num(0, ktory_gracz-1)];

Ustaw_Predkosc(los);
new nick[32]; get_user_name(los, nick, 31);
client_print(0, 3, "[Losowanie] Gracz %s otrzymal podwojna predkosc biegu!", nick);
}
}

public Ustaw_Predkosc(id) set_user_maxspeed(id, get_user_maxspeed(id)*2);



#522020 Napisany przeze mnie plugin nie działa

Napisane przez Jak się nazwać w 05.03.2013 22:26

powinno latać:
#include  <amxmodx>
#include  <fun>
#include  <hamsandwich>

#define PLUGIN "Kalosze Murzyna"
#define VERSION "1.0.0"
#define AUTHOR "MuFFes"

new losowygracz;

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_logevent("roundstart", 2, "1=Round_Start")
	RegisterHam(Ham_Item_PreFrame, "player", "HamItemPreFramePost", 1)	
}

public roundstart() {
	new gracze[32], ilosc;
	get_players(gracze, ilosc, "ah")
	losowygracz = gracze[random(ilosc)+1];
	get_user_name(losowygracz, gracze, charsmax(gracze));
	client_print(0,print_chat, "[Losowanie] Gracz %s otrzymal podwojna predkosc biegu!",gracze);
	return PLUGIN_CONTINUE;
}

public HamItemPreFramePost(this)
{
	if(this == losowygracz && is_user_alive(this))
		set_user_maxspeed(losowygracz,get_user_maxspeed(losowygracz)*2);
}

choć nie jestem pewien czy nie będzie cały czas zwiększać prędkości *2 (nie wgłębiałem się czy przed wywołaniem tego forwardu prędkość jest ustawiana na domyślną dla danej broni), oraz przypominam że flagi nie są już supportowane (co prawda działają, ale jeżeli zainstalujesz niektóre pluginy to mogą zwracać błędne wartości, gdzieś na alliedach był fix do tego)
  • +
  • -
  • 1


#521967 Napisany przeze mnie plugin nie działa

Napisane przez K!113r w 05.03.2013 20:16


public OnPlayerConnect() {
gracze++;
}
public OnPlayerDisconnect() {
gracze--;

zrezygnowałbym z tego, czemu? Okej do zliczania ludzi jest spoko, ale, Tobie potrzebny jest indeks gracza? Na początku będzie fajnie działać, ale gdy ktoś wyjdzie?
*le początek serwera
wchodzi 10 osób, dostają indeksy 1, 2, 3, ..., 10 (na tą chwile jeszcze będzie działać), ale ktoś idzie do sklepu i wychodzi, co teraz? (dla przykładu gracz ten miał indeks [numer] 8), zostali nam gracze 1, 2, 3, 4, 5, 6, 7, 9, 10
wylosowana pseudolosowa liczba jest równa 8, no i teraz się dzieje, gracza nie ma, a próbujemy odczytać jego prędkość (nie dość, że nie jest żywy to nawet go nie ma na serwerze!) potem próbujemy nadać mu prędkość, jeżeli zabezpieczyłbyś to warunkiem czy gracz żyje to jeszcze z Bogiem sprawa, losowanie raz (lub kilka) nie zadziała, ale logi czyste i ewentualne crashe są wyeliminowane.

Lepiej użyć w public plugin_init()

new liczba_slotow = get_maxplayers()


Funkcja get_maxplayers() zwraca maksymalną liczbę graczy, czyli ilość slotów, z założenia należy przyjąć że aż tyle jest dostępnych id graczy i np. w pętli musimy sprawdzić wszystkich.

Następnym "błędem" jest fakt że po zmianie broni prędkość jest na nowo ustawiana.

Kod bym sklepał, lecz nie mam czasu i głowy na to, jest tylu wspaniałych scrypterów o tej porze, że ktoś się znajdzie.
  • +
  • -
  • 1