예제 #1
0
        private void Interact()
        {
            RPG.UIHandler.CloseAll();
            Popup.CloseLastPopup();
            var nearbyLoot = PlayerMethods.GetNearbyLoot(2.5f).FirstOrDefault();

            if (nearbyLoot != null)
            {
                RPGMethods.Loot(nearbyLoot);
            }

            var nearestPed = RPGInfo.NearestPed;

            if (nearestPed != null && !Game.Player.Character.IsInCombat)
            {
                var npcObject = RPG.WorldData.Npcs.FirstOrDefault(n => n.IsQuestNpc && n.EntityHandle == nearestPed.Handle);
                if (npcObject != null)
                {
                    if (npcObject.Name == "Matthew" && RPG.PlayerData.Tutorial.PressJToOpenMenu && RPG.PlayerData.Tutorial.BoughtAmmoFromShop && RPG.PlayerData.Tutorial.GetAKill && RPG.PlayerData.Tutorial.UnlockSkillWithSp && RPG.PlayerData.Tutorial.UsingSkills && RPG.PlayerData.Tutorial.SpawnVehicle)
                    {
                        var tut = RPG.GetPopup <TutorialBox>();
                        RPG.PlayerData.Tutorial.TutorialDoneExceptSpeak = true;
                        RPG.PlayerData.Tutorial.SpokeToNpc = true;
                        EventHandler.Do(o =>
                        {
                            tut.Hide();
                        });
                    }

                    RPG.UIHandler.StartDialog(npcObject);
                }
            }
        }
예제 #2
0
        public UIHandler()
        {
            RPG.UIHandler = this;
            KeyDown      += OnKeyDown;
            //Use some fancy transitions
            View.MenuTransitions = true;
            View.PopMenu();
            View.MenuOffset   = new Point(-302, 0);
            View.MenuPosition = new Point(UI.WIDTH - 300, 0);

            CharacterMenu = new RPGMenu("Character Menu", new GTASprite("CommonMenu", "interaction_bgd", Color.ForestGreen), new IMenuItem[] {
                new MenuButton("Quests", "").WithActivate(OpenQuestLog),
                new MenuButton("Set Skillbar", "").WithActivate(OpenSkillBarMenu),
                new MenuButton("Skills", "").WithActivate(OpenSkillsMenu),
                new MenuButton("Weapons", "").WithActivate(OpenWeaponsMenu),
                //new MenuButton("Talents", "", () => { View.PopMenu(); }),
                //new MenuButton("Mod Weapons", "", () => { View.PopMenu(); }),
                //new MenuButton("Mod Cars", "", () => { View.PopMenu();}),
                new MenuButton("Back", "").WithActivate(() => View.PopMenu())
            });

            ActionsMenu = new RPGMenu("ACTIONS", new GTASprite("CommonMenu", "interaction_bgd", Color.Red), new IMenuItem[] {
                new MenuButton("Spawn Personal Vehicle", "").WithActivate(() => RPGMethods.SpawnCar()),
                new MenuButton("Get Random Contract", "").WithActivate(GetRandomContract),
                new MenuButton("Purchase Goods", "").WithActivate(OpenShop),
                new MenuButton("Craft Items", "").WithActivate(OpenCrafting),
                new MenuButton("Back", "").WithActivate(View.PopMenu)
            });

            SkillTreeMenu  = RPG.SkillHandler.GetSkillMenu();
            WeaponTreeMenu = RPG.WeaponHandler.GetWeaponMenu();

            //var o = new MenuNumericScroller("Number", "", d => { }, d => { }, 0, 100, 1);
            //var p = new MenuToggle("Toggle", "", ()=> { }, () => { });

            MainMenu = new RPGMenu("RPG Menu", new GTASprite("CommonMenu", "interaction_bgd", Color.DodgerBlue), new IMenuItem[] {
                new MenuButton("Inventory", "").WithActivate(OpenInventory),
                new MenuButton("Character Menu", "").WithActivate(OpenCharacterMenu),
                new MenuButton("Actions ", "").WithActivate(() => View.AddMenu(ActionsMenu)),
                new MenuButton("Options", "").WithActivate(() => OpenOptionsMenu()),
                new MenuButton("Play as Michael, Franklin and Trevor ", "").WithActivate(ConfirmPlayAsTrio),
                new MenuButton("Play as Yourself", "").WithActivate(ConfirmPlayAsYourCharacter),
                new MenuButton("Return to Normal Mode ", "").WithActivate(ConfirmReturnToNormal),
                new MenuButton("Close", "").WithActivate(View.PopMenu)
            });



            RPGUI.FormatMenu(ActionsMenu);
            RPGUI.FormatMenu(MainMenu);
            RPGUI.FormatMenu(CharacterMenu);
        }
