1 post in this topic

Доброго времени суток, уважаемый читатель данной темы! Сегодня я выкладываю мануал - урок для твоего мода (возможно, написанного с нуля). Это система генерации и присвоения номера игроку. 

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

Для начала нам необходимо создать переменную сохранения в enum с информацией с игроком. Пример:
 

Спойлер

enum pInfo
{
	pNumber
};
new PlayerInfo[MAX_PLAYERS][pInfo];

 

После этих незамысловатых действий, необходимо создать тело функции генерации номера. 

Рассмотрим это на примере команды. Т.е. номер игрок будет получать, введя команду.

ВНИМАНИЕ! Делать команду я буду на zcmd / dc_cmd + sscanf.

Ко всем командам добавить:

Спойлер

CMD:buynumber(playerid)
{
	if(GetPlayerMoney(playerid) < 500) return SendClientMessage(playerid, -1, "Недостаточно денег"); // проверяем кол-во денег у игрока в данном случае есть ли у него 500 рублей
    // здесь можете оставить проверку на координаты, а можете ее убрать:          
  	if(!IsPlayerInRangeOfPoint(playerid, 5.0, x-cord, y-cord, z-cord)) return SendClientMessage(playerid, -1, "Вы не в месте покупки сим-карт!");
  	
  	//переходим к телу команды
  	new number = random(9999); // генерируем число от 0 до 9999 соответственно 
  	new query[150]; // переменная для sql запроса в базу на проверку занятости номера
  	format(query, sizeof(query), "SELECT * FROM `accounts` WHERE `number` = '%d'", number);
  	mysql_function_query(connectionid, query, true, "OnCheckSimCard", "id", playerid, number); // отсылаем запрос в бд с параметром кеширования для получения информации в паблик OnCheckSimcard с параметрами ид-а игрока и номера сгенерированного системой
  
  	return true; // завершаем команду возвращаем значение правды (1)
}

 

Теперь краткие пояснения:
 

Спойлер

 

Если вы будете использовать проверку на координаты, то в этой строке


if(!IsPlayerInRangeOfPoint(playerid, 5.0, x-cord, y-cord, z-cord))

необходимо вместо x-cord поставить значение x координаты, вместо y-cord y координату ну и вместо z-cord z координату. 

В этой строке:


format(query, sizeof(query), "SELECT * FROM `accounts` WHERE `number` = '%d'", number);

Необходимо подстраивать под свой мод. 

Вместо accounts необходимо поставить название вашей таблицы с аккаунтами в базе данных. 

Вместо number необходимо подставить название вашего столбца (filed)  с мобильным номером аккаунта. 

Как его взять?:

Спойлер

Если у вас нет такого столбца, то просто добавьте его, т.е. перейдите в вашу базу данных, затем зайдите в таблицу с аккаунтами. 

После нажмите кнопку "структура", листайте в самый низ и найдете "Добавить %d полей перед %s". 

Добавляете с следующими параметрами:

Имя: number

Тип: int

Длина/значение: 5

Остальное все оставляете как есть

 

 

 

Далее добавьте в конец мода (главное не в паблик, или сток):
 

Спойлер

forward OnCheckSimCard(playerid, number); // создаем форвард для паблика
public OnCheckSimCard(playerid, number) // создаем сам паблик
{
	new rows, fields;
	cache_get_data(rows, fields); // получаем кол-во строк и столбцов из кеша
	if(!rows) // если таких номеров нет в бд, а значит и на сервере, присваиваем его игроку
	{
		PlayerInfo[playerid][pNumber] = number;
		static const fmt_str[] = "Поздравляем вас, вы получили свой новый номер: %d";
		new str[sizeof(fmt_str)+3];
		format(str, sizeof(str), fmt_str, number); // форматируем строку
		SendClientMessage(playerid, -1, str); // отправляем игроку в чат
	}
	else SendClientMessage(playerid, -1, "Произошла ошибка генерации. Пожалуйста, повторите попытку!"); // если такой	 номер уже найден заставляем игрока заново попробовать

	return true; // завершаем паблик, возвращаем правду (1)
}

 

Вот и все! Теперь у вас есть готовая система мобильного номера. 

Автор урока: @stibs.

Share this post


Link to post
Share on other sites

Your content will need to be approved by a moderator

Guest
You are commenting as a guest. If you have an account, please sign in.
Reply to this topic...

×   You have pasted content with formatting.   Remove formatting

  Only 75 emoticons maximum are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

Loading...
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • odosenok
      By odosenok
      Описание системы.
      Система полета камерой представляет собой возможность перемещаться в пространстве игры по всем осям (X, Y, Z) путем нажатия кнопок на клавиатуре.
       
      Подключение системы.
      1. Система написана в отдельном файле - include. Вам необходимо скачать этот файл и добавить в папку, находящейся в следующей директории:
      "..\pawno\include" 2. Затем Вам следует открыть свой игровой мод и в начале, после всех инклудов, дописать следующую строку:
      #include <fly>  
      Работа с системой.
      В систему полета камерой включены две функции:
      1.
      SetPlayerFlyStatus(playerid, status = 2) /* playerid - ID игрока, которого Вы хотите "отправить" в режим полета status - режим полета* * предусмотрено три режима полета: CAMERA_MODE_NONE (0) - выключить режим полета, CAMERA_MODE_FLY (1) - включить режим полета, CAMERA_MODE_REVERSE (2) - сменить режим на реверсивный */ 2. 
      IsPlayerFlying(playerid) /* playerid - ID игрока, пребывание в состоянии полета которого Вы хотите проверить *данная функция возвращает: CAMERA_MODE_NONE (0), если игрок не находится в состоянии полета, CAMERA_MODE_FLY (1), если игрок находится в состоянии полета */ При помощи данных функций Вы можете управлять пребыванием игрока в режиме полета, а также получать информацию о том, "летает" ли игрок в тот или иной момент.
       
      Особенности системы.
      Системой полета предусмотрено, что игрок, выходящий из режима полета, появится именно там, где вышел. Так, если Вы покидаете режим полета, пребывая в озере, то появление игрока будет именно в этом озере.
       
      Пример использования.
      CMD:fly(playerid, params[]) { static const MSG_USE_CMD[] = !"» Usage the command: /fly [mode 0-2]"; if(isnull(params)) return SendClientMessage(playerid, -1, MSG_USE_CMD) & 0; new mode; if(sscanf(params, "d", mode)) return SendClientMessage(playerid, -1, MSG_USE_CMD) & 0; else if(!(0 <= mode <= 2)) return SendClientMessage(playerid, -1, MSG_USE_CMD) & 0; SetPlayerFlyStatus(playerid, mode); return 1; } CMD:checkfly(playerid, params[]) { static const MSG_USE_CMD[] = !"» Usage the command: /checkfly [playerid]"; if(isnull(params)) return SendClientMessage(playerid, -1, MSG_USE_CMD) & 0; new id; if(sscanf(params, "u", id)) return SendClientMessage(playerid, -1, MSG_USE_CMD) & 0; else if(id == INVALID_PLAYER_ID) return SendClientMessage(playerid, -1, !"The player is not connected") & 0; static const status_fly[][] = { !"The player is not flying", !"The player is flying" }; SendClientMessage(playerid, -1, status_fly[IsPlayerFlying(id)]); return 1 } Авторское право.
      Функции для получения позиции для перемещения камеры, само перемещение вырезаны из разработки Norck.
      В свою очередь я, @odosenok, лишь преобразовал данный код, создал более удобный интерфейс.
       
      fly.inc
    • KAIF
      By KAIF
      Здравствуйте, хотел бы продать переделанный игровой мод всем знакомого проекта GTA RolePlay
      Фракции:
      1)Правительство
      2)ГИБДД
      3)Полиция Южного
      4)ФСБ
      5)ЦГБ-А
      6)Автошкола
      7)ВВС
      8)СМИ
      9)ОМОН
      10)опг.Тукаевские
      11)опг.Тяп-Ляп
      12)Чеченская Мафия
      13)Американская Мафия
      14)Якудза
      15)Русская Мафия
      16)Итальянская Мафия
      Добавлено/исправлено:
      1)Добавлен ВЕСЬ ОПТИМИЗИРОВАННЫЙ маппинг GTA ROLEPLAY.(2018-2019г)
      2)Добавлены организации мафий.
      3)Перенесены все чекпоинты как на GTA ROLEPLAY.
      4)Добавил в донат покупку военного билета.
      5)Изменил название рангов во фракциях как на GTA ROLEPLAY/
      6)Изменен логотип GTA ROLEPLAY
      7)Переделан весь GPS, изменены все координаты.
      В моде - 6 уровней администрации.(если хотите можете увелить кол-во админок)
      Имеется фуллдоступ, выдаётся в pawno.
      Так же в комплекте будет идти мод-пак к серверу.
      После покупки вы получите архив с модом, а в самом архиве будет текстовый файл с ссылкой на скачивание модпака.