Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 21
  1. #1
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,124
    Репутация:
    1831 ±

    GetVehicleModelFromName - получение ID модели транспорта по её названию

    Описание:
    Функция конвертирует название модели автомобиля в её ID.

    Возвращаемое значение:
    ID модели автомобиля или "INVALID_VEHICLE_ID", в случае, если переданный текст не совпадает с именем.

    Код:
    1. stock GetVehicleModelFromName(const model_name[])
    2. {
    3. if ('0' <= model_name[0] <= '9')
    4. {
    5. new model;
    6. #if !defined sscanf
    7. for(new i = strlen(model_name)-1; i != -1; i--)
    8. {
    9. switch(model_name[i])
    10. {
    11. case '0'..'9':
    12. {
    13. continue;
    14. }
    15. default:
    16. {
    17. model = -1;
    18. break;
    19. }
    20. }
    21. }
    22. if(model != -1)
    23. {
    24. model = strval(model_name);
    25. }
    26. #else
    27. sscanf(model_name, "i", model);
    28. #endif
    29. if(400 <= model <= 611)
    30. {
    31. return model;
    32. }
    33. }
    34.  
    35. static const sVehicleModelName[212][] =
    36. {
    37. {!"Landstalker"}, {!"Bravura"}, {!"Buffalo"}, {!"Linerunner"}, {!"Perennial"},
    38. {!"Sentinel"}, {!"Dumper"}, {!"Fire Truck"}, {!"Trashmaster"}, {!"Stretch"},
    39. {!"Manana"}, {!"Infernus"}, {!"Voodoo"}, {!"Pony"}, {!"Mule"}, {!"Cheetah"},
    40. {!"Ambulance"}, {!"Leviathan"}, {!"Moonbeam"}, {!"Esperanto"}, {!"Taxi"},
    41. {!"Washington"}, {!"Bobcat"}, {!"Mr.Whoopee"}, {!"BF Injection"}, {!"Hunter"},
    42. {!"Premier"}, {!"Enforcer"}, {!"Securicar"}, {!"Banshee"}, {!"Predator"}, {!"Bus"},
    43. {!"Rhino"}, {!"Barracks"}, {!"Hotknife"}, {!"Article Trailer 1"}, {!"Previon"},
    44. {!"Coach"}, {!"Cabbie"}, {!"Stallion"}, {!"Rumpo"}, {!"RC Bandit"}, {!"Romero"},
    45. {!"Packer"}, {!"Monster"}, {!"Admiral"}, {!"Squalo"}, {!"Seasparrow"}, {!"Pizzaboy"},
    46. {!"Tram"}, {!"Article Trailer 2"}, {!"Turismo"}, {!"Speeder"}, {!"Reefer"},
    47. {!"Tropic"}, {!"Flatbed"}, {!"Yankee"}, {!"Caddy"}, {!"Solair"}, {!"Berkleys RC Van"},
    48. {!"Skimmer"}, {!"PCJ-600"}, {!"Faggio"}, {!"Freeway"}, {!"RC Baron"}, {!"RC Raider"},
    49. {!"Glendale"}, {!"Oceanic"}, {!"Sanchez"}, {!"Sparrow"}, {!"Patriot"}, {!"Quadbike"},
    50. {!"Coastguard"}, {!"Dinghy"}, {!"Hermes"}, {!"Sabre"}, {!"Rustler"}, {!"ZR-350"},
    51. {!"Walton"}, {!"Regina"}, {!"Comet"}, {!"BMX"}, {!"Burrito"}, {!"Camper"},
    52. {!"Marquis"}, {!"Baggage"}, {!"Dozer"}, {!"Maverick"}, {!"News Chopper"},
    53. {!"Rancher"}, {!"FBI Rancher"}, {!"Virgo"}, {!"Greenwood"}, {!"Jetmax"},
    54. {!"Hotring Racer"}, {!"Sandking"}, {!"Blista Compact"}, {!"Police Maverick"},
    55. {!"Boxville"}, {!"Benson"}, {!"Mesa"}, {!"RC Goblin"}, {!"Hotring Racer (A)"},
    56. {!"Hotring Racer (B)"}, {!"Bloodring Banger"}, {!"Rancher 2"},
    57. {!"Super GT"}, {!"Elegant"}, {!"Journey"}, {!"Bike"}, {!"Mountain Bike"},
    58. {!"Beagle"}, {!"Cropduster"}, {!"Stuntplane"}, {!"Tanker"}, {!"Roadtrain"},
    59. {!"Nebula"}, {!"Majestic"}, {!"Buccaneer"}, {!"Shamal"}, {!"Hydra"}, {!"FCR-900"},
    60. {!"NRG-500"}, {!"HPV1000"}, {!"Cement Truck"}, {!"Towtruck"}, {!"Fortune"}, {!"Cardona"},
    61. {!"FBI Truck"}, {!"Willard"}, {!"Forklift"}, {!"Tractor"}, {!"Combine Harvester"},
    62. {!"Feltzer"}, {!"Remington"}, {!"Slamvan"}, {!"Blade"}, {!"Freight"}, {!"Brown Streak"},
    63. {!"Vortex"}, {!"Vincent"}, {!"Bullet"}, {!"Clover"}, {!"Sadler"}, {!"Fire Truck 2"},
    64. {!"Hustler"}, {!"Intruder"}, {!"Primo"}, {!"Cargobob"}, {!"Tampa"}, {!"Sunrise"},
    65. {!"Merit"}, {!"Utility Van"}, {!"Nevada"}, {!"Yosemite"}, {!"Windsor"}, {!"Monster (A)"},
    66. {!"Monster (B)"}, {!"Uranus"}, {!"Jester"}, {!"Sultan"}, {!"Stratum"}, {!"Elegy"},
    67. {!"Raindance"}, {!"RC Tiger"}, {!"Flash"}, {!"Tahoma"}, {!"Savanna"}, {!"Bandito"},
    68. {!"Freight"}, {!"Brown Streak"}, {!"Kart"}, {!"Mower"}, {!"Dune"}, {!"Sweeper"},
    69. {!"Broadway"}, {!"Tornado"}, {!"AT-400"}, {!"DFT-30"}, {!"Huntley"}, {!"Stafford"},
    70. {!"BF-400"}, {!"Newsvan"}, {!"Tug"}, {!"Petrol Truck"}, {!"Emperor"}, {!"Wayfarer"},
    71. {!"Euros"}, {!"Hotdog"}, {!"Club"}, {!"Freight Box"}, {!"Article Trailer 3"}, {!"Andromada"},
    72. {!"Dodo"}, {!"RC Cam"}, {!"Launch"}, {!"Police (LSPD)"}, {!"Police (SFPD)"}, {!"Police (LVPD)"},
    73. {!"Ranger"}, {!"Picador"}, {!"S.W.A.T."}, {!"Alpha"}, {!"Phoenix"}, {!"Glendale 2"},
    74. {!"Sadler 2"}, {!"Baggage Box A"}, {!"Baggage Box B"}, {!"Stairs Trailer"}, {!"Boxville 2"},
    75. {!"Farm Trailer"}, {!"Utility Trailer"}
    76. };
    77. for(new i = 0; i < sizeof(sVehicleModelName); i++)
    78. {
    79. if(!strcmp(sVehicleModelName[i], model_name, true))
    80. return i+400;
    81. }
    82.  
    83. for(new i = 0; i < sizeof(sVehicleModelName); i++)
    84. {
    85. if(strfind(sVehicleModelName[i], model_name, true) != -1)
    86. return i+400;
    87. }
    88. return INVALID_VEHICLE_ID;
    89. }

    Пример использования:
    1. main()
    2. {
    3. printf("%d", GetVehicleModelFromName("nrg"));
    4. }

     Эта же функция, но в виде кастомного спецификатора для sscanf

    1. SSCANF:vehiclemodel(model_name[])
    2. {
    3. if ('0' <= model_name[0] <= '9')
    4. {
    5. new model;
    6. #if !defined sscanf
    7. for(new i = strlen(model_name)-1; i != -1; i--)
    8. {
    9. switch(model_name[i])
    10. {
    11. case '0'..'9':
    12. {
    13. continue;
    14. }
    15. default:
    16. {
    17. model = -1;
    18. break;
    19. }
    20. }
    21. }
    22. if(model != -1)
    23. {
    24. model = strval(model_name);
    25. }
    26. #else
    27. sscanf(model_name, "i", model);
    28. #endif
    29. if(400 <= model <= 611)
    30. {
    31. return model;
    32. }
    33. }
    34.  
    35. static const sVehicleModelName[212][] =
    36. {
    37. {!"Landstalker"}, {!"Bravura"}, {!"Buffalo"}, {!"Linerunner"}, {!"Perennial"},
    38. {!"Sentinel"}, {!"Dumper"}, {!"Fire Truck"}, {!"Trashmaster"}, {!"Stretch"},
    39. {!"Manana"}, {!"Infernus"}, {!"Voodoo"}, {!"Pony"}, {!"Mule"}, {!"Cheetah"},
    40. {!"Ambulance"}, {!"Leviathan"}, {!"Moonbeam"}, {!"Esperanto"}, {!"Taxi"},
    41. {!"Washington"}, {!"Bobcat"}, {!"Mr.Whoopee"}, {!"BF Injection"}, {!"Hunter"},
    42. {!"Premier"}, {!"Enforcer"}, {!"Securicar"}, {!"Banshee"}, {!"Predator"}, {!"Bus"},
    43. {!"Rhino"}, {!"Barracks"}, {!"Hotknife"}, {!"Article Trailer 1"}, {!"Previon"},
    44. {!"Coach"}, {!"Cabbie"}, {!"Stallion"}, {!"Rumpo"}, {!"RC Bandit"}, {!"Romero"},
    45. {!"Packer"}, {!"Monster"}, {!"Admiral"}, {!"Squalo"}, {!"Seasparrow"}, {!"Pizzaboy"},
    46. {!"Tram"}, {!"Article Trailer 2"}, {!"Turismo"}, {!"Speeder"}, {!"Reefer"},
    47. {!"Tropic"}, {!"Flatbed"}, {!"Yankee"}, {!"Caddy"}, {!"Solair"}, {!"Berkleys RC Van"},
    48. {!"Skimmer"}, {!"PCJ-600"}, {!"Faggio"}, {!"Freeway"}, {!"RC Baron"}, {!"RC Raider"},
    49. {!"Glendale"}, {!"Oceanic"}, {!"Sanchez"}, {!"Sparrow"}, {!"Patriot"}, {!"Quadbike"},
    50. {!"Coastguard"}, {!"Dinghy"}, {!"Hermes"}, {!"Sabre"}, {!"Rustler"}, {!"ZR-350"},
    51. {!"Walton"}, {!"Regina"}, {!"Comet"}, {!"BMX"}, {!"Burrito"}, {!"Camper"},
    52. {!"Marquis"}, {!"Baggage"}, {!"Dozer"}, {!"Maverick"}, {!"News Chopper"},
    53. {!"Rancher"}, {!"FBI Rancher"}, {!"Virgo"}, {!"Greenwood"}, {!"Jetmax"},
    54. {!"Hotring Racer"}, {!"Sandking"}, {!"Blista Compact"}, {!"Police Maverick"},
    55. {!"Boxville"}, {!"Benson"}, {!"Mesa"}, {!"RC Goblin"}, {!"Hotring Racer (A)"},
    56. {!"Hotring Racer (B)"}, {!"Bloodring Banger"}, {!"Rancher 2"},
    57. {!"Super GT"}, {!"Elegant"}, {!"Journey"}, {!"Bike"}, {!"Mountain Bike"},
    58. {!"Beagle"}, {!"Cropduster"}, {!"Stuntplane"}, {!"Tanker"}, {!"Roadtrain"},
    59. {!"Nebula"}, {!"Majestic"}, {!"Buccaneer"}, {!"Shamal"}, {!"Hydra"}, {!"FCR-900"},
    60. {!"NRG-500"}, {!"HPV1000"}, {!"Cement Truck"}, {!"Towtruck"}, {!"Fortune"}, {!"Cardona"},
    61. {!"FBI Truck"}, {!"Willard"}, {!"Forklift"}, {!"Tractor"}, {!"Combine Harvester"},
    62. {!"Feltzer"}, {!"Remington"}, {!"Slamvan"}, {!"Blade"}, {!"Freight"}, {!"Brown Streak"},
    63. {!"Vortex"}, {!"Vincent"}, {!"Bullet"}, {!"Clover"}, {!"Sadler"}, {!"Fire Truck 2"},
    64. {!"Hustler"}, {!"Intruder"}, {!"Primo"}, {!"Cargobob"}, {!"Tampa"}, {!"Sunrise"},
    65. {!"Merit"}, {!"Utility Van"}, {!"Nevada"}, {!"Yosemite"}, {!"Windsor"}, {!"Monster (A)"},
    66. {!"Monster (B)"}, {!"Uranus"}, {!"Jester"}, {!"Sultan"}, {!"Stratum"}, {!"Elegy"},
    67. {!"Raindance"}, {!"RC Tiger"}, {!"Flash"}, {!"Tahoma"}, {!"Savanna"}, {!"Bandito"},
    68. {!"Freight"}, {!"Brown Streak"}, {!"Kart"}, {!"Mower"}, {!"Dune"}, {!"Sweeper"},
    69. {!"Broadway"}, {!"Tornado"}, {!"AT-400"}, {!"DFT-30"}, {!"Huntley"}, {!"Stafford"},
    70. {!"BF-400"}, {!"Newsvan"}, {!"Tug"}, {!"Petrol Truck"}, {!"Emperor"}, {!"Wayfarer"},
    71. {!"Euros"}, {!"Hotdog"}, {!"Club"}, {!"Freight Box"}, {!"Article Trailer 3"}, {!"Andromada"},
    72. {!"Dodo"}, {!"RC Cam"}, {!"Launch"}, {!"Police (LSPD)"}, {!"Police (SFPD)"}, {!"Police (LVPD)"},
    73. {!"Ranger"}, {!"Picador"}, {!"S.W.A.T."}, {!"Alpha"}, {!"Phoenix"}, {!"Glendale 2"},
    74. {!"Sadler 2"}, {!"Baggage Box A"}, {!"Baggage Box B"}, {!"Stairs Trailer"}, {!"Boxville 2"},
    75. {!"Farm Trailer"}, {!"Utility Trailer"}
    76. };
    77. for(new i = 0; i < sizeof(sVehicleModelName); i++)
    78. {
    79. if(!strcmp(sVehicleModelName[i], model_name, true))
    80. return i+400;
    81. }
    82.  
    83. for(new i = 0; i < sizeof(sVehicleModelName); i++)
    84. {
    85. if(strfind(sVehicleModelName[i], model_name, true) != -1)
    86. return i+400;
    87. }
    88. return INVALID_VEHICLE_ID;
    89. }


    Пример использования:
    1. main()
    2. {
    3. new params[] = "nrg";
    4. new model;
    5. sscanf(params, "k<vehiclemodel>", model);// В массиве мотоцикл NRG записан как "NRG-500". Но спецификатор найдёт его даже если ввести "nrg"
    6. printf("%d", model);
    7. }



    Автор:
    DeimoS
    Последний раз редактировалось DeimoS; 11.10.2019 в 13:58.
    Связаться со мной в VK можно через личные сообщения этой группы

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  2. Пользователь сказал cпасибо:
    NichWell (11.10.2019)
  3. #2
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,020
    Репутация:
    2427 ±
    1. По-хорошему, с таким количеством строк (в среднем 100 с лишним вызовов strcmp() для каждого названия) стоило сделать либо поиск по хешу от строки, либо бинарный поиск (который тоже заметно дольше, чем в варианте с хешами, поэтому он имеет смысл только если боишься коллизий при расчёте хеша или в названиях т/с есть символы, которые не хешируются макросом).
    2. В SA-MP функция, которая узнаёт ID модели транспорта, называется GetVehicleModel, а не GetVehicleModelID, поэтому есть смысл и в этой функции для соответствия убрать из названия "ID" (кроме того, и читать станет проще; строчная "l" и заглавная "I" в "ModelID" легко путаются).
    3. Если в объявлении массива sVehicleModelName не указывать размер последнего измерения ("18 char"), можно сэкономить 2 с лишним Кб памяти (компилятор будет использовать не по 5 байт на строку, а ровно столько, сколько нужно для хранения каждой строки).
    4. Ошибки в названиях т/с. Например, не "Perenniel", а "Perennial", "Police Ranger" => "Ranger" (разницы в 2 буквы с "Rancher" вполне достаточно, чтобы не добавлять уточняющее "Police"), "Mr Whoopee" => "Mr. Whoopee", "ZR3 50" => "ZR-350", ...
    Индивидуально в PM и Skype по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  4. Пользователь сказал cпасибо:
    DeimoS (09.10.2019)
  5. #3
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,124
    Репутация:
    1831 ±
    1. Дело в том, что просили написать функцию без зависимостей. Точнее, не просили, но это подразумевалось. И я просто решил сохранить её в виде темы, чтоб не потерялся код, который может быть полезным и другим. Если пробовать реализовать всё без лишних зависимостей, то код уже будет тянуть на отдельную библиотеку, а не на одну функцию, как мне кажется.
    Связаться со мной в VK можно через личные сообщения этой группы

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  6. #4
    Аватар для vvw
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.08.2019
    Сообщений
    20
    Репутация:
    4 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    1. Дело в том, что просили написать функцию без зависимостей. Точнее, не просили, но это подразумевалось. И я просто решил сохранить её в виде темы, чтоб не потерялся код, который может быть полезным и другим. Если пробовать реализовать всё без лишних зависимостей, то код уже будет тянуть на отдельную библиотеку, а не на одну функцию, как мне кажется.
    Можно сделать бинарный поиск, тогда не нужно использовать хеш-таблицы (y_stringhash) и выделять весь код в отдельную библиотеку.
    P.S.: если делать хеш-таблицу без y_stringhash, то проще скомпилировать с флагом -l взять себе получившиеся значение для конструкции switch-case и в функции реализовать YHash (там несколько строк; нужно просто пройтись по веткам и выбрать алгоритм хеширования)

  7. Пользователь сказал cпасибо:
    DeimoS (10.10.2019)
  8. #5
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,020
    Репутация:
    2427 ±
    Цитата Сообщение от vvw Посмотреть сообщение
    P.S.: если делать хеш-таблицу без y_stringhash, то проще скомпилировать с флагом -l взять себе получившиеся значение для конструкции switch-case и в функции реализовать YHash (там несколько строк; нужно просто пройтись по веткам и выбрать алгоритм хеширования)
    Только тогда по-хорошему нужно будет ещё и скопировать лицензию из y_stringhash, ибо код там - далеко не public domain. И даже сделать свой аналог методом конвертирования из уже существующего кода на C/C++ тоже не выйдет, т.к. в YHash() алгоритмы хешрования модифицированы (упрощены) из-за ограничений в макросах Pawn.

    @DeimoS, если нужна будет помощь с бинарным поиском - отпишись; я точно помню, что там могут возникнуть сложности из-за багов в strcmp.
    Индивидуально в PM и Skype по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  9. Пользователь сказал cпасибо:
    DeimoS (10.10.2019)
  10. #6
    Аватар для vvw
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.08.2019
    Сообщений
    20
    Репутация:
    4 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Только тогда по-хорошему нужно будет ещё и скопировать лицензию из y_stringhash, ибо код там - далеко не public domain. И даже сделать свой аналог методом конвертирования из уже существующего кода на C/C++ тоже не выйдет, т.к. в YHash() алгоритмы хешрования модифицированы (упрощены) из-за ограничений в макросах Pawn.
    Они модифицированны незначительно. Алгоритмы djb2, fnv1 и fnv1a практически не отличаются от других реализации на других языках.

    djb2: реализация на С/С++ - реализация y_stringhash
    fnv1: псевдоязык - реализация y_stringhash
    Последний раз редактировалось vvw; 10.10.2019 в 15:07.

  11. #7
    Аватар для vvw
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.08.2019
    Сообщений
    20
    Репутация:
    4 ±
    Что-то такое получилось:
    1. stock GetVehicleModelFromName(const model_name[])
    2. {
    3. if ('0' <= model_name[0] <= '9') {
    4. new model = strval(model_name);
    5. if(400 <= model <= 611)
    6. return model;
    7. }
    8. new len = strlen(model_name);
    9. new hash = 0x811c9dc5;
    10. new i = 0;
    11. while (i != len)
    12. hash = hash * 0x01000193 ^ toupper(model_name[i++]);
    13. switch (hash) {
    14. case 0x15891ca5: return 445;
    15. case 0x4073673b: return 602;
    16. case 0x0e9f0bc5: return 416;
    17. case 0x032e5a9e: return 592;
    18. case 0xfc12339e: return 435;
    19. case 0xfc12339d: return 450;
    20. case 0xfc12339c: return 591;
    21. case 0x2859124e: return 577;
    22. case 0xbfb9b3d1: return 485;
    23. case 0xf9f8d633: return 606;
    24. case 0xf9f8d630: return 607;
    25. case 0xf9f8d631: return 608;
    26. case 0x50b80f72: return 568;
    27. case 0x7b9888f3: return 429;
    28. case 0x28490cb8: return 433;
    29. case 0x49fbd09b: return 511;
    30. case 0x95c900f4: return 499;
    31. case 0xf146511f: return 581;
    32. case 0xaebf8da8: return 424;
    33. case 0xc7e7acb6: return 509;
    34. case 0xdd51d1b9: return 536;
    35. case 0x1a24ade5: return 496;
    36. case 0x87f75ebd: return 504;
    37. case 0x424a3d46: return 481;
    38. case 0xbd967cd6: return 422;
    39. case 0xbb280574: return 498;
    40. case 0x4d6ca705: return 609;
    41. case 0x48d21a32: return 401;
    42. case 0x289df8bc: return 575;
    43. case 0x5bc3e987: return 518;
    44. case 0x0ebd03c0: return 402;
    45. case 0x2d99ee4d: return 541;
    46. case 0xa7679208: return 482;
    47. case 0x4a4a49e5: return 431;
    48. case 0x41e98457: return 438;
    49. case 0xde6ad316: return 457;
    50. case 0x46ef4c97: return 483;
    51. case 0x94465685: return 527;
    52. case 0x3c014f04: return 548;
    53. case 0x3f7759c6: return 524;
    54. case 0x7c7c1761: return 415;
    55. case 0x6a2308d6: return 542;
    56. case 0x34f9b9e5: return 589;
    57. case 0x48d9ab71: return 437;
    58. case 0x36ce238c: return 472;
    59. case 0x048ce4d8: return 532;
    60. case 0x8af82867: return 480;
    61. case 0xa27c4402: return 512;
    62. case 0x11e79720: return 578;
    63. case 0x9a1ae78c: return 473;
    64. case 0xbb2a0285: return 593;
    65. case 0x7e26fbbd: return 486;
    66. case 0xad1566f6: return 406;
    67. case 0x113801f3: return 573;
    68. case 0xb3f36289: return 507;
    69. case 0xa57a2703: return 562;
    70. case 0xcaea9ab7: return 585;
    71. case 0x4456efc1: return 427;
    72. case 0x10e27b70: return 419;
    73. case 0xe172dc61: return 587;
    74. case 0x29d02a98: return 462;
    75. case 0x7ec873ee: return 610;
    76. case 0xb931afad: return 490;
    77. case 0x2ab97df3: return 528;
    78. case 0x2794f3ef: return 521;
    79. case 0x4ff6de45: return 433;
    80. case 0x1f625a3a: return 407;
    81. case 0xc2ca2e67: return 544;
    82. case 0x068791d5: return 565;
    83. case 0x0b8e9335: return 455;
    84. case 0xc052fd0a: return 530;
    85. case 0x8c81436c: return 526;
    86. case 0x782fecd4: return 463;
    87. case 0xb57abbc1: return 466;
    88. case 0x590c8343: return 604;
    89. case 0x2fdc4145: return 492;
    90. case 0x219f72cf: return 474;
    91. case 0xcd5812c4: return 588;
    92. case 0xbca7314d: return 434;
    93. case 0xee3163f5: return 494;
    94. case 0xee3163f6: return 502;
    95. case 0xee3163f7: return 503;
    96. case 0x48c69e2e: return 523;
    97. case 0xc8e2a7df: return 425;
    98. case 0x38b7183c: return 579;
    99. case 0xf7a8238e: return 545;
    100. case 0xe54d78d7: return 520;
    101. case 0xb7b9c69b: return 411;
    102. case 0x39350504: return 546;
    103. case 0xa29b3fa6: return 559;
    104. case 0x36c038a0: return 493;
    105. case 0x97f2c0d3: return 508;
    106. case 0xc5f9d9db: return 571;
    107. case 0xaa9e670e: return 400;
    108. case 0xa3bcae40: return 595;
    109. case 0x52bec465: return 417;
    110. case 0x40a03ca1: return 403;
    111. case 0x23da0a81: return 517;
    112. case 0xd520d42b: return 410;
    113. case 0xe8533915: return 484;
    114. case 0xe0e3224d: return 487;
    115. case 0x7ba5beec: return 551;
    116. case 0x332357cf: return 500;
    117. case 0xf88fe98d: return 444;
    118. case 0xd78ca8b6: return 556;
    119. case 0xd78ca8b5: return 557;
    120. case 0x4cd67c23: return 418;
    121. case 0x1ba3fc6f: return 510;
    122. case 0x04bc1b61: return 572;
    123. case 0x02197baf: return 423;
    124. case 0x3dfac62a: return 414;
    125. case 0x14dd24a8: return 516;
    126. case 0xf22a86a8: return 553;
    127. case 0xf544d67b: return 582;
    128. case 0x30a181e1: return 522;
    129. case 0x5aed41dd: return 467;
    130. case 0xf47205df: return 443;
    131. case 0xaa6d9f72: return 470;
    132. case 0x9cd1e736: return 461;
    133. case 0x893e44a3: return 404;
    134. case 0xc447ba54: return 584;
    135. case 0xc2c7e666: return 603;
    136. case 0x8865004f: return 600;
    137. case 0xf4905965: return 448;
    138. case 0xd529e540: return 596;
    139. case 0xd529e543: return 597;
    140. case 0xd529e542: return 598;
    141. case 0xb61d5491: return 413;
    142. case 0xeac37188: return 430;
    143. case 0x76044eb7: return 426;
    144. case 0xdd5384bc: return 436;
    145. case 0x4f9aa22c: return 547;
    146. case 0x3485e9a0: return 471;
    147. case 0x4b86adcc: return 563;
    148. case 0x84ee7984: return 489;
    149. case 0x441f7486: return 599;
    150. case 0x753a05a2: return 441;
    151. case 0x6a44cda1: return 501;
    152. case 0x8ca8debc: return 464;
    153. case 0xa8a34ae9: return 594;
    154. case 0x0889b5a1: return 465;
    155. case 0x2b7bb879: return 564;
    156. case 0xd3c8aa5a: return 453;
    157. case 0xf43a1af1: return 479;
    158. case 0x5d681434: return 534;
    159. case 0x8a31ff09: return 432;
    160. case 0x737caa4b: return 515;
    161. case 0x26f4341b: return 442;
    162. case 0xf8318edc: return 440;
    163. case 0xd239f6e4: return 476;
    164. case 0xa3c8578a: return 475;
    165. case 0x93523e04: return 543;
    166. case 0x23569dbd: return 605;
    167. case 0x16f0a71d: return 468;
    168. case 0xc9d59cf2: return 495;
    169. case 0xdc8d1a21: return 488;
    170. case 0x7610fd79: return 497;
    171. case 0xd6e869bb: return 567;
    172. case 0x4ad9564a: return 447;
    173. case 0x02e6d6fc: return 428;
    174. case 0x7b7768b1: return 405;
    175. case 0x436330b9: return 519;
    176. case 0x7b47444f: return 460;
    177. case 0x3a8f6e89: return 535;
    178. case 0x03e4ca73: return 458;
    179. case 0x9c3efc0f: return 469;
    180. case 0xa2e52fdf: return 452;
    181. case 0x11163d0c: return 446;
    182. case 0xdec103ae: return 580;
    183. case 0x10ccd46d: return 439;
    184. case 0x5b4e0183: return 538;
    185. case 0x41c4c04f: return 561;
    186. case 0x9eb12194: return 409;
    187. case 0x6a3791a7: return 513;
    188. case 0x0781ea30: return 560;
    189. case 0x4aa88126: return 550;
    190. case 0x4ae1874b: return 506;
    191. case 0x53e7a28c: return 601;
    192. case 0x4aea0646: return 574;
    193. case 0x3a40b379: return 566;
    194. case 0x11f3e134: return 549;
    195. case 0x839513e0: return 514;
    196. case 0x2dd87431: return 420;
    197. case 0x0aff0f29: return 459;
    198. case 0x6a3bfa48: return 576;
    199. case 0x0ee457f6: return 525;
    200. case 0x7505fe02: return 531;
    201. case 0x47e9f403: return 408;
    202. case 0x46b84865: return 449;
    203. case 0x0041f5ce: return 454;
    204. case 0x061e524b: return 583;
    205. case 0xaefff156: return 451;
    206. case 0x72dcaff1: return 558;
    207. case 0xf9ad2e88: return 611;
    208. case 0xc7cd604e: return 552;
    209. case 0x5da79c32: return 540;
    210. case 0x1d4bb7ee: return 491;
    211. case 0xb6a00af7: return 412;
    212. case 0xfccd5305: return 539;
    213. case 0x31845dfa: return 478;
    214. case 0xd212535f: return 421;
    215. case 0x8e499490: return 586;
    216. case 0xbe05b898: return 529;
    217. case 0x31786ba1: return 555;
    218. case 0xf4870598: return 456;
    219. case 0x7bcd021a: return 554;
    220. case 0xe09847cb: return 477;
    221. }
    222. return 0;
    223. }


    UPD: Если нужен будет конвертер списка - могу скинуть (правда там код не очень =) ).
    Последний раз редактировалось vvw; 10.10.2019 в 23:04.

  12. Пользователь сказал cпасибо:
    DeimoS (11.10.2019)
  13. #8
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,124
    Репутация:
    1831 ±
    Цитата Сообщение от vvw Посмотреть сообщение
    Что-то такое получилось:
    1. stock GetVehicleModelFromName(const model_name[])
    2. {
    3. if ('0' <= model_name[0] <= '9') {
    4. new model = strval(model_name);
    5. if(400 <= model <= 611)
    6. return model;
    7. }
    8. new len = strlen(model_name);
    9. new hash = 0x811c9dc5;
    10. new i = 0;
    11. while (i != len)
    12. hash = hash * 0x01000193 ^ toupper(model_name[i++]);
    13. switch (hash) {
    14. case 0x15891ca5: return 445;
    15. case 0x4073673b: return 602;
    16. case 0x0e9f0bc5: return 416;
    17. case 0x032e5a9e: return 592;
    18. case 0xfc12339e: return 435;
    19. case 0xfc12339d: return 450;
    20. case 0xfc12339c: return 591;
    21. case 0x2859124e: return 577;
    22. case 0xbfb9b3d1: return 485;
    23. case 0xf9f8d633: return 606;
    24. case 0xf9f8d630: return 607;
    25. case 0xf9f8d631: return 608;
    26. case 0x50b80f72: return 568;
    27. case 0x7b9888f3: return 429;
    28. case 0x28490cb8: return 433;
    29. case 0x49fbd09b: return 511;
    30. case 0x95c900f4: return 499;
    31. case 0xf146511f: return 581;
    32. case 0xaebf8da8: return 424;
    33. case 0xc7e7acb6: return 509;
    34. case 0xdd51d1b9: return 536;
    35. case 0x1a24ade5: return 496;
    36. case 0x87f75ebd: return 504;
    37. case 0x424a3d46: return 481;
    38. case 0xbd967cd6: return 422;
    39. case 0xbb280574: return 498;
    40. case 0x4d6ca705: return 609;
    41. case 0x48d21a32: return 401;
    42. case 0x289df8bc: return 575;
    43. case 0x5bc3e987: return 518;
    44. case 0x0ebd03c0: return 402;
    45. case 0x2d99ee4d: return 541;
    46. case 0xa7679208: return 482;
    47. case 0x4a4a49e5: return 431;
    48. case 0x41e98457: return 438;
    49. case 0xde6ad316: return 457;
    50. case 0x46ef4c97: return 483;
    51. case 0x94465685: return 527;
    52. case 0x3c014f04: return 548;
    53. case 0x3f7759c6: return 524;
    54. case 0x7c7c1761: return 415;
    55. case 0x6a2308d6: return 542;
    56. case 0x34f9b9e5: return 589;
    57. case 0x48d9ab71: return 437;
    58. case 0x36ce238c: return 472;
    59. case 0x048ce4d8: return 532;
    60. case 0x8af82867: return 480;
    61. case 0xa27c4402: return 512;
    62. case 0x11e79720: return 578;
    63. case 0x9a1ae78c: return 473;
    64. case 0xbb2a0285: return 593;
    65. case 0x7e26fbbd: return 486;
    66. case 0xad1566f6: return 406;
    67. case 0x113801f3: return 573;
    68. case 0xb3f36289: return 507;
    69. case 0xa57a2703: return 562;
    70. case 0xcaea9ab7: return 585;
    71. case 0x4456efc1: return 427;
    72. case 0x10e27b70: return 419;
    73. case 0xe172dc61: return 587;
    74. case 0x29d02a98: return 462;
    75. case 0x7ec873ee: return 610;
    76. case 0xb931afad: return 490;
    77. case 0x2ab97df3: return 528;
    78. case 0x2794f3ef: return 521;
    79. case 0x4ff6de45: return 433;
    80. case 0x1f625a3a: return 407;
    81. case 0xc2ca2e67: return 544;
    82. case 0x068791d5: return 565;
    83. case 0x0b8e9335: return 455;
    84. case 0xc052fd0a: return 530;
    85. case 0x8c81436c: return 526;
    86. case 0x782fecd4: return 463;
    87. case 0xb57abbc1: return 466;
    88. case 0x590c8343: return 604;
    89. case 0x2fdc4145: return 492;
    90. case 0x219f72cf: return 474;
    91. case 0xcd5812c4: return 588;
    92. case 0xbca7314d: return 434;
    93. case 0xee3163f5: return 494;
    94. case 0xee3163f6: return 502;
    95. case 0xee3163f7: return 503;
    96. case 0x48c69e2e: return 523;
    97. case 0xc8e2a7df: return 425;
    98. case 0x38b7183c: return 579;
    99. case 0xf7a8238e: return 545;
    100. case 0xe54d78d7: return 520;
    101. case 0xb7b9c69b: return 411;
    102. case 0x39350504: return 546;
    103. case 0xa29b3fa6: return 559;
    104. case 0x36c038a0: return 493;
    105. case 0x97f2c0d3: return 508;
    106. case 0xc5f9d9db: return 571;
    107. case 0xaa9e670e: return 400;
    108. case 0xa3bcae40: return 595;
    109. case 0x52bec465: return 417;
    110. case 0x40a03ca1: return 403;
    111. case 0x23da0a81: return 517;
    112. case 0xd520d42b: return 410;
    113. case 0xe8533915: return 484;
    114. case 0xe0e3224d: return 487;
    115. case 0x7ba5beec: return 551;
    116. case 0x332357cf: return 500;
    117. case 0xf88fe98d: return 444;
    118. case 0xd78ca8b6: return 556;
    119. case 0xd78ca8b5: return 557;
    120. case 0x4cd67c23: return 418;
    121. case 0x1ba3fc6f: return 510;
    122. case 0x04bc1b61: return 572;
    123. case 0x02197baf: return 423;
    124. case 0x3dfac62a: return 414;
    125. case 0x14dd24a8: return 516;
    126. case 0xf22a86a8: return 553;
    127. case 0xf544d67b: return 582;
    128. case 0x30a181e1: return 522;
    129. case 0x5aed41dd: return 467;
    130. case 0xf47205df: return 443;
    131. case 0xaa6d9f72: return 470;
    132. case 0x9cd1e736: return 461;
    133. case 0x893e44a3: return 404;
    134. case 0xc447ba54: return 584;
    135. case 0xc2c7e666: return 603;
    136. case 0x8865004f: return 600;
    137. case 0xf4905965: return 448;
    138. case 0xd529e540: return 596;
    139. case 0xd529e543: return 597;
    140. case 0xd529e542: return 598;
    141. case 0xb61d5491: return 413;
    142. case 0xeac37188: return 430;
    143. case 0x76044eb7: return 426;
    144. case 0xdd5384bc: return 436;
    145. case 0x4f9aa22c: return 547;
    146. case 0x3485e9a0: return 471;
    147. case 0x4b86adcc: return 563;
    148. case 0x84ee7984: return 489;
    149. case 0x441f7486: return 599;
    150. case 0x753a05a2: return 441;
    151. case 0x6a44cda1: return 501;
    152. case 0x8ca8debc: return 464;
    153. case 0xa8a34ae9: return 594;
    154. case 0x0889b5a1: return 465;
    155. case 0x2b7bb879: return 564;
    156. case 0xd3c8aa5a: return 453;
    157. case 0xf43a1af1: return 479;
    158. case 0x5d681434: return 534;
    159. case 0x8a31ff09: return 432;
    160. case 0x737caa4b: return 515;
    161. case 0x26f4341b: return 442;
    162. case 0xf8318edc: return 440;
    163. case 0xd239f6e4: return 476;
    164. case 0xa3c8578a: return 475;
    165. case 0x93523e04: return 543;
    166. case 0x23569dbd: return 605;
    167. case 0x16f0a71d: return 468;
    168. case 0xc9d59cf2: return 495;
    169. case 0xdc8d1a21: return 488;
    170. case 0x7610fd79: return 497;
    171. case 0xd6e869bb: return 567;
    172. case 0x4ad9564a: return 447;
    173. case 0x02e6d6fc: return 428;
    174. case 0x7b7768b1: return 405;
    175. case 0x436330b9: return 519;
    176. case 0x7b47444f: return 460;
    177. case 0x3a8f6e89: return 535;
    178. case 0x03e4ca73: return 458;
    179. case 0x9c3efc0f: return 469;
    180. case 0xa2e52fdf: return 452;
    181. case 0x11163d0c: return 446;
    182. case 0xdec103ae: return 580;
    183. case 0x10ccd46d: return 439;
    184. case 0x5b4e0183: return 538;
    185. case 0x41c4c04f: return 561;
    186. case 0x9eb12194: return 409;
    187. case 0x6a3791a7: return 513;
    188. case 0x0781ea30: return 560;
    189. case 0x4aa88126: return 550;
    190. case 0x4ae1874b: return 506;
    191. case 0x53e7a28c: return 601;
    192. case 0x4aea0646: return 574;
    193. case 0x3a40b379: return 566;
    194. case 0x11f3e134: return 549;
    195. case 0x839513e0: return 514;
    196. case 0x2dd87431: return 420;
    197. case 0x0aff0f29: return 459;
    198. case 0x6a3bfa48: return 576;
    199. case 0x0ee457f6: return 525;
    200. case 0x7505fe02: return 531;
    201. case 0x47e9f403: return 408;
    202. case 0x46b84865: return 449;
    203. case 0x0041f5ce: return 454;
    204. case 0x061e524b: return 583;
    205. case 0xaefff156: return 451;
    206. case 0x72dcaff1: return 558;
    207. case 0xf9ad2e88: return 611;
    208. case 0xc7cd604e: return 552;
    209. case 0x5da79c32: return 540;
    210. case 0x1d4bb7ee: return 491;
    211. case 0xb6a00af7: return 412;
    212. case 0xfccd5305: return 539;
    213. case 0x31845dfa: return 478;
    214. case 0xd212535f: return 421;
    215. case 0x8e499490: return 586;
    216. case 0xbe05b898: return 529;
    217. case 0x31786ba1: return 555;
    218. case 0xf4870598: return 456;
    219. case 0x7bcd021a: return 554;
    220. case 0xe09847cb: return 477;
    221. }
    222. return 0;
    223. }


    UPD: Если нужен будет конвертер списка - могу скинуть (правда там код не очень =) ).
    Опубликуй её в виде отдельной темы, а я эту тему снесу.
    Связаться со мной в VK можно через личные сообщения этой группы

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  14. #9
    Аватар для vvw
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.08.2019
    Сообщений
    20
    Репутация:
    4 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Опубликуй её в виде отдельной темы, а я эту тему снесу.
    Можешь проверить на работоспособность, ибо у меня нет интерпретатора под рукой. Я думаю, должно все работать, ибо проверял на си (неадаптированную под pawn версию)

  15. #10
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,124
    Репутация:
    1831 ±
    1. printf("%d", GetVehicleModelFromName("NRG-500"));

    Выдаёт нуль. Значение "hash", если что - 0xBBA5B096.
    То же самое и в случае с остальными моделями: циклом передаю названия моделей из массива в функцию и на все возвращает 0.
    + toupper крашит сервер, если название модели передавать в запакованном виде.

    И, как я понимаю, с такой реализацией можно забыть о том, что нужную модель будет искать по части названия?
    Связаться со мной в VK можно через личные сообщения этой группы

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

 

 
Страница 1 из 3 123 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •