Delete
Вид для печати
Delete
Скрин )
Kurbanoff
Вам скрин чего?
Теперь каждый раз новую тему будете создавать? Можно нажать кнопку ''Редактировать'', и отредактировать старую тему.
Хотел бы увидеть скрины вашего сервера , где уникальные системы или красота :good:
Osetin
Новую тему? Она единственная
Запрещено выкладывать моды, сделанные на основе RLS. (Shitcode lovers - go hack yourself).
Zangetsu
RLS? :sarcastic: Уважаемый, где вы тут увидели RLS?
Вы свой пост читали или вдумывались в то, что пишите?
Цитата:
Приветствую всех! С вами снова Vano_Glad со своей новой версией мода Less Global-RP v2.2 [NEW EDITION]. Мод будет разрабатываться дальше и улучшаться в лучшую сторону. Скоро о старом и назойливом RLS вы сможете забыть!
gangzone.ini
Уважаемый, вы не поняли просто смысла этого сообщения :) Если не знакомы с предыдущими версиями, то лучше просто ничего не пишите
"Улучшенный" мод на основе RLS? :lol:
gangzone.ini
Уважаемый, включите свои мозги, скачайте мод и протестируйте его. И не несите такую ересь, насчет того, что данный мод - RLS.
Zangetsu
Это не RLS :facepalm:
Проверил - да, это не RLS. Но при взгляде на код всё равно возникает какое-то ощущение дежавю.
Например, часть макросов и переменных написана на транслите:
PHP код:
#define COLOR_SERYI 0xE6E6E6E6
#define COLOR_OTVET 0x83F9C8AA
#define COLOR_ALMAZ 0x00FFD5AA
#define MOROZ(%0) TogglePlayerControllable(playerid, %0);
new bool: akk[MAX_PLAYERS];
new bool: Dostup[MAX_PLAYERS];
new bool: Popitka[MAX_PLAYERS];
Одни переменные названы с маленькой буквы, другие - с большой. Определитесь уже.
PHP код:
new Menu: bomj[2];
new SelectCharPlace[MAX_PLAYERS];
new Parol[MAX_PLAYERS];
new TimerAkk[MAX_PLAYERS];
new arendascooter[MAX_PLAYERS];
Также в половине макросов не нужно ставить скобки и точку с запятой после функции - так макросы функций не делаются.
Такого даже в RLS не было.
Кроме того, часть макросов названа в верхнем регистре, часть - в нижнем. Опять же, отсутствие каких-либо вменяемых стандартов.PHP код:
#define com if(Login[playerid] == false) return SCM(playerid, COLOR_GREY, "Необходимо авторизоваться!");
#define flood if(AntiFlood[playerid] > gettime()) return SCM(playerid, COLOR_RED, "Не флуди!"); AntiFlood[playerid] = gettime()+1;
#define ESCM SCM(playerid, COLOR_GREY, "Вы не уполномочены использовать эту команду!");
#define ISCM SCM(playerid, COLOR_GREY, "Игрок не найден!");
#define LSCM SCM(playerid, COLOR_GREY, "Игрок не авторизовался!");
И... иногда есть некоторые вещи невозможно объяснить словами:
PHP код:
#define Kickk SetTimerEx("kick", 20, false, "i", playerid);
#define publics%0(%1) forward%0(%1); public%0(%1)
Едем дальше.
Это такая неудачная шутка, да?Код:public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
new string[1400];
Как думаете, что это? Переменная, в которую записывается ID какого-то скутера?PHP код:
new scooter;
Да нифига подобного - это ID пикапа. Естественно, нельзя узнать об этом, не обыскав весь мод.PHP код:
stock Pickups()
{
scooter = CreatePickup(19134, 23, 1160.5629,-1771.9706,16.5938);
}
Шаг 1: Зарегистрироваться с паролем "a';DROP TABLE `accounts`;--" (без кавычек).PHP код:
format(src,sizeof(src),"`Pass` = '%s'",Player[i][pPass]);
Шаг 2: ...
Шаг 3: PROFIT.
В общем, назвать это "RLS" нельзя. Скорее, "new.pwn со всеми ужасами кодинга, перенесёнными из RLS на новый мод".
В текущем виде для обучения скриптингу не годится. Я бы упомянул о Правилах раздела, но, по-моему, тут уже нет смысла.
А ведь этот мод хотели продавать :declare:
Daniel_Cortez
Уважаемый Daniel_Cortez, нисколько не сомневаюсь в ваших знаниях по pawn, но давайте по-порядку.
1. Переменные называю как хочу - моё право. Неважно, как они названы, от того, что я поменяю имена этим переменным, мод работать лучше не станет.
2. Насчёт new string[1400]; Что тут не так? Насколько мне известно, чтобы уместить огромный текст в диалоге, по другому не сделать.
3. Многое вами сказанное делает вывод о том, что вам просто уже не к чему придраться, и вы начинаете придираться к мелочам, которые на работоспособность мода не повлияют.
Делаем итог: Я НЕ считаю это "нубо-кодингом". Из RLS ничего не было перенесено, разве что только принцип оформления и названия некоторых переменных. И в этом нет ничего плохого
[сарказм]Правильно, а читаемость кода и простота сопровождения - это так, мелочи...[/сарказм]
Вы про этот, что ли?
К вам встречный вопрос: а зачем форматировать этот текст при каждом вызове? Содержимое строк как-то изменяется между показами диалога?PHP код:
f("%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", Pravila[0],Pravila[1],Pravila[2],Pravila[3],Pravila[4],Pravila[5],Pravila[6],Pravila[7],Pravila[8],Pravila[9],Pravila[10],Pravila[11],Pravila[12],Pravila[13],Pravila[14],Pravila[15],Pravila[16],Pravila[17],Pravila[18]);
Достаточно объявить массив string отдельно в каждой ветке case и адекватно рассчитать его размер, исходя из ситуации.
Касаемо диалога с правилами: http://pro-pawn.ru/showthread.php?10012
В вашем случае нужно один раз (именно один раз, а не перед каждым показом диалога - в OnGameModeInit, например) пройтись циклом по массиву строк (от 0-го до предпоследнего элемента) и заменить символы конца строки ('\0') на перенос строки ('\n').
Как я уже сказал, важна не только работоспособность. Пора бы уже понять это.
В подтверждение приведу цитату Мартина Фаулера:
Цитата:
Любой дурак может написать программу, которую поймёт компилятор. Хорошие программисты пишут программы, которые смогут понять другие программисты.
Об этом и была речь.
Считайте, как хотите, ваше право. Только не называйте себя после этого скриптером.
И уж тем более, не стоит выкладывать подобные поделия на всеобщее обозрение (ну разве что если вы захотите заработать + в репутацию на g-i - там и без того целая свалка говнокода). Из вашего кода новички ничему хорошему не научатся и только зря потеряют время.
Решил посмотреть "ненубовский" код.
Яндекс плохого не подскажетPHP код:
stock Register(i, passkey[])
{
new string[1400];
strmid(Player[i][pPass],passkey, 0, strlen(passkey), 20);
f("%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", Pravila[0],Pravila[1],Pravila[2],Pravila[3],Pravila[4],Pravila[5],Pravila[6],Pravila[7],Pravila[8],Pravila[9],Pravila[10],Pravila[11],Pravila[12],Pravila[13],Pravila[14],Pravila[15],Pravila[16],Pravila[17],Pravila[18]);
SPD(i, 2, DSM, "Правила сервера", string, "Далее", "Назад");
}
https://pp.vk.me/c629321/v629321894/...sLsAQTcpBQ.jpg
:sorry:
gangzone.ini
Не всё
Daniel_Cortez
Насчёт читаемости кода: Начнём с того, что в первую очередь код должен понимать, как я минимум. Пишу я его в первую очередь для себя, а не для других. Начиналась моя жизнь в pawn с мода RLS. Я привык к нему, к его оформлению, и поэтому использую я именно его. Мне так проще, для меня этот код более читаем, и здесь нет ничего плохого. Другие люди так же просто понимают этот код, поэтому здесь вы не до конца правы.
Насчёт string недопонял вас. Если вы меня в чём-то упрекаете, мол я никчемный в pawn, так наоборот бы помогли сами.
Если сравнивать ВСЕ, подчеркиваю ВСЕ паблик моды (хорошие и плохие), то мой их код с моим и рядом не стоит, если я ошибаюсь, то покажите хотя бы 2-3 мода с кодом в целом, который был бы лучше моего.
Zangetsu
Ну извините! Писал мод на скорую руку, ему ещё и недели нет. И вы снова начинаете придираться к мелочам, чтобы (как я считаю) тупо набить себе посты
Ну нужно же как-то развиваться, да и зачем вам такие директивы? Что вы на них возлагаете? Да и везде практически точка с запятой. Зачем?? Стоит такая в команда adm и ты такой - «wtf? Что это? Зачем? Удалю ка я это гавно и сделаю по своему!» :good2:
Я и сам не прочь что-то перенести на definePHP код:
#define f( format(string, sizeof(string),
#define GN(%1) Player[%1][pName]
#define Kickk SetTimerEx("kick", 20, false, "i", playerid);
#define publics%0(%1) forward%0(%1); public%0(%1)
#define MOROZ(%0) TogglePlayerControllable(playerid, %0);
#define com if(Login[playerid] == false) return SCM(playerid, COLOR_GREY, "Необходимо авторизоваться!");
#define flood if(AntiFlood[playerid] > gettime()) return SCM(playerid, COLOR_RED, "Не флуди!"); AntiFlood[playerid] = gettime()+1;
#define ESCM SCM(playerid, COLOR_GREY, "Вы не уполномочены использовать эту команду!");
#define ISCM SCM(playerid, COLOR_GREY, "Игрок не найден!");
#define LSCM SCM(playerid, COLOR_GREY, "Игрок не авторизовался!");
#define adm if(Player[playerid][pAdmin] > 0 && Dostup[playerid] == false) return SPD(playerid, 11, DSI, "Админ-авторизация", "{FFFFFF}Для авторизации в админ-панель\nвведите свой админ-пароль:", "Далее", "Выход");
Просто так писать код проще, ну для меня, да и использование такого ничем вас не затруднит. Но от части это и есть говнокод, но я без этого уже не могу))0)PHP код:
// к примеру
#define function%1(%2) \
forward %1(%2); public %1(%2)
#define Format(%1,%2,%3) \
(format(%1,sizeof(%1),%2,%3))
#define SendFormatMessage(%0,%1,%2,%3,%4) \
format(%1,sizeof(%1),%3,%4), SendClientMessage(%0,%2,%1)
#define SendFormatMessageToAll(%0,%1,%2,%3) \
format(%0,sizeof(%0),%2,%3), SendClientMessageToAll(%1,%0)
Zangetsu
Если честно, то я не понял смысл вашего сообщения
Зачем тогда выкладывать в общий доступ?! Повторяюсь, на g-i выложили бы, может Вас похвалили бы, но не тут, о каком набивании идёт речь? Это обычная критика, и она не запрещена правилами Pro-Pawn.Ru. Если выкладываете мод, ждите отрицательной критики, как в нашем случае.
gangzone.ini
Я ожидал отрицательной критики, но не: тупой, неаргументированный и бессмысленной... И я не жду никакой похвалы
Вы не учли только одного: здесь не g-i и за переменные на транслите и отсутствие стандартов вас здесь по голове никто не погладит.
Возможно, будет понятнее из примера кода.
PHP код:
#include <a_samp>
// строки,
new long_text[4][8] =
{
{"строка1"},
{"строка2"},
{"строка3"},
{"строка4"}
};
public OnGameModeInit()
{
for (new i=0, j; i < sizeof(long_text) - 1; ++i) // от 1 до 3 строки
for (j = 0; j < sizeof(long_text[]); ++j) // перебираем каждый символ в строке
if(long_text[i][j] == '\0') // если это символ конца строки - ...
{
long_text[i][j] = '\n'; // ... заменяем его на символ переноса
break;
}
// после этого строки будут "сцеплены" в одну, остаётся только проверить получившийся результат
print(long_text[0]); // обращение к строке происходит не как к "long_text", а как к "long_text[0]"
}
Помочь? В плане чего?
Касаемо той строки для диалога - я привёл пример кода выше. Надеюсь, для вас не составит труда разобраться и адаптировать свой случай с диалогом.
По поводу всего остального - проще будет переписать мод с 0, чем пытаться исправить ваш код. Естественно, я этим заниматься не собираюсь.
Многие рекомендации по скриптингу я собрал в одной теме. Здесь и стиль кодинга, и разъяснение некоторых распространённых ошибок.
За себя могу сказать, что если б я хотел набить себе посты, я мог бы просто отредактировать их кол-во через настройки в админ-меню. Тем не менее, у меня в статистике не миллион постов, а всего лишь 600 с лишним, и это очень просто объясняется давностью регистрации и активностью на портале.
По поводу остальных участников форума - обоснуйте.
Daniel_Cortez
Если я вас правильно понял, то к примеру в:
Точка с запятой и скобки не требуются. Я решил проверить. Удалил просто одну точку с запятой и мод выдал ошибку на отсутствие этого знака препинанияPHP код:
#define ESCM SCM(playerid, COLOR_GREY, "Вы не уполномочены использовать эту команду!");
#define ISCM SCM(playerid, COLOR_GREY, "Игрок не найден!");
#define LSCM SCM(playerid, COLOR_GREY, "Игрок не авторизовался!");
#Vito
И в чём же тогда разница моего варианта и этого?
Во-первых, большими буквами обычно называют константы. Примеры: MAX_PLAYERS, MAX_VEHICLES, MAX_PLAYER_NAME (на самом деле это макросы, но они маскируются именно под константы, а не под функции, а потому и правила задания имён те же, что и у констант).
Во-вторых, если "SCM" - это сокращение от "SendClientMessage", то что означают "ESCM", "ISCM" и "LSCM"? Что означают первые буквы в этих названиях? Только не говорите, что это просто рандомные буквы.
В-третьих, вы делаете макросы непохожими на обычный код на Pawn.
Макросы должны быть похожими на настоящие функции. Например, так:
Но ни в коем случае не вот так:PHP код:
LSCM();
Такой код приведёт читателя в замешательство, если он не знаком с вашими заморочками.PHP код:
LSCM
И не стоит забывать о том, что названия должны быть в первую очередь понятными.
Вы когда-нибудь видели, чтобы у функций SA:MP вместо нормальных названий были аббревиатуры? (HTTP в счёт не брать, эта аббревиатура достаточно широко известна, gpci - тоже, куй явно не задумывался над названием, всё равно функция скрытая)
Поэтому в случае с LSCM могу предложить такой вариант:
Здесь из названия сразу можно понять, что этот макрос отправляет игроку сообщение о том, что он не авторизован.PHP код:
#define SendUnauthorizedPlayerMsg(); SendClientMessage(playerid, COLOR_GREY, "Игрок не авторизовался!");
Daniel_Cortez
Нет. Это не рандомные буквы. Я делал для себя небольшие подсказки. Например: ESCM - что-то типо else SCM, LSCM - Login SCM и т.д. Не видел. И в чём же плоха такая уникальность? Лично мне так удобнее работать с ними. Мне уже тогда будет проще скопировать данную функцию и вставить ещё раз, нежели писать её ещё длинее. В этом и смысл был моего сокращения - удобство (Как минимум для меня).
И почему эта тема не удаляется? Судя по правилам раздела, она должна быть уже удалена давно. Или не выкладываете её? Есть моды на этом сайте, у которых код намного хуже, чем у меня (на ваш взгляд). Тем более я уже подготовил новую версию... Опубликуете - Обновления для данного мода будут. Не опубликуете - тут понятно
gangzone.ini
Не знаете - не говорите. Другим людям так же понятен мой код.Цитата:
"И в чем же плоха такая уникальность" - в том что, только Вам понятен данный код.
"Лично мне так удобнее работать с ними" - вот именно, что Вам, а не другим людям.
Вот получу когда ответ, будут ли вообще публиковать мой мод или нет, тогда и оформлю как надоЦитата:
А что опубликовывать?
Код:
Delete
Последний раз редактировалось Vano_Glad; 26.09.2015 в 14:05
gangzone.ini
Мне как бы без разницы
Роуди.
Давайте без сарказма. Я не говорил, что он "уникальный"