[Урок] Создание авторынка - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: Phoenixxx_Czar, Getbackthere, [CM]OlegEhtler  
[Урок] Создание авторынка
[Ice] Дата: Среда, 02.05.2012, 22:44 | Сообщение # 1
Боец
Сообщений: 209
Статус: Offline
1. Для начала нам нужно внести в данные игрока переменную, отвечающие за ID его машины.
Добавляем в enum pInfo:
Code
pCarKey

2. Теперь сделаем запись в файл.
В OnPlayerRegister:
Code
format(var, 32, "CarKey=%d\n",PlayerInfo[playerid][pCarKey]);fwrite(hFile, var);

В OnPlayerLogin:
Code
if( strcmp( key , "CarKey" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pCarKey] = strval( val ); }

В OnPlayerConnect (чтобы у незалогиневшегося игрока не было личной машины):
Code
PlayerInfo[playerid][pCarKey] = 0;

3. Далее создадим информацию о машинах.
Code
enum cInfo   
{  
cOwned, // занятость  
cModel // модель  
};  
new CarInfo[1][cInfo]; // 1 замените на кол-во машин

4. Теперь нам нужно загрузить машину на сервер.
В самый конец мода вставляем функцию:
Code
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; // вернем истину  
}

5. Сейчас мы должны создать файл, из которого будем читать информацию о машинах (cars.csg)

Заходим в папку scriptfiles и создаем файл. Называем его cars.cfg (если у вас не отображаются расширения включите это в настройках).
Заходим в cars.cfg и пишем туда:
Code
0|411

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

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

Так как я показываю на примере одной машины, то указываю одни координаты.
Примечание: Когда будете добавлять координаты машин ставьте после каждой запятую, не ставить только после последних. Пример:
Code
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}  
};

7. Наконец, вставляем машины в мод.
Используя функцию, которую мы недавно сделали, мы это сделать сможем.
Вставим в public OnGameModeInit:
Code
LoadCars();

С помощью этого мы включим наш файл.
Для вставки машин из файла сразу после этого вставляем:
Code
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 часов; так что практически навсегда)  
}

8. Сделаем, чтобы был эффект когда игрок садиться в наше авто.
В public OnPlayerStateChange ищем:
Code
if(newstate == PLAYER_STATE_DRIVER)

И после этого вставляем:
Code
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); // Замораживаем игрока, чтобы не уехал, не купив ее  
     }

9. Наконец, сделаем сами команды.
В public OnPlayerCommandText вставляем (разумеется после других команд):
Code
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  
   }

10. Сделаем сохранение машин в файл после обновления
Добавим в OnPropUpdate:
Code
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); // закрываем файл
Leazy Дата: Среда, 02.05.2012, 23:10 | Сообщение # 2
Боец
Сообщений: 76
Статус: Offline
выдрал с мода (забыл точно как называется там очень много напичкано)
но +
хотя проще написать чем подстроить его под мод
James_Okonor Дата: Четверг, 10.05.2012, 22:17 | Сообщение # 3
Боец
Сообщений: 98
Статус: Offline
Познавательно , +
[Ice] Дата: Четверг, 10.05.2012, 23:50 | Сообщение # 4
Боец
Сообщений: 209
Статус: Offline
James_Okonor, Leazy, + Написали но не дали Набиватели постов
[CM]FCDK Дата: Воскресенье, 24.06.2012, 01:02 | Сообщение # 5
Новичок
Сообщений: 16
Статус: Offline
всегда когда создавал свой серв была проблема с авторынками а теперье есть решение
  • Страница 1 из 1
  • 1
Поиск:
Статистика Форума
Лучшие пользователи
Admin [39113]

GеNius [7210]

[CM]Russel [5557]

kenlo763 [4952]

[CM]AGRESSOR [4639]

Snake_Firm [4452]

Сэс [4416]

Artem_Buero [4223]

[CM]Durman [3204]

[CM]Рафаэль [3080]

iMaddy [2855]

sky_Woker [2854]

getrekt [2745]

Новые пользователи
cheatjopa2 [11:58]

gabitovismaismaisma [09:18]

Gotham_ws [03:45]

раре [02:58]

Epiphonexmr [02:38]

ksuexe [01:35]

petrusenko_t [23:29]

shanepk60 [21:19]

chadaevvo18 [19:34]

zazik965mb [17:41]

AndreSR [16:49]

funovv [20:46]

Dizelmotnik [11:22]