• Страница 1 из 1
  • 1
Модератор форума: [east_side]_trane, drifter-dron, valych, admin  
Движение объекта в любой плоскости
adminДата: Воскресенье, 04.09.2011, 23:43:43 | Сообщение # 1

Группа: Администраторы
Сообщений: 3869
Добрый вечер. Хочу поделиться с высшими умами скриптинга такой проблемой:
Недавно скачал инклуд - VM (VehicleMissiles), который дает возможность устанавливать ракеты на машины и по нажатии кнопки выстреливать эти ракеты, которые затем взрываются. Но вот в чем проблема. Летят они только в горизонтальной плоскости! Не могли бы вы мне дописать или показать пример, как сделать так, чтобы ракета летела в ту сторону, в какую направлено транспортное средство?
Просто я хочу реализовать этот инклуд для самолета Rustler (тот что с пулеметами), если не модифицировать инклуд, то я не смогу расстреливать наземные объекты, потому как, если я нацелился на землю и выстреливаю ракету, то она летит горизонталь прямо, а не вниз, как я нацелился...
Выкладываю весь код:
Code
#include <a_samp>

/*------------------------------------
native AddVehicleMissiles(vehicleid,Float:offsetx,Float:offsetz)
native RemoveVehicleMissiles(vehicleid)
native IsVehicleHot(vehicleid)
-------------------------------------*/

#define MISSILE_DETONATE_TIME 1000    //milliseconds
#define MISSILE_EXPLODE_TYPE 10
#define MISSILE_EXPLODE_RADIUS 10.0
#define MISSILE_SPEED 90.0
#define MISSILE_FIRE_KEY 1

new VehicleFire[MAX_VEHICLES];
new VehicleBomb[MAX_VEHICLES][2];
new VehicleSmok[MAX_VEHICLES][2];
new Float:VehicleOffsetX[MAX_VEHICLES];
new Float:VehicleOffsetY[MAX_VEHICLES];
new Float:VehicleOffsetZ[MAX_VEHICLES];

forward VM_OnPlayerKeyStateChange(playerid,newkeys);
forward VM_Explode(vehicleid,mode);
forward VM_OnVehicleFire(vehicleid,slot);

stock AddVehicleMissiles(vehicleid,Float:offsetx,Float:offsetz)
{
     if(!VehicleFire[vehicleid])
     {
         new Float:x,Float:u;
         GetVehiclePos(vehicleid,x,u,u);
         if(x != 0)
         {
             if(!IsValidObject(VehicleBomb[vehicleid][1]))
             {
                  
                 VehicleBomb[vehicleid][0] = CreateObject(3790,0.0,0.0,0.0,0,0,0,300.0);//Это у нас идет 1 ракета
                 VehicleBomb[vehicleid][1] = CreateObject(3790,0.0,0.0,0.0,0,0,0,300.0);//А это 2

                 AttachObjectToVehicle(VehicleBomb[vehicleid][0],vehicleid,offsetx,0,offsetz,0,0,270);
                 AttachObjectToVehicle(VehicleBomb[vehicleid][1],vehicleid,-offsetx,0,offsetz,0,0,270);

                 VehicleOffsetX[vehicleid] = offsetx;
                 VehicleOffsetZ[vehicleid] = offsetz;
                 return 1;
             }
         }
     }
     return 0;
}

stock RemoveVehicleMissiles(vehicleid)
{
     if(!VehicleFire[vehicleid])
     {
         if(VehicleBomb[IsValidObject(vehicleid][1]))
         {
             if(VehicleBomb[vehicleid][0])
             {
                 DestroyObject(VehicleBomb[vehicleid][0]);
                 DestroyObject(VehicleBomb[vehicleid][1]);
                 return 1;
             }
             return DestroyObject(VehicleBomb[vehicleid][1]),1;
         }
     }
     return 0;
}

stock IsVehicleHot(vehicleid)
{
     if(IsValidObject(VehicleBomb[vehicleid][1]))
         return 1;

     return 0;
}

