←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Zombie Plague 5.0
Po wyjściu nemka nie tworzy kolejnego

  • +
  • -
Sniper Elite - zdjęcie Sniper Elite 04.03.2014

Witam. Mam problem. Otóż w ZP 5.0 po wyjściu z serwera nemka/surva nie robi kolejnego tylko odpowiednio zamienia wybranego gracza w /zombie/czlowieka. Przejrzalem kilka plikow w których myślałem że będzie ten wpis i naprawić to ale nie udało mi się. Czy ktoś może sam to naprawiał lub pomoże mi to znaleźć?

Odpowiedz

  • +
  • -
Sniper Elite - zdjęcie Sniper Elite 04.03.2014

Ok, znalazłem te funkcje, ale nie wiem jak ją naprawić:

// Client Disconnecting (prevent Game Commencing bug after last player on a team leaves)
public client_disconnect(leaving_player)
{
    // Remove respawn task on disconnect
    remove_task(leaving_player+TASK_RESPAWN)
    
    // Player was not alive
    if (!is_user_alive(leaving_player))
        return;
    
    // Last player, dont bother
    if (GetAliveCount() == 1)
        return;
    
    new id
    
    // Prevent empty teams when no game mode is in progress
    if (!g_GameModeStarted)
    {
        // Last Terrorist
        if ((cs_get_user_team(leaving_player) == CS_TEAM_T) && (GetAliveTCount() == 1))
        {
            // Find replacement and move him to T team
            while ((id = GetRandomAlive(random_num(1, GetAliveCount()))) == leaving_player ) { /* keep looping */ }
            cs_set_player_team(id, CS_TEAM_T)
        }
        // Last CT
        else if ((cs_get_user_team(leaving_player) == CS_TEAM_CT) && (GetAliveCTCount() == 1))
        {
            // Find replacement and move him to CT team
            while ((id = GetRandomAlive(random_num(1, GetAliveCount()))) == leaving_player ) { /* keep looping */ }
            cs_set_player_team(id, CS_TEAM_CT)
        }
    }
    // Prevent no zombies/humans after game mode started
    else
    {
        client_print(id,print_chat,"1");
        // Last Zombie
        if (zp_core_is_zombie(leaving_player) && zp_core_get_zombie_count() == 1)
        {
            // Only one CT left, don't leave an empty CT team
            if (zp_core_get_human_count() == 1 && GetCTCount() == 1)
                return;
            client_print(id,print_chat,"2");
            // Find replacement
            while ((id = GetRandomAlive(random_num(1, GetAliveCount()))) == leaving_player ) { /* keep looping */ }
            
            new name[32]
            get_user_name(id, name, charsmax(name))
            zp_colored_print(0, "%L", LANG_PLAYER, "LAST_ZOMBIE_LEFT", name)
            
            if (LibraryExists(LIBRARY_NEMESIS, LibType_Library) && zp_class_nemesis_get(leaving_player))
            {
                zp_class_nemesis_set(id)
                client_print(id,print_chat,"3");
                if (get_pcvar_num(cvar_keep_hp_on_disconnect))
                    set_user_health(id, get_user_health(leaving_player))
            }
            else{
                zp_core_infect(id, id)
                client_print(id,print_chat,"4");
            }
        }
        // Last Human
        else if (!zp_core_is_zombie(leaving_player) && zp_core_get_human_count() == 1)
        {
            // Only one T left, don't leave an empty T team
            if (zp_core_get_zombie_count() == 1 && GetTCount() == 1)
                return;
            
            // Find replacement
            while ((id = GetRandomAlive(random_num(1, GetAliveCount()))) == leaving_player ) { /* keep looping */ }
            
            new name[32]
            get_user_name(id, name, charsmax(name))
            zp_colored_print(0, "%L", LANG_PLAYER, "LAST_HUMAN_LEFT", name)
            
            if (LibraryExists(LIBRARY_SURVIVOR, LibType_Library) && zp_class_survivor_get(leaving_player))
            {
                zp_class_survivor_set(id)
                
                if (get_pcvar_num(cvar_keep_hp_on_disconnect))
                    set_user_health(id, get_user_health(leaving_player))
            }
            else
                zp_core_cure(id, id)
        }
    }
}

A dokładnie tworzenie drugiego nemezisa:

            if (LibraryExists(LIBRARY_NEMESIS, LibType_Library) && zp_class_nemesis_get(leaving_player))
            {
                zp_class_nemesis_set(id)
                client_print(id,print_chat,"3");
                if (get_pcvar_num(cvar_keep_hp_on_disconnect))
                    set_user_health(id, get_user_health(leaving_player))
            }

Tylko że warunek ten się nie odpala, jakby źle pobierało id gracza który wyszedł (to pierwsze wyrzuciłem dla pewności :) ). Próbowałem też wywołać inaczej te funkcje, ale nic z tego i skończyły mi się pomysły. Wie ktoś o co może chodzić?

Odpowiedz

  • +
  • -
Tarasek - zdjęcie Tarasek 05.03.2014

zombiplauge.cfg i znajdź i ustaw

// Gameplay Fixes

// --------------

 

zp_remove_doors 0 // Remove doors from maps [0-none // 1-rotating only // 2-all doors]

zp_block_pushables 1 // Block +use on pushables to prevent the speed bug

zp_block_suicide 1 // Prevent players from killing themselves

zp_worldspawn_kill_respawn 1 // Respawn players after a worldspawn kill

zp_disable_minmodels 1 // Disable cl_minmodels setting on clients after joining

zp_keep_hp_on_disconnect 1 // When nemesis/survivor leaves, player chosen to take his place will have same HP

Odpowiedz

  • +
  • -
Sniper Elite - zdjęcie Sniper Elite 06.03.2014

zp_remove_doors mam wartość 1, ale to chyba odpowiada za coś innego.

Poza tym wszystko tak samo. Chyba zp 5.0 trochę zbugowany jest.

Odpowiedz

  • +
  • -
Sniper Elite - zdjęcie Sniper Elite 08.03.2014

Zrobiłem. Chodziło o to że natyw zwracał wartość -1 gdy gracz był niepołączony. Trzeba usunąć ten warunek z natywu zp_class_zombie_get w pluginie zp_class_nemesis (nie wiem czemu ten sposób nie działą na surva, ale głównie chodziło mi o nemka :P )

 

//Można zamknąć


Użytkownik Sniper Elite edytował ten post 08.03.2014 00:23
Odpowiedz