Просмотр полной версии : [RP] Разработка с 0 (f0Re3t Role Play)
Добрый день пользователи портала.
Делать было нечего и решил я написать мод с 0, но через пару дней не стало времени на его разработку. Поэтому выкладываю его на общее обозрение.
Основная информация:
Мод работает на последней версии mysql.
Команды планировались на dc_cmd + sscanf.
В моде реализовано не очень всего многого:
Система регистрации и авторизации на ORM.
Автоматический выбор одежды для персонажа после регистрации.
Система денег (защита от получения нечестным путем).
Начата разработка уровня персонажа (сделана только выдача после появления и переменная под уровень).
В моде есть одна мелкая недоработка, а именно не перезаписывается переменная user_last_address (последний IP адрес с которого входили). Исправить очень просто - добавить при отключении игрока запись в нее нового IP адреса.
Все пароли игрока кодируются в SHA256 режиме (новая фишка в 0.3.7). Код написан лесенкой, оптимизирован по моим возможностям.
Приму в свой адрес критику и доработки для улучшения мода (возможно продолжу разработку в будущем).
На момент выкладывания данной темы работоспособность мода была проверена.
Исходный код: http://pastebin.com/i2Vf8pZG
Ссылка на скачивание: https://yadi.sk/d/n0RjGDSGiTuBk
Ссылка на скачивание базы данных: https://yadi.sk/d/4xkd2MWpiTuHk
Проверка на вирусы: https://www.virustotal.com/ru/file/61024f7dfefee43d70fae2ca30c895042469030286910a8f6f b4593c413c6003/analysis/1439650928/
$continue$
15.08.2015, 19:10
Сурс код где?
http://i.imgur.com/HP8p3sO.png
5 пункт
Сурс код где?
http://i.imgur.com/HP8p3sO.png
5 пункт
Там же все есть.
$continue$
15.08.2015, 19:22
Там же все есть.
Где там? Почему, я должен что - то скачивать, что - бы посмотреть исходный код?
Pastbin/Gist - в студию.
Где там? Почему, я должен что - то скачивать, что - бы посмотреть исходный код?
Pastbin/Gist - в студию.
Я вам ничего не должен. В правилах сказано чтоб все было для запуска сервера. Там все есть, если вам лень скачать - ваше дело.
$continue$
15.08.2015, 19:28
Я вам ничего не должен. В правилах сказано чтоб все было для запуска сервера. Там все есть, если вам лень скачать - ваше дело.
Вчитайтесь в слова:
Должен быть опубликован весь исходный код выкладываемого мода
Вчитайтесь в слова:
Должен быть опубликован весь исходный код выкладываемого мода
Держи - http://pastebin.com/i2Vf8pZG
$continue$
15.08.2015, 19:34
Держи - http://pastebin.com/i2Vf8pZG
Можно узнать? Смысл использование ORM сценариев?
Можно узнать? Смысл использование ORM сценариев?
Сокращение кода, удобность использования.
Desulaid
15.08.2015, 19:50
Лучше делать все макросы в верхнем регистре, дабы отличить от переменной. Я про
#define mysql_hostname "localhost"
#define mysql_username "root"
#define mysql_database "f0Re3t"
#define mysql_password ""
Да и местами код не табулирован. NP++ может оттабулировать все :good2:
:bad:
publics: ..
Лучше делать все макросы в верхнем регистре, дабы отличить от переменной. Я про
#define mysql_hostname "localhost"
#define mysql_username "root"
#define mysql_database "f0Re3t"
#define mysql_password ""
Да и местами код не табулирован. NP++ может оттабулировать все :good2:
:bad:
publics: ..
1. Не очень люблю текст большими буквами поэтому так и делал.
2. В *.pwn файле все нормально же.
3. А что не так с publics?
Desulaid
15.08.2015, 20:03
1. Не очень люблю текст большими буквами поэтому так и делал.
2. В *.pwn файле все нормально же.
3. А что не так с publics?
Код скриптера с Г-И =)
Код скриптера с Г-И =)
Понятно. Так-то можно дать название любое :)
Desulaid
15.08.2015, 20:29
Понятно. Так-то можно дать название любое :)
Ну и мод можно написать свой :3 Но код должен быть более эстетичным :dirol:
Ну и мод можно написать свой :3 Но код должен быть более эстетичным :dirol:
Какая разница как выглядит код? Если ему удобно так, то пусть пишет как хочет, если вам надо то скачайте мод и переименуйте все, что вам надо.
Какая разница как выглядит код? Если ему удобно так, то пусть пишет как хочет, если вам надо то скачайте мод и переименуйте все, что вам надо.
Скажем так, люди пропагандируют эту тему (http://pro-pawn.ru/showthread.php?8347-%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5-%D1%80%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D0%B0%D1%86%D0%B8%D0%B8-%D0%BF%D0%BE-%D0%BD%D0%B0%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8E-%D0%BA%D0%BE%D0%B4%D0%B0), тем самым критикуя тех, кто не придерживается данной темы.
Какая разница как выглядит код? Если ему удобно так, то пусть пишет как хочет, если вам надо то скачайте мод и переименуйте все, что вам надо.
дело в том, что портал хочет искоренить "быдлокодинг" в публикуемых материалах, отсюда и подобные рекомендации к написанию кода. Ведь, качают моды из этого раздела, в основном, новички, а кто им будет объяснять за что отвечает какая либо переменная?
vladua100
19.08.2015, 13:07
Но код должен быть более эстетичным :dirol:
А уроки должны быть поучительными
При использовании char мы устанавливаем границы каждой ячейки массива: от 0 и до 255.
Тип char лишь запаковывает
[Урок] char массивы
При использовании char мы устанавливаем границы каждой ячейки массива: от 0 и до 255.
Каждая ячейка может принимать 256 значений.
Все постигается в сравнении
Давайте создадим обычный массив.
new example_1[MAX_PLAYERS];
Тут мы используем 1000*4 байт, то есть 4000 байт.
Пояснение:
если заглянуть в a_samp.inc, то можно увидеть, что по стандарту максимальное количество MAX_PLAYERS равно 1000 (с выходом 0.3.7 клиента)
4 - количество байт, занимаемых целочисленным типом.
Давайте создадим массив типа char.
new example_2[MAX_PLAYERS char];
Вот она наша оптимизация. Здесь мы используем 1000/4*4 байт, то есть 1000 байт. Не плохо. Да?
Пояснение:
Каждая ячейка равна 4 байтам. Тип char лишь запаковывает округленный вверх результат деления числа, стоящего перед ним, на 4.
Пример использования
Чтобы обратиться к массиву типа char, мы используем не квадратные скобочки, а фигурные.
// создаем
new example_2[MAX_PLAYERS char];
// обращаемся к нему
example_2{playerid}//...
Во всем остальном, массив типа char такой же как и обычный массив и использование его точно такое же.
// обратимся к конкретному игроку с ID 123
example_2{123}//...
Не знаю, нужно ли вам показывать вызов массива, но может кому-нибудь и будет интересно.
new no_char_[MAX_PLAYERS];
// будет вызван no_char_[1000];
Помните, что массивы типа char можно не везде использовать и нужно их использовать правильно.
// ничего у вас не получится!
enum enum_example
{
//..
};
new example_3[MAX_PLAYERS char][enum_example];
new array_char[MAX_PLAYERS char];
array_char{playerid} = INVALID_PLAYER_ID; // воу, полугче
Я не понял как это 256 значений
Мы объявляем массив, в котором будут записаны: буквы в различных регистрах, цифры и символы.
new example_4[6] = "Darge";
Или
new example_5[6] = {'D', 'a', 'r', 'g', 'e', '\0'};
Вот как это выглядит наглядно (что мы подразумеваем)
https://pp.vk.me/c7010/v7010006/6fb/T7EJMYfkcKU.jpg
если не грузит (https://pp.vk.me/c7010/v7010006/6fb/T7EJMYfkcKU.jpg)
https://pp.vk.me/c627321/v627321894/b436/cltHtT5FdmU.jpg
если не грузит (https://pp.vk.me/c627321/v627321894/b436/cltHtT5FdmU.jpg)
Еще один момент
// Не правильно!
// Почему?
// Смотри самый верх темы!
example{playerid} = 256;
// Правильно
example{playerid} = 255;
Все возможные принимаемые значения в приведенной таблице (см. выше)
Автор урока: Darge
Какая разница как выглядит код? Если ему удобно так, то пусть пишет как хочет, если вам надо то скачайте мод и переименуйте все, что вам надо.дело в том, что портал хочет искоренить "быдлокодинг" в публикуемых материалах, отсюда и подобные рекомендации к написанию кода. Ведь, качают моды из этого раздела, в основном, новички, а кто им будет объяснять за что отвечает какая либо переменная?
Он пинает человека за то, что тот использовал по назначению директиву замены текста. В самом коде, безусловно, есть за что зацепиться и этого там не мало. Например:
SetGameModeText(""name_modifications"");
SetTimer("SAPI", 1000, true);
publics: SAPI()
{
for(new cycle = 0; cycle <= GetPlayerPoolSize(); cycle ++)
{
SAPI_money(cycle);
if(temporary[cycle][flood_kick] > 0) temporary[cycle][flood_kick] --;
}
return true;
}
Или, например, объявление переменных в отдельном файле
Так что мне непонятна подобная реакция на
#define publics:%0(%1) forward %0(%1); public %0(%1)
Desulaid
19.08.2015, 14:48
Мой супер крутой аля урок был написал по просьбе одно человечека и по данным мне рекомендациям. По шаблонам. :rtfm: Сам то я знаю не очень и много =)
Код должен быть понятным, а то слова типа "publics". Что вообще означает? Паблики? В этом паблике паблики? Или что? По рекомендации я использую "function". Да и название оправдывает содержимое :3.
#define function%1(%2) \
forward %1(%2); public %1(%2)
function PlayerEatBanana(playerid)
{
// Ом ном ном как вкусно
}
Любой дурак может написать код, понятный компьютеру. Хороший программист пишет код, понятный человеку. © Мартин Фаулер
Он пинает человека за то, что тот использовал по назначению директиву замены текста. В самом коде, безусловно, есть за что зацепиться и этого там не мало.
name_modifications - модификация имени. Какого имени? Имени чего? Игрока? Функции? Сервера? Я должен пролистать код, чтобы понять это. Не практичный вариант, хоть и правильно использован.
SAPI - вот это что, серверный API? Чет не я врубаюсь :)
Если даже все это оставить, то можно оставить подсказку для будущих разработчиков.
// Как пример:
// Отображаемое имя в клиенте в столбце "Mode"
#define name_modifications "« Role Play 0.3.7 »"
И вопросы сразу отпадают. И я бы не стал сравнивать правильное использование с правильным кодом. Вот тебе было бы приятно видеть в моде что-то вроде этого.
#define new_name(%0,%1) \
(GetPlayerName(%0,%1,MAX_PLAYER_NAME))
new a[MAX_PLAYER_NAME];
new_name(playerid, a);
Конечно же нет! Кто такой мазахист, чтобы такое использовать.
Только если вдруг решите выложить такой код в паблик - не удивляйтесь, если для других он будет трудночитаемым.
Оценить рекомендации => (http://pro-pawn.ru/showthread.php?8347)
$continue$
19.08.2015, 15:18
Или, например, объявление переменных в отдельном файле
Конечно, лучше на быдлокодить в одном файле?
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot