Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 3 1 2 3 ПоследняяПоследняя
Показано с 1 по 10 из 29

Тема: CMD: id

  1. #1
    Аватар для BENGO
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.12.2017
    Сообщений
    16
    Репутация:
    0 ±

    CMD: id

    Всем привет! Делаю команду для поиска имен игроков, но вот какая штука, дает результат только в том случае, если вбивать сначала имени, а как сделать чтобы искало например с середины имени игрока, и с минимальным кол-во введенных символом от 4, я не знаю. Кто поможет, огромное спасибо, и извините, если вопрос глуповатый. Вид кода сейчас:
    Код:
    CMD:id(playerid, params[])
    {
        if(sscanf(params, "u", params[0]))
        	return SCM(playerid,-1,#Hint"Введите: /id [id игрока / NickName игрока]");
        else if(!IsPlayerConnected(params[0]))
    		return SCM(playerid,-1,#Error"Неверный id игрока.");
    	else if(!gPlayerLogged[params[0]])
    		return SCM(playerid,-1,#Error"Игрок с данным id не авторизован.");
    		
        SCM(playerid,-1,"Результат поиска:");
    	SCM(playerid,COLOR_BLUE,"______________________________");
    	foreach(new i: Player)
    	{
    		if(!IsPlayerConnected(i)) continue;
    		static const
    			names[] = "%s [%d]";
    		new
    			str_names[sizeof(names)+(MAX_PLAYER_NAME-2)+(4-2)];
    		format(
    			str_names,
    			sizeof(str_names),
    			names,
    			Name(i),i);
    		SCM(playerid,-1,str_names);
    	}
    	SCM(playerid,COLOR_BLUE,"______________________________");
        return true;
    }

  2. #2
    Аватар для Pa4enka
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.04.2016
    Адрес
    Украина
    Сообщений
    157
    Репутация:
    35 ±
    Какой командный процессор используете? (я к тому, что Pawn.CMD позволяет облегчить поиск)

  3. #3
    Аватар для Geebrox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±
    PHP код:
    #if !defined MIN_PLAYER_NAME
        #define MIN_PLAYER_NAME 4
    #endif

    CMD:id(playeridparams[])
    {
        
    extract params -> string:name_part[MIN_PLAYER_NAME]; else
        {
            return 
    SendClientMessage(playerid, -1, !"Используйте: /id [часть имени игрока]");
        }

        static const 
    message_template[] = "ID: %d | Имя: %s";
        new
            
    message[sizeof(message_template) - MAX_PLAYER_NAME];
            
    player_name[MAX_PLAYER_NAME],
            
    bool:isfound false;

        
    SendClientMessage(playerid, -1, !"Результаты поиска:");
        
        for(new 
    0GetPlayerPoolSize(); i++)
        {
            if(!
    GetPlayerName(playeridplayer_nameMAX_PLAYER_NAME))
            {
                continue;
            }

            else if(
    strfind(player_namename_parttrue))
            {
                
    isfound true;
                
    format(messagesizeof(message), message_templateiplayer_name);
                
    SendClientMessage(playerid, -1message);
            }
        }

        if(!
    isfound)
        {
            
    SendClientMessage(playerid, -1, !"Поиск не дал результатов!");
        }

        return 
    1;

    Не проверял на работоспособность.

  4. Пользователь сказал cпасибо:
    BENGO (23.12.2017)
  5. #4
    Аватар для BENGO
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.12.2017
    Сообщений
    16
    Репутация:
    0 ±
    Цитата Сообщение от Pa4enka Посмотреть сообщение
    Какой командный процессор используете? (я к тому, что Pawn.CMD позволяет облегчить поиск)
    DC_CMD

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

    Статус
    Оффлайн
    Регистрация
    20.12.2017
    Сообщений
    36
    Репутация:
    0 ±
    Цитата Сообщение от Geebrox Посмотреть сообщение
    PHP код:
    new 
            
    message[sizeof(message_template) - MAX_PLAYER_NAME]; 
            
    player_name[MAX_PLAYER_NAME], 
            
    bool:isfound false
    на
    PHP код:
    new 
            
    message[sizeof(message_template) - MAX_PLAYER_NAME],
            
    player_name[MAX_PLAYER_NAME], 
            
    bool:isfound false

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

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±
    Цитата Сообщение от Kucklovod00 Посмотреть сообщение
    на
    PHP код:
    new 
            
    message[sizeof(message_template) - MAX_PLAYER_NAME],
            
    player_name[MAX_PLAYER_NAME], 
            
    bool:isfound false
    да точно, не обратил внимание, писал на быструю руку

  8. #7
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Ну и ещё можно от массива player_name избавиться, записывая ник в массив для сообщения в чат. Всё равно при следующей итерации его содержимое перезаписывается только если ник найден
    Это так, к слову :)
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  9. #8
    Аватар для BENGO
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.12.2017
    Сообщений
    16
    Репутация:
    0 ±
    Цитата Сообщение от Geebrox Посмотреть сообщение
    PHP код:
    #if !defined MIN_PLAYER_NAME
        #define MIN_PLAYER_NAME 4
    #endif

    CMD:id(playeridparams[])
    {
        
    extract params -> string:name_part[MIN_PLAYER_NAME]; else
        {
            return 
    SendClientMessage(playerid, -1, !"Используйте: /id [часть имени игрока]");
        }

        static const 
    message_template[] = "ID: %d | Имя: %s";
        new
            
    message[sizeof(message_template) - MAX_PLAYER_NAME];
            
    player_name[MAX_PLAYER_NAME],
            
    bool:isfound false;

        
    SendClientMessage(playerid, -1, !"Результаты поиска:");
        
        for(new 
    0GetPlayerPoolSize(); i++)
        {
            if(!
    GetPlayerName(playeridplayer_nameMAX_PLAYER_NAME))
            {
                continue;
            }

            else if(
    strfind(player_namename_parttrue))
            {
                
    isfound true;
                
    format(messagesizeof(message), message_templateiplayer_name);
                
    SendClientMessage(playerid, -1message);
            }
        }

        if(!
    isfound)
        {
            
    SendClientMessage(playerid, -1, !"Поиск не дал результатов!");
        }

        return 
    1;

    Не проверял на работоспособность.
    Спасибо конечно же, но возникла проблема здесь ругается:
    Код:
    extract params -> string:nick_name[MIN_PLAYER_NAME]; else
            return SCM(playerid,-1,!#Hint"Введите: /id [NickName игрока]");
    D:\çàãðóçêè\gamemodes\modes.pwn(710) : error 017: undefined symbol "EXTRN"
    D:\çàãðóçêè\gamemodes\modes.pwn(710) : error 017: undefined symbol "nick_name"
    D:\çàãðóçêè\gamemodes\modes.pwn(710) : warning 215: expression has no effect
    D:\çàãðóçêè\gamemodes\modes.pwn(710) : error 001: expected token: ";", but found "]"
    D:\çàãðóçêè\gamemodes\modes.pwn(710) : fatal error 107: too many error messages on one line

  10. #9
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Там много ошибок в коде (playerid, например, в GetPlayerName)
    Как-то так:
    PHP код:
    CMD:id(playeridparams[])
    {
        if(!(
    <= strlen(params) <= MAX_PLAYER_NAME-4))
        {
            return 
    SendClientMessage(playerid, -1"Используйте: /id [часть имени игрока]");
        }

        
    SendClientMessage(playerid, -1"Результаты поиска:");
        
        new 
    message[12+11+MAX_PLAYER_NAME];
            
    bool:isfound false;
        for(new 
    iMAX_PLAYERSi++)
        {
            if(
    GetPlayerName(imessageMAX_PLAYER_NAME))
            {
                if(
    strfind(messageparamstrue) != -1)
                {
                    
    isfound true;
                    
    format(messagesizeof(message), "ID: %d | Имя: %s"imessage);
                    
    SendClientMessage(playerid, -1message);
                }
            }
        }
        if(
    isfound == false)
        {
            
    SendClientMessage(playerid, -1"Поиск не дал результатов!");
        }
        return 
    1;

    Последний раз редактировалось DeimoS; 24.12.2017 в 18:17.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  11. Пользователь сказал cпасибо:
    Geebrox (24.12.2017)
  12. #10
    Аватар для Kucklovod00
    Пользователь

    Статус
    Оффлайн
    Регистрация
    20.12.2017
    Сообщений
    36
    Репутация:
    0 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
      Открыть/закрыть
    Там много ошибок в коде (playerid, например, в GetPlayerName)
    Как-то так:
    PHP код:
    CMD:id(playeridparams[])
    {
        if(!(
    <= strlen(params) <= MAX_PLAYER_NAME-4))
        {
            return 
    SendClientMessage(playerid, -1"Используйте: /id [часть имени игрока]");
        }

        
    SendClientMessage(playerid, -1"Результаты поиска:");
        
        new 
    message[12+3+MAX_PLAYER_NAME];
            
    bool:isfound false;
        for(new 
    iMAX_PLAYERSi++)
        {
            if(
    GetPlayerName(imessageMAX_PLAYER_NAME))
            {
                if(
    strfind(messageparamstrue) != -1)
                {
                    
    isfound true;
                    
    format(messagesizeof(message), "ID: %d | Имя: %s"imessage);
                    
    SendClientMessage(playerid, -1message);
                }
            }
        }
        if(
    isfound == false)
        {
            
    SendClientMessage(playerid, -1"Поиск не дал результатов!");
        }
        return 
    1;

    Почему 3 для i? Трудно поверить, но возможно на его сервер зайдет 1000 игроков.

 

 
Страница 1 из 3 1 2 3 ПоследняяПоследняя

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

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

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

Ваши права

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