Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 7 из 7
  1. #1
    Аватар для DmitriyVasilev
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.01.2019
    Сообщений
    86
    Репутация:
    0 ±

    Некорректно работает система саппортов

    Здравствуйте, при назначении саппорта, создаются две строки с одним и тем же именем. как исправить, чтобы при назначении сапорта создавалась только одна строка в бд?
    1. CMD:spmenu(playerid, params[])
    2. {
    3. if(User[playerid][pAdmin] < 9) return 1;
    4. new Names[32], query[128];
    5. if(User[playerid][pAdmin] > 7) format(query, sizeof(query), "{FF8040}Назначить саппорта\n");
    6. mysql_format(DATABASE, QUERY, 62, "SELECT Name FROM `"TABLE_ACCOUNTS"` WHERE pHelper IN ('1','2')");
    7. mysql_query(DATABASE, QUERY);
    8. new r = cache_num_rows();
    9. if(r)
    10. {
    11. for(new i = 0; i < r; i++)
    12. {
    13. new strin[40];
    14. cache_get_field_content(i,"Name",Names,DATABASE,60);
    15. format(strin,sizeof(strin),"%s\n",Names);
    16. strcat(query, strin);
    17. }
    18. }
    19. ShowPlayerDialog(playerid, 21021, DIALOG_STYLE_LIST, "Управление саппортами", query, "Далее", "Закрыть");
    20. return true;
    21. }
    22. CMD:addsupport(playerid, params[])
    23. {
    24. if(User[playerid][pAdmin] < 9 || dostup[playerid] == 0) return 1;
    25. new name[32], var;
    26. if(sscanf(params, "s[32]i", name, var)) return SCM(playerid, -1, "Введите: /addsupport [ник] [1 - назначить | 0 - снять]");
    27. new para1 = GetPlayerID(name);
    28. if(IsPlayerConnected(para1) && para1 != INVALID_PLAYER_ID)
    29. {
    30. if(var == 1)
    31. {
    32. User[para1][pHelper] = 2;
    33. mysql_format(DATABASE,QUERY, 256, "UPDATE accounts SET pHelper = '2' WHERE name = '%s'",name);
    34. format(YCMDstr, sizeof(YCMDstr), "Вы назначили %s[%i] саппортом", name, para1);
    35. }
    36. else
    37. {
    38. User[para1][pHelper] = 0;
    39. mysql_format(DATABASE,QUERY, 256, "UPDATE accounts SET pHelper = '0' WHERE name = '%s'",name);
    40. format(YCMDstr, sizeof(YCMDstr), "Вы сняли %s[%i] с саппорта", name, para1);
    41. }
    42. }
    43. else
    44. {
    45. if(var == 1)
    46. {
    47. mysql_format(DATABASE,QUERY, 256, "UPDATE accounts SET pHelper = '2' WHERE name = '%s'",name);
    48. format(YCMDstr, sizeof(YCMDstr), "Вы назначили %s саппортом", name);
    49. }
    50. else
    51. {
    52. mysql_format(DATABASE,QUERY, 256, "UPDATE accounts SET pHelper = '0' WHERE name = '%s'",name);
    53. format(YCMDstr, sizeof(YCMDstr), "Вы сняли %s с саппорта", name);
    54. }
    55. }
    56. mysql_function_query(DATABASE,QUERY,false,"","");
    57. SendClientMessage(playerid, COLOR_YELLOW2, YCMDstr);
    58. return 1;
    59. }
    60.  
    61. //Public OnDialogResponse
    62. case 21021:
    63. {
    64. if(!response) return true;
    65. if(!strcmp(inputtext, "Назначить саппорта", true))
    66. {
    67. return ShowPlayerDialog(playerid, 21023, DIALOG_STYLE_INPUT, "Добавить саппорта", "Введите ник нейм саппорта", "Добавить", "Назад");
    68. }
    69. SetPVarString(playerid, "SelectedSupport", inputtext);
    70. new query[128];
    71. format(query, sizeof(query), "[0] Разморозить права\n[1] Заморозить права\n");
    72. if(User[playerid][pAdmin] > 7) strcat(query, "[2] Снять саппорта", sizeof(query));
    73. ShowPlayerDialog(playerid, 21022, DIALOG_STYLE_LIST, "Управление саппортами", query, "Выбор", "Назад");
    74. }
    75. case 21022:
    76. {
    77. if(!response) return DeletePVar(playerid, "SelectedSupport"),SetTimerEx("SpMenu" , 50, false, "i", playerid);
    78. new Names[32];
    79. new cmd_call[35];
    80. GetPVarString(playerid, "SelectedSupport", Names, sizeof(Names));
    81. switch(listitem)
    82. {
    83. case 0:
    84. {
    85. format(cmd_call, sizeof(cmd_call), "%s 1", Names);
    86. callcmd::setsupport(playerid,cmd_call);
    87. }
    88. case 1:
    89. {
    90. format(cmd_call, sizeof(cmd_call), "%s 0", Names);
    91. callcmd::setsupport(playerid,cmd_call);
    92. }
    93. case 2:
    94. {
    95. format(cmd_call, sizeof(cmd_call), "%s 0", Names);
    96. callcmd::addsupport(playerid,cmd_call);
    97. }
    98. }
    99. SetTimerEx("SpMenu" , 50, false, "i", playerid);
    100. }
    101. case 21023:
    102. {
    103. if(!response) return DeletePVar(playerid, "SelectedSupport"),callcmd::spmenu(playerid,string);
    104. if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 21023, DIALOG_STYLE_INPUT, "Добавить саппорта", "Введите ник нейм саппорта", "Добавить", "Назад");
    105. format(string, sizeof(string), "%s 1", inputtext);
    106. callcmd::addsupport(playerid,string);
    107. SetTimerEx("SpMenu" , 50, false, "i", playerid);
    108. }
    109. //public
    110. @_SpMenu(playerid);
    111. @_SpMenu(playerid) callcmd::spmenu(playerid,"");

  2. #2
    Аватар для UnO
    Пользователь

    Статус
    Оффлайн
    Регистрация
    20.01.2018
    Сообщений
    52
    Репутация:
    7 ±
    в твоём коде строки не создаются

  3. #3
    Аватар для DmitriyVasilev
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.01.2019
    Сообщений
    86
    Репутация:
    0 ±
    проблема только тут, в spmenu потом показывает что саппортом является 2 одинаковых ника, хотя появиться должен только один
    1. if(IsPlayerConnected(para1) && para1 != INVALID_PLAYER_ID)
    2. {
    3. if(var == 1)
    4. {
    5. User[para1][pHelper] = 2;
    6. mysql_format(DATABASE,QUERY, 256, "UPDATE accounts SET pHelper = '2' WHERE name = '%s'",name);
    7. format(YCMDstr, sizeof(YCMDstr), "Вы назначили %s[%i] саппортом", name, para1);
    8. }
    9. else
    10. {
    11. User[para1][pHelper] = 0;
    12. mysql_format(DATABASE,QUERY, 256, "UPDATE accounts SET pHelper = '0' WHERE name = '%s'",name);
    13. format(YCMDstr, sizeof(YCMDstr), "Вы сняли %s[%i] с саппорта", name, para1);
    14. }
    15. }
    16. else
    17. {
    18. if(var == 1)
    19. {
    20. mysql_format(DATABASE,QUERY, 256, "UPDATE accounts SET pHelper = '2' WHERE name = '%s'",name);
    21. format(YCMDstr, sizeof(YCMDstr), "Вы назначили %s саппортом", name);
    22. }
    23. else
    24. {
    25. mysql_format(DATABASE,QUERY, 256, "UPDATE accounts SET pHelper = '0' WHERE name = '%s'",name);
    26. format(YCMDstr, sizeof(YCMDstr), "Вы сняли %s с саппорта", name);
    27. }
    28. }
    29. mysql_function_query(DATABASE,QUERY,false,"","");

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

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±
    Цитата Сообщение от DmitriyVasilev Посмотреть сообщение
    проблема только тут, в spmenu потом показывает что саппортом является 2 одинаковых ника, хотя появиться должен только один
    1. if(IsPlayerConnected(para1) && para1 != INVALID_PLAYER_ID)
    2. {
    3. if(var == 1)
    4. {
    5. User[para1][pHelper] = 2;
    6. mysql_format(DATABASE,QUERY, 256, "UPDATE accounts SET pHelper = '2' WHERE name = '%s'",name);
    7. format(YCMDstr, sizeof(YCMDstr), "Вы назначили %s[%i] саппортом", name, para1);
    8. }
    9. else
    10. {
    11. User[para1][pHelper] = 0;
    12. mysql_format(DATABASE,QUERY, 256, "UPDATE accounts SET pHelper = '0' WHERE name = '%s'",name);
    13. format(YCMDstr, sizeof(YCMDstr), "Вы сняли %s[%i] с саппорта", name, para1);
    14. }
    15. }
    16. else
    17. {
    18. if(var == 1)
    19. {
    20. mysql_format(DATABASE,QUERY, 256, "UPDATE accounts SET pHelper = '2' WHERE name = '%s'",name);
    21. format(YCMDstr, sizeof(YCMDstr), "Вы назначили %s саппортом", name);
    22. }
    23. else
    24. {
    25. mysql_format(DATABASE,QUERY, 256, "UPDATE accounts SET pHelper = '0' WHERE name = '%s'",name);
    26. format(YCMDstr, sizeof(YCMDstr), "Вы сняли %s с саппорта", name);
    27. }
    28. }
    29. mysql_function_query(DATABASE,QUERY,false,"","");
    PHP код:
    if (IsPlayerConnected(para1))
    {
        
    User[para1][pHelper] = var == 0;
        
    mysql_format(DATABASE,QUERY256"UPDATE accounts SET pHelper = '%i' WHERE name = '%s'"User[para1][pHelper], name);
        
    format(YCMDstrsizeof(YCMDstr), "Вы %s %s[%i] %s", var == "назначили" "уволили"  namepara1, var == "саппортом" "с саппорта");
    }
    else
    {   
        new
            
    helper = var == 0;
        
    mysql_format(DATABASE,QUERY256"UPDATE accounts SET pHelper = '%i' WHERE name = '%s'"helpername);
        
    format(YCMDstrsizeof(YCMDstr), "Вы %s %s %s", var == "назначили" "уволили"  name, var == "саппортом" "с саппорта");
    }
    mysql_function_query(DATABASE,QUERY,false,"","");
    SendClientMessage(playeridCOLOR_YELLOW2YCMDstr); 
    Последний раз редактировалось m1n1vv; 08.02.2019 в 04:40.

  5. #5
    Аватар для DmitriyVasilev
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.01.2019
    Сообщений
    86
    Репутация:
    0 ±
    ошибку -ident.... дает в formata'x

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

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±
    PHP код:
    if (IsPlayerConnected(para1))
    {
        
    User[para1][pHelper] = var == 0;
        
    mysql_format(DATABASE,QUERY256"UPDATE accounts SET pHelper = '%i' WHERE name = '%s'"User[para1][pHelper], name);
        
    format(YCMDstrsizeof(YCMDstr), "Вы %s %s[%i] %s", var == "назначили" "уволили",  namepara1, var == "саппортом" "с саппорта");
    }
    else
    {   
        new
            
    helper = var == 0;
        
    mysql_format(DATABASE,QUERY256"UPDATE accounts SET pHelper = '%i' WHERE name = '%s'"helpername);
        
    format(YCMDstrsizeof(YCMDstr), "Вы %s %s %s", var == "назначили" "уволили",  name, var == "саппортом" "с саппорта");
    }
    mysql_function_query(DATABASE,QUERY,false,"",""); 

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от m1n1vv Посмотреть сообщение
    PHP код:
    if (IsPlayerConnected(para1))
    {
        
    User[para1][pHelper] = var == 0;
        
    mysql_format(DATABASE,QUERY256"UPDATE accounts SET pHelper = '%i' WHERE name = '%s'"User[para1][pHelper], name);
        
    format(YCMDstrsizeof(YCMDstr), "Вы %s %s[%i] %s", var == "назначили" "уволили",  namepara1, var == "саппортом" "с саппорта");
    }
    else
    {   
        new
            
    helper = var == 0;
        
    mysql_format(DATABASE,QUERY256"UPDATE accounts SET pHelper = '%i' WHERE name = '%s'"helpername);
        
    format(YCMDstrsizeof(YCMDstr), "Вы %s %s %s", var == "назначили" "уволили",  name, var == "саппортом" "с саппорта");
    }
    mysql_function_query(DATABASE,QUERY,false,"",""); 
    Давайте сократим количество строк, но вместо одной проверки впихнём сразу три! О-п-т-и-м-и-з-а-ц-и-я




    Автор, посмотри какое значение возвращает GetPlayerID в случае, если игрок не найден и если это не INVALID_PLAYER_ID, то замени значение вот в этом условии
    PHP код:
    if(para1 != INVALID_PLAYER_ID
    1. CMD:addsupport(playerid, params[])
    2. {
    3. if(User[playerid][pAdmin] < 9 || dostup[playerid] == 0)
    4. return 1;
    5.  
    6. new name[MAX_PLAYER_NAME], var;
    7. if(sscanf(params, "s[20]i", name, var))
    8. return SCM(playerid, -1, "Введите: /addsupport [ник] [1 - назначить | 0 - снять]");
    9.  
    10. new para1 = GetPlayerID(name);
    11. new level;
    12. if(para1 != INVALID_PLAYER_ID)
    13. {
    14. if(var == 1)
    15. {
    16. User[para1][pHelper] = level = 2;
    17. format(YCMDstr, sizeof(YCMDstr), "Вы назначили %s[%i] саппортом", name, para1);
    18. }
    19. else
    20. {
    21. User[para1][pHelper] = 0;
    22. format(YCMDstr, sizeof(YCMDstr), "Вы сняли %s[%i] с саппорта", name, para1);
    23. }
    24. }
    25. else
    26. {
    27. if(var == 1)
    28. {
    29. level = 2;
    30. format(YCMDstr, sizeof(YCMDstr), "Вы назначили %s саппортом", name);
    31. }
    32. else
    33. {
    34. format(YCMDstr, sizeof(YCMDstr), "Вы сняли %s с саппорта", name);
    35. }
    36. }
    37. SendClientMessage(playerid, COLOR_YELLOW2, YCMDstr);
    38.  
    39. mysql_format(DATABASE, QUERY, sizeof(QUERY), "UPDATE accounts SET pHelper=%d WHERE name='%e'", level, name);
    40. mysql_function_query(DATABASE, QUERY, false, "", "");
    41. return 1;
    42. }


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

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

    Steve Pavlina

 

 

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

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

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

Ваши права

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