Форум

Страница 1 из 11
Форум | www.SAMP-TEAM.com » Wiki SA-MP » Уроки скриптинга в Pawno » Нанесение урона пустому транспорту
Нанесение урона пустому транспорту
В уроке используется колбэк 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;
}



Результат:

11.07.2014 в 16:39
Заметно что урон не тот как в сингле
15.07.2014 в 16:43
Ну у меня времени не было вскрывать файлы игры и искать значения урона там. Каждый, кто хочет, может подстроить эту систему под себя
15.07.2014 в 20:17
Форум | www.SAMP-TEAM.com » Wiki SA-MP » Уроки скриптинга в Pawno » Нанесение урона пустому транспорту
Страница 1 из 11
Поиск: