Вопросы по PAWN скриптингу

moreveal

Известный
Проверенный
850
525
почему когда я закрываю и заново открываю диалог у меня все дома добавляются и показываются еще раз, а не вместо старых?
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 нужно обнулять при открытии диалога, либо объявлять не в глобальной области видимости, зачем-то, а в самом стоке
 

Hund dev.

Участник
47
2
Пытаюсь отключить кнопки << >> Spawn
Добавил
TogglePlayerSpectating(playerid, true); в OnPlayerConnected (Там вся регистрация и авторизация)
И
TogglePlayerSpectating(playerid, false); Перед спавном игрока
Вроде бы убирает, но при нажатии на финальный диалог, появляются эти доставучие кнопки.
Подскажите, что делать?
 
  • Нравится
Реакции: Willy4ka

Ali Express

Участник
39
3
помогите пожалуйста! я решил на своём сервере сделать также, как на арз, то есть открытие/закрытие машины на L и ключ на M. Подскажите, как это сделать? какой плагин нужно юзать? весь инет обошёл, нету ничего. В павно ид кнопки L и M нету.
 

sdfy

Известный
349
230
помогите пожалуйста! я решил на своём сервере сделать также, как на арз, то есть открытие/закрытие машины на L и ключ на M. Подскажите, как это сделать? какой плагин нужно юзать? весь инет обошёл, нету ничего. В павно ид кнопки L и M нету.
Кнопки L и M не передаются в синхре, со стороны сервера ты их не получишь. Аризона использует бинды на лаунчере для этого. Как именно сказать не могу, либо отправляет пакет о нажатии кнопки, либо отправляет сразу команду
 

Ali Express

Участник
39
3
Кнопки L и M не передаются в синхре, со стороны сервера ты их не получишь. Аризона использует бинды на лаунчере для этого. Как именно сказать не могу, либо отправляет пакет о нажатии кнопки, либо отправляет сразу команду
обидно, щас бы сделать бинды.
 

savvin

Известный
407
140
помогите пожалуйста! я решил на своём сервере сделать также, как на арз, то есть открытие/закрытие машины на L и ключ на M. Подскажите, как это сделать? какой плагин нужно юзать? весь инет обошёл, нету ничего. В павно ид кнопки L и M нету.
KeyListener для серверной и клиентской стороны.
 

SherbakovSAF

Участник
30
2
Всем привет. Я программирую на JS. Но работаю в SAMP и вот я решил открыть код, который заказал и немного не понимаю почему и как он работает. Мне просто интересно. Я даже изучать его не собираюсь. Но я не понимаю в чём проблема. Жирным текстом я буду пояснять как я понял код

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;
}
В моём понимании всё просто. При вызове /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
{
Код
}
 

XRLM

Известный
2,537
852
Можно ли писать код типо так
CMD:time {
Код
}

А не так

CMD:time
{
Код
}
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;
}
вроде должно работать
 
  • Клоун
Реакции: Air_Official

SherbakovSAF

Участник
30
2
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;
}
вроде должно работать
Да не, код который я продемонстрировал и так работает. В нём нет ошибок и типо того. Почему этот код не может работать просто со switch? Зачем мне делать эти все проверки? Если по сути любое значение в switch, кроме нужного 1-14 является неправильным. Текст, пустота, значение выше или меньше 1-14. Почему работает только с этими проверками?
 

atomlin

Известный
579
380
Всем привет. Я программирую на 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
{
Код
}
Потому что 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]");
    }
}
 

Dimonster1997

Известный
139
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]");
    }
}
Ты в pwn шаришь? Можешь помочь 1-2 кмд сделать?
 

SherbakovSAF

Участник
30
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[0], типо я передаю строку, а проверяю на Number. Я хз.