Доступ к архиву

Переход в группу "Пользователь"

300.00
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Создание хорошего автосалона.

Статус
В этой теме нельзя размещать новые ответы.

Maks_Sempai

Изучающий
Пользователь
Регистрация
12 Фев 2012
Сообщения
504
Лучшие ответы
0
Репутация
158
Добрый день! Пользователи Pawni-info.
Сейчас я вам расскажу, как создать "Автосалон". Итак начнем.
Во-первых, для начала нам нужно внести в данные игрока переменную, отвечающие за ID его машины.
Идем в
new PlayerInfo[MAX_PLAYERS][pInfo]; И добавляем
PHP:
pCarKey
Во-вторых, сделаем запись в файл.
В OnPlayerRegister
Код:

PHP:
format(var, 32, "CarKey=%d\n",PlayerInfo[playerid][pCarKey]);fwrite(hFile, var);
В OnPlayerLogin
Код:

PHP:
if( strcmp( key , "CarKey" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pCarKey] = strval( val ); }
В-третьих, чтобы у не залогиневшегося игрока не было личной машины.
В OnPlayerConnect
Код:

PHP:
PlayerInfo[playerid][pCarKey] = 0;
Далее создадим информацию о машинах.
new Autoinfo;

Код:

PHP:
enum cInfo  
{ 
cOwned, // Занята машина - 1, свободна - 0
vOwner[MAX_PLAYER_NAME], // Владелец
cModel // ИД
}; 
new CarInfo[1][cInfo]; // 1 замените на кол-во машин
Теперь нам нужно загрузить машину на сервер.
В самый конец мода добавляем эту функцию
Код:

PHP:
LoadCars() // Название функции (без параметров, так как действие распространяется на всех игроков/весь сервер) 
{ 
new arrCoords[2][64]; // Переменная, отвечающая за распределение данных (будет 2 параметра) 
new strFromFile2[256];  
new File: file = fopen("cars.cfg", io_read); // присваиваем файлу cars.cfg переменную file и открываем его 
if (file) // Если файл открылся 
{ 
new idx; // переменную добавим 
while (idx < sizeof(CarInfo)) // пока  переменная меньше кол-ва машин 
{ 
fread(file, strFromFile2);  // читаем данные файла 
split(strFromFile2, arrCoords, '|'); // разделим данные (когда будем писать разделим из символом "|") 
CarInfo[idx][cOwned] = strval(arrCoords[0]); // Присваиваем машине занятость (первое значение) 
CarInfo[idx][cModel] = strval(arrCoords[1]); // Присваиваем машине модель (2-ое значение) 
idx++; // увеличиваем переменную 
} // Если переменная меньше общего кол-во машин, то цикл продолжится 
fclose(file); // закрываем файл 
} 
return 1;
}
Сейчас мы создаем файл, из которого будем читать всю информацию о машинах (cars.csg)
Заходим в папку "scriptfiles" и создаем там файл. Называем его "cars.cfg" (если у вас не отображаются расширения включите это в настройках).
Заходим в "cars.cfg" и пишем туда:
Код:

PHP:
0|411
Здесь 0 - это занятость (0 - не занята, 1 - занята), а 411 - модель (в данном случае инфернус)
Когда будете добавлять еще машины добавляйте ниже этого. Пример:
Код:

PHP:
0|411 
0|514 
1|89
Теперь мы должны создать массив, в котором запишем координаты машин.
Заходим в мод. И вставляем где-нибудь в начало, но после всех инклюдов, форвардов, переменных:
Код:

PHP:
new Float:BuyCarsSpawn[1][4]={  // объявляется массив. Когда будете добавлять машины, замените 1 на их бщее кол-во. 4 -для тех, кто не знает, параметры ( у нас их 4) 
{1111.3768,-1796.1268,16.5938,123.1231} // собственно сами координаты в формате: (координата x, координата y, координата z, угол поворота) 
};
Когда будете добавлять координаты машин ставьте после каждой запятую, не ставить только после последних. Пример:
Код:

PHP:
new Float:BuyCarsSpawn[3][4]={   
{1111.3768,-67.1268,16.5938,123.1231}, 
{565.3768,-1796.1268,16.5938,163.753442}, 
{56.3768,2396.1223,45.9731,183.1231} 
};
Теперь вставляем машины в мод.Используя функцию, которую мы недавно сделали, мы это сделать сможем.
Вставим в public OnGameModeInit
Код:

PHP:
LoadCars();
С помощью этого мы включим наш файл.
Для вставки машин из файла сразу после этого вставляем:
Код:

PHP:
for(new c; c < sizeof(CarInfo); c++) // объявим цикл (объявим переменную c; пока c будет меньше кол-ва машин цикл будет повторяться; а c увеличиваться) 
{ 
AddStaticVehicleEx(CarInfo[c][cModel], BuyCarsSpawn[c][0], BuyCarsSpawn[c][1], BuyCarsSpawn[c][2], BuyCarsSpawn[c][3], -1, -1, 600000); // Загрузим машину (Модель машины, координата 1 (по x), координата 2 (по y), координата 3 (по z), координата 4 (угол наклона), цвет 1 (если -1, значит меняется), цвет 2 (если -1, значит меняется),  время спавна (у нас 600000 секунд = 10000 минут = примерно 170 часов; так что практически навсегда) 
}
Примечание: этот код должен быть вставлен перед всеми машинами, чтобы не было путаницы с идами
Сделаем, чтобы был эффект когда игрок садиться в наше авто.

