Closed Pi0tRuS closed 5 years ago
Flaga admina jest w pluginie statystyk ustawiana tylko raz, w _clientauthorized, co zakładam, że może być niewystarczające na serwerach np. korzystających z ładowania adminów z bazy AmxBans. Przemyślę, czy dodać wychwytywanie multi-forwardu _amxbans_sqlinitialized wysyłanego przez AmxBans po załadowaniu/przeładowaniu adminów, czy po prostu dodam każdorazowe sprawdzanie posiadania odpowiedniej flagi.
Masz na myśli już istniejące Top 15 poziomów zaimplementowane w silniku? Komendy:
new const commandTop[][] = { "top", "say /toplvl", "say_team /toplvl", "say /toplevel", "say_team /toplevel", "say /toppoziom", "say_team /toppoziom", "say /ltop15", "say_team /ltop15", "say /ptop15", "say_team /ptop15" };
PS. Propozycje prosiłbym zgłaszać jako osobne Issue, bo łatwiej jest mi wtedy nimi zarządzać, przypisywać do projektów i oznaczać ich statusy.
Mam amxbansa, ale adminów czyta z users.ini nie z amxbansa
Nie będe tworzył nowego issues, jednak zauważyłem, że przed końcem czasu mapy, plugin nie daje medali oraz expa za najlepsze statystyki na mapie.
Silnik korzysta z eventu SVC_INTERMISSION (message_intermission) do wychwycenia końca mapy. Nie jest on wywoływany przy zmianie mapy korzystając z komend amx_map lub changelevel, więc jeśli korzystasz z manadżera map, który do zmiany mapy wykorzystuje komendę changelevel (a robi to praktycznie każdy), upewnij się, że wywołuje on przed tym event SVC_INTERMISSION.
Korzystam z najnowszego Galileo Skrawek kodu:
stock show_intermission( Float:mp_chattime ) { LOG( 128, "I AM ENTERING ON show_intermission(1) mp_chattime: %f", mp_chattime ) new endGameType = get_pcvar_num( cvar_isEndMapCountdown );
if( endGameType )
{
set_task( mp_chattime - 0.5, "intermission_hold", TASKID_INTERMISSION_HOLD );
intermission_effects( endGameType, mp_chattime );
}
else
{
LOG( 4, " ( show_intermission ) Do nothing, just change the map." )
intermission_hold();
}
}
public intermission_hold() { LOG( 128, "I AM ENTERING ON intermission_hold(0)" )
message_begin( MSG_ALL, SVC_INTERMISSION );
message_end();
}
stock intermission_effects( endGameType, Float:mp_chattime ) { LOG( 128, "I AM ENTERING ON intermission_effects(1) endGameType: %d", endGameType )
if( endGameType & IS_MAP_MAPCHANGE_FREEZE_PLAYERS )
{
g_original_sv_maxspeed = get_pcvar_float( cvar_sv_maxspeed );
tryToSetGameModCvarFloat( cvar_sv_maxspeed, 0.0 );
LOG( 2, "( intermission_effects ) IS CHANGING THE CVAR 'sv_maxspeed' to '%f'.", get_pcvar_float( cvar_sv_maxspeed ) )
}
if( cvar_mp_friendlyfire
&& endGameType & IS_MAP_MAPCHANGE_FRIENDLY_FIRE )
{
if( ( g_isToRestoreFriendlyFire = get_pcvar_num( cvar_mp_friendlyfire ) == 0 ) )
{
tryToSetGameModCvarNum( cvar_mp_friendlyfire, 1 );
}
LOG( 2, "( intermission_effects ) IS CHANGING THE CVAR 'mp_friendlyfire' to '%d'.", get_pcvar_num( cvar_mp_friendlyfire ) )
}
if( endGameType & ( IS_MAP_MAPCHANGE_DROP_WEAPONS | IS_MAP_MAPCHANGE_BUY_GRENADES ) )
{
new player_id;
new playersCount;
new players[32];
get_players( players, playersCount, "ah" );
for( --playersCount; playersCount > -1; playersCount-- )
{
player_id = players[ playersCount ];
if( endGameType & IS_MAP_MAPCHANGE_DROP_WEAPONS )
{
strip_user_weapons( player_id );
give_item( player_id, "weapon_knife" );
}
if( endGameType & IS_MAP_MAPCHANGE_BUY_GRENADES )
{
give_item( player_id, "weapon_smokegrenade" );
give_item( player_id, "weapon_flashbang" );
give_item( player_id, "weapon_hegrenade" );
}
}
}
client_cmd( 0, "+showscores" );
// Check also if there is not enough time to play it
if( !( get_pcvar_num( cvar_soundsMute ) & SOUND_MAPCHANGE )
&& mp_chattime > 3.0 )
{
client_cmd( 0, "speak ^"loading environment on to your computer^"" );
}
}
https://forums.alliedmods.net/showthread.php?t=159640:
Messages sent with message_begin() cannot be hooked. The message has to be sent with emessage_begin() (and appropriate e*() functions instead of the normal ones) to be hooked.
Zamień
message_begin( MSG_ALL, SVC_INTERMISSION );
message_end();
na:
emessage_begin(MSG_ALL, SVC_INTERMISSION);
emessage_end();
i powinno działać bez problemu.
Nie skompiluje się plugin nie wiem dlaczego
Jeśli nie chce się skompilować, to chyba rzuca jakimś błędem, czyż nie?
Skompilowałem go u siebie lokalnie bez żadnego problemu: Download.
Działa, dostaje medale oraz expa, jednak mapa za szybko się zmienia i chciałbym żeby wydłuzyć czas zmiany mapy. A co do błędu gdy dodałem to to w kompilatorze mam błąd "Invalid function or declaration" w pierwszej linijce kodu galileo. I gdy chcę zmienić mp_chattime z 3 na 6 to nie skompiluje pluginu
To już nie dotyczy bezpośrednio samego mod'a, więc z tym problemem załóż temat na amxx.pl.
Wykonałem poprawkę pluginu jednak dalej nie ma nic w motd. W bazie danych widzę, że przypisało mi admina na numer "8"
Zgaduję, że wgrałeś wersję statystyk z tego merge'a, w którym fix jako tako się pojawił, ale przypisywał polu admin wartość flagi, a nie status jej posiadania (0 lub 1) i zostało to poprawione w nieco późniejszym commitcie. Pobierz sobie release 1.2.0, jeśli chcesz skompiluj lokalnie plugin statystyk i gwarantuję, że będzie działać jak trzeba.
Tylko, że korzystam z wersji moda 1.0 i chce przy niej zostać bo 1,1 wywalało dużo błędów, a do wersji 1.2 musiałbym wgrywać wszystko od nowa. w wersji 1.2 widzę że dodałeś REVENGE, czy mógłbyś to zrobić bez tego dodatku ?
Możesz bez obaw wgrać plugin statystyk z wersji 1.2.0, bo poza fixami i dodaniem opcji zemsty nic w nim się dodatkowo nie zmieniło. Samą zemstę można wyłączyć cvarem cod_revenge_enabled "0".
Displaying debug trace (plugin "cod_mod.amxx", version "1.0.0") L 02/03/2019 - 12:49:39: [AMXX] Run time error 10: native error (native "cod_get_user_time_text") L 02/03/2019 - 12:49:39: [AMXX] [0] cod_mod.sma::show_info (line 2541)
[AMXX] Run time error 10 (plugin "cod_honor.amxx") (native "cod_get_user_class") - debug not enabled! L 02/03/2019 - 12:50:04: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).
Pełny debug trace powinien zawierać co najmniej 4 linijki, wrzuciłeś 3. Widzę, że silnik wyrzuca błąd użycia natywu cod_get_user_time_text, który nadal jest w pluginie statystyk i nie był w żaden sposób modyfikowany. No a to z kolei powoduję lawinę błędów z reszty pluginów, które nie mogą użyć natywów z silnika.
Niestety statystyki z wersji 1.2 wywołują masę błędów. Może mógłbyś edytować moją wersję która nie powoduje błędów i naprawić Ją żeby pokazywała czas adminów. Załączam SMA https://www57.zippyshare.com/v/DmyfvhPc/file.html
Logi AMXX'a w większości przypadków bardzo dokładnie wskazują przyczynę problemu, wystarczy je przeanalizować. Wgrałem na serwer testowy wersję 1.0 i wrzuciłem plugin statystyk z 1.2, od razu w konsoli ukazał mi się błąd:
[AMXX] Plugin "cod_stats.amxx" failed to load: Plugin uses an unknown function (name "cod_log_error") - check your modules.ini.
Wystarczy więc sprawdzić, gdzie w statystykach użyty jest ten natyw i zastąpić go chociażby używając funkcji log_to_file, która była wykorzystywana wcześniej.
Kolejne wersje są wypuszczane w jakimś celu, jednym z nich są poprawki właśnie, a od wersji 1.0 do 1.2 była ich masa. Stąd też ja rekomenduję zrobienie aktualizacji - która swoją drogą nie powinna zająć więcej niż 15min, bo wystarczy wgrać wszystko, wyczyścić całą bazę lub usunąć tylko tabele klanów (wymagane) i przywrócić zmiany w zrobione konfiguracji. Jeśli chcesz zostać przy starszej wersji, poprawki musisz wprowadzać na własną rękę.
Możesz mi powiedzieć jakiej wersji rehlds i amxx używałeś do wersji 1.2?. W moim przypadku było tak, że gdy miałem wersję 1.1 to miałem co chwilę segmention fault bez powodu a na wersji 1.0 wszystko jest stabilne.
ReHLDS version: 3.4.0.668-dev
Build date: 09:47:42 Sep 29 2018 (1631)
Build from: https://github.com/dreamstalker/rehlds/commit/89be216
AMX Mod X 1.9.0.5235 (http://www.amxmodx.org)
Built from: https://github.com/alliedmodders/amxmodx/commit/6c53524
Jeśli miałem problemy z crashami typu Segmentation fault, wystarczyło wyłączać partiami pluginy i sprawdzać kiedy crashe ustaną, aż do momentu ustalenia, który plugin w twoim wypadku je powodował - a potem zgłosić problem do mnie.
Znalazłem kolejny błąd
Nie zlicza czasu spędzonego przez admina. W ogóle nie przypisuje flagi adminowi na "1" w bazie danych i motd top15 czasu adminów jest pusty.
Oraz napiszę tutaj propozycję, żeby dodać top15 lvl'a. Mniej więcej żeby motd wyglądał następująco
Nick Klasa Poziom Honor Klan