- Форум Pawn-Wiki.Ru — Воплоти мечту в реальность!: Пишем систему домов с 0 [Часть 1] — Форум Pawn-Wiki.Ru — Воплоти мечту в реальность!
- Форум Pawn-Wiki.Ru — Воплоти мечту в реальность!: Как сменить интерьер? — Форум Pawn-Wiki.Ru — Воплоти мечту в реальность!
- Как сменить интерьер?
- Урок Создание динамической системы домов на основе плагина [MySQL R41]
- Алексей Мещеряков
Форум Pawn-Wiki.Ru — Воплоти мечту в реальность!: Пишем систему домов с 0 [Часть 1] — Форум Pawn-Wiki.Ru — Воплоти мечту в реальность!
- Pawn скриптинг
- Школа скриптинга
- Уроки
- Правила форума
- Просмотр новых публикаций
- (6 Страниц)
- 1
- 2
- 3
- >
- Последняя »
- Вы не можете создать новую тему
- Вы не можете ответить в тему
- Группа: Администраторы
- Сообщений: 2 621
- Регистрация: 13 октября 11
Начало
Приветствую уважаемые пользователи pawn-wiki.ru! Пока у меня есть свободное время, я решил написать урок который будет состоять из нескольких частей. В данном уроке я постараюсь как можно «раскрыто» показать вам как можно написать систему домов для игрового режима с 0 (или для » new.pwn «). Хочу отметить, что для корректной работы системы нам понадобятся 2 библиотеки:
— mxINI: Скачать
— sscanf: sscanf.rar [37,51К]
• Поясняю для чего мы будем использовать это:
— mxINI: для работы с файлами (чтение / запись в файл);
— sscanf: позволит нам скажем «разделить» и расставить по местам нужную информацию;
• Небольшое описание системы:
— Динамическая и простая система домов которая отлично подойдет для игровых режимов с 0 (и не только). Очень удобное добавление новых интерьеров в систему. На данный момент в системе будет: создание дома администратором из игры, естественно команды «войти» и «выйти» из дому, «закрыть», «открыть» дом; Для администрации — создание домов, управление замком (открыть / закрыть). Так же, 1 игрок может владеть неограниченным количеством домов! Хотелось бы отметить, если замок дома закрыт, то зайти в дом сможет только его владелец, для остальных будет высвечиваться сообщение.
• Начнем с установки библиотек и плагина:
— mxINI: после того как вы его скачали, поместите файл mxINI.inc в » pawno>include»
— sscanf: откройте архив, в нем вы увидите 2 папки » pawno» и » plugins«. Папку plugins поместите в директорию с вашим сервером, из папки » pawno>include» возьмите файл sscanf2.inc и поместите туда же куда поместили ранее mxINI (» pawno>include«).
Теперь вам осталось прописать в файле server.cfg напротив строки plugins > sscanf , получится вот так (если у вас нет строки plugins то просто скопируйте то, что ниже):
Остается последнее : открываем наш мод путем pawno>pawno.exe и вверху (можно после #include ) подключаем библиотеки:
Вот и все, переходим к следующему шагу.
• Ко всем вашим макросам (define’s) добавим еще парочку:
Макросы используются для удобства, мы можем обойтись и без них, но я привык писать названия нежели чем запоминать id (в нашем случаи диалогов).
• Теперь перейдем к создаю массивов и массивов переменных для хранения наших данных. Итак, создадим массив переменных для хранения данных наших домов:
• Создадим 1 переменную и 1 массив:
• Теперь создадим еще один массив переменных но уже для хранения данных интерьеров (ниже расскажу в чем суть):
Для чего мы создали этот массив? В нем вы сможете хранить всевозможные интерьеры которые могут быть присвоены домам, переменная hInterior хранит не id интерьера а порядковый id интерьера в HInts, то есть:
Даже правильнее будет сказать что переменная hInteriors хранит номер ячейке в который находится тот или иной интерьер. То есть в любой момент вы можете сами выбрать интерьеры по вашему вкусу и добавить их в этот массив ( HInts). Тем самым мы экономим 3 переменных для внутренних позиций ( hX,hY,hZ — хранят позиции дома снаружи, а для внутренних нам достаточно всего лишь одной — hInterior которая будет содержать номер ячейки массива HInts и от туда уже брать данные (ид интерьера, и внутренние координаты)).
• В этом шаге мы создадим функции для дальнейшей работы:
Внимание! Если у вас уже присутствует данная функция (которая возвращает ник игрока) не добавляйте ее, просто в дальнейшем вместо Name используйте свою!
• В этой части урока мы:
— Подключили необходимые для нас библиотеки (+плагин);
— Создали массивы для хранения различных данных;
— Создали необходимые функции которые будем использовать в дальнейшем;
Хочу отметить, при компилировании скрипта возможны варнинги , так как мы не использовали некоторые функции, на это вы пока что не обращайте внимания! Ожидайте 2-го урока, скоро! Если возникают какие-либо вопросы, пишите в данную тему. Спасибо за внимание!
Форум Pawn-Wiki.Ru — Воплоти мечту в реальность!: Как сменить интерьер? — Форум Pawn-Wiki.Ru — Воплоти мечту в реальность!
- Pawn скриптинг
- Первая помощь
- Вопросы по скриптингу
- Правила форума
- Просмотр новых публикаций
- (2 Страниц)
- 1
- 2
- >
- Вы не можете создать новую тему
Тема закрыта
Как сменить интерьер?
- Группа: Активные пользователи
- Сообщений: 282
- Регистрация: 04 ноября 13
- Группа: Активные пользователи
- Сообщений: 560
- Регистрация: 26 июня 13
RediSka (07 декабря 2013 — 17:35) писал:
- Группа: Vip
- Сообщений: 1 944
- Регистрация: 17 января 13
- Группа: Активные пользователи
- Сообщений: 282
- Регистрация: 04 ноября 13
А смотрите мне просто тут подсказали, я бы хотел уточнить:
Вот про /save и т.д. я знаю, просто тут код(интерьера), мне его просто ставить же в мод надо? И сменить координаты телепорта да?
Сообщение отредактировал RediSka: 07 декабря 2013 — 21:11
- Группа: Vip
- Сообщений: 1 944
- Регистрация: 17 января 13
- Группа: Активные пользователи
- Сообщений: 282
- Регистрация: 04 ноября 13
Сообщение отредактировал RediSka: 07 декабря 2013 — 21:18
- Группа: Vip
- Сообщений: 1 944
- Регистрация: 17 января 13
RediSka (07 декабря 2013 — 21:17) писал:
Ахаха?
Ну да.
Открою секрет, есть такая вещь, как язык pawn. С помощью которого можно сделать телепорт.
К сожалению, если автор не соизволил дать хотя бы ид интерьера, то нам ничего не остается, как телепортироваться в каждый.
Ну, есть разные способы. Допусим по команде вызывать паблик. Который будет в секунду +1 инт прибавлять. Или что то такое.
- Группа: Активные пользователи
- Сообщений: 282
- Регистрация: 04 ноября 13
Ахаха?
Ну да.
Открою секрет, есть такая вещь, как язык pawn. С помощью которого можно сделать телепорт.
К сожалению, если автор не соизволил дать хотя бы ид интерьера, то нам ничего не остается, как телепортироваться в каждый.
CreateObject(1,2,3,4,5,6,7); // наш объект
if(strcmp(cmd, «/findint», true) == 0)
<
if(sscanf(params,»i», params[0])) return SendClientMessage(playerid, COLOR_WHITE,». /findint [ID]»);
SetPlayerPos(playerid,2,3,4);
SetPlayerInterior(playerid,params[0]);
return 1;
>
Ну, есть разные способы. Допусим по команде вызывать паблик. Который будет в секунду +1 инт прибавлять. Или что то такое.
Урок Создание динамической системы домов на основе плагина [MySQL R41]
Алексей Мещеряков
Эксперт
Первое, с чего хотелось бы конечно начать — это подключение плагинов.
Плагин MySQL от pBlueG:
Про то, как пользоваться Базой данной и как к ней подключиться, я долго время не буду заострять. Если желаете прочитать подробную информацию, можно найти урок от DeimoS по «Созданию системы регистрации на основе плагина MySQL [R39/R40]», там все подробно расписано. Но все же, некоторые нюансы хотелось бы уточнить.
Как мы с вами уже знаем, а кто не знает, для работы с Базой данных(БД), нам необходимо использовать программу. Я использую Denwer.
P.S. Честно, скажу от себя, другие никогда не использовал и понятия не имею как с ними работать.
О данной программе вы можете ознакомиться на официальном сайте. |
Необходимо скачать данное приложение (У кого есть, тому конечно же не нужно.)
После того, как все действия по установке данной программы выполнены, необходимо запустить «Start Denwer.exe | Run.exe».
Открываем любой для вас удобный браузер и вводите localhost.
Появляется окно:
Если у вас уже есть База Данных, то вам не нужно ничего создавать, если же у вас ее нет, то создадим сейчас.
Нажимаете на вкладку «Базы данных»
Хранит в себе ID нашего дома.
Хранит в себе Имя владельца дома.
Хранит в себе информацию о том, занят ли дом или нет.
Хранят в себе информацию о координатах входа в дом.
Имя: enter_pos_x
Тип: FLOAT
Имя: enter_pos_y
Тип: FLOAT
Хранят в себе информацию о координатах выхода из дома.
Хранит в себе информацию о цене дома.
Хранит в себе информацию об уровне дома.
Хранит в себе информацию о ID интерьера.
Хранят в себе информацию о координатах домашнего автомобиля.
Хранит в себе ID домашнего автомобиля.
Подключение к Базе данных.
1. Открываем наш скрипт .pwn и после подключенных инклюдов, именно строчки #include , добавляем подключение:
. Если у кого то, уже имеется БД и подключение, повторного не нужно создавать(или вводите свои данные от БД)
const MAX_INTERIOR_NAME — Отвечает за количество символов в названии нашего Интерьера.(Если будете изменять названия, то изменяйте и константу)
const MAX_HOUSE_INTERIOR — Отвечает за количество интерьеров. В данном случае я добавил 34, вроде все, а может и нет. Будете добавлять, не забывайте увеличивать константу.
В enum e_HOUSE_INTERIORS_INFO внесена вся информация о нашем интерьере, для удобного дальнейшего использования.
h_int_name[MAX_INTERIOR_NAME] — Наименование нашего интерьера, с размером const MAX_INTERIOR_NAME.
Float:h_int_pos_x — Координата интерьера X.
Float:h_int_pos_y — Координата интерьера Y.
Float:h_int_pos_z — Координата интерьера Z.
h_int_interiorid — ID интерьера.
На этом, пока что необходимые нам команды мы создали.
[HR][/HR]
Как раз в эти данные мы записали и получили позицию игрока.
Дальше были созданы переменные, которые отвечают за координаты и ID интерьера:
С помощью данных переменных, мы можем записать значение нашего интерьера(Координаты и ID) в ячейки, отвечающие за это в нашей таблице.
И последнее — это массив.
Данные в нашу таблицу успешно записаны. Мы завершили создание дома.
В конце мода создадим две функции. Добавим следующий код:
Делаем автоподсчет самой длинной строки, т.к. нет смысла объявлять дважды.
Объявлены два значения — это h_no_owner и h_any_owner. У кого плохо с англиским переведу (Нет владельца | Есть владелец)
Дальше циклом проверяем наши дома, которые созданы в базе данных.
Описывать каждый столбец я не буду, т.к. при создании самой таблицы было подробное описание. Опишу только сами функции, которые мы используем:
| Получаем значение числа с плавающей точкой.
Если говорить русским языком, то «Если мы находимся у входа в дом, то попадаем в интерьер по координатам из нашей таблицы/массива»
Тоже самое у нас и с другой проверкой:
.
player_name — замените на свой массив в котором хранится имя игрока, например pInfo[playerid][pName].
Так же если у вас уже есть система регистрации аккаунта, а я в самом первом абзаце говорил, что желательно, чтобы у вас уже была регистрация, для хранения данных об игроке.
Необходимо добавить массив pHouse — в котором будет проверка на ID дома, которым владеет игрок.
Домашний транспорт
ВНИМАНИЕ! В данном пункте необходим массив с записью ID дома(pHouse).
Итак, вроде последний пункт моего урока, это домашний транспорт.
Я его решил сделать по такой схеме, что если игрок является владельцем дома и он онлайн, то домашний транспорт будет так же появляться. Как только игрок выходит из игры, его транспорт тоже пропадает. Сделал я это для того, чтобы не загружать карту, да и для удобства. Представляете если у вас например 500 домов, а где то в одном месте их немало и везде стоят машины, по мне так не удобно, но если вам нравится, когда карта забита машинами, то пожалуйста, как говорится дело вкуса. Не пугайтесь, когда создаете дом и устанавливаете машину у дома, а она не спавнится, это означает одно — нет владельца или же если он есть, то оффлайн.
Ну вот вроде и все. Должен ничего не забыть, а возможно и забыл, честно уже голова поехала) Так что если будут ошибки, напишите.