예제 #3
0
파일: RPG.cs 프로젝트: tuita520/GTARPG
        public static void InitCharacter()
        {
            LoadTutorial();
            RPG.GameMode = GameMode.FullRPG;

            //Settings
            RPGLog.Log("Setting model:");
            Model m = PlayerData.ModelHash;

            RPGLog.Log("Setting model to: " + m.Hash);
            m.Request(5000);
            if (m.IsValid && m.IsLoaded)
            {
                Function.Call(Hash.SET_PLAYER_MODEL, Game.Player.Handle, m.Hash);
                Script.Wait(500);
            }

            //remember we can control max health/ /useful for skills later on
            RPGLog.Log("Setting player HP");
            Game.Player.Character.MaxHealth = 100;
            Game.Player.Character.Health    = 100;

            RPGLog.Log("Init Cooldowns");
            var cooldowns = RPG.PlayerData.Inventory.Where(i => i.Usable).Select(i => i.CoolDownTimer)
                            .Concat(RPG.PlayerData.Skills.Where(s => s.Unlocked).Select(s => s.CoolDownTimer));

            foreach (var cooldown in cooldowns)
            {
                cooldown.Current = cooldown.CoolDownMsTime;
            }
            RPGLog.Log("Loading Variations");

            RPGMethods.LoadVariations();
            RPGMethods.LoadVariations();
            RPGMethods.LoadVariations();
            RPGMethods.LoadVariations();
            RPGMethods.LoadVariations();


            //Reload
            RPGLog.Log("Reload quests if needed");
            foreach (var q in PlayerData.Quests.Where(q => q.InProgress))
            {
                q.OnReload();
            }

            RPGLog.Log("Loading Weapons");
            if (m.IsValid && m.IsLoaded && Game.Player.Character != null && Game.Player.Character.Exists())
            {
                RPGMethods.LoadPlayerWeapons();
            }
        }
예제 #4
0
        private void QuestUpdates()
        {
            var questsInProgress = PlayerData.Quests.Where(q => q.InProgress).ToList();
            var qNum             = 1;

            foreach (var q in questsInProgress.Where(qu => qu.SpawnTargets && qu.HasSpawnedTargets))
            {
                foreach (var b in q.BlipObjects)
                {
                    if (qNum < 10)
                    {
                        b.Blip.ShowNumber(qNum);
                    }
                }

                var conditionsToFix = q.Conditions.Where(c =>
                                                         !c.Done &&
                                                         (c.Type == ConditionType.Kill || c.Type == ConditionType.Loot) &&
                                                         c.Parameters.ContainsKey("ModelHash"));

                foreach (var c in conditionsToFix)
                {
                    var quest = q;

                    var npcs = WorldData.Npcs.Where(n => n.Name == "Quest_" + quest.Name).ToList();

                    for (int i = 0; i < npcs.Count; i++)
                    {
                        var n = npcs[i];
                        if (n.Ped.Exists() && !n.Ped.IsAlive)
                        {
                            n.Destroy();
                        }
                    }

                    //If no npcs found, or npcs are too high
                    if (WorldData.Npcs.All(n => n.Name != "Quest_" + quest.Name) || WorldData.Npcs.Where(n => n.Name == "Quest_" + quest.Name).All(n => !n.Ped.IsAlive) ||
                        WorldData.Npcs.Where(n => n.Name == "Quest_" + quest.Name).All(w => w.Ped.Exists() && w.Ped.Position.Z > Game.Player.Character.Position.Z + 45) ||
                        WorldData.Npcs.Where(n => n.Name == "Quest_" + quest.Name).All(w => w.Ped.Exists() && w.Ped.Position.Z < Game.Player.Character.Position.Z - 45))
                    {
                        q.HasSpawnedTargets = false;
                        c.Position          = RPGMethods.GetSpawnPoint(200);

                        q.ClearObjectsAndBlips();
                        q.SetupCondition(c, false);
                        RPGLog.Log("Spawning more peds for quest : " + quest.Name);
                    }
                }

                qNum++;
            }
        }
예제 #5
0
        public void Use(Keys skillKey)
        {
            if (RPG.UIHandler.CurrentDialog != null)
            {
                return;
            }

            var slot = Slots.First(s => s.Key == skillKey);

            if (slot.ItemName != null)
            {
                RPGMethods.UseItem(slot.ItemName);
            }
            else if (slot.SkillName != null)
            {
                RPGMethods.UseSkill(slot.SkillName);
            }
        }
예제 #6
0
        private void SpawnCar()
        {
            if (RPG.UIHandler.CurrentDialog != null)
            {
                return;
            }

            if (!RPG.PlayerData.Tutorial.SpawnVehicle && RPG.PlayerData.Tutorial.PressJToOpenMenu && RPG.PlayerData.Tutorial.BoughtAmmoFromShop && RPG.PlayerData.Tutorial.GetAKill && RPG.PlayerData.Tutorial.UnlockSkillWithSp && RPG.PlayerData.Tutorial.UsingSkills)
            {
                var tut = RPG.GetPopup <TutorialBox>();
                RPG.PlayerData.Tutorial.SpawnVehicle            = true;
                RPG.PlayerData.Tutorial.TutorialDoneExceptSpeak = true;
                EventHandler.Do(o =>
                {
                    tut.Hide();
                    EventHandler.Wait(300);
                    tut.Pop("Quest hand in locations are marked by the white star blip on the map.", "Drive to Matthew (Star) and press E to speak with him and finish your quest.");
                });
            }
            RPGMethods.SpawnCar();
        }