public VM_OnPlayerKeyStateChange(playerid,newkeys)
{
     if((newkeys & MISSILE_FIRE_KEY) == (MISSILE_FIRE_KEY))
     {
         new id = GetPlayerVehicleID(playerid);
         if(!VehicleFire[id])
         {
             if(id)
             {
                 if(IsValidObject(VehicleBomb[id][1]))
                 {
                     new
                     Float:x,
                     Float:y,
                     Float:z,
                     Float:a;

                     VehicleFire[id] = 1;

                     if(IsValidObject(VehicleBomb[id][0]))
                     {
                         DestroyObject(VehicleBomb[id][0]);

                         GetVehiclePos(id,x,y,z);
                         GetVehicleZAngle(id,a);

                         a += 270;
                         z += VehicleOffsetZ[id];

                         x += (VehicleOffsetX[id] * floatsin(-a, degrees));
                         y += (VehicleOffsetX[id] * floatcos(-a, degrees));

                         VehicleBomb[id][0] = CreateObject(3790,x,y,z,0,0,a,300.0);
                         VehicleSmok[id][0] = CreateObject(18731,x,y,z-1.3,0,0,0,300.0);

                         a += 90;

                         x += (90 * floatsin(-a, degrees));//я знаю что загадка кроется где то тут, но так как геометрию в школе никогда не любил, поэтому сейчас и мучаюсь, не понимаю
                         y += (90 * floatcos(-a, degrees));//

                         MoveObject(VehicleBomb[id][0],x,y,z,MISSILE_SPEED);
                         MoveObject(VehicleSmok[id][0],x,y,z-1.3,MISSILE_SPEED);

                         SetTimerEx("VM_Explode",MISSILE_DETONATE_TIME,0,"dd",id,0);
                         VM_OnVehicleFire(id,0);
                         return 1;
                     }
                     DestroyObject(VehicleBomb[id][1]);

                     GetVehiclePos(id,x,y,z);
                     GetVehicleZAngle(id,a);

                     a += 90;
                     z += VehicleOffsetZ[id];

                     x += (VehicleOffsetX[id] * floatsin(-a, degrees));
                     y += (VehicleOffsetX[id] * floatcos(-a, degrees));

                     VehicleBomb[id][1] = CreateObject(3790,x,y,z,0,0,a+180,300.0);
                     VehicleSmok[id][1] = CreateObject(18731,x,y,z-1.3,0,0,0,300.0);

                     a += 270;

                     x += (30 * floatsin(-a, degrees));
                     y += (30 * floatcos(-a, degrees));

                     MoveObject(VehicleBomb[id][1],x,y,z,MISSILE_SPEED);
                     MoveObject(VehicleSmok[id][1],x,y,z-1.3,MISSILE_SPEED);

                     SetTimerEx("VM_Explode",MISSILE_DETONATE_TIME,0,"dd",id,1);
                     VM_OnVehicleFire(id,1);
                     return 1;
                 }
             }
             return 1;
         }
     }
     return 1;
}

public VM_Explode(vehicleid,mode)
{
     if(IsValidObject(VehicleBomb[vehicleid][mode]))
     {
         new
         Float:x,
         Float:y,
         Float:z;

         GetObjectPos(VehicleBomb[vehicleid][mode],x,y,z);
         CreateExplosion(x,y,z,MISSILE_EXPLODE_TYPE,MISSILE_EXPLODE_RADIUS);

         DestroyObject(VehicleBomb[vehicleid][mode]);
         DestroyObject(VehicleSmok[vehicleid][mode]);

         VehicleFire[vehicleid] = 0;
         return 1;
     }
     return 1;
}  

Чтобы протестировать скрипт надо создать новый инклуд VM.inc, засунуть туда код выше, затем в свой ФС добавить это:
Code
#include <VM>
//добавить в паблик public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) вот это
VM_OnPlayerKeyStateChange (playerid, newkeys);
//затемв любое место засунуть этот паблик
     public VM_OnVehicleFire(vehicleid,slot)
{
AddVehicleMissiles(vehicleid,0.5,0.5);
     return 1;
}
//в паблике с командами поместить новую команду
if(strcmp(cmd, "/missilescreate", true) == 0)
     {
     AddVehicleMissiles(vehicleid,0.5,0.5);
     }  

Автор самого кода:Backwardsman97
Автор написание по русский - Mikeyfry


zm-jail.ru

Разработка сайта samp-pawno.ru


 
СообщениеДобрый вечер. Хочу поделиться с высшими умами скриптинга такой проблемой:
Недавно скачал инклуд - VM (VehicleMissiles), который дает возможность устанавливать ракеты на машины и по нажатии кнопки выстреливать эти ракеты, которые затем взрываются. Но вот в чем проблема. Летят они только в горизонтальной плоскости! Не могли бы вы мне дописать или показать пример, как сделать так, чтобы ракета летела в ту сторону, в какую направлено транспортное средство?
Просто я хочу реализовать этот инклуд для самолета Rustler (тот что с пулеметами), если не модифицировать инклуд, то я не смогу расстреливать наземные объекты, потому как, если я нацелился на землю и выстреливаю ракету, то она летит горизонталь прямо, а не вниз, как я нацелился...
Выкладываю весь код:
Code
#include <a_samp>

