Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 2 из 7 ПерваяПервая 1 2 3 4 ... ПоследняяПоследняя
Показано с 11 по 20 из 68
  1. #11
    Аватар для ^_^
    Übermensch

    Статус
    Оффлайн
    Регистрация
    25.11.2013
    Сообщений
    157
    Репутация:
    245 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Дополнение к пункту 8. Символ "@" обязательно должен стоять вначале, а вот какие символы будут дальше - разницы нет (естественно, в пределах возможностей Pawn). То бишь, подобные функции можно отделять, например, так:
    PHP код:
    @__FuncName();
    @
    __FuncName() print("Прошла 1 секунда с момента запуска мода");
    public 
    OnGameModeInit()
    {
       
    SetTimer("@__FuncName"1000false);

    Добавил.

  2. #12
    Аватар для wAx
    ¯\_(ツ)_/¯

    Статус
    Оффлайн
    Регистрация
    13.12.2013
    Сообщений
    377
    Репутация:
    146 ±
    random(max) - никогда не выдаст max.

    Этого пока еще многие новички не знают.

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

    SetPlayerCameraPos - не работает сразу после использования TogglePlayerSpectating(playerid, true);

    Заставить работать ее можно с помощью простенького таймера.

    Пример:
    PHP код:
    SetTimerEx("@_SetCameraPos"3000"dfff"playerid,x,y,z);

    @
    _SetCameraPos(playeridFloat:x,Float:y,Float:z);
    @
    _SetCameraPos(playerid,Float:x,Float:y,Float:z)
    {
        
    SetPlayerCameraPos(playeridx,y,z);
        return 
    1;


  3. #13
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Немного усовершенствую функцию.
     Моя версия
    PHP код:
    stock minrandom(minmax)
    {
        if(
    min max) return printf("Ошибка функции minrandom: Значение min (%d) больше значения max (%d)"minmax);
        else if(
    min == max) return printf("Ошибка функции minrandom: Значение min (%d) равно значению max (%d)"minmax);
        else return 
    random(max-min+1)+min;



     Версия Daniel_Cortez
    PHP код:
    stock minrandom(minmax)
    {
        if(
    min == max) return min;
        else if(
    min max) return random(min-max+1)+max;
        else return 
    random(max-min+1)+min;


    +1 нужен для того, чтоб число, записанное в "max" так же входило в диапазон чисел, выдаваемых функцией random.

    Можно ещё такой фиксик, основанный на предыдущем.
    PHP код:
    stock random_fix(value) return random(value+1);
    #define random random_fix 
    ибо у многих часто появляются проблемы с функцией random, ибо они не знают, что число, введённое в скобки, не входит в диапазон выдаваемых чисел :)
    Последний раз редактировалось DeimoS; 20.08.2014 в 21:22.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Немного усовершенствую функцию.
    PHP код:
    stock minrandom(minmax)
    {
        if(
    min max) return printf("Ошибка функции minrandom: Значение min (%d) больше значения max (%d)"minmax);
        else if(
    min == max) return printf("Ошибка функции minrandom: Значение min (%d) равно значению max (%d)"minmax);
        else return 
    random(max-min+1)+min;

    +1 нужен для того, чтоб число, записанное в "max" так же входило в диапазон чисел, выдаваемых функцией random.
    Не думаю, что вывод сообщений через print/printf хорошая идея, так обычно никто не делает. Мало того, при неправильных параметрах функция всё же вернёт значение, из-за чего в коде, использующем такую функцию могут возникнуть ошибки.
    Могу предложить 2 более-менее годных выхода из ситуации:
    1. Поменять значения min и max местами, если min больше max, и возвращать max/min, если они равны друг другу.
    2. Возвращать по ссылке дополнительное значение, означающее успех выполнения функции, перебросив задачу по обработке ошибки вызывающему коду.
      Пример:
      PHP код:
      stock DoSomething(param1, &success=cellmin)
      {
          
      // Первым делом проверим, пропущен ли параметр success, сравнив его значение с cellmin
          // (в Pawn нельзя просто так получить значение указателя, но эту проблему можно обойти).
          #emit   load.s.pri  success // получим значение success
          #emit   eq.c.pri    cellmin // сравним его с cellmin
          
      new success_skipped;
          
      #emit   stor.s.pri  success_skipped // запишем в переменную 1/0 в зависимости от равенства cellmin
          
      if(SomeShitHappens())
          {
              if(
      == success_skipped)
                  
      success 0;
              return 
      0;
          }
          if(
      == success_skipped)
              
      success 1;
          return 
      random(random(param1));

    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  5. #15
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Я сообщения поставил лишь как указание на то, что могут быть баги =) А уже возможные пути исправления не продумывал особо, поэтому влепил обычное оповещение. Но твой вариант явно лучше.
    Вот код, который предложил Стас (Daniel_Cortez) выше. Авось кому пригодиться
    PHP код:
    stock minrandom(minmax)
    {
        if(
    min == max) return min;
        else if(
    min max) return random(min-max+1)+max;
        else return 
    random(max-min+1)+min;

    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    Получаем некоторую часть текста, которую вернула функция.

    Например, есть функция, которая возвращает строку:
    PHP код:
    SomeFunction()
    {
        static const
            
    some_string[] = "Lorem ipsum!";

        return 
    some_string;

    Вывод текста начнётся с той ячейки, которую указали в квадратных скобках, пример извлечения:
    PHP код:
    print((SomeFunction())[6]); 
    или так:
    PHP код:
    print((SomeFunction())[strfind(SomeFunction(), " ") + 1]); // пусть функция strfind сама найдёт пробел 
    Выведет: ipsum!

    Ещё небольшой пример, если нужно вернуть последний символ в строке:
    PHP код:
    print((SomeFunction())[strlen(SomeFunction()) - 1]);
    // не очень хороший пример вызова двух раз функции,
    // но это используется как пример использования 
    В данном примере индекс, который нам нужен мы получили с помощью функции strlen ( функция возвращает длину строки ). От того значения, которая вернула функция strlen отняли единицу для того, чтобы не получить нулевой символ завершения строки ( '\0' ).

    Выведет: !
    Последний раз редактировалось L0ndl3m; 03.11.2014 в 17:28.

  7. Пользователь сказал cпасибо:
    ^_^ (12.08.2015)
  8. #17
    Аватар для alfazlo
    Пользователь

    Статус
    Оффлайн
    Регистрация
    21.06.2014
    Сообщений
    16
    Репутация:
    1 ±
    Возможно оптимизацию можно получить используя одномерные массивы информации(о игроках, домах и т.д) вместо двухмерных, поясняю:
    вместо:
    PHP код:
    enum pInfo
    {
    id,
    name,
    lvl
    //...
    }
    new 
    PlayerInfo[MAX_PLAYER][pInfo]; //Создается двухмерный массив 
    Используем следующий код
    PHP код:
    enum pInfo
    {
    id[MAX_PLAYER],
    name[MAX_PLAYER],
    lvl[MAX_PLAYER]
    //...
    }
    new 
    PlayerInfo[pInfo]; //Создается одномерный массив доступ к данным осуществляется также удобно как и в первом варианте

    new idx PlayerInfo[id][playerid]; //Пример получения id юзера. 
    А смысл всего этого в том что скорость доступа к данным одномерного массива выше чем к данным двухмерного, ну это для тех у кого как и у меня глюк на макимальном выйгрыше в 1 микросекунду :D

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

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    Наверное очень полезно, если кто-то хотел сделать char-массивы в стате игрока.

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

    Статус
    Оффлайн
    Регистрация
    21.06.2014
    Сообщений
    16
    Репутация:
    1 ±
    самый быстрый цикл for
    for(new i = value; 0 != i; i--)

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от alfazlo Посмотреть сообщение
    А смысл всего этого в том что скорость доступа к данным одномерного массива выше чем к данным двухмерного, ну это для тех у кого как и у меня глюк на макимальном выйгрыше в 1 микросекунду :D
    И где вы здесь видите одномерный массив? В данном случае перечисление (enum) pInfo устроено точно так же, как и обычный массив, разве что доступ к элементам осуществляется не по индексам, а по именам. В результате получаем всё ту же кучку двумерных массивов - ни о какой оптимизации и речи быть не может.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

 

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

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

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

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

Ваши права

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