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; }
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()); } } } }
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(); } } }
public void update() { if (isInProgress) { float elapsedMilliseconds = DemagoScript.getScriptTime() - startTime; if (elapsedMilliseconds <= millisecondsToWait) { float elapsedPourcent = elapsedMilliseconds / millisecondsToWait; OnTimerUpdate?.Invoke(elapsedMilliseconds, elapsedPourcent); } else { this.stop(); } } }
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()); } }
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); } }
public float getElapsedMilliSeconds() { return(DemagoScript.getScriptTime() - startTime); }
public Timer(float millisecondsToWait) { this.startTime = DemagoScript.getScriptTime(); this.millisecondsToWait = millisecondsToWait; timers.Add(this); }
/// <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 } } }
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 }