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
 

Zdjęcie

Napisany przeze mnie plugin nie działa(to nie jest dziwne, to jesdez z moich pierwszych pluginów)


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
24 odpowiedzi w tym temacie

#1 MuFFes

    Życzliwy

  • Użytkownik

Reputacja: 0
Nowy

  • Postów:27
  • Imię:Remigiusz
  • Lokalizacja:Krosno
Offline

Napisano 05.03.2013 19:40

Witam,
Jakiś czas temu prosiłem o zrobienie pluginu , lecz nikt się tym nie zajął. Postanowiłem samodzielnie zrobić ten plugin. Chodziło oto, aby co rundę losowa osoba otrzymywała podwójną prędkość na czas 1 rundy. Plugin się skompilował, ale jego działania nie dostrzegłem.

Oto kod:
#include  
#include  
#include  


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

new gracze
new losowygracz
new maxspeed

public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)
    register_logevent("roundstart", 2, "1=Round_Start")
    register_logevent("roundend", 2, "1=Round_End")
    
}
public OnPlayerConnect() {
    gracze++;
}
public OnPlayerDisconnect() {
    gracze--;
}
public roundstart() {
    losowygracz=random(gracze);
    maxspeed=get_user_maxspeed(losowygracz);
    set_user_maxspeed(losowygracz,2*maxspeed);
}
public roundend() {
    set_user_maxspeed(losowygracz,maxspeed);
}

Jestem nowy w pawnie, więc spodziewam się bardzo dużych błędów. Jeśli ktoś się tego podejmie, to może mogłby też zrobić tak, że na say napisałoby kto ma podwojoną prędkość.Po wklejeniu includy mi poznikały a były one - amxmodx, amxmisc, fun

Użytkownik MuFFes edytował ten post 05.03.2013 19:41

  • +
  • -
  • 0

#2 K!113r

    Teraz to chyba Sławek kek

  • Power User

Reputacja: 387
Wszechpomocny

  • Postów:868
  • GG:
  • Steam:steam
  • Imię:Mateusz
  • Lokalizacja:Piotrków Tryb.
Offline

Napisano 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

DarkGL to mój autorytet.

skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować


#3 O'Zone

    Wszechobecny

  • Użytkownik

Reputacja: 594
Wszechwiedzący

  • Postów:409
  • Steam:steam
Offline

Napisano 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
Pomogłem? Daj Dołączona grafika

#4 MuFFes

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:27
  • Imię:Remigiusz
  • Lokalizacja:Krosno
Offline

Napisano 05.03.2013 21:16

Gdyby nie to, że każdy ma double speeda z twoim pluginem to byłoby fajnie i dałbym plusa.

Użytkownik MuFFes edytował ten post 05.03.2013 21:38

  • +
  • -
  • 0

#5 O'Zone

    Wszechobecny

  • Użytkownik

Reputacja: 594
Wszechwiedzący

  • Postów:409
  • Steam:steam
Offline

Napisano 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

Użytkownik O'Zone edytował ten post 05.03.2013 21:41

  • +
  • -
  • 0
Pomogłem? Daj Dołączona grafika

#6 MuFFes

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:27
  • Imię:Remigiusz
  • Lokalizacja:Krosno
Offline

Napisano 05.03.2013 21:53

Ciągle jakby mi nie działało, w sensie, że ciągle każdy ma speeda. Ale to może być błąd z mojej strony bo mi cos total commander teraz sypal errorami. Dzis już nie mam za bardzo czasu. Sprawdzę plugin dopiero jutro.
  • +
  • -
  • 0

#7 Klakier

    Volenti non fit iniuria

  • Power User

Reputacja: 391
Wszechpomocny

  • Postów:878
  • GG:
  • Imię:Sebastian
  • Lokalizacja:Mogilno
Offline

Napisano 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

Sell - System Klanów (wojny, top15 etc)

 

Kontakt GG: 7285018


#8 K!113r

    Teraz to chyba Sławek kek

  • Power User

Reputacja: 387
Wszechpomocny

  • Postów:868
  • GG:
  • Steam:steam
  • Imię:Mateusz
  • Lokalizacja:Piotrków Tryb.
Offline

Napisano 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

DarkGL to mój autorytet.

skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować


#9 AztekHQS

    Banned

  • Zbanowany

Reputacja: 98
Zaawansowany

  • Postów:279
  • Lokalizacja:Polska
Offline

Napisano 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);

Użytkownik AztekHQS edytował ten post 05.03.2013 22:23

Najlepszy serwer JailBreak!
IP: 31.186.83.208:27043
Dołączona grafika