/*------------------------------------
native AddVehicleMissiles(vehicleid,Float:offsetx,Float:offsetz)
native RemoveVehicleMissiles(vehicleid)
native IsVehicleHot(vehicleid)
-------------------------------------*/

#define MISSILE_DETONATE_TIME 1000    //milliseconds
#define MISSILE_EXPLODE_TYPE 10
#define MISSILE_EXPLODE_RADIUS 10.0
#define MISSILE_SPEED 90.0
#define MISSILE_FIRE_KEY 1

new VehicleFire[MAX_VEHICLES];
new VehicleBomb[MAX_VEHICLES][2];
new VehicleSmok[MAX_VEHICLES][2];
new Float:VehicleOffsetX[MAX_VEHICLES];
new Float:VehicleOffsetY[MAX_VEHICLES];
new Float:VehicleOffsetZ[MAX_VEHICLES];

forward VM_OnPlayerKeyStateChange(playerid,newkeys);
forward VM_Explode(vehicleid,mode);
forward VM_OnVehicleFire(vehicleid,slot);

stock AddVehicleMissiles(vehicleid,Float:offsetx,Float:offsetz)
{
     if(!VehicleFire[vehicleid])
     {
         new Float:x,Float:u;
         GetVehiclePos(vehicleid,x,u,u);
         if(x != 0)
         {
             if(!IsValidObject(VehicleBomb[vehicleid][1]))
             {
                  
                 VehicleBomb[vehicleid][0] = CreateObject(3790,0.0,0.0,0.0,0,0,0,300.0);//Это у нас идет 1 ракета
                 VehicleBomb[vehicleid][1] = CreateObject(3790,0.0,0.0,0.0,0,0,0,300.0);//А это 2

                 AttachObjectToVehicle(VehicleBomb[vehicleid][0],vehicleid,offsetx,0,offsetz,0,0,270);
                 AttachObjectToVehicle(VehicleBomb[vehicleid][1],vehicleid,-offsetx,0,offsetz,0,0,270);

                 VehicleOffsetX[vehicleid] = offsetx;
                 VehicleOffsetZ[vehicleid] = offsetz;
                 return 1;
             }
         }
     }
     return 0;
}

stock RemoveVehicleMissiles(vehicleid)
{
     if(!VehicleFire[vehicleid])
     {
         if(VehicleBomb[IsValidObject(vehicleid][1]))
         {
             if(VehicleBomb[vehicleid][0])
             {
                 DestroyObject(VehicleBomb[vehicleid][0]);
                 DestroyObject(VehicleBomb[vehicleid][1]);
                 return 1;
             }
             return DestroyObject(VehicleBomb[vehicleid][1]),1;
         }
     }
     return 0;
}

stock IsVehicleHot(vehicleid)
{
     if(IsValidObject(VehicleBomb[vehicleid][1]))
         return 1;

     return 0;
}

public VM_OnPlayerKeyStateChange(playerid,newkeys)
{
     if((newkeys & MISSILE_FIRE_KEY) == (MISSILE_FIRE_KEY))
     {
         new id = GetPlayerVehicleID(playerid);
         if(!VehicleFire[id])
         {
             if(id)
             {
                 if(IsValidObject(VehicleBomb[id][1]))
                 {
                     new
                     Float:x,
                     Float:y,
                     Float:z,
                     Float:a;

                     VehicleFire[id] = 1;

                     if(IsValidObject(VehicleBomb[id][0]))
                     {
                         DestroyObject(VehicleBomb[id][0]);

                         GetVehiclePos(id,x,y,z);
                         GetVehicleZAngle(id,a);

                         a += 270;
                         z += VehicleOffsetZ[id];

                         x += (VehicleOffsetX[id] * floatsin(-a, degrees));
                         y += (VehicleOffsetX[id] * floatcos(-a, degrees));

                         VehicleBomb[id][0] = CreateObject(3790,x,y,z,0,0,a,300.0);
                         VehicleSmok[id][0] = CreateObject(18731,x,y,z-1.3,0,0,0,300.0);

                         a += 90;

                         x += (90 * floatsin(-a, degrees));//я знаю что загадка кроется где то тут, но так как геометрию в школе никогда не любил, поэтому сейчас и мучаюсь, не понимаю
                         y += (90 * floatcos(-a, degrees));//

                         MoveObject(VehicleBomb[id][0],x,y,z,MISSILE_SPEED);
                         MoveObject(VehicleSmok[id][0],x,y,z-1.3,MISSILE_SPEED);

                         SetTimerEx("VM_Explode",MISSILE_DETONATE_TIME,0,"dd",id,0);
                         VM_OnVehicleFire(id,0);
                         return 1;
                     }
                     DestroyObject(VehicleBomb[id][1]);

                     GetVehiclePos(id,x,y,z);
                     GetVehicleZAngle(id,a);

                     a += 90;
                     z += VehicleOffsetZ[id];

                     x += (VehicleOffsetX[id] * floatsin(-a, degrees));
                     y += (VehicleOffsetX[id] * floatcos(-a, degrees));

                     VehicleBomb[id][1] = CreateObject(3790,x,y,z,0,0,a+180,300.0);
                     VehicleSmok[id][1] = CreateObject(18731,x,y,z-1.3,0,0,0,300.0);

                     a += 270;

                     x += (30 * floatsin(-a, degrees));
                     y += (30 * floatcos(-a, degrees));

                     MoveObject(VehicleBomb[id][1],x,y,z,MISSILE_SPEED);
                     MoveObject(VehicleSmok[id][1],x,y,z-1.3,MISSILE_SPEED);

                     SetTimerEx("VM_Explode",MISSILE_DETONATE_TIME,0,"dd",id,1);
                     VM_OnVehicleFire(id,1);
                     return 1;
                 }
             }
             return 1;
         }
     }
     return 1;
}