예제 #7
0
파일: RPG.cs 프로젝트: tuita520/GTARPG
        public static void LoadAllData(out bool NeedToCreateCharacter)
        {
            RPGMethods.CleanupObjects();
            NeedToCreateCharacter = false;
            var newDir         = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            var dir            = Path.Combine(newDir, @"Rockstar Games\GTA V\RPGMod\");
            var playerDataFile = "PlayerData.save";

            var playerDataPath = Path.Combine(dir, playerDataFile);

            if (File.Exists(playerDataPath))
            {
                try
                {
                    var loadedData = File.ReadAllText(playerDataPath);
                    PlayerData = JsonConvert.DeserializeObject <PlayerData>(loadedData, GM.GetSerialisationSettings());
                    var dataVersion = PlayerData.Version;
                    if (dataVersion != RPG.Version)
                    {
                        VersionMigration.Migrate(dataVersion, RPG.Version);
                    }

                    InitCharacter();
                }
                catch (Exception e)
                {
                    LoadedSuccessfully = false;
                    RPGLog.Log(e.ToString());
                    RPGLog.Log("Error Loading or Initialising Player data.");
                }
            }
            else
            {
                NeedToCreateCharacter = true;
            }



            ApplySettings();
        }
예제 #8
0
        private void UseInventoryItem(RPGListMenu obj)
        {
            var selected = obj.SelectedIndex;

            if (selected >= PlayerData.Inventory.Count)
            {
                View.PopMenu();
                return;
            }

            if (!PlayerData.Inventory.Any())
            {
                return;
            }


            var selectedItem = PlayerData.Inventory[selected];

            var used = RPGMethods.UseItem(selectedItem);

            if (selectedItem.Quantity <= 0)
            {
                selected--;
                if (selected < 0)
                {
                    selected = 0;
                }
            }

            UpdateInventory(selected);
            InventoryMenu.SelectedIndex = selected;
            if (used)
            {
                RPG.Notify(Notification.Alert("Used : " + selectedItem.Name));
            }
        }
예제 #9
0
        public void UpdateX()
        {
            if (Function.Call <bool>(Hash.IS_CUTSCENE_ACTIVE))
            {
                return;
            }

            Ped player = Game.Player.Character;

            Vehicle vehicle = player.CurrentVehicle;

            //Loot Interact
            var nearbyLoot  = RPGInfo.NearbyLoot;
            var showingLoot = false;

            if (nearbyLoot != null)
            {
                if (nearbyLoot.Item.Type == ItemType.Money || nearbyLoot.Item.Type == ItemType.QuestItem)
                {
                    RPGMethods.Loot(nearbyLoot);
                }
                else if (RPGSettings.ShowUI)
                {
                    var interactUI = new UIContainer(new Point(UI.WIDTH / 2 - 120, UI.HEIGHT - 100), new Size(240, 17), Color.FromArgb(70, 70, 200, 70));
                    var lootStr    = RPG.UsingController ? "Hold (A) To Loot " : "Press E To Loot ";
                    interactUI.Items.Add(new UIText(lootStr + nearbyLoot.Name, new Point(240 / 2, 1), 0.25f, Color.White, 0, true));
                    interactUI.Draw();
                    showingLoot = true;
                }
            }


            if (CurrentDialog != null && !IsOpen(DialogMenu))
            {
                World.RenderingCamera = NpcCamera;
                OpenDialog();
            }

            //Controller Support
            var up       = Game.IsControlJustPressed(0, Control.ScriptPadUp);
            var down     = Game.IsControlJustPressed(0, Control.ScriptPadDown);
            var left     = Game.IsControlJustPressed(0, Control.ScriptPadLeft);
            var right    = Game.IsControlJustPressed(0, Control.ScriptPadRight);
            var back     = Game.IsControlJustPressed(0, Control.Reload);
            var interact = Game.IsControlJustPressed(0, Control.Sprint);

            var skillMod  = Game.IsControlPressed(0, Control.Jump);
            var hotkeyMod = Game.IsControlPressed(0, Control.Reload);

            if (interact)
            {
                if (CurrentDialog != null)
                {
                    DialogMenu.OnActivate();
                }
                else
                {
                    View.HandleActivate();
                }
            }
            if (back)
            {
                View.HandleBack();
            }

            if (!skillMod && !hotkeyMod)
            {
                if (left)
                {
                    if (CurrentDialog != null)
                    {
                        DialogMenu.OnChangeItem(false);
                    }
                    else
                    {
                        View.HandleChangeItem(false);
                    }
                }
                if (right)
                {
                    if (CurrentDialog != null)
                    {
                        DialogMenu.OnChangeItem(true);
                    }
                    else
                    {
                        View.HandleChangeItem(true);
                    }
                }
                if (up)
                {
                    if (CurrentDialog != null)
                    {
                        DialogMenu.OnChangeSelection(false);
                    }
                    else
                    {
                        View.HandleChangeSelection(false);
                    }
                }
                if (down)
                {
                    if (CurrentDialog != null)
                    {
                        DialogMenu.OnChangeSelection(true);
                    }
                    else
                    {
                        View.HandleChangeSelection(true);
                    }
                }
            }

            if (!RPGSettings.ShowUI || CurrentDialog != null)
            {
                return;
            }

            //NPC Interact
            if (!showingLoot && CurrentDialog == null && !Game.Player.Character.IsInCombat)
            {
                var nearestPed = RPGInfo.NearestPed;
                if (nearestPed != null)
                {
                    var npcObject = RPG.WorldData.Npcs.FirstOrDefault(n => n.IsQuestNpc && n.EntityHandle == nearestPed.Handle);
                    if (npcObject != null)
                    {
                        var interactUI  = new UIContainer(new Point(UI.WIDTH / 2 - 120, UI.HEIGHT - 122), new Size(240, 17), Color.FromArgb(70, 190, 190, 190));
                        var interactStr = RPG.UsingController ? "Hold (A) to Interact with " : "Press E to Interact with ";
                        interactUI.Items.Add(new UIText(interactStr + npcObject.Name, new Point(240 / 2, 1), 0.25f, Color.White, 0, true));
                        interactUI.Draw();
                    }
                }
            }


            //Player text
            //new UIText(PlayerData.Name.ToLower() + " level " + PlayerData.Level + " criminal", new Point(51, UI.HEIGHT - 55), 0.25f, Color.White, 0, false).Draw();

            //Expbar
            var expBarUI   = new UIContainer(new Point(0, UI.HEIGHT - 2), new Size(UI.WIDTH, 2), Color.FromArgb(180, 20, 20, 20));
            var percentExp = (float)PlayerData.Exp / PlayerData.ExpToLevel;

            expBarUI.Items.Add(new UIRectangle(new Point(0, 0), new Size((int)(percentExp * UI.WIDTH), 2), Color.FromArgb(220, 255, 255, 0)));

            expBarUI.Draw();

            #region "RPG Style UI"
            var   borderColor = Color.FromArgb(255, 75, 75, 75);
            Point rectanglePoint;
            Point textPoint;

            switch (RPGSettings.SafeArea)
            {
            case 0:
                rectanglePoint = new Point((RPGInfo.IsWideScreen ? 63 : 63), UI.HEIGHT - 47);
                textPoint      = new Point((RPGInfo.IsWideScreen ? 63 : 63), UI.HEIGHT - 48);
                break;

            case 1:
                rectanglePoint = new Point((RPGInfo.IsWideScreen ? 57 : 57), UI.HEIGHT - 43);
                textPoint      = new Point((RPGInfo.IsWideScreen ? 57 : 57), UI.HEIGHT - 44);
                break;

            case 2:
                rectanglePoint = new Point((RPGInfo.IsWideScreen ? 51 : 50), UI.HEIGHT - 40); //
                textPoint      = new Point((RPGInfo.IsWideScreen ? 51 : 51), UI.HEIGHT - 41); //
                break;

            case 3:
                rectanglePoint = new Point((RPGInfo.IsWideScreen ? 45 : 45), UI.HEIGHT - 36);
                textPoint      = new Point((RPGInfo.IsWideScreen ? 45 : 45), UI.HEIGHT - 37);
                break;

            case 4:
                rectanglePoint = new Point((RPGInfo.IsWideScreen ? 39 : 39), UI.HEIGHT - 33);
                textPoint      = new Point((RPGInfo.IsWideScreen ? 39 : 39), UI.HEIGHT - 34);
                break;

            case 5:
                rectanglePoint = new Point((RPGInfo.IsWideScreen ? 32 : 32), UI.HEIGHT - 29);
                textPoint      = new Point((RPGInfo.IsWideScreen ? 32 : 32), UI.HEIGHT - 30);
                break;

            case 6:
                rectanglePoint = new Point((RPGInfo.IsWideScreen ? 26 : 26), UI.HEIGHT - 26);
                textPoint      = new Point((RPGInfo.IsWideScreen ? 26 : 26), UI.HEIGHT - 27);
                break;

            case 7:
                rectanglePoint = new Point((RPGInfo.IsWideScreen ? 19 : 19), UI.HEIGHT - 22);
                textPoint      = new Point((RPGInfo.IsWideScreen ? 19 : 19), UI.HEIGHT - 23);
                break;

            case 8:
                rectanglePoint = new Point((RPGInfo.IsWideScreen ? 13 : 13), UI.HEIGHT - 18);
                textPoint      = new Point((RPGInfo.IsWideScreen ? 13 : 13), UI.HEIGHT - 19);
                break;

            case 9:
                rectanglePoint = new Point((RPGInfo.IsWideScreen ? 6 : 6), UI.HEIGHT - 15);
                textPoint      = new Point((RPGInfo.IsWideScreen ? 6 : 6), UI.HEIGHT - 16);
                break;

            case 10:
                rectanglePoint = new Point((RPGInfo.IsWideScreen ? 0 : 0), UI.HEIGHT - 10);
                textPoint      = new Point((RPGInfo.IsWideScreen ? 0 : 0), (RPGInfo.IsWideScreen ? UI.HEIGHT - 11 : UI.HEIGHT - 12));
                break;

            default:
                rectanglePoint = new Point((RPGInfo.IsWideScreen ? 0 : 0), UI.HEIGHT - 10);
                textPoint      = new Point((RPGInfo.IsWideScreen ? 0 : 0), (RPGInfo.IsWideScreen ? UI.HEIGHT - 11 : UI.HEIGHT - 12));
                break;
            }

            if (vehicle != null)
            {
                var speed = ((int)(vehicle.Speed * 2.45)).ToString("000");
                new UIText(" MPH", new Point(RPGInfo.IsWideScreen ? textPoint.X + 156 : textPoint.X + 156, textPoint.Y), 0.22f, Color.White, 0, false).Draw(); //55
                new UIText(speed, new Point(RPGInfo.IsWideScreen ? textPoint.X + 141 : textPoint.X + 141, textPoint.Y), 0.22f, Color.White, 0, false).Draw();  //55
            }

            new UIRectangle(rectanglePoint, new Size(181, 10), borderColor).Draw(); //playerinfo
            new UIText(PlayerData.Name + " Level " + PlayerData.Level + " " + PlayerData.Class.ToString().Replace("_", " "), textPoint, 0.22f, Color.White, 0, false).Draw();


            var offset = RPGSettings.ShowingSubtitle ? -85 : 0;


            new UIRectangle(new Point(UI.WIDTH / 2 - 173, UI.HEIGHT - 45 - 28 + offset), new Size(345, 10), Color.FromArgb(60, 0, 0, 0)).Draw();
            new UIRectangle(new Point(UI.WIDTH / 2 - 173, UI.HEIGHT - 45 - 13 + offset), new Size(345, 10), Color.FromArgb(60, 0, 0, 0)).Draw();

            var hpText    = string.Format("HP: {0}/{1}", Game.Player.Character.Health, Game.Player.Character.MaxHealth);
            var armorText = string.Format("Armor: {0}/{1}", Game.Player.Character.Armor, 100);
            var hp        = ((float)Game.Player.Character.Health / Game.Player.Character.MaxHealth);
            var ap        = ((float)Game.Player.Character.Armor / 100);

            var hpColor = Color.FromArgb(120, 33, 149, 34);
            if (hp < 0.2f)
            {
                hpColor = Color.FromArgb(120, 139, 0, 0);
            }
            else if (hp < 0.4f)
            {
                hpColor = Color.FromArgb(120, 255, 69, 0);
            }

            new UIRectangle(new Point(UI.WIDTH / 2 - 173, UI.HEIGHT - 45 - 28 + offset), new Size((int)(hp * 345), 10), hpColor).Draw();
            new UIRectangle(new Point(UI.WIDTH / 2 - 173, UI.HEIGHT - 45 - 13 + offset), new Size((int)(ap * 345), 10), Color.FromArgb(180, 30, 144, 255)).Draw();

            new UIText(hpText, new Point(UI.WIDTH / 2, UI.HEIGHT - 45 - 28 - 2 + offset), 0.22f, Color.White, 0, true).Draw();
            new UIText(armorText, new Point(UI.WIDTH / 2, UI.HEIGHT - 45 - 13 - 2 + offset), 0.22f, Color.White, 0, true).Draw();
            #endregion

            //Character window #2
            if (View.ActiveMenus > 0)
            {
                var charPanel = new UIContainer(new Point(UI.WIDTH - 300, View.MenuPosition.Y - 215), new Size(300, 200), Color.Gray);

                //todo: what should we draw here?

                //charPanel.Draw();
            }



            //Quest Tracker
            if (RPGSettings.ShowQuestTracker)
            {
                GetQuestTracker().Draw();
            }

            //Skill bar
            if (RPGSettings.ShowSkillBar)
            {
                var skillOffset = RPGSettings.ShowingSubtitle ? -80 : 0;
                var skillBarUI  = RPG.SkillHandler.GetSkillBar(skillOffset);
                skillBarUI.Draw();
            }
        }
예제 #10
0
        private void ConfirmReturnToNormal()
        {
            var box = RPGMessageBox.Create("Are you sure you want to return to normal mode?", "Return to normal mode", "Continue Playing GTA:RPG", () => { View.CloseAllMenus(); RPGMethods.ReturnToNormal(); }, () => { View.MenuPosition = new Point(UI.WIDTH - 300, 0); });

            RPGUI.FormatMenu(box);
            View.AddMenu(box);
        }
예제 #11
0
        private void ConfirmPlayAsTrio()
        {
            var box = RPGMessageBox.Create("Are you sure you want to play as the trio?", "Play as Michael Trevor and Franklin", "Continue Playing GTA:RPG", () => { View.CloseAllMenus(); RPGMethods.PlayAsTrio(); }, () => { View.MenuPosition = new Point(UI.WIDTH - 300, 0); });

            RPGUI.FormatMenu(box);
            View.AddMenu(box);
        }
예제 #12
0
파일: Quest.cs 프로젝트: tuita520/GTARPG
        public void SetupCondition(QuestCondition c, bool firstSetup)
        {
            if (c.Type == ConditionType.Kill && c.Parameters.ContainsKey("ModelHash") ||
                c.Type == ConditionType.Loot && c.Parameters.ContainsKey("ModelHash"))
            {
                int[] hashes;
                var   models  = c.Parameters["ModelHash"] as uint[];
                var   modelsA = c.Parameters["ModelHash"] as JArray;

                if (models != null)
                {
                    hashes = models.Select(m => (int)m).ToArray();
                }
                else
                {
                    hashes = modelsA.Select(jv => (uint)jv).Select(t => (int)t).ToArray();
                }


                if (SpawnTargets)
                {
                    c.Position = c.Position == Vector3.Zero ? RPGMethods.GetSpawnPoint(350) : c.Position;
                    BlipObjects.Add(RPGBlips.QuestArea(Name, c.Position));

                    EventHandler.Do(q =>
                    {
                        var pos           = c.Position;
                        var amountToSpawn = AmountToSpawn;
                        var playerGroup   = Game.Player.Character.RelationshipGroup;
                        var enemies       = World.AddRelationshipGroup("RPG_Enemies");
                        World.SetRelationshipBetweenGroups(Relationship.Neutral, playerGroup, enemies);
                        for (int i = 0; i < amountToSpawn; i++)
                        {
                            var hash = hashes[Random.Range(0, hashes.Length)];
                            var m    = new Model(hash);
                            m.Request(1000);
                            var ped = World.CreatePed(m, pos + Vector3.RandomXY() * 2, Game.Player.Character.Heading + 180);
                            ped.RelationshipGroup = enemies;
                            var b = ped.AddBlip();
                            EventHandler.Wait(100);
                            b.IsFriendly = false;
                            b.Scale      = 0.6f;
                            ped.Task.WanderAround();
                            //todo: apply some weapon damage scaling here lol
                            ped.Weapons.Give(WeaponHash.Pistol, 1000, false, true);
                            ped.CanSwitchWeapons = true;
                            RPG.WorldData.AddPed(new NpcObject("Quest_" + Name, ped));
                            RPG.WorldData.AddBlip(new BlipObject("Quest_" + Name, b));
                            HasSpawnedTargets = true;
                        }
                    });
                }
            }

            if (!c.Parameters.ContainsKey("Current"))
            {
                c.Parameters.Add("Current", 0);
            }

            if (firstSetup)
            {
                switch (c.Type)
                {
                case ConditionType.Kill:
                case ConditionType.Loot:
                case ConditionType.DestroyVehicle:
                case ConditionType.Acquire:
                    c.Parameters["Current"] = 0;
                    break;

                case ConditionType.Interact:
                case ConditionType.Escort:
                case ConditionType.Race:
                case ConditionType.EvadeCops:
                    c.Parameters["Current"] = false;
                    break;

                case ConditionType.Custom:
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
        }
예제 #13
0
        private void CheckIfForQuest(Entity entity, int Hash, bool isPed)
        {
            var hashKey      = isPed ? "ModelHash" : "VehHash";
            var activeQuests = PlayerData.Quests.Where(q => q.InProgress).ToList();

            for (int i = 0; i < activeQuests.Count; i++)
            {
                var quest = activeQuests[i];
                foreach (var c in quest.Conditions)
                {
                    if (c.Type == ConditionType.Kill || c.Type == ConditionType.DestroyVehicle ||
                        c.Type == ConditionType.Loot)
                    {
                        if (!c.Parameters.ContainsKey(hashKey))
                        {
                            if ((c.Type == ConditionType.Kill && isPed) || (c.Type == ConditionType.DestroyVehicle && !isPed))
                            {
                                var cur = Convert.ToInt32(c.Parameters["Current"]);
                                c.Parameters["Current"] = cur + 1;
                            }
                            else if (c.Type == ConditionType.Loot)
                            {
                                if (c.Parameters.ContainsKey("Vehicles"))
                                {
                                    if (!isPed)
                                    {
                                        DropQuestItem(entity, (string)c.Parameters["PropModel"], (string)c.Parameters["ItemName"], Convert.ToInt32(c.Parameters["DropRate"]));
                                    }
                                }
                                else
                                {
                                    if (isPed)
                                    {
                                        DropQuestItem(entity, (string)c.Parameters["PropModel"], (string)c.Parameters["ItemName"], Convert.ToInt32(c.Parameters["DropRate"]));
                                    }
                                }
                            }
                            continue;
                        }

                        int[] hashes = RPGMethods.GetModelHashes(c.Parameters[hashKey]);



                        var p = Hash;

                        foreach (var m in hashes)
                        {
                            var x = m;
                            if (p == x)
                            {
                                if (c.Type != ConditionType.Loot)
                                {
                                    var cur = Convert.ToInt32(c.Parameters["Current"]);
                                    c.Parameters["Current"] = cur + 1;
                                }
                                else
                                {
                                    DropQuestItem(entity, (string)c.Parameters["PropModel"], (string)c.Parameters["ItemName"], Convert.ToInt32(c.Parameters["DropRate"]));
                                }
                                break;
                            }
                        }
                    }
                }
            }
        }
예제 #14
0
        public override void Update()
        {
            Ped player = Game.Player.Character;

            if (player.IsDead || Function.Call <bool>(Hash.IS_PLAYER_BEING_ARRESTED, Game.Player.Handle))
            {
                RPG.PlayerDead = true;
                Wait(3000);
                var deathPosition = Game.Player.Character.Position;
                try
                {
                    RPG.UIHandler.CloseAll();
                    RPGSettings.ShowUI = false;
                    var c = World.CreateCamera(Game.Player.Character.Position + new Vector3(0, 0, 100), new Vector3(0, 0, 90), GameplayCamera.FieldOfView);
                    World.RenderingCamera = c;

                    var oldModel = RPG.PlayerData.ModelHash;

                    Model m = PedHash.Michael;
                    m.Request(1000);
                    Function.Call(Hash.SET_PLAYER_MODEL, Game.Player.Handle, m.Hash);
                    Function.Call(Hash.SET_PED_DEFAULT_COMPONENT_VARIATION, Game.Player.Character.Handle);
                    m.MarkAsNoLongerNeeded();

                    while (Game.Player.Character.IsDead || Function.Call <bool>(Hash.IS_PLAYER_BEING_ARRESTED, Game.Player.Handle))
                    {
                        Wait(0);
                    }

                    var t = 150;
                    while (t > 0)
                    {
                        UI.ShowSubtitle("Loading", 100);
                        Function.Call(Hash.DISPLAY_HUD, 0);
                        Function.Call(Hash.DISPLAY_RADAR, 0);
                        World.RenderingCamera = c;
                        Wait(100);
                        t--;
                    }

                    //Wait(15000);
                    Model oldM = oldModel;
                    oldM.Request(1000);
                    Function.Call(Hash.SET_PLAYER_MODEL, Game.Player.Handle, oldM.Hash);
                    Wait(0);
                    Game.Player.Character.FreezePosition = false;

                    RPGMethods.OnRespawn();
                    RPGSettings.ShowUI = true;
                    Function.Call(Hash.DISPLAY_HUD, 1);
                    Function.Call(Hash.DISPLAY_RADAR, 1);
                    World.RenderingCamera = null;
                    c.Destroy();
                    Game.FadeScreenIn(500);
                    RPG.PlayerDead = false;
                    Wait(15000);
                }
                catch (Exception ex)
                {
                    RPGLog.Log(ex.ToString());
                }
            }
        }
예제 #15
0
파일: RPGInit.cs 프로젝트: tuita520/GTARPG
        private void StartRPGMode()
        {
            World.DestroyAllCameras();
            Game.Player.CanControlCharacter = true;

            string missing;
            var    statusGood = CheckStatus(out missing);

            if (statusGood || !RPGSettings.ShowPrerequisiteWarning)
            {
                RPG.Initialise();
                Enabled = false;
            }
            else
            {
                var mb = (RPGMessageBox)RPGMessageBox.Create("Missing: " + missing + " View readme for more info.",
                                                             "Play Anyway ( WARNING: Bugs/errors expected))", "Return to normal mode", PlayAnyway, () => { RPGMethods.ReturnToNormal(); RPG.UIHandler.View.CloseAllMenus(); });
                RPGUI.FormatMenu(mb);
                mb.TopColor    = Color.Red;
                mb.HeaderScale = 0.5f;
                RPG.UIHandler.View.AddMenu(mb);
                Enabled = false;
            }
        }