shape1
shape2
shape3
shape4
shape7
shape8

Пикапы


Статус
Закрыто для дальнейших ответов.

ExPlaY

Новичок
Пользователь
19.07.2014
132
5
0
Доброго времени суток.
Заметил очень часто новички просят обучить созданию пикапов.
Сам я не профессионал, но хочу поделиться тем, чему научился и первое о чём я хочу рассказать, это о пикапах.


Перед работой в Pawno.
1)Заходим на свой сервер.
2)Продвигаемся в то место, где хотим чтоб стоял пикап.
3)После того, как встали на место где будет стоять пикап, пишем в чат команду /save
4)Выходим с сервера и заходим в Pawno.

Создание Пикапа.

-Думаю это было легко, далее продвигаемся к сохраненным координатам.

Мои документы -> GTA San Andreas User Files -> CRMP -> savedpositions.
У каждого появились свои координаты, например у меня получились вот такие:

AddPlayerClass(160,2511.8315,-2128.6716,23.4558,178.3683,0,0,0,0,0,0);

Немного о координатах:
160 - ID скина в котором было сделано сохранение.
2511.8315 - Х координата.
-2128.6716 - Y координата.
23.4558 - Z координата
Далее идет угол наклона и список оружия которые имеются у нашего персонажа.

Приступим к созданию пикапа:

Для начала введем переменную, у меня она будет pickup1.Значит я должен ко всем new добавить переменную:

new pickup1;

Переходим в public OnGameModeInit и начинаем делать Pickup.

Вписываем в паблик код:

pickup1 = CreatePickup(ID нашего пикапа,Состояние пикапа,X координата, Y координата, Z координата);

P.S - На месте pickup1 должна находиться ваша переменная, которую вы вписали в список new.

0 Пикап не отображается.
2 Берётся, появляется после некоторого времени.
3 Берётся но не появляется.
4 Исчезает вскоре после появления.
5 Исчезает вскоре после появления.
8 Берётся, но не имеет эффекта. Исчезает автоматически.
11 Взрывается через несколько секунд после того как появится.
12 Взрывается через несколько секунд после того как появится.
13 Медленно decends на землю.
15 Берётся но не появляется.
19 Берётся, но не имеет эффект (информационные иконки)
22 Берётся но не появляется
23 Берётся, но не исчезает.

620a345779d4.jpg

Далее жмём F5 и после компилирования нам может выдаваться вот такой вареник:

warning 204: symbol is assigned a value that is never used: "pickup1"


Тут нету ничего страшного, он обозначает что наша переменная не имеет функций.

Телепорт по Pickup.
Чтобы создать телепорт по пикапу, нам опять надо зайти в CRMP и выбрать место куда будет телепортироваться игрок, делаем все те же действия что были в самом начале.
Далее переходим к public OnPlayerPickUpPickup

Пишем код:

if(pickupid == pickup1)
{
SetPlayerPos(playerid,X координата,Y координата, Z координата);
}

P.S - Напоминаю что на место pickup1 , вы вписываете свою переменную.

После этого нажимаем F5 и нам выдаст ответ, что мод не имеет warning`ов!
Потому что мы поставили нашей переменной значение телепорта.

Выдача денег по пикапу.

В основном все то же, что было и было с телепортом.
Только меняем немного код:

if(pickupid == pickup1)
{
GivePlayerMoney(playerid,2500)
}

2500 - кол-во денег, ставим свою сумму.

Выдача оружия по пикапу.

Повторение предыдущего.

Только опять меняем немного код:

if(pickupid == pickup1)
{
GivePlayerWeapon(playerid,24,100)
}

24 - Это ID оружия, в моем случае это дигл.
100 - кол-во патрон.

0 - Безоружный
1 - Костет
2 - Клюшка для гольфа
3 - Night Stick
4 - Нож
5 - Бейсбольная бита
6 - Shovel
7 - Бильярдный кий
8 - Катана
9 - Бензопила
10 - Purple Dildo
11 - White Dildo
12 - Long White Dildo
13 - White Dildo 2
14 - Цветы
15 - Cane
16 - Гранаты
17 - Газовый баллончик
18 - Коктейль Молотова
19 - Ракета
20 - Ракета
21 - Ракета
22 - Пистолет
23 - Пистолет с глушителем
24 - Пустынный орёл
25 - Дробовик
26 - Обрез
27 - Боевой дробовик
28 - Микро Узи (Мак 10)
29 - MP5
30 - АК47
31 - M4
32 - Тек9
33 - Винтовка
34 - Снайперская винтовка
35 - РПГ
36 - Missile Launcher
37 - Огнемёт
38 - Пулемёт
39 - Взрывпакеты
40 - Детонатор
41 - Баллончик с краской
42 - Огнетушитель
43 - Фотоаппарат
44 - Очки ночного видения
45 - Инфракрасные очки
46 - Парашют
Выдача здоровья и брони по Pickup.

Меняем код:

if(pickupid == pickup1)
{
SetPlayerHealth(playerid, 100);
SetPlayerArmour(playerid, 100);
}

То есть , если игрок встанет на наш пикап, то ему выдадут 100 HP и 100 Брони.
Еще вы можете сделать сразу несколько действий, для этого добавьте просто функцию.

Выдача cкина по пикапу.

Меняем код:

if(pickupid == pickup1)
{
SetPlayerSkin(playerid, 288);
}

288 - это id скина.

ID скинов можно посмотреть в этой теме:Тык

На этом мой урок окончен.Если будут вопросы,обращайтесь в эту тему.

Автор урока : Неизвестно

Автор доработки:Я
 
Последнее редактирование модератором:

Lacoste

Новичок
Пользователь
22.03.2015
72
9
0
Врать не хорошо,автор не вы.
изменить название переменной не дает вам право на авторство.

 

Ilay37

Новичок
Пользователь
14.09.2014
6
0
0
а как сделать так что бы не давать значение пикапу т.е создать его что бы он крутился  все, а телепорт на альт сделал.

 
A

Amfy

Гость
Гость
@Ilay37, просто создаешь пикап без всяких действий.

 

YoShi

Новичок
Пользователь
22.11.2015
241
5
0
странно чет не получилось ( хотя все сделал, как написано

 

StevenH

Освоившийся
Пользователь
25.11.2015
82
24
0
Желательно для своего же "удобства" использовать нормальные переменные. Не типа такого:

new pickup1, pickup2, pickup3;

А лучше так:

new casino, ...;

Что бы вам было бы удобнее.

 

Luck_Duck

Новичок
Пользователь
24.08.2015
51
2
4
0
тупой вопрос, а если это пикап входа в квартиру, квартир естественно много, как лучше сделать?

       допустимо-ли из файла  savedpositions вырезать сразу несколько позиций и вставить в паблик скопом, под общую переменную
       или потребуется каждый раз (для каждой квартиры) сейвить, вырезать, добавлять переменную, вставлять значение переменной в паблик
 

 

StevenH

Освоившийся
Пользователь
25.11.2015
82
24
0
@Luck_Duck, если интерьер квартиры такой же, то в файле (Базе Данных) создайте 3 строки (IntX, IntY, IntZ) и туда запишите координаты квартир,а при загрузке квартир запишите например в переменную: kvIntX, kvIntY и kvIntZ.

Ну а при телепорте, SetPlayerPos(playerid, Kvartira[куда тпхать][kvIntX], ..., ...);

 

Luck_Duck

Новичок
Пользователь
24.08.2015
51
2
4
0
@StevenH, вааай, долго осмысливал что ты написал, но в целом более менее понял, тоесть:

ко в всем new 

new kv;    // координата входа в квартиру
new kv1;   // координата места появления в квартире

public OnGameModeIni

kv1 = CreatePickup(ID нашего пикапа,Состояние пикапа,X координата, Y координата, Z координата);
public OnPlayerPickUpPickup
if(kv == kv1)
{
   SetPlayerPos(playerid,X координата,Y координата, Z координата);
SetPlayerPos(playerid,X координата,Y координата, Z координата);
SetPlayerPos(playerid,X координата,Y координата, Z координата);
SetPlayerPos(playerid,X координата,Y координата, Z координата);
}
// а вот это видимо как раз то про что я спрашивал, при большем количестве точек входа в 1 интерьер, я из папки savepositions я разом копирую
несколько координат.


ощущение что я сделал все на оборот :D83DDE11:  
подскажи пожалуйста, как будет правильно.
 

StevenH

Освоившийся
Пользователь
25.11.2015
82
24
0
@Luck_Duck

1.

ко в всем new  - 

new kv;    // координата входа в квартиру new kv1;   // координата места появления в квартире
Впринципе, лучше сразу в Enum`e создать. Например у меня в енуме квартир, всё идёт с префиксом kv. А именно: kvID, kvName и так далее.

В enume создай:

kvPickup

2.

kv1 = CreatePickup(ID нашего пикапа,Состояние пикапа,X координата, Y координата, Z координата);
Куда лучше будет не в загрузку мода пихать, а сразу в загрузку. А почему? Потому что, если подключение например в самом конце GameModeInit, и в подключении идёт загрузку квартир из базы, то пикап просто не создаться. Поэтому в сток/паблик с загрузкой квартиры, в конец добавь:

KvartiraInfo[kvPickup] = CreatePickup(...);
// KvartiraInfo - моё название в енуме
// i - выше цикл который загружает по одному квартиры
// kvPickup - для каждого подъезда свой пикап в отдельном месте

3.

public OnPlayerPickUpPickup

if(kv == kv1)
{
    SetPlayerPos(playerid,X координата,Y координата, Z координата);
    SetPlayerPos(playerid,X координата,Y координата, Z координата);
    SetPlayerPos(playerid,X координата,Y координата, Z координата);
    SetPlayerPos(playerid,X координата,Y координата, Z координата);
}
Это вы сделали бред. Если мы в загрузке квартир сделали уже каждому подъезду пикап, то при заходе на него, мы с помощью пвара узнаем по пикапу ид подъезда, например 5 ид (подъезда).

Когда узнали, то тпшаем игрока в нужный вирт. мир:

new id_pod = GetPVarInt(playerid, "SelectPodezd");
DeletePVar(playerid, "SelectPodezd");
SetPlayerInterior(playerid, KvartiraInfo[id_pod][bInt]); // тпшаем в опр. интерьер, интерьер у меня в базе записывается
SetPlayerVirtualWorld(playerid, id_pod); // когда мы наступили на пикап, мы узнали его ид, и записали в пвар, после чего тпшаем в вирт. мир с таким номером, какой номер у подъезда.
// При этом интерьер подъездов (квартир) везде будет один, но вирт. мир разный, и игроки видеть не будут в разных подъездах!
SetPlayerPos(playerid, KvartiraInfo[id_pod][kvIntX], KvartiraInfo[id_pod][kvIntY], KvartiraInfo[id_pod][kvIntZ]);

Смысл я думаю понятен.

 

zoloto565

Новичок
Пользователь
25.03.2016
176
10
0
Помогите Не создаётся пикап ! Что делать ? В моде прописан

 

Misha_Petruk

Освоившийся
Пользователь
23.08.2016
186
86
0
26
У меня ошыбка помогите

Код:
C:\Users\12\Desktop\Drift Mod CRMP Дорабатуеться мной\gamemodes\ProstoFile.pwn(9559) : error 055: start of function body without function header
C:\Users\12\Desktop\Drift Mod CRMP Дорабатуеться мной\gamemodes\ProstoFile.pwn(9563) : error 010: invalid function or declaration
 
Последнее редактирование модератором:
Статус
Закрыто для дальнейших ответов.