Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.

Реклама


 
IP:176.32.36.96:7777 Ha6op adm,liderov + bonuse.

**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 100руб/мес, Текстовая 50руб/мес.
Страница 2 из 6 ПерваяПервая 1234 ... ПоследняяПоследняя
Показано с 11 по 20 из 57
  1. #11
    Аватар для ^_^
    Übermensch

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

    Добавил.

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

    Статус
    Оффлайн
    Регистрация
    13.12.2013
    Сообщений
    323
    Репутация:
    125 ±
    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
    Адрес
    Восточный Мордор
    Сообщений
    3,110
    Репутация:
    1253 ±
    Немного усовершенствую функцию.
     Моя версия
    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.
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

  4. #14
    Аватар для Daniel_Cortez
    new fuck_logic[0] = EOS;

    Статус
    Онлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    1,515
    Репутация:
    2043 ±
    Цитата Сообщение от 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));

    Индивидуально в PM и Skype по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
    SA-MP 0.4 is a lie

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    3,110
    Репутация:
    1253 ±
    Я сообщения поставил лишь как указание на то, что могут быть баги =) А уже возможные пути исправления не продумывал особо, поэтому влепил обычное оповещение. Но твой вариант явно лучше.
    Вот код, который предложил Стас (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;

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

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

    Steve Pavlina

  6. #16
    Аватар для Londlem
    Модератор

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

    Например, есть функция, которая возвращает строку:
    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' ).

    Выведет: !
    Последний раз редактировалось Londlem; 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
    Аватар для Londlem
    Модератор

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

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

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

  11. #20
    Аватар для Daniel_Cortez
    new fuck_logic[0] = EOS;

    Статус
    Онлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    1,515
    Репутация:
    2043 ±
    Цитата Сообщение от alfazlo Посмотреть сообщение
    А смысл всего этого в том что скорость доступа к данным одномерного массива выше чем к данным двухмерного, ну это для тех у кого как и у меня глюк на макимальном выйгрыше в 1 микросекунду :D
    И где вы здесь видите одномерный массив? В данном случае перечисление (enum) pInfo устроено точно так же, как и обычный массив, разве что доступ к элементам осуществляется не по индексам, а по именам. В результате получаем всё ту же кучку двумерных массивов - ни о какой оптимизации и речи быть не может.
    Индивидуально в PM и Skype по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
    SA-MP 0.4 is a lie

 

 
Страница 2 из 6 ПерваяПервая 1234 ... ПоследняяПоследняя

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

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

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

Ваши права

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