←  Tutoriale

AMXX.pl: Support AMX Mod X i SourceMod

»

Piszemy pierwszy plugin

  • +
  • -
Nomaf - zdjęcie 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. :P

Poradnik stworzony przez: Nomaf dla AMXX.pl - Support AMX Mod X
Kopiowanie bez mojej zgody jest zakazane!

Odpowiedz

  • +
  • -
MarWit - zdjęcie MarWit 19.08.2011

No i super :D 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
Odpowiedz

  • +
  • -
Gh0st - zdjęcie Gh0st 19.08.2011

God Job . Estetyka pierwsza klasa :) aż miło się patrzy na takie Poradniki
Odpowiedz

  • +
  • -
Owner123 - zdjęcie Owner123 19.08.2011

Świetnie =)
Chciałem zacząć coś z SourceModem ale zaczynać po angielsku trochę ciężko ^^
Odpowiedz

  • +
  • -
sharkowy - zdjęcie sharkowy 19.08.2011

Brawo :)
Odpowiedz

  • +
  • -
Cypis' - zdjęcie Cypis' 19.08.2011

można by bylo dokumentacje stworzyć do source moda :D
Odpowiedz

  • +
  • -
sharkowy - zdjęcie sharkowy 19.08.2011

To by musiał być ktoś, kto doskonale ogarnia sourcemoda :P
Odpowiedz

  • +
  • -
G[o]Q - zdjęcie G[o]Q 19.08.2011

dokumentacja to nie problem wiekszosc funkcji mozna sie domyslic jak dziala a inne poprostu poszukac/potestowaco
Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 19.08.2011

przydał by się download kompilatora i edytora :P
Odpowiedz

  • +
  • -
Cypis' - zdjęcie 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ć)
Odpowiedz