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!