Итак. Часто замечаю что многие мануалы просто "теряются" среди новосозданных тем. Из-за этого новички создают темы с вопросами которые уже обсуждались по тысячу раз. Дабы этого небыло создаю тему где будут храниться все мануалы которые были писаны в то разделе.
Итак, начнём.
Первый Мануал.
Анимация при ранении (Авторское название: Анимация подыхания)Автор MAS_22
В начало скипта
MnePizda[MAX_PLAYERS];
потом альтернативне подгружаем анимации обходя самповскую отмену шифтом:
} if (manda < 15.0) // Если меньше 15 ХП он падает { MnePizda[playerid] = 1; PizdaAnimation(playerid, "CRACK", "crckdeth2", 4.0, 1, 0, 0, 0, 0); // Я поставил - "крек" дальше ставьте как хотите сверяясь с вики педрией return 1; } if (manda > 15.0 && MnePizda[playerid] == 1) // Ели больше 15 ХП он встает { MnePizda[playerid] = 0; ClearAnimations(playerid); return 1; } } } return 1; }[/pwn] далее надо зделать так чтобы умирающий не смог сесть в авто ( чтобы не было как на сраном exGTA )
в public OnPlayerEnterVehicle
добавляем условие чтобы трупик не смог сесть в авто
Итак, приступим к добавлению новго дома в мир KINGS а может даже в PEN и GF(не проверял ни PEN ни GF, но по идее должно работать).
1) Находим строчку new HouseInfo[34][hInfo]; Она означает, что при загрузке мода, подгружается 34-1=33 дома Мы хотим добавить ещё один дом, значит 34+1=35 (35-1=34 дома будет после добавления) итог: new HouseInfo[35][hInfo]; Вот такая вот каша
2) После этой строчки вводим новую переменную. Я ввел переменную NH. Значит выглядеть строчка будет так: new NH=1; где, 1 - кол-во добавленных вами домов... т.к. мы добавляем первый, то будет единица. Для чего нужна эта перемнная? А чтобы небыло такого: http://samp-rus.com/forum/17-6305-1
3) Теперь ищем строчку new Float:HouseCarSpawns[34][4] - это координаты всех домашних машин. обраьите внимание, что число машин и число домов должно быть равным... а т.к. дома у написано 35 в строчке с домами, значит 35 должно быть и тут: [pwn]new Float:HouseCarSpawns[35][4][/pwn] В самом конце этого массива не забываем вставить координаты авто. Должна иметь такой вид: {X,Y,Z,Angle} Обратите внимание как расставляются запятые в этом массиве - после каждой строчки, кроме последней.
4)Теперь приступим к самому нужному ищем строчки (не описание функций, а сами функции) [pwn]public IsABoat(carid) public IsAPlane(carid) public IsACopCar(carid) public IsAnAmbulance(carid) public IsATruck(carid)[/pwn] и вставляем внутрь функций такую строчку: carid=carid-NH; т.е. на примере первой, должно выглядеть так: [pwn]public IsABoat(carid) { carid=carid-NH; if(carid >= 86 && carid <=90) { return 1; } return 0; }[/pwn] 5) ищем строчки [pwn]if(kart==110||kart==111||kart==112||kart==113||kart==114||kart==115) if(newcar == 39 || newcar == 40) if(newcar == 55 || newcar == 59) if(newcar == 64 || newcar == 65) if(newcar == 69 || newcar == 70 || newcar == 71 || newcar == 99 || newcar == 100 || newcar == 101) if(newcar == 82 || newcar == 84 || newcar == 85) || newcar == 94) if(newcar == 95) if(newcar == 96 || newcar == 97 || newcar == 98) if(newcar== 110)||newcar==111||newcar==112||newcar==113||newcar==114||newcar==115) if(newcar >= 72 && newcar <= 74) if(newcar >= 75 && newcar <= 77)[/pwn] и добавляем к каждому значению +NH, т.е. на примере первой строчки должно выглядеть так: [pwn]if(kart==(110+NH)||kart==(111+NH)||kart==(112+NH)||kart==(113+NH)||kart==(114+NH)||kart==(115+NH))[/pwn] и так с каждой строкой
6) ищем public HireCost(carid) и вписываем внутрь carid=carid-NH; выглядеть должно так: [pwn]public HireCost(carid) { carid=carid-NH; switch (carid) { case 69: { return 90000; //bullit } case 70:[/pwn] 7) ищем функцию public SetPlayerUnjail() внутри неё ищем new newcar = GetPlayerVehicleID(i); и заменяем на new newcar = GetPlayerVehicleID(i)-NH;
8) ищем строчку if(strcmp(cmd, "/news", true) == 0) в неё ищем new newcar = GetPlayerVehicleID(playerid); и заменяем на new newcar = GetPlayerVehicleID(playerid)-NH;
9) всё, с кодом вроде всё... т.е. багов с авто я пока не находил, значит везде где надо переменную HC мы вставили 10) теперь в файл property.cfg в самый конец нужно добавить ваш новый дом... сделать эту строчку можно через эту прогу: http://samp-rus.com/forum/18-6233-1 хоть она и для pen, но для GF и KINGS должна тоже рабатать Добавили? Всё, теперь можно запускать мод и покупать новый дом ))
11) Хочу обратить внимание, что если вы добавили дом и хотите ещё один, то вам достаточно выполнить 1-3 и 10 пункты
Третий мануал
Как назначить команду на кнопку?Автор MAS_22
Да темы уже были, я пишу тут понятным языком всё в одной теме чтобы понятно было Ытак, вставляем в начало скрипта [pwn]forward OnPlayerKeyStateChange(playerid, newkeys, oldkeys);[/pwn] потом создаем такой паблик [pwn]public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { if (newkeys == #) // Ид кнопки { OnPlayerCommandText(playerid,"/MyCmd"); // Ваша команда } return 1; } [/pwn]
# - иды кнопок [pwn]1 - Действие 2 - Присесть 4 - Огонь 8 - Спринт 16 - Вторичная атака 32 - Прыжок 64 - Смотреть в право 128 - Ручной тормоз 256 - Смотреть в лево 512 - Субмиссия(в машине), Смотреть назад(пешком) 1024 - Идти шагом 2048 - Аналог вверх (по умолчанию 8 ) 4096 - Аналог ввниз (по умолчанию 2) 8192 - Аналог влево (по умолчанию 4) 16384 - Аналог вправо (по умолчанию 6) 16 - кнопка G[/pwn]
например [pwn]public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { if (newkeys == 32)// Вот например: при нажатии клавиши прыжок, чел войдет куда-то, но внимание если будете вставлять, говорите вашем юзверям не так: " введите /enter или нажмите пробел" а " нажмите клавишу прыжок" потому что у каждого прыг может быть по разному { OnPlayerCommandText(playerid,"/enter"); } if (newkeys == 1204) { OnPlayerCommandText(playerid,"/Пукнуть");// Команда чтобы пукнуть теперь на кнопке ходьбы (стандартно - alt) (внимание код команды "пукнуть" не прилагается) } if (newkeys == 8192) { OnPlayerCommandText(playerid,"/kill"); // по н7ажатию "Num 2" игрок здохнет и т.д } return 1; }[/pwn] ЗЫ: Можно извлекать из newkeys и пр определенную часть, например: if(newkeys & 128) будет работать, если нажаты клавиши ручного торомза и ускорения и даже с поворотом ЗЫЫ: Неслушайте морозко, он непротрезвел
Мануал №4
F.A.Q. по созданию шлакбаумовАвтор Alan_Wake
Недавно, в поисках ответа на вопрос "Как сделать шлагбаум,который можно открыть\закрыть ?" я облазил весь форум. Используя "Поиск!" по слову "шлагбаум","шлакбаум"я нашел две закрытых темы,в которых было написанно "Юзай поиск" и ФС Барьер, ответа на свой вопрос в темах я не нашел,конечно можно было посмотреть как сделал тот ФС, но новичку в голову это не придёт (Хотя незнаю даже.) Я решил создать данную темя для "облегчения жизни" новичкам в Павно . (Чтобы при поиске шлагбаумов они находили данную тему.) Итак, чтобы создать шлагбаум понадобиться: 1) МТА мап эдитор либо просто знания места где должен находиться ваш шлагбаум. 1 шт. 2) Умение читать . 1шт. 3) Руки прямые (Не обязательно). 1-2 шт. Для начала нам нужно создать эти объекты : Опора для шлакбаума. Шлагбаум в закрытом положении. Шлагбаум в открытом положении. Узнав их координаты проделываем следующие: Создаём в своём моде : В начале где все forward`ы прибавляем ещё один, название роли не играет я создал такой : [pwn]forward SlakClose1();[/pwn] скобки после слова-обязательны. там же,после всехnew Добовляем ещё один : [pwn]new Slak1;[/pwn] Далее в public OnGameModeInit() добовляем : [pwn]Slak1= CreateObject(968,Координаты закрытого шлагбаума);//968 - ID планки шлагбаума[/pwn] И [pwn]CreateObject(966,Координаты неподвижного основания шлагбаума);//966 -Основание шлагбаума[/pwn] Далее в public OnPlayerCommandText(playerid, cmdtext[]) Добовляем: [pwn]if(strcmp(cmdtext, "/KomandaDlyaOtkritiya", true)==0) { if (PlayerToPoint(7.0,playerid,-1412.812,2638.127,54.688))// Тут Координаты того места откуда можно открыть шлагбаум(x,y,z). { SetObjectRot(Slak1,0.0,0.0,90.937);// Тут используем Последнии 3 значения у ОТКРЫТОЙ палки шлагбаума,тоесть: CreateObject(968,-1412.782,2638.077,55.478,0.0,0.0,90.937); SetTimer("SlakClose1", 5000, 0); // Эта строка вызовит таймер который закроет Шлагбаум через 5000 милисекунд (5 секунд) SendClientMessage(playerid, COLOR_GREY, " Проезжайте! "); } else // А если не в точке указанной выше то : { SendClientMessage(playerid, COLOR_GREY, " Вы не у шлагбаума. "); } }[/pwn] Теперь мы создаём в конце мода Public который будет выглядеть так : [pwn]public SlakClose1() { SetObjectRot(Slak1 ,0.0,-90.241,-89.149); // А тут последние три значения в ЗАКРЫТОЙ палке : CreateObject(968,-1412.785,2637.976,55.538,0.0,-90.241,-89.149); Данная строка вернёт в исходное положение Палку шлагбаума через 5 секунд(Установленное время). }[/pwn] Это пример простого шлагбаума который будет открываться для всех кто введёт команду. А если вы хотите чтобы только для определённой фракции (наапример), то используйте : if(PlayerInfo[playerid][pMember] == [Номер фракции] || PlayerInfo[playerid][pLeader] == [Номер фракции]) // НОмер фракции указывать без "[" "]" Тоесть все тоже самое,но : public OnPlayerCommandText(playerid, cmdtext[]) Будет выглядеть так: [pwn]if(strcmp(cmdtext, "/KomandaDlyaOtkritiya", true)==0) { if(PlayerToPoint(7.0,playerid,-1412.812,2638.127,54.688))// Тут Координаты того места откуда можно открыть шлагбаум(x,y,z). { if(PlayerInfo[playerid][pMember] == Номер фракции || PlayerInfo[playerid][pLeader] == номер Фракции) { SetObjectRot(Slak1,0.0,0.0,90.937);// Тут используем Последнии 3 значения у ОТКРЫТОЙ палки шлагбаума,тоесть: CreateObject(968,-1412.782,2638.077,55.478,0.0,0.0,90.937);[/pwn]
Вот выложил: сначало в самое начало [pwn]#define TEAM_banda 12 // banda - название 12 - id фракции[/pwn]
дальше скины банды:
пишем в new JoinPed[55][1] = {
внизу скины и после этого там где [55] списываешь на столько на сколько скинов стало больше, например добавил 3 штуки пишешь 58.
дальше в public SetPlayerSpawn(playerid) пишем информацию респауна банды [pwn]if (PlayerInfo[playerid][pMember] == 12 || PlayerInfo[playerid][pLeader] == 12) { SetPlayerToTeamColor(playerid); // SetPlayerPos(playerid, 1270.8563,-793.7981,1084.1719); // координаты SetPlayerFacingAngle(playerid, 3.4467); // направление камеры SetPlayerInterior(playerid,0); // id иньтерьера, если на улице то id=0 PlayerInfo[playerid][pInt] = 0; // return 1; } [/pwn] дальше в public SetPlayerWeapons(playerid)
Если тебе надо чтобы у банды вначале появлялись оружия пишешь так
[pwn]if(PlayerInfo[playerid][pMember] == 12 || PlayerInfo[playerid][pLeader] == 12) { GivePlayerWeapon(playerid, 9, 2); // сами оружия GivePlayerWeapon(playerid, 24, 100); // сами оружия GivePlayerWeapon(playerid, 16, 5); // сами оружия }[/pwn] дальше в public ShowStats(playerid,targetid)
добавляешь двенадцатую строчку
[pwn]else if(PlayerInfo[targetid][pMember] == 12 || PlayerInfo[targetid][pLeader] == 12) { ttext = "Мафия"; } слово МАФИЯ мона поменять как хочешь. Это как вид фракции. Будет отображаться в /stats[/pwn]
еще ниже есть строки названия самой банды вот например тебе надо еще одну добавить [pwn]else if(PlayerInfo[targetid][pMember] == 12 || PlayerInfo[targetid][pLeader] == 12) { ftext = "НАЗВАНИЕ "; }[/pwn] дальше ниже пропиши ранги где все ранги находятся [pwn]else if(PlayerInfo[targetid][pMember] == 12 || PlayerInfo[targetid][pLeader] == 12) { if(PlayerInfo[targetid][pRank] == 1) { rtext = "Новичёк"; } else if(PlayerInfo[targetid][pRank] == 2) { rtext = "Салага"; } else if(PlayerInfo[targetid][pRank] == 3) { rtext = "Местный "; } else if(PlayerInfo[targetid][pRank] == 4) { rtext = "Солдат"; } else if(PlayerInfo[targetid][pRank] == 5) { rtext = "Правая рука"; } else if(PlayerInfo[targetid][pRank] == 6) { rtext = "Мафиози"; } else { rtext = "Новичёк"; } }[/pwn]
[pwn]gTeam[para1] = 12; PlayerInfo[para1][pTeam] = 12; // числа 12 заменяем на столько скока у вас получаецо фракций, раз было 11, а мы создаем еще одну, то пишем 12.[/pwn]
И конечно диапазон id:
[pwn]if(level > 11 || level < 0)[/pwn]
Изменить число 11 на столько, скока у вас фракций.
Дальше в public OnPlayerText(playerid, text[])
ищем кейсы со скинами при выборе
Тут как раз и пригодятся те скины что добавляли мы в joinPed
Создание ворот на кнопке (yom_buttons.inc)Автор MAS_22
делаем ворота на кнопке (ну какбэ - нажал кнопку и открылись ворота - нажал - закрылись :crazy:) в начало скрипта вставляем
[pwn]include <yom_buttons> new butt[50]; // Всех умников и полиглотов прошу помолчать! new bool:onpressb[50]=true; new knopke; new vorota;[/pwn]
дальше в public OnGameModeInit()
[pwn]new knopke = CreateButton(x, y, z, rot); // x,y,z - координаты, rot - угол поворота, CreateButton создает кнопку дальше ставим ворота (сам обьект) new vorota = CreateObject(modelid, Float:X, Float:Y, Float:Z, Float:rX, Float:rY, Float:rZ) // сами ворота в стандартном положении (закрыты)[/pwn]
теперь создаем
[pwn]public OnPlayerPressButton(playerid, buttonid) { if(knopke==buttonid) { if(PlayerInfo[playerid][pJob] == 0) // Суда вставляем проверку на работу/фракцию (если ворота для банды и т.д) { if(onpressb[1]==true) { MoveObject(vorota,x, y, z); //После нажатия двигает ворота в коррдинаты x,y,z onpressb[1]=false; } else { MoveObject(vorota,x, y, z);// Теперь возвращает обратно onpressb[1]=true; } } else { SendClientMessage(playerid,COLOR_RED," А нельзя :Р"); // SendClientMessage(playerid, color, " Пшол отсюдова"); // Ban(playerid);
}
А также обязательно подключите ФС! Без ФС работать они не будут Инклуд и ФС в архиве - ОЯЕБУ спасибо за пример реализации ворота-юзер-ворота ХАОСу } return 1; }[/pwn]
Сообщение отредактировал Tomas_Morgan - Вторник, 15.09.2009, 18:48
Итог: красиваое место с меньшкой покупки лицензий.
Восьмой мануал
F.A.Q. по созданию автоматических ворот для фракцийАвтор NightHawK
Доброго времени суток!!! В этой теме я покажу вам как создать автоматические ворота для фракций (в том числе и банд) Для начала надо создать сами ворота и обозначить их например copgate так как это будут ворота для копов!!!
Вот сидел на досуге и подумал - когдато была тема с вопросом --> как зделать профессию воруги?; на что были идиотские ответы И я решил предложить еще хуже ---------------------------------------- я думаю что некаждый гопарь может на расстоянии 100000 км забрать деньги у жертвы (ето видимо телекинез, воровство по фотографии) а также что некаждый бандит сможет отобрать бабло у человека деньги без его согласия/или перед тем как ему надает тумаков поетому думаю что надобудет зделать команду того чтобы человек здался
потом в public ShowStats находим строчке с таким содержимым else if(PlayerInfo[targetid][pJob] == 1) { jtext = "Lawyer"; }
и добавляем туда рядышком свою строчку: [pwn]else if(PlayerInfo[targetid][pJob] == 17) { jtext = " Гопнег Сява"; } [/pwn]
далее находим команду для работы if(strcmp(cmd, "/join", true) == 0)
туда добавляем свою строку
[pwn]else if (GetPlayerState(playerid) == 1 && PlayerToPoint(3.0, playerid,x,y,z)) // Координаты пикапа возле которого можно стать на работу { if(PlayerInfo[playerid][pMember] > 0 || PlayerInfo[playerid][pFMember] < 255) { SendClientMessage(playerid, COLOR_GREY, " Вы во фракции!!1"); return 1; } // Низзя быть во фракции и быть гопнегом, хотя ето можно убрать SendClientMessage(playerid, COLOR_LIGHTBLUE, "* Вы хотите стать гопнегом, вы получите контракт гопыря на 5 часов"); SendClientMessage(playerid, COLOR_LIGHTBLUE, "* когда вы закончите контракт вы можите уйти с работы"); SendClientMessage(playerid, COLOR_LIGHTBLUE, "* Если вы точно хотите быть Сявой, впишите /accept job."); GettingJob[playerid] = 17; } [/pwn]
пошли дальше Пикап: В public OnGameModeInit()
[pwn]AddStaticPickup(1239, 2, x, y , z);//Координаты пикапа для приема на работу Сявой[/pwn]
далее ищем public CustomPickups()
там чуть ниже встявляем такое
[pwn]else if (GetPlayerState(i) == 1 && PlayerToPoint(2.0, i,x,y,z))// Координаты пикапа { if(PlayerInfo[i][pJob] > 0) {} else { GameTextForPlayer(i, " Хочеш гопать всяко? чтобы стать Сявой набери /join ", 5000, 3); } } [/pwn] дальше команда гопа:
Spizdel[playerid] = GetPlayerMoney(playa); GivePlayerMoney(playerid,Spizdel); GivePlayerMoney(playa,-Spizdel);GivePlayerMoney(playa,-Spizdel); format(string, sizeof(string), " Вы спиздолили: $%d",Spizdel); SendClientMessage(playerid, COLOR_DBLUE, string); format(string, sizeof(string), " У вас спиздолили: $%d",Spizdel); SendClientMessage(playa, COLOR_DBLUE, string); ImNoob[playa] = 1; Gopar[playerid] = 1; } else { SendClientMessage(playerid, COLOR_RED, " етот чувачок не хочет здаватся всяко, so fuck off") return 1; } } } } } else { SendClientMessage(playerid, COLOR_GRAD1, " Как Вы будете гопать если вы не Cява!?"); } } return 1; }[/pwn]
Далее в public OnPlayerDeath
добавляете такое
[pwn]if(Gopar[playerid] == 1 && Spizdel[playerid] > 0 && ImNoob[killerid] == 1) { GivePlayerMoney(killerid, Spizdel[playerid]); GivePlayerMoney(playerid, -Spizdel[playerid]); SendClientMessage(playerid, COLOR_RED, " ТЫ ПРОСРАЛ! ты не достоен шапки гопаря, возмущенный забрал свое добро обратно"); SendClientMessage(killerid, COLOT_YELLOW, " Вы успешно вернули себе деньги"); }[/pwn]
И еще пришло в голову какойже сява без чужого телефона
SendClientMessage(playerid, COLOR_DBLUE, " Вы украли телефончег у дурачка, заработали $1000 за ету дрянь); SendClientMessage(playa, COLOR_DBLUE, " У вас украли телефон); GivePlayerMoney(playerid, 1000); PlayerInfo[playerid][pPnumber] = 0; } else { SendClientMessage(playerid, COLOR_RED, " етот чувачок не хочет здаватся всяко, so fuck off") return 1; } } } } } else { SendClientMessage(playerid, COLOR_GRAD1, " Как Вы будете гопать если вы не Cява!?"); } } return 1; }[/pwn]
Сообщение отредактировал Tomas_Morgan - Вторник, 15.09.2009, 19:23
Вобщем мноооого раз видел как всякие всё время задают вопросы "Как зделать варота???" "Варота в ГФ!!" и т.д. Дабы небыло таких глупых вопросов вот вам ФАК.
Шаг 1.
Ставим в ко всем new такое: [pwn]new OTKRIVALKA; new OTKRIVALKATimer;[/pwn]
И если будет ругаться на PizdaAnimation, то заменить на ApplyAnimation Вообще, было бы неплохо заменить все переменные (названия), не очень то и прилично это)
Сообщение отредактировал EdYa - Пятница, 25.09.2009, 19:39
san91, open bizz.cfg and write [pwn]0|The State|~w~Gun Shop 1|No-one|x|y|z|2170.278076|1618.818237|999.976623|5|5000000|0|0|1|1|100|500|100[/pwn] the next,find [pwn]new BizzInfo[6][bInfo];[/pwn] 6 rewrite 7,ie [pwn]new BizzInfo[6][bInfo];[/pwn] and find command /buygun and write location(formula location 99+number bizz) ie in command /buygun replace it [pwn]if(location == 99 || location == 100 || location == 102 || location == 104)[/pwn] on [pwn]if(location == 99 || location == 100 || location == 102 || location == 104 || location == 105)[/pwn]
good luck and apladismentov not have
Добавлено (25.09.2009, 21:35) --------------------------------------------- sorry, I write in English, on the clave no English keyboard layout (I'm not at home)
Пишу скрипты,дорабатываю РП моды на заказ,не дорого - 607-559-798
Вообще определенно неправильно поступаем созданием подобных FAQ, начинающим скриптерам надо давать основную базу знаний, но не готовые скрипты.
ps. значем называть переменные так что бы самому в них ничего не понять? О_о
More than 4 years of development, more than 250,000 lines of source code, more than a hundred units and more than 3400 revisions. Valakas Roleplay - choose your role.