PDA

Просмотр полной версии : [RP] Разработка с 0 (f0Re3t Role Play)



f0Re3t
15.08.2015, 19:04
Добрый день пользователи портала.
Делать было нечего и решил я написать мод с 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 пункт

f0Re3t
15.08.2015, 19:12
Сурс код где?
http://i.imgur.com/HP8p3sO.png
5 пункт

Там же все есть.

$continue$
15.08.2015, 19:22
Там же все есть.

Где там? Почему, я должен что - то скачивать, что - бы посмотреть исходный код?
Pastbin/Gist - в студию.

f0Re3t
15.08.2015, 19:25
Где там? Почему, я должен что - то скачивать, что - бы посмотреть исходный код?
Pastbin/Gist - в студию.

Я вам ничего не должен. В правилах сказано чтоб все было для запуска сервера. Там все есть, если вам лень скачать - ваше дело.

$continue$
15.08.2015, 19:28
Я вам ничего не должен. В правилах сказано чтоб все было для запуска сервера. Там все есть, если вам лень скачать - ваше дело.

Вчитайтесь в слова:

Должен быть опубликован весь исходный код выкладываемого мода

f0Re3t
15.08.2015, 19:30
Вчитайтесь в слова:

Должен быть опубликован весь исходный код выкладываемого мода

Держи - http://pastebin.com/i2Vf8pZG

$continue$
15.08.2015, 19:34
Держи - http://pastebin.com/i2Vf8pZG

Можно узнать? Смысл использование ORM сценариев?

f0Re3t
15.08.2015, 19:35
Можно узнать? Смысл использование 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: ..

f0Re3t
15.08.2015, 19:55
Лучше делать все макросы в верхнем регистре, дабы отличить от переменной. Я про



#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?

Код скриптера с Г-И =)

f0Re3t
15.08.2015, 20:06
Код скриптера с Г-И =)

Понятно. Так-то можно дать название любое :)

Desulaid
15.08.2015, 20:29
Понятно. Так-то можно дать название любое :)

Ну и мод можно написать свой :3 Но код должен быть более эстетичным :dirol:

Sp1ke
17.08.2015, 22:14
Ну и мод можно написать свой :3 Но код должен быть более эстетичным :dirol:

Какая разница как выглядит код? Если ему удобно так, то пусть пишет как хочет, если вам надо то скачайте мод и переименуйте все, что вам надо.

Роуди.
17.08.2015, 22:29
Какая разница как выглядит код? Если ему удобно так, то пусть пишет как хочет, если вам надо то скачайте мод и переименуйте все, что вам надо.

Скажем так, люди пропагандируют эту тему (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), тем самым критикуя тех, кто не придерживается данной темы.

wAx
17.08.2015, 22:44
Какая разница как выглядит код? Если ему удобно так, то пусть пишет как хочет, если вам надо то скачайте мод и переименуйте все, что вам надо.

дело в том, что портал хочет искоренить "быдлокодинг" в публикуемых материалах, отсюда и подобные рекомендации к написанию кода. Ведь, качают моды из этого раздела, в основном, новички, а кто им будет объяснять за что отвечает какая либо переменная?

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
Или, например, объявление переменных в отдельном файле

Конечно, лучше на быдлокодить в одном файле?