TheDoctor0 / CoDMod

Call of Duty Mod for Counter-Strike 1.6 (AMXX 1.8.3 / 1.9 / 1.10).
http://codmod.5v.pl/
MIT License
11 stars 4 forks source link

Status admina w statystykach #11

Closed Pi0tRuS closed 5 years ago

Pi0tRuS commented 5 years ago

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

TheDoctor0 commented 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.

Pi0tRuS commented 5 years ago

Mam amxbansa, ale adminów czyta z users.ini nie z amxbansa

Pi0tRuS commented 5 years ago

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.

TheDoctor0 commented 5 years ago

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.

Pi0tRuS commented 5 years ago

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^"" );
}

}

TheDoctor0 commented 5 years ago

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.

Pi0tRuS commented 5 years ago

Nie skompiluje się plugin nie wiem dlaczego

TheDoctor0 commented 5 years ago

Jeśli nie chce się skompilować, to chyba rzuca jakimś błędem, czyż nie?

Skompilowałem go u siebie lokalnie bez żadnego problemu: Download.

Pi0tRuS commented 5 years ago

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

TheDoctor0 commented 5 years ago

To już nie dotyczy bezpośrednio samego mod'a, więc z tym problemem załóż temat na amxx.pl.

Pi0tRuS commented 5 years ago

Wykonałem poprawkę pluginu jednak dalej nie ma nic w motd. W bazie danych widzę, że przypisało mi admina na numer "8"

TheDoctor0 commented 5 years ago

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.

Pi0tRuS commented 5 years ago

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 ?

TheDoctor0 commented 5 years ago

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".

Pi0tRuS commented 5 years ago

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)

Pi0tRuS commented 5 years ago

[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).

TheDoctor0 commented 5 years ago

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.

Pi0tRuS commented 5 years ago

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

TheDoctor0 commented 5 years ago

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ę.

Pi0tRuS commented 5 years ago

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.

TheDoctor0 commented 5 years ago
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.