Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 2 из 2 ПерваяПервая 1 2
Показано с 11 по 20 из 20
  1. #11
    Аватар для seriu
    Пользователь

    Статус
    Оффлайн
    Регистрация
    29.11.2013
    Сообщений
    69
    Репутация:
    6 ±
    PHP код:
    "SELECT `nickname`,`p_leader`,`online_status` FROM `"TABLE_ACC"` WHERE `p_leader` in (6,7)" 
    В адресуемом "pulic xxxx" будут только с 6,7 или то что укажете в запросе:
    Пример
    PHP код:
    in (6,7,8,10,200,555,5555
    Последний раз редактировалось seriu; 09.02.2019 в 00:41.

  2. Пользователь сказал cпасибо:
    Сергей (09.02.2019)
  3. #12
    Аватар для m1n1vv
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±
    Цитата Сообщение от Сергей Посмотреть сообщение
    Снова не до поняли, вот в моём примере я сделал вот как:
    Ищу лидеров фракций.
    Далее отсеиваю игроков, у которых ячейка p_leader равна 0
    Далее, если нашло лидера Фракции 6 - Я получаю его имя, ровно так-же и с 7 фракцией.
    НО, если игроков с такой лидеркой не нашло, я присваиваю переменной "Нет"
    А тогда зачем проверка, находится игрок на сервере или нет?
    Взяв твой код. Откуда online_pl берет ид игрока для GetPlayerName?

  4. Пользователь сказал cпасибо:
    Сергей (09.02.2019)
  5. #13
    Аватар для Сергей
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Сообщений
    161
    Репутация:
    3 ±
    При авторизации, регистрации записывается ид игрока туда

  6. #14
    Аватар для m1n1vv
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±
    Цитата Сообщение от Сергей Посмотреть сообщение
    При авторизации, регистрации записывается ид игрока туда
    Как оно записывается в переменную, если она не глобальная? Тогда может лучше так?

    PHP код:
    mysql_function_query(MysqlConnect"SELECT `p_leader`,`online_status`,`nickname` FROM `"TABLE_ACC"`"true"OnCheckLEADCallBack","i"playerid); 

    forward OnCheckLEADCallBack(playerid); 
    public 
    OnCheckLEADCallBack(playerid

  7. Пользователь сказал cпасибо:
    Сергей (09.02.2019)
  8. #15
    Аватар для Сергей
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Сообщений
    161
    Репутация:
    3 ±
    Цитата Сообщение от m1n1vv Посмотреть сообщение
    Как оно записывается в переменную, если она не глобальная? Тогда может лучше так?

    PHP код:
    mysql_function_query(MysqlConnect"SELECT `p_leader`,`online_status`,`nickname` FROM `"TABLE_ACC"`"true"OnCheckLEADCallBack","i"playerid); 

    forward OnCheckLEADCallBack(playerid); 
    public 
    OnCheckLEADCallBack(playerid
    Так оно так-бы и было))

    Так а что делать с этим то?

    Ищу лидеров фракций.
    Далее отсеиваю игроков, у которых ячейка p_leader равна 0
    Далее, если нашло лидера Фракции 6 - Я получаю его имя, ровно так-же и с 7 фракцией.
    НО, если игроков с такой лидеркой не нашло, я присваиваю переменной "Нет"

  9. #16
    Аватар для Сергей
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Сообщений
    161
    Репутация:
    3 ±
    Вот, что снова, так сказать получилось по моей задумке:

    PHP код:
    forward OnCheckLEADCallBack(); 
    public 
    OnCheckLEADCallBack() 

        new 
            
    rows,
            
    fields,
            
    pl_leader,
            
    name[MAX_PLAYER_NAME+1],names[MAX_PLAYER_NAME+1];

        
    cache_get_data(rowsfieldsMysqlConnect); 

        if(
    rows == 0) return 1
        
        new 
    count[2];
        
        for(new 
    0rowsi++) 
        { 
            
    pl_leader cache_get_field_content_int(i"p_leader"MysqlConnect); 
            if(
    pl_leader == 6)
            {
                if(
    count[0] == 0)
                {
                    
    cache_get_field_content(i"nickname"nameMysqlConnectMAX_PLAYER_NAME);
                    
    count[0] ++;
                }
            }
            if(
    pl_leader == 7)
            {
                if(
    count[1] == 0)
                {
                    
    cache_get_field_content(i"nickname"namesMysqlConnectMAX_PLAYER_NAME);
                    
    count[1]++;
                }
            }
        }
        if(
    count[0] == 0strmid(name"Нет"0strlen("Нет"), 4);
        if(
    count[1] == 0strmid(names"Нет"0strlen("Нет"), 4);
        
    printf("На выходе получаем: Фракция 1: %s | Фракция 2: %s",name,names);
        return 
    1

    На выходе имеем:

    PHP код:
    На выходе получаемФракция 1Нет Фракция 2Test_Account 
    Или же при отсутствия игроков с данными лидерками:
    PHP код:
    На выходе получаемФракция 1Нет Фракция 2Нет 
    Вот и я хотел добиться такого-же эффекта, только с меньшими затратами, вот прямо чую, что можно сделать в 50 раз лучше, но, не пойму как...

    А получение онлайн статуса теперь в принципе не нужно. Так-как изменил задумку данной фичи)
    Последний раз редактировалось Сергей; 09.02.2019 в 03:43.

  10. #17
    Аватар для UnO
    Пользователь

    Статус
    Оффлайн
    Регистрация
    20.01.2018
    Сообщений
    52
    Репутация:
    7 ±
    Тебе двое людей выше уже сказали, что выборку лучше делать на стороне субд, чем циклом вручную.

    PHP код:
    mysql_function_query(MysqlConnect, !"SELECT `nickname`,`p_leader` FROM `"TABLE_ACC"` WHERE `p_leader` in (6,7)"
        
    true, !"OnCheckLEADCallBack"""); 

    forward OnCheckLEADCallBack(); 
    public 
    OnCheckLEADCallBack() 

        new 
    rows,
            
    fields,
            
    name1[MAX_PLAYER_NAME+1] = "Нет",
            
    name2[MAX_PLAYER_NAME+1] = "Нет";

        
    cache_get_data(rowsfieldsMysqlConnect); 

        if(
    rows == 0) goto SKIP_CYCLE;
        
        for(new 
    irowsi++)
        { 
            if(
    cache_get_field_content_int(i"p_leader"MysqlConnect) == 6)
            {
                
    name1[0] = EOS;//не помню, чистит ли cache_get_field_content строку, если да - удалить это поле
                
    cache_get_field_content(i"nickname"name1MysqlConnectMAX_PLAYER_NAME);
            }
            else
            {
                
    name2[0] = EOS;
                
    cache_get_field_content(i"nickname"name2MysqlConnectMAX_PLAYER_NAME);
            }
        }
       
        
    SKIP_CYCLE:

        
    printf("На выходе получаем: Фракция 6: %s | Фракция 7: %s"name1name2);
        return 
    1;

    Последний раз редактировалось UnO; 09.02.2019 в 04:50.

  11. Пользователь сказал cпасибо:
    Сергей (09.02.2019)
  12. #18
    Аватар для Сергей
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Сообщений
    161
    Репутация:
    3 ±
    Цитата Сообщение от UnO Посмотреть сообщение
    Тебе двое людей выше уже сказали, что выборку лучше делать на стороне субд, чем циклом вручную.

    PHP код:
    mysql_function_query(MysqlConnect, !"SELECT `nickname`,`p_leader` FROM `"TABLE_ACC"` WHERE `p_leader` in (6,7)"
        
    true, !"OnCheckLEADCallBack"""); 

    forward OnCheckLEADCallBack(); 
    public 
    OnCheckLEADCallBack() 

        new 
    rows,
            
    fields,
            
    name1[MAX_PLAYER_NAME+1] = "Нет",
            
    name2[MAX_PLAYER_NAME+1] = "Нет";

        
    cache_get_data(rowsfieldsMysqlConnect); 

        if(
    rows == 0) goto SKIP_CYCLE;
        
        for(new 
    irowsi++)
        { 
            if(
    cache_get_field_content_int(i"p_leader"MysqlConnect) == 6)
            {
                
    name1[0] = EOS;//не помню, чистит ли cache_get_field_content строку, если да - удалить это поле
                
    cache_get_field_content(i"nickname"name1MysqlConnectMAX_PLAYER_NAME);
            }
            else
            {
                
    name2[0] = EOS;
                
    cache_get_field_content(i"nickname"name2MysqlConnectMAX_PLAYER_NAME);
            }
        }
       
        
    SKIP_CYCLE:

        
    printf("На выходе получаем: Фракция 6: %s | Фракция 7: %s"name1name2);
        return 
    1;

    Не ругайтесь, просто сразу не понял, теперь подчитавши, стал на 0.0000000001 процент умнее (страшно использовать то что не разу не делал, и не понимал)

  13. #19
    Аватар для UnO
    Пользователь

    Статус
    Оффлайн
    Регистрация
    20.01.2018
    Сообщений
    52
    Репутация:
    7 ±
    Цитата Сообщение от Сергей Посмотреть сообщение
    Не ругайтесь, просто сразу не понял, теперь подчитавши, стал на 0.0000000001 процент умнее (страшно использовать то что не разу не делал, и не понимал)
    Я не ругаюсь, тон речи письмом сложно передать (:

  14. #20
    Аватар для m1n1vv
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±
    Цитата Сообщение от Сергей Посмотреть сообщение
    Так оно так-бы и было))
    У тебя без playerid

    И проверку должна быть такой:
    PHP код:
    if (!IsPlayerConnected(playerid))
        
    cache_get_field_content(i"nickname"nameMysqlConnectMAX_PLAYER_NAME); 
    else
        
    GetPlayerName(playeridnameMAX_PLAYER_NAME); 
    Но по сути проверку с бд должно хватать
    Последний раз редактировалось m1n1vv; 09.02.2019 в 12:02.

 

 
Страница 2 из 2 ПерваяПервая 1 2

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •