コード例 #1
0
        public DemagoScript()
        {
            var date = DateTime.Now;

            Tools.log("-------------Initialisation du mod GTA Démago------------");
            GTA.UI.Notify("GTA Démago - " + date.Hour + ':' + date.Minute + ':' + date.Second);

            if (GTA.Game.Language == GTA.Language.French)
            {
                DemagoScript.language = "fr";
            }

            DemagoScript.createMissions();
            GUIManager.Instance.initialize(DemagoScript.Missions);

            GUIManager.Instance.menu.OnKeysPressedEvent += (Keys key) => {
                if (key == Keys.Decimal)
                {
                    this.playerSitting();
                }
            };

            GUIManager.Instance.menu.OnControlDown += (GTA.Control control) => {
                if (control == GTA.Control.FrontendPauseAlternate || control == GTA.Control.FrontendPause)
                {
                    this.togglePause();
                }
            };

            Tick    += OnTick;
            KeyDown += OnKeyDown;
            KeyUp   += OnKeyUp;
        }
コード例 #2
0
ファイル: DemagoMenu.cs プロジェクト: xdidx/gta-demago
        public void controlsGestion()
        {
            foreach (GTA.Control control in Enum.GetValues(typeof(GTA.Control)))
            {
                if (Game.IsControlJustPressed(2, control))
                {
                    OnControlDown?.Invoke(control);
                }

                if (Game.IsControlJustReleased(2, control))
                {
                    if (((IDictionary)lastTimeControlPressed).Contains(control) && (DemagoScript.getScriptTime() - lastTimeControlPressed[control]) < doublePressDelay)
                    {
                        lastTimeControlPressed[control] = 0;
                        OnControlDoublePressed?.Invoke(control);
                    }
                    else
                    {
                        OnControlPressed?.Invoke(control);
                    }

                    if (((IDictionary)lastTimeControlPressed).Contains(control))
                    {
                        lastTimeControlPressed[control] = DemagoScript.getScriptTime();
                    }
                    else
                    {
                        lastTimeControlPressed.Add(control, DemagoScript.getScriptTime());
                    }
                }
            }
        }
コード例 #3
0
ファイル: ModelManager.cs プロジェクト: xdidx/gta-demago
 public void update()
 {
     if (Game.Player.IsDead || Function.Call <bool>(Hash.IS_PLAYER_BEING_ARRESTED, Game.Player, false))
     {
         DemagoScript.pauseCurrentMission();
         AudioManager.Instance.setAudioPause(true);
         if (DemagoScript.isThereACurrentMission())
         {
             this.resetPlayerModel();
         }
     }
 }
コード例 #4
0
ファイル: Timer.cs プロジェクト: xdidx/gta-demago
 public void update()
 {
     if (isInProgress)
     {
         float elapsedMilliseconds = DemagoScript.getScriptTime() - startTime;
         if (elapsedMilliseconds <= millisecondsToWait)
         {
             float elapsedPourcent = elapsedMilliseconds / millisecondsToWait;
             OnTimerUpdate?.Invoke(elapsedMilliseconds, elapsedPourcent);
         }
         else
         {
             this.stop();
         }
     }
 }
コード例 #5
0
ファイル: DemagoMenu.cs プロジェクト: xdidx/gta-demago
        public void OnKeyUp(object sender, KeyEventArgs e)
        {
            Keys key = e.KeyCode;

            if (((IDictionary)lastTimeKeysPressed).Contains(key) && (DemagoScript.getScriptTime() - lastTimeKeysPressed[key]) < doublePressDelay)
            {
                lastTimeKeysPressed[key] = 0;
                OnKeysDoublePressedEvent?.Invoke(key);
            }
            else
            {
                OnKeysPressedEvent?.Invoke(key);
            }

            if (((IDictionary)lastTimeKeysPressed).Contains(key))
            {
                lastTimeKeysPressed[key] = DemagoScript.getScriptTime();
            }
            else
            {
                lastTimeKeysPressed.Add(key, DemagoScript.getScriptTime());
            }
        }
コード例 #6
0
ファイル: AudioManager.cs プロジェクト: xdidx/gta-demago
        private void updateInterruptSounds()
        {
            if (currentInterruptSound == null && DemagoScript.isThereACurrentMission())
            {
                string fileFullPath = "";
                if (Function.Call <Boolean>(Hash.HAS_PED_BEEN_DAMAGED_BY_WEAPON, Game.Player.Character, 0, 2))
                {
                    int next = random.Next(10) + 1;
                    fileFullPath = FullPrefix + "balle" + next + ".wav";
                }
                else
                {
                    if (Function.Call <Boolean>(Hash.HAS_ENTITY_BEEN_DAMAGED_BY_ANY_VEHICLE, Game.Player.Character))
                    {
                        int next = random.Next(8) + 1;
                        fileFullPath = FullPrefix + "voiture" + next + ".wav";
                    }
                    else
                    {
                        if (Function.Call <Boolean>(Hash.HAS_ENTITY_BEEN_DAMAGED_BY_ANY_OBJECT, Game.Player.Character))
                        {
                            int next = random.Next(7) + 1;
                            fileFullPath = FullPrefix + "insulte" + next + ".wav";
                        }
                    }
                }

                if (fileFullPath != "")
                {
                    if (File.Exists(fileFullPath))
                    {
                        if (currentSoundIndex < playlist.Count)
                        {
                            if (!playlist.ElementAt(currentSoundIndex).Key.StartsWith("flic"))
                            {
                                playlist.ElementAt(currentSoundIndex).Value.Paused = true;
                            }
                        }

                        currentInterruptSound = engine.Play2D(fileFullPath);
                        if (currentInterruptSound != null)
                        {
                            currentInterruptSound.Paused = false;
                        }
                        else
                        {
                            Tools.log("just created currentInterruptSound is null");
                        }
                    }
                    else
                    {
                        Tools.log("interruption file doesn't exist" + fileFullPath);
                    }
                }
            }

            if (currentInterruptSound != null && currentInterruptSound.Finished)
            {
                if (currentSoundIndex < playlist.Count)
                {
                    playlist.ElementAt(currentSoundIndex).Value.Paused = false;
                }

                currentInterruptSound.Dispose();
                currentInterruptSound = null;

                Function.Call(Hash.CLEAR_ENTITY_LAST_DAMAGE_ENTITY, Game.Player.Character);
                Function.Call(Hash.CLEAR_ENTITY_LAST_WEAPON_DAMAGE, Game.Player.Character);
            }
        }
コード例 #7
0
ファイル: Timer.cs プロジェクト: xdidx/gta-demago
 public float getElapsedMilliSeconds()
 {
     return(DemagoScript.getScriptTime() - startTime);
 }
コード例 #8
0
ファイル: Timer.cs プロジェクト: xdidx/gta-demago
 public Timer(float millisecondsToWait)
 {
     this.startTime          = DemagoScript.getScriptTime();
     this.millisecondsToWait = millisecondsToWait;
     timers.Add(this);
 }
