First off, a big thanks to rappo for making this possible! 
The main difference to the current version is that I have included two randomly alternating animations and insults.
Enjoy:
using GTA;
using GTA.Native;
using System;
using System.Windows.Forms;
namespace GTA5M
{
public class TheBird : Script
{
Keys activationKey;
bool flippingOff = false;
Ped fightingPed;
Blip fightingPedBlip;
Ped fleeingPed;
public TheBird()
{
ScriptSettings localSettings = ScriptSettings.Load(".\\scripts\\TheBird.ini");
Keys activationKeySetting;
string activationKeyStr = localSettings.GetValue("Preferences", "ActivationKey", "J");
if (Enum.TryParse(activationKeyStr, out activationKeySetting))
{
activationKey = activationKeySetting;
}
else
{
activationKey = Keys.J;
}
KeyDown += OnKeyDown;
KeyUp += OnKeyUp;
Tick += OnTick;
Interval = 100;
}
void OnKeyDown(object o, KeyEventArgs e)
{
// User is pressing the activation key
if (e.KeyCode == activationKey)
{
// If not currently fighting a ped and the player is alive and available
if (fightingPed == null && !flippingOff && Game.Player.IsAlive && Game.Player.CanStartMission && Game.Player.Character.Weapons.Current.Hash == WeaponHash.Unarmed)
{
flippingOff = true;
// Play middle finger animation
// Use a random number generator to alternate animations and speech
Random randomNumberGenerated = new Random();
int randomNumber = randomNumberGenerated.Next(3);
if (randomNumber == 2)
{
Function.Call(Hash._PLAY_AMBIENT_SPEECH1, Game.Player.Character, "GENERIC_INSULT_HIGH", "SPEECH_PARAMS_FORCE", 0);
Game.Player.Character.Task.PlayAnimation("mp_player_int_upperfinger", "mp_player_int_finger_02", 2, 750, true, 1);
Wait(750);
Game.Player.Character.Task.PlayAnimation("mp_player_int_upperfinger", "mp_player_int_finger_02_exit", 2, 750, true, 1);
}
else if (randomNumber == 1)
{
Function.Call(Hash._PLAY_AMBIENT_SPEECH1, Game.Player.Character, "GENERIC_INSULT_MED", "SPEECH_PARAMS_FORCE", 0);
Game.Player.Character.Task.PlayAnimation("anim@mp_player_intselfiethe_bird", "enter", 2, 766, true, 1);
Wait(766);
Game.Player.Character.Task.PlayAnimation("anim@mp_player_intselfiethe_bird", "idle_a", 2, 1500, true, 1);
Wait(1500);
}
// Is player aiming at ped
Entity aimedEntity = Game.Player.GetTargetedEntity();
if (aimedEntity.IsPed())
{
// Give them some time to react...
Wait(250);
Ped aimedPed = (Ped)aimedEntity;
// If you're flipping off a cop...
if (aimedPed.Type() == PedType.Cop || aimedPed.Type() == PedType.SWAT || aimedPed.Type() == PedType.Army)
{
// Set wanted level to 1 star if you didn't have any already
if (Game.Player.WantedLevel == 0)
{
Game.Player.WantedLevel = 1;
}
}
else if (!aimedPed.IsFleeing)
{
// Prep the ped
bool pedWillFight = false;
aimedPed.Task.ClearAllImmediately();
aimedPed.AlwaysKeepTask = true;
// Use a random number generator to decide what to do
Random randomNumberGenerated0 = new Random();
// If you're flipping off a man...
if (aimedPed.Gender == Gender.Male)
{
int randomNumber0 = randomNumberGenerated.Next(4);
// Give him a golf club
if (randomNumber0 == 2)
{
aimedPed.Weapons.Give(WeaponHash.GolfClub, 1, true, true);
}
// Give him a switchblade
else if (randomNumber0 == 1)
{
aimedPed.Weapons.Give(WeaponHash.SwitchBlade, 30, true, true);
}
// Give him a bat
else if (randomNumber0 == 0)
{
aimedPed.Weapons.Give(WeaponHash.Bat, 1, true, true);
}
pedWillFight = true;
}
// If you're flipping off a woman...
else
{
int randomNumber0 = randomNumberGenerated0.Next(2);
// Make her fight
pedWillFight = (randomNumber0 == 2);
}
// Set the ped to fight you
if (pedWillFight)
{
fightingPed = aimedPed;
fightingPed.IsPersistent = true;
fightingPed.Task.FightAgainst(Game.Player.Character);
Function.Call(Hash._PLAY_AMBIENT_SPEECH1, fightingPed, "GENERIC_INSULT_MED", "SPEECH_PARAMS_FORCE", 0);
// Add a blip for the ped to the map
fightingPedBlip = fightingPed.AddBlip();
}
// Set the ped to flee from you
else
{
fleeingPed = aimedPed;
fleeingPed.IsPersistent = true;
fleeingPed.Task.FleeFrom(Game.Player.Character);
Function.Call(Hash._PLAY_AMBIENT_SPEECH1, aimedPed, "GENERIC_SHOCKED_HIGH", "SPEECH_PARAMS_FORCE", 0);
}
}
}
}
}
}
private void OnKeyUp(object o, KeyEventArgs e)
{
// User released the activation key
if (e.KeyCode == activationKey)
{
flippingOff = false;
}
}
private void OnTick(object o, EventArgs e)
{
// If a fighting ped is dead or you moved to far away from them
if (fightingPed != null && (!Game.Player.IsAlive || !Game.Player.CanStartMission || !fightingPed.IsAlive || !fightingPed.IsNearEntity(Game.Player.Character, new GTA.Math.Vector3(100, 100, 100))))
{
// Destroy ped
fightingPed.Destroy();
fightingPed = null;
// Destroy blip
if (fightingPedBlip != null)
{
fightingPedBlip.Remove();
fightingPedBlip = null;
}
}
// If a fleeing ped is dead or you moved to far away from them
if (fleeingPed != null && (!Game.Player.IsAlive || !Game.Player.CanStartMission || !fleeingPed.IsAlive || !fleeingPed.IsNearEntity(Game.Player.Character, new GTA.Math.Vector3(100, 100, 100)))) {
// Destroy ped
fleeingPed.Destroy();
fleeingPed = null;
}
}
}
}