<BaRReT[T]>
Новичок
Сделал управляемые авиабомбы для самолёта "Beagle". Всего 4 бомбы, реализовано с помощью кликабельных текстдравов.
Подвесок под бомбы (макс. кол-во бомб): 4
Количество одновременно отображаемых целей: 6
Дальность обнаружения цели: 500
Видео:
И так, сам код:
Ко всем define:
Ко всем forward:
К текстдравам:
К глобальным переменным:
А так же нам понадобятся следующие функции:
В OnPlayerKeyStateChange:
В OnPlayerStateChange:
В OnGameModeInit включим таймер и создадим несколько машин для теста:
ps, всю наземную технику желательно добавлять в LandVeh. Делал этот скрипт давно, и уже не помню зачем так сделал xD
В OnPlayerConnect:
В любое место, главное не в другую функцию/паблик:
В OnPlayerClickTextDraw:
Тестовая команда для создания самолёта с готовыми авиабомбами, с помощью неё сможете сами реализовать добавление самолётов в игру:
ps, забыл сказать, для работы потребуются инклуды: zcmd и sscanf
Всё, пробуйте :bu:
Подвесок под бомбы (макс. кол-во бомб): 4
Количество одновременно отображаемых целей: 6
Дальность обнаружения цели: 500
Видео:
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
И так, сам код:
Ко всем define:
Код:
#define MAX_JETS 10
#define MAX_LANDVEH 100
Код:
forward SecondTimer();
Код:
new Text:Textdraw0[MAX_PLAYERS];
new Text:Textdraw1[MAX_PLAYERS];
new Text:Textdraw2[MAX_PLAYERS][5];
new Text:Textdraw7[MAX_PLAYERS];
Код:
enum jInfo {
Jet,
Rockets[4],
Rocket,
Target[6],
Target2[4],
Targets,
RStatus[4],
RImpulse[4]
};
enum cInfo {
Aiming
};
new CarInfo[MAX_LANDVEH][cInfo];
new JetInfo[MAX_JETS][jInfo];
new JetID[MAX_JETS];
new Timer;
new LandVeh[MAX_LANDVEH];
new VehName[212][] = {
"Landstalker","Bravura","Buffalo","Linerunner","Perrenial","Sentinel","Dumper","Firetruck","Trashmaster","Stretch","Manana","Infernus",
"Voodoo","Pony","Mule","Cheetah","Ambulance","Leviathan","Moonbeam","Esperanto","Taxi","Washington","Bobcat","Mr.Whoopee","BF Injection",
"Hunter","Premier","Enforcer","Securicar","Banshee","Predator","Bus","Rhino","Barracks","Hotknife","Trailer","Previon","Coach","Cabbie",
"Stallion","Rumpo","RC Bandit","Romero","Packer","Monster","Admiral","Squalo","Seasparrow","Pizzaboy","Tram","Trailer","Turismo","Speeder",
"Reefer","Tropic","Flatbed","Yankee","Caddy","Solair","Berkley's RC Van","Skimmer","PCJ-600","Faggio","Freeway","RC Barron","RC Raider",
"Glendale","Oceanic","Sanchez","Sparrow","Patriot","Quad","Coastguard","Dinghy","Hermes","Sabre","Rustler","Zr-350","Walton","Regina",
"Comet","BMX","Burrito","Camper","Marquis","Baggage","Dozer","Maverick","News Chopper","Rancher","FBI Rancher","Virgo","Greenwood",
"Jetmax","Hotring","Sandking","Blista Compact","Police Maverick","Boxville","Benson","Mesa","RC Goblin","Hotring A","Hotring B",
"Bloodring Banger","Rancher","Super GT","Elegant","Journey","Bike","Mountain Bike","Beagle","Cropdust","Stunt","Tanker","RoadTrain",
"Nebula","Majestic","Buccaneer","Shamal","Hydra","FCR-900","NRG-500","HPV1000","Cement Truck","Tow Truck","Fortune","Cadrona","FBI Truck",
"Willard","Forklift","Tractor","Combine","Feltzer","Remington","Slamvan","Blade","Freight","Streak","Vortex","Vincent","Bullet","Clover",
"Sadler","Firetruck","Hustler","Intruder","Primo","Cargobob","Tampa","Sunrise","Merit","Utility","Nevada","Yosemite","Windsor","Monster A",
"Monster B","Uranus","Jester","Sultan","Stratum","Elegy","Raindance","RC Tiger","Flash","Tahoma","Savanna","Bandito","Freight","Trailer",
"Kart","Mower","Duneride","Sweeper","Broadway","Tornado","AT-400","DFT-30","Huntley","Stafford","BF-400","Newsvan","Tug","Trailer A","Emperor",
"Wayfarer","Euros","Hotdog","Club","Trailer B","Trailer C","Andromada","Dodo","RC Cam","Launch","Police Car","Police Car",
"Police Car","Police Ranger","Picador","S.W.A.T.","Alpha","Phoenix","Glendale","Sadler","L Trailer A","L Trailer B",
"Stair Trailer","Boxville","Farm Plow","U Trailer"
};
new IsInJet[MAX_PLAYERS];
Код:
stock Float:GetPointAngleToPoint(Float:x1, Float:y1, Float:x2, Float:y2)
{
return -atan2(x1 - x2,y1 - y2);
}
stock Float:GetPointDistanceToPointEx(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2)
{
return floatsqroot(floatpower(floatabs(floatsub(x2, x1)), 2) + floatpower(floatabs(floatsub(y2, y1)), 2) + floatpower(floatabs(floatsub(z2, z1)), 2));
}
stock IsPointInSphere(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2, radius)
{
return (GetPointDistanceToPointEx(x1, y1, z1, x2, y2, z2) < radius);
}
stock IsALand(vid)
{
if(!IsAPlane(vid) && !IsABoat(vid)) return 1;
return 0;
}
stock IsAPlane(vid)
{
switch(GetVehicleModel(vid))
{
case 417,425,447,460,469,476,487,488,497,511..513,519,520,548,553,563,577,592,593: return 1;
}
return 0;
}
stock IsABoat(vid)
{
switch(GetVehicleModel(vid))
{
case 472,473,493,495,484,430,453,452,446,454:return 1;
}
return 0;
}
Код:
if(newkeys == 128)
{
if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 511) SelectTextDraw(playerid, 0xFF0000FF);
}
Код:
if(newstate == PLAYER_STATE_DRIVER)
{
if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 511)
{
IsInJet[playerid] = GetPlayerVehicleID(playerid);
TextDrawShowForPlayer(playerid,Textdraw0[playerid]);
TextDrawShowForPlayer(playerid,Textdraw1[playerid]);
TextDrawShowForPlayer(playerid,Textdraw2[playerid][0]);
TextDrawShowForPlayer(playerid,Textdraw2[playerid][1]);
TextDrawShowForPlayer(playerid,Textdraw2[playerid][2]);
TextDrawShowForPlayer(playerid,Textdraw2[playerid][3]);
TextDrawShowForPlayer(playerid,Textdraw2[playerid][4]);
TextDrawShowForPlayer(playerid,Textdraw7[playerid]);
}
}
else if(oldstate == PLAYER_STATE_DRIVER)
{
if(IsInJet[playerid])
{
IsInJet[playerid] = 0;
TextDrawHideForPlayer(playerid,Textdraw0[playerid]);
TextDrawHideForPlayer(playerid,Textdraw1[playerid]);
TextDrawHideForPlayer(playerid,Textdraw2[playerid][0]);
TextDrawHideForPlayer(playerid,Textdraw2[playerid][1]);
TextDrawHideForPlayer(playerid,Textdraw2[playerid][2]);
TextDrawHideForPlayer(playerid,Textdraw2[playerid][3]);
TextDrawHideForPlayer(playerid,Textdraw2[playerid][4]);
TextDrawHideForPlayer(playerid,Textdraw7[playerid]);
}
}
Код:
Timer = SetTimer("SecondTimer",200,1);
LandVeh[0] = CreateVehicle(520,50,50,10,0,6,2,600);
LandVeh[1] = CreateVehicle(402,50,70,10,0,6,2,600);
LandVeh[2] = CreateVehicle(402,50,90,10,0,6,2,600);
LandVeh[3] = CreateVehicle(403,50,100,10,0,6,2,600);
LandVeh[4] = CreateVehicle(404,50,110,10,0,6,2,600);
LandVeh[5] = CreateVehicle(472,-50,90,10,0,6,2,600);
LandVeh[6] = CreateVehicle(404,-40,90,10,0,6,2,600);
LandVeh[7] = CreateVehicle(405,-45,90,10,0,6,2,600);
В OnPlayerConnect:
Код:
Textdraw0[playerid] = TextDrawCreate(440.000000, 130.000000, "1");
TextDrawBackgroundColor(Textdraw0[playerid], 255);
TextDrawFont(Textdraw0[playerid], 1);
TextDrawLetterSize(Textdraw0[playerid], 0.000000, 15.000000);
TextDrawColor(Textdraw0[playerid], -1);
TextDrawSetOutline(Textdraw0[playerid], 0);
TextDrawSetProportional(Textdraw0[playerid], 1);
TextDrawSetShadow(Textdraw0[playerid], 1);
TextDrawUseBox(Textdraw0[playerid], 1);
TextDrawBoxColor(Textdraw0[playerid], 120);
TextDrawTextSize(Textdraw0[playerid], 600.000000, 0.000000);
Textdraw1[playerid] = TextDrawCreate(440.000000, 130.000000, "_____Targets");
TextDrawBackgroundColor(Textdraw1[playerid], 255);
TextDrawFont(Textdraw1[playerid], 2);
TextDrawLetterSize(Textdraw1[playerid], 0.500000, 2.000000);
TextDrawColor(Textdraw1[playerid], -1);
TextDrawSetOutline(Textdraw1[playerid], 0);
TextDrawSetProportional(Textdraw1[playerid], 1);
TextDrawSetShadow(Textdraw1[playerid], 1);
TextDrawUseBox(Textdraw1[playerid], 1);
TextDrawBoxColor(Textdraw1[playerid], 255);
TextDrawTextSize(Textdraw1[playerid], 600.000000, 0.000000);
Textdraw2[playerid][0] = TextDrawCreate(440.000000, 170.000000, "Not found");
TextDrawBackgroundColor(Textdraw2[playerid][0], 255);
TextDrawFont(Textdraw2[playerid][0], 2);
TextDrawLetterSize(Textdraw2[playerid][0], 0.300000, 1.000000);
TextDrawColor(Textdraw2[playerid][0], -1);
TextDrawSetOutline(Textdraw2[playerid][0], 0);
TextDrawSetProportional(Textdraw2[playerid][0], 1);
TextDrawSetShadow(Textdraw2[playerid][0], 1);
TextDrawUseBox(Textdraw2[playerid][0], 1);
TextDrawBoxColor(Textdraw2[playerid][0], 255);
TextDrawTextSize(Textdraw2[playerid][0], 600.000000, 10.0);
Textdraw2[playerid][1] = TextDrawCreate(440.000000, 184.000000, "Not found");
TextDrawBackgroundColor(Textdraw2[playerid][1], 255);
TextDrawFont(Textdraw2[playerid][1], 2);
TextDrawLetterSize(Textdraw2[playerid][1], 0.300000, 1.000000);
TextDrawColor(Textdraw2[playerid][1], -1);
TextDrawSetOutline(Textdraw2[playerid][1], 0);
TextDrawSetProportional(Textdraw2[playerid][1], 1);
TextDrawSetShadow(Textdraw2[playerid][1], 1);
TextDrawUseBox(Textdraw2[playerid][1], 1);
TextDrawBoxColor(Textdraw2[playerid][1], 255);
TextDrawTextSize(Textdraw2[playerid][1], 600.000000, 10.0);
Textdraw2[playerid][2] = TextDrawCreate(440.000000, 198.000000, "Not found");
TextDrawBackgroundColor(Textdraw2[playerid][2], 255);
TextDrawFont(Textdraw2[playerid][2], 2);
TextDrawLetterSize(Textdraw2[playerid][2], 0.300000, 1.000000);
TextDrawColor(Textdraw2[playerid][2], -1);
TextDrawSetOutline(Textdraw2[playerid][2], 0);
TextDrawSetProportional(Textdraw2[playerid][2], 1);
TextDrawSetShadow(Textdraw2[playerid][2], 1);
TextDrawUseBox(Textdraw2[playerid][2], 1);
TextDrawBoxColor(Textdraw2[playerid][2], 255);
TextDrawTextSize(Textdraw2[playerid][2], 600.000000, 10.0);
Textdraw2[playerid][3] = TextDrawCreate(440.000000, 212.000000, "Not found");
TextDrawBackgroundColor(Textdraw2[playerid][3], 255);
TextDrawFont(Textdraw2[playerid][3], 2);
TextDrawLetterSize(Textdraw2[playerid][3], 0.300000, 1.000000);
TextDrawColor(Textdraw2[playerid][3], -1);
TextDrawSetOutline(Textdraw2[playerid][3], 0);
TextDrawSetProportional(Textdraw2[playerid][3], 1);
TextDrawSetShadow(Textdraw2[playerid][3], 1);
TextDrawUseBox(Textdraw2[playerid][3], 1);
TextDrawBoxColor(Textdraw2[playerid][3], 255);
TextDrawTextSize(Textdraw2[playerid][3], 600.000000, 10.0);
Textdraw2[playerid][4] = TextDrawCreate(440.000000, 226.000000, "Not found");
TextDrawBackgroundColor(Textdraw2[playerid][4], 255);
TextDrawFont(Textdraw2[playerid][4], 2);
TextDrawLetterSize(Textdraw2[playerid][4], 0.300000, 1.000000);
TextDrawColor(Textdraw2[playerid][4], -1);
TextDrawSetOutline(Textdraw2[playerid][4], 0);
TextDrawSetProportional(Textdraw2[playerid][4], 1);
TextDrawSetShadow(Textdraw2[playerid][4], 1);
TextDrawUseBox(Textdraw2[playerid][4], 1);
TextDrawBoxColor(Textdraw2[playerid][4], 255);
TextDrawTextSize(Textdraw2[playerid][4], 600.000000, 10.0);
Textdraw7[playerid] = TextDrawCreate(440.000000, 252.000000, "Rockets: 4");
TextDrawBackgroundColor(Textdraw7[playerid], 255);
TextDrawFont(Textdraw7[playerid], 2);
TextDrawLetterSize(Textdraw7[playerid], 0.300000, 1.000000);
TextDrawColor(Textdraw7[playerid], -1);
TextDrawSetOutline(Textdraw7[playerid], 0);
TextDrawSetProportional(Textdraw7[playerid], 1);
TextDrawSetShadow(Textdraw7[playerid], 1);
TextDrawUseBox(Textdraw7[playerid], 1);
TextDrawBoxColor(Textdraw7[playerid], 255);
TextDrawTextSize(Textdraw7[playerid], 600.000000, 0.000000);
TextDrawSetSelectable(Textdraw2[playerid][0], true);
TextDrawSetSelectable(Textdraw2[playerid][1], true);
TextDrawSetSelectable(Textdraw2[playerid][2], true);
TextDrawSetSelectable(Textdraw2[playerid][3], true);
TextDrawSetSelectable(Textdraw2[playerid][4], true);
Код:
public SecondTimer()
{
new Float:x,Float:y,Float:z;
new Float:x1,Float:y1,Float:z1;
new jetid;
for(new i=0;i<MAX_JETS;i++)
{
for(new a=0;a<4;a++)
{
if(JetInfo[i][RStatus][a] != 1) continue;
GetObjectPos(JetInfo[i][Rockets][a],x,y,z);
GetVehiclePos(JetInfo[i][Target2][a],x1,y1,z1);
JetInfo[i][RImpulse][a] -= 0.5;
new Float:angle[2];
angle[0] = 90-GetPointAngleToPoint(y,z,y1,z1);
angle[1] = 270+GetPointAngleToPoint(x,y,x1,y1);
SetObjectRot(JetInfo[i][Rockets][a],0,angle[0],angle[1]);
MoveObject(JetInfo[i][Rockets][a],x1,y1,z1,80);
if(JetInfo[i][RImpulse][a] < 1)
{
JetInfo[i][RStatus][a] = 2;
JetInfo[i][Target2][a] = 0;
DestroyObject(JetInfo[i][Rockets][a]);
CreateExplosion(x,y,z,6,5.0);
}
if(GetPointDistanceToPointEx(x1,y1,z1,x,y,z) < 15)
{
JetInfo[i][RStatus][a] = 2;
JetInfo[i][Target2][a] = 0;
DestroyObject(JetInfo[i][Rockets][a]);
CreateExplosion(x,y,z,6,5.0);
}
}
}
for(new playerid=0;playerid<MAX_PLAYERS;playerid++)
{
if(!IsPlayerConnected(playerid) || GetVehicleModel(GetPlayerVehicleID(playerid)) != 511) continue;
jetid = JetID[GetPlayerVehicleID(playerid)];
GetVehiclePos(GetPlayerVehicleID(playerid),x1,y1,z1);
for(new i=0;i<6;i++)
{
if(!JetInfo[jetid][Target][i])
{
for(new a=0;a<MAX_LANDVEH;a++)
{
if(!IsALand(LandVeh[a])) continue;
GetVehiclePos(LandVeh[a],x,y,z);
if(IsPointInSphere(x,y,z,x1,y1,z1,500) && CarInfo[LandVeh[a]][Aiming] != GetPlayerVehicleID(playerid))
{
CarInfo[LandVeh[a]][Aiming] = GetPlayerVehicleID(playerid);
JetInfo[jetid][Target][i] = LandVeh[a];
new str[64];
format(str,sizeof(str), "%d. %s(%d)",i+1,VehName[GetVehicleModel(LandVeh[a])-400],floatround(GetPointDistanceToPointEx(x,y,z,x1,y1,z1)));
TextDrawSetString(Textdraw2[playerid][i],str);
break;
}
}
}
else
{
GetVehiclePos(JetInfo[jetid][Target][i],x,y,z);
if(IsPointInSphere(x,y,z,x1,y1,z1,500))
{
new str[64];
format(str,sizeof(str), "%d. %s(%d)",i+1,VehName[GetVehicleModel(JetInfo[jetid][Target][i])-400],floatround(GetPointDistanceToPointEx(x,y,z,x1,y1,z1)));
TextDrawSetString(Textdraw2[playerid][i],str);
}
else
{
TextDrawSetString(Textdraw2[playerid][i],"Not Found");
CarInfo[JetInfo[jetid][Target][i]][Aiming] = -1;
JetInfo[jetid][Target][i] = -1;
}
}
}
}
return 1;
}
Код:
if(_:clickedid != INVALID_TEXT_DRAW)
{
for(new i=0;i<6;i++)
{
if(clickedid == Textdraw2[playerid][i])
{
new jit = JetID[GetPlayerVehicleID(playerid)];
if(!JetInfo[jit][Target][i]) return SendClientMessage(playerid,-1,"Цель не найдена!");
new Float:x,Float:y,Float:z;
GetVehiclePos(JetInfo[jit][Target][i],x,y,z);
new Float:x1,Float:y1,Float:z1,Float:r;
GetVehiclePos(JetInfo[jit][Jet],x1,y1,z1);
if(z1 < 50) return SendClientMessage(playerid,-1,"Слишком маленькая высота!");
GetVehicleZAngle(JetInfo[jit][Jet],r);
for(new a=0;a<4;a++)
{
if(JetInfo[jit][RStatus][a]) continue;
new str[16];
JetInfo[jit][Target2][a] = JetInfo[jit][Target][i];
JetInfo[jit][RStatus][a] = 1;
JetInfo[jit][Rocket]--;
JetInfo[jit][RImpulse][a] = 100;
DestroyObject(JetInfo[jit][Rockets][a]);
new Float:angle;
angle = 90-GetPointAngleToPoint(y,z,y1,z1);
JetInfo[jit][Rockets][a] = CreateObject(3786,x1,y1,z1-2,0,angle,GetPointAngleToPoint(x,y,x1,y1)+270);
format(str,sizeof(str), "Rockets: %d",JetInfo[jit][Rocket]);
TextDrawSetString(Textdraw7[playerid],str);
MoveObject(JetInfo[jit][Rockets][a],x,y,z,80);
break;
}
}
}
}
Код:
CMD:cjet(playerid,params[])
{
GivePlayerWeapon(playerid,24,5);
new Float:x,Float:y,Float:z,Float:r;
GetPlayerFacingAngle(playerid,r);
GetPlayerPos(playerid,x,y,z);
for(new i=0;i<MAX_JETS;i++)
{
if(!JetInfo[i][Jet])
{
JetInfo[i][Jet] = CreateVehicle(511,x,y,z,r,0,0,600);
JetID[JetInfo[i][Jet]] = i;
JetInfo[i][Rocket] = 4;
JetInfo[i][Rockets][0] = CreateObject(3786,0,0,0,0,0,0);
JetInfo[i][Rockets][1] = CreateObject(3786,0,0,0,0,0,0);
JetInfo[i][Rockets][2] = CreateObject(3786,0,0,0,0,0,0);
JetInfo[i][Rockets][3] = CreateObject(3786,0,0,0,0,0,0);
JetInfo[i][RStatus][0] = 0;
JetInfo[i][RStatus][1] = 0;
JetInfo[i][RStatus][2] = 0;
JetInfo[i][RStatus][3] = 0;
AttachObjectToVehicle(JetInfo[i][Rockets][0],JetInfo[i][Jet],5.4,-0.8,0,0,178,90);
AttachObjectToVehicle(JetInfo[i][Rockets][1],JetInfo[i][Jet],8.4,-0.8,0,0,178,90);
AttachObjectToVehicle(JetInfo[i][Rockets][2],JetInfo[i][Jet],-5.4,-0.8,0,0,178,90);
AttachObjectToVehicle(JetInfo[i][Rockets][3],JetInfo[i][Jet],-8.4,-0.8,0,0,178,90);
PutPlayerInVehicle(playerid,JetInfo[i][Jet],0);
break;
}
}
return 1;
}
Всё, пробуйте :bu:
Последнее редактирование:
