0. Wstęp
Jako że ostatnio dużo osób do mnie pisze obnośnie pomocy z tworzeniem klas, postanowiłem napisać ten oto drobny poradnik ukazujący tą "Czarną Magie".
Z góry przepraszam za wszelkie błędy ortograficzne (przepuszczałem przez "sprawdzaniepisowni" ale się wykrzaczył przez znaki specjalne).
1. Piszemy klase
Co będzie nam potrzebne:
- Kompilator sourcemod (ja używam v1.6.4) z wgranym api cmod'a
- Wygodny edytor textu (najlepiej z podświetleniem składni - ja używam Geany z składnią C++)
- pomysł na klase

Moja klasa będzie miała następujące parametry:
- Nazwa: NikuSan
- Opis/umiejętność: Przy każdym użyciu skilla dostaje flash'a
- Bronie: awp, tec-9, flashbang
- Statystyki INT/CON/STR/DEX: 22/10/33/90
A o to nasz "kod startowy":
#include <sdktools>
#include <sdkhooks>
#include <sourcemod>
public Plugin:myinfo = {
name = "NikuSan",
author = "PLX",
description = "Przy każdym użyciu skilla dostaje flash'a",
version = "1.0",
url = "RedTube.plx"
}
public OnPluginStart(){
}
Pierwszym krokiem który musimy zrobić jest załączenie api, aby tego dokonać pod:
#include <sdktools> #include <sdkhooks> #include <sourcemod>
dodajemy:
#include <cmod>
Gdzieś musimy przechowywać informacje o klasie, dlatego pod wyżej wymienionymi musimy dodać następujący kod:
//Tworzymy zmienne przechowujące informacje o klasie oraz je wypełniamy new const String:nazwaKlasy[] = "NikuSan"; new const String:opisKlasy[] = "Przy każdym użyciu skilla dostaje flash'a"; new const intKlasy = 22; new const conKlasy = 10; new const strKlasy = 33; new const dexKlasy = 90; //Tworzymy uchwyt dla adt_array (który będzie przechowywał liste broni) new Handle:bronieKlasy;
Czas nastał na stworznie adt_array który będzie przechowywał listę naszych broni, aby tego dokonać do funkcji OnPluginStart() dodajemy:
//Tworzymy adt_array dla listy broni bronieKlasy = CreateArray(32);
Następnie wypełniamy adt_array listą broni które nasza klasa ma mieć, w następujący sposób:
//Dodajemy bronie do adt_array PushArrayString(bronieKlasy, "weapon_awp"); PushArrayString(bronieKlasy, "weapon_tec9"); PushArrayString(bronieKlasy, "weapon_flashbang");
Skoro mamy już zapisane wszystkie informacje które zostaną przekazane do silnika, to przyszedł czas na wysłanie ich, w tym celu pod powyszym kodem dodajemy:
//Rejestrujemy klase w silniku Cmod_RegisterClass(nazwaKlasy, opisKlasy, intKlasy, conKlasy, strKlasy, dexKlasy, bronieKlasy);
A teraz ten nieszczęsny skill.
Wpierw tworzymy funkcje odpowiedzialną za aktywacje skilla:
//Tworzymy funkcje, która będzie wywoływana podczas aktywacji skilla przez gracza
public Cmod_OnClientUseSkill(client){
}
Następnie dodajemy do niej:
//Dajemy graczu flash'a GivePlayerItem(client, "weapon_flashbang");
Zapisujemy następnie kompilujemy klase. Gotowe ![]()
Dla tych którym się nie udało, niech sobie porównają kod:
#include <sdktools>
#include <sdkhooks>
#include <sourcemod>
#include <cmod>
//Tworzymy zmienne przechowujące informacje o klasie oraz je wypełniamy
new const String:nazwaKlasy[] = "NikuSan";
new const String:opisKlasy[] = "Przy każdym użyciu skilla dostaje flash'a";
new const intKlasy = 22;
new const conKlasy = 10;
new const strKlasy = 33;
new const dexKlasy = 90;
//Tworzymy uchwyt dla adt_array (który będzie przechowywał liste broni)
new Handle:bronieKlasy;
public Plugin:myinfo = {
name = "NikuSan",
author = "PLX",
description = "Przy każdym użyciu skilla dostaj flash'a",
version = "1.0",
url = "RedTube.plx"
}
public OnPluginStart(){
//Tworzymy adt_array dla listy broni
bronieKlasy = CreateArray(32);
//Dodajemy bronie do adt_array
PushArrayString(bronieKlasy, "weapon_awp");
PushArrayString(bronieKlasy, "weapon_tec9");
PushArrayString(bronieKlasy, "weapon_flashbang");
//Rejestrujemy klase w silniku
Cmod_RegisterClass(nazwaKlasy, opisKlasy, intKlasy, conKlasy, strKlasy, dexKlasy, bronieKlasy);
}
//Tworzymy funkcje, która będzie wywoływana podczas aktywacji skilla przez gracza
public Cmod_OnClientUseSkill(client){
//Dajemy graczu flash'a
GivePlayerItem(client, "weapon_flashbang");
}
2. Podst. omówienie api
2.1 Funkcje
Cmod_RegisterClass
Cmod_GetClientBonusWeapons
Cmod_GetAllowWeapons
Cmod_GetClientWeapons
2.2 Forwardy
Cmod_OnClassEnabled
Cmod_OnClassDisabled
Cmod_OnClientUseSkill
Cmod_OnGetNewClassID
[h1]3 Ostrzeżenia[/h2]
- Cześć funkcji z api nie jest do końca zabezpieczona, dlatego upewnij się że podajesz prawidłowe dane
- Nie dodawaj do listy broni weapon_knife, jeśli go dodasz może wystąpić bug z lewitującym nożem przed graczem
- Nigdy nie zamykaj adt_array jeśli używa go silnik, może to spowodować crash serva
4. Dodatkowo
4.1 m4a1-s
Aby dodać graczu broń m4a1-s należy także dodać do dozwolonych broni (Cmod_GetClientWeapons) dodać broń m4a4 (tak sm uznaje m4a1-s), sytuacja wygląda podobnie z usp
4.2 Vip
public Cmod_OnClassEnabled(client)
{
if(!GetAdminFlag(GetUserAdmin(client), Admin_Custom1)){
PrintToChat(client, "\x01\x0B\x01 \x07%s \x06Klasa dostępna tylko dla posiadaczy vip'a!", MOD_TAG);
return CMOD_DISABLE;
}
active[client] = true; // <----- opcjonalne
return CMOD_CONTINUE;
}
4.3 Ciekawostka
Możesz na bieżąco zmieniać bronie klasy (lecz pamiętaj aby nie zamykać adt_array jeśli silnik z niego korzysta)
Użytkownik plx211 edytował ten post 06.04.2015 19:20


Dodatki SourceMod















