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

Piszemy pierwszy plugin


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

#1 Nomaf

    Wszechpomocny

  • Użytkownik

Reputacja: 157
Profesjonalista

  • Postów:344
  • GG:
  • Imię:Mateusz
  • Lokalizacja:Polska
Offline

Napisano 18.08.2011 22:23

*
Popularny

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!


  • +
  • -
  • 10

#2 MarWit

    The Chosen One

  • Przyjaciel

Reputacja: 843
Czempion

  • Postów:1 485
  • GG:
  • Steam:steam
  • Imię:Marcin
  • Lokalizacja:Bystrzyca
Offline

Napisano 19.08.2011 10:52

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

  • +
  • -
  • 0

marwit-0.png


#3 Gh0st

    :)

  • Power User

Reputacja: 852
Czempion

  • Postów:920
  • GG:
  • Imię:Tomek
  • Lokalizacja:Rabka-Zdrój
Offline

Napisano 19.08.2011 11:01

God Job . Estetyka pierwsza klasa :) aż miło się patrzy na takie Poradniki
  • +
  • -
  • 0

#4 Owner123

    Wszechpomocny

  • Użytkownik

Reputacja: 146
Zaawansowany

  • Postów:331
  • Lokalizacja:Barty ;]
Offline

Napisano 19.08.2011 13:00

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

#5 sharkowy

    Lokalna anomalia sejsmiczna o nieustalonej genezie.

  • Przyjaciel

Reputacja: 113
Zaawansowany

  • Postów:1 981
Offline

Napisano 19.08.2011 13:16

Brawo :)
  • +
  • -
  • 0

#6 Cypis'

    Master

  • Przyjaciel

Reputacja: 1 161
Super Hero

  • Postów:965
  • GG:
  • Steam:steam
  • Lokalizacja:polska
Offline

Napisano 19.08.2011 13:53

można by bylo dokumentacje stworzyć do source moda :D
  • +
  • -
  • 0

#7 sharkowy

    Lokalna anomalia sejsmiczna o nieustalonej genezie.

  • Przyjaciel

Reputacja: 113
Zaawansowany

  • Postów:1 981
Offline

Napisano 19.08.2011 14:00

To by musiał być ktoś, kto doskonale ogarnia sourcemoda :P
  • +
  • -
  • 0

#8 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 19.08.2011 17:02

dokumentacja to nie problem wiekszosc funkcji mozna sie domyslic jak dziala a inne poprostu poszukac/potestowaco
  • +
  • -
  • 0
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#9 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 553
Godlike

  • Postów:11 976
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 19.08.2011 19:15

przydał by się download kompilatora i edytora :P
  • +
  • -
  • 0

#10 Cypis'

    Master

  • Przyjaciel

Reputacja: 1 161
Super Hero

  • Postów:965
  • GG:
  • Steam:steam
  • Lokalizacja:polska
Offline

Napisano 25.09.2011 19:51

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ć)
  • +
  • -
  • 0




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

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