В public OnPlayerStateChange ищем
Код:

PHP:
if(newstate == PLAYER_STATE_DRIVER)
И после этого вставляем:
Код:

PHP:
if(newcar < sizeof(CarInfo)&&newcar!=0) // Если ид машины, в которую сел игрок меньше кол-ва наших машин (на авторынке); по логике делаем вывод: он сел в машину авторынка 
    { 
     if(newcar!=PlayerInfo[playerid][pCarKey]&&CarInfo[newcar-1][cOwned]==1) // Если ид машины не совпадает с идом машины игрока и если машина, в которую он сел уже куплена, делаем вывод: ему не место в этой машине. 
     { 
      SendClientMessage(playerid, COLOR_RED,"Слышь мужик, че тачки воруешь? Вылазь отсюда!"); // пишем игроку текст 
         RemovePlayerFromVehicle(playerid); // и выкидываем его из машины 
     } 
     else if(CarInfo[newcar-1][cOwned]==0) // иначе; если машина не куплена 
     { 
      SendClientMessage(playerid, COLOR_GREEN,"Вы можете купить эту машину. Введите /buycar"); 
         TogglePlayerControllable(playerid, 0); // Замораживаем игрока, чтобы не уехал, не купив ее 
     } 
     return 1; // вернем истину 
    }
Далее сделаем сами команды.
В public OnPlayerCommandText вставляем (абсолютно после других команд):
Код:

PHP:
if(strcmp(cmd, "/buycar", true) == 0) // если игрок ввел /buycar и это истина 
   { 
    new newcar = GetPlayerVehicleID(playerid); // объявляем переменную (равна иду машины игрока) 
    if(newcar!=0&&newcar < sizeof(CarInfo)&&CarInfo[newcar-1][cOwned]==0) // если эта переменная(ID машины) не равен нулю и эта переменная меньше кол-ва машин и если эта машина не куплена, делаем вывод: машина принадлежит авторынку и ее можно купить. 
    { 
if(PlayerInfo[playerid][pCarKey] != 0) // если у игрока ид машины не равен 0, делаем вывод: у него уже есть машина, больше он купить не может 
{ 
return SendClientMessage(playerid, COLOR_RED, "У тебя уже есть машина, чел");  // вернем ему текст 
} 
     CarInfo[newcar-1][cOwned]=1; // присваиваем этой машине занятость 
     PlayerInfo[playerid][pCarKey]=newcar; // присваиваем иду машины игрока ид этой машины 
     SendClientMessage(playerid, COLOR_WHITE, "Вы купили эту машину"); // пишем текст игроку 
     GivePlayerMoney(playerid, -20000); // забираем у игрока 20000 (можете изменить на свое) 
     TogglePlayerControllable(playerid, 1); // размораживаем "бедного" игрока 
    } 
   } 
if(strcmp(cmd, "/sellcar", true) == 0) // если игрок ввел /sellcar и это истина 
   { 
    CarInfo[PlayerInfo[playerid][pCarKey]-1][cOwned]=0; // Ставим занятость этой машины на 0 
    PlayerInfo[playerid][pCarKey]=0; // Ставим иду машины игрока 0 
    SendClientMessage(playerid, COLOR_WHITE, "Вы продали машину"); // Пишем ему текст 
    GivePlayerMoney(playerid, 20000); // Даем ему его даеньги 
    RemovePlayerFromVehicle(playerid); // Выкидываем ***** из машины 
    OnPropUpdate(); // Сохраним файл cars.cfg 
   }
Теперь сделаем сохранение машин в файл после обновления
Добавим в OnPropUpdate
PHP:
idx = 0; // переменная равна нулю 
while (idx < sizeof(CarInfo)) // создадим цикл (пока переменная меньше кол-ва машин, цикл будет повторяться) 
{ 
new coordsstring[256]; // Переменную сделаем для текста 
format(coordsstring, sizeof(coordsstring), "%i|%i\n",CarInfo[idx][cOwned],CarInfo[idx][cModel]); // делаем сам текст (получиться: "занятость|модель") 
if(idx == 0) file2 = fopen("cars.cfg", io_write); //Если переменная равна нулю, откроем файл cars.cfg и запишем, что нужно 
else file2 = fopen("cars.cfg", io_append); // иначе, откроем файл и прибавим туда, что нужно 
fwrite(file2, coordsstring); // Запишем в файл тот текст, который мы сделали 
idx++; // увеличим первоначальную переменную (если она снова меньше кол-ва машин, цикл повториться) 
fclose(file2);
Ну вот и всё......если что-то не так напишите в скайп: maksimlisovenko , и строго не судите это моя первая работа.От + не откажусь)):df:
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу