示例#1
0
        private void FxHighlight_OnItemSelect(UIMenu sender, UIMenuItem selectedItem, int index, UIMenuItem itemToControl, FxName fxName, string asset, bool useEvolutionArg = false)
        {
            if (selectedItem == itemToControl)
            {
                PTFXHelper.RemovePTFX(fxHandle);

                if (itemToControl.Text == "REMOVED")
                {
                    return;
                }

                Ped player = Game.Player.Character;

                PlayLoopOrNonLoopedFX(player.IsInVehicle() ? player.CurrentVehicle : (Entity)player, asset, fxName, useEvolutionArg);

                lastAsset  = asset;
                lastFXName = fxName;

                if (Game.IsKeyPressed(Keys.ShiftKey))
                {
                    if (sender == FavouritesMenu || (sender.ParentMenu != null && sender.ParentMenu == FavouritesMenu)) //Remove from favourites
                    {
                        try
                        {
                            FavouritesList.Remove(FavouritesList.Find(d => d.FxName == fxName && d.AssetName == asset));
                            ForceDecimal();
                            XMLHelper.SaveObjectToXML(FavouritesList, @"scripts\ParticleFxFavourites.xml");

                            if (sender == FavouritesMenu)
                            {
                                itemToControl.Text        = "REMOVED";
                                itemToControl.Value       = null;
                                itemToControl.Description = null;
                            }
                            else if (sender.ParentMenu != null && sender.ParentMenu == FavouritesMenu)
                            {
                                sender.Title                  = "REMOVED";
                                sender.ParentItem.Text        = "REMOVED";
                                sender.ParentItem.Description = null;
                            }

                            UI.ShowSubtitle("Removed from Favourites!");
                        }
                        catch { }
                    }
                    else //Add to favourites
                    {
                        DetailedFx newFav = new DetailedFx(asset, fxName);
                        FavouritesList.Add(newFav);
                        ForceDecimal();
                        XMLHelper.SaveObjectToXML(FavouritesList, @"scripts\ParticleFxFavourites.xml");
                        UI.ShowSubtitle("Saved to Favourites!");

                        favLastIndex      = FavouritesMenu.SelectedIndex;
                        rebuildFavourites = true;
                        allowMenuDraw     = false;
                    }
                }
            }
        }
示例#2
0
        void PlayLoopOrNonLoopedFX(Entity e, string asset, FxName fxName, bool useEvolutionArgument)
        {
            if (!PTFXHelper.HasNamedPTFXAssetLoaded(asset))
            {
                PTFXHelper.RequestNamedPTFXAsset(asset);
                UI.ShowSubtitle("~r~ PTFX asset is not loaded, please try again ~n~ PTFX asset may not exist..");
            }

            if (PTFXHelper.HasNamedPTFXAssetLoaded(asset))
            {
                string  fxType;
                Vector3 pos = e.Position + e.ForwardVector * 2f + e.RightVector * 1.5f;

                fxHandle = PTFXHelper.SpawnPTFXOnEntity(asset, fxName.PTFXName, e, new Vector3(1.5f, 2f, 0f), new Vector3(0.0f, 0.0f, 180.0f), fxSize);
                fxType   = "Looped on Entity";

                /*if (!PTFXHelper.DoesPTFXLoopedExist(fxHandle))
                 * {
                 *  fxHandle = PTFXHelper.SpawnPTFXOnEntityBone(asset, fxname, e, default(Vector3), default(Vector3), (int)Bone.IK_R_Hand, fxSize);
                 *  fxType = "Looped on Entity Bone";
                 * }
                 *
                 * if (!PTFXHelper.DoesPTFXLoopedExist(fxHandle))
                 * {
                 *  fxHandle = PTFXHelper.SpawnPTFXOnPedBone(asset, fxname, (Ped)e, default(Vector3), default(Vector3), (int)Bone.IK_R_Hand, fxSize);
                 *  fxType = "Looped on Ped Bone";
                 * }*/

                if (!PTFXHelper.DoesPTFXLoopedExist(fxHandle))
                {
                    fxHandle = PTFXHelper.SpawnPTFXAtCoordinate(asset, fxName.PTFXName, pos, new Vector3(0, 0, 180.0f), fxSize);
                    fxType   = "Looped on Coordinate";
                }

                if (!PTFXHelper.DoesPTFXLoopedExist(fxHandle))
                {
                    PTFXHelper.StartPTFXOnEntity(asset, fxName.PTFXName, e, new Vector3(1.5f, 2f, 0f), new Vector3(0.0f, 0.0f, 180.0f), fxSize);
                    PTFXHelper.StartPTFXAtCoordinate(asset, fxName.PTFXName, pos, new Vector3(0, 0, 180.0f), fxSize);
                    fxType = "Non Looped on Entity or on Coordinate, or doesn't work :(";
                }

                UI.ShowSubtitle("PTFX Spawn Type: " + fxType);

                if (useEvolutionArgument && PTFXHelper.DoesPTFXLoopedExist(fxHandle))
                {
                    foreach (var evo in fxName.EvolutionList)
                    {
                        PTFXHelper.SetEvolution(fxHandle, evo.EvolutionName, evo.Amount);
                        PTFXHelper.SetAlpha(fxHandle, 1);
                    }
                }
            }
        }