#10 Jak się nazwać

    Wszechmogący

  • Power User

Reputacja: 169
Profesjonalista

  • Postów:617
  • Imię:a
  • Lokalizacja:a
Offline

Napisano 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
Pisze na zamówienie statystyki pod nvault. GG: 15600964

#11 MuFFes

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:27
  • Imię:Remigiusz
  • Lokalizacja:Krosno
Offline

Napisano 05.03.2013 22:52

Wielkie Dzięki. Przetestowałem plugin użytkownika "K!113r" i działa. Innych nie testowałem, ale pewnie też działają. Każdy kto starał się pomóc dostał ode mnie Dołączona grafika Jak poprawię swoją znajomość pawna to być może będę tworzyć nowe wersje tego pluginu.

Użytkownik MuFFes edytował ten post 05.03.2013 22:53

  • +
  • -
  • 0

#12 Gość_21977_*

  • Gość

Reputacja: 0

Offline

Napisano 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);
}


#13 MuFFes

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:27
  • Imię:Remigiusz
  • Lokalizacja:Krosno
Offline

Napisano 06.03.2013 19:26

Jest w tym kodzie powyższym jakaś zmienna, która zawiera liczbę aktualnych graczy na serwerze?
  • +
  • -
  • 1

#14 K!113r

    Teraz to chyba Sławek kek

  • Power User

Reputacja: 387
Wszechpomocny

  • Postów:868
  • GG:
  • Steam:steam
  • Imię:Mateusz
  • Lokalizacja:Piotrków Tryb.
Offline

Napisano 06.03.2013 19:38


liczba

http://amxx.pl/dokum...f90/get-players
w drugim parametrze podajesz zmienną i do niej zwracana jest aktualna liczba graczy na serwerze (nie sloty, a gracze)
  • +
  • -
  • 1

DarkGL to mój autorytet.

skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować


#15 Athrenaline

    Zaawansowany

  • Zbanowany

Reputacja: -2
Nowy

  • Postów:96
  • Lokalizacja:Lublin
Offline

Napisano 06.03.2013 19:45

mozna zasys. plugin czy priv ?
Zbieram +

#16 K!113r

    Teraz to chyba Sławek kek

  • Power User

Reputacja: 387
Wszechpomocny

  • Postów:868
  • GG:
  • Steam:steam
  • Imię:Mateusz
  • Lokalizacja:Piotrków Tryb.
Offline

Napisano 06.03.2013 19:48

mozna zasys. plugin czy priv ?


Na forum pomaga się publicznie i udostępnia kod, jeżeli kod jest upubliczniony to raczej możesz skorzystać, ale np. nie możesz go podać jako swój etc.
  • +
  • -
  • 0

DarkGL to mój autorytet.

skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować


#17 Gość_21977_*

  • Gość

Reputacja: 0

Offline

Napisano 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

#18 MuFFes

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:27
  • Imię:Remigiusz
  • Lokalizacja:Krosno
Offline

Napisano 06.03.2013 20:31

<p>Pawna jeszcze trochę nie ogarniam, ale mam nadzieję, że już niedługo. Postanowiłem zrobić cvary - minimalna oraz maksymalna liczba graczy do gry z tym pluginem, speed regulowany cvarem, oraz napis na chacie w Colorchat. Niestety znow mam problem. Tym razem z kompilacją pluginu.
Wyskakują błędy - undefinded symbol "nick" - linia 36
oraz - undefined symbol "liczba" - linia 45 i 46

Nie zmieścił się cały plugin więc daje tak - http://wklej.org/id/974327/

Użytkownik MuFFes edytował ten post 06.03.2013 20:33

  • +
  • -
  • 0

#19 AztekHQS

    Banned

  • Zbanowany

Reputacja: 98
Zaawansowany

  • Postów:279
  • Lokalizacja:Polska
Offline

Napisano 06.03.2013 20:39

Użyj mojego kodu, działa na 100%.

Taka mała uwaga, czemu pobierasz liczbę graczy w liczbie float ? :o
Najlepszy serwer JailBreak!
IP: 31.186.83.208:27043
Dołączona grafika

#20 MuFFes

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:27
  • Imię:Remigiusz
  • Lokalizacja:Krosno
Offline

Napisano 06.03.2013 20:42

Tamten kod od benia też działał, ale dodałem te cvary i warunek if do maksymalnej i minimalnej liczby graczy i już się nie chce kompilować :/

Poprawiłem i już nie pobieram liczby graczy przez float tylko num

Użytkownik MuFFes edytował ten post 06.03.2013 20:47

  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych