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
 

plx211 - zdjęcie

plx211

Rejestracja: 08.02.2015
Aktualnie: Nieaktywny
Poza forum Ostatnio: 12.04.2019 20:43
****-

#725874 Tabela informacyjna po wejsciu na serwer!

Napisane przez plx211 w 07.05.2016 13:01

@{Master Yoga} nie zrozumialem tego ostaniego, .jpg dalem aby wiedzial ze ma byc tu link do zdjecia

edit:
dobra teraz zobacxylem jaki facepalm walnolem :)
  • +
  • -
  • 1


#725859 Cs Go Nie działa mikrofon. Prógowałem all

Napisane przez plx211 w 07.05.2016 10:00

Korzystam z Linux'a, wiec będę pisal wedlug tego co ja mam:

  1. Odpal steam
  2. Kliknij na przycisk "Steam" na toolbarze
  3. Kliknij "Settings" z listy
  4. Przejdz do "Voice"
  5. Kliknij i pobaw sie "CHANGE DEVICE..."

moze po prostu jest wybrane zle urzadzenie do nagrywania

 

edit:

Ja mam tyle mozliwosci

 

Ale tak czy siak jesli nie pokazuje ci w grze mikrofonu to w grze trzeba cos jeszcze ustawic

 

Załączone miniatury

  • Zrzut ekranu z 2016-05-07 11:00:26.png

  • +
  • -
  • 1


#725774 Cs Go Nie działa mikrofon. Prógowałem all

Napisane przez plx211 w 04.05.2016 18:32

zobacz czy na steamie nie masz wyciszonego (oraz czy tam dziala)dziala

edit
teraz doczytalem ze nie pijawia ci sie ikona, zobacz pod jakim klawiszem masz mikro, moze jakos rozbindowalo ci sie
  • +
  • -
  • 1


#724765 Program do naprawy Windows 10.

Napisane przez plx211 w 13.04.2016 18:10

Polecam jakas dystrybucjie Linux'a


  • +
  • -
  • 2


#724275 Jak zrobić zapis danych w sourcemod?

Napisane przez plx211 w 06.04.2016 15:43

najwygodniejszy jest SQL, zwlaszcza ze mozna generowac baze SQLite ;) ( https://wiki.alliedm...eMod_Scripting) )

jesli nie sa to wazne dane (a poziom gracza nie stety nalezy do waznych) to mozesz je zapisac po stronnie clienta w cookie.

mozesz takze zapisac dane do pliku kv ( https://wiki.alliedm...eMod_Scripting)) ale nie jest to zbyt wydajne rozwiazanie.

mozesz takze opracowac swoj system zapisu do pliku, ale tego tym bardziej nie polecam

 

najlepszym rozwiazaniem bedzie sql, jest on naprawdę banalny ;)


  • +
  • -
  • 1


#724223 Poszukuje modelu prezentu do CsGo

Napisane przez plx211 w 05.04.2016 14:34

https://forums.allie...80&d=1359578085

jest tam cs_gift ;)


  • +
  • -
  • 1


#723837 Problem z ftp

Napisane przez plx211 w 30.03.2016 00:35

Jesli to jest server o ktorym wspomniales w innym watku to napisz do supportu
  • +
  • -
  • 1


#723493 Cmod czyli RPG Kit

Napisane przez plx211 w 26.03.2016 18:53

Jak zwykle z gory przepraszam za brak Polskich znakow, oraz ewentualne bledy ortograficzne/interpunkcyjine

Wstep



Chcial bys zalozyc server CodMod, DiabloMod, lub jakis inny?
Ale nie chce ci sie pisac systemu exp'a, item'ow, klas?
Ten plugin (a raczej te pluginy) sa wlasnie dla ciebie
Cmod to zbior pluginów, ktory ulatwi ci szybkie napisanie (a juz w krotce skonfigurowanie) swojego wlasnego RPG Moda.
W aktualnej wersji najbardziej skorzystaja osoby ktore znaja sie na scriptingu w SP, ale obiecuje ze niedlugo to sie zmienni ;)

Zawartosc



Na dzien dzisjejszy w paczce znajdziesz:

  • Cmod_ClassCore plugin odpowiedzialny za klasy (tworzenie, usuwanie, forwardy)
  • Cmod_ExpCore plugin odpowiedzialny za system exp'a
  • Cmod_ItemCore plugin odpowiedzialny za itemy (tworzenie, usuwanie, forwardy)
  • Cmod_SkillCore plugin odpowiedzialny za skille (tworzenie, usuwanie, forwardy)
  • Cmod_PreparedSkill plugin odpowiedzialny za konfiguracjie skilli
  • Cmod_StatsCore plugin odpowiedzialny za statystyki

Roznice od poprzedniej wersji



Kod od ostatniego prototypu zostal napisany kilku krotnie, publikuje ta wersjie ze wzgledu na to ze jestem z niej najbardziej zadowolony (ale czas oceni jak bedzie sie to sprawdzac).
Klasy/itemy z prototypu nie beda dzialac pod ta wersjia!!!

Jaka jest roznica od prototypu?
Miedzy innymi:

  • Rozbicie kodu na odzielnne pluginy
  • Nowa idea
  • Kod oparty na skladni SP 1.7+
  • Prawie wszystkie dane oparte na tablicach dynamicznych (Dzięki ktorym nie trzeba ustawiac limitu klas/itemow/itp.)

Twoja pomoc



Chcesz pomoze w rozwoju, ale nie wiesz co zrobic?
od razu ci powiem ze mile widziane jest:

  • Dolaczenie sie do rozwoju Cmod'a (chetnie będę przyjmowal Pull request)
  • Dawanie propozycji co mozna by stworzyc itp.
  • Zglaszanie bledow z jak najwieksza iloscia informacji
  • Datki

Poradniki



Co jakis czas będę pisal poradnik, ktory bedzie przyblizal ta magie :)
Juz teraz mozesz przeczytac:

Download



Najnowsze wydanie
Kod zrodlowy

Do kompilacji wymagany jest:
SP 1.8+

Changelog:
Spoiler

  • +
  • -
  • 5


#723430 [Cmod][Poziom podstawowy] Tworzenie skilla

Napisane przez plx211 w 25.03.2016 21:24

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

 

Poprzedni poradnik (o statystykach)

Skille tak samo jak statystyka zostaly wyrzycone do odzielnych pluginów, ponadto stworzylem specjalna "warstwe" o nazwie PreparedSkill dzięki ktorej mozemy w latwy sposob zmiennic takie rzeczy jak obrazenia, bonusy, czy co tam chcecie (ale pod warunkiem, ze w skillu to zaimplementujecie)

Bedzie nam potrzebne:

  • Znajomosc skladni SP 1.7+
  • Znajomosc methodmap (polecam tut z alliedow)
  • Wgrany na server plugin Cmod_SkillCore oraz Cmod_PreparedSkill
  • Kompilator SP 1.8+ z biblioteka cmod'a

Zamiast tworzyc krok po kroku (jak to bylo w poradniku od statystyki), zaimiemy sie analiza ponizszego kodu:

#include <sourcemod>
#include <cmod>

SkillID mySkill;

public void OnPluginStart() {
  mySkill = SkillID("My magic skill");
  mySkill.setDesc("This skill doing only stupid staff");
  mySkill.hookPrepare(onPrepare);
  mySkill.hookStart(onStart);
  mySkill.hookStop(onStop);
}

public void OnPluginEnd() {
  mySkill.remove();
}

public void onPrepare(SkillID skillID, PreparedSkill preparedSkill) {
  preparedSkill.setValue("lucky_number", 100);
  preparedSkill.setFloat("stupid_lvl", 20.5);
  preparedSkill.setValue("wtf_count", 69);
}

public void onStart(SkillID skillID, PreparedSkill preparedSkill, int entity) {
  int lucky = preparedSkill.getValue("lucky_number");
  float stupid = preparedSkill.getFloat("stupid_lvl");
  int wtfCount = preparedSkill.getValue("wtf_count");
  PrintToChat(entity, "[My magic skill START] You have %d lucky pts, you brain is in %f\% stupid, and you have %d WTF?!", lucky, stupid, wtfCount);
}

public void onStop(SkillID skillID, PreparedSkill preparedSkill, int entity) {
  PrintToChat(entity, "[My magic skill STOP] Oh no!!!");
}

No to do dziela :)

SkillID mySkill;

Tworzymy zmienna ktora bedzie przechowywac ID skilla

mySkill = SkillID("My magic skill");

Rejestrujemy skill w silniku, nalezy pamietac ze wielkosc liter w nazwie ma znaczenie, najlepiej aby nazwa byla napisana w jezyku Angielskim

mySkill.setDesc("This skill doing only stupid staff");

Ustawiamy opis skilla, najlepiej aby opis byl napisany w jezyku Angielskim

mySkill.hookPrepare(onPrepare);
mySkill.hookStart(onStart);
mySkill.hookStop(onStop);

Hookujemy nastepujace eventy:

  • Prepare - jest wywolywany gdy zostanie utworzony PreparedSkill do danego skilla, w callbacku ustawiamy wartosci ktore bedziemy potem pobierac z PreparedSkill, jest to bardzo wazne, jesli nie ustawimy tego jest duze ryzyko ze dostaniemy losowa wartosc
  • Start - jest wywolywany kiedy zostanie wywolana funkcjia PreparedSkill.start, w callbacku implementujemy aktywacjie skilla
  • Stop - jest wywolywany kiedy zostanie wywolana funkcjia PreparedSkill.stop, w callbacku implementujemy dezaktywacjie skilla
mySkill.remove();

Usuwamy skill, jesli tego nie zrobimy a wylaczymy plugin, to silnik nadal bedzie mial zarejestrowany skill co uniemozliwi ponnowna aktyacjie plugina z skillem

public void onPrepare(SkillID skillID, PreparedSkill preparedSkill) {
  preparedSkill.setValue("lucky_number", 100);
  preparedSkill.setFloat("stupid_lvl", 20.5);
  preparedSkill.setValue("wtf_count", 69);
}

Jest to callback do zhookowanego wczesniej eventu Prepare,
Ustawiamy w nim wartosci kluczy PreparedSkill (wiecej o tym nizej)

public void onStart(SkillID skillID, PreparedSkill preparedSkill, int entity) {
  int lucky = preparedSkill.getValue("lucky_number");
  float stupid = preparedSkill.getFloat("stupid_lvl");
  int wtfCount = preparedSkill.getValue("wtf_count");
  PrintToChat(entity, "[My magic skill START] You have %d lucky pts, you brain is in %f\% stupid, and you have %d WTF?!", lucky, stupid, wtfCount);
}

Jest to callback do zhookowanego wczesniej eventu Start,
Pobieramy tutaj wartosci z kluczy PreparedSkill,
Po czym drukujemy mala notke ;)

public void onStop(SkillID skillID, PreparedSkill preparedSkill, int entity) {
  PrintToChat(entity, "[My magic skill STOP] Oh no!!!");
}

Jest to callback do zhookowanego wczesniej eventu Stop,
Chyba nie musze pisac co w nim jest robione :)

Ufff, a teraz przypaczmy sie PreparedSkill, na poczatku napiszemy cos co pozwoli nam przetestowac powyzsze wymiociny/wypociny:

#include <sourcemod>
#include <cmod>

CmodSkill skills;

PreparedSkill skillMagic;

public void OnPluginStart() {
  skillMagic = new PreparedSkill(skills.findIDByName("My magice skill"));
  RegConsoleCmd("sm_startskill", cmd_sm_startskill);
  RegConsoleCmd("sm_stopskill", cmd_sm_stopskill);
}

public Action cmd_sm_startskill(int client, int argc) {
  skillMagic.start(client);
}

public Action cmd_sm_stopskill(int client, int argc) {
  skillMagic.stop(client);
}

Nie ma zbytnio sensu tlumaczyc powyzszego kodu, dlatego przejde do rzeczy:
Czym jest PreparedSkill?
Jest to poprostu troche przerobiony StringMap, dzięki ktoremu mozemy napisac skill raz, a potem wywolywac go na rozne sposoby w innych klasach/itemach/pluginach.
Moze nam posluzyc jako tymczasowy bonus, lub co kolwiek chcemy.
Pamietaj ze nie musisz zawsze wywolywac/implementowac eventu Stop.

Aby bardziej zilustrowac ci idea:
Zalozmy ze mamy juz storzony skill "rocket" (ktory powiedzmy ze ma 120 linijek kodu) z nastepujacymi "kluczami w prepared":
- "damage" - typu float, odpowiedzialnego za DMG
- "radius" - typu value, odpowiedzialnego za obszar wybuchu
- "rocket_speed" - typu float, odpowiedzialnego za szybkosc rakiety
Teraz gdzies w innym pluginie:

CmodSkill skills;
//...
PreparedSkill rocket = new PreparedSkill(skills.findIDByName("rocket"));
rocket.setFloat("damage", 200.0);
rocket.setValue("radius", 64);
rocket.setFloat("rocket_speed", 3.0);
//...
rocket.start(client);

Teraz mozemy w innym pluginie uzyc tego samego skilla, ale z innymi ustawieniami
Bez tego musieli bysmy ponownie napisac 120 linijek kodu, a takto jedynie jestesmy zmuszenie do napisania zaledwie 6 linijek ;)

(Czesc) Skill API z Polskim opisem:

methodmap SkillID __nullable__ {
  // Tworzy nowy skill
  // Do dzialania wymaga Cmod_SkillCore
  //
  // @param name       Nazwa skilla
  // @return           Jesli skill o danej nazwie istnieje zwraca SkillID_Invalid,
  //                   W przeciwnym przypadku zwraca id skilla
  public native SkillID(char[] name);

  // Pobiera nazwe skilla
  // Do dzialania wymaga Cmod_SkillCore
  //
  // @param buffor     Buffor gdzie bedzie skopiowania nazwa
  // @param maxLength  Maksymalna wielkosc buffora
  public native void getName(char[] buffor, int maxLength);

  // Ustawia opis skilla
  // Do dzialania wymaga Cmod_SkillCore
  //
  // @param desc       Opis jaki ma ustawic
  public native void setDesc(char[] desc);

  // Pobiera opis skilla
  // Do dzialania wymaga Cmod_SkillCore
  //
  // @param buffor     Buffor gdzie bedzie skopiowany opis
  // @param maxLength  Maksymalna wielkosc buffora
  public native void getDesc(char[] buffer, int maxLength);

  // Usuwa skill
  // Do dzialania wymaga Cmod_SkillCore
  public native void remove();

  // Sprawdza czy skill jest prawidlowy
  // Do dzialania wymaga Cmod_SkillCore
  //
  // @return           True jesli skill jest poprawna
  //                   False w kazdym innym przypadku
  public native bool isValid();

  // Hookuje event Start skilla
  // Do dzialania wymaga Cmod_PreparedSkill
  //
  // @param callback   Funkcja ktora ma byc wywolana
  // @return           True jesli zahookowalo
  //                   False w kazdym innym przypadku
  public native bool hookStart(SkillStartCB callback);

  // Odhookowuje event Start skilla
  // Do dzialania wymaga Cmod_PreparedSkill
  //
  // @param callback   Funkcja ktora byla wywolana
  // @return           True jesli odhookowalo
  //                   False w kazdym innym przypadku
  public native bool unhookStart(SkillStartCB callback);

  // Hookuje event Stop skilla
  // Do dzialania wymaga Cmod_PreparedSkill
  //
  // @param callback   Funkcja ktora ma byc wywolana
  // @return           True jesli zahookowalo
  //                   False w kazdym innym przypadku
  public native bool hookStop(SkillStopCB callback);

  // Odhookowuje event Stop skilla
  // Do dzialania wymaga Cmod_PreparedSkill
  //
  // @param callback   Funkcja ktora byla wywolana
  // @return           True jesli odhookowalo
  //                   False w kazdym innym przypadku
  public native bool unhookStop(SkillStopCB callback);

  // Hookuje event Prepare skilla
  // Do dzialania wymaga Cmod_PreparedSkill
  //
  // @param callback   Funkcja ktora ma byc wywolana
  // @return           True jesli zahookowalo
  //                   False w kazdym innym przypadku
  public native bool hookPrepare(SkillPrepareCB callback);

  // Odhookowuje event Prepare skilla
  // Do dzialania wymaga Cmod_PreparedSkill
  //
  // @param callback   Funkcja ktora byla wywolana
  // @return           True jesli odhookowalo
  //                   False w kazdym innym przypadku
  public native bool unhookPrepare(SkillPrepareCB callback);
};

methodmap CmodSkill {
  // Zwraca maksymalna dlugosc nazwy
  // Do dzialania wymaga Cmod_SkillCore
  property int maxNameLength {
    public native get();
  }

  // Zwraca maksymalna dlugosc opisu
  // Do dzialania wymaga Cmod_SkillCore
  property int maxDescLength {
    public native get();
  }

  // Hookuje stworzenie skilla
  // Do dzialania wymaga Cmod_SkillCore
  //
  // @param callback   Funkcja ktora ma byc wywolana
  // @return           True jesli zahookowalo
  //                   False w kazdym innym przypadku
  public native bool hookCreateSkill(SkillCreateCB callback);

  // Odhookowuje stworzenie skilla
  // Do dzialania wymaga Cmod_SkillCore
  //
  // @param callback   Funkcja ktora byla wywolana
  // @return           True jesli odhookowalo
  //                   False w kazdym innym przypadku
  public native bool unhookCreateSkill(SkillCreateCB callback);

  // Hookuje usuniecie skilla
  // Do dzialania wymaga Cmod_SkillCore
  //
  // @param callback   Funkcja ktora ma byc wywolana
  // @return           True jesli zahookowalo
  //                   False w kazdym innym przypadku
  public native bool hookRemoveSkill(SkillRemoveCB callback);

  // Odhookowuje usuniecie skilla
  // Do dzialania wymaga Cmod_SkillCore
  //
  // @param callback   Funkcja ktora byla wywolana
  // @return           True jesli odhookowalo
  //                   False w kazdym innym przypadku
  public native bool unhookRemoveSkill(SkillRemoveCB callback);

  // Zwraca ID skilla o danej nazwie
  // Do dzialania wymaga Cmod_StatsCore
  //
  // @param name       Nazwa skilla
  // @return           SkillID_Invalid jesli statystyka o danej nazwie nie istnieje
  //                   W przeciwnym wypadku SkillID statystyki
  public native SkillID getIDByName(char[] name);
};

(Czesc) PreparedSkill API z Polskim opisem:

methodmap PreparedSkill __nullable__ {
  // Tworzy nowy PreparedSkill
  // Do dzialania wymaga Cmod_PreparedSkill
  //
  // @param targetSkill Docelowy skill
  // @return            ID PreparedSkill
  public native PreparedSkill(SkillID targetSkill);

  // Usuwa PreparedSkill
  // Do dzialania wymaga Cmod_PreparedSkil
  public native void remove();

  // Sprawdza czy PreparedSkill jest prawidlowy
  // Do dzialania wymaga Cmod_PreparedSkil
  //
  // @return           True jesli PreparedSkill jest poprawna
  //                   False w kazdym innym przypadku
  public native bool isValid();

  // Ustawia wartosc typu value
  // Do dzialania wymaga Cmod_PreparedSkil
  //
  // @param key        Nazwa klucz
  // @param value      Wartosc
  // @param replace    Jesli istnieje czy ma zamienic
  public native bool setValue(char[] key, any value, bool replace = false);

  // Ustawia wartosc typu float
  // Do dzialania wymaga Cmod_PreparedSkil
  //
  // @param key        Nazwa klucza
  // @param value      Wartosc
  // @param replace    Jesli istnieje czy ma zamienic
  public native bool setFloat(char[] key, float value, bool replace = false);

  // Ustawia wartosc typu string
  // Do dzialania wymaga Cmod_PreparedSkil
  //
  // @param key        Nazwa klucza
  // @param value      Wartosc
  // @param replace    Jesli istnieje czy ma zamienic
  public native bool setString(char[] key, char[] value, bool replace = false);

  // Ustawia wartosc typu array
  // Do dzialania wymaga Cmod_PreparedSkil
  //
  // @param key        Nazwa klucza
  // @param array      Tablica ktora ma ustawic
  // @param numItems   Ilosc elementow tablicy
  // @param replace    Jesli istnieje czy ma zamienic
  public native bool setArray(char[] key, any[] array, int numItems, bool replace = false);

  // Pobiera wartosc klucza
  // Do dzialania wymaga Cmod_PreparedSkil
  //
  // @param key        Nazwa klucza
  // @return           Wartosc klucza
  public native any getValue(char[] key);

  // Pobiera wartosc klucza
  // Do dzialania wymaga Cmod_PreparedSkil
  //
  // @param key        Nazwa klucza
  // @return           Wartosc klucza
  public native float getFloat(char[] key);

  // Pobiera ciag znakow z klucza
  // Do dzialania wymaga Cmod_PreparedSkil
  //
  // @param key        Nazwa klucza
  // @param buffor     Buffor do ktorego bedzie skopiowana wartosc
  // @param maxLength  Maksymalna dlugosc buffora
  public native bool getString(char[] key, char[] buffor, int maxLength);

  // Pobiera ciag znakow z klucza
  // Do dzialania wymaga Cmod_PreparedSkil
  //
  // @param key        Nazwa klucza
  // @param array      Tablica do ktorej zostana skopiowane pozycjie
  // @param maxSize    Maksymalna wielkosc tablicy
  public native bool getArray(char[] key, any[] array, int maxSize);

  // Pobiera typ wartosci klucza
  // Do dzialania wymaga Cmod_PreparedSkil
  //
  // @param key        Nazwa klucza
  // @return           Typ wartosci klucza
  public native PreparedVarType getVarType(char[] key);

  // Wywoluje event Start
  // Do dzialania wymaga Cmod_PreparedSkil
  //
  // @param entity     Byt dla jakiego ma wywolac
  public native void start(int entity);

  // Wywoluje event Stop
  // Do dzialania wymaga Cmod_PreparedSkil
  //
  // @param entity     Byt dla jakiego ma wywolac
  public native void stop(int entity);
}

Wiecej w API (nie stety bez opisow)


  • +
  • -
  • 3


#723429 [Cmod][Poziom podstawowy] Tworzenie statystyki

Napisane przez plx211 w 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


#722876 Store plugin czarna postać Problem

Napisane przez plx211 w 15.03.2016 19:15

wgraj https://forums.allie...ad.php?p=602270

dodaj do niego sciezke do materials twojch modeli


  • +
  • -
  • 1


#722813 Store plugin czarna postać Problem

Napisane przez plx211 w 14.03.2016 21:21

to moze byc wina modeli (sciezki do materials w nich)

lub masz pod inna nazwa materials (albo wcale) do nich

jest jeszcze 3 opcjia ze ci materials nie pobralo


  • +
  • -
  • 1


#722658 problem z cs go podczas właczania

Napisane przez plx211 w 11.03.2016 18:14

Tak moze byc spowodowane, jesli wydajnosc dysku spadla dluzej wczytuje pliki, a tym samym staje sie to o czym napisalem wyzej.

naprawdę nie masz czym sie martwic ;)

(a przynajmniej polki nie umozliwia ci to gry)


  • +
  • -
  • 1


#722641 problem z cs go podczas właczania

Napisane przez plx211 w 11.03.2016 11:32

Nie masz czym sie martwic, kliknij anuluj jak to wyskoczy.
Jest to spowodowane tym ze csgo wczytuje wtedy duzo plikow i nie daje zadnych odpowiedzi, przez co system uznaje ze process sie zawiesil.

Jak ci to przeszkadza polecam ci Linux'a (jak sie na nim nie znasz, to dobrym wyborem jest mint 64bity z cinnamon)
  • +
  • -
  • 1


#722601 Użycie aktywnego skilla prawym przyciskiem myszki.

Napisane przez plx211 w 10.03.2016 19:17

spakuj to do tar'a lub zip'a, bo nie mam jak tego otworzyc


  • +
  • -
  • 1