Форум Pawn.Wiki - Воплоти мечту в реальность!: Система аренды транспорта - Форум Pawn.Wiki - Воплоти мечту в реальность!

Перейти к содержимому

  • (2 Страниц) +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ Scr ][ GF ]
Система аренды транспорта
Оценка: -----

#1
Пользователь офлайн   Eazy* 

  • Местный
  • Вставить ник
  • Раскрыть информацию
Здравствуйте гости и пользователи Pawn-Wiki.ru!
Путешествовал по разным серверам, увидел довольно хорошую систему аренды транспорта и решил сделать похожую.
В этой теме я расскажу, как можно создать не большую систему аренды транспорта (Любого, которого вы создадите вместо 462 [скутер], но при этом координаты тоже изменяйте.)
Приступим.
К new`ам добавляем это:
new arendacar[13]; // [13] - кол-во транспорта, считая с 0.

Создаем в enum pInfo новое значение:
pArendaCar,

Теперь нужно чтобы наше значение сохранялось, для этого нажимаем сочетание клавиш CTRL+F и ищем эти строки(проще говоря, сис-му сохранения аккаунтов):
ini_setInteger(File,"
ini_getInteger(File,"

и дописываем в конец каждой это:
ini_setInteger(File,"pArendaCar",PINFO[playerid][pArendaCar]);
ini_getInteger(File,"pArendaCar",PINFO[playerid][pArendaCar]);

Теперь создаем case в public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]):
case 137:
		{
			if(!response) return 1;
			PINFO[playerid][pCash] -= 5000; // pCash - значение денег, заменять на свое.
			PINFO[playerid][pArendaCar] = 1; // данная функция нужна для проверки
			GameTextForPlayer(playerid, "~w~-5000", 3000, 4); // создает текст на экране 
			ApplyAnimation(playerid, "INT_SHOP", "shop_pay", 4.1, 0, 0, 0, 0,0,1); // создает анимацию передачи денег
			return SendClientMessage(playerid,COLOR_WHITE,"{73B461}[Информация] {FFFFFF}Вы взяли скутер в аренду на 1 час.");
		}

Затем ищем в своем моде сис-му, в которой выдается уровень игроку, деньги и т.п, и добавляем это (можно добавить и в public OnPlayerSpawn(playerid)):
PINFO[playerid][pArendaCar] = 0;

Теперь в public OnPlayerStateChange(playerid, newstate, oldstate) добавляем это (проверка):
if(newcar >= arendacar[0] && newcar <= arendacar[12])
{
if(PINFO[playerid][pArendaCar] == 1) { }
else { SCM(playerid, COLOR_WHITE, "{B22222}[Информация] {FFFFFF}Арендуйте скутер у стоящего рядом человека!");       RemovePlayerFromVehicleAC(playerid); // выкидываем игрока из т/с (заменить на свое)
}
}

Теперь ищем свою систему PayDay и добавляем это:
PINFO[i][pArendaCar] = 0; // обнуляет значение после PD (чтобы арендовать скутер снова.)

Теперь создаем сам транспорт для аренды (можно найти через CTRL+F и вписать = AddStaticVehicle):
        //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Аренда Вокзал ЛС~~~~~~~~~~~~~~~~~~~~~~~~~~
	arendacar[0] = AddStaticVehicle(462, 1138.07, -1754.38, 13.58, 0.0000, 1, 1); // (id,x,y,z,r,цвет_1,цвет_2);
	arendacar[1] = AddStaticVehicle(462, 1137.07, -1754.38, 13.58, 0.0000, 1, 1); // (id,x,y,z,r,цвет_1,цвет_2);
	arendacar[2] = AddStaticVehicle(462, 1136.07, -1754.38, 13.58, 0.0000, 1, 1); // (id,x,y,z,r,цвет_1,цвет_2);
	arendacar[3] = AddStaticVehicle(462, 1135.07, -1754.38, 13.58, 0.0000, 1, 1); // (id,x,y,z,r,цвет_1,цвет_2);
	arendacar[4] = AddStaticVehicle(462, 1134.07, -1754.38, 13.58, 0.0000, 1, 1); // (id,x,y,z,r,цвет_1,цвет_2);
	arendacar[5] = AddStaticVehicle(462, 1133.07, -1754.38, 13.58, 0.0000, 1, 1); // (id,x,y,z,r,цвет_1,цвет_2);
	arendacar[6] = AddStaticVehicle(462, 1132.07, -1754.38, 13.58, 0.0000, 1, 1); // (id,x,y,z,r,цвет_1,цвет_2);
	arendacar[7] = AddStaticVehicle(462, 1131.07, -1754.38, 13.58, 0.0000, 1, 1); // (id,x,y,z,r,цвет_1,цвет_2);
	arendacar[8] = AddStaticVehicle(462, 1130.07, -1754.38, 13.58, 0.0000, 1, 1); // (id,x,y,z,r,цвет_1,цвет_2);
	arendacar[9] = AddStaticVehicle(462, 1129.07, -1754.38, 13.58, 0.0000, 1, 1); // (id,x,y,z,r,цвет_1,цвет_2);
	arendacar[10] = AddStaticVehicle(462, 1128.07, -1754.38, 13.58, 0.0000, 1, 1); // (id,x,y,z,r,цвет_1,цвет_2);
	arendacar[11] = AddStaticVehicle(462, 1127.07, -1754.38, 13.58, 0.0000, 1, 1); // (id,x,y,z,r,цвет_1,цвет_2);
	arendacar[12] = AddStaticVehicle(462, 1126.07, -1754.38, 13.58, 0.0000, 1, 1); // (id,x,y,z,r,цвет_1,цвет_2);
	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Теперь в public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) создаем это:
if(newkeys == KEY_YES)//Актер для аренды транспорта на спавне
	{
	    if(IsPlayerInRangeOfPoint(playerid,3,1138.8461,-1750.8062,13.5703))
		{
		SPD(playerid,137,DIALOG_STYLE_MSGBOX,"{FF6F00}Аренда скутера","{FFFFFF}Информация:\n\n- Стоимость аренды скутера: 5.000$\n- Аренда на 1 час\n\n- Вы согласны?","Согласен","Отмена");
		}
	}

Теперь в public OnGameModeInit() добавляем это:
Create3DTextLabel("{FFFFFF}Чтобы арендовать транспорт\n нажмите {73B461}[Y]",COLOR_WHITE,1138.8461,-1750.8062,13.5703,7.0,0,1);

Ну и остался последний штрих. В public OnGameModeInit() добавляем:
CreateActor(189, 1138.8461,-1750.8062,13.5703,3.7617);

Давайте разберемся,что означает каждый параметр.
CreateActor - это сама функция спавна актера.
189 - это id скина актера.
1138.8461,-1750.8062,13.5703,3.7617 - это координаты актера, то есть X,Y,Z,R (вроде обозначается буквой R - это угол поворота).

Вот и всё. Вся наша система аренды, с помощью которой можно арендовать абсолютно любой транспорт. Можно еще чтобы при каждой аренде, деньги за аренду, а именно 5000$, начислялись в банк Мэрии, так будет более РПшней :biggrin:
Автор: Я.
P.s Делал по своему принципу (на счет pArendaCar), так что "Ко-Ко-Ко" мне тут не нужно. Идите лесом. :rolleyes:
PINFO - PlayerInfo

Если у кого-нибудь возникнут какие-либо вопросы/проблемы, пишите всё под этот пост. Помогу.

Скриншоты(как всегда):
На скриншотах показан некоторый маппинг, я о заборах, если нужно, я отредактирую тему и добавлю маппинг.
Изображение
Изображение
Изображение
Изображение
Изображение
1

#2
Пользователь офлайн   loading... 

  • Пользователь
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияEazy* (24 июля 2016 - 22:02) писал:

...

Спасибо, помог)
0

#3
Пользователь офлайн   Pr1me 

  • Местный
  • Вставить ник
  • Раскрыть информацию
А можно как нибудь без NPC. Чтоб окно вылетало как на транспорт садишься
0

#4
Пользователь офлайн   m1n1vv 

  • Профессионал
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияPr1me (03 августа 2016 - 20:34) писал:

А можно как нибудь без NPC. Чтоб окно вылетало как на транспорт садишься

Легко. В паблик OnPlayerStateChange ставишь проверку, что игрок в машине. Потом в условии проверить этот транспорт, и в инструкцию добавить диалог с каким-то текстом.
0

#5
Пользователь офлайн   Pr1me 

  • Местный
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияm1n1vv (03 августа 2016 - 20:56) писал:

Легко. В паблик OnPlayerStateChange ставишь проверку, что игрок в машине. Потом в условии проверить этот транспорт, и в инструкцию добавить диалог с каким-то текстом.

А проверку можешь дать?
0

#6
Пользователь офлайн   m1n1vv 

  • Профессионал
  • Вставить ник
  • Раскрыть информацию
if(newstate == PLAYER_STATE_DRIVER)
{
    new carid = GetVehicleModel(GetPlayerVehicleID(playerid));
    if (sizeof(bike) <= carid <= bike[0])
    {
        //сообщение
    }
}

1

#7
Пользователь офлайн   Pr1me 

  • Местный
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияm1n1vv (03 августа 2016 - 22:39) писал:

if(newstate == PLAYER_STATE_DRIVER)
{
    new carid = GetVehicleModel(GetPlayerVehicleID(playerid));
    if (sizeof(bike) <= carid <= bike[0])
    {
        //сообщение
    }
}


Добром
0

#8
Пользователь офлайн   Pr1me 

  • Местный
  • Вставить ник
  • Раскрыть информацию

Цитата

Теперь нужно чтобы наше значение сохранялось, для этого нажимаем сочетание клавиш CTRL+F и ищем эти строки(проще говоря, сис-му сохранения аккаунтов):
ini_setInteger(File,"
ini_getInteger(File,"


и дописываем в конец каждой это:
ini_setInteger(File,"pArendaCar",PINFO[playerid][pArendaCar]);
ini_getInteger(File,"pArendaCar",PINFO[playerid][pArendaCar]);


А зачем это 2 раза писать? одно и то же
0

#9
Пользователь офлайн   Pr1me 

  • Местный
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияm1n1vv (03 августа 2016 - 22:39) писал:

if(newstate == PLAYER_STATE_DRIVER)
{
    new carid = GetVehicleModel(GetPlayerVehicleID(playerid));
    if (sizeof(bike) <= carid <= bike[0])
    {
        //сообщение
    }
}


D:\СЕРВЕР\samp-rp\gamemodes\new.pwn(1696) : error 001: expected token: "}", but found "-identifier-"
D:\СЕРВЕР\samp-rp\gamemodes\new.pwn(1697) : error 010: invalid function or declaration
D:\СЕРВЕР\samp-rp\gamemodes\new.pwn(3808) : error 017: undefined symbol "PINFO"
D:\СЕРВЕР\samp-rp\gamemodes\new.pwn(3808) : warning 215: expression has no effect
D:\СЕРВЕР\samp-rp\gamemodes\new.pwn(3808) : error 001: expected token: ";", but found "]"
D:\СЕРВЕР\samp-rp\gamemodes\new.pwn(3808) : error 029: invalid expression, assumed zero
D:\СЕРВЕР\samp-rp\gamemodes\new.pwn(3808) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase


6 Errors.
Строка 1696
pArendaCar,

Строка 3808
		case 137:
                {
                        if(!response) return 1;
                        PINFO[playerid][pCash] -= 5000; // pCash - значение денег, заменять на свое.
                        PINFO[playerid][pArendaCar] = 1; // данная функция нужна для проверки(Вот эта строка)
                        GameTextForPlayer(playerid, "~w~-5000", 3000, 4); // создает текст на экране
                        ApplyAnimation(playerid, "INT_SHOP", "shop_pay", 4.1, 0, 0, 0, 0,0,1); // создает анимацию передачи денег
                        return SendClientMessage(playerid,COLOR_WHITE,"{73B461}[Информация] {FFFFFF}Вы взяли скутер в аренду на 1 час.");
                }

0

#10
Пользователь офлайн   Sound 

  • Профессионал
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияEazy* (24 июля 2016 - 22:02) писал:

PINFO - PlayerInfo

И другие имена переменных
0

Поделиться темой:


  • (2 Страниц) +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей


Яндекс.Метрика