- ВойтиАвторизация через uNet
- РегистрацияРегистрация на сайте через uNet
IP: 77.220.180.96:7777
Новые сообщения · Поиск |
Модератор форума: KaTacTpOqpa |
Форум Помощь по скриптингу SA-MP Помощь по скриптингу Pawno Как создать мод DM для SAMP? (Тут подробное описание создания мода DM для SAMP.) |
Как создать мод DM для SAMP? | ||||
|
Polcar | Сообщение # 2 | 18:40:24 13 Май 2010 |
Руководитель проекта SM
Администраторы
Сообщений: 788
Репутация: 323
|
_______________________________________________
Code public OnPlayerRequestClass(playerid, classid) { printf("OnPlayerRequestClass(%d, %d)", playerid, classid); SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746); SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746); SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746); return 1; } ________________ OnPlayerRequestClass Событие - если игрок выбирает класс скина; Действия:
Code public OnGameModeExit() { print("GameModeExit()"); return 1; } _______________ OnGameModeExit - Событие - Если игрок входит из игры; ___________________________________________________________
Code public OnPlayerConnect(playerid) { printf("OnPlayerConnect(%d)", playerid); return 1; } ___________________ OnPlayerConnect - Событие - Если игрок подключается к серверу игры ___________________________________________________________
Code public OnPlayerDisconnect(playerid) { printf("OnPlayerDisconnect(%d)", playerid); return 1; } ___________________ OnPlayerDisconnect - Событие - Если игрок разьединился ___________________________________________________________ А также: Рассмотрим некоторые функции. SendClientMessage - отправить сообщение в чате игроку; Вид: Пример: Вид: Вид: Пример: Вид: Вид: Вид: Вид: Вид: Пример: posx,posy,posz - этотак называемые "переменные". Чтобы можно было испольовать переменную её нужно обьявить, и дать ей имя. К примеру, нам нужно создать переменную типа Float с названием "coordinata";
Code #include <a_samp.inc> #include <core> new Float: coordinata; _____ Где new Float: coordinata; - обьявление пременной (дословно: Новая_переменная С_плавающей_точкой: <с названием> coordinata; ___________________________________________________ SetPlayerPos - переместить данного игрока на данную позицию; Вид: Вид: Где &Float:health - переменная, пример: GetPlayerHealth(playerid, health); Вид: Пример: Вид: Пример: Вид: Пример: Вид: Пример: Где X,Y,Z - координаты "Происхождения" звука, 1053 - Id звука; Вид: В pawno нет функции "Забрать деньги", для того чтобы отнять деньги нужно -Школьная математика: сто минус пятьдесят равно пятьдесят :1_011-2: Вид: Вид: Расшифровка: GivePlayerWeapon(ID игрока,ID оружия,Количество патронов к даваемому оружию); Пример: Итак, рабочая область редактора скриптов pawno имеет 2 окна, в левом public OnPlayerConnect(playerid)
Code public OnPlayerConnect(playerid) { printf("OnPlayerConnect(%d)", playerid); //Пишем: SendClientMessage(playerid, 0xFF0000AA, "Добро пожаловать на сервер!"); return 1; } При коннекте игроку выдаётся сообщение - <Добро пожаловать на сервер!> ___________________________________ Для старта добавим игроку немного денег для старта, и получим следующий код:
Code public OnPlayerConnect(playerid) { printf("OnPlayerConnect(%d)", playerid); SendClientMessage(playerid, 0xFF0000AA, "Добро пожаловать на сервер!"); GivePlayerMoney(playerid, 5000);//даём 5000 $ игроку сразу после его коннекта return 1; } При коннекте игроку выдаётся сообщение - "Добро пожаловать на сервер!", а также выдаётся 5000$; ___________________________________ Зделаем награду за убийство игрока: Ищем строку: Цитировать GivePlayerMoney(killerid, 2200);//добавить игроку 2200$ за убийство В итоге выходит:
Code public OnPlayerDeath(playerid, killerid, reason) { GivePlayerMoney(killerid, 2200);//добавить игроку 2200$ за убийство SetPlayerScore(killerid, GetPlayerScore(killerid) + 1);//добавить 1 очко (фраг) printf("OnPlayerDeath(%d, %d, %d)", playerid, killerid, reason); return 1; } |
Polcar | Сообщение # 3 | 18:41:36 13 Май 2010 |
Руководитель проекта SM
Администраторы
Сообщений: 788
Репутация: 323
|
___________________________________________
По подобному принципу вы можете попробовать к примеру использовать функцию выдачи оружия за убийство, для этого в разделе : Цитировать Получаем: Цитировать Напишим скрипт телепорта игрока; Пишем: Цитировать SetPlayerPos(playerid, 100, 200,300);//переместится по координатам: x-100;y-200;z-300; return 1; Поле Copy Script to directory заполняем следующим обрзом: Приведу в пример следующий код: Цитировать if(IsPlayerInAnyVehicle(playerid)) { //(начало условия) Условие: если игрок сидит в автомобиле,то new VehicleID; //создаём переменную с названием VehicleID; VehicleID = GetPlayerVehicleID(playerid); //узнаём ID машины, в которой сидит игрок и записываем его (ID) в переменную VehicleID; SetVehiclePos(VehicleID,1358.3634,-1279.1521,13.3285);//перемещаем данный автомобиль в назначенную точку (вместе с игроком естесстенно); SetPlayerPos(playerid,1358.3634,-1279.1521,13.3285);//перемещаем только игрока на указанные координаты (без машины=) ) }//конец VehicleID - наша переменная = - это не знак равно, а операция присваивания, мы присваиваем какой либо переменной готовое значение, или итоговое Цитировать Для этого нужно обьявить 4 "общих" переменных, после операторов #include, Цитировать Цитировать if (strcmp(cmdtext, "/savepos", false)==0) //если игрок наберёт /savepos,то GetPlayerPos(playerid,ax,ay,az);//Узнаём координаты игрока, и записываем эти данные в переменные ax,ay,az; SendClientMessage(playerid, COLOR_MEDIUMBLUE, "Ваши координаты сохранены!"); //выдаём сообщение игроку Ваши координаты сохранены!; PlayerPlaySound(playerid,1053,ax,ay,az); //проигрываем мелодию под номером 1053, по координатам, записанным в переменных ax,ay,az; return 1; //конец команды /savepos; //начало команды /loadpos; if(strcmp(cmdtext, "/loadpos", false) == 0) { //если игрок наберёт /loadpos, то if(IsPlayerInAnyVehicle(playerid)) { //Условие: если игрок сидит в автомобиле,то new VehicleID; //создаём переменную VehicleID; VehicleID = GetPlayerVehicleID(playerid); //узнаём ID машины, в которой сидит игрок; SetVehiclePos(VehicleID,ax,ay,az); //перемещаем данный автомобиль в назначенные (вместе с игроком естесстенно) на координаты, сохранённые в переменных ax,ay,az; } else //ИНАЧЕ SetPlayerPos(playerid,ax,ay,az);//перемещаем только игрока на координаты, сохранённые в переменных ax,ay,az SendClientMessage(playerid, COLOR_MEDIUMBLUE, "Ваши координаты восстановлены!"); //выдаём сообщение игроку Ваши координаты восстановлены! PlayerPlaySound(playerid,1053,ax,ay,az); //проигрываем мелодию под номером 1053, по координатам, записанным в переменных ax,ay,az; } //конец команды /loadpos __________________________________________________ Цитировать конец Кстати, чтобы можно было не писать цвета двоичном виде, их для удобства можно сопоставить двоичному виду; Цитировать Цитировать new Float: ax; // Обьявление переменных #define COLOR_YELLOW 0xFFFF00AA //задание цветов Теперь мы к примеру можем написать вместо: Цитировать Цитировать Цитировать Команды создаются в разделе public OnPlayerCommandText(playerid, cmdtext[]); Полностью это выглядит так: Цитировать Цитировать if (strcmp(cmdtext, "/mycommand", true)==0)//пример команды //-------------завершение __________________ Цитировать return 1; Цитировать Цитировать Цитировать GivePlayerWeapon(playerid, 17, 300);//выдаётся оружие текущему игроку, ID оружия 17, с 300стами патронами; Цитировать Цитировать Вот код закрытия/открытия дверей у автомобиля, ничего тут нового или сложного не вижу, поэтому без подробных объяснений Цитировать //начало /unlock команды Рассмотрим оператор - "while"; Оператор While; Определение: Структура: Суть: Вид оператора: Цитировать Например напишем следующий код: Переменная "а" имеет установленное значение 0. Цитировать добавка от Diablus: Еще раз об OnPlayerCommandText()! Рассмотрим всю эту фунцию более детально: В общем виде функция выглядит так: Код: Однако, Вам необходимо знать, что данная функция является обработчиком событий и может быть вызвана в рамках одного скрипта всего один раз!!! Будьте внимательны! Дабы лучше сопоставить что именно игрок набрал, и каким образом обработать эту команду, используем оператор strcmp, который сравнивает все ключи массива с определенным параметром. В общем виде оператор выглядит так: Код: Таким образом давайте добавим простую конструкцию проверки ввода команды "/tp airport" (if else): Код: Код: if (strcmp(cmdtext, "/tp seaport", true)==0) после компиляции данного кода, когда игрок введет в чате "/tp airport" - он попадет в точку на карте с координатами 1,1,1, а если он наберет "/tp seaport" - он попадет в точку 2,2,2. Оставляйте комментарии к теме, и задавайте вопросы если непонятно |
Demetrius | Сообщение # 4 | 11:22:01 07 Июн 2010 |
VIP-пользователи
Сообщений: 1192
Репутация: 158
|
афигеть Добавлено (07.06.2010, 11:22) Sweet >>> Armin >>> Demetrius SA:MP >> MTA:SA >> IRL |
Polcar | Сообщение # 5 | 13:02:44 07 Июн 2010 |
Руководитель проекта SM
Администраторы
Сообщений: 788
Репутация: 323
|
хех, просто неохото долго самому писать, кстате я тут многое добавил новое, тут много ошибок исправлено и более понятно в некоторых абзацах, читайте и юзайте основы скриптинга!!!
|
Demetrius | Сообщение # 6 | 19:27:45 24 Июн 2010 |
VIP-пользователи
Сообщений: 1192
Репутация: 158
|
Ага, эти основы самые понятные, если кому то не понятно то скорее это уже с самим человеком что-то . А тут все понятно, так что каждый поймет. Добавлено (24.06.2010, 19:27) Sweet >>> Armin >>> Demetrius SA:MP >> MTA:SA >> IRL |
Polcar | Сообщение # 7 | 06:37:55 25 Июн 2010 |
Руководитель проекта SM
Администраторы
Сообщений: 788
Репутация: 323
|
ну для простых модов тдм и дм он ненужен, это оператор цикла какбы, цикилрует чтонибудь, годится для рп модов, но вам проще бы дм и тдм делать, они лёгкие по созданию и интересные.
|
Demetrius | Сообщение # 8 | 12:35:01 25 Июн 2010 |
VIP-пользователи
Сообщений: 1192
Репутация: 158
|
а ну тогда ладно
Sweet >>> Armin >>> Demetrius SA:MP >> MTA:SA >> IRL |
ANGEL | Сообщение # 9 | 22:23:45 01 Июл 2010 |
Глав. Модераторы
Сообщений: 503
Репутация: 228
|
Типа если я это все прочитаю, то смогу сам серваки себе писать?
Можете задавать вопросы в личку на сайте... |
Demetrius | Сообщение # 10 | 11:25:04 02 Июл 2010 |
VIP-пользователи
Сообщений: 1192
Репутация: 158
|
не серваки, а моды на серваки, читай я вот еще до конца не прочитал, щас читать буду)))
Sweet >>> Armin >>> Demetrius SA:MP >> MTA:SA >> IRL |
ANGEL | Сообщение # 11 | 11:26:08 02 Июл 2010 |
Глав. Модераторы
Сообщений: 503
Репутация: 228
|
Если б, я понимал что нить в этом...[off] Мне паскаля на 1 курсе хватило...
Можете задавать вопросы в личку на сайте... |
Demetrius | Сообщение # 12 | 11:27:26 02 Июл 2010 |
VIP-пользователи
Сообщений: 1192
Репутация: 158
|
[off]ну паскаль гораздо сложнее, а это гораздо проше, и прикольней
Sweet >>> Armin >>> Demetrius SA:MP >> MTA:SA >> IRL |
ANGEL | Сообщение # 13 | 11:29:03 02 Июл 2010 |
Глав. Модераторы
Сообщений: 503
Репутация: 228
|
[off]У меня все под одну гребенку...
Можете задавать вопросы в личку на сайте... |
Demetrius | Сообщение # 14 | 11:32:34 02 Июл 2010 |
VIP-пользователи
Сообщений: 1192
Репутация: 158
|
хех, ладно, тема всеж не про паскаль)
Sweet >>> Armin >>> Demetrius SA:MP >> MTA:SA >> IRL |
ANGEL | Сообщение # 15 | 11:33:28 02 Июл 2010 |
Глав. Модераторы
Сообщений: 503
Репутация: 228
|
А кто нам мешает ее таковой сделать? Все одно программирование...
Пишите сообщения по теме!!! [NPSS]Armin Можете задавать вопросы в личку на сайте... |
Jin | Сообщение # 16 | 19:13:47 07 Мар 2011 |
Забаненые
Сообщений: 84
Репутация: -23
|
Полкар а кинь весь код дм*а |
nikitka1 | Сообщение # 17 | 21:26:01 11 Мар 2011 |
Пользователи
Сообщений: 10
Репутация: 0
|
Полкар, а где ты этому всему научился?? |
BJIADOKC | Сообщение # 18 | 19:24:37 12 Мар 2011 |
Скриптеры
Сообщений: 601
Репутация: 161
|
Quote (nikitka1) Полкар, а где ты этому всему научился?? ыы, ну от части он у меня этому научился xD тут больше не сижу... открыл свой проект |
nikitka1 | Сообщение # 19 | 00:34:49 24 Апр 2011 |
Пользователи
Сообщений: 10
Репутация: 0
|
Я уже что-то понямаю в скриптинге уже мод создал перый по этой инструкции))))))) |
VIRUS8308 | Сообщение # 20 | 20:56:31 09 Авг 2011 |
Пользователи
Сообщений: 4
Репутация: 0
|
public SetPlayerPos (а тут что писать??) Всё нашёл ))) Добавлено (09.08.2011, 20:56) Редактировано VIRUS8308 - Вторник, 09 Авг 2011, 19:28:29 |
| |||