Piszemy pierwszy plugin
Nomaf
18.08.2011
Nasz pierwszy plugin
Odpalamy Pawn Studio i wybieramy: File->New->SourcePawn Script. Naszym oczom ukaże się taki kod:
/* Plugin Template generated by Pawn Studio */
#include <sourcemod>
public Plugin:myinfo =
{
name = "New Plugin",
author = "Unknown",
description = "<- Description ->",
version = "1.0",
url = "<- URL ->"
}
public OnPluginStart()
{
// Add your own code here...
}
Na początku dołączamy moduły pluginu. W pierwszej funckji wypisujemy dane naszego pluginu, to chyba nie trzeba tłumaczyć, prawda? W kolejnej OnPluginStart() będziemy robić to, co będzie na potrzebne przy starcie serwera.
To był krótki wstęp. Najważniejszą rzeczą przy pisaniu jest świadomość tego co piszemy i tego co chcemy osiągnąć. W tym poradniku zrobimy pluginu, który będzie dawał x kasy na początek. Będę zamieszczał komentarze, aby ułatwić zrozumienie kodu.
1. Moduły i zmienne
Na początek musimy dodać moduł sdktools do naszego pluginu:
#include <sdktools>
Dodajemy także zmienne:
new g_iPlayer = -1
new Handle:iMoneyAmount
2. Funkcja OnPluginStart()
W skryptach SourceMod'a właściwości bytu należy pobierać z offsetów. Offset odpowiadający za ilość pieniędzy przypiszemy zmiennej g_iPlayer:
g_iPlayer = FindSendPropOffs("CCSPlayer", "m_iAccount")
Zdarzenia należy zhook'ować, przez HookEvent:
HookEvent("round_start", RoundStart, EventHookMode_Post)
(1 parametr to nazwa zdarzenia do hook'nięcia, 2 to nazwa funkcji, która będzie odpowiedzialna za zdarzenie, 3 ustala czy hook'nięcie ma nastąpić po (Post) czy przed zdarzeniem)
oraz przypisać iMoneyAmount wartość Var'a:
iMoneyAmount = CreateConVar("set_money_amount", "2500", "Ilosc dawanych pieniedzy", _, true, 0.0, true, 16000.0)
(1 parametr to nazwa Var'a, 2 to wartość, 3 - opis Var'a, 4 - flaga, 5 - czy ma mieć jakąś wartość minimalną?, 6 - jak tak to jaką?, 7 - czy ma mieć wartość maksymalną?, 8 - jak tak to jaką?)
3. Funkcja RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
Tu zamieścimy kod, odpowiadający za hook'onięcie funkcji:
public RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
for (new i = 1; i <= MaxClients; i++)
{
if (IsClientInGame(i))
{
if (g_iPlayer != -1)
{
new iCurrentMoney = GetEntData(i, g_iPlayer)
new iNewMoneyAmount = iCurrentMoney + GetConVarInt(iMoneyAmount)
if (iNewMoneyAmount > 16000)
iNewMoneyAmount = 16000
SetEntData(i, g_iPlayer, iNewMoneyAmount)
}
}
}
}
Czyli pobieramy id graczy, sprawdzamy czy są w grze, sprawdzamy czy offset jest prawidłowy i nadajemy wartość kasy.
GetEntData() - pobieramy wartość jakiegoś offsetu w naszym przypadku pieniędzy.
SetEntData() - ustawiamy wartość offsetowi
4. Ostateczny wygląd pluginu
/* Plugin Template generated by Pawn Studio */
#include <sourcemod>
#include <sdktools>
new g_iPlayer = -1
new Handle:iMoneyAmount
public Plugin:myinfo =
{
name = "Daj Kase",
author = "Nomaf",
description = "Ustawia wiecej kasy na poczatek rundy",
version = "1.0",
url = "http://amxx.pl/"
}
public OnPluginStart()
{
g_iPlayer = FindSendPropOffs("CCSPlayer", "m_iAccount")
HookEvent("round_start", RoundStart, EventHookMode_Post)
iMoneyAmount = CreateConVar("set_money_amount", "2500", "Ilosc dawanych pieniedzy", _, true, 0.0, true, 16000.0)
}
public RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
for (new i = 1; i <= MaxClients; i++)
{
if (IsClientInGame(i))
{
if (g_iPlayer != -1)
{
new iCurrentMoney = GetEntData(i, g_iPlayer)
new iNewMoneyAmount = iCurrentMoney + GetConVarInt(iMoneyAmount)
if (iNewMoneyAmount > 16000)
iNewMoneyAmount = 16000
SetEntData(i, g_iPlayer, iNewMoneyAmount)
}
}
}
}
Tak, to już jest koniec. Myślę, że przynajmniej trochę zapoznaliście się z SourceMod'em. Od razu zaznaczam - nie używamy Amxx-Studio, żeby później nie było żadnych pytań i problemów. Koniec, kropka.
Poradnik stworzony przez: Nomaf dla AMXX.pl - Support AMX Mod X
Kopiowanie bez mojej zgody jest zakazane!
MarWit
19.08.2011
No i super
Dokończę tylko skille do BF3 moda, to także wrzucę jakis tutek od siebie 
Daje także linka do bardzo fajnej strony zawierającą baze offsetów różnych gier, Web IDE oraz mnóstwo przydatnych linków: http://www.sourcemodplugins.org/.
Użytkownik MarWit edytował ten post 19.08.2011 11:03
Daje także linka do bardzo fajnej strony zawierającą baze offsetów różnych gier, Web IDE oraz mnóstwo przydatnych linków: http://www.sourcemodplugins.org/.
Użytkownik MarWit edytował ten post 19.08.2011 11:03
Owner123
19.08.2011
Świetnie =)
Chciałem zacząć coś z SourceModem ale zaczynać po angielsku trochę ciężko
Chciałem zacząć coś z SourceModem ale zaczynać po angielsku trochę ciężko
G[o]Q
19.08.2011
dokumentacja to nie problem wiekszosc funkcji mozna sie domyslic jak dziala a inne poprostu poszukac/potestowaco
Cypis'
25.09.2011
A amxx-studio też można robić pluginy do sourcemoda a nawet można w amxx-studio kompilować pluginy na sm tylko że rozszerzenie będzie .amxx (mozna zmienić na .smx i będzie działać)




