Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 108 из 133 ПерваяПервая ... 8 58 98 106 107 108 109 110 118 ... ПоследняяПоследняя
Показано с 1,071 по 1,080 из 1325
  1. #1071
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от pawnoholic Посмотреть сообщение
    SetPlayerData(String, Int, Float) - это что то вроде API, для доступа из вне для static PlayerData[MAX_PLAYERS][E_PLAYER_DATA];
    Так ты можешь сделать абсолютно такой же api, просто не пихать всё в одну функцию, а задавать отдельные данные отдельными предусмотренными функциями, о чём и речь. В итоге тебе самому будет проще, не говоря уже о лишних затратах на перебор в твоей универсальной функции всех возможных типов, как уже сказали выше.
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  2. Пользователь сказал cпасибо:
    pawnoholic (16.05.2018)
  3. #1072
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от pawnoholic Посмотреть сообщение
    SetPlayerData(String, Int, Float) - это что то вроде API, для доступа из вне для static PlayerData[MAX_PLAYERS][E_PLAYER_DATA];
    И что с того? Player_SetName(), Player_SetPassword() и Player_SetEMail() - тоже API.

    EDIT: Nexius_Tailer опередил.
    В дополнение тогда добавлю, что с указанным мной вариантом не нужно прописывать свойство отдельным аргументом: его название уже есть в названии соответствующей функции. Ещё, как бонус, с таким вариантом можно сделать "static enum ePlayerData" (доступно с 3.10.2), чтобы структура хранения данных оставалась в том же "чёрном ящике", что и сам массив.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  4. Пользователь сказал cпасибо:
    pawnoholic (16.05.2018)
  5. #1073
    Аватар для Elrmrnt-Kritik
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.11.2017
    Сообщений
    136
    Репутация:
    10 ±
    Много читал за память в pawn, пытался разобраться что к чему, искал способы оптимизации расхода памяти. Но так и не уяснил для себя один момент:
    1. new string[128] = "привет!";
    2. SendClientMessage(playerid, -1, string);

    Глупый пример, но неважно. То, что 120 ячеек останутся пустыми, никакой роли не играет? По завершении работы функции, в которой это расположено, они точно так же будут удалены из памяти?

  6. #1074
    Аватар для DeimoS
    Модератор?

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

    Касаемо "удалены из памяти". Стоит понимать, что когда ты работаешь со стэком, ты работаешь с уже выделенной памятью. Не происходит никакого удаления. Когда ты создаёшь локальную переменную, ты просто резервируешь часть той самой выделенной памяти для того, чтоб потом обратиться к ней по адресу этой самой переменной. А когда блок кода, где была объявлена локальная переменная, обрабатывается до конца, эта самая память просто перестаёт быть зарезервированной и становится доступной для перезаписи новыми данными, при этом, даже не обнуляясь.

    PHP код:
    main()
    {
        {
    // Откроем первый новый блок
            
    new test[8] = "Привет!";// Инициализируем в нём переменную
            
    printf("1) |%s|"test);// Отобразим её содержимое
        
    }// При окончании блока все локальные переменные "удалятся", что мы и проверим дальше

        
    {// Открываем ещё один блок
            
    goto __skip;// Пропускаем инициализацию, дабы сервер не обнулил ячейки
            
    new test2[8];
            
    __skip:
            
    printf("2) |%s|"test2);// Отобразим наш, казалось бы, не заполненный текстом массив
        
    }
    }
    /*    На выходе получим:
    1) |Привет!|
    2) |Привет!|


    То бишь, после "удаления" массива "test" его содержимое осталось в памяти и когда мы создали ещё один массив, намеренно пропустив инициализацию, он занял всё тот же участок стэка, что и предыдущий массив 
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  7. Пользователь сказал cпасибо:
    Elrmrnt-Kritik (24.05.2018)
  8. #1075
    Аватар для Elrmrnt-Kritik
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.11.2017
    Сообщений
    136
    Репутация:
    10 ±
    Скажите, пожалуйста, где-то можно найти код исходных нативных функций? Видел код strlen, который побайтово считает размер, случайно совсем находил. А для остальных, к сожалению, не видел.

  9. #1076
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от Elrmrnt-Kritik Посмотреть сообщение
    Скажите, пожалуйста, где-то можно найти код исходных нативных функций? Видел код strlen, который побайтово считает размер, случайно совсем находил. А для остальных, к сожалению, не видел.
    Все стандартные native-функции реализованы тут. Например, в файле amxfile.c реализованы все функции для работы с файлами. Тем не менее, не все native-функции являются открытыми, к примеру, функции SA:MP - все они закрытые.

    Вообще для того чтобы просмотреть примерный исходный код закрытых native-функций используются разные программы, позволяющие сгенерировать псевдокод на Си.
    Последний раз редактировалось VVWVV; 27.05.2018 в 20:47.

  10. Пользователь сказал cпасибо:
    Elrmrnt-Kritik (29.05.2018)
  11. #1077
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Все стандартные native-функции реализованы тут.
    Не совсем правильно, ибо это репозиторий от версии 3.2, а на сервере используется 3.0. Мало того, релиз 3.0 был удалён с сайта CompuPhase. Вот лучшее, что получилось найти.

    Цитата Сообщение от VVWVV Посмотреть сообщение
    Вообще для того чтобы просмотреть примерный исходный код закрытых native-функций используются разные программы, позволяющие сгенерировать псевдокод на Си.
    Или можно просто взглянуть на утекшие исходники SA-MP 0.2x. Вот пара подсказок: GitHub, "n_CallLocalFunction".
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  12. Пользователь сказал cпасибо:
    Elrmrnt-Kritik (29.05.2018)
  13. #1078
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Не совсем правильно, ибо это репозиторий от версии 3.2, а на сервере используется 3.0. Мало того, релиз 3.0 был удалён с сайта CompuPhase. Вот лучшее, что получилось найти.


    Или можно просто взглянуть на утекшие исходники SA-MP 0.2x. Вот пара подсказок: GitHub, "n_CallLocalFunction".
    Тем не менее основная концепция и реализация функций в обоих случаях не меняется.

  14. Пользователь сказал cпасибо:
    Elrmrnt-Kritik (29.05.2018)
  15. #1079
    Аватар для Elrmrnt-Kritik
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.11.2017
    Сообщений
    136
    Репутация:
    10 ±
    Либо я не сообразил где это искать, либо я не то попросил :)
    Не так давно читал, DeimoS вроде описывал, работу оператора switch. Мол, генерирует некую хеш-таблицу. Хотел почитать поподробнее за такие функции (как именно они работают, что делают), хотел бы вычитать за процесс сравнения чисел (как именно система сравнивает, больше ли a, чем b (могу предположить, что из одного вычитает другое, но все же хотелось бы знать точнее)).

  16. #1080
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от Elrmrnt-Kritik Посмотреть сообщение
    Либо я не сообразил где это искать, либо я не то попросил :)
    Не так давно читал, DeimoS вроде описывал, работу оператора switch. Мол, генерирует некую хеш-таблицу. Хотел почитать поподробнее за такие функции (как именно они работают, что делают), хотел бы вычитать за процесс сравнения чисел (как именно система сравнивает, больше ли a, чем b (могу предположить, что из одного вычитает другое, но все же хотелось бы знать точнее)).
    Это не функции, а операторы, которые, при компиляции из исходного кода в байт кода, заменяются на определённую последовательность инструкций виртуальной машины. После чего, когда вы загружаете ваш скрипт, виртуальная машина интерпретирует все его инструкции в машинные.

    В основном, вся часть работы интерпретатора заключается в функции amx_Exec, которая и выполняет всю работу.

  17. Пользователь сказал cпасибо:
    Elrmrnt-Kritik (30.05.2018)
 

 
Страница 108 из 133 ПерваяПервая ... 8 58 98 106 107 108 109 110 118 ... ПоследняяПоследняя

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

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

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

Ваши права

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