Pluginy *Core byly tak pisane aby nie wymagaly siebie nawzajem, cala zaleznosc miedzy nimi zostanie wrzucona do (opcjonalnych) zewnnetrznych pluginow
Tak, kompilator SP 1.7 jest zabugowany, kod po kompilacji nie dzialal
Po za tym SP 1.8 ma troche inna skladnie, przyklad:
kod z SP 1.7:
methodmap A < Handle __nullable__ {
public ~A() {
//deconstructor code
}
//code
};
ten sam kod w SP 1.8 (tylko ze dekonsturktor jest nie dostepny):
methodmap A __nullable__ < Handle {
//code
};
Mala linijka a uniemozliwia kompilacje
Tak, po skompilowaniu w 1.8 mozesz plugin odpalac na serverze z sm 1.7.3
Mozesz uzyc tego samego plugin do roznych celow, np. CodMod od DiabloMod'a tak naprawde rozni sie tym ze DiabloMod nie ma restrykcji broni.
Po za tym jesli w ktoryms z pluginow bedzie blad, to sm wylaczy tylko ten plugin dzieki czemu szybko mozemy go podmienic/naprawic ;)
Nie ma zadnych problemow :) To bylo 1 z zalozen.
Jeszcze nie, powoli sobie kodze, ale dodam to do todo, jak bys byl zainteresowany zrobieniem tego to zapraszam, chetnie dodam do repo ;)
Stworzyc jakis admin center ? Issue #14 ? plx211/Cmod ? GitHub
Nie bralem tego za priorytet, ale bedzie to dodane pozniej (w Cmod_ClassCore trzeba napisac kod odpowiedzialny za zwracanie wartosci z forwardu, z jakies 3linijki)
Umozliwic blokowanie ustawienia klasy ? Issue #13 ? plx211/Cmod ? GitHub
Stworzyc system misji ? Issue #12 ? plx211/Cmod ? GitHub
Stworzyc system walut i jakis podstawowy sklep do niego ? Issue #11 ? plx211/Cmod ? GitHub
Stworzyc przyklady ? Issue #5 ? plx211/Cmod ? GitHub
Stworzyc prosty system wyswietlania informacji w hud ? Issue #10 ? plx211/Cmod ? GitHub
Napisalem 2 poradniki (pozniej sie pojawi wiecej) ktore cie moga zainteresowac (nie widzialem odpowiedniego dzialu wiec nie publikowalem ich na tym forum, jak znajde dzial to w nim napisze i zmiennie tu linki)
[Cmod][Poziom podstawowy] Tworzenie statystyki - Tutoriale - AMXX.pl: Support AMX Mod X
[Cmod][Poziom podstawowy] Tworzenie skilla - Tutoriale - AMXX.pl: Support AMX Mod X
Przykladowy (pseudo) kod (pisany od reki) z uzyciem samego ExpCore:
#include <sourcemod>
#include <cmod>
const int MAX_LVL = 200;
const int LVL_RATIO = 35; // Exp potrzebny na kolejny lvl, jest liczony wzorem lvl * lvl * LVL_RATIO
const int EXP_FOR_DEATH = 10;
ExpID clientExpID[MAXPLAYERS + 1];
public void OnPluginStart() {
// hookujesz sobie np. event player_death do callbacku onClientDeath
}
public void OnPluginEnd() {
for (int client = 1; client < MAXPLAYERS; ++client)
if (clientExpID[client].isValid())
clientExpID[client].remove();
}
public void OnClientPutInServer(int client) {
clientExpID[client] = new ExpID(MAX_LVL, LVL_RATIO);
clientExpID[client].hookLvlChange(onLvlChange);
}
public void OnClientDisconnect(int client) {
clientExpID[client].remove();
}
int findClientByExpID(ExpID expID) {
for (int client = 1; client < MAXPLAYERS; ++client)
if (clientExpID[client] == expID)
return client;
return -1;
}
public void onLvlChange(ExpID expID, int oldLvl, int newLvl) {
int client = findClientByExpID(expID);
PrintToChat(client, "Twoj lvl ulegl zmiannie z %d lvl na %d lvl", oldLvl, newLvl);
}
// nie chce mi sie zbytnio pisac, wiec uznajmy ze callback ma takie parametry :)
public void onClientDeath(int victim, int attacker) {
clientExpID[attacker].exp += 10;
clientExpID[attacker].checkLvl();
}
Teoretycznie silnik rezerwuje MAXPLAYERS + 1 slotow dla clientow, ale powyzsza opcjia jest bezpieczniejsza, po za tym nie wiem czy ta rezerwacja pozostanie.
Niedlugo dodam do repo porzadnie napisany powyzszy kod ;)
ExpID mozesz zastosowac do:
klasy
itemu
skilla
statystyki
wykupywanie powyzszych (nie musisz wywolywac checkLvl)
jako prosty system monet
sklep za exp
exp druzyn
"poziom" gry (do pozniejszego np. najlepszego rozegrania)
mozesz dawac graczu co X czasu Y exp'a i wraz z wiekszym lvl'em wieksze korzysci
i wiele wiele wiecej (o ile wyobraznia ci pozwala)
ExpID jest przechowywany (tak samo jak reszta) w tablicy dynamicznej dlatego nie ma teoretycznie limitu.
Oznacza to ze mozesz graczowi kovalsky utworzyc 128 systemu expa, bo ci sie tak podoba ;)
Oczywiscie do dzialania wymaga Cmod_ExpCore :)
Cala lista todo:
Issues ? plx211/Cmod ? GitHub
Mam nadzieje ze odpowiedzialem na wszystkie twoje pytania :)