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

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    257
    Репутация:
    3 ±

    Несколько вопросов

    Приветствую! У меня, как у новичка в Pawn, есть несколько вопросов относительно программирования, ответы на которых, к сожалению, я не смог найти в поисковике:
    1. После того, как игрок зарегистрировался на сервере, его телепортирует в интерьер для выбора внешности. Всё это "дело" выполнено на TextDraw. После того, как его телепортирует в интерьер, ему "присваивается" виртуальный мир, равный его id (игрок с id 1, значит вирт. мир при выборе внешности равен 1). Всё это "дело" сделано в виде stock, но не в этом суть. После нажатия кнопки выбора внешности, игрока телепортирует на спавн, но виртуальный мир почему-то не изменяется. Вот теперь сам вопрос: нужно ли прописывать в функционал кнопки выбора внешности следующее: "SetPlayerVirtualWorld(playerid, 0);" или же можно сделать как-то по-другому?
    2. У меня есть диалоговое окно (например, главного меню (/mm)), в котором есть много всякой всячины, это не так важно. При входе в один из пунктов (например, "команды сервера"), показывается список команд (как на РП серверах список появляется: "основные команды", "управление автомобилем", "управление домом" и т.п.) и нужно сделать так, чтобы при нажатии на клавишу Esc список доступных команд не пропадал полностью, а чтобы возвращало в главное меню. (/mm, заходим в пункт "Команды сервера", нажимаем Esc и возвращаемся в главное меню снова).
    3. Третий вопрос насчёт таймера при авторизации и диалогового окна авторизации/регистрации. Нужно как-то сделать таймер при авторизации (например, 60 секунд), чтобы по истечению времени игрока, который не успел авторизоваться, кикало с сервера с текстом "Время на авторизацию истекло.", при этом чтобы закрылось диалоговое окно авторизации. Есть ли где-нибудь мануал на эту тему? Теперь насчёт диалогового окна: как сделать так, чтобы при отказе от регистрации или авторизации (при нажатии на клавишу Esc), игрока кикало с текстом "Вы были кикнуты за отказ от регистрации/авторизации"?
    Заранее благодарен за помощь
    Последний раз редактировалось PawnoNoob; 02.04.2016 в 21:01.

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

    Статус
    Оффлайн
    Регистрация
    24.12.2013
    Сообщений
    116
    Репутация:
    14 ±
    1) Когда вызывается функция спавна в ТД, туда и пихай SetPlayerVirtualWorld(playerid, 0);
    2) if(!response) return Твое меню
    3) SetTimerEx в помощь, а так же if(!response)

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

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    257
    Репутация:
    3 ±
    Ещё один вопросик: для команд и для некоторых стоков я использую функцию format, почти везде добавляю переменную new string[128];, при этом использую немного меньше символов, чем выделено. Скажется ли это как-то на работе мода при высоком онлайне, например?
    (Пример: выделил 128 символов, а использую 80-100)

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от PawnoNoob Посмотреть сообщение
    Ещё один вопросик: для команд и для некоторых стоков я использую функцию format, почти везде добавляю переменную new string[128];, при этом использую немного меньше символов, чем выделено. Скажется ли это как-то на работе мода при высоком онлайне, например?
    (Пример: выделил 128 символов, а использую 80-100)
    Да, скажется. Переполнением стэка, например, и кучей всевозможных багов и крашей из-за этого. Выделяй ровно столько ячеек, сколько требуется
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    257
    Репутация:
    3 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Да, скажется. Переполнением стэка, например, и кучей всевозможных багов и крашей из-за этого. Выделяй ровно столько ячеек, сколько требуется
    А можете объяснить мне, новичку, что такое "переполнение стэка"? Я лишь учусь пока программированию, поэтому многого не знаю и задаю вот такие глупые вопросы здесь

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от PawnoNoob Посмотреть сообщение
    А можете объяснить мне, новичку, что такое "переполнение стэка"? Я лишь учусь пока программированию, поэтому многого не знаю и задаю вот такие глупые вопросы здесь
    Ну вот максимально упрощённое объяснение, в котором упущенны некоторые моменты:
    Стэк - это сегмент данных, который представляет из себя что-то вроде оперативной памяти сервера и хранит в себе данные о работе того коллбэка, который обрабатывается сервером в определённый момент времени. Объявляя локальную переменную (массив), ты "откусываешь" тем самым кусочек от стэка, выделяя этот кусок под хранение данных из переменной (точнее, имя переменной является лишь ключом, по которому ты можешь записать данные в определённый участок стэка и потом этот участок найти, дабы данные извлечь/изменить). Так же в стэк помещается вся информация о вызываемых функциях внутри коллбэка, который обрабатывается в данный момент (выделяется память под имя функции, каждый из аргументов и результат, который возвращает данная функция). А так как стэк - штука не бесконечная (стандартно под него выделяется 16384 байт, чего вполне достаточно, если писать код логически верно), ему свойственно заканчиваться. И если он закончится, а данные для записи всё ещё будут поступать, серверу ничего не останется сделать, как начать перезаписывать уже записанные данные, из-за чего могут начаться серьёзные проблемы и всё выльется в баги.
    Вряд ли ты и половину из того, что я написал, понял на 100%... Работа с памятью - тема сложная для понимания в самом начале. Просто послушай совета и выделяй под массивы ровно столько, сколько требуется, а со временем уже поймёшь зачем нужно делать именно так.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  9. Пользователь сказал cпасибо:
    PawnoNoob (03.04.2016)
  10. #7
    Аватар для PawnoNoob
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    257
    Репутация:
    3 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Ну вот максимально упрощённое объяснение, в котором упущенны некоторые моменты:
    Стэк - это сегмент данных, который представляет из себя что-то вроде оперативной памяти сервера и хранит в себе данные о работе того коллбэка, который обрабатывается сервером в определённый момент времени. Объявляя локальную переменную (массив), ты "откусываешь" тем самым кусочек от стэка, выделяя этот кусок под хранение данных из переменной (точнее, имя переменной является лишь ключом, по которому ты можешь записать данные в определённый участок стэка и потом этот участок найти, дабы данные извлечь/изменить). Так же в стэк помещается вся информация о вызываемых функциях внутри коллбэка, который обрабатывается в данный момент (выделяется память под имя функции, каждый из аргументов и результат, который возвращает данная функция). А так как стэк - штука не бесконечная (стандартно под него выделяется 16384 байт, чего вполне достаточно, если писать код логически верно), ему свойственно заканчиваться. И если он закончится, а данные для записи всё ещё будут поступать, серверу ничего не останется сделать, как начать перезаписывать уже записанные данные, из-за чего могут начаться серьёзные проблемы и всё выльется в баги.
    Вряд ли ты и половину из того, что я написал, понял на 100%... Работа с памятью - тема сложная для понимания в самом начале. Просто послушай совета и выделяй под массивы ровно столько, сколько требуется, а со временем уже поймёшь зачем нужно делать именно так.
    Хм, а вот случайно #pragma dynamic не из-за переполнения стэка приписывается? (просто где-то встречал это: 16.000 байт и прагму) Или я ошибаюсь?
    И ещё несколько вопросов сразу появились: можно ли как-нибудь узнать, сколько памяти осталось под эти стэки? Под string выделять ровно столько же символов, сколько занимает строка или же можно "с запасом"? (например: используется 97, выделю 100)
    Последний раз редактировалось PawnoNoob; 03.04.2016 в 22:19.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от PawnoNoob Посмотреть сообщение
    Хм, а вот случайно #pragma dynamic не из-за переполнения стэка приписывается? (просто где-то встречал это: 16.000 байт и прагму) Или я ошибаюсь?
    И ещё вопрос сразу появился: можно ли как-нибудь узнать, сколько памяти осталось под эти стэки?
    #pragma dynamic позволяет регулировать ту память, которая будет выделяться под стэк. Этой директивой можно как увеличить память, так и уменьшить.
    Можно. Зайди в папку с Pawno и создай там файл "pawn.cfg", а после в этом файле напиши "-d3" и сохрани. Теперь компилируй мод и должно появится что-то типа такого:
    PHP код:
    Pawn compiler 3.2.3664              Copyright (c1997-2006ITB CompuPhase

    Header size
    :           5528 bytes
    Code size
    :           209492 bytes
    Data size
    :          1002600 bytes
    Stack
    /heap size:      16384 bytesestimated maxusage=698 cells (2792 bytes)
    Total requirements1234004 bytes 
    Кол-во выделенной/занимаемой памяти в стэке можно увидеть вот в этой строке:
    PHP код:
    Stack/heap size:      16384 bytesestimated maxusage=698 cells (2792 bytes
    Вот указана выделенная (доступная) память:
    PHP код:
    Stack/heap size:      16384 bytes
    А вот тут показано сколько памяти потребляется на данный момент:
    PHP код:
    estimated maxusage=698 cells (2792 bytes
    В моём случае это 698 ячеек или, если переводить в байты, 2792 байта из 16384 доступных.
    Если значение потребляемой памяти больше значения выделенной - это и есть переполнение. Так же может написать вместо значения потребляемой - "unknown". Это означает, что в моде есть рекурсия, из-за которой компилятор не может определить кол-во потребляемой памяти
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  12. Пользователь сказал cпасибо:
    PawnoNoob (03.04.2016)
  13. #9
    Аватар для PawnoNoob
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    257
    Репутация:
    3 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    #pragma dynamic позволяет регулировать ту память, которая будет выделяться под стэк. Этой директивой можно как увеличить память, так и уменьшить.
    Можно. Зайди в папку с Pawno и создай там файл "pawn.cfg", а после в этом файле напиши "-d3" и сохрани. Теперь компилируй мод и должно появится что-то типа такого:
    PHP код:
    Pawn compiler 3.2.3664              Copyright (c1997-2006ITB CompuPhase

    Header size
    :           5528 bytes
    Code size
    :           209492 bytes
    Data size
    :          1002600 bytes
    Stack
    /heap size:      16384 bytesestimated maxusage=698 cells (2792 bytes)
    Total requirements1234004 bytes 
    Кол-во выделенной/занимаемой памяти в стэке можно увидеть вот в этой строке:
    PHP код:
    Stack/heap size:      16384 bytesestimated maxusage=698 cells (2792 bytes
    Вот указана выделенная (доступная) память:
    PHP код:
    Stack/heap size:      16384 bytes
    А вот тут показано сколько памяти потребляется на данный момент:
    PHP код:
    estimated maxusage=698 cells (2792 bytes
    В моём случае это 698 ячеек или, если переводить в байты, 2792 байта из 16384 доступных.
    Если значение потребляемой памяти больше значения выделенной - это и есть переполнение. Так же может написать вместо значения потребляемой - "unknown". Это означает, что в моде есть рекурсия, из-за которой компилятор не может определить кол-во потребляемой памяти
    Вот у меня на данный момент есть 13 стеков, каждый выполняет свою функцию, но, как мне кажется, я выделил слишком много символов для формата, поэтому при компилировании я вижу следующее:
    PHP код:
    Pawn compiler 3.2.3664              Copyright (c1997-2006ITB CompuPhase

    Header size
    :           4344 bytes
    Code size
    :            63952 bytes
    Data size
    :           374036 bytes
    Stack
    /heap size:      16384 bytesestimated maxusage=491 cells (1964 bytes)
    Total requirements:  458716 bytes 
    И ещё раз повторю свой вопрос, который я добавил немного позднее: под string выделять ровно столько же символов, сколько занимает строка или же можно "с запасом"? (например: используется 97, выделю 100). Считать символы можно, например, на сайте text.ru, при этом добавлять 24? (макс. длина никнейма) (это не реклама, просто сайт для подсчёта символов и проверку текста на уникальность).
    Последний раз редактировалось PawnoNoob; 03.04.2016 в 22:33.

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

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

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

    Steve Pavlina

  15. Пользователь сказал cпасибо:
    PawnoNoob (03.04.2016)
 

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

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

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

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

Ваши права

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