• Страница 1 из 1
  • 1
Нанесение урона пустому транспорту
[S]ilverbac[k]Дата: Пятница, 11.07.2014, 16:39 | Сообщение # 1
.::Offline::.
Пахан
Сообщений: 723
[ 86 ]
Награды: 17

Статус отсутствует
В уроке используется колбэк OnPlayerWeaponShot, который был добавлен в версии 0.3z. С его помощью можно отслеживать выстрелы из оружия и узнавать точку попадания пули.

В этом уроке я расскажу, как осуществить с помощью этого колбэка нанесение урона пустому транспорту, как в одиночной игре(или в MTA).

Для начала создадим две машины функцией CreateVehicle

Код


CreateVehicle(482, 1777.6782, -1931.5736, 13.5594, 0.0000, 226, 226, 100);
CreateVehicle(482, 1782.4801, -1931.5820, 13.5594, 0.0000, 194, 194, 100);



Теперь можно перейти, непосредственно, к OnPlayerWeaponShot. В чистом new.pwn вы не найдете данный колбэк, поэтому вам придется вписывать его самим.

Код


public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
          return 1;
}



Параметры:

playerid - ID игрока, который наносит урон
weaponid - ID оружия, которым был нанесен урон
hittype - Тип цели, которой наносится урон
hitid - ID цели, которой наносится урон
Float:fX - Координата X, куда попадает пуля
Float:fY - Координата Y, куда попадает пуля
Float:fZ - Координата Z, куда попадает пуля

Сейчас мы используем параметры weaponid, hittype и hitid

Сделаем простую проверку на тип цели, которой мы нанесем урон

Код


public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
          if(hittype == BULLET_HIT_TYPE_VEHICLE)// BULLET_HIT_TYPE_VEHICLE - тип относится к транспорту
        {
                  
        }
          return 1;
}



Теперь нам нужно узнать текущий уровень здоровья транспорта. Его мы узнаем при помощи функции GetVehicleHealth.
Создаем переменную с типом Float для записи в нее уровня здоровья транспорта.

Код


public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
          if(hittype == BULLET_HIT_TYPE_VEHICLE)// BULLET_HIT_TYPE_VEHICLE - тип относится к транспорту
        {
            new Float:vh;
                          GetVehicleHealth(hitid,vh);
        }
          return 1;
}



Далее, чтобы когда машина уже взорвана, а игрок продолжает в нее стрелять, чтобы здоровье не уходило в минус, делаем проверку на уровень здоровья транспорта и запрещаем дальнейшее его уменьшение.

Код


public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
          if(hittype == BULLET_HIT_TYPE_VEHICLE)// BULLET_HIT_TYPE_VEHICLE - тип относится к транспорту
        {
            new Float:vh;
                          GetVehicleHealth(hitid,vh);
                          if(GetVehicleHealth(hitid,vh) <= 0.0) return 0;
        }
          return 1;
}



Теперь уже можно приступать к нанесению урона.
Мы уже узнали текущий уровень здоровья транспорта, и, чтобы нанести урон, нам нужно его уменьшить

Код


public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
          if(hittype == BULLET_HIT_TYPE_VEHICLE)// BULLET_HIT_TYPE_VEHICLE - тип относится к транспорту
        {
            new Float:vh;
                          GetVehicleHealth(hitid,vh);
                          if(GetVehicleHealth(hitid,vh) <= 0.0) return 0;
                          SetVehicleHealth(hitid,vh-100.0);
        }
          return 1;
}



По-умолчанию, у каждого транспортного средства уровень здоровья равен 1000.0, и теперь, после 10-ти выстрелов в транспорт, он будет уничтожен.
Но не случайно мы создали 2 машины, теперь при помощи параметра weaponid можно сделать определенный уровень наносимого урона для каждого оружия.

Код


public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
          if(hittype == BULLET_HIT_TYPE_VEHICLE)
        {
            new Float:vh;
            GetVehicleHealth(hitid,vh);
            if(GetVehicleHealth(hitid,vh) <= 0.0) return 0;
         if(weaponid == 25)//если стреляем с Shotgun
         {
         SetVehicleHealth(hitid,vh-100.0);//Сносим 100 ед. здоровья
         }
         else if(weaponid == 24)//если стреляем с Deagle
         {
             SetVehicleHealth(hitid,vh-20.0);//Сносим 20 ед. здоровья
         }
        }
          return 1;
}



Результат:



[FS]Neon[APP]FCP[APP]Vehicle Tuning Generator ||||| 20% -- Работа приостановленаОбложка:
 
AlexPPPPДата: Вторник, 15.07.2014, 16:43 | Сообщение # 2
.::Offline::.
Гангстер
Сообщений: 179
[ 21 ]
Награды: 19

Статус отсутствует
Заметно что урон не тот как в сингле


Релизы
[GM] Far EastRolePlay[Repack LessGlobal]
S.T.A.L.K.E.R New.pwn 45% ( мод заливать не буду )
 
[S]ilverbac[k]Дата: Вторник, 15.07.2014, 20:17 | Сообщение # 3
.::Offline::.
Пахан
Сообщений: 723
[ 86 ]
Награды: 17

Статус отсутствует
Ну у меня времени не было вскрывать файлы игры и искать значения урона там. Каждый, кто хочет, может подстроить эту систему под себя


[FS]Neon[APP]FCP[APP]Vehicle Tuning Generator ||||| 20% -- Работа приостановленаОбложка:
 
  • Страница 1 из 1
  • 1
Поиск:


Copyright www.SAMP-TEAM.com (c) 2009-2024
Правила использования материалов сайта

При копировании материалов из нашего сайта
ссылка на www.SAMP-TEAM.com обязательна!
Нарушители правил будут строго наказаны!

Хостинг от uCoz   
Для корректного просмотра мы рекомендуем Вам использовать браузер Google Chrome.
Яндекс.Метрика
Яндекс.Метрика