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
 

sbstn - zdjęcie

sbstn

Rejestracja: 05.02.2010
Aktualnie: Nieaktywny
Poza forum Ostatnio: 29.03.2011 19:30
*****

Moje tematy

Scripting - Przechwytywanie sayu?

12.03.2011 23:30

Witam. Potrzebuje zrobić plugin, który miałby działać następująco:

Wpisuję w konsolę:
amx_komenda "To jest tylko tekst blablabla"
Czego efektem ma być wywołanie komendy:
say "To jest tylko tekst blablabla"

Z góry dziękuję.

IP serwera

15.06.2010 19:30

Hmm. Zainteresowała mnie pewna sprawa.
Jak zrobić warunek: Jeśli IP serwera to xx.xx.xx.xxx:xxxxx.
W ogóle da się coś takiego zrobić?

O nvault

14.06.2010 20:33

Elo.
Dwa pytanka mam do wyższych skrypterów ;)
1.Czy da się z bazy nvault "wyciągnąć" ciąg znaków?
2.Jeśli tak to jak?

Ja osobiście znam sposób na wyciągnięcie tylko liczby.
Chodzi mi o coś takiego:
public loadvault(id) 
{
new auth_id[35]
new nick[33]
get_user_name(id,nick,32)
get_user_authid(id,auth_id,34)
new vaultkey[64]
new vaultdata[256]

format(vaultkey,63,"%s",auth_id)
format(vaultdata,255,"%s",nick)

nvault_get(g_vault,vaultkey,vaultdata,255)
new playernick[32]
new playersid[32]
parse(vaultdata, playernick, 31, playersid, 31)
player_nick[id] = ??????????
player_sid[id] = ??????????

return PLUGIN_CONTINUE
}

Operacje na graczu

24.04.2010 19:55

Witajcie :) To mój pierwszy tutorial, więc proszę o wyrozumiałość.

W tym tutorialu zajmiemy się operacjami na graczu poprzez komendy admina w konsoli. Jeżeli pierwszy raz na oczy widzisz kod w języku PAWN, to dalej nie czytaj, bo nie zrozumiesz. Plugin pisany w celach edukacyjnych dla początkujących.

Najpierw opiszę plugin, wręcz książkowy, "Daj HP". Jest on wytłumaczony po angielsku na AMX Mod X Documentation w zakładce Basic Plugin.

Aby admin mógł dać hp jakiemuś graczowi, musimy zdefiniować komendę... Tutaj trzeba sobie przypomnieć budowę rejestracji komendy.
register_clcmd("komenda","nazwa_funkcji",FLAGA,"komentarz")
No to zaczynamy!

Najpierw piszemy potrzebne moduły :)
#include <amxmodx>
#include <amxmisc>
#include <fun>

Następnie rozpoczynamy plugin_init i rejestrujemy komendę.
public plugin_init()
{
register_clcmd("amx_give_hp","give_hp",ADMIN_LEVEL_A,"<nick> <hp>") //("komenda","funkcja",FLAGA,"komentarz")
}

Teraz zaczniemy główną część kodu. Rozpoczynamy od "give_hp" i sprawdzenia czy komenda została wpisana przez admina. Warunek brzmi: Jeśli gracz wpisujący komendę nie jest adminem, to zatrzymaj plugin:
public give_hp(id,level,cid)
{
if(!cmd_access(id,level,cid,3)) return PLUGIN_HANDLED
}

Pora na zadeklarowanie zmiennych używanych w naszym kodzie, czyli argumentów <nick> i <hp>:
public give_hp(id,level,cid)
{
if(!cmd_access(id,level,cid,3)) return PLUGIN_HANDLED // Sprawdza czy gracz uzywajacy komende ma admina

new arg1[32]
new arg2[4]
}

Zapytacie dlaczego 32 i 4... Otóż 32, bo 32-1 może mieć znaków nick. A w <hp> użyłem 4, bo 4-1 to liczba 3, czyli hp dodawane maxymalnie może być liczbą 3-cyfrową.
Teraz czas na odczytanie tych danych (<nick> i <hp>):
public give_hp(id,level,cid)
{
if(!cmd_access(id,level,cid,3)) return PLUGIN_HANDLED

new arg1[32]
new arg2[4]

read_argv(1,arg1,31)
read_argv(2,arg2,3)
}

Teraz zadeklarujemy gracza (player), o indexsie arg1 i zadeklarujemy zmienną "bonus", czyli ile hp dostanie gracz:
public give_hp(id,level,cid)
{
if(!cmd_access(id,level,cid,3)) return PLUGIN_HANDLED

new arg1[32]
new arg2[4]

read_argv(1,arg1,31)
read_argv(2,arg2,3)

new player=cmd_target(id,arg1,CMDTARGET_ALLOW_SELF)
new bonus=str_to_num(arg2)
}

Nadszedł czas na wielki finał, czyli ofiarowanie graczowi podaną ilość hp. Najpierw trzeba postawić warunek: Jeśli podany gracz nie istnieje, to wyświetl informację w konsoli, lecz jeśli istnieje to do jego dotychczasowego życia dodaj bonus.
public give_hp(id,level,cid)
{
if(!cmd_access(id,level,cid,3)) return PLUGIN_HANDLED

new arg1[32]
new arg2[4]

read_argv(1,arg1,31)
read_argv(2,arg2,3)

new player=cmd_target(id,arg1,CMDTARGET_ALLOW_SELF)
new bonus=str_to_num(arg2)

if (!player)
{
console_print(id, "Gracz %s nie odnaleziony!",arg1)
return PLUGIN_HANDLED
}else
{
new hp=get_user_health(player) //definiujemy zmienną życia gracza
set_user_health(player,hp+bonus) // dodajemy bonus do życia gracza
}
return PLUGIN_HANDLED
}


No i proszę bardzo! Gracz o nicku "arg1" dostał "bonus" hp od admina!
1.Działanie: amx_give_hp "nick" "ilosc_hp"
2.Teraz przedstawię cały ten kod:
#include <amxmodx>
#include <amxmisc>
#include <fun>

public plugin_init()
{
register_clcmd("amx_give_hp","give_hp",ADMIN_LEVEL_A,"<nick> <hp>")
}

public give_hp(id,level,cid)
{
if(!cmd_access(id,level,cid,3)) return PLUGIN_HANDLED

new arg1[32]
new arg2[4]

read_argv(1,arg1,31)
read_argv(2,arg2,3)

new player=cmd_target(id,arg1,CMDTARGET_ALLOW_SELF)
new bonus=str_to_num(arg2)

if (!player)
{
console_print(id, "Gracz %s nie odnaleziony!",arg1)
return PLUGIN_HANDLED
}else
{
new hp=get_user_health(player)
set_user_health(player,hp+bonus)
}
return PLUGIN_HANDLED
}


Zróbmy teraz z pieniędzmi! Różnica polega na tym, że już nie będziemy korzystać z modułu <fun>, tylko z modułu <cstrike>.
Lecz to nie wszystko. Ile gracz może mieć maxymalnie pieniędzy w cs'ie? Aaaa? Tak! 16000$. Czyli w zmiennej arg2 musimy podać większą wartość. 16000$ to 5 cyfr, czyli 5+1=6. Zamieniemy arg2[4], na arg2[6]. Oto cały kod nowego pluginu:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>

public plugin_init()
{
register_clcmd("amx_give_hp","give_hp",ADMIN_LEVEL_A,"<nick> <hp>")
}

public give_hp(id,level,cid)
{
if(!cmd_access(id,level,cid,3)) return PLUGIN_HANDLED

new arg1[32]
new arg2[6]

read_argv(1,arg1,31)
read_argv(2,arg2,5)

new player=cmd_target(id,arg1,CMDTARGET_ALLOW_SELF)
new bonus=str_to_num(arg2)

if (!player)
{
console_print(id, "Gracz %s nie odnaleziony!",arg1)
return PLUGIN_HANDLED
}else
{
new money=cs_get_user_money(player)
cs_set_user_money(player,money+bonus)
}
return PLUGIN_HANDLED
}


Mam nadzieję, że komuś się ten poradnik przyda. Za wszelkie błędy,literówki,złe nazewnictwo funkcji,komend etc. BARDZO PRZEPRASZAM ;)

Pozdrawiam wszystkich skrypterów, sbstn.

Losowanie wśród graczy

18.04.2010 16:49

Jak w temacie. Jak zrobić losowanie wśród graczy. Np. co rundę, spośród wszystkich graczy losowana jest jedna osoba i na niej odbywają się pozostałe funkcje...
Oczekuję szybkiej odpowiedzi ;)

Pozdrawiam, sbstn.