using System;
using System.Windows.Forms;
using GTA;
//animation flag 09 changes animation from backwars sex to standing up bj
public class StalkerMod : Script
{
Ped malePed = null; //male
Ped femalePed = null; //female
//AnimationStuff
AnimationSet anims = new AnimationSet("amb@service_idles_a");
AnimationSet anims1 = new AnimationSet("amb@payphone");
AnimationSet anims2 = new AnimationSet("misscar_sex");
AnimationFlags animflags = AnimationFlags.Unknown11 | AnimationFlags.Unknown01 | AnimationFlags.Unknown09;
AnimationFlags animflags1 = AnimationFlags.Unknown12 | AnimationFlags.Unknown11 | AnimationFlags.Unknown09;
Blip maleBlip;
Blip femaleBlip;
int RandomNum(int min, int max)
{
return new Random().Next(min, max + 1);
}
Blip CreateBlip(Ped target, BlipIcon icon, string name)
{
Blip blip = target.AttachBlip();
blip.Icon = icon;
blip.Name = name;
return blip;
}
public StalkerMod()
{
this.Tick += new EventHandler(this.Stalk_Tick);
}
private void Stalk_Tick(object sender, EventArgs e)
{
if (!Game.Exists(malePed) || !Game.Exists(femalePed) && RandomNum(1, 100) <= 30)
{
foreach (Ped ped in World.GetPeds(Player.Character.Position, 20.0f))
{
if (ped == Player.Character || ped.isSittingInVehicle() || !ped.isAliveAndWell)
{
continue;
}
if (ped.Gender == Gender.Male && !Game.Exists(malePed))
{
malePed = ped; SetupPed(malePed);
maleBlip = CreateBlip(malePed, BlipIcon.Person_Male, "Stalker");
continue;
} //save a male to PED then move on to next ped in array
if (ped.Gender == Gender.Female && !Game.Exists(femalePed))
{
femalePed = ped; SetupPed(femalePed);
femaleBlip = CreateBlip(femalePed, BlipIcon.Person_Female, "Victim");
continue;
} //save a female to PED1 then move on to next ped in array
if (Game.Exists(malePed) && Game.Exists(femalePed))
{
break;
} // once u got both peds exit this loop
}
}
if (Game.Exists(malePed) && Game.Exists(femalePed))
{
if (femalePed.Position.DistanceTo(malePed.Position) > .8f && femalePed.isAlive)
{
DeleteBlipSafely(femaleBlip);
malePed.Task.RunTo(femalePed.Position);
Wait(10000);
}
else
{
if (Game.Exists(malePed) && Game.Exists(femalePed) && femalePed.Position.DistanceTo(malePed.Position) < .8f && femalePed.isAlive)
{
GTA.Native.Function.Call("ON_FIRE_SCREAM", femalePed);
malePed.CanSwitchWeapons = true;
malePed.Weapons.Knife.Ammo = 1;
malePed.Task.SwapWeapon(Weapon.Melee_Knife);
malePed.Weapons.Knife.Select();
// Game.DisplayText("STALKER!");
DeleteBlipSafely(femaleBlip);
femalePed.Money = 400;
malePed.Task.TurnTo(femalePed);
Wait(1000);
femalePed.Task.TurnTo(malePed);
Wait(1000);
femalePed.Task.GoTo(malePed);
Wait(1000);
femalePed.Task.HandsUp(1500);
femalePed.Task.PlayAnimation(new AnimationSet("amb@payphone"), "duck_cower", 5.0f, animflags1);
malePed.Task.TurnTo(femalePed);
Rape();
Wait(1000);
malePed.Task.StandStill(1500);
GTA.Native.Function.Call("UNLOCK_RAGDOLL", femalePed, 0);
GTA.Native.Function.Call("ON_FIRE_SCREAM", femalePed);
counter_right_3();
Wait(50); //Wait(5000);
counter_right_3();
GTA.Native.Function.Call("EXPLODE_CHAR_HEAD", femalePed);
femalePed.Task.Die();
malePed.Task.TurnTo(femalePed);
Wait(1000);
malePed.Task.GoTo(femalePed);
Wait(5000);
malePed.Task.ClearAll();
Wait(1000);
malePed.Task.ClearAll();
malePed.Task.WanderAround();
Wait(20000);
if (Game.Exists(femalePed))
{
femalePed.Delete();
}
}
}
}
else
{
if (Game.Exists(malePed))
{
malePed.NoLongerNeeded();
malePed = null;
}
if (Game.Exists(femalePed) && Game.Exists(femalePed))
{
femalePed.NoLongerNeeded();
femalePed = null;
}
}
}
private static void DeleteBlipSafely(Blip blip)
{
if (Game.Exists(blip))
{
blip.Delete();
}
}
private void Rape()
{
GTA.Native.Function.Call("ON_FIRE_SCREAM", femalePed);
malePed.Task.GoTo(femalePed);
Wait(1000);
malePed.Task.TurnTo(femalePed);
Wait(1000);
femalePed.Task.TurnTo(malePed);
Wait(1000);
femalePed.GetOffsetPosition(new Vector3(0.5f, 1.2f, 0.0f));
GTA.Native.Function.Call("WARP_CHAR_FROM_CAR_TO_COORD", femalePed, femalePed.Position.X, femalePed.Position.Y, femalePed.Position.Z - 1.30f);
femalePed.GetOffsetPosition(new Vector3(0.5f, 1.2f, 0.0f));
femalePed.FreezePosition = true;
Wait(0);
femalePed.Task.PlayAnimation(new AnimationSet("misscar_sex"), "f_sex_loop", 5.0f, animflags);
malePed.Task.ClearAll();
malePed.Task.PlayAnimation(new AnimationSet("missjacob2"), "piss_loop", 5.0f, animflags);
Wait(50);
if (GTA.Native.Function.Call<bool>("IS_CHAR_PLAYING_ANIM", femalePed, "misscar_sex", "f_sex_loop"))
{
femalePed.Task.TurnTo(malePed);
Wait(50);
malePed.Task.GoTo(femalePed);
GTA.Native.Function.Call("SET_CHAR_COLLISION", femalePed, 0);
malePed.GetOffsetPosition(new Vector3(-.5f, -2.0f, 0.0f));
femalePed.Task.TurnTo(malePed);
Wait(10000);
femalePed.Task.TurnTo(malePed);
}
GTA.Native.Function.Call("SET_CHAR_COLLISION", femalePed, 1);
Wait(1000);
femalePed.FreezePosition = false;
}
private void counter_right_3()
{
GTA.Native.Function.Call("TASK_PLAY_ANIM", malePed, "counter_right_3", "melee_counters", 4.0f, 0, 1, 1, 0, 900);
GTA.Native.Function.Call("UNLOCK_RAGDOLL", femalePed, 1);
GTA.Native.Function.Call("SET_CHAR_ANIM_CURRENT_TIME", malePed, "melee_counters", "counter_right_3", 0.22f);
GTA.Native.Function.Call("SWITCH_PED_TO_RAGDOLL_WITH_FALL", femalePed, 2200, 5000, 1);
Wait(300);
}
private static void SetupPed(Ped ped)
{
if (ped.Gender == Gender.Male)
{
ped.RelationshipGroup = RelationshipGroup.Civillian_Male;
}
else
{
ped.RelationshipGroup = RelationshipGroup.Civillian_Female;
}
ped.BecomeMissionCharacter();
ped.BlockPermanentEvents = true;
ped.Task.AlwaysKeepTask = true;
}
}
////////////////////////////////////
//you could set all their head components to invisible, have blood spurting out of their neck and make them die
//public static class PedExtensions
//{
//public static void Decapitate(this Ped ped)
//{
// Make head invisible.
// Create blood spurt particle effects.
// ped.Die();
// }
//}
//then (for instance) you could do Game.LocalPlayer.Character.Decapitate();
//////////////