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

[Cmod][Poziom podstawowy] Tworzenie statystyki

cmod statystyki stats tworzenie

  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
Brak odpowiedzi do tego tematu

#1 plx211

    Wszechpomocny

  • Użytkownik

Reputacja: 231
Wszechwidzący

  • Postów:397
  • Lokalizacja:Polska
Offline

Napisano 25.03.2016 21:16

Z gory przepraszam za brak Polskich znakow i ewentualne bledy ortograficzne interpunkcyjine

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
Naszym zalozeniem jest stworzenie statystyki:
  • 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"
Zacznijmy od ram pluginu:
#include <sourcemod>
#include <cmod>

public void OnPluginStart() {

}

public void OnPluginEnd() {

}
Przydala by nam sie zmienna ktora bedzie przechowywac ID statystyki, dlatego pod include dodajemy
static 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)
  • +
  • -
  • 1





Również z jednym lub większą ilością słów kluczowych: cmod, statystyki, stats, tworzenie

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

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