W nowej wersji cmoda (1.0+), statystyki zostaly wyrzucone do osobnych pluginów (tak jak bylo z klasami/itemami w poprzednim "prototypie")
Bedzie nam potrzebne:
- Znajomosc skladni SP 1.7+
- Znajomosc methodmap (polecam tut z alliedow)
- Wgrany na server plugin Cmod_StatsCore do testow
- Kompilator SP 1.8+ z biblioteka cmod'a
- O nazwie "TestStats"
- Z opisem "bla bla moja statystyka"
- Pod czas aktywacji ma pisac na czacie gracza "Statystyka o id X zostala aktywowana z moca Y pktow"
#include <sourcemod>
#include <cmod>
public void OnPluginStart() {
}
public void OnPluginEnd() {
}
Przydala by nam sie zmienna ktora bedzie przechowywac ID statystyki, dlatego pod include dodajemystatic StatsID testStats;Przyszedl czas na rejestracje statystyki w silniku, w funkcji OnPluginStart() dodajemy nastepujaca linijke:
testStats = new StatsID("TestStats");
Dobra 1 zalozenie spelnione Przyszedl czas na opis, w tym celu pod powyzsza linijka dodajemy:
testStats.setDesc("bla bla moja statystyka");
Prawda ze proste?No to czas na finnalne zalozenie, czyli:
Pod czas aktywacji ma pisac na czacie gracza "Statystyka zostala aktywowana z moca X pktow"A wiec do dziela, na samym dole tworzymy nowa publiczna funkcjie, ktora bedzie sluzyla nam za callback:
public void onActivate(StatsID statsID, int client, int points) {
}
Oczywiscie nie musimy nazywac funkcji onActivate, nasza funkcja musi spelniac tylko ponizsza zaleznosc:typeset StatsActivateCB {
function void (StatsID statsID, int client, int points);
};
Wracajac do zalozenia, dodajemy teraz wewnatrz naszej przepieknej funkcji:PrintToChat(client, "Statystyka o id %d zostala aktywowana z moca %d pktow", statsID, points);Tylko ze sama funkcjia nam nic nie da, musimy jeszcze powiadomic silnik aby ja wywolywal, w tym celu pod funkcjia odpowiadajaca za opis dodajemy:
testStats.hookActivate(onActivate);Ale chwileczke nie zapomnielismy o czyms? Jest to bardzo wazne, do funkcji OnPluginEnd() dodajemy nastepujacy kod:
testStats.remove();Odpowiada to za wyrejestrowanie statystyki z silnika.
Skonczone
Finnalnie nasz kod powinnien wygladac tak:
#include <sourcemod>
#include <cmod>
StatsID testStats;
public void OnPluginStart() {
testStats = new StatsID("TestStats");
testStats.setDesc("bla bla moja statystyka");
testStats.hookActivate(onActivate);
}
public void OnPluginEnd() {
testStats.remove();
}
public void onActivate(StatsID statsID, int client, int points) {
PrintToChat(client, "Statystyka o id %d zostala aktywowana z moca %d pktow", statsID, points);
}
Czas na testy,Activate jest wywolywane po chwilke po respawnie przez plugin Cmod_Client,
Wiec mozemy czekac na respawn, lub posluzyc sie ponizszym kodem:
#include <sourcemod>
#include <cmod>
CmodStats cmodStats;
public void OnPluginStart() {
RegConsoleCmd("sm_teststats", cmd_sm_teststats);
}
public Action cmd_sm_teststats(int client, int argc) {
StatsID statsID = cmodStats.findIDByName("TestStats"); // uzyskujemy id statystyki przez jej nazwe
statsID.sendActivate(client, GetRandomInt(1, 100)); // aktywujemy statystyke dla gracza ktory wpisal komende, z losowa iloscia pktow (od 1 do 100)
}
Teraz wystarczy wklepac w konsole sm_teststats i mozemy podziwiac efekty Ale chwilke, dlaczego musze recznie podawac liczbe pktow?
Na czas pisania poradnika nie zostalo jeszcze zaimplementowane
Ale juz nie bawem na pewnno sie pojawi (zapewnne znajdzie sie on w pluginie Cmod_Client)
(Czesc) Stats API z Polskim opisem:
methodmap StatsID __nullable__ {
// Tworzy nowa statystyke
// Do dzialania wymaga Cmod_StatsCore
//
// @param name Nazwa statystyki
// @return Jesli statatystyka o danej nazwie istnieje zwraca StatsID_Invalid,
// W przeciwnym przypadku zwraca id statystyki
public native StatsID(char[] name);
// Pobiera nazwe statystyki
// Do dzialania wymaga Cmod_StatsCore
//
// @param buffor Buffor gdzie bedzie skopiowana nazwa
// @param maxLength Maksymalna wielkosc buffora
public native void getName(char[] buffor, int maxLength);
// Ustawia opis statystyki
// Do dzialania wymaga Cmod_StatsCore
//
// @param desc Opis jaki ma ustawic
public native void setDesc(char[] desc);
// Pobiera opis statatystyki
// Do dzialania wymaga Cmod_StatsCore
//
// @param buffer Buffor gdzie bedzie skopiowany opis
// @param maxLength Maksymalna wielkosc buffora
public native void getDesc(char[] buffer, int maxLength);
// Usuwa statystyke
// Do dzialania wymaga Cmod_StatsCore
public native void remove();
// Sprawdza czy statustyla jest prawidlowa
// Do dzialania wymaga Cmod_StatsCore
//
// @return True jesli statysyka jest poprawna
// False w kazdym innym przypadku
public native bool isValid();
// Hookuje aktywacje statatystyki
// Do dzialania wymaga Cmod_StatsCore
//
// @param callback Funkcja ktora ma byc wywolana
// @return True jesli zahookowalo
// False w kazdym innym przypadku
public native bool hookActivate(StatsActivateCB callback);
// Odhookowuje aktywacje statatystyki
// Do dzialania wymaga Cmod_StatsCore
//
// @param callback Funkcja ktora byla wywolana
// @return True jesli odhookowalo
// False w kazdym innym przypadku
public native bool unhookActivate(StatsActivateCB callback);
// Wysyla aktywacjie statystyki
// Do dzialania wymaga Cmod_StatsCore
//
// @param client ID clienta dla ktorego aktywujemy statystyke
// @param points Liczba pktow statystyki
public native void sendActivate(int client, int points);
};
methodmap CmodStats {
// Zwraca maksymalna dlugosc nazwy
// Do dzialania wymaga Cmod_StatsCore
property int maxNameLength {
public native get();
}
// Zwraca maksymalna dlugosc opisu
// Do dzialania wymaga Cmod_StatsCore
property int maxDescLength {
public native get();
}
// Hookuje stworzenie nowej statatystyki
// Do dzialania wymaga Cmod_StatsCore
//
// @param callback Funkcja ktora ma byc wywolana
// @return True jesli zahookowalo
// False w kazdym innym przypadku
public native bool hookCreateStats(StatsCreateCB callback);
// Odhookowuje stworzenie nowej statatystyki
// Do dzialania wymaga Cmod_StatsCore
//
// @param callback Funkcja ktora byla wywolana
// @return True jesli odhookowalo
// False w kazdym innym przypadku
public native bool unhookCreateStats(StatsCreateCB callback);
// Hookuje usuniecie statatystyki
// Do dzialania wymaga Cmod_StatsCore
//
// @param callback Funkcja ktora ma byc wywolana
// @return True jesli zahookowalo
// False w kazdym innym przypadku
public native bool hookRemoveStats(StatsRemoveCB callback);
// Odhookowuje usuniecie statatystyki
// Do dzialania wymaga Cmod_StatsCore
//
// @param callback Funkcja ktora byla wywolana
// @return True jesli odhookowalo
// False w kazdym innym przypadku
public native bool unhookRemoveStats(StatsRemoveCB callback);
// Zwraca ID statystyki o danej nazwie
// Do dzialania wymaga Cmod_StatsCore
//
// @param name Nazwa statystyki
// @return StatsID_Invalid jesli statystyka o danej nazwie nie istnieje
// W przeciwnym wypadku StatsID statystyki
public native StatsID getIDByName(char[] name);
};
Wiecej w API (nie stety bez opisow)


Dodatki SourceMod