示例#3
0
        private static void CamxxCore_Dump(ref List <FxAsset> fxAssets)
        {
            List <string> assetList = Directory.GetFiles(@"scripts\Particle Asset Dump").ToList();

            foreach (string txtFilePath in assetList)
            {
                string assetName = Path.GetFileNameWithoutExtension(txtFilePath);

                FxAsset asset = new FxAsset(assetName, new List <FxName>());

                List <string> lines = File.ReadAllLines(txtFilePath).ToList();

                foreach (string line in lines)
                {
                    if (line.Contains("\""))
                    {
                        var ptfxName = line.Split('\"', '\"')[1];

                        FxName fx = new FxName(ptfxName, new List <FxEvolution>());

                        if (line.Contains("->"))
                        {
                            var evolutionArgs = line.Substring(line.LastIndexOf("-> ") + 3);

                            if (evolutionArgs.Contains(","))
                            {
                                IList <string> evoArgList = evolutionArgs.Split(new string[] { ",", " " }, StringSplitOptions.RemoveEmptyEntries);
                                foreach (var arg in evoArgList)
                                {
                                    fx.EvolutionList.Add(new FxEvolution(arg, 1.0f));
                                }
                            }
                            else
                            {
                                fx.EvolutionList.Add(new FxEvolution(evolutionArgs, 1.0f));
                            }
                        }

                        asset.FxNames.Add(fx);
                    }
                }

                fxAssets.Add(asset);
            }
        }
示例#4
0
        private static void PtxEffectRuleToXML(PgDictionary *ptxRulesDict, FxAsset fxAsset)
        {
            for (var i = 0; i < ptxRulesDict->ItemsCount; i++)
            {
                var itAddress = Marshal.ReadIntPtr(ptxRulesDict->Items + i * 8);

                if (itAddress == IntPtr.Zero)
                {
                    continue;
                }

                var ptfxName = Marshal.PtrToStringAnsi(Marshal.ReadIntPtr(itAddress + 0x20));

                if (string.IsNullOrEmpty(ptfxName))
                {
                    continue;
                }

                FxName fx = new FxName(ptfxName, new List <FxEvolution>());

                var parameters = Marshal.ReadIntPtr(itAddress + 0x48);

                if (parameters != IntPtr.Zero)
                {
                    var parametersList = Marshal.ReadIntPtr(parameters);

                    var numParams = Marshal.ReadInt16(parameters + 0x8);

                    for (int p = 0; p < numParams; p++)
                    {
                        var itParam = parametersList + p * 0x18;

                        string evolutionParam = Marshal.PtrToStringAnsi(Marshal.ReadIntPtr(itParam));
                        fx.EvolutionList.Add(new FxEvolution(evolutionParam, 1.0f));
                    }
                }

                fxAsset.FxNames.Add(fx);
            }
        }