PDA

Просмотр полной версии : [Function] IsValidObjectModel



DeimoS
02.05.2017, 18:41
Описание:

Функция проверяет указанный ID модели объекта на валидность.
В функции учтены все объекты, существующие как в GTA SA, так и добавленные в SA-MP.


Параметры:

modelid - ID модели объекта.


Возвращаемое значение:

1 - Модель существует
0 - Модель не существует

Код:



stock IsValidObjectModel(modelid)
{
if(modelid >= 321 && modelid <= 328 || modelid >= 330 && modelid <= 331)
return 1;
else if(modelid >= 333 && modelid <= 339 || modelid >= 341 && modelid <= 373)
return 1;

else if(modelid >= 615 && modelid <= 661 || modelid == 664)
return 1;
else if(modelid >= 669 && modelid <= 698 || modelid >= 700 && modelid <= 792)
return 1;
else if(modelid >= 800 && modelid <= 906 || modelid >= 910 && modelid <= 964)
return 1;
else if(modelid >= 966 && modelid <= 998 || modelid >= 1000 && modelid <= 1193)
return 1;
else if(modelid >= 1207 && modelid <= 1325 || modelid >= 1327 && modelid <= 1572)
return 1;
else if(modelid >= 1574 && modelid <= 1698 || modelid >= 1700 && modelid <= 2882)
return 1;
else if(modelid >= 2885 && modelid <= 3135 || modelid >= 3167 && modelid <= 3175)
return 1;
else if(modelid == 3178 || modelid == 3187 || modelid == 3193 || modelid == 3214)
return 1;
else if(modelid == 3221 || modelid >= 3241 && modelid <= 3244)
return 1;
else if(modelid == 3246 || modelid >= 3249 && modelid <= 3250)
return 1;
else if(modelid >= 3252 && modelid <= 3253 || modelid >= 3255 && modelid <= 3265)
return 1;
else if(modelid >= 3267 && modelid <= 3347 || modelid >= 3350 && modelid <= 3415)
return 1;
else if(modelid >= 3417 && modelid <= 3428 || modelid >= 3430 && modelid <= 3609)
return 1;
else if(modelid >= 3612 && modelid <= 3783 || modelid >= 3785 && modelid <= 3869)
return 1;
else if(modelid >= 3872 && modelid <= 3882 || modelid >= 3884 && modelid <= 3888)
return 1;
else if(modelid >= 3890 && modelid <= 3973 || modelid >= 3975 && modelid <= 4541)
return 1;
else if(modelid >= 4550 && modelid <= 4762 || modelid >= 4806 && modelid <= 5084)
return 1;
else if(modelid >= 5086 && modelid <= 5089 || modelid >= 5105 && modelid <= 5375)
return 1;
else if(modelid >= 5390 && modelid <= 5682 || modelid >= 5703 && modelid <= 6010)
return 1;
else if(modelid >= 6035 && modelid <= 6253 || modelid >= 6255 && modelid <= 6257)
return 1;
else if(modelid >= 6280 && modelid <= 6347 || modelid >= 6349 && modelid <= 6525)
return 1;
else if(modelid >= 6863 && modelid <= 7392 || modelid >= 7415 && modelid <= 7973)
return 1;
else if(modelid >= 7978 && modelid <= 9193 || modelid >= 9205 && modelid <= 9267)
return 1;
else if(modelid >= 9269 && modelid <= 9478 || modelid >= 9482 && modelid <= 10310)
return 1;
else if(modelid >= 10315 && modelid <= 10744 || modelid >= 10750 && modelid <= 11417)
return 1;
else if(modelid >= 11420 && modelid <= 11753 || modelid >= 12800 && modelid <= 13563)
return 1;
else if(modelid >= 13590 && modelid <= 13667 || modelid >= 13672 && modelid <= 13890)
return 1;
else if(modelid >= 14383 && modelid <= 14528 || modelid >= 14530 && modelid <= 14554)
return 1;
else if(modelid == 14556 || modelid >= 14558 && modelid <= 14643)
return 1;
else if(modelid >= 14650 && modelid <= 14657 || modelid >= 14660 && modelid <= 14695)
return 1;
else if(modelid >= 14699 && modelid <= 14728 || modelid >= 14735 && modelid <= 14765)
return 1;
else if(modelid >= 14770 && modelid <= 14856 || modelid >= 14858 && modelid <= 14883)
return 1;
else if(modelid >= 14885 && modelid <= 14898 || modelid >= 14900 && modelid <= 14903)
return 1;
else if(modelid >= 15025 && modelid <= 15064 || modelid >= 16000 && modelid <= 16790)
return 1;
else if(modelid >= 17000 && modelid <= 17474 || modelid >= 17500 && modelid <= 17974)
return 1;
else if(modelid == 17976 || modelid == 17978 || modelid >= 18000 && modelid <= 18036)
return 1;
else if(modelid >= 18038 && modelid <= 18102 || modelid >= 18104 && modelid <= 18105)
return 1;
else if(modelid == 18109 || modelid == 18112 || modelid >= 18200 && modelid <= 18859)
return 1;
else if(modelid >= 18860 && modelid <= 19274 || modelid >= 19275 && modelid <= 19595)
return 1;
else if(modelid >= 19596 && modelid <= 19999)
return 1;
else
return 0;
}


Пример использования:

public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/createobject", cmdtext, true, 13) == 0)
{
if(!strlen(cmdtext[14]))
return SendClientMessage(playerid, 0xFF0000FF, "Примечание: {FFFFFF}/createobject [ID модели объекта]");

new modelid = strval(cmdtext[14]);
if(!IsValidObjectModel(modelid))
return SendClientMessage(playerid, 0xFF0000FF, "Ошибка: {FFFFFF}Вы указали несуществующий ID модели.");
new
Float:pos_x,
Float:pos_y,
Float:pos_z,
Float:angle;
GetPlayerPos(playerid, pos_x, pos_y, pos_z);
GetPlayerFacingAngle(playerid, angle);
CreateObject(modelid, pos_x, pos_y, pos_z, 0.0, 0.0, angle);
SendClientMessage(playerid, -1, "Объект успешно создан!");
return 1;
}
return 0;
}

Автор:

DeimoS

ziggi
02.05.2017, 19:10
Через switch/case не будет проще?

Edwin
02.05.2017, 19:18
Это ты сидел загонялся, просматривал все объекты в редакторе, или как?)

DeimoS
02.05.2017, 20:05
Через switch/case не будет проще?

switch/case на этапе компиляции раскрывается же, из-за чего к времени компиляции прибавляется почти полторы секунды (сейчас компилируется за 0.3 секунды в среднем). И это на компиляторе от Zeex =) С нативным всё может выйти ещё хуже


stock IsValidObjectModel(modelid)
{
switch(modelid)
{
case
615..661, 664, 669..698, 700..792, 800..906, 910..964, 966..998, 1000..1193, 1207..1325,
1327..1572, 1574..1698, 1700..2882, 2885..3135, 3167..3175, 3178, 3187, 3193, 3214, 3221,
3241..3244, 3246, 3249..3250, 3252..3253, 3255..3265, 3267..3347, 3350..3415, 3417..3428,
3430..3609, 3612..3783, 3785..3869, 3872..3882, 3884..3888, 3890..3973, 3975..4541,
4550..4762, 4806..5084, 5086..5089, 5105..5375, 5390..5682, 5703..6010, 6035..6253,
6255..6257, 6280..6347, 6349..6525, 6863..7392, 7415..7973, 7978..9193, 9205..9267,
9269..9478, 9482..10310, 10315..10744, 10750..11417, 11420..11753, 12800..13563,
13590..13667, 13672..13890, 14383..14528, 14530..14554, 14556, 14558..14643, 14650..14657,
14660..14695, 14699..14728, 14735..14765, 14770..14856, 14858..14883, 14885..14898,
14900..14903, 15025..15064, 16000..16790, 17000..17474, 17500..17974, 17976, 17978,
18000..18036, 18038..18102, 18104..18105, 18109, 18112, 18200..18859, 18860..19274,
19275..19595, 19596..19999:
return 1;
}
return 0;
}


Это ты сидел загонялся, просматривал все объекты в редакторе, или как?)

Массив из инклуда (http://forum.sa-mp.com/showthread.php?t=589352) + цикл + форматирование данных из массива в формат условий + print
Чутка подправил то, что вышло в логах и получилось это :)

Это, кстати говоря, не самый быстрый вариант. В одной из тем на forum.sa-mp.com нашёл вот этот вариант (автор - Slice)

IsValidObjectModel(model)
{
static
valid_model[] = //credits to Slice
{
0b11111111111011111110110111111110, 0b00000000001111111111111111111111,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b11111111111111111111111110000000,
0b11100001001111111111111111111111, 0b11110111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b00000001111000000111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111100011111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111011111, 0b11111111111111111111111101111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111100000000000001111111111,
0b11111111111111111111111111111111, 0b11111111111010111101111111111111,
0b11111111111111111111111111111111, 0b11111111111111111001111111111111,
0b11111111111111111111111111111111, 0b10000000000011111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111011111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111101011101111111111, 0b11111111111111111111111111110111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111110011,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111100111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111011110111101111,
0b10000000000000000000000000000000, 0b00000010000010000000010011111111,
0b00000000001000000100000000000000, 0b11111111101101100101111000000000,
0b01110000111111111111111111111011, 0b00000000001111111111111111000000,
0b10011111110000000000001111001100, 0b11111111101111001100000000011110,
0b00001110110111111100111111111111, 0b11111111111111111111111111001110,
0b11111000000011111111111111111111, 0b11111111111111111110111101101011,
0b01000000000000000111111101110111, 0b11010111111111111111000001111100,
0b11110011111111111111111001111111, 0b01011111111111111111111111111111,
0b01111110100001111011111010101011, 0b10001001010101100100001000010000,
0b10100000000000000001010000101010, 0b00001000001111101010111100100000,
0b11111111111111111111111010100001, 0b00000000011111111111110101111111,
0b00001111111111111111110000111100, 0b11011110111111001111011011111011,
0b11111111111001111111110011001110, 0b11111111111111111111111111111111,
0b01111111111111111111111110111111, 0b01111000111111111111110111111111,
0b00011100000000010000000000000111, 0b00001111111100001000000000000000,
0b10101111001001110111110011111000, 0b01010101010101010110100000101011,
0b01110111110101011111110100101001, 0b01111111111100101110111011111011,
0b11111111111111111100101111001000, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b00000000011111111111111111111111, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b11111111000000000000000000000000, 0b00010100101000001111111111111111,
0b11111111101111011111111111000000, 0b00111111111111111111111100000001,
0b11110000000000000000000000000000, 0b00000101010101010111111111111111,
0b11110010110111000011111010000000, 0b11111110111110000111110111010000,
0b00000000000000011111111111111111, 0b00000000000000000000000000000000,
0b11111111111111111111111111000000, 0b11111111111111111111111111111111,
0b11011111111111111111111111111111, 0b00000000000000000000000000000111,
0b00000000000000000000000000000000, 0b11010111111000000000000000000000,
0b10110011001000101111111111111111, 0b00011000010111010101011111010111,
0b11011111111111111111010101111111, 0b11111111111111100000000000000011,
0b11111111111111111111111111111111, 0b11111111111111111100000101111111,
0b00000000000000000000000111111111, 0b00011000000001111000000000000000,
0b11111111111111100111100000000100, 0b11110100011011111111110000000000,
0b11111110001001111111110000000111, 0b11111111110110000100101010101000,
0b11111111111111111100000000000000, 0b11111111111111111111111111111111,
0b11101011111011110011111111111111, 0b11111111111111111111111111111111,
0b00010001000001111100001111111111, 0b00100000000000000000000000000000,
0b00000000000000000000000000000000, 0b11111101000000000000000000000000,
0b11110001110101000001111111111111, 0b00000000000001101111010000010010,
0b11111111111111111111111110000000, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11100001111100000111100000000000, 0b11100110011111111101011111111011,
0b00000000000000000000000100111001, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000100110000101100111111001100,
0b11111111111110000000000000000000, 0b00000000000001111111111111111111,
0b11000001111111011100000110000000, 0b00000111111101111111111111111111,
0b00000000001000011110000111010010, 0b00111000100111110011110000000000,
0b00111111111110101000001001111110, 0b00000000000000100001111100000000,
0b11111111111111111111111100000000, 0b01111111111111111111111111111111,
0b01011100001111111110101111110111, 0b11100010111111100000000000111111,
0b11011000011000110011100011111001, 0b01100110000011110001100000010000,
0b00000111100000000000000000000100, 0b00010111111101100011100001101010,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b11111111101111111000000000000000, 0b01111000000111100000000111111111,
0b00000000011111110111111110111111, 0b11111111111111111111111111111111,
0b00000000101001101111111111111111, 0b11111111111111111111111111111110,
0b10100001000000111111111111111111, 0b11111111111111111111111111111011,
0b00000000000000000000000000000011, 0b00000000000000100000000000000000,
0b01110001111111010000000000010000, 0b11111101111101100011011111111111,
0b10000000011111111111110101010111, 0b11011111100000010011001010110111,
0b11010011101011111111111111111111, 0b10101010000010010000001111111000,
0b11111000101111100000111110010110, 0b11111111100000000000000000000001,
0b11111111111111111111111111111111, 0b01111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111101111111111,
0b11111111111111111111111111111111, 0b00000000000001111111111111111111,
0b00111000000000010001000000000010, 0b00000000000011100000000000000000,
0b00000000000000000000100000000000, 0b00000000000000000000000000000000,
0b11110101000000000000000000000000, 0b00011111111000000101001000000111,
0b11110000011110100011011101000000, 0b01111110111111111111111111111111,
0b10101000000111110100101111011100, 0b11111111111111111111110000111010,
0b00000000000000000000011111111111, 0b11111111111111111111111111111110,
0b00001000111111111111111111111111, 0b00000000000000000000000000000000,
0b00001111111110000000001111111101, 0b00111110000001111111101110100000,
0b00001111111101111100011111000100, 0b11101010111101010011000111110000,
0b11101010000000000000000111010001, 0b10001110110101100101000001110101,
0b11000011111010101011111111111111, 0b11010110101111110000000000111111,
0b00011111111111111111111111010100, 0b11111111111111111111111111111111,
0b00111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b10000000001111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b00000000000000111111111111111111,
0b00000000000000000000000001000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00011111000000000000000000000000,
0b00011111111111100111111111111111, 0b00000011111111111111111111111110,
0b00000000000000000000000000000000, 0b00101100000110000000000000010000,
0b11100000111110000000001000000000, 0b11111000000000011111111100000000,
0b11010000111111101011111111111111, 0b11001101010100011100011101000011,
0b11111111111101010011110011100111, 0b01000000000111111001101111111111,
0b00000000111010111111110010000111, 0b11111111111000000000001111111111,
0b11111111111111111111111111111111, 0b11111111111011110111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b00000000000001100000001111111111, 0b00000000000000000000000000000000,
0b11100000000000000000000000000000, 0b00000000000000000000000000000001,
0b11111111111111111111110000010000, 0b00000111111111111111111111111111,
0b11111111111111111110100000000000, 0b11111111111111111111111110111111,
0b00000011100001111111111111111111, 0b00000000001100000000000000000000,
0b01100110001011010000000000000000, 0b11111111111111111111111111111111,
0b00000111111111111111111111111111, 0b00000000000000000000000011111110,
0b11111111110100000000000000000000, 0b00000000000000000111111111101011,
0b01100000000000000000000110011100, 0b11111111111111111111111111101010,
0b11111100000000000111111111111111, 0b00000000000000000000000001111111,
0b11101111000000000000000000000000, 0b11111110111111111111111111111111,
0b11111111111111111111011111111111, 0b11000000001000000000000011011001,
0b11011111111111111111111111111111, 0b11100000011000000000011111111110,
0b00000000001111100011111111111111, 0b00011110111111000000000000000000,
0b11001111111100001001011111110100, 0b00110001110001111000011101011110,
0b00000000000000000000000001110110, 0b11111111111111111100000000000000,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b00111111111111111111111111111111,
0b00000000000000000000000000000000, 0b11000000000000000000000000000000,
0b00000000000000011111111111111111, 0b11101111111111110100001000000000,
0b00001010000000001111111111111111, 0b00001100000110011000000000000000,
0b01010011111111111111111111000000, 0b11000001111111111100000000000100,
0b11111111111111111111111111111111, 0b11001111110000000000111111111111,
0b11111111111111111111111111111111, 0b00001111111111111111111111011111,
0b00000011100000000000111000100000, 0b11111111111111111110000000100000,
0b11111111111001111111111111111111, 0b11111111111111111111111111111111,
0b00000000000000000000000011111111, 0b10000000000000000000000000000000,
0b11111111111111111111111111111111, 0b11111111111111111111111111001111,
0b00000000000000000111111000001111, 0b00000000000000000000000000000000,
0b11110111100000000000000000000000, 0b00111111111100001011111111111111,
0b10110111101010010000000000000000, 0b11010000111111110001011011101010,
0b10000011100000101101001011010000, 0b11111111111110000100000010111101,
0b11110011011111110100001100011111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b00000000000110011111111111111111,
0b00001111100000000000000000000000, 0b10000000000000001011111010000000,
0b11100100000001111000000000000000, 0b00000000000000000000000000000011,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b11111111111111111111111111111111, 0b11111111111111111111111111111011,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b00001110001111111101111001011011,
0b00011110011000011100011000111100, 0b11000000001011111111111110010001,
0b01111111111111111101101111111111, 0b00111111111111111010100001110010,
0b01111111111000000100000001011000, 0b00000000001110000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000111000000000000000,
0b01000001000100000011101000000001, 0b11001111100110110000000000111010,
0b00000000000000000000000000000000, 0b11111000000000000100000000000000,
0b01000000001000000001111110111111, 0b11111111111011100111000000000000,
0b11111111111111111111111111111111, 0b00001111111111111111111111111111,
0b11111111110000000000000000000000, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111100001111,
0b11111111111111111111111111111111, 0b01111111101111011111111111111111,
0b00100001000000000000000000000010, 0b10110111011001100111011000001000,
0b00000000001000000000000010000111, 0b10000100000000011000001111100000,
0b00000000000000000000000000000100, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b11111111111111111000000000000000,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11010111111111111111111111111101, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111100000011111111111111111111,
0b11111111111111111111111111110011, 0b11111111111111111111100011111111,
0b11111111111111111000000111111111, 0b11111111111111000011111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111110111111111, 0b00000000111101111111111111101111,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b11111111111111100000000000000000,
0b00000001111111111111111111111111, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111000000011111110111111111, 0b11111111111111111111111111111111,
0b11111111111111101111111111111111, 0b00000111111111111111111111111111,
0b00001111111111111111111111111111, 0b01110100111101000100000111110000,
0b10101000000000000000000000000001, 0b00000000111101000000000000000011,
0b00000000111111000000000000000000, 0b00001001000111000000000000000000,
0b00100010100000100000000000000000, 0b11111111111110001100000000100100,
0b11111111111111111111111111111111, 0b01110000011101100011111001111010,
0b11111000000000000000000000011110, 0b11000001111101100000111111111111,
0b00000000011111111111111111101110, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b11111111111111111111111100000000,
0b11111110001111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b01010111111111111111111111111111,
0b01010101010101010101010101010101, 0b01010101000101010101010101010101,
0b01010101010101010101010101010101, 0b10101010101010000101010101010101,
0b01111010111111111111111111111010, 0b00000000111010101101100000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b10000000000000111100000000000000,
0b11110000000000000000000000000101, 0b11111111111111111111111011111111,
0b11111111111111111111111111111111, 0b11111101101101101100111111100001,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b00000000000000000000000000011111,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000101011000000000000, 0b01111011000000100000000000100000,
0b11000011111111010000111111011000, 0b11111011100011110110111001111001,
0b11001101111111110110000111100111, 0b00000101011110110000000001111110,
0b11111111111111110000000000000000, 0b11111111110111111111111111111111,
0b11111111111111111111111111111111, 0b00100011011111111111111111111111,
0b00000000000000000000000000000001, 0b00000000000000000000000000000000,
0b11111111000000000000000000000000, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b00000111111111111111111111111111, 0b00000000000000000000000000000000,
0b11111111111111111111111111111111, 0b00000000001111111111111111111111,
0b00000000010000000000000000000001, 0b00000011100000000000000000000000,
0b00000000000000000000001111101010, 0b11111111111111110000000000000000,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b10111111111111111111111111111111, 0b11111111111111111100111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b01111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111110011111111111, 0b11101111111111111111000111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11111111111111111111111111111111, 0b11111111111111111111111111111111,
0b11110000000001111111111111111111, 0b00001111111111111111111111111111,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00000000000000000000000000000000,
0b00000000000000000000000000000000, 0b00100000000000000000000000000000
};
if (model > 19901)
{
return 0;
}
model -= 320;
if (model < 0)
{
return 0;
}
return (valid_model[model >> 5] & (1 << (model & 0x1F)));
}
Он в разы быстрее, но тут нет больше 600 объектов (судя по всему, тут только те, что есть в GTA), что меня не устроило. Разбираться в том, какие тут объекты уже есть, было лень, поэтому сделал на обычных условиях

vovandolg
03.05.2017, 02:33
Я думаю надо прикладывать 2 варианта, switch/if-else
Так как есть люди которым на время компиляции начхать,
а вот время выполнения в игре шустрее это +(да да да угадали это я ахах)

Daniel_Cortez
03.05.2017, 08:42
Я думаю надо прикладывать 2 варианта, switch/if-else
Так как есть люди которым на время компиляции начхать,
а вот время выполнения в игре шустрее это +(да да да угадали это я ахах)
Не факт, что вариант со switch будет быстрее. Если список значений состоит из достаточно больших интервалов, то проще сравнить с крайними значениями из диапазона (min <= x && x <= max), чем последовательно с каждым из них.

DeimoS
03.05.2017, 12:56
Вот тут (https://ziggi.org/pawn-operatory/) Ziggi прикладывал списки того, в каких ситуациях switch/case быстрее.

И да, когда у тебя скрипт по пол минуты компилируется ради 30 миллисекунд процессорного времени - не сказал бы, что это лучший выбор.

ziggi
03.05.2017, 13:25
Да, в данном случае switch/case будет, скорее всего, сильно медленнее. Но надо бы обновить вариант от Slice, может займусь.

vovandolg
08.05.2017, 11:04
А почему вариант от Slice такой экзотический, нельзя что ле было просто id моделек вбить а не бинарно подобные символы))

Nexius_Tailer
08.05.2017, 13:14
И да, когда у тебя скрипт по пол минуты компилируется ради 30 миллисекунд процессорного времени - не сказал бы, что это лучший выбор.
Если switch не пихать где попало, то прироста в 30 секунд и близко не будет, в то время как прирост по времени ощущать будешь только ты, а не пользователи сервера.

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

DeimoS
08.05.2017, 13:25
Если switch не пихать где попало, то прироста в 30 секунд и близко не будет, в то время как прирост по времени ощущать будешь только ты, а не пользователи сервера.

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

Если ты внимательнее изучишь комментарии, то увидишь, что я и причину указывал, по которой время компиляции увеличиться, и скидывал статью, где есть данные о том, когда switch/case быстрее

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


А почему вариант от Slice такой экзотический, нельзя что ле было просто id моделек вбить а не бинарно подобные символы))

Как я понимаю, он сначала перегнал все ID в бинарый вид, а потом уже составлял вот эту формулу

return (valid_model[model >> 5] & (1 << (model & 0x1F)));
И бинарный вид оставил, как раз, для наглядности

Nexius_Tailer
08.05.2017, 13:40
Если ты внимательнее изучишь комментарии, то увидишь, что я и причину указывал, по которой время компиляции увеличиться, и скидывал статью, где есть данные о том, когда switch/case быстрее
Нет смысла изучать дважды. В свою очередь укажу второй раз, что где-то на форумах ещё с незапамятных времён эти сравнения есть в какой-то из тем по оптимизации

DeimoS
08.05.2017, 13:59
Хмм, странно. Прикрепилась ссылка совсем не на ту статью... Видимо, недосмотрел.

Исправил ссылку:

Вот тут (https://ziggi.org/pawn-operatory/) Ziggi прикладывал списки того, в каких ситуациях switch/case быстрее.