Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 2 из 3 ПерваяПервая 1 2 3 ПоследняяПоследняя
Показано с 11 по 20 из 22
  1. #11
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Если уж решил такую вермишель ради одной строки делать (хотя, имхо, от такой реализации, в данном случае, больше вреда, чем пользы):
    1. static const set_skin[] = "{87CEEB}Выполнено: {F6F6F6}Вы установили игроку {FF9900}%s[%d] {FFFF00}%s {F6F6F6}скин под номером {FF9900}%d{F6F6F6}.";
    2. static str[sizeof(set_skin) + ((-2 * 4) + sizeof(player_name) + 4 + 10 + 3) +1];
    3.  
    4. format(str, sizeof(str), set_skin, player_name, player_id, parameter ? "временный" : "постоянный", modelid);

    То и строки "временный"/"постоянный" вынес бы в static-массивы, чтоб сразу учитывать размер наибольшей строки в формуле для "str". Да и формула сейчас неправильная, ибо в 0.3DL ID добавленных скинов может быть длиной в 5 символов, а не 3.

    Так же непонятно зачем тут функция SetPlayerSkinEx (у которой довольно сомнительные наименования параметров). Выносить код в отдельную функцию и потом использовать эту функцию всего один раз - сомнительная идея.

    Ну и в запросе есть лишние кавычки + "LIMIT 1" там совершенно ни к чему, если условие запроса проходит по AI-полю.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    11.07.2015
    Сообщений
    190
    Репутация:
    25 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Да и формула сейчас неправильная, ибо в 0.3DL ID добавленных скинов может быть длиной в 5 символов, а не 3.
    0.3DL ветка недоступна для скачивания, соответственно, кому нужно - пусть сам добавляет проверку.
    1. if(!(1 <= modelid <= 311) || modelid == 74 || !(20_000 <= modelid <= 30_000))
    2. return SendClientMessage(playerid, -1, "{FF0000}Ошибка: {F6F6F6}Неверный ID скина. От 1 до 311, или от 20000 до 30000.");

    А так оно по сути "вне закона".
    Про использовании функции один раз. Я вот у себя в моде её использую не 1 раз, а гораздо больше, поэтому и вырезал от туда. Если кто-то желает отставить стандартную функу, то пусть использует:

    1. /* переменная хранящая скин игрока */ = modelid;
    2.  
    3. if(!is_tmp)
    4. SetPlayerSkin(playerid, /* переменная хранящая скин игрока */);
    5. else
    6. SetPlayerSkin(playerid, modelid);


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

    Цитата Сообщение от DeimoS Посмотреть сообщение
    Если уж решил такую вермишель ради одной строки делать (хотя, имхо, от такой реализации, в данном случае, больше вреда, чем пользы)
    Как говорят мудрейшие - не нравится, сделай сам.
    Меня всё полностью устраивает, я не гонюсь за идеалом. Меня устраивает такой стиль кода и устраивает подобная реализация.
    Да только как я заметил практически большую часть юзеров которые кодят нестандартными (не п-ишными) методами, зачастую при виде схожего кода как предоставил я, начинает метать из стороны в сторону и все пытаются надоумить сделать лучше. Я нигде вроде не говорил, что это САМАЯ МЕНЕЕ ЗАТРАТНАЯ ПО ПАМЯТИ И МАКСИМАЛЬНО ОПТИМИЗИРОВАННАЯ КОМАНДА КОТОРУЮ ОБЯЗАН ИСПОЛЬЗОВАТЬ КАЖДЫЙ. Тем более, мы кодим на каком-то там павне и даже та реализация, которую предоставил я - уже более менее хороший вариант, нежели как все делают по стандарту.


    Цитата Сообщение от DeimoS Посмотреть сообщение
    То и строки "временный"/"постоянный" вынес бы в static-массивы, чтоб сразу учитывать размер наибольшей строки в формуле для "str".
    Чуть позже изменю, окей.

    Цитата Сообщение от DeimoS Посмотреть сообщение
    Ну и в запросе есть лишние кавычки + "LIMIT 1" там совершенно ни к чему, если условие запроса проходит по AI-полю.
    Тут соглашусь, тоже чуть позже подправлю, спасибо за замечания.
    Последний раз редактировалось Kovshevoy; 17.12.2019 в 20:23.

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от Kovshevoy Посмотреть сообщение
    1. static const set_skin[] = "{87CEEB}Выполнено: {F6F6F6}Вы установили игроку {FF9900}%s[%d] {FFFF00}%s {F6F6F6}скин под номером {FF9900}%d{F6F6F6}.";
    2. static str[sizeof(set_skin) + ((-2 * 4) + sizeof(player_name) + 4 + 10 + 3) +1];
    1. В чём профит от объявления массива "str" с помощью static? (Нет, не "set_skin", а именно "str".)

    2. Переменные с одинаковым названием ("playerid" и "player_id") - просто замечательная идея! На всякий случай я проверил код из 1-го поста, и вроде бы нигде эти переменные не перепутаны (акцент на "вроде бы"), но я всё же советовал бы задать переменной для целевого игрока более отличимое название (например, я для таких целей называю переменную "targetid").

    3. Название переменной "parameter" совершенно не отражает сути. Я бы назвал такую переменную "is_temporary", "is_temp" или "istemp" (если назвать просто "temporary" или "temp"/"tmp", то читающий может подумать, что это переменная для хранения какого-то временного значения).
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  4. Пользователь сказал cпасибо:
    Outsider (22.12.2019)
  5. #14
    Аватар для Kovshevoy
    Пользователь

    Статус
    Оффлайн
    Регистрация
    11.07.2015
    Сообщений
    190
    Репутация:
    25 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    1. В чём профит от объявления массива "str" с помощью static? (Нет, не "set_skin", а именно "str".)
    Мастурбирование на экономию памяти (или как говорят на п-и стэкодрочеры)

    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    2. Переменные с одинаковым названием ("playerid" и "player_id") - просто замечательная идея! На всякий случай я проверил код из 1-го поста, и вроде бы нигде эти переменные не перепутаны (акцент на "вроде бы"), но я всё же советовал бы задать переменной для целевого игрока более отличимое название (например, я для таких целей называю переменную "targetid").
    Да, тут согласен, изменю. И да, переменные нигде не перепутаны. Сменил на targetid, спасибо за замечание.

    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    3. Название переменной "parameter" совершенно не отражает сути. Я бы назвал такую переменную "is_temporary", "is_temp" или "istemp" (если назвать просто "temporary" или "temp"/"tmp", то читающий может подумать, что это переменная для хранения какого-то временного значения).
    Принято, комрад, так же соглашусь. Изменил.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Kovshevoy Посмотреть сообщение
    0.3DL ветка недоступна для скачивания, соответственно, кому нужно - пусть сам добавляет проверку.
    1. if(!(1 <= modelid <= 311) || modelid == 74 || !(20_000 <= modelid <= 30_000))
    2. return SendClientMessage(playerid, -1, "{FF0000}Ошибка: {F6F6F6}Неверный ID скина. От 1 до 311, или от 20000 до 30000.");

    А так оно по сути "вне закона".
    Только, во-первых, её и так было довольно проблематично скачать, ибо Куй не писал о ней на сайте особо. Так что для 0.3DL ситуация с этим "запретом" не особо изменилась (разве что отключение мастер-листа чуть сильнее повлияло, но и то это не смертельно, ибо сервера, в любом случае, до этого жили только за счёт самораскрутки, в основном. Новых случайных игроков было минимум).
    Во-вторых, на неё всё равно продолжают сидеть люди и продолжают появляться желающие открыть на ней сервер.

    Цитата Сообщение от Kovshevoy Посмотреть сообщение
    Про использовании функции один раз. Я вот у себя в моде её использую не 1 раз, а гораздо больше, поэтому и вырезал от туда. Если кто-то желает отставить стандартную функу, то пусть использует:
    Я прекрасно понимаю, что это функция из твоего мода и ты её используешь часто. Но, повторюсь: зачем она тут? Уж мог бы приложить чуть больше усилий и скопировать код из функции прямо в команду перед публикацией. Тебе не сложно, а новичок, который наткнётся на твою тему, не создаст у себя дополнительную бесполезную для него функцию, которая ещё и может быть с уже занятым названием.

    Ну и что в первом, что во втором случае - крайне странный подход у тебя с твоим "сделай сам". Если уж публикуешь код - будь готов сделать это максимально качественно. А иначе смысл от такого кода теряется.


    Цитата Сообщение от Kovshevoy Посмотреть сообщение
    Как говорят мудрейшие - не нравится, сделай сам.
    Меня всё полностью устраивает, я не гонюсь за идеалом. Меня устраивает такой стиль кода и устраивает подобная реализация.
    Я-то сделаю, но зачем тогда твой код нужен на этом форуме? Если тебя всё устраивает в своём коде, то и оставь его при себе. Зачем публиковать?
    А уж если решил опубликовать, то будь открытым к советам и критике, которые делаются не чтоб тебя обидеть, а чтоб тебе помочь (а заодно и тем, что решит твоим кодом воспользоваться).


    Цитата Сообщение от Kovshevoy Посмотреть сообщение
    Да только как я заметил практически большую часть юзеров которые кодят нестандартными (не п-ишными) методами, зачастую при виде схожего кода как предоставил я, начинает метать из стороны в сторону и все пытаются надоумить сделать лучше. Я нигде вроде не говорил, что это САМАЯ МЕНЕЕ ЗАТРАТНАЯ ПО ПАМЯТИ И МАКСИМАЛЬНО ОПТИМИЗИРОВАННАЯ КОМАНДА КОТОРУЮ ОБЯЗАН ИСПОЛЬЗОВАТЬ КАЖДЫЙ. Тем более, мы кодим на каком-то там павне и даже та реализация, которую предоставил я - уже более менее хороший вариант, нежели как все делают по стандарту.
    Во-первых, странно свои косяки оправдывать другими людьми.
    Во-вторых, речь не о том, что твой код какой-то там не такой в плане оптимизации (точнее, это менее приоритетный вопрос в данном случае). Речь о банальной логике, которая, в данном случае, напрочь отсутствует. Метод подсчёта, который ты используешь, хорош своей частичной автоматизацией. Но ты эту самую автоматизацию убиваешь, заставляя вручную подсчитывать размер двух строк, при том, что можно и подсчёт их размера автоматизировать.


    Цитата Сообщение от Kovshevoy Посмотреть сообщение
    Мастурбирование на экономию памяти (или как говорят на п-и стэкодрочеры)
    Только этим ты никак память не экономишь. Скорее, ты её расходуешь ещё больше. Вот, почитай - http://pro-pawn.ru/showthread.php?16...ll=1#post92930
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    11.07.2015
    Сообщений
    190
    Репутация:
    25 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Только этим ты никак память не экономишь. Скорее, ты её расходуешь ещё больше памяти. Вот, почитай - http://pro-pawn.ru/showthread.php?16...ll=1#post92930
    Я изучал большую часть твоим тем, где ты отвечаешь и подробно описываешь то или инное действие юзеров, ибо уважаю тебя как кодера и более чем уверен в твоем скилле, так что с данным топиком я знаком. И раз уж на то дело пошло, может ты тогда создашь топик с подробным описанием про стэк с приведением примеров и тестов? Просто переправлять на тему, где ты отвечаешь юзеру конкретно за глобальные массивы подсчета строк, хотя это косвенно относится к тебе - такой себе вариант.
    А касаемо глобальных массивов я их не использую, ибо это ни что инное как ПСЕВДОоптимизация (учитывая даже то, что вроде на Стейдже, Гамбите и еще парочке довольно таки популярити проектов используют глобальный массив, опираясь на слитые оригинальные моды, я все равно не использую и ни в коем случае не рекомендую использовать глобальный массив таким образом, которым его используют юзеры).

    Цитата Сообщение от DeimoS Посмотреть сообщение
    Я-то сделаю, но зачем тогда твой код нужен на этом форуме? Если тебя всё устраивает в своём коде, то и оставь его при себе. Зачем публиковать?
    А уж если решил опубликовать, то будь открытым к советам и критике, которые делаются не чтоб тебя обидеть, а чтоб тебе помочь (а заодно и тем, что решит твоим кодом воспользоваться).
    По твоей логике на форумах можно лишь оставить тогда мануалы по созданию команд/систем/функций, но никак не выкладывать готовое, что могут использовать юзеры. Я вот не нашел ни на одном из форумов команду с требуемыми параметрами, которые нужны мне и поэтому написал её сам, и выложил, чтобы если какому-либо юзеру понадобилась данная команда - она уже тут есть, он может её спокойно взять и вставить в мод, причем из дополнительных костылей я только привел свою функцию SetPlayerPosEx, но да ладно, я её уже убрал из темы просто вставив код из неё непосредственно в команде.

    Цитата Сообщение от DeimoS Посмотреть сообщение
    Только, во-первых, её и так было довольно проблематично скачать, ибо Куй не писал о ней на сайте особо. Так что для 0.3DL ситуация с этим "запретом" не особо изменилась (разве что отключение мастер-листа чуть сильнее повлияло, но и то это не смертельно, ибо сервера, в любом случае, до этого жили только за счёт самораскрутки, в основном. Новых случайных игроков было минимум).
    Во-вторых, на неё всё равно продолжают сидеть люди и продолжают появляться желающие открыть на ней сервер.
    На официальном форуме удалены всевозможные топики и её не скачать с официального сайта. Сам клиент и сервер валяется на просторах интернета, но я не могу ручаться на то, что в этих версиях что-то не изменено. Можно скачать конечно с официального сайта Абсолюта, которые дорабатывают эту версию, но я тоже не могу ручаться, что в их файла нет вредоносного кода.
    Если какому-либо из юзеров потребовалось бы использовать и скины для 0.3DL ветки, и он бы попросил сбросить код - я бы предоставил, это не столь трудно.

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

    Обновлена команда - убрана костыль функция SetPlayerPosEx (теперь все действия происходят внутри команды), подправлены #define к данным передающимся запросом, добавлена поддержка 0.3DL скинов, создан массив со значением is_tmp, для автоматического подсчета.
    Последний раз редактировалось Kovshevoy; 17.12.2019 в 22:14.

  8. Пользователь сказал cпасибо:
    DeimoS (17.12.2019)
  9. #17
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Kovshevoy Посмотреть сообщение
    Просто переправлять на тему, где ты отвечаешь юзеру конкретно за глобальные массивы подсчета строк, хотя это косвенно относится к тебе - такой себе вариант.
    Эмм...
    1) Когда ты используешь оператор "static", ты и так создаёшь глобальный массив...
    2) В теме я описывал принцип работы стека, а не "принцип работы стека относительно глобальных массивов".


    Цитата Сообщение от Kovshevoy Посмотреть сообщение
    По твоей логике на форумах можно лишь оставить тогда мануалы по созданию команд/систем/функций, но никак не выкладывать готовое, что могут использовать юзеры.
    Нет, по моей логике если ты публикуешь куда-либо код, то этот код должен:
    1) Быть качественным.
    2) Соответствовать нормам, которые приняты в сообществе, где ты этот самый код публикуешь (это банальная вежливость, если не рассматривать аспекты, связанные с пользой для других).


    Цитата Сообщение от Kovshevoy Посмотреть сообщение
    На официальном форуме удалены всевозможные топики и её не скачать с официального сайта.
    Эмм, повторяю ещё раз: до этого, чтоб скачать 0.3DL, приходилось либо вручную вбивать адрес файлопомойки сайта sa-mp.com, где хранятся все версии и к которой Куй, судя по всему, закрыл доступ (files.sa-mp.com), либо выискивать тему на официальном сайте. Как итог: о 0.3DL знают, в основном, за счёт того, что сами сервера активно пиарят себя, а не потому что этому способствует информация с оф.сайта.
    Иными словами, "запрет" никак особо не повлияет на 0.3DL, ибо её, фактически, "запретили" ещё в момент, когда Куй отказался продолжать её дорабатывать.

    Цитата Сообщение от Kovshevoy Посмотреть сообщение
    Если какому-либо из юзеров потребовалось бы использовать и скины для 0.3DL ветки, и он бы попросил сбросить код - я бы предоставил, это не столь трудно.
    Так а что мешает сразу сделать код более универсальным?
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    11.07.2015
    Сообщений
    190
    Репутация:
    25 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Так а что мешает сразу сделать код более универсальным?
    Если юзер по ошибке введет значения от 20к до 30к, появиться скин CJ (возможно, это всего лишь догадки)
    Юзер сразу прибежит в тему кричать, что БАГАННАЯ КОМАНДА.

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

    Цитата Сообщение от DeimoS Посмотреть сообщение
    Нет, по моей логике если ты публикуешь куда-либо код, то этот код должен:
    1) Быть качественным.
    2) Соответствовать нормам, которые приняты в сообществе, где ты этот самый код публикуешь (это банальная вежливость, если не рассматривать аспекты, связанные с пользой для других).
    Мой код не максимально качественный, но качественный.
    Нормы которые приняты в сообществе? Это сообщество - в пределах данного форума.
    На лайткоде иногда выбрасывали код схожий который используется в основном на п-п, но не более.
    Последний раз редактировалось Kovshevoy; 17.12.2019 в 23:46.

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

    Статус
    Оффлайн
    Регистрация
    11.07.2015
    Сообщений
    190
    Репутация:
    25 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Эмм, повторяю ещё раз: до этого, чтоб скачать 0.3DL, приходилось либо вручную вбивать адрес файлопомойки сайта sa-mp.com, где хранятся все версии и к которой Куй, судя по всему, закрыл доступ (files.sa-mp.com), либо выискивать тему на официальном сайте. Как итог: о 0.3DL знают, в основном, за счёт того, что сами сервера активно пиарят себя, а не потому что этому способствует информация с оф.сайта.
    Иными словами, "запрет" никак особо не повлияет на 0.3DL, ибо её, фактически, "запретили" ещё в момент, когда Куй отказался продолжать её дорабатывать.
    0.3DL файлы (сервер и клиент) лежали не на "файлопомойке" сайта sa-mp.com, а в папках форума (forum.sa-mp.com/files) и где-то там дальше.
    Соответственно, ссылки уже невалидные, так как файлы удалены.
    Кстати, папка с ДЛ версией удалена, а с 0.3.8 - осталась (клик)

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

    Обновлено: Добавлена проверка на версию 0.3DL путем проверки объявленной функции.
    Последний раз редактировалось Kovshevoy; 17.12.2019 в 23:50.

  12. #20
    Аватар для execution
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.03.2018
    Сообщений
    255
    Репутация:
    24 ±
    1. static const save_skin_query[] = "UPDATE "TABLE_ACCOUNTS" SET "COLUMN_SKIN" = %d WHERE "COLUMN_ID" = %d";

    ->
    1. static const save_skin_query[] = "UPDATE "#TABLE_ACCOUNTS" SET "#COLUMN_SKIN" = %d WHERE "#COLUMN_ID" = %d";

    Не?

 

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

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

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

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

Ваши права

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