Closed masterofencode closed 4 years ago
Pierwsze co zalecam, to zaznajomienie się z i używanie dokumentacji.
Swojego CoDa napisałem z myślą o tym, żeby generalnie tworzenie klas i itemów było prostsze z racji możliwości wykorzystania bardzo bogatej funkcjonalności, którą udostępnia sam silnik. Zresztą klasy i itemy jakie są dorzucone do paczki mają na celu przede wszystkim pokazanie jak powinno się je tutaj pisać, a niekonieczne od razu używać na serwerze. Wystarczy je sobie poprzeglądać.
Jeśli chodzi o moc widzenia niewidzialnych, zobacz sobie item Sokole Oko.
@TheDoctor0 dobrze zaznajomie się z dokumentacją
Co do obrażeń 1/1 czyli natychmiastowe zabicie gdzie to jest wspominiane w dokumentacji?
Natyw cod_kill_player.
@TheDoctor0 takie pytanie mam i może to błąd jest ale co jakiś czas resetuje wszystkim level statystyki itp i pytanie co może nie tak być
To co zostanie zapisane w bazie danych samo nie znika. Radziłbym sprawdzić logi, bo równie dobrze, któryś z adminów może je resetować jedną z trzech dostępnych komend: _cod_resetdata, _cod_reset_statsdata, _cod_reset_alldata. Możesz też zerknąć w cvary statystyk, _csstatsrank powinien być ustawiony na 0, a _csstatsmaxsize najlepiej na 99999.
csstats_maxsize chodzi ci o dodanie do amxx.cfg? co do tych tych komend da jakoś rade ustawić że tylko może korzystać z tego ktoś z flagą ADMIN_IMMUNITY?
A co do logów nic specjalnego nie pokazuje mi tylko tyle co błąd z połączeniem z bazą ale to robiłem wcześniej
Cvary csstats_rank i csstats_maxsize już są w amxx.cfg, ale ich domyślna konfiguracja jest zupełnie inna. Jeśli chodzi o komendy do resetowania, wymagana jest flaga ADMIN_ADMIN, czyli "y".
tylko żaden z adminów nie ma takiej flagi
a csstats_rank mam ustawione na 0
No po powiem szczerze, że chyba jedynym rozsądnym wytłumaczeniem byłoby to, że ktoś wyczyścił ci bazę danych.
wyłączyłem cod_reset_data, cod_reset_stats_data, cod_reset_all_data i zobaczymy co będzie dalej
@TheDoctor0 takie pytanie mam do cb o chodzi z tym że używałem na serwerze każdego pluginu na hasło na nick zapisują sie dane lecz po zmianie mapy trzeba od nowa robić oczywiście wyłączyłem odczytywanie cod_account itp i no nic nie działa :D a chciałbym żeby jednak ci gracze konto mieli jednakże przy wpisaniu dopiero /konto by mogli sobie zalozyc i wpisywac jak juz założą i żeby dane się zapisywało i żeby były odczytywane czy istnieje sposób jakiś żeby to zrobić właśnie z cod_account ale nie chce by wymuszało tą rejestracje przy wejściu na serwer tylko by można było sobie kiedy sie chce to zrobić pod komendą /konto przypomne że usunąłem !cod_check_account(id) ze silnika oraz cod_clans itp wywaliłem !cod_check_account(id) ponieważ irytowało mnie że i tak trzeba posiadać konto żeby z tego korzystać gdy ustawiłem cod_accounts_enabled "0" to wiadomo nie działało bo szukałem innego rozwiązania właśnie z tym /konto by nie wymuszało zaraz po wejściu na serwer i zadziałać tutaj tylko i wyłączonie komendą masz pomysł jak to ogarnąć?
Właściwie po to jest opcja "Gość" - chcesz grać bez konta, nie ma problemu, ale mimo wszystko jego założenie jest zalecane. Jeśli chcesz, aby konta były bardziej opcjonalne pozamieniaj w kodzie
playerData[id][STATUS] < LOGGED
na
playerData[id][STATUS] == NOT_LOGGED
Sprawi to, że tylko gracze, którzy posiadają już zarejestrowane konto będą musieli się logować.
@TheDoctor0 a co z tym wymaganiem jeśli chodzi o używanie chociażby menu klas zostawić tak jak jest tak? bez !cod_check_account(id)
bo to usunąłem mianowicie w tych linijkach
if (!is_user_connected(id) || !cod_check_account(id)) return PLUGIN_HANDLED;
plus usunąłem z cod.inc native cod_check_account(id);
i jak to będzie wyglądało jeśli zmienie playerData[id][STATUS] == NOT_LOGGED
będzie to wyglądało tak że dopóki nie zdecyduje i nie wpisze /konto to nie będzie tego wymuszać tak? tylko działanie będzie jak wymieniłem wyżej?
Jeśli usuniesz odwołania do natywu _cod_checkaccount, to całość właściwie nie ma sensu. Ktoś mógłby wbić sobie pod danym nickiem i robić co mu się żywnie podoba (zalogowany czy nie), np. przelać koledze cały honor, rozwiązać klan itd. Także tutaj radzę wrócić do stanu początkowego.
Tak, ta modyfikacja warunków sprawi, że dla graczy nic nie będzie wymuszane do momentu, aż nie założą sobie własnoręcznie konta w menu /konto.
Dzięki to przywróce do stanu początkowego
@TheDoctor0 Raczej jak przywróce to nie będzie ingerowało w baze że cofnie lvl itp? raczej tak nie powinno być
W żadnym wypadku. To nie są zmiany, które w jakikolwiek sposób dotykają bazy i zawartej w niej danych.
@TheDoctor0 nadal wymusza zalozenie hasla jak sie wejdzie na serwer
playerData[id][STATUS] < LOGGED
przy ctrl + f to jak wpisuje to wyszukuje mi jeszcze we funkcjach niektórych to i wtedy zmienić to na
playerData[id][STATUS] == NOT_LOGGED
?
Tak, musisz zamienić wszędzie.
Możesz sobie także dodatkowo zmienić:
if (!get_user_team(id) && playerData[id][STATUS] == LOGGED) {
na:
if (!get_user_team(id) && (playerData[id][STATUS] == LOGGED || playerData[id][STATUS] == NOT_REGISTERED)) {
Wtedy menu systemu nie rejestracji nie pokaże się w przypadku, gdy dane będą dość długo ładowane i od razu przejdzie do wyboru drużyny.
@TheDoctor0 Zaraz zobacze jak będzie śmigać
działa tylko że jak się zarejestrujemy to przechodzi do wybierania teamu gdzie to wyłączyć?
Dokładnie tam, gdzie można by się tego spodziewać, czyli w funkcji _register_confirmationhandle. Są to oczywiście linijki:
client_cmd(id, "chooseteam");
engclient_cmd(id, "chooseteam");
oki to zakomentuje je pytanie teraz takie chce dodac eliminator rozrzutu do klasy i użyłem tego
cod_get_user_recoil_eliminator(id, ALL, CLASS);
i nie działa
No i nie ma prawa działa - get pobiera, set ustawia.
Powinieneś użyć cod_set_user_recoil_eliminator(id, true, CLASS)
.
@TheDoctor0 i teraz śmiga
@TheDoctor0 jak zablokować na klasie używanie danych perków albo perku? żeby poprostu nie działały na niej? albo nwm ignorowały ten perk że nie dostają
Forward cod_check_item. Możesz sobie zajrzeć do itemu Cień, gdzie jest zaprezentowana blokada dla klasy Komandos.
chodzi tylko o tą funkcje? public cod_item_check(id) { new className[MAX_NAME];
cod_get_user_class_name(id, className, charsmax(className));
if (contain(className, "Komandos") != -1) {
return COD_STOP;
}
return COD_CONTINUE;
}
Tak, dokładnie o nią chodzi. W skrócie sprawdzane jest tutaj czy nazwa aktualnej klasy gracza zawiera słowo "Komandos". Jeśli tak, to zwracane jest COD_STOP, co blokuje dostęp do tego itemu.
@TheDoctor0 A jakby wyglądał kod jeśli chcialbym dać klasie model postaci oraz model broni?
Jeśli chodzi o model broni, możesz przeanalizować kod pluginu skinów. Zmiana modelu postaci nie jest w żaden sposób wspierana - możesz ewentualnie wykorzystać plugin [CS] Player Models API, z którego korzystają chociażby JailBreak mody.
A jakbym skorzystał z generatora klas na amxx i kod z właśnie tych modeli umieścił w swojej klasie?
co do vipa chciałem ostatnio dodać skoki oraz przywitanie dla niego i pottem wgl nie działał a jakbym dodał właśnie do public cod_class_changed(id, class)
i public cod_spawned(id, respawn)
ten kod?
cod_set_user_multijumps(id, 2, ALL)
coś takiego?
@TheDoctor0 + jedna rzecz tez
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR);
cod_register_item(NAME, DESCRIPTION);
}
public cod_item_check(id) { new className[MAX_NAME];
cod_get_user_class_name(id, className, charsmax(className));
if (contain(className, "Klasa") != -1) {
return COD_STOP;
}
return COD_CONTINUE;
}
public cod_item_enabled(id, value) { cod_give_weapon(id, CSW_P90);
cod_set_user_unlimited_ammo(id, true, ITEM, 1<<CSW_P90);
cod_set_user_recoil_eliminator(id, true, ITEM, 1<<CSW_P90);
}
public cod_item_disabled(id) cod_take_weapon(id, CSW_P90);
nie odczytuje wgl tej blokady na klase
@masterofencode,
if (contain(className, "Klasa") != -1) { return COD_STOP; }
Masz klasę o nazwie Klasa? Tutaj trzeba podać faktyczną nazwę klasy (lub jej fragment), dla której chcesz zablokować ten item.
Co do podwójnego skoku dla VIPa:
cod_set_user_multijumps(id, 2, ALL)
To w żadnym wypadku nie zadziała, bo ALL zgodnie z dokumentacją nie może być tutaj wykorzystywanym argumentem. W tym konkretnym wypadku polecałbym raczej użycie:
cod_add_user_multijumps(id, 2, ADDITIONAL);
Możesz do dopisać np. w cod_flags_changed po sprawdzeniu flagi VIPa, a w remove_vip dorzucić:
cod_add_user_multijumps(id, -2, ADDITIONAL);
Oki jeśli nazwe klasa użyłem tak dal przykładu
I wlaśnie gdy podaje nazwe klasy dla perku i tak przez tą klase jest używane
Dajesz sobie ten przedmiot z poziomu menu admina?
Tam restrykcje są pomijane, linia 256:
cod_set_user_item(selectedPlayer[id], selected, RANDOM, true);
Zgodnie z dokumentacją odpowiada za to czwary parametr.
Nie ogólnie jak ludzie sobie dropią to zawużyłem ale również z poziomu admina też jak daje
Wklej na https://gist.github.com/ kod pluginu klasy + kod przedmiotu i podaj tutaj linki. Jak będę miał wieczorem czas, to sprawdzę na serwerze testowym, czy jestem w stanie zreplikować problem.
Nie jestem w stanie zreplikować problemu na serwerze testowym, przedmiot jest blokowany prawidłowo. Klasa i item skopiowane 1:1, skompilowane i przetestowane na wersji 1.5.0.
@TheDoctor0 gdzie ustawia się limit statystyk? jeśli chodzi o umiejętności do klas
cod_mod.sma linia 1263:
new statsLimit = cvarPointsLimitEnabled ? (cvarLevelLimit * cvarPointsPerLevel / 5) : 0;
A zatem limit po maksymalny level dzielony przez 5. Można go też wyłączyć przestawiając cvar cod_points_limit na 0.
@TheDoctor0 i jak wyłacze limit to jak to wtedy będzie wyglądac?
W jedną statystykę będzie można władować ile punktów się chce - czego specjalnie nie polecam, bo ich balans zasadniczo opiera się na limicie.
Z poprzednim codem było o tyle proste że już z miejsca wiedziało się jak pisać i jak robić klasy czy też perki Otóż mam problem i generalnie nie odnajduje się w tym obecnie :D
I teraz tak jak zrobić by działało tak aby widziało nie widzialnych