public VM_Explode(vehicleid,mode)
{
     if(IsValidObject(VehicleBomb[vehicleid][mode]))
     {
         new
         Float:x,
         Float:y,
         Float:z;

         GetObjectPos(VehicleBomb[vehicleid][mode],x,y,z);
         CreateExplosion(x,y,z,MISSILE_EXPLODE_TYPE,MISSILE_EXPLODE_RADIUS);

         DestroyObject(VehicleBomb[vehicleid][mode]);
         DestroyObject(VehicleSmok[vehicleid][mode]);

         VehicleFire[vehicleid] = 0;
         return 1;
     }
     return 1;
}  

Чтобы протестировать скрипт надо создать новый инклуд VM.inc, засунуть туда код выше, затем в свой ФС добавить это:
Code
#include <VM>
//добавить в паблик public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) вот это
VM_OnPlayerKeyStateChange (playerid, newkeys);
//затемв любое место засунуть этот паблик
     public VM_OnVehicleFire(vehicleid,slot)
{
AddVehicleMissiles(vehicleid,0.5,0.5);
     return 1;
}
//в паблике с командами поместить новую команду
if(strcmp(cmd, "/missilescreate", true) == 0)
     {
     AddVehicleMissiles(vehicleid,0.5,0.5);
     }  

Автор самого кода:Backwardsman97
Автор написание по русский - Mikeyfry

Автор - admin
Дата добавления - 04.09.2011 в 23:43:43
  • Страница 1 из 1
  • 1
Поиск:
Загрузка страницы, займет меньше минуты...
Загрузка...

Статистика Форума
Последнии темы Читаемые темы Лучшие пользователи Новые пользователи
Система телефонов поломалась
Не в себе
фильм скалайн
Трансформеры 3
форсаж 6
Ищу [FS]Для админок на сервер
нужны координаты карты для отметки зон...
Помогите найти мод
pawno урок автоматические ворота
обращение к скриптерам.
Вопросы по скриптингу
Ваши ошибки при компиляции GM/FS

Вопросы по скриптингу

(1081)

Считаем до 1000

(274)

Ваши ошибки при компиляция gm

(260)

Набор в команду

(80)

Ваши ошибки при компиляции GM/FS

(71)

вопроосы по скриптингу от 22.04.2013

(64)

Баннеробмен

(64)

несколько команд на samp 0.3 c

(64)

Оценки сайта samp-pawno.ru

(55)

Заказ хостинга

(51)

Набор в команду(форум)

(45)

Урок №61 по созданию системы авто для GodFather

(45)

admin

(3869)

[east_side]_trane

(443)

TWiX

(316)

valych

(501)

drifter-dron

(477)

danik_rok

(317)

Dimka_71rus

(360)

Drifter96

(300)

MaNb9K

(220)

[MTA]MaPeR5518

(181)

Dima_Tkach

(107)

Nik_Ull

(184)

system32xzxz

(Четверг 09:25:24)

torbin169

(Суббота 23:09:29)

kuchuk_00

(Суббота 17:10:14)

artem_boyko_3

(Суббота 15:57:37)

greggelbak

(Среда 18:29:37)

vladisvlavs

(Среда 13:51:57)

add02102002

(Понедельник 22:37:15)

Диман221

(Понедельник 18:12:45)

almas051004

(Воскресенье 11:05:32)

megasuccessms

(Суббота 14:15:36)

nawe

(Пятница 22:25:23)

swoysb

(Пятница 14:55:29)

Вверх
02:07:45
ОбновитьСмайлыУправление мини-чатом
ЧАТ-PAWNO
2010-2025

vkontakte :samp-pawno.ru: