Кому так делать хочется. Может это как-то и необычно, но в целом как вариант довольно интересный.
Да и тем более критерий "так не делает большинство" никак не портит удобность или юзабельность чего-либо.
Вид для печати
- Алло, 2016 как слышно?
- Мы тут для констант используем перечисляемый тип.
Советую посмотреть реализацию enum'ов в C/C++/C#/Java, зачем оно и как юзаться.
И таким образом ты конструируешь костыль и велосипед. Ты мне даешь гарантии, что скриптер писавший код в 03:00 по ошибке не забудет в enum инициализировать константу? (А перечисление идет с нуля)
Пример кода, при котором скриптер просто сфлится:
Да, да я опять прыгнуть выше головы. А, то сейчас налетят голодные волки.PHP код:
enum
{
MAX_PLAYER_PASSWORD = 32,
MAX_PLAYER_EMAIL = 64,
MAX_PLAYER_CARS,
MAX_PLAYER_HOUSE = 512
};
main()
{
printf("MAX_PLAYER_PASSWORD = %d", MAX_PLAYER_PASSWORD);
printf("MAX_PLAYER_EMAIL = %d", MAX_PLAYER_EMAIL);
printf("MAX_PLAYER_CARS = %d", MAX_PLAYER_CARS);
printf("MAX_PLAYER_HOUSE = %d", MAX_PLAYER_HOUSE);
}
Хороший пример кода с enum - месяца года. Устанавливаешь январю = 1, а дальше автоматизированно будет (только, прописать название констант)
По поводу дефайна согласен, но с константой, если объявлять её с помощью const - компилятор "напомнит".
Кстати, если посмотреть на стандартные инклуды Pawn (core.inc, string.inc, float.inc), там ни одной константы не объявлено через #define, только через const (и ещё некоторые через enum, где это уместно).
... в том, что выбрал способ, с которым легко ошибиться.
Нет, ну это уже просто смешно. Может вы ещё предложите не делать в коде ни единой ошибки? Чтобы прямо вообще ни одной и всё компилировалось с первой попытки?
А оно и было очевидно с самого начала, что "красота" и "необычность" метода для вас важнее, чем надёжность. Ваша отговорка из предыдущей цитаты только подтверждает это.
Именно поэтому я даже и не рассчитываю вас переубедить - но всё же надеюсь, что у других, кто смотрит эту тему, хватит чувства здравого смысла, чтобы не повторять ваших ошибок.
Хах. Были бы ошибки, ибо я лично не использовал этот способ до сего.
Красота и необычность не противоречит здесь надёжности, так что про важность первого тоже неверно.
Если кому-то просто непривычно - господи, пусть использует то, что ему нравится, а то, что не нравится - просто не использует.
Я лично не увидел ни одного реального недостатка этого, кроме разве что использования enum'а немного не по назначению. Но существенного от этого ничего не произойдёт, а если так кому-то ещё и удобно - то причины не использовать это нет вообще.
П.с. Каким образом написали в core, string и float роли не играет. Опять-же это дело того, кто писал.
После подсчетов по этому методу , стала некорректно работать команда, да и не только команда. Код, где используется static const
PHP код:
CMD:engine(playerid,params[])
{
if(!IsPlayerLogged{playerid}) return SendMe(playerid,COLOR_GREY,!" * [A] - Сначала нужно авторизоваться!");
if(GetPlayerState(playerid) == 2 && IsPlayerInAnyVehicle(playerid))
{
if(IsVehicleBike(GetPlayerVehicleID(playerid))) return false;
if(!Engine[GetPlayerVehicleID(playerid)])
{
if(Fuel[GetPlayerVehicleID(playerid)] > 0.0)
{
if(!EngineTime[playerid])
{
new Float:vHealth;
GetVehicleHealth(GetPlayerVehicleID(playerid),vHealth);
if(OrgCarInfo[GetPlayerVehicleID(playerid)][orgcFrac] == 15 && (PVar::GetInt(playerid,"Driving") == 4 || PVar::GetInt(playerid,"Driving") == 6))
{
if(!SeatBelt{playerid} && !IsVehicleA(GetPlayerVehicleID(playerid)))
{
SendMe(playerid,COLOR_GREY,!" * Перед началом движения вы обязаны пристегнуть ремень безопасности. Вы провалили экзамен!");
PVar::SetInt(playerid,"Driving",0);
acc_RemovePlayerFromVehicle(playerid);
DisablePlayerRaceCheckpoint(playerid);
SetEngineOnOff(GetPlayerVehicleID(playerid),false);
AccountInfo[playerid][LoadCharacters{playerid}][acTestAS] = 0;
licCP{playerid} = 0;
licerror{playerid} = 0;
lictesttime{playerid} = 0;
return false;
}
}
printf("заводим");
EngineTime[playerid] = 6;
FreezePlayer(playerid);
GameTextForPlayer(playerid, "~w~€AЊYCKAEM ѓ‹…‚A¦E‡’...", 5000, 4);
static const frm_str[]=" * %s пытается запустить двигатель.";
noinit:string[sizeof(frm_str)+(-2+MAX_PLAYER_NAME)];
format(string,sizeof(string),frm_str,PlayerName(playerid));
return ProxDetector(playerid,5,string,COLOR_PURPLE);
}
else return SendMe(playerid,COLOR_GREY,!" * Нельзя так часто заводить двигатель!");
}
else return SendMe(playerid,COLOR_GREY,!" * Бензобак пуст. Вызовите механиков!");
}
else
{
printf("незаводим");
static const frm_engine[]=" * %s заглушил двигатель.";
noinit:string[sizeof(frm_engine)+(-2+MAX_PLAYER_NAME)];
format(string,sizeof(string),frm_engine,PlayerName(playerid));
ProxDetector(playerid,5,string,COLOR_PURPLE);
SetEngineOnOff(GetPlayerVehicleID(playerid),false);
EngineTime[playerid] = 0;
}
}
return true;
}