Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 6 из 6
  1. #1
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±

    И снова рекурсия?

    Может ли этот код быть рекурсией?
      Открыть/закрыть
    PHP код:
        if(strcmp(cmd"/cmd"true) == 0)
        {
            if(
    PlayerInfo[playerid][pAdmin] < 13)
                return 
    SendClientMessage(playeridCOLOR_GREY"Âû íå ãë. àäìèíèñòðàòîð!");
            
    tmp strcharsplit(cmdtextidx);
            if(!
    strlen(tmp))
                return 
    SendClientMessage(playeridCOLOR_WHITE"Ââåäèòå: /cmd [id] [êîìàíäà]");
            
    giveplayerid ReturnUser(tmp);
            if(
    IsPlayerConnected(giveplayerid) && giveplayerid != INVALID_PLAYER_ID)
            {
                if(
    PlayerInfo[playerid][pAdmin] < PlayerInfo[giveplayerid][pAdmin])
                    return 
    SendClientMessage(playerid,COLOR_GREY,"Ïî ðóêàì ñåáå åáàíè! ÃàxD.");
                new 
    length strlen(cmdtext);
                while ((
    idx length) && (cmdtext[idx] <= ' '))
                {
                    
    idx++;
                }
                new 
    offset idx;
                new 
    result[64];
                while ((
    idx length) && ((idx offset) < (sizeof(result) - 1)))
                {
                    
    result[idx offset] = cmdtext[idx];
                    
    idx++;
                }
                
    result[idx offset] = EOS;
                if(!
    strlen(result))
                    return 
    SendClientMessage(playeridCOLOR_GRAD2"Ââåäèòå: /cmd [id] [êîìàíäà]");
                
    OnPlayerCommandText(giveplayerid,result);
            }
            else 
    SendClientMessage(playeridCOLOR_GREY"Èãðîê íå íàéäåí!");
            return 
    1;
        } 

  2. #2
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Конечно, может. Функция OPCT вызывает саму себя. Либо делайте вызов через CallLocalFunction, либо более радикальное решение: переводите команды на ZCMD/DC_CMD/y_commands.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Хм, получается если я кину эту функцию через диалог или обработчик клавиш то рекурсии уже не будет?

    - - - Добавлено - - -

    С переводом повременим, мод рпшный = много функций, да и скорость их выполнения наглядно не сравнивается, это так для глаза программиста видно что быстрее, а так практически тоже самое(хотя что я несу я же не пробовал ещё )

  4. #4
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    Хм, получается если я кину эту функцию через диалог или обработчик клавиш то рекурсии уже не будет?
    Можно и так. Суть в том, что вызывается нативная функция, а она вызывает другую функцию на Pawn, но компилятор об этом не знает и считает, что там нет рекурсии.
    Можете провернуть всё и через диалог, но, ИМХО, всё же удобнее было бы вводить параметры вместе с командой /cmd, а не в отдельном окне.


    Цитата Сообщение от vovandolg Посмотреть сообщение
    С переводом повременим, мод рпшный = много функций, да и скорость их выполнения наглядно не сравнивается, это так для глаза программиста видно что быстрее, а так практически тоже самое(хотя что я несу я же не пробовал ещё )
    DC_CMD работает быстрее обычного способа с strcmp уже при 3-4 командах.
    http://pro-pawn.ru/showthread.php?10...ll=1#post41236
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Суть в том, что вызывается нативная функция, а она вызывает другую функцию на Pawn, но компилятор об этом не знает и считает, что там нет рекурсии.
    А как же тогда из диалога вызывается другой диалог, это тоже рекурсия получается?

  7. #6
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    А как же тогда из диалога вызывается другой диалог, это тоже рекурсия получается?
    Что? Паблик ODR вызывается тогда, когда была нажата одна из кнопок в диалоге — в этом, никакой рекурсии нет; даже если вы вызываете функцию SPD в паблике ODR.

    ODR - OnDialogResponse
    SPD - ShowPlayerDialog
    Последний раз редактировалось VVWVV; 18.01.2016 в 19:31.

  8. Пользователь сказал cпасибо:
    vovandolg (18.01.2016)
 

 

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

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

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

Ваши права

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