Example #1
0
 protected override void Start()
 {
     //Request texture dictionaries here
     //Then draw sprite , using OPENIV to see texture names
     //Hash.DRAW_SPRITE
     Function.Call(Hash.REQUEST_STREAMED_TEXTURE_DICT, "srange_weap", true);
     Function.Call(Hash.REQUEST_STREAMED_TEXTURE_DICT, "srange_weap", true);
     Function.Call(Hash.REQUEST_STREAMED_TEXTURE_DICT, "srange_weap", true);
     Function.Call(Hash.REQUEST_STREAMED_TEXTURE_DICT, "srange_weap", true);
     NpcDatas.AddRange(NpcRepository.Npcs);
     Init();
 }
Example #2
0
        public override void Update()
        {
            WorldData = RPG.WorldData;

            Ped player = Game.Player.Character;


            if (RPG.ExplosiveHits)
            {
                Function.Call(Hash.SET_EXPLOSIVE_AMMO_THIS_FRAME, Game.Player.Handle);
                Function.Call(Hash.SET_EXPLOSIVE_MELEE_THIS_FRAME, Game.Player.Handle);
            }

            if (RPG.SuperJump)
            {
                Function.Call(Hash.SET_SUPER_JUMP_THIS_FRAME, Game.Player.Handle);
            }

            if (!InitiateNpcs)
            {
                NpcDatas.AddRange(NpcRepository.Npcs);

                foreach (var npc in NpcDatas)
                {
                    npc.Spawned = false;

                    var blip = World.CreateBlip(npc.Position);
                    blip.Sprite = npc.BlipSprite;
                    WorldData.Blips.Add(new BlipObject("Blip_" + npc.Name, blip));
                }
                InitiateNpcs = true;
            }

            if (!PlayerData.Tutorial.BoughtAmmoFromShop && PlayerData.Tutorial.PressJToOpenMenu)
            {
                var tut  = RPG.GetPopup <TutorialBox>();
                var ammo = PlayerData.Inventory.FirstOrDefault(i => i.Name.Contains("Ammo"));
                if (ammo != null)
                {
                    PlayerData.Tutorial.BoughtAmmoFromShop = true;
                    EventHandler.Do(o =>
                    {
                        tut.Hide();
                        Wait(300);
                        if (!RPG.PlayerData.Tutorial.GetAKill)
                        {
                            tut.Pop("Getting kills, completing missions are just two ways to earn XP and Skill Points", "Get a kill.");
                        }
                    });
                }
            }
            if (!PlayerData.Tutorial.LearntAboutCrafting && PlayerData.Tutorial.LearntAboutIcons)
            {
                var tut       = RPG.GetPopup <TutorialBox>();
                var repairKit = PlayerData.Inventory.FirstOrDefault(i => i.Name.Contains("Vehicle Repair Kit"));
                if (repairKit != null)
                {
                    PlayerData.Tutorial.LearntAboutCrafting = true;
                    EventHandler.Do(o =>
                    {
                        PlayerData.AddItem("Health Kit", 5);
                        tut.Hide();
                        Wait(300);
                        tut.Pop("You can use items directly from the inventory or bind them to your skillbar.", "Access the menu > Character Menu > Set SkillBar and bind 'Health Kit' to T");
                    });
                }
            }
            if (!PlayerData.Tutorial.LearntAboutSkillbar && PlayerData.Tutorial.LearntAboutCrafting)
            {
                var tut          = RPG.GetPopup <TutorialBox>();
                var healthKitInT = !PlayerData.SkillSlots[0].IsEmpty && PlayerData.SkillSlots[0].IsItem && PlayerData.SkillSlots[0].ItemName == "Health Kit";
                if (healthKitInT)
                {
                    PlayerData.Tutorial.LearntAboutSkillbar = true;
                    EventHandler.Do(o =>
                    {
                        tut.Hide();
                    });
                }
            }

            CheckNpcs();

            foreach (var l in RPG.WorldData.Loot)
            {
                if (l.Prop != null && l.Prop.Exists() && l.Item != null)
                {
                    if (RPGSettings.ShowUI)
                    {
                        var dist = l.Prop.Position.DistanceTo(Game.Player.Character.Position);
                        if (dist < 60)
                        {
                            OutputArgument xArg       = new OutputArgument();
                            OutputArgument yArg       = new OutputArgument();
                            var            pos        = l.Prop.Position;
                            var            dimensions = l.Prop.Model.GetDimensions();
                            pos.Y -= dimensions.Y / 2;
                            pos.Z += 0.4f;
                            Function.Call(Hash._WORLD3D_TO_SCREEN2D, pos.X, pos.Y, pos.Z, xArg, yArg);
                            var x = xArg.GetResult <float>();
                            var y = yArg.GetResult <float>();

                            var itemName = l.Item.Type == ItemType.Money
                                ? "gta$" + l.Item.MoneyValue
                                : l.Item.Quantity + "x " + l.Item.Name;

                            new UIRectangle(new Point((int)(UI.WIDTH * x) - 50, (int)(UI.HEIGHT * y) + 12), new Size(100, 2), l.Item.GetRarityColor()).Draw();
                            new UIText(itemName, new Point((int)(UI.WIDTH * x), (int)(UI.HEIGHT * y)), 0.21f, Color.White, 0, true).Draw();
                        }
                    }

                    l.Prop.ApplyForce(new Vector3(0, 0, -0.1f));
                }
            }

            var nearbyForVecs = RPGInfo.NearbyVehicles;

            foreach (var vec in nearbyForVecs.Where(v => v.EngineHealth <= 0))
            {
                if (RPG.PlayerData.CurrentVehicle != null && vec.Handle == RPG.PlayerData.CurrentVehicle.Handle)
                {
                    continue;
                }

                if (!KilledVecs.Contains(vec.Handle))
                {
                    KilledVecs.Add(vec.Handle);


                    var rng = Random.Range(0, 100 + 1);
                    if (rng < 70)
                    {
                        var m = new Model(GM.GetHashKey("prop_box_guncase_03a"));
                        m.Request(1000);
                        var p = World.CreateProp(m, vec.Position + new Vector3(0, 0, 1.0f) + Vector3.RandomXY(), vec.Rotation, true, false);
                        p.ApplyForce(new Vector3(0, 0, -0.05f));
                        RPG.WorldData.AddLoot(new LootItem(ItemRepository.Get("Vehicle Parts"), p));
                    }
                    else if (rng < 80)
                    {
                        var m = new Model(GM.GetHashKey("prop_box_guncase_03a"));
                        m.Request(1000);
                        var p = World.CreateProp(m, vec.Position + new Vector3(0, 0, 1.0f) + Vector3.RandomXY(), vec.Rotation, true, false);
                        p.ApplyForce(new Vector3(0, 0, -0.05f));
                        RPG.WorldData.AddLoot(new LootItem(ItemRepository.Get("Vehicle Repair Kit"), p));
                    }


                    if (!vec.HasBeenDamagedBy(Game.Player.Character))
                    {
                        continue;
                    }

                    if (vec.Model.IsHelicopter)
                    {
                        RPG.Notify(Notification.Kill("destroyed helicopter: +100 Exp"));
                        PlayerData.AddExp(100);
                    }
                    else if (vec.Model.IsPlane)
                    {
                        RPG.Notify(Notification.Kill("destroyed aircraft: +150 Exp"));
                        PlayerData.AddExp(150);
                    }
                    else if (vec.Model.IsBoat)
                    {
                        RPG.Notify(Notification.Kill("Destroyed Boat: +200 Exp"));
                        PlayerData.AddExp(200);
                    }
                    else if (vec.Model.IsBike)
                    {
                        RPG.Notify(Notification.Kill("Destroyed Bike: +20 Exp"));
                        PlayerData.AddExp(20);
                    }
                    else if (vec.Model.IsTrain)
                    {
                        RPG.Notify(Notification.Kill("Destroyed Train: +500 Exp"));
                        PlayerData.AddExp(500);
                    }
                    else
                    {
                        RPG.Notify(Notification.Kill("Destroyed Vehicle: +15 Exp"));
                        PlayerData.AddExp(15);
                    }

                    CheckIfForQuest(vec, vec.Model.Hash, false);
                }
            }

            var nearbyForKills = RPGInfo.NearbyPeds;

            //var nearbyForKills = World.GetAllPeds();
            foreach (var ped in nearbyForKills.Where(p => !p.IsAlive))
            {
                if (ped.CurrentBlip != null)
                {
                    ped.CurrentBlip.Remove();
                }

                var n = RPG.WorldData.Npcs.FirstOrDefault(x => x.Ped != null && x.Ped.Handle == ped.Handle);
                if (n != null)
                {
                    RPG.WorldData.Npcs.Remove(n);
                }

                if (!KilledPeds.Contains(ped.Handle))
                {
                    KilledPeds.Add(ped.Handle);
                    //Check if kill needed for quest
                    var pedData = NpcDatas.FirstOrDefault(npc => npc.Ped != null && npc.Ped.Handle == ped.Handle);
                    if (pedData != null)
                    {
                        pedData.Destroy();
                    }
                    CheckIfForQuest(ped, ped.Model.Hash, true);
                    //If player didn't damage, continue
                    if (!ped.HasBeenDamagedBy(Game.Player.Character))
                    {
                        continue;
                    }


                    if (!PlayerData.Tutorial.GetAKill && PlayerData.Tutorial.PressJToOpenMenu && PlayerData.Tutorial.BoughtAmmoFromShop)
                    {
                        var tut = RPG.GetPopup <TutorialBox>();
                        PlayerData.Tutorial.GetAKill = true;
                        PlayerData.SkillExp         += 100;
                        EventHandler.Do(o =>
                        {
                            tut.Hide();
                            Wait(300);
                            if (!RPG.PlayerData.Tutorial.UnlockSkillWithSp)
                            {
                                tut.Pop("Hope you haven't attracted the cops. If so lose them. Time to unlock some skills.", "Access the menu > Character Menu > Skills. Unlock your first skill.");
                            }
                        });
                    }

                    RPG.Notify(Notification.Kill("target eliminated: +5 Exp"));

                    //Basic loot rng
                    var rng = Random.Range(0, 100 + 1);

                    if (rng < 70)
                    {
                        var m = new Model(GM.GetHashKey("prop_cash_pile_01"));
                        m.Request(1000);
                        var p = World.CreateProp(m, ped.Position + new Vector3(0, 0, 2.2F) + Vector3.RandomXYZ(), ped.Rotation, true, false);
                        p.ApplyForce(new Vector3(0, 0, 0.05f));
                        RPG.WorldData.AddLoot(new LootItem(ItemRepository.Cash(Random.Range(20, 80)), p));
                    }

                    if (rng < 30)
                    {
                        var items2 = new[] { "Bandages", "Basic Scraps", "Simple Protective Gear", "Ammo Pack I" };

                        var m2 = new Model(GM.GetHashKey("prop_money_bag_01"));
                        m2.Request(1000);
                        var p2 = World.CreateProp(m2, ped.Position + new Vector3(0, 0.5f, 2.2F) + Vector3.RandomXY(), ped.Rotation, true, false);
                        p2.ApplyForce(new Vector3(0, 0, 0.05f));
                        RPG.WorldData.AddLoot(new LootItem(ItemRepository.Get(items2[Random.Range(0, items2.Length)]), p2));
                    }
                    else if (rng < 40)
                    {
                        var items2 = new[] { "Health Kit", "Refurbished Kevlar", "Ammo Pack II" };

                        var m2 = new Model(GM.GetHashKey("prop_money_bag_01"));
                        m2.Request(1000);
                        var p2 = World.CreateProp(m2, ped.Position + new Vector3(0.5f, 0, 2.2F) + Vector3.RandomXY(), ped.Rotation, true, false);
                        p2.ApplyForce(new Vector3(0, 0, 0.05f));
                        RPG.WorldData.AddLoot(new LootItem(ItemRepository.Get(items2[Random.Range(0, items2.Length)]), p2));
                    }

                    PlayerData.AddExp(5);
                }
            }

            var activeQuests = PlayerData.Quests.Where(q => q.InProgress).ToList();

            for (int i = 0; i < activeQuests.Count; i++)
            {
                activeQuests[i].CheckState();
            }


            QuestUpdates();
        }