Доступ к готовым решениям

Переход в группу "Пользователь"

300.00
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Мануал Система друзей

Long-

Мастер
Пользователь
Регистрация
14 Дек 2014
Сообщения
2,515
Лучшие ответы
1
Репутация
597
Система мобильного телефона.​

Описание:

Пошарился по форуму, хорошую тему с мобильником так и не нашел, выложу свой вариант.
Телефоном пользоваться очень просто, добавлять контакты/удалять и т.п

При добавление контакта в базу записывается id, nickname того игрока которого записали, и сам id контакта сравнивается с id игроком, и при открытии книги идет выборка с нужным ID что позволяет записывать хоть миллионы контактов.
При нажатии на игрока в вашем списке, будет открыто еще одно меню, где можно выбрать действие, позвонить, отправить СМС и т.п.

Особенности:

  • Иметь номеров сколько угодно.
  • Удалять номера.
  • Взаимодействие с контактами.
  • Хранение данных MySQL 39-2.
  • Командный процессор: DC_CMD.(Не писать мне про pawn.cmd..)

И так приступим,

Ко всем глобальным переменным:​

PHP:
new TOTALCONTACT;

const DLG_PHONEMENU = 79,
      DLG_ADDCONTACT = 80,
      DLG_CONTACTLIST = 81,
      DLG_PHONEPLAYERMENU = 82;
Создаем команду на которой будет открываться диалог:​

PHP:
CMD:phone(playerid)
      return ShowPlayerDialog(playerid, DLG_PHONEMENU, DIALOG_STYLE_LIST, "Меню телефона", "Добавить контакт\nПосмотреть список контактов", "Выбрать", "Отмена");

if(strcmp(cmd, "/phone", true) == 0) 
      return ShowPlayerDialog(playerid, DLG_PHONEMENU, DIALOG_STYLE_LIST, "Меню телефона", "Добавить контакт\nПосмотреть список контактов", "Выбрать", "Отмена");
В OnDialogResponse:​

PHP:
case DLG_PHONEMENU:
{
            if(0 == response)
                return 1;

            switch(listitem)
            {
                case 0 : ShowPlayerDialog(playerid, DLG_ADDCONTACT, DIALOG_STYLE_INPUT, "Добавить контакт", "Введите id игрока которого хотите добавить в контакты", "Ввести", "Отмена");
                case 1 :
                {
                     new query[170];
                     format(query, sizeof query, "SELECT id_add_owner_phone_book FROM phone_book WHERE id_owner_phone_book = %d", Info_User[playerid][uID]);

                     mysql_tquery(SQL_HANDLE, query, "CheckContact","i", playerid);
                     return 1;
                }
            }
            return 1;
}
PHP:
case DLG_ADDCONTACT:
{
     if(0 == response)
           return 1;

     new
           targetid;

     if(sscanf(inputtext, "d", targetid))
           return ShowPlayerDialog(playerid, DLG_ADDCONTACT, DIALOG_STYLE_INPUT, "Добавить контакт", "Введите id игрока которого хотите добавить в контакты", "Ввести", "Отмена");

     if(0 == IsPlayerConnected(targetid))
           return SendClientMessage(playerid, -1, "Данного игрока нет в сети.");

     new query_string[66+MAX_PLAYER_NAME-4+30];

     format(query_string, sizeof(query_string), "INSERT INTO `phone_book` (`id_owner_phone_book`, `id_add_owner_phone_book`) VALUES ('%d', '%d')", Info_User[playerid][uID], Info_User[targetid][uID]);

     mysql_tquery(SQL_HANDLE, query_string, "", "");

     format(query_string, sizeof query_string, "Вы успешно добавили в телефонную книгу %s", Info_User[targetid][uName]);
     SendClientMessage(playerid, -1, query_string);
     return 1;
}
Теперь приступим к CallBack'y поиска нужным нам контактов:​

PHP:
forward CheckContact(playerid);
public CheckContact(playerid)
{
    TOTALCONTACT = cache_get_row_count(SQL_HANDLE);

    new query1[230];

    if(TOTALCONTACT)
    {
        for(new idx, p_id; idx < TOTALCONTACT; idx++)
        {
            p_id = cache_get_field_content_int(idx, "id_add_owner_phone_book", SQL_HANDLE);
            format(query1, sizeof query1, "%sid = %d%s", query1, p_id, (idx != TOTALCONTACT-1 ? (" OR ") : ("")));
        }
        format(query1, sizeof query1, "SELECT Username FROM players WHERE %s", query1);
        mysql_tquery(SQL_HANDLE, query1, "ShowContactBook", "i", playerid);
    }
    return 1;
}
PHP:
forward ShowContactBook(playerid);
public ShowContactBook(playerid)
{
    new
        player_name[MAX_PLAYER_NAME],
        string[(3+3+MAX_PLAYER_NAME)*30+1];

    for(new idx; idx < TOTALCONTACT; idx++)
    {
        cache_get_field_content(idx, "Username", player_name, MAX_PLAYER_NAME);
        format(string, sizeof string, "%s%s\n", string, player_name);
    }
    ShowPlayerDialog(playerid, DLG_CONTACTLIST, DIALOG_STYLE_LIST, "Контакты", string, "Выбрать", "Отмена");
    return 1;
}
Теперь вернемся обратно в OnDialogResponse, и покажем наш список контактов:​

PHP:
case DLG_CONTACTLIST:
{
     if(0 == response)
           return 1;

     new name_listitem[MAX_PLAYER_NAME];
     strcat(name_listitem, inputtext);

     ShowPlayerDialog(playerid, DLG_PHONEPLAYERMENU, DIALOG_STYLE_LIST, name_listitem, "Позвонить\nОтправить СМС\nУдалить контакт", "Выбрать" ,"Отмена");

     SetPVarString(playerid, "NameListitem", name_listitem);
     return 1;
}
PHP:
case DLG_PHONEPLAYERMENU:
{
     if(0 == response)
          return 1;

     new
           name_listitem[MAX_PLAYER_NAME];

     GetPVarString(playerid, "NameListitem", name_listitem, MAX_PLAYER_NAME);

     format(query, sizeof query, "SELECT `id` FROM `players` WHERE `Username` = '%s'", name_listitem);
     mysql_tquery(SQL_HANDLE, query, "ActionPlayerPhone", "ii", playerid, listitem);
     return 1;
}
Теперь добавим еще один CallBack, с действием нашего ника при нажатии:​

PHP:
forward ActionPlayerPhone(playerid, listitem_dlg);
public ActionPlayerPhone(playerid, listitem_dlg)
{
        new p_id,
               query[250];

        p_id = cache_get_field_content_int(0, "ID", SQL_HANDLE);

        switch(listitem_dlg)
        {
            case 0:
            {
                   //ваш код позвонить кому либо  
                   return 1;
            }
            case 1:
            {
                   //ваш код отправить смс кому либо
                   return 1;
            }
            case 2:
            {
                   //здесь удалить контакт
                   format(query, sizeof query, "DELETE FROM phone_book WHERE id_add_owner_phone_book = '%d'", p_id);
                   mysql_tquery(SQL_HANDLE, query, "", "");
                   return 1;
            }
        }

        format(query, sizeof query, "DELETE FROM phone_book WHERE id_add_owner_phone_book = '%d'", p_id);
        mysql_tquery(SQL_HANDLE, query, "", "");
        return 1;
}
Если у вас есть более оптимизированный вариант, или увидели ошибку, напишите в комментарии.​
 
Последнее редактирование:
Сверху Снизу