19:36
ОбновитьСмайлыУправление мини-чатом
МИНИ-ЧАТ
Главная страница!

 



 
        
[SA-MP] Hosted Tab (119)
DieSeL 23.09.2017 14:53
GTA IV Mod Installer (5)
jasper2 23.09.2017 02:50
 





Рекомендуем:
Добавить IP: 95.172.59.51:7777





Последние Файлы GTA 4 Последние Файлы GTA-MP Реклама
Скрипт GTA 4 элементы Watch... 07.09.2014
Ferrari 360 Spider [EPM con... 13.12.2013
Porsche Cayenne Turbo 2012 ... 13.12.2013
Shelby Terlingua Mustang v1... 13.12.2013
Hamann Lamborghini Gallardo... 27.10.2013
Dgun (AvnanceRP,SampRP,Dimo... 19.03.2016
SAMP скрипт SX Events (MySQ... 03.03.2016
Карта ASL мэрия для SAMP се... 03.03.2016
AIM для SA-MP 0.3.7 22.02.2016
Скачать GTA SAMP 0.3.7 - Кл... 20.07.2015
Страница 1 из 11
Модератор форума: Alcoholik 
Форум SAMP о мультиплеерах для GTA. » SAMP скачивание и обсуждение » SAMP Скрипты » [FS] LGMS
[FS] LGMS
zEscДата: Понедельник, 30.04.2012, 00:00 | Сообщение # 1
Global Elite
Группа: Ангел Хранитель
Сообщений: 895
Награды: 20
Репутация: 856
Замечания: 0%
Статус:
LGMS



LGMS - Система лазерного наведения ракет


Автор: OFFREAL


Идея: Игрок используя снайперскую винтовку наводит красный маркер на предполагаемую цель, после чего запрашивает ракетный удар с воздуха


Использование:
- Команда для начала наведения /aim
- Приближение/удаление маркера zoom+/- винтовки
- Запрос атаки кнопка медленный шаг (ID 1024)
- Чтобы разместить красный маркер точно на земле, следите за лучом высотомера под маркером






Недостатки системы:
[-] Одновременно может использовать только один игрок
[-] Надо следить за высотомером при наведении
[-] Ракеты пролетают сквозь препятствия, здания, объекты
[-] Максимальный радиус прицеливания 100 метров
[-] Для нормального использования надо привыкнуть


Достоинства системы:
[+] Используется всего один таймер
[+] Снайперка превращается в грозное оружие
[+] Не используется SetPlayerPosFindZ
[+] Не сдвигается камера игрока
[+] Маркер устанавливается только в режиме прицеливания


[cut=Код]
Code
/*
lgms.pwn
Laser-Guided Missiles System [LGMS] by OFFREAL
(Система лезерного наведения ракет)
01.07.2011
NOT Commercial - OpenSource
*/

#include <a_samp>

#define VERSION "1.0 beta" // версия

#define POINT 19282    // указатель цели
#define ROCKET 354  // модель ракеты
#define LASER 18643 // высотомер

#define MAX_RAD 100 // максимальный радиус прицела
#define MIN_RAD 10  // минимальный радиус прицела
#define AIM_TIME 30 // максимальное время прицеливания
#define ROCKETS 3   // количесво ракет за 1 удар

#define AIRF16 minrand(250,350) // случайное положения бомбардировщика

#define R_SPD 50.0  // скорость ракет

// Параметры системы:
new
      Float:AimRAD,    // радиус прицела
      PlayerAIMER = INVALID_PLAYER_ID,    // игрок - наводчик
      SystemSTATE,    // статус системы: 0 свободна, 1 прицеливание, 2 полет ракет
      Defeat,            // подтверждение удара
      AimerTIME,      // время прицеливания
      Float:AimerVECTOR[3],   // вектор камеры игрока - наводчика
      Float:CamPOS[3],        // позиция камеры игрока - наводчика
      Float:BangPOS[3],       // точка удара
      AimUpdateCount;         // счетчик срабатывания основного таймера

// Таймеры:
new AimTIMER;    // таймер наведения
forward AimUpdate(); // функция таймера

// Объекты
new
      Rocket[ROCKETS],
      RedGlow = INVALID_OBJECT_ID,
      AimerH = INVALID_OBJECT_ID;

//=========================================================

public OnFilterScriptInit()
{
      AimTIMER = SetTimer("AimUpdate", 100, 1);
      RedGlow = CreateObject(POINT, 0.00, 0.00, 10000.00, 0.00, 0.00, 0.00);
        
      print("\n");
      printf("filterscript LGMS v%s", VERSION);
      print("Laser-Guided Missiles System [LGMS] by OFFREAL");
      print("\n");
        
      return 1;
}

public OnFilterScriptExit()
{
      DestroyObject(RedGlow);
        
      for(new r=0; r<ROCKETS; r++)
      {
          DestroyObject(Rocket[r]);
      }
        
      DestroyPlayerObject(PlayerAIMER, AimerH);
      KillTimer(AimTIMER);
      return 1;
}

stock minrand(min, max)
{
     return random(max - min) + min;
}

public OnPlayerCommandText(playerid,cmdtext[])
{
      new idx;
      new cmd[128];
      cmd = strtok(cmdtext,idx);
      if(!strcmp(cmd,"/aim",true))
      {
          if(GetPlayerWeapon(playerid) != 34)
          {
              SendClientMessage(playerid, -1, "[LGMS] Для наводки ракет используется прицел снайперской винтовки, выберите это оружие!");
              return 1;
          }
          if(!SystemSTATE)
          {
              SendClientMessage(playerid, -1, "[LGMS] Вход в режим прицеливания, у вас есть " #AIM_TIME " секунд пока самолет в воздухе!!!");
              SystemSTATE = 1;
              PlayerAIMER = playerid;
              AimerTIME = 0;
              AimUpdateCount = 0;
              AimRAD = 30.00;
              AimerH = CreatePlayerObject(playerid, LASER, 0.00, 0.00, 10000.00, 00.00, 90.00, 0.00);
              GameTextForPlayer(playerid, "~r~attack key:~n~~k~~SNEAK_ABOUT~",1999, 4);
          }
          else
          {
              SendClientMessage(playerid, -1, "[LGMS] Самолеты в пути, ждать осталось меньше минуты!");
          }
            
          return 1;
      }
      return 0;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{

      if(playerid == PlayerAIMER && SystemSTATE == 1)
      {
        
          if((newkeys & 8) && (newkeys & 128)) // отдаление
          {
                 if(AimRAD > MIN_RAD)
              {
                  AimRAD -= 2.0;
              }
          }

          if((newkeys & 32) && (newkeys & 128)) // приближение
          {
              if(AimRAD < MAX_RAD)
              {
                  AimRAD += 1.0;
              }
          }
                
          if(newkeys & 1024)
          {
              SystemSTATE = 2;
                     
              new Float:RND[2];
              RND[0] =  BangPOS[0] + ( random(2) ? -AIRF16 : AIRF16 );
              RND[1] =  BangPOS[1] + ( random(2) ? -AIRF16 : AIRF16 );

              //printf("X %f | Y %f | R %f", RND[0], RND[1], AimRAD);

              new ftime = 3600000, bangtime;

              for(new r=0; r<ROCKETS; r++)
              {
                  Rocket[r] = CreateObject(ROCKET,RND[0]+minrand(-30,30),RND[1]+minrand(-30,30),BangPOS[2]+200.00+minrand(-30,30),0.00,0.00,0.00);
                  bangtime = MoveObject(Rocket[r], BangPOS[0]+minrand(-10,10), BangPOS[1]+minrand(-10,10), BangPOS[2], 50.00 );
                  if(bangtime < ftime)
                  {
                      ftime = bangtime;
                  }
              }
                     
              DestroyPlayerObject(playerid, AimerH);
              AimerH = INVALID_OBJECT_ID;
                     
              new str[128];
              format(str,sizeof(str),"[LGMS] Цель захвачена, удар через %d секунд", ftime/1000);
              SendClientMessage(playerid, -1, str);
              AimerTIME = 0;
              //PlayerAIMER = INVALID_PLAYER_ID;
          }
      }
      return 1;
}

public AimUpdate()
{
      if(SystemSTATE != 1){return;}
      if(PlayerAIMER == INVALID_PLAYER_ID){return;}
      new keys[3];
      GetPlayerKeys(PlayerAIMER, keys[0],keys[1],keys[2]);
      //printf("Keys %d", keys[0]);
      if( keys[0] & 128 && GetPlayerWeapon(PlayerAIMER) == 34)
      {
          GetPlayerCameraFrontVector(PlayerAIMER, AimerVECTOR[0], AimerVECTOR[1], AimerVECTOR[2]);
          GetPlayerCameraPos(PlayerAIMER, CamPOS[0], CamPOS[1], CamPOS[2]);
          BangPOS[0] = CamPOS[0] + AimRAD*AimerVECTOR[0];
          BangPOS[1] = CamPOS[1] + AimRAD*AimerVECTOR[1];
          BangPOS[2] = CamPOS[2] + AimRAD*AimerVECTOR[2];
          SetObjectPos(RedGlow, BangPOS[0], BangPOS[1], BangPOS[2]);
          SetPlayerObjectPos(PlayerAIMER, AimerH, BangPOS[0], BangPOS[1], BangPOS[2]);
        }

      if( ++AimUpdateCount%10 == 0 )
      {
          AimerTIME++;
          //printf("AUC %d | AT %d", AimUpdateCount, AimerTIME);
          if(AimerTIME >= AIM_TIME)
          {
              SystemSTATE = 0;
              AimerTIME = 0;
              SendClientMessage(PlayerAIMER, -1, "[LGMS] Вы не успели прицелиться, самолет улетел!");
              SetObjectPos(RedGlow,0.00, 0.00, 10000.00);
              DestroyPlayerObject(PlayerAIMER, AimerH);
              AimerH = INVALID_OBJECT_ID;
                 PlayerAIMER = INVALID_PLAYER_ID;
          }
      }
}

public OnObjectMoved(objectid)
{
      for(new r=0; r<ROCKETS; r++)
      {
          if( objectid == Rocket[r] )
          {
              Defeat++;
              //printf("defeat %d", Defeat);
              GetObjectPos(Rocket[r],BangPOS[0], BangPOS[1], BangPOS[2]);
              DestroyObject(Rocket[r]);
              CreateExplosion(BangPOS[0], BangPOS[1], BangPOS[2], 6, 10.0);
              CreateExplosion(BangPOS[0], BangPOS[1], BangPOS[2], 13, 10.0);
          }
      }
        
      if(Defeat >= ROCKETS)
      {
          SendClientMessage(PlayerAIMER, -1, "[LGMS] Произведен ракетный удар по цели!");
          SetObjectPos(RedGlow,0.00, 0.00, 10000.00);
          SystemSTATE = 0;
          AimerTIME = 0;
          PlayerAIMER = INVALID_PLAYER_ID;
          Defeat = 0;
      }
        
      return 1;
}

stock strtok(const string[], &index)
{
      new length = strlen(string);
      while ((index < length) && (string[index] <= ' '))
      {
          index++;
      }

      new offset = index;
      new result[20];
      while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
      {
          result[index - offset] = string[index];
          index++;
      }
      result[index - offset] = EOS;
      return result;
}

[/cut]





Сообщение отредактировал DjCubex - Понедельник, 30.04.2012, 00:02
AirKiteДата: Понедельник, 30.04.2012, 03:01 | Сообщение # 2
Долгожитель
Группа: I'm V.I.P.
Сообщений: 1671
Награды: 21
Город: Новосибирск
Репутация: 2070
Замечания: 0%
Статус:
Проще было бы реализовать через OnPlayerClickMap. Кстати, скрипт я так понял работает с Map Andreas ???


[1337GAMES] Easy RP
(SAMP SERVER, DEVELOPMENT, NOT SAMP-RP, SMART LIFE)


Jabber: airkite@qip.ru
[Addon] QuickBinder
[FS] Online Players Record
oleg_tarantulaДата: Понедельник, 30.04.2012, 12:34 | Сообщение # 3
Постоялец
Группа: Продвинутые
Сообщений: 345
Награды: 5
Город: -
Репутация: 118
Замечания: 60%
Статус:
Неплохо так. Отличная реализация.


Форум SAMP о мультиплеерах для GTA. » SAMP скачивание и обсуждение » SAMP Скрипты » [FS] LGMS
Страница 1 из 11
Поиск:





 


 


 
Хостинг от uCoz SAMP-RUS.COM