

//------------------------------------------------------------------------------------------
// Бонус заморозка
F234_0(int bonus)
{
  int unit,i;
  if( SizeTo(Flagman(0),GetX(bonus),GetY(bonus)) < 60 )
  {
    for( unit = FirstInBox(GetX(bonus)-500,GetY(bonus)-500,GetX(bonus)+500,GetY(bonus)+500);
         unit;
         unit = NextInBox() )
      if( SizeTo(unit,GetX(bonus),GetY(bonus)) < 1000 && Action(unit,ACT_GET_ARMY,0,0)==1 )
      {
        for( i = 0; i < sizeof(MonstersVid)/4 && !IsBossVid( MonstersVid[i] ); i++ )
          if( MonstersVid[i]==GetUnitVid(unit) )
          {
            Action(unit,ACT_CHANGE_VID,(GetUnitVid(unit)/10)*10+9,ANI_STAND);
            Action(unit,ACT_SET_BEHAVE,0,0);
            Action(unit,ACT_ATTACK,0,0);
            Action(unit,ACT_STOP,1,0);
            break;
          }
      }
    Effect(EFF_NUKE,0x1010ff);
    if( gbState_Bar )
      MessageText(GetString("items","Item"+itoa(GetUnitVid(unit))),-1,-1);
    Action(bonus,ANI_DEATH2,0,0);
  }
}


//------------------------------------------------------------------------------------------
// Бонус взрыв
F236_0(int bonus)
{
  int unit;
  if( SizeTo(Flagman(0),GetX(bonus),GetY(bonus)) < 60 )
  {
    for( unit = FirstInBox(GetX(bonus)-500,GetY(bonus)-500,GetX(bonus)+500,GetY(bonus)+500);
         unit;
         unit = NextInBox() )
      if( SizeTo(unit,GetX(bonus),GetY(bonus)) < 1000 && Action(unit,ACT_GET_ARMY,0,0)==1 )
      {
        Action(unit,ACT_DAMAGE,300,0);
      }
    EarthQuake(2500);
    Effect(EFF_NUKE,0xffffff);
    if( gbState_Bar )
      MessageText(GetString("items","Item"+itoa(GetUnitVid(unit))),-1,-1);
    Action(bonus,ANI_DEATH2,0,0);
  }
}


//------------------------------------------------------------------------------------------
// Бонус адреналин
/*F238_0(int bonus)
{
  if( SizeTo(Flagman(0),GetX(bonus),GetY(bonus))<60 )
    if( !AdrenalinBeginTime )
    {
      if( gbState_Bar )
        MessageText(GetString("items","Item"+itoa(GetUnitVid(bonus))),-1,-1);
      AdrenalinBeginTime = GetTime();
      SetVidData(9,VID_SPEED,PlayerMaxSpeed+80);
      Action(bonus,ANI_DEATH2,0,0);
    }
}*/


//------------------------------------------------------------------------------------------
// подбор игроком аптечки
F210_0(int unit)
{
  if( SizeTo(Flagman(0),GetX(unit),GetY(unit)) < 60 )
    if( Action(Flagman(0),ACT_GET_HP) < GetVidData(9,VID_MAXHP0) )
    {
      if( gbState_Bar )
        MessageText(GetString("items","Item"+itoa(GetUnitVid(unit))),-1,-1);
      Action(Flagman(0),ACT_DAMAGE,-20);
      Action(unit,ANI_DEATH2,0,0);
      CreateSprite(760,GetX(Flagman(0)),GetY(Flagman(0)),GetZ(Flagman(0))+60);
    }
}
//------------------------------------------------------------------------------------------
F211_0(int unit)
{
  if( SizeTo(Flagman(0),GetX(unit),GetY(unit)) < 60 )
    if( Action(Flagman(0),ACT_GET_HP) < GetVidData(9,VID_MAXHP0) )
    {
      if( gbState_Bar )
        MessageText(GetString("items","Item"+itoa(GetUnitVid(unit))),-1,-1);
      Action(Flagman(0),ACT_DAMAGE,-50);
      Action(unit,ANI_DEATH2,0,0);
      CreateSprite(760,GetX(Flagman(0)),GetY(Flagman(0)),GetZ(Flagman(0))+60);
    }
}
//------------------------------------------------------------------------------------------
F212_0(int unit)
{
  if( SizeTo(Flagman(0),GetX(unit),GetY(unit)) < 60 )
    if( Action(Flagman(0),ACT_GET_HP) < (GetVidData(9,VID_MAXHP0)+100) )
    {
      if( gbState_Bar )
        MessageText(GetString("items","Item"+itoa(GetUnitVid(unit))),-1,-1);
      if( Action(Flagman(0),ACT_GET_HP) < GetVidData(9,VID_MAXHP0) )
        Action(Flagman(0),ACT_SET_HP,Action(Flagman(0),ACT_GET_HP)+100);
      else
        Action(Flagman(0),ACT_SET_HP,GetVidData(9,VID_MAXHP0)+100);
      Action(unit,ANI_DEATH2);
      CreateSprite(760,GetX(Flagman(0)),GetY(Flagman(0)),GetZ(Flagman(0))+60);
    }
}


//------------------------------------------------------------------------------------------
// добавляет игроку патроны если нужно, возвращает 1 если патроны не нужны
AddAmmo(int n_weapon,int no_ammo)
{
  if( Action(Flagman(0),ACT_GET_AMMO,n_weapon,0) < GetVidData(10+n_weapon,VID_AMMO) )
  {
    if( (Action(Flagman(0),ACT_GET_AMMO,n_weapon,0)+no_ammo)
        <= GetVidData(10+n_weapon,VID_AMMO) )
      Action( Flagman(0),ACT_ADD_AMMO,no_ammo,n_weapon );
    else
      Action( Flagman(0),ACT_ADD_AMMO,
        GetVidData(10+n_weapon,VID_AMMO)-Action(Flagman(0),ACT_GET_AMMO,n_weapon,0),
        n_weapon );
    // Устанавливаем индикатор количества патронов для данного оружия
    if( gbState_Bar )
      Action( StateBarAmmo[n_weapon], ACT_CHANGE_DIRECTION,
        (Action(Flagman(0),ACT_GET_AMMO,n_weapon,0)*248)/GetVidData(10+n_weapon,VID_AMMO) );
    return 0;
  }
  return 1;
}
//------------------------------------------------------------------------------------------
// Подбор игроком оружия
F260_0(int unit)
{
	if( SizeTo(Flagman(0),GetX(unit),GetY(unit))<60 )
	{
        if ( LevelNumber < 0 )//если сурвайв
    		AddAmmo( GetUnitVid(unit)-260, GetVidData(10+GetUnitVid(unit)-260,VID_AMMO)/2 );
        else
    		AddAmmo( GetUnitVid(unit)-260, GettingAmmo[GetUnitVid(unit)-260]/2 );
		//
		int vid = GetUnitVid(unit);
		if(!Action(Flagman(0),ACT_HAVE_ITEM,vid))
		{
			Action(Flagman(0),ACT_ADD_ITEM,vid,0);
			if(gbState_Bar)
				MessageText(GetString("items","Item"+itoa(GetUnitVid(unit))),-1,-1);
		}
		else
		{
			int curVal = WpnUpgrade[vid-260];
			if(curVal < 3)
			{
				//SetValI("WpnUpgrade"+itoa(vid-260), curVal+1);
				WpnUpgrade[vid-260] = curVal+1;
				ResetSkills();
				//
				if(gbState_Bar)
				{
					MenuRelease();
					CreateStateBar();
				}
				if(gbState_Bar)
					MessageText(GetString("items","WpnUpgr"+itoa(GetUnitVid(unit))),-1,-1);
			}
		}
		//
		if( gbState_Bar )
		{
			Action(StateBarAmmo[vid-260],ACT_SET_INVISIBLE,0);
			Action(StateBarWeapon[vid-260],ACT_SET_INVISIBLE,0);
		}
		Action(unit,ANI_DEATH2,0,0);
	}
}
F261_0(int unit) { F260_0(unit); }// подбор оружия
F262_0(int unit) { F260_0(unit); }
F263_0(int unit) { F260_0(unit); }
F264_0(int unit) { F260_0(unit); }
F265_0(int unit) { F260_0(unit); }
F266_0(int unit) { F260_0(unit); }
F267_0(int unit) { F260_0(unit); }
F268_0(int unit) { F260_0(unit); }
F269_0(int unit) { F260_0(unit); }


//------------------------------------------------------------------------------------------
// Подбор игроком денег
F241_0(int unit)
{
  if( SizeTo(Flagman(0),GetX(unit),GetY(unit)) < 60 )
  {
    if( gbState_Bar )
      MessageText(GetString("items","Item"+itoa(GetUnitVid(unit))),-1,-1);
    PlayerMoney += 50;
    Action(unit,ANI_DEATH2,0,0);
  }
}


//------------------------------------------------------------------------------------------
// Подбор жизни
F235_0(int unit)
{
  if( SizeTo(Flagman(0),GetX(unit),GetY(unit)) < 60 )
    if( PlayerItem[727-720] < 5 )
    {
      if( gbState_Bar )
        MessageText(GetString("items","Item"+itoa(GetUnitVid(unit))),-1,-1);
      PlayerItem[727-720]++;
      Action(unit,ANI_DEATH2,0,0);
    }
}


//------------------------------------------------------------------------------------------
// подбор игроком фонарика
F246_0(int unit)
{
  if( SizeTo(Flagman(0),GetX(unit),GetY(unit)) < 60 )
  {
    PlayerItem[728-720] = 1;
    Action(unit,ANI_DEATH2);
    TurnOnFlashIfNeed();
  }
}


//------------------------------------------------------------------------------------------
// Подбор игроком аптечки спасательной
F230_0(int unit)
{
  if( SizeTo(Flagman(0),GetX(unit),GetY(unit)) < 60 )
    if( !Action(Flagman(0),ACT_HAVE_ITEM,GetUnitVid(unit),0) )
    {
      if( gbState_Bar )
        MessageText(GetString("items","Item"+itoa(GetUnitVid(unit))),-1,-1);
      Action(Flagman(0),ACT_ADD_ITEM,GetUnitVid(unit),0);
      Action(unit,ANI_DEATH2,0,0);
      if( gbState_Bar )
        MenuAction(730,999999,ACT_SET_ARMY,0);
    }
}


//------------------------------------------------------------------------------------------
// Подбор игроком динамита
F301_0(int unit)
{
  if( SizeTo(Flagman(0),GetX(unit),GetY(unit))<60 )
  {
    if( gbState_Bar )
      MessageText(GetString("items","Item"+itoa(GetUnitVid(unit))),-1,-1);
    PlayerExplosive++;
//    Action(Flagman(0),ACT_ADD_ITEM,GetUnitVid(unit),0);
    Action(unit,ANI_DEATH2,0,0);
    if( gbState_Bar )
    {
      string text;
      text = PlayerExplosive;
      Action(StateBarExplosive,ACT_SET_TEXT,&text);
      MenuAction(748,999999,ACT_SET_ARMY,0);
    }
  }
}


//------------------------------------------------------------------------------------------
// Подбор игроком патронов
F302_0(int unit)
{
  int n_weapon;
  if( SizeTo(Flagman(0),GetX(unit),GetY(unit))<50 )
  {
    if( !AddAmmo(GetUnitVid(unit)-300,GettingAmmo[GetUnitVid(unit)-300]) )
    {
      if( gbState_Bar )
        MessageText(GetString("items","Item"+itoa(GetUnitVid(unit))),-1,-1);
      Action(unit,ANI_DEATH2,0,0);
    }
  }
}


//------------------------------------------------------------------------------------------
F303_0(int unit) { F302_0(unit); }// подбор патронов
F304_0(int unit) { F302_0(unit); }
F305_0(int unit) { F302_0(unit); }
F306_0(int unit) { F302_0(unit); }
F307_0(int unit) { F302_0(unit); }
F308_0(int unit) { F302_0(unit); }
F309_0(int unit) { F302_0(unit); }


//------------------------------------------------------------------------------------------
//подбор игроком брони
F204_0(int unit)
{
  int link, already_have_armor, prev;
  if( SizeTo(Flagman(0),GetX(unit),GetY(unit)) < 60 )
  {
    already_have_armor = 0;
    for( link = Action(Flagman(0),ACT_GET_LINK); link; link = Action(link,ACT_GET_LINK) )
      if( GetUnitVid(link) >= 200 && GetUnitVid(link) <= 202 )
      {
        if( Action(link,ACT_GET_HP,0,0) < GetVidData(GetUnitVid(unit)-4,VID_MAXHP0) )
        {//уничтожаем старый бронежилет
          prev = Action(link,ACT_GET_UPLINK);
          Destroy(link);
          link = prev;
//          break;
        }
        else
          already_have_armor = 1;
      }
      else if( GetVidData(GetUnitVid(link),VID_CLASS)==B_LINKER && GetUnitVid(link)!=203 )
      { // уничтожаем гало от оружия
        prev = Action(link,ACT_GET_UPLINK);
        if( GetVidData(GetUnitVid(link),VID_LINK) == GetUnitVid(Action(link,ACT_GET_LINK)) )
          Destroy( Action(link,ACT_GET_LINK) );
        Destroy( link );
        link = prev;
      }
    if( !already_have_armor )
    {
      if( gbState_Bar )
        MessageText(GetString("items","Item"+itoa(GetUnitVid(unit))),-1,-1);
      link = Action(Flagman(0),ACT_GET_LINK);
      if( gsPlayer_Sex=="male" )
        CreateSprite(GetUnitVid(unit)-4,GetX(link),GetY(link),GetZ(link),GetDirection(link),link);
      else if ( GetUnitVid(unit) == 206 )
        CreateSprite(GetUnitVid(unit)-4,GetX(link),GetY(link),GetZ(link) - 1,GetDirection(link),link);
      else
        CreateSprite(GetUnitVid(unit)-4,GetX(link),GetY(link),GetZ(link) - 4,GetDirection(link),link);
//      Action(Flagman(0),ACT_ADD_ITEM,GetUnitVid(unit),0);
      Action(unit,ANI_DEATH2);
    }
  }
}
F205_0(int unit) { F204_0(unit); }
F206_0(int unit) { F204_0(unit); }


//------------------------------------------------------------------------------------------
AddInvulnerable()
{
  int link;
  for( link = Action(Flagman(0),ACT_GET_LINK); link; link = Action(link,ACT_GET_LINK) )
    if( GetUnitVid(link)==203 )
    {
      Destroy(link);
      break;
    }
  link = Action(Flagman(0),ACT_GET_LINK);
  return CreateSprite(203,GetX(link),GetY(link),GetZ(link)-13,GetDirection(link),link);
}

//------------------------------------------------------------------------------------------
//подбор игроком неуязвимости
F207_0(int unit)
{
  if( SizeTo(Flagman(0),GetX(unit),GetY(unit)) < 60 )
  {
    if( gbState_Bar )
      MessageText(GetString("items","Item"+itoa(GetUnitVid(unit))),-1,-1);
    AddInvulnerable();
    Action(unit,ANI_DEATH2);
  }
}


//------------------------------------------------------------------------------------------
ImplantsTact(int unit, int nSkill)
{
	if(!unit || SizeTo(Flagman(0),GetX(unit),GetY(unit)) < 60)
	{
		int iMaxSkill = MAX_SKILL_VALUE;
		//
		if(LevelNumber < 0)
			iMaxSkill = 3;
		//
		if(giSkills[nSkill] < iMaxSkill)
		{
			if( gbState_Bar )
				MessageText(GetString("items","Item"+itoa(GetUnitVid(unit))),-1,-1);
			giSkills[nSkill]++;
			Action(unit,ANI_DEATH2);
			//
			ResetSkills();
		}
	}
}


//------------------------------------------------------------------------------------------
// подбор имплантанта увеличения жизни
F242_0(int unit) { 	ImplantsTact(unit, 0); }
// подбор имплантанта увеличения силы (максимального количества патронов)
F243_0(int unit) { 	ImplantsTact(unit, 1); }
// подбор имплантанта увеличения скорости
F244_0(int unit) { 	ImplantsTact(unit, 2); }
// подбор имплантанта увеличения точности пападаний и повреждений
F245_0(int unit) { 	ImplantsTact(unit, 3); }


//------------------------------------------------------------------------------------------
// подбор дрона
F231_0(int unit)
{
  int link;
  if( SizeTo(Flagman(0),GetX(unit),GetY(unit)) < 60 )
    if( !GetVidData(290,VID_COUNT) )
    {
      if( gbState_Bar )
        MessageText(GetString("items","Item"+itoa(GetUnitVid(unit))),-1,-1);
      CreateSprite(290,GetX(Flagman(0)),GetY(Flagman(0)),GetZ(Flagman(0))+DRON_FLY_HEIGHT,GetDirection(Flagman(0)));
      Action(unit,ANI_DEATH2);
      if( gbState_Bar )
        MenuAction(731,999999,ACT_SET_ARMY,0);
    }
}


//------------------------------------------------------------------------------------------
// Подбор игроком экспы
ExpBonusTact(int unit, int iExp)
{
	if(SizeTo( Flagman(0), GetX(unit), GetY(unit) ) < 60)
	{
		IncreaseExpa(iExp);
		//
		if(gbState_Bar)
			MessageText(GetString("items","Item"+itoa(GetUnitVid(unit))),-1,-1);
		Action(unit,ANI_DEATH2,0,0);
	}
}


//------------------------------------------------------------------------------------------
F1845_0(int unit) { ExpBonusTact(unit, EXP_BONUS_SMALL); }
F1846_0(int unit) { ExpBonusTact(unit, EXP_BONUS_MEDIUM); }
F1847_0(int unit) { ExpBonusTact(unit, EXP_BONUS_BIG); }