コード例 #9
0
ファイル: ModelManager.cs プロジェクト: xdidx/gta-demago
        /// <summary>
        /// Reset old player model
        /// </summary>
        public void resetPlayerModel()
        {
            bool playerWasDead     = false;
            bool playerWasArrested = false;
            Ped  player            = Game.Player.Character;

            if ((PedHash)player.Model.Hash != DemagoScript.savedPlayerModelHash)
            {
                Vehicle currentVehicle = null;
                if (player.IsInVehicle())
                {
                    currentVehicle = player.CurrentVehicle;
                }

                if (player.IsDead || Function.Call <bool>(Hash.IS_PLAYER_BEING_ARRESTED, Game.Player, false))
                {
                    #region Create remplacement ped
                    Ped replacementPed = Function.Call <Ped>(Hash.CLONE_PED, Game.Player.Character, Function.Call <int>(Hash.GET_ENTITY_HEADING, Function.Call <int>(Hash.PLAYER_PED_ID)), false, true);

                    if (player.IsDead)
                    {
                        playerWasDead = true;
                        replacementPed.Kill();
                    }
                    else
                    {
                        playerWasArrested = true;
                        replacementPed.Task.HandsUp(10000);
                    }

                    replacementPed.MarkAsNoLongerNeeded();
                    #endregion
                }

                #region Change player model with saved PedHash
                var characterModel = new Model(DemagoScript.savedPlayerModelHash);
                characterModel.Request(500);

                if (characterModel.IsInCdImage && characterModel.IsValid)
                {
                    while (!characterModel.IsLoaded)
                    {
                        Script.Wait(100);
                    }

                    Function.Call(Hash.SET_PLAYER_MODEL, Game.Player, characterModel.Hash);
                    Function.Call(Hash.SET_PED_DEFAULT_COMPONENT_VARIATION, Game.Player.Character.Handle);
                }

                characterModel.MarkAsNoLongerNeeded();
                #endregion

                player = Game.Player.Character;
                if (currentVehicle != null)
                {
                    player.SetIntoVehicle(currentVehicle, VehicleSeat.Driver);
                }

                if ((playerWasDead || playerWasArrested) && DemagoScript.isThereACurrentMission())
                {
                    #region Hide real player and wait for game recovery
                    player.IsVisible    = false;
                    player.IsInvincible = true;
                    player.Task.StandStill(-1);

                    //Tant qu'on charge le jeu, on fait attendre le script GTA Démago
                    while (!Function.Call <bool>(Hash.IS_PLAYER_PLAYING, Game.Player))
                    {
                        Script.Wait(100);
                    }

                    player.IsVisible    = true;
                    player.IsInvincible = false;
                    #endregion

                    while (!Function.Call <bool>(Hash.IS_PLAYER_CONTROL_ON, Game.Player))
                    {
                        Script.Wait(100);
                    }

                    #region Show death or arrested popups
                    var title    = (playerWasDead) ? "Vous êtes mort" : "Vous vous êtes fait arrêter";
                    var subtitle = "Voulez-vous revenir au dernier checkpoint ?";

                    ConfirmationPopup checkpointPopup = new ConfirmationPopup(title, subtitle);
                    checkpointPopup.OnPopupAccept += () =>
                    {
                        DemagoScript.loadLastCheckpointOnCurrentMission();
                    };
                    checkpointPopup.OnPopupRefuse += () =>
                    {
                        DemagoScript.stopCurrentMission(true);
                    };
                    checkpointPopup.show();
                    #endregion
                }
            }
        }
コード例 #10
0
ファイル: DemagoMenu.cs プロジェクト: xdidx/gta-demago
        public DemagoMenu(List <Mission> missions = null)
        {
            if (missions == null)
            {
                missions = new List <Mission>();
            }

            #region Controls gestion
            this.OnKeysPressedEvent += (Keys key) => {
                if (key == Keys.F5)
                {
                    this.toggleDisplay();
                }
            };
            this.OnControlDoublePressed += (GTA.Control control) => {
                if (control == GTA.Control.SelectWeapon)
                {
                    this.toggleDisplay();
                }
            };
            #endregion

            #region Menu creation
            menuPool = new MenuPool();
            mainMenu = new UIMenu("GTA Demago", "~b~Configuration du mod");
            menuPool.Add(mainMenu);

            //Missions
            var missionsMenu = menuPool.AddSubMenu(mainMenu, "Missions");
            foreach (Mission mission in missions)
            {
                var missionMenu = menuPool.AddSubMenu(missionsMenu, mission.getName());
                var startItem   = mission.addStartItem(ref missionMenu);

                missionMenu.OnItemSelect += (sender, item, index) =>
                {
                    if (item == startItem)
                    {
                        DemagoScript.stopCurrentMission(true);
                        mission.start();
                    }
                };
            }

            var teleportToTaxiItem     = new UIMenuItem("Se téléporter à la mission taxi");
            var stopCurrentMissionItem = new UIMenuItem("Stopper la mission");

            missionsMenu.AddItem(teleportToTaxiItem);
            missionsMenu.AddItem(stopCurrentMissionItem);

            missionsMenu.OnItemSelect += (sender, item, index) =>
            {
                if (item == stopCurrentMissionItem)
                {
                    DemagoScript.stopCurrentMission(true);
                }

                if (item == teleportToTaxiItem)
                {
                    Function.Call(Hash.SET_NEW_WAYPOINT, -197f, 4213f);
                    Game.Player.Character.Position = PlacesPositions.TaxiMission;
                }
            };


            //Modèles
            var joeModelItem        = new UIMenuItem("Joe l'anticonformiste");
            var fourasModelItem     = new UIMenuItem("Père Fouras", "La fonctionnalité est en cours de développement");
            var gastrowModelItem    = new UIMenuItem("Gastrow Nomie", "La fonctionnalité est en cours de développement");
            var dissociateModelItem = new UIMenuItem("Dissocier", "Dissocier son corps avec le personnage le plus proche");
            var resetModelItem      = new UIMenuItem("Récupérer le modèle de base");


            var modelMenu = menuPool.AddSubMenu(mainMenu, "Modèles");
            modelMenu.AddItem(joeModelItem);
            modelMenu.AddItem(fourasModelItem);
            modelMenu.AddItem(gastrowModelItem);
            modelMenu.AddItem(dissociateModelItem);
            modelMenu.AddItem(resetModelItem);

            modelMenu.OnItemSelect += (sender, item, index) =>
            {
                if ((PedHash)Game.Player.Character.Model.Hash == PedHash.Michael || (PedHash)Game.Player.Character.Model.Hash == PedHash.Franklin || (PedHash)Game.Player.Character.Model.Hash == PedHash.Trevor)
                {
                    DemagoScript.savedPlayerModelHash = (PedHash)Game.Player.Character.Model.Hash;
                }

                if (item == resetModelItem && DemagoScript.savedPlayerModelHash == (PedHash)Game.Player.Character.Model.Hash)
                {
                    UI.Notify("Vous possédez déjà le modèle de base !");
                }

                if (DemagoScript.savedPlayerModelHash != (PedHash)Game.Player.Character.Model.Hash)
                {
                    //Reset to old model
                    Function.Call(Hash.SET_PLAYER_MODEL, Game.Player.Handle, (int)DemagoScript.savedPlayerModelHash);
                }



                if (item == dissociateModelItem)
                {
                    Ped closestPed = Tools.GetClosestPedAroundPlayer();
                    if (closestPed != null && closestPed.Exists())
                    {
                        Tools.setModel(closestPed.Model);

                        if (closestPed.Position != Vector3.Zero)
                        {
                            Vector3 oldPlayerPosition = Game.Player.Character.Position;
                            Game.Player.Character.Position = closestPed.Position;
                            closestPed.Position            = oldPlayerPosition;
                        }
                        else
                        {
                            Tools.log("Closest ped position == 0 ...");
                        }
                    }
                    else
                    {
                        GTA.UI.Notify("Pas de personnage proche...");
                    }
                }

                if (item == joeModelItem)
                {
                    ModelManager.Instance.setDemagoModel(DemagoModel.Joe);
                }

                if (item == fourasModelItem)
                {
                    ModelManager.Instance.setDemagoModel(DemagoModel.Fouras);
                }

                if (item == gastrowModelItem)
                {
                    ModelManager.Instance.setDemagoModel(DemagoModel.Gastrow);
                }
            };

            //Vehicules
            var destroyCarsItem  = new UIMenuItem("Supprimer les véhicules proches");
            var spawnCarItem     = new UIMenuItem("Faire apparaitre un véhicule aléatoire");
            var spawnNiceCarItem = new UIMenuItem("Faire apparaitre un véhicule rapide");
            var healPlayerItem   = new UIMenuItem("Se soigner et réparer le véhicule");
            var bikeJoe          = new UIMenuItem("Le vélo de Joe");
            var carFouras        = new UIMenuItem("La voiture du père Fouras", "La fonctionnalité est en cours de développement");

            var vehiclesMenu = menuPool.AddSubMenu(mainMenu, "Véhicules");
            vehiclesMenu.AddItem(healPlayerItem);
            vehiclesMenu.AddItem(spawnCarItem);
            vehiclesMenu.AddItem(spawnNiceCarItem);
            vehiclesMenu.AddItem(destroyCarsItem);
            vehiclesMenu.OnItemSelect += (sender, item, index) =>
            {
                if (item == destroyCarsItem)
                {
                    int counter = 0;
                    foreach (Vehicle vehicle in World.GetNearbyVehicles(Game.Player.Character, 10))
                    {
                        if (vehicle != Game.Player.Character.CurrentVehicle)
                        {
                            counter++;
                            vehicle.Delete();
                        }
                    }
                    GTA.UI.Notify(counter + " véhicule(s) supprimé(s) !");
                }
                if (item == spawnCarItem)
                {
                    Array       vehicleValues = Enum.GetValues(typeof(VehicleHash));
                    Random      random        = new Random();
                    VehicleHash randomValue   = (VehicleHash)vehicleValues.GetValue(random.Next(vehicleValues.Length));
                    if (lastSpawnedVehicle != null && lastSpawnedVehicle != Game.Player.Character.CurrentVehicle)
                    {
                        lastSpawnedVehicle.Delete();
                    }
                    lastSpawnedVehicle = World.CreateVehicle(randomValue, Tools.GetSafeRoadPos(Game.Player.Character.Position));
                }
                if (item == spawnNiceCarItem)
                {
                    if (lastSpawnedVehicle != null && lastSpawnedVehicle != Game.Player.Character.CurrentVehicle)
                    {
                        lastSpawnedVehicle.Delete();
                    }
                    lastSpawnedVehicle = World.CreateVehicle(VehicleHash.T20, Tools.GetSafeRoadPos(Game.Player.Character.Position));
                }
                if (item == healPlayerItem)
                {
                    Game.Player.Character.Health = Game.Player.Character.MaxHealth;
                    Game.Player.Character.Armor  = 100;
                    if (Game.Player.Character.IsInVehicle())
                    {
                        Game.Player.Character.CurrentVehicle.Repair();
                    }
                }
            };

            var specialVehiclesMenu = menuPool.AddSubMenu(vehiclesMenu, "Véhicules spéciaux");
            specialVehiclesMenu.AddItem(bikeJoe);
            specialVehiclesMenu.AddItem(carFouras);
            specialVehiclesMenu.OnItemSelect += (sender, item, index) =>
            {
                if (lastSpecialVehicle != null && lastSpecialVehicle.Exists())
                {
                    lastSpecialVehicle.Delete();
                    lastSpecialVehicle = null;
                }

                if (item == bikeJoe)
                {
                    Vehicle bike = null;
                    do
                    {
                        bike = World.CreateVehicle(VehicleHash.TriBike, Game.Player.Character.Position.Around(2));
                    } while (bike == null || !bike.Exists());

                    lastSpecialVehicle = bike;
                }
                if (item == carFouras)
                {
                    //TODO : Spawn de la voiture de Fouras
                }
            };

            //Outils
            seePlayerActiveItem  = new UIMenuCheckboxItem("Personnage invisible", seePlayer, "Si la case est cochée, votre personnage est invisible");
            godPlayerActiveItem  = new UIMenuCheckboxItem("Personnage invincible", godPlayer, "Si la case est cochée, votre personnage est invincible");
            seeVehicleActiveItem = new UIMenuCheckboxItem("Vehicle invisible", seeVehicle, "Si la case est cochée, votre véhicule est invisible");
            godVehicleActiveItem = new UIMenuCheckboxItem("Vehicle invincible", godVehicle, "Si la case est cochée, votre véhicule est invincible");
            var teleportMarkerItem = new UIMenuItem("Se téléporter au marqueur");
            var wantedUpItem       = new UIMenuItem("Ajouter une étoile");
            var wantedDownItem     = new UIMenuItem("Supprimer une étoile");
            var wantedLevelItem    = new UIMenuItem("Supprimer toutes les étoiles");
            var addMoney           = new UIMenuItem("Ajouter 50.000$");
            var removeMoney        = new UIMenuItem("Enlever 50.000$");
            var gravityActiveItem  = new UIMenuCheckboxItem("Zéro gravité", zeroGravity, "Si la case est cochée, il n'y aura plus de gravité sur la map entière");
            var showPositionItem   = new UIMenuItem("Afficher la position");
            var showRotationItem   = new UIMenuItem("Afficher la rotation");

            var toolsMenu = menuPool.AddSubMenu(mainMenu, "Outils");
            toolsMenu.AddItem(wantedLevelItem);
            toolsMenu.AddItem(wantedDownItem);
            toolsMenu.AddItem(wantedUpItem);
            toolsMenu.AddItem(teleportMarkerItem);
            toolsMenu.AddItem(addMoney);
            toolsMenu.AddItem(removeMoney);
            toolsMenu.AddItem(gravityActiveItem);
            toolsMenu.AddItem(seePlayerActiveItem);
            toolsMenu.AddItem(godPlayerActiveItem);
            toolsMenu.AddItem(seeVehicleActiveItem);
            toolsMenu.AddItem(godVehicleActiveItem);
            toolsMenu.AddItem(showPositionItem);
            toolsMenu.AddItem(showRotationItem);

            toolsMenu.OnItemSelect += (sender, item, checked_) =>
            {
                if (item == teleportMarkerItem)
                {
                    Tools.TeleportPlayerToWaypoint();
                }

                if (item == showPositionItem)
                {
                    GTA.UI.Notify("player X : " + Game.Player.Character.Position.X + " / Y : " + Game.Player.Character.Position.Y + " / Z : " + Game.Player.Character.Position.Z);
                }
                if (item == showRotationItem)
                {
                    GTA.UI.Notify("rot X : " + Game.Player.Character.Rotation.X + " / Y : " + Game.Player.Character.Rotation.Y + " / Z : " + Game.Player.Character.Rotation.Z);
                }
                if (item == wantedDownItem)
                {
                    if (Game.Player.WantedLevel > 0)
                    {
                        Game.Player.WantedLevel--;
                    }
                }
                if (item == wantedLevelItem)
                {
                    Game.Player.WantedLevel = 0;
                }
                if (item == wantedUpItem)
                {
                    if (Game.Player.WantedLevel < 5)
                    {
                        Game.Player.WantedLevel++;
                    }
                }
                if (item == addMoney)
                {
                    Game.Player.Money += 50000;
                }
                if (item == removeMoney)
                {
                    if (Game.Player.Money > 50000)
                    {
                        Game.Player.Money -= 50000;
                    }
                    else
                    {
                        Game.Player.Money = 0;
                    }
                }
            };


            toolsMenu.OnCheckboxChange += (sender, item, checked_) =>
            {
                Ped player = Game.Player.Character;
                if (item == gravityActiveItem)
                {
                    zeroGravity = checked_;
                    if (zeroGravity)
                    {
                        Function.Call(Hash.SET_GRAVITY_LEVEL, 3);
                    }
                    else
                    {
                        Function.Call(Hash.SET_GRAVITY_LEVEL, 0);
                    }
                }
                if (item == seePlayerActiveItem)
                {
                    seePlayer        = checked_;
                    player.IsVisible = !seePlayer;
                }
                if (item == godPlayerActiveItem)
                {
                    godPlayer = checked_;
                    Game.Player.IsInvincible = godPlayer;
                }

                if (item == seeVehicleActiveItem)
                {
                    if (player.IsInVehicle())
                    {
                        seeVehicle = checked_;
                        toChangeVehicle.IsVisible = !seeVehicle;
                        player.IsVisible          = !seePlayer;
                    }
                    else
                    {
                        seeVehicleActiveItem.Checked = false;
                        UI.Notify("Impossible , vous êtes à pied !");
                    }
                }
                if (item == godVehicleActiveItem)
                {
                    if (player.IsInVehicle())
                    {
                        godVehicle = checked_;
                        toChangeVehicle.IsInvincible  = godVehicle;
                        toChangeVehicle.CanTiresBurst = godVehicle;
                    }
                    else
                    {
                        godVehicleActiveItem.Checked = false;
                        UI.Notify("Impossible , vous êtes à pied !");
                    }
                }
            };
            #endregion
        }