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

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

    Как реализовать /members на mysql до конца

    Всем привет. Сделал команду /members, но не могу доделать расширенный функционал. Нужно сделать так, что бы при выборе офлайн/онлайн игрока в диалоге, появлялся еще один диалог с подгрузкой других данных о нём. Не приходит в голову как реализовать. HELP!
    На данный момент так реализовано.
    1. CMD:members(playerid, params[]) {
    2. if(player_info[playerid][pMember] < 1) return SendClientMessage(playerid, COLOR_GREY, "Вы не уполномочены использовать эту команду.");
    3. new query[43 + 2 + 1];
    4. format(query, sizeof query, "SELECT * FROM `players` WHERE `Member` = '%d'", player_info[playerid][pMember]);
    5. mysql_tquery(dbHandle, query, "CheckMembers", "i", playerid);
    6. return 1;
    7. }

    1. public CheckMembers(playerid) {
    2. new string[256], msgitem[256];
    3. strins(msgitem, "№\tname\t\tstatus\n", strlen(msgitem), 14);
    4. for(new i = 0, j; i < cache_num_rows(); i++) {
    5. j++;
    6. cache_get_value_name(i, "Name", player_info[i][pName], MAX_PLAYER_NAME);
    7. format(string, sizeof(string), "%d.\t%s\t%s\n", j, player_info[i][pName], (IsPlayerConnected(i)) ? ("Online") : ("Offline"));
    8. strins(msgitem, string, strlen(msgitem), strlen(string));
    9. }
    10. ShowPlayerDialog(playerid, DIALOG_ID_NONE, DIALOG_STYLE_TABLIST_HEADERS, "Члены организации:", msgitem, "Хорошо", "Отмена");
    11. return 1;
    12. }


    UPD: попил пивка и пришла мысль по решению. всем спасибо, сделал то что нужно.
    Последний раз редактировалось wolfnex; 05.12.2020 в 19:37.

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

    Статус
    Оффлайн
    Регистрация
    19.01.2020
    Сообщений
    69
    Репутация:
    8 ±
    Цитата Сообщение от wolfnex Посмотреть сообщение
    Всем привет. Сделал команду /members, но не могу доделать расширенный функционал. Нужно сделать так, что бы при выборе офлайн/онлайн игрока в диалоге, появлялся еще один диалог с подгрузкой других данных о нём. Не приходит в голову как реализовать. HELP!
    На данный момент так реализовано.
    1. CMD:members(playerid, params[]) {
    2. if(player_info[playerid][pMember] < 1) return SendClientMessage(playerid, COLOR_GREY, "Вы не уполномочены использовать эту команду.");
    3. new query[43 + 2 + 1];
    4. format(query, sizeof query, "SELECT * FROM `players` WHERE `Member` = '%d'", player_info[playerid][pMember]);
    5. mysql_tquery(dbHandle, query, "CheckMembers", "i", playerid);
    6. return 1;
    7. }

    1. public CheckMembers(playerid) {
    2. new string[256], msgitem[256];
    3. strins(msgitem, "№\tname\t\tstatus\n", strlen(msgitem), 14);
    4. for(new i = 0, j; i < cache_num_rows(); i++) {
    5. j++;
    6. cache_get_value_name(i, "Name", player_info[i][pName], MAX_PLAYER_NAME);
    7. format(string, sizeof(string), "%d.\t%s\t%s\n", j, player_info[i][pName], (IsPlayerConnected(i)) ? ("Online") : ("Offline"));
    8. strins(msgitem, string, strlen(msgitem), strlen(string));
    9. }
    10. ShowPlayerDialog(playerid, DIALOG_ID_NONE, DIALOG_STYLE_TABLIST_HEADERS, "Члены организации:", msgitem, "Хорошо", "Отмена");
    11. return 1;
    12. }


    UPD: попил пивка и пришла мысль по решению. всем спасибо, сделал то что нужно.
    strins не учитывает размер массива, поэтому может записать за пределы. В сети есть исправленная версия(если я не ошибаюсь именно на этом портале).
    Ну или можешь сей код:
    PHP код:
    strins(msgitem"№\tname\t\tstatus\n"strlen(msgitem), 14); 
    Расписать по-другому:
    PHP код:
    new msgitem[256] = "№\tname\t\tstatus\n"
    А тут заменить на strcat:
    PHP код:
    strins(msgitemstringstrlen(msgitem), strlen(string)); 
    WRONG:


    Ты пытаешься получить ID найденных полей, но не игроков. В данном случае нужна будет функция, получающая ID игрока по нику.

    Я тут чота такое набросал:
    PHP код:
    stock GetPlayerIDByName(const name[])
    {
        new 
    playerid INVALID_PLAYER_ID;

        
    sscanf(name"u"playerid);

        return 
    playerid;

    Как использовать думаю разберёшься. Да и советую прочитать мануал Daniel'a Cortez'a о выделении памяти, а то вот такое вот не годиться:

 

 

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

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

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

Ваши права

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