Ну погоди!
Участник
- 98
- 35
Это FSкак сделать динамический редактор маппинга как на арз или трейнинге?
Это FSкак сделать динамический редактор маппинга как на арз или трейнинге?
сложно ведь догадаться, что house_gos_list нужно обнулять при открытии диалога, либо объявлять не в глобальной области видимости, зачем-то, а в самом стокепочему когда я закрываю и заново открываю диалог у меня все дома добавляются и показываются еще раз, а не вместо старых?
PHP:const MAX_HOUSE = 1000; new TOTALHOUSE; // в тотал хаусе у меня все дома new house_gos_list[MAX_HOUSES]; // в начале stock GosHouseList(playerid) { for(new i; i < TOTALHOUSE; i++) { if(HouseInfo[i][hOwned] == 0) { format(house_gos_list, sizeof(house_gos_list), "%sДом\t\tID: {C9B931}%d\n", house_gos_list, HouseInfo[i][hID]); SPD(playerid, 20, DIALOG_STYLE_LIST, "Свободные дома", house_gos_list, "Выбрать", "Закрыть"); } } }
ну у меня просто с выбором инты при создании дома такой же способ, только такого не происходит, и до того, что нужно как то обнулить, я догадался, вот только как я хз
house_gos_list[0] = EOS;
Кнопки L и M не передаются в синхре, со стороны сервера ты их не получишь. Аризона использует бинды на лаунчере для этого. Как именно сказать не могу, либо отправляет пакет о нажатии кнопки, либо отправляет сразу командупомогите пожалуйста! я решил на своём сервере сделать также, как на арз, то есть открытие/закрытие машины на L и ключ на M. Подскажите, как это сделать? какой плагин нужно юзать? весь инет обошёл, нету ничего. В павно ид кнопки L и M нету.
обидно, щас бы сделать бинды.Кнопки L и M не передаются в синхре, со стороны сервера ты их не получишь. Аризона использует бинды на лаунчере для этого. Как именно сказать не могу, либо отправляет пакет о нажатии кнопки, либо отправляет сразу команду
KeyListener для серверной и клиентской стороны.помогите пожалуйста! я решил на своём сервере сделать также, как на арз, то есть открытие/закрытие машины на L и ключ на M. Подскажите, как это сделать? какой плагин нужно юзать? весь инет обошёл, нету ничего. В павно ид кнопки L и M нету.
В моём понимании всё просто. При вызове /adown происходит проверка значения с переданого параметра на switch и исходя из значения в params[0] происходит выполнение кода. Но у меня всегда выскакивает дефолтное значения. Я даже пробовал выводить в начале SCM(playerid,-1, params[0]); перед switch, мне выдаёт 1, но при этом происходит код с default значения. В чём проблема? Почему так всё зависит от тех проверок, которые по сути являются проверками для вывода сообщения. Возможно дело в типе переданого params[0], типо я передаю строку, а проверяю на Number. Я хз.CMD:adown(playerid, params[])
{
if(IsPlayerInAnyVehicle(playerid)) return true;
По сути это проверка на нахождения игрока в авто. Её можно удалить, так как она не нужна мне
if(sscanf(params,"dd",params[0])) SendClientMessage(playerid, -1, !" Используйте: /adown [1-14]");
Тут как я понял проверка что типо регулярного выражения на то, что введено именно число, а не цифры. По сути мне так же это не нужно
new animationplayed = params[0];
Перенос значения параметров в переменную. В целом не нужно, ведь в switch я использую это значение 1 раз (Да, раньше было всё на else if)
if(animationplayed < 1 || animationplayed > 14) return SendClientMessage(playerid,0xEFEFF7AA," /adown [1-14]");
По сути проверка на ввёдённые числа
Этот код был написал на всех else if, но я перенёс него в switch, потому что считаю что красиво и по сути с его помощью можно убрать все те проверки, которые были выше
switch(animationplayed)
{
case 1: ApplyAnimation(playerid,"PED","KD_left",4.1,0,1,1,1,1,1);
case 2: ApplyAnimation(playerid,"PED","KD_right",4.1,0,1,1,1,1,1);
case 3: ApplyAnimation(playerid,"PED","KO_shot_face",4.1,0,1,1,1,1,1);
case 4: ApplyAnimation(playerid,"PED","KO_shot_front",4.1,0,1,1,1,1,1);
case 5: ApplyAnimation(playerid,"PED","KO_shot_stom",4.1,0,1,1,1,1,1);
case 6: ApplyAnimation(playerid,"PED","KO_skid_back",4.1,0,1,1,1,1,1);
case 7: ApplyAnimation(playerid,"PED","KO_skid_front",4.1,0,1,1,1,1,1);
case 8: ApplyAnimation(playerid,"PED","KO_spin_L",4.1,0,1,1,1,1,1);
case 9: ApplyAnimation(playerid,"PED","KO_spin_R",4.1,0,0,0,1,1,1);
case 10: ApplyAnimation(playerid,"PED","BIKE_fallR",4.1,0,1,1,1,1,1);
case 11: ApplyAnimation(playerid,"PED","BIKE_fall_off",4.1,0,1,1,1,1,1);
case 12: ApplyAnimation(playerid,"GYMNASIUM","gym_jog_falloff",4.1,0,1,1,1,1,1);
case 13: ApplyAnimation(playerid,"SWAT","gnstwall_injurd",4.1,0,1,1,1,1,1);
case 14: ApplyAnimation(playerid,"PED","BIKE_pickupL",4.1,0,0,0,0,0,1);
//default: SCM(playerid,-1," Используйте : /adown [1-14]");
Я пытался вот так вот обойти все остальные проверки.
}
return 1;
}
CMD:time(playerid)Можно ли писать код типо так
CMD:time {
Код
}
А не так
CMD:time
{
Код
}
CMD:adown(playerid, params[])
{
if(IsPlayerInAnyVehicle(playerid)) return true;
new animationplayed; // записываем params[] в переменную
if(sscanf(params,"d",animationplayed)) SendClientMessage(playerid, -1, !" Используйте: /adown [1-14]"); /* тут лишняя "d" была, потому что "dd" проверяет 2 аргумента, а команда у тебя только для 1.*/
if(animationplayed < 1 || animationplayed > 14) return SendClientMessage(playerid,0xEFEFF7AA," /adown [1-14]");
switch(animationplayed)
{
case 1: ApplyAnimation(playerid,"PED","KD_left",4.1,0,1,1,1,1,1);
case 2: ApplyAnimation(playerid,"PED","KD_right",4.1,0,1,1,1,1,1);
case 3: ApplyAnimation(playerid,"PED","KO_shot_face",4.1,0,1,1,1,1,1);
case 4: ApplyAnimation(playerid,"PED","KO_shot_front",4.1,0,1,1,1,1,1);
case 5: ApplyAnimation(playerid,"PED","KO_shot_stom",4.1,0,1,1,1,1,1);
case 6: ApplyAnimation(playerid,"PED","KO_skid_back",4.1,0,1,1,1,1,1);
case 7: ApplyAnimation(playerid,"PED","KO_skid_front",4.1,0,1,1,1,1,1);
case 8: ApplyAnimation(playerid,"PED","KO_spin_L",4.1,0,1,1,1,1,1);
case 9: ApplyAnimation(playerid,"PED","KO_spin_R",4.1,0,0,0,1,1,1);
case 10: ApplyAnimation(playerid,"PED","BIKE_fallR",4.1,0,1,1,1,1,1);
case 11: ApplyAnimation(playerid,"PED","BIKE_fall_off",4.1,0,1,1,1,1,1);
case 12: ApplyAnimation(playerid,"GYMNASIUM","gym_jog_falloff",4.1,0,1,1,1,1,1);
case 13: ApplyAnimation(playerid,"SWAT","gnstwall_injurd",4.1,0,1,1,1,1,1);
case 14: ApplyAnimation(playerid,"PED","BIKE_pickupL",4.1,0,0,0,0,0,1);
default: SCM(playerid,-1," Используйте : /adown [1-14]");
}
return 1;
}
Да не, код который я продемонстрировал и так работает. В нём нет ошибок и типо того. Почему этот код не может работать просто со switch? Зачем мне делать эти все проверки? Если по сути любое значение в switch, кроме нужного 1-14 является неправильным. Текст, пустота, значение выше или меньше 1-14. Почему работает только с этими проверками?CMD:time(playerid)
{
// code
}
вроде должно работатьPHP:CMD:adown(playerid, params[]) { if(IsPlayerInAnyVehicle(playerid)) return true; new animationplayed; // записываем params[] в переменную if(sscanf(params,"d",animationplayed)) SendClientMessage(playerid, -1, !" Используйте: /adown [1-14]"); /* тут лишняя "d" была, потому что "dd" проверяет 2 аргумента, а команда у тебя только для 1.*/ if(animationplayed < 1 || animationplayed > 14) return SendClientMessage(playerid,0xEFEFF7AA," /adown [1-14]"); switch(animationplayed) { case 1: ApplyAnimation(playerid,"PED","KD_left",4.1,0,1,1,1,1,1); case 2: ApplyAnimation(playerid,"PED","KD_right",4.1,0,1,1,1,1,1); case 3: ApplyAnimation(playerid,"PED","KO_shot_face",4.1,0,1,1,1,1,1); case 4: ApplyAnimation(playerid,"PED","KO_shot_front",4.1,0,1,1,1,1,1); case 5: ApplyAnimation(playerid,"PED","KO_shot_stom",4.1,0,1,1,1,1,1); case 6: ApplyAnimation(playerid,"PED","KO_skid_back",4.1,0,1,1,1,1,1); case 7: ApplyAnimation(playerid,"PED","KO_skid_front",4.1,0,1,1,1,1,1); case 8: ApplyAnimation(playerid,"PED","KO_spin_L",4.1,0,1,1,1,1,1); case 9: ApplyAnimation(playerid,"PED","KO_spin_R",4.1,0,0,0,1,1,1); case 10: ApplyAnimation(playerid,"PED","BIKE_fallR",4.1,0,1,1,1,1,1); case 11: ApplyAnimation(playerid,"PED","BIKE_fall_off",4.1,0,1,1,1,1,1); case 12: ApplyAnimation(playerid,"GYMNASIUM","gym_jog_falloff",4.1,0,1,1,1,1,1); case 13: ApplyAnimation(playerid,"SWAT","gnstwall_injurd",4.1,0,1,1,1,1,1); case 14: ApplyAnimation(playerid,"PED","BIKE_pickupL",4.1,0,0,0,0,0,1); default: SCM(playerid,-1," Используйте : /adown [1-14]"); } return 1; }
Потому что params - изначально строка. В павн ты не можешь использовать switch на строку - для этого надо тянуть значение из этой строки.Всем привет. Я программирую на JS. Но работаю в SAMP и вот я решил открыть код, который заказал и немного не понимаю почему и как он работает. Мне просто интересно. Я даже изучать его не собираюсь. Но я не понимаю в чём проблема. Жирным текстом я буду пояснять как я понял код
В моём понимании всё просто. При вызове /adown происходит проверка значения с переданого параметра на switch и исходя из значения в params[0] происходит выполнение кода. Но у меня всегда выскакивает дефолтное значения. Я даже пробовал выводить в начале SCM(playerid,-1, params[0]); перед switch, мне выдаёт 1, но при этом происходит код с default значения. В чём проблема? Почему так всё зависит от тех проверок, которые по сути являются проверками для вывода сообщения. Возможно дело в типе переданого params[0], типо я передаю строку, а проверяю на Number. Я хз.
Код не мой. Я лишь в нём рылся и менял мелочи
И ещё вопрос. Например есть команда givegun 0 24 1000 (Id игрок, id gun, кол-во патро). Почему при вводе GivePlayerWeapon(playerid, params[1], params[2]); Я не могу использовать GivePlayerWeapon(params[0], params[1], params[2]); Я конечно предполагаю, что это что то типо обязательного параметра и не просто число. Но буду рад, если поясните фронтендеру. Строгая типизация для меня как Нарния))))
P.S В JS проблема бы была в том, что нет break или return, который завершает выполнение кода, но как я понял в pawn такого нет. И ещё вопрос. Можно ли писать код типо так
CMD:time {
Код
}
А не так
CMD:time
{
Код
}
CMD:adown(playerid, params[])
{
sscanf(params,"d",params[0]);
switch(params[0])
{
case 1: ApplyAnimation(playerid,"PED","KD_left",4.1,0,1,1,1,1,1);
case 2: ApplyAnimation(playerid,"PED","KD_right",4.1,0,1,1,1,1,1);
case 3: ApplyAnimation(playerid,"PED","KO_shot_face",4.1,0,1,1,1,1,1);
case 4: ApplyAnimation(playerid,"PED","KO_shot_front",4.1,0,1,1,1,1,1);
case 5: ApplyAnimation(playerid,"PED","KO_shot_stom",4.1,0,1,1,1,1,1);
case 6: ApplyAnimation(playerid,"PED","KO_skid_back",4.1,0,1,1,1,1,1);
case 7: ApplyAnimation(playerid,"PED","KO_skid_front",4.1,0,1,1,1,1,1);
case 8: ApplyAnimation(playerid,"PED","KO_spin_L",4.1,0,1,1,1,1,1);
case 9: ApplyAnimation(playerid,"PED","KO_spin_R",4.1,0,0,0,1,1,1);
case 10: ApplyAnimation(playerid,"PED","BIKE_fallR",4.1,0,1,1,1,1,1);
case 11: ApplyAnimation(playerid,"PED","BIKE_fall_off",4.1,0,1,1,1,1,1);
case 12: ApplyAnimation(playerid,"GYMNASIUM","gym_jog_falloff",4.1,0,1,1,1,1,1);
case 13: ApplyAnimation(playerid,"SWAT","gnstwall_injurd",4.1,0,1,1,1,1,1);
case 14: ApplyAnimation(playerid,"PED","BIKE_pickupL",4.1,0,0,0,0,0,1);
default: SCM(playerid,-1," Используйте : /adown [1-14]");
}
}
Ты в pwn шаришь? Можешь помочь 1-2 кмд сделать?Потому что params - изначально строка. В павн ты не можешь использовать switch на строку - для этого надо тянуть значение из этой строки.
Самый простой способ - через sscanf.
C++:CMD:adown(playerid, params[]) { sscanf(params,"d",params[0]); switch(params[0]) { case 1: ApplyAnimation(playerid,"PED","KD_left",4.1,0,1,1,1,1,1); case 2: ApplyAnimation(playerid,"PED","KD_right",4.1,0,1,1,1,1,1); case 3: ApplyAnimation(playerid,"PED","KO_shot_face",4.1,0,1,1,1,1,1); case 4: ApplyAnimation(playerid,"PED","KO_shot_front",4.1,0,1,1,1,1,1); case 5: ApplyAnimation(playerid,"PED","KO_shot_stom",4.1,0,1,1,1,1,1); case 6: ApplyAnimation(playerid,"PED","KO_skid_back",4.1,0,1,1,1,1,1); case 7: ApplyAnimation(playerid,"PED","KO_skid_front",4.1,0,1,1,1,1,1); case 8: ApplyAnimation(playerid,"PED","KO_spin_L",4.1,0,1,1,1,1,1); case 9: ApplyAnimation(playerid,"PED","KO_spin_R",4.1,0,0,0,1,1,1); case 10: ApplyAnimation(playerid,"PED","BIKE_fallR",4.1,0,1,1,1,1,1); case 11: ApplyAnimation(playerid,"PED","BIKE_fall_off",4.1,0,1,1,1,1,1); case 12: ApplyAnimation(playerid,"GYMNASIUM","gym_jog_falloff",4.1,0,1,1,1,1,1); case 13: ApplyAnimation(playerid,"SWAT","gnstwall_injurd",4.1,0,1,1,1,1,1); case 14: ApplyAnimation(playerid,"PED","BIKE_pickupL",4.1,0,0,0,0,0,1); default: SCM(playerid,-1," Используйте : /adown [1-14]"); } }
Да, я мне уже подсказали. Так и думал. Спасибо за ответ. Радостно что я хотя бы понимаю основы. Капец. Я уже пол мода переделал. Не думал что с фронта хоть что то пойму. Хорошего вечераПотому что params - изначально строка. В павн ты не можешь использовать switch на строку - для этого надо тянуть значение из этой строки.
Самый простой способ - через sscanf.
C++:CMD:adown(playerid, params[]) { sscanf(params,"d",params[0]); switch(params[0]) { case 1: ApplyAnimation(playerid,"PED","KD_left",4.1,0,1,1,1,1,1); case 2: ApplyAnimation(playerid,"PED","KD_right",4.1,0,1,1,1,1,1); case 3: ApplyAnimation(playerid,"PED","KO_shot_face",4.1,0,1,1,1,1,1); case 4: ApplyAnimation(playerid,"PED","KO_shot_front",4.1,0,1,1,1,1,1); case 5: ApplyAnimation(playerid,"PED","KO_shot_stom",4.1,0,1,1,1,1,1); case 6: ApplyAnimation(playerid,"PED","KO_skid_back",4.1,0,1,1,1,1,1); case 7: ApplyAnimation(playerid,"PED","KO_skid_front",4.1,0,1,1,1,1,1); case 8: ApplyAnimation(playerid,"PED","KO_spin_L",4.1,0,1,1,1,1,1); case 9: ApplyAnimation(playerid,"PED","KO_spin_R",4.1,0,0,0,1,1,1); case 10: ApplyAnimation(playerid,"PED","BIKE_fallR",4.1,0,1,1,1,1,1); case 11: ApplyAnimation(playerid,"PED","BIKE_fall_off",4.1,0,1,1,1,1,1); case 12: ApplyAnimation(playerid,"GYMNASIUM","gym_jog_falloff",4.1,0,1,1,1,1,1); case 13: ApplyAnimation(playerid,"SWAT","gnstwall_injurd",4.1,0,1,1,1,1,1); case 14: ApplyAnimation(playerid,"PED","BIKE_pickupL",4.1,0,0,0,0,0,1); default: SCM(playerid,-1," Используйте : /adown [1-14]"); } }
Возможно дело в типе переданого params[0], типо я передаю строку, а проверяю на Number. Я хз.
какая команда тебе нужна?Ты в pwn шаришь? Можешь помочь 1-2 кмд сделать?