Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Название: CarRealDestroy
- Описание: позволяет гореть транспорту определённое время и тушить его огнетушителем
- Автор: ZiGGi
- Версия: 1.0
- Справка: если лаганёт, то тачка может бахнуть.
- уменьшать значения в тушении не рекомендуется;)
- */
- #include <a_samp>
- #define CAR_AMOUNT 2000 // количество всего транспорта
- #define CAR_TIME_KILL 90 // через сколько секунд взорвётся тачка
- new veh_fiered[CAR_AMOUNT char];
- new veh_kill[CAR_AMOUNT char];
- new veh_stew[CAR_AMOUNT char];
- new veh_time[CAR_AMOUNT];
- new veh_spawned[CAR_AMOUNT char];
- new fixcar1timer,fixcar2timer,osttimer,vttimer;
- public OnFilterScriptInit()
- {
- osttimer = SetTimer("OneSecondTimer",1000,1);
- vttimer = SetTimer("VehTimer",100,1);
- for(new veh_id=0;veh_id<CAR_AMOUNT;veh_id++)
- {
- if(GetVehicleModel(veh_id) == 0) continue;
- veh_fiered{veh_id} = 0;
- veh_kill{veh_id} = 0;
- veh_stew{veh_id} = 0;
- veh_time[veh_id] = 0;
- veh_spawned{veh_id} = 1;
- }
- print("CarRealDestroy init");
- return 1;
- }
- public OnFilterScriptExit()
- {
- if(osttimer != 0) KillTimer(osttimer);
- if(vttimer != 0) KillTimer(vttimer);
- for(new veh_id=0;veh_id<CAR_AMOUNT;veh_id++)
- {
- veh_fiered{veh_id} = 0;
- veh_kill{veh_id} = 0;
- veh_stew{veh_id} = 0;
- veh_time[veh_id] = 0;
- veh_spawned{veh_id} = 0;
- }
- print("CarRealDestroy exit");
- return 1;
- }
- public OnVehicleDeath(vehicleid, killerid)
- {
- veh_time[vehicleid] = 0;
- veh_kill{vehicleid} = 0;
- veh_fiered{vehicleid} = 0;
- veh_stew{vehicleid} = 0;
- return 1;
- }
- public OnVehicleSpawn(vehicleid)
- {
- veh_fiered{vehicleid} = 0;
- veh_kill{vehicleid} = 0;
- veh_stew{vehicleid} = 0;
- veh_time[vehicleid] = 0;
- veh_spawned{vehicleid} = 1;
- return 1;
- }
- public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
- {
- if((newkeys & KEY_FIRE) && !(oldkeys & KEY_FIRE) && GetPlayerWeapon(playerid) == 42) // 42 - огнетушитель
- {
- new veh_id = GetPlayerToFaceVehicleID(playerid,4);
- if(veh_id == -1 || veh_fiered{veh_id} == 0) return 0;
- veh_stew{veh_id} = 1;
- VehicleFiered(playerid,veh_id);
- return 1;
- }
- return 1;
- }
- // тушим тачку
- forward VehicleFiered(playerid,veh_id);
- public VehicleFiered(playerid,veh_id)
- {
- new Float:veh_hp;
- GetVehicleHealth(veh_id,veh_hp);
- SetVehicleHealth(veh_id,veh_hp+10);
- if(veh_hp > 250) SetVehicleHealth(veh_id,251);
- new keys,ud,lr;
- GetPlayerKeys(playerid,keys,ud,lr);
- if(!(keys & KEY_FIRE) && GetPlayerWeapon(playerid) == 42)
- {
- veh_stew{veh_id} = 0;
- if(veh_hp > 250)
- {
- veh_fiered{veh_id} = 0;
- veh_kill{veh_id} = 0;
- veh_time[veh_id] = 0;
- return 0;
- }
- FixCar1(veh_id);
- return 0;
- }
- SetTimerEx("VehicleFiered",100, 0, "dd",playerid,veh_id);
- return 1;
- }
- //
- // проверяем тачки на горение
- forward VehTimer();
- public VehTimer()
- {
- for(new veh_id=0,Float:veh_hp;veh_id<CAR_AMOUNT;veh_id++)
- {
- if(GetVehicleModel(veh_id) == 0) continue;
- GetVehicleHealth(veh_id,veh_hp);
- if(veh_hp <= 250 && veh_spawned{veh_id} == 1)
- {
- if(veh_fiered{veh_id} == 0 && veh_kill{veh_id} == 0)
- {
- veh_fiered{veh_id} = 1;
- FixCar1(veh_id);
- }
- }
- }
- return 1;
- }
- //
- // колдуем с здоровьем тачки
- forward FixCar1(vehid);
- public FixCar1(vehid)
- {
- if(veh_stew{vehid} == 1) return 1;
- SetVehicleHealth(vehid,200);
- if(veh_fiered{vehid} == 1 && veh_kill{vehid} == 0) fixcar2timer = SetTimerEx("FixCar2",300,0,"d",vehid);
- return 1;
- }
- forward FixCar2(vehid);
- public FixCar2(vehid)
- {
- if(veh_stew{vehid} == 1) return 1;
- SetVehicleHealth(vehid,500);
- fixcar1timer = SetTimerEx("FixCar1",60,0,"d",vehid);
- return 1;
- }
- //
- // отсчёт времени до взрыва тачки
- forward OneSecondTimer();
- public OneSecondTimer()
- {
- for(new veh_id=0;veh_id<CAR_AMOUNT;veh_id++)
- {
- if(GetVehicleModel(veh_id) == 0) continue;
- if(veh_fiered{veh_id} == 1)
- {
- veh_time[veh_id]++;
- if(veh_time[veh_id] >= CAR_TIME_KILL)
- {
- KillTimer(fixcar1timer);
- KillTimer(fixcar2timer);
- veh_time[veh_id] = 0;
- veh_kill{veh_id} = 1;
- veh_fiered{veh_id} = 0;
- veh_spawned{veh_id} = 0;
- SetVehicleHealth(veh_id,200);
- }
- }
- }
- return 1;
- }
- //
- stock GetPlayerToFaceVehicleID(playerid,Float:radius)
- {
- #define range 60
- new Float:X,Float:Y,Float:Z,Float:pA;
- GetPlayerPos(playerid, X, Y, Z);
- GetPlayerFacingAngle(playerid, pA);
- for(new veh_id=0,Float:vX,Float:vY,Float:vZ,Float:ang;
- veh_id<2000;
- veh_id++
- )
- {
- if(!IsVehicleStreamedIn(veh_id,playerid)) continue;
- GetVehiclePos(veh_id, vX, vY, vZ);
- if(!IsPlayerInRangeOfPoint(playerid,radius,vX,vY,vZ)) continue;
- if( Y > vY ) ang = (-acos((X - vX) / floatsqroot((X - vX)*(X - vX) + (Y - vY)*(Y - vY))) - 90.0);
- else if( Y < vY && X < vX ) ang = (acos((X - vX) / floatsqroot((X - vX)*(X - vX) + (Y - vY)*(Y - vY))) - 450.0);
- else if( Y < vY ) ang = (acos((X - vX) / floatsqroot((X - vX)*(X - vX) + (Y - vY)*(Y - vY))) - 90.0);
- if(AngleInRangeOfAngle(-ang, pA, range)) return veh_id;
- }
- #undef range
- return -1;
- }
- stock AngleInRangeOfAngle(Float:a1, Float:a2, Float:range)
- {
- a1 -= a2;
- if((a1 < range) && (a1 > -range)) return true;
- return false;
- }
Advertisement
Add Comment
Please, Sign In to add comment