Помогите разобрать ошибки в плагинах

Тема в разделе "Программирование / Скриптинг", создана пользователем Серый™, 2 сен 2013.

  1. Серый™

    Серый™ CS:S Server

    Сообщения:
    2.570
    Симпатии:
    1.153
    В килбонусе есть ошибка
    Не знаю почему индекс выходит за границы массива.

    Можете посмотреть офлайн бан на ошибки.

    Правильно написана функция поменять местами команды?

    PHP:
    public Handle_ModeTeam(Handle:topmenuTopMenuAction:actionTopMenuObject:object_idparamString:buffer[], maxlength)
    {
        if (
    action == TopMenuAction_DisplayOption)
        {
            
    Format(buffermaxlength"%t""changed the team");
        }
        else if(
    action == TopMenuAction_SelectOption)
        {
            
    SelectionMenu(param);
        }
    }

    SelectionMenu(client
    {
        for(new 
    1<= GetMaxClients(); i++)
        {
            if(
    IsClientInGame(i) && (GetClientTeam(i) == TEAM_2 || GetClientTeam(i) == TEAM_1))
            {
                
    PerformSwitch_d(i);
            }
        }
        
        
    ShowActivity(client"%t""changed the team places");
        
    LogAction(client, -1"\"%L\" changed the team places"clientclient);
    }
    void:PerformSwitch_d(clientbool:toSpec false)
    {
        new 
    cTeam GetClientTeam(client),
        
    toTeam = (toSpec TEAM_SPEC TEAM_1 TEAM_2 cTeam);
        
        if (
    cstrikeExtAvail && !toSpec)
        {
            
    CreateTimer(0.1Timer_TeamSwitch2client);
            
    CS_SwitchTeam(clienttoTeam);
            
            if (
    cTeam == TEAM_2)
            {
                
    SetEntityModel(client"models/player/t_leet.mdl");
            }
            else
            {
                
    SetEntityModel(client"models/player/ct_sas.mdl");
            }
            
            if (
    GetPlayerWeaponSlot(clientCS_SLOT_C4) != -1)
            {
                new 
    ent;
                if ((
    ent GetPlayerWeaponSlot(clientCS_SLOT_C4)) != -1)
                
    SDKHooks_DropWeapon(clientent);
            }
        }
        
        else
        {
            
    ForcePlayerSuicide(client);
            
    ChangeClientTeam(clienttoTeam);
        }
    }

    public 
    Action:Timer_TeamSwitch2(Handle:timerany:client)
    {
        if (
    IsClientInGame(client))
            
    CS_RespawnPlayer(client);
        return 
    Plugin_Stop;
    }
     

    Вложения:

  2. Reiko1231

    Reiko1231 AlexTheRegent

    Сообщения:
    238
    Симпатии:
    569
    GetMaxClients() не используй, вместо этого есть переменная MaxClients, и она всегда равна результату этой функции... Её было решено ввести, потому что часто используется, и быстрее сделать это на уровне сурсмода, чем вызывать функцию.
     
    Серый™ нравится это.
  3. Серый™

    Серый™ CS:S Server

    Сообщения:
    2.570
    Симпатии:
    1.153
    Reiko1231, а что скажешь про другое?
     
  4. Reiko1231

    Reiko1231 AlexTheRegent

    Сообщения:
    238
    Симпатии:
    569
    Серый™, вчера уже отключался, не было сил читать исходник. Вообщем предполагаю, что ошибка в объявлении new g_list[65][3][2]; Дело в том, что 65 - это MAXPLAYERS, которая не включает в себя World Entity (сущность мира). Поэтому рекомендуется объявлять как (MAXPLAYERS+1), т.е. надо объявить как new g_list[MAXPLAYERS+1][3][2]; или new g_list[66][3][2]; (но первый вариант лучше).
    Подробнее можно почитать обсуждение тут: http://forums.alliedmods.net/showthread.php?t=190082.
    Если это не исправит ошибку (изменение с 65 на 66), то отпишись.
     
    Серый™ нравится это.
  5. Серый™

    Серый™ CS:S Server

    Сообщения:
    2.570
    Симпатии:
    1.153
    Reiko1231, я это проверить не могу, так как не держу сервер с таким количеством, скажу тем кто использует его, чтоб проверили.
    Посмотришь офлайн бан?
     
  6. Reiko1231

    Reiko1231 AlexTheRegent

    Сообщения:
    238
    Симпатии:
    569
    А что с ним не так?

    [​IMG]
     
  7. Серый™

    Серый™ CS:S Server

    Сообщения:
    2.570
    Симпатии:
    1.153
    Reiko1231, Всё остальное получилось, осталось чтоб и писалась причина бана, ниже прикрепляю новый исходник.
    Всё получилось, сделал всё что нужно, спасибо Reiko1231, за помощь.
     

    Вложения:

    • offlineban.sp
      Размер файла:
      15,1 КБ
      Просмотров:
      1
    Последнее редактирование: 3 сен 2013