{"slug":"graphics/ptfx/ptfx_assets_looped","category":"graphics","title":"Particle FX (looped)","kind":"table","intro":"\t\tEXAMPLE. MAKE FIRE BREATH FROM PED HEAD:\n------------------------------------------------------------------------------------------\n------------------------------------------------------------------------------------------\n\t\tlocal new_ptfx_dictionary = \"anm_fire_dancers\"\n\t\tlocal new_ptfx_name = \"ent_anim_fire_breathe_loop\"\n\n\t\tlocal is_particle_effect_active = false\n\t\tlocal current_ptfx_dictionary = new_ptfx_dictionary\n\t\tlocal current_ptfx_name = new_ptfx_name\n\n\t\tlocal current_ptfx_handle_id = false\n\n\t\tlocal bone_index = 247   -- [\"PH_Head\"]  = {bone_index = 247, bone_id = 57278},\n\n\t\tlocal ptfx_offcet_x = 0.0\n\t\tlocal ptfx_offcet_y = 0.0\n\t\tlocal ptfx_offcet_z = 0.0\n\t\tlocal ptfx_rot_x = -90.0\n\t\tlocal ptfx_rot_y = 0.0\n\t\tlocal ptfx_rot_z = 0.0\n\t\tlocal ptfx_scale = 1.0\n\t\tlocal ptfx_axis_x = 0\n\t\tlocal ptfx_axis_y = 0\n\t\tlocal ptfx_axis_z = 0\n\n\n\t\tCitizen.CreateThread(function()\n\t\t   \twhile true do\n\t\t        Citizen.Wait(0)\n\t\t        if Citizen.InvokeNative(0x91AEF906BCA88877,0, 0x17BEC168) then   -- just pressed E\n\t\t        \tif not is_particle_effect_active then\n\t\t        \t\tcurrent_ptfx_dictionary = new_ptfx_dictionary\n\t\t\t\t\t\tcurrent_ptfx_name = new_ptfx_name\n\t\t        \t\tif not Citizen.InvokeNative(0x65BB72F29138F5D6, GetHashKey(current_ptfx_dictionary)) then -- HasNamedPtfxAssetLoaded\n\t\t        \t\t\tCitizen.InvokeNative(0xF2B2353BBC0D4E8F, GetHashKey(current_ptfx_dictionary))  -- RequestNamedPtfxAsset\n\t\t        \t\t\tlocal counter = 0\n\t\t        \t\t\twhile not Citizen.InvokeNative(0x65BB72F29138F5D6, GetHashKey(current_ptfx_dictionary)) and counter <= 300 do  -- while not HasNamedPtfxAssetLoaded\n\t\t        \t\t\t\tCitizen.Wait(0)\n\t\t        \t\t\tend\n\t\t        \t\tend\n\t\t    \t\t\tif Citizen.InvokeNative(0x65BB72F29138F5D6, GetHashKey(current_ptfx_dictionary)) then  -- HasNamedPtfxAssetLoaded\n\t\t    \t\t\t\tCitizen.InvokeNative(0xA10DB07FC234DD12, current_ptfx_dictionary) -- UseParticleFxAsset\n\n\t\t    \t\t\t\tcurrent_ptfx_handle_id = Citizen.InvokeNative(0x9C56621462FFE7A6,current_ptfx_name,PlayerPedId(),ptfx_offcet_x,ptfx_offcet_y,ptfx_offcet_z,ptfx_rot_x,ptfx_rot_y,ptfx_rot_z,bone_index,ptfx_scale,ptfx_axis_x,ptfx_axis_y,ptfx_axis_z) -- StartNetworkedParticleFxLoopedOnEntityBone\n\t\t    \t\t\t\t--current_ptfx_handle_id =  Citizen.InvokeNative(0x8F90AB32E1944BDE,current_ptfx_name,PlayerPedId(),ptfx_offcet_x,ptfx_offcet_y,ptfx_offcet_z,ptfx_rot_x,ptfx_rot_y,ptfx_rot_z,ptfx_scale,ptfx_axis_x,ptfx_axis_y,ptfx_axis_z)    -- StartNetworkedParticleFxLoopedOnEntity\n\t\t    \t\t\t\tis_particle_effect_active = true\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tprint(\"cant load ptfx dictionary!\")\n\t\t    \t\t\tend\n\t\t        \telse\n\t\t        \t\tif current_ptfx_handle_id then\n\t\t\t\t\t\t\tif Citizen.InvokeNative(0x9DD5AFF561E88F2A, current_ptfx_handle_id) then   -- DoesParticleFxLoopedExist\n\t\t\t\t\t\t\t\tCitizen.InvokeNative(0x459598F579C98929, current_ptfx_handle_id, false)   -- RemoveParticleFx\n\t\t\t\t\t\t\tend\n\t\t\t\t\t\tend\n\t\t\t\t\t\tcurrent_ptfx_handle_id = false\n\t\t\t\t\t\tis_particle_effect_active = false\n\t\t        \tend\n\t\t        end\n\t\t    end\n\t\tend)\n\n----------------------------------------------------------------------------------------------------------------\n----------------------------------------------------------------------------------------------------------------\n ptfx_assets_looped = {\n \t[ptfx_dictionary] = {ptfx_name},\n }","tables":[{"id":35,"name":"ptfx_assets_looped","columns":["dictionary","effect"],"rows":1176}],"sourceUrl":"https://github.com/femga/rdr3_discoveries/blob/477aaaccadb7f0c042286611d9939009636cff12/graphics/ptfx/ptfx_assets_looped.lua","rows":[{"row":0,"cells":{"dictionary":"anm_climbing","effect":"ent_anim_climbing_debris"},"note":null},{"row":1,"cells":{"dictionary":"anm_climbing","effect":"ent_anim_debris_falling"},"note":null},{"row":2,"cells":{"dictionary":"scr_net_player_signal","effect":"scr_net_player_signal"},"note":null},{"row":3,"cells":{"dictionary":"des_alchemist","effect":"ent_amb_alchemist_post_cloud_smk"},"note":null},{"row":4,"cells":{"dictionary":"anm_crafting","effect":"ent_anim_bottle_pour_medicine"},"note":null},{"row":5,"cells":{"dictionary":"anm_crafting","effect":"ent_anim_cauldron_drugs"},"note":null},{"row":6,"cells":{"dictionary":"anm_crafting","effect":"ent_anim_craft_pestle_grind"},"note":null},{"row":7,"cells":{"dictionary":"anm_odr","effect":"ent_anim_odr_knife_meat"},"note":null},{"row":8,"cells":{"dictionary":"scr_mob2","effect":"scr_mob2_fog_cem"},"note":null},{"row":9,"cells":{"dictionary":"scr_beat_train_tracks","effect":"scr_beat_train_sparks"},"note":null},{"row":10,"cells":{"dictionary":"scr_native1","effect":"scr_native1_campfire_smoke"},"note":null},{"row":11,"cells":{"dictionary":"scr_campfires","effect":"ent_amb_campfire_smoke_distance"},"note":null},{"row":12,"cells":{"dictionary":"scr_campfires","effect":"ent_amb_campfire_smoke_distance_gang"},"note":null},{"row":13,"cells":{"dictionary":"cut_rdopn","effect":"cs_rdopn_faucet_pour"},"note":null},{"row":14,"cells":{"dictionary":"anm_water","effect":"ent_amb_water_drips_edge"},"note":null},{"row":15,"cells":{"dictionary":"anm_water","effect":"ent_anim_bottle_pour_water"},"note":null},{"row":16,"cells":{"dictionary":"anm_water","effect":"ent_anim_bottle_pour_whisky"},"note":null},{"row":17,"cells":{"dictionary":"anm_water","effect":"ent_anim_bubble_stream"},"note":null},{"row":18,"cells":{"dictionary":"anm_water","effect":"ent_anim_bubble_stream_ped"},"note":null},{"row":19,"cells":{"dictionary":"anm_water","effect":"ent_anim_mob5_face_drips"},"note":null},{"row":20,"cells":{"dictionary":"anm_water","effect":"ent_anim_moonshine_pour_shot"},"note":null},{"row":21,"cells":{"dictionary":"anm_water","effect":"ent_anim_ntv3_steam_leak"},"note":null},{"row":22,"cells":{"dictionary":"anm_water","effect":"ent_anim_oil_drips"},"note":null},{"row":23,"cells":{"dictionary":"anm_water","effect":"ent_anim_ped_finger_drips"},"note":null},{"row":24,"cells":{"dictionary":"anm_water","effect":"ent_anim_ped_ind3_water_drips"},"note":null},{"row":25,"cells":{"dictionary":"anm_water","effect":"ent_anim_ped_water_drips"},"note":null},{"row":26,"cells":{"dictionary":"anm_water","effect":"ent_anim_ped_water_wade_ripples"},"note":null},{"row":27,"cells":{"dictionary":"anm_water","effect":"ent_anim_sht_steam"},"note":null},{"row":28,"cells":{"dictionary":"anm_water","effect":"ent_anim_sht_steam_thick"},"note":null},{"row":29,"cells":{"dictionary":"anm_water","effect":"ent_anim_steam_horseboat_ripple"},"note":null},{"row":30,"cells":{"dictionary":"anm_water","effect":"ent_anim_steam_horseboat_splash"},"note":null},{"row":31,"cells":{"dictionary":"anm_water","effect":"ent_anim_water_bucket_drips"},"note":null},{"row":32,"cells":{"dictionary":"anm_water","effect":"ent_anim_water_bucket_fill"},"note":null},{"row":33,"cells":{"dictionary":"anm_water","effect":"ent_anim_water_gold_pan_loop"},"note":null},{"row":34,"cells":{"dictionary":"anm_water","effect":"ent_anim_water_kettle_splash_looped"},"note":null},{"row":35,"cells":{"dictionary":"anm_water","effect":"ent_anim_water_pan_submerge"},"note":null},{"row":36,"cells":{"dictionary":"anm_water","effect":"ent_anim_water_pump_pour"},"note":null},{"row":37,"cells":{"dictionary":"anm_water","effect":"ent_anim_water_shakeoff"},"note":null},{"row":38,"cells":{"dictionary":"anm_water","effect":"ent_anim_water_torture"},"note":null},{"row":39,"cells":{"dictionary":"anm_water","effect":"ent_anim_water_washing"},"note":null},{"row":40,"cells":{"dictionary":"anm_water","effect":"ent_anim_whiskey_pour_shot"},"note":null},{"row":41,"cells":{"dictionary":"scr_poisoned_well","effect":"scr_poisoned_well_fog_anim"},"note":null},{"row":42,"cells":{"dictionary":"anm_fin","effect":"ent_anim_fin_dislodged_gravel"},"note":null},{"row":43,"cells":{"dictionary":"anm_fin","effect":"ent_anim_fin_tackle_dust"},"note":null},{"row":44,"cells":{"dictionary":"anm_fin","effect":"ent_anim_fin_tackle_gravel"},"note":null},{"row":45,"cells":{"dictionary":"anm_fin","effect":"ent_anim_train_roll_dust"},"note":null},{"row":46,"cells":{"dictionary":"scr_mg_bathing","effect":"scr_mg_bathing_foam_forearm"},"note":null},{"row":47,"cells":{"dictionary":"scr_mg_bathing","effect":"scr_mg_bathing_foam_head"},"note":null},{"row":48,"cells":{"dictionary":"scr_mg_bathing","effect":"scr_mg_bathing_foam_torso"},"note":null},{"row":49,"cells":{"dictionary":"scr_mg_bathing","effect":"scr_mg_bathing_foam_upperarm"},"note":null},{"row":50,"cells":{"dictionary":"scr_mg_bathing","effect":"scr_mg_bathing_tub_steam"},"note":null},{"row":51,"cells":{"dictionary":"scr_winter1","effect":"scr_winter1_barn_snow"},"note":null},{"row":52,"cells":{"dictionary":"scr_winter1","effect":"scr_winter1_cabin_fire"},"note":null},{"row":53,"cells":{"dictionary":"scr_winter1","effect":"scr_winter1_cabin_fire_roof"},"note":null},{"row":54,"cells":{"dictionary":"scr_winter1","effect":"scr_winter1_cabin_fire_roof_fall"},"note":null},{"row":55,"cells":{"dictionary":"scr_winter1","effect":"scr_winter1_cloud_density_anim"},"note":null},{"row":56,"cells":{"dictionary":"scr_winter1","effect":"scr_winter1_fog_cover"},"note":null},{"row":57,"cells":{"dictionary":"scr_guama1","effect":"scr_guama1_ship_leaking"},"note":null},{"row":58,"cells":{"dictionary":"scr_net_dust","effect":"scr_flow_camp_mp"},"note":null},{"row":59,"cells":{"dictionary":"scr_fme_spawn_effects","effect":"scr_animal_poop_flies"},"note":null},{"row":60,"cells":{"dictionary":"cut_utopia2","effect":"cs_utopia2_water_drips"},"note":null},{"row":61,"cells":{"dictionary":"cut_utopia2","effect":"cs_utopia2_water_splash_loop"},"note":null},{"row":62,"cells":{"dictionary":"scr_hideout_shadybelle","effect":"scr_hideout_sb_fuse"},"note":null},{"row":63,"cells":{"dictionary":"anm_dishwash","effect":"ent_anim_dish_wash_arm_wade"},"note":null},{"row":64,"cells":{"dictionary":"anm_dishwash","effect":"ent_anim_dish_wash_bowl_drips"},"note":null},{"row":65,"cells":{"dictionary":"anm_dishwash","effect":"ent_anim_dish_wash_plate_drips"},"note":null},{"row":66,"cells":{"dictionary":"anm_dishwash","effect":"ent_anim_dish_wash_splashes"},"note":null},{"row":67,"cells":{"dictionary":"anm_dishwash","effect":"ent_anim_dish_wash_spoon_drips"},"note":null},{"row":68,"cells":{"dictionary":"scr_net_target_races","effect":"scr_net_target_fire_ring_mp"},"note":null},{"row":69,"cells":{"dictionary":"scr_net_pony_express","effect":"scr_net_race_smoke"},"note":null},{"row":70,"cells":{"dictionary":"scr_generic","effect":"ent_amb_insect_fly_swarm"},"note":null},{"row":71,"cells":{"dictionary":"scr_generic","effect":"env_smoke"},"note":null},{"row":72,"cells":{"dictionary":"scr_generic","effect":"scr_event_glint"},"note":null},{"row":73,"cells":{"dictionary":"scr_generic","effect":"scr_gen_shiny_bling"},"note":null},{"row":74,"cells":{"dictionary":"scr_marston","effect":"ent_amb_milk_bubbles"},"note":null},{"row":75,"cells":{"dictionary":"scr_marston","effect":"scr_mg_milking"},"note":null},{"row":76,"cells":{"dictionary":"scr_net_camp","effect":"eagle_eye_clue_animal_transform"},"note":null},{"row":77,"cells":{"dictionary":"scr_net_camp","effect":"scr_net_animal_ghost"},"note":null},{"row":78,"cells":{"dictionary":"scr_net_camp","effect":"scr_net_animal_ghost_boar"},"note":null},{"row":79,"cells":{"dictionary":"scr_net_camp","effect":"scr_net_animal_ghost_head"},"note":null},{"row":80,"cells":{"dictionary":"scr_net_camp","effect":"scr_net_animal_ghost_limb"},"note":null},{"row":81,"cells":{"dictionary":"scr_net_camp","effect":"scr_net_animal_ghost_sma"},"note":null},{"row":82,"cells":{"dictionary":"scr_net_camp","effect":"scr_net_spirit_animal_fade"},"note":null},{"row":83,"cells":{"dictionary":"scr_hideout_ironcloud","effect":"scr_ironcloud_fire_extinguish"},"note":null},{"row":84,"cells":{"dictionary":"scr_hideout_ironcloud","effect":"scr_ironcloud_fire_object"},"note":null},{"row":85,"cells":{"dictionary":"des_moon1","effect":"ent_anm_generic_fire_field"},"note":null},{"row":86,"cells":{"dictionary":"des_moon1","effect":"ent_ray_moon1_roof_fire"},"note":null},{"row":87,"cells":{"dictionary":"des_mob3","effect":"ent_ray_mob3_smoke_post"},"note":null},{"row":88,"cells":{"dictionary":"des_mob3","effect":"ent_ray_mob3_smoke_trail"},"note":null},{"row":89,"cells":{"dictionary":"des_mob3","effect":"ent_ray_mob3_trolley_sparks"},"note":null},{"row":90,"cells":{"dictionary":"des_mob3","effect":"scr_mob3_proj_dynamite_trail"},"note":null},{"row":91,"cells":{"dictionary":"scr_net_moon5","effect":"scr_net_moon2_still_fire"},"note":null},{"row":92,"cells":{"dictionary":"scr_net_moon5","effect":"scr_net_moon5_player_smoke"},"note":null},{"row":93,"cells":{"dictionary":"scr_discoverables","effect":"ent_amb_steam_geyser"},"note":null},{"row":94,"cells":{"dictionary":"scr_discoverables","effect":"ent_amb_witch_cauldron_bubble"},"note":null},{"row":95,"cells":{"dictionary":"scr_discoverables","effect":"ent_amb_witch_cauldron_steam"},"note":null},{"row":96,"cells":{"dictionary":"scr_discoverables","effect":"scr_disc_meteor_shower"},"note":null},{"row":97,"cells":{"dictionary":"scr_discoverables","effect":"scr_disc_whispering_trees"},"note":null},{"row":98,"cells":{"dictionary":"scr_sadie2","effect":"scr_sad2_liq_pour"},"note":null},{"row":99,"cells":{"dictionary":"scr_player_camp","effect":"ent_amb_campfire_dynamic"},"note":null}],"table":35}