- Регистрация
- 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;
}
Если у вас есть более оптимизированный вариант, или увидели ошибку, напишите в комментарии.
Последнее редактирование: