dirk-cfx-react 1.1.81 → 1.1.83

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5856,6 +5856,503 @@ function AnimPostFxSelect({
5856
5856
  );
5857
5857
  }
5858
5858
 
5859
+ // src/utils/gtaScenarios.ts
5860
+ var GTA_SCENARIO_GROUP_ORDER = [
5861
+ "Sitting",
5862
+ "Standing & Idle",
5863
+ "Eating & Drinking",
5864
+ "Smoking & Substances",
5865
+ "Working",
5866
+ "Sports & Fitness",
5867
+ "Cops & Security",
5868
+ "Crime & Streets",
5869
+ "Tourists & Crowds",
5870
+ "Props (Misc)",
5871
+ "Movement",
5872
+ "Animals",
5873
+ "Vehicles",
5874
+ "Code (Advanced)"
5875
+ ];
5876
+ var GTA_SCENARIOS = [
5877
+ // ── Sitting ────────────────────────────────────────────────────────────────
5878
+ { name: "PROP_HUMAN_SEAT_ARMCHAIR", group: "Sitting" },
5879
+ { name: "PROP_HUMAN_SEAT_BAR", group: "Sitting" },
5880
+ { name: "PROP_HUMAN_SEAT_BENCH", group: "Sitting" },
5881
+ { name: "PROP_HUMAN_SEAT_BENCH_FACILITY", group: "Sitting" },
5882
+ { name: "PROP_HUMAN_SEAT_BENCH_DRINK", group: "Sitting" },
5883
+ { name: "PROP_HUMAN_SEAT_BENCH_DRINK_FACILITY", group: "Sitting" },
5884
+ { name: "PROP_HUMAN_SEAT_BENCH_DRINK_BEER", group: "Sitting" },
5885
+ { name: "PROP_HUMAN_SEAT_BENCH_FOOD", group: "Sitting" },
5886
+ { name: "PROP_HUMAN_SEAT_BENCH_FOOD_FACILITY", group: "Sitting" },
5887
+ { name: "PROP_HUMAN_SEAT_BUS_STOP_WAIT", group: "Sitting" },
5888
+ { name: "PROP_HUMAN_SEAT_CHAIR", group: "Sitting" },
5889
+ { name: "PROP_HUMAN_SEAT_CHAIR_DRINK", group: "Sitting" },
5890
+ { name: "PROP_HUMAN_SEAT_CHAIR_DRINK_BEER", group: "Sitting" },
5891
+ { name: "PROP_HUMAN_SEAT_CHAIR_FOOD", group: "Sitting" },
5892
+ { name: "PROP_HUMAN_SEAT_CHAIR_UPRIGHT", group: "Sitting" },
5893
+ { name: "PROP_HUMAN_SEAT_CHAIR_UPRIGHT_SHOWROOM", group: "Sitting" },
5894
+ { name: "PROP_HUMAN_SEAT_CHAIR_MP_PLAYER", group: "Sitting" },
5895
+ { name: "PROP_HUMAN_SEAT_COMPUTER", group: "Sitting" },
5896
+ { name: "PROP_HUMAN_SEAT_COMPUTER_LOW", group: "Sitting" },
5897
+ { name: "PROP_HUMAN_SEAT_DECKCHAIR", group: "Sitting" },
5898
+ { name: "PROP_HUMAN_SEAT_DECKCHAIR_DRINK", group: "Sitting" },
5899
+ { name: "PROP_HUMAN_SEAT_SEWING", group: "Sitting" },
5900
+ { name: "PROP_HUMAN_SEAT_STRIP_WATCH", group: "Sitting" },
5901
+ { name: "PROP_HUMAN_SEAT_SUNLOUNGER", group: "Sitting" },
5902
+ { name: "WORLD_HUMAN_SEAT_LEDGE", group: "Sitting" },
5903
+ { name: "WORLD_HUMAN_SEAT_LEDGE_EATING", group: "Sitting" },
5904
+ { name: "WORLD_HUMAN_SEAT_STEPS", group: "Sitting" },
5905
+ { name: "WORLD_HUMAN_SEAT_WALL", group: "Sitting" },
5906
+ { name: "WORLD_HUMAN_SEAT_WALL_EATING", group: "Sitting" },
5907
+ { name: "WORLD_HUMAN_SEAT_WALL_TABLET", group: "Sitting" },
5908
+ // ── Standing & Idle ────────────────────────────────────────────────────────
5909
+ { name: "Standing", group: "Standing & Idle" },
5910
+ { name: "WORLD_HUMAN_HANG_OUT_STREET", group: "Standing & Idle" },
5911
+ { name: "WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE", group: "Standing & Idle" },
5912
+ { name: "WORLD_HUMAN_LEANING", group: "Standing & Idle" },
5913
+ { name: "WORLD_HUMAN_LEANING_CASINO_TERRACE", group: "Standing & Idle" },
5914
+ { name: "WORLD_HUMAN_STAND_IMPATIENT", group: "Standing & Idle" },
5915
+ { name: "WORLD_HUMAN_STAND_IMPATIENT_CLUBHOUSE", group: "Standing & Idle" },
5916
+ { name: "WORLD_HUMAN_STAND_IMPATIENT_FACILITY", group: "Standing & Idle" },
5917
+ { name: "WORLD_HUMAN_STAND_IMPATIENT_UPRIGHT", group: "Standing & Idle" },
5918
+ { name: "WORLD_HUMAN_STAND_IMPATIENT_UPRIGHT_FACILITY", group: "Standing & Idle" },
5919
+ { name: "WORLD_HUMAN_STAND_MOBILE", group: "Standing & Idle" },
5920
+ { name: "WORLD_HUMAN_STAND_MOBILE_CLUBHOUSE", group: "Standing & Idle" },
5921
+ { name: "WORLD_HUMAN_STAND_MOBILE_FACILITY", group: "Standing & Idle" },
5922
+ { name: "WORLD_HUMAN_STAND_MOBILE_UPRIGHT", group: "Standing & Idle" },
5923
+ { name: "WORLD_HUMAN_STAND_MOBILE_UPRIGHT_CLUBHOUSE", group: "Standing & Idle" },
5924
+ { name: "WORLD_HUMAN_STAND_FIRE", group: "Standing & Idle" },
5925
+ { name: "WORLD_HUMAN_STAND_FISHING", group: "Standing & Idle" },
5926
+ { name: "PROP_HUMAN_STAND_IMPATIENT", group: "Standing & Idle" },
5927
+ // ── Eating & Drinking ──────────────────────────────────────────────────────
5928
+ { name: "WORLD_HUMAN_DRINKING", group: "Eating & Drinking" },
5929
+ { name: "WORLD_HUMAN_DRINKING_FACILITY", group: "Eating & Drinking" },
5930
+ { name: "WORLD_HUMAN_DRINKING_CASINO_TERRACE", group: "Eating & Drinking" },
5931
+ { name: "WORLD_HUMAN_PICNIC", group: "Eating & Drinking" },
5932
+ // ── Smoking & Substances ───────────────────────────────────────────────────
5933
+ { name: "WORLD_HUMAN_AA_COFFEE", group: "Smoking & Substances" },
5934
+ { name: "WORLD_HUMAN_AA_SMOKE", group: "Smoking & Substances" },
5935
+ { name: "WORLD_HUMAN_SMOKING", group: "Smoking & Substances" },
5936
+ { name: "WORLD_HUMAN_SMOKING_CLUBHOUSE", group: "Smoking & Substances" },
5937
+ { name: "WORLD_HUMAN_SMOKING_POT", group: "Smoking & Substances" },
5938
+ { name: "WORLD_HUMAN_SMOKING_POT_CLUBHOUSE", group: "Smoking & Substances" },
5939
+ { name: "WORLD_HUMAN_STUPOR", group: "Smoking & Substances" },
5940
+ { name: "WORLD_HUMAN_STUPOR_CLUBHOUSE", group: "Smoking & Substances" },
5941
+ // ── Working ────────────────────────────────────────────────────────────────
5942
+ { name: "WORLD_HUMAN_CAR_PARK_ATTENDANT", group: "Working" },
5943
+ { name: "WORLD_HUMAN_CLIPBOARD", group: "Working" },
5944
+ { name: "WORLD_HUMAN_CLIPBOARD_FACILITY", group: "Working" },
5945
+ { name: "WORLD_HUMAN_CONST_DRILL", group: "Working" },
5946
+ { name: "WORLD_HUMAN_GARDENER_LEAF_BLOWER", group: "Working" },
5947
+ { name: "WORLD_HUMAN_GARDENER_PLANT", group: "Working" },
5948
+ { name: "WORLD_HUMAN_HAMMERING", group: "Working" },
5949
+ { name: "WORLD_HUMAN_JANITOR", group: "Working" },
5950
+ { name: "WORLD_HUMAN_MAID_CLEAN", group: "Working" },
5951
+ { name: "WORLD_HUMAN_MUSICIAN", group: "Working" },
5952
+ { name: "WORLD_HUMAN_VALET", group: "Working" },
5953
+ { name: "WORLD_HUMAN_VEHICLE_MECHANIC", group: "Working" },
5954
+ { name: "WORLD_HUMAN_WELDING", group: "Working" },
5955
+ // ── Sports & Fitness ───────────────────────────────────────────────────────
5956
+ { name: "WORLD_HUMAN_GOLF_PLAYER", group: "Sports & Fitness" },
5957
+ { name: "WORLD_HUMAN_HIKER", group: "Sports & Fitness" },
5958
+ { name: "WORLD_HUMAN_HIKER_STANDING", group: "Sports & Fitness" },
5959
+ { name: "WORLD_HUMAN_JOG", group: "Sports & Fitness" },
5960
+ { name: "WORLD_HUMAN_JOG_STANDING", group: "Sports & Fitness" },
5961
+ { name: "WORLD_HUMAN_MUSCLE_FLEX", group: "Sports & Fitness" },
5962
+ { name: "WORLD_HUMAN_MUSCLE_FREE_WEIGHTS", group: "Sports & Fitness" },
5963
+ { name: "WORLD_HUMAN_POWER_WALKER", group: "Sports & Fitness" },
5964
+ { name: "WORLD_HUMAN_PUSH_UPS", group: "Sports & Fitness" },
5965
+ { name: "WORLD_HUMAN_SIT_UPS", group: "Sports & Fitness" },
5966
+ { name: "WORLD_HUMAN_SUNBATHE", group: "Sports & Fitness" },
5967
+ { name: "WORLD_HUMAN_SUNBATHE_BACK", group: "Sports & Fitness" },
5968
+ { name: "WORLD_HUMAN_SWIMMING", group: "Sports & Fitness" },
5969
+ { name: "WORLD_HUMAN_TENNIS_PLAYER", group: "Sports & Fitness" },
5970
+ { name: "WORLD_HUMAN_YOGA", group: "Sports & Fitness" },
5971
+ { name: "PROP_HUMAN_MUSCLE_CHIN_UPS", group: "Sports & Fitness" },
5972
+ { name: "PROP_HUMAN_MUSCLE_CHIN_UPS_ARMY", group: "Sports & Fitness" },
5973
+ { name: "PROP_HUMAN_MUSCLE_CHIN_UPS_PRISON", group: "Sports & Fitness" },
5974
+ { name: "PROP_HUMAN_SEAT_MUSCLE_BENCH_PRESS", group: "Sports & Fitness" },
5975
+ { name: "PROP_HUMAN_SEAT_MUSCLE_BENCH_PRESS_PRISON", group: "Sports & Fitness" },
5976
+ // ── Cops & Security ────────────────────────────────────────────────────────
5977
+ { name: "WORLD_HUMAN_COP_IDLES", group: "Cops & Security" },
5978
+ { name: "WORLD_HUMAN_GUARD_PATROL", group: "Cops & Security" },
5979
+ { name: "WORLD_HUMAN_GUARD_STAND", group: "Cops & Security" },
5980
+ { name: "WORLD_HUMAN_GUARD_STAND_CASINO", group: "Cops & Security" },
5981
+ { name: "WORLD_HUMAN_GUARD_STAND_CLUBHOUSE", group: "Cops & Security" },
5982
+ { name: "WORLD_HUMAN_GUARD_STAND_FACILITY", group: "Cops & Security" },
5983
+ { name: "WORLD_HUMAN_GUARD_STAND_ARMY", group: "Cops & Security" },
5984
+ { name: "WORLD_HUMAN_SECURITY_SHINE_TORCH", group: "Cops & Security" },
5985
+ // ── Crime & Streets ────────────────────────────────────────────────────────
5986
+ { name: "WORLD_HUMAN_DRUG_DEALER", group: "Crime & Streets" },
5987
+ { name: "WORLD_HUMAN_DRUG_DEALER_HARD", group: "Crime & Streets" },
5988
+ { name: "WORLD_HUMAN_DRUG_FIELD_WORKERS_RAKE", group: "Crime & Streets" },
5989
+ { name: "WORLD_HUMAN_DRUG_FIELD_WORKERS_WEEDING", group: "Crime & Streets" },
5990
+ { name: "WORLD_HUMAN_DRUG_PROCESSORS_COKE", group: "Crime & Streets" },
5991
+ { name: "WORLD_HUMAN_DRUG_PROCESSORS_WEED", group: "Crime & Streets" },
5992
+ { name: "WORLD_HUMAN_PROSTITUTE_HIGH_CLASS", group: "Crime & Streets" },
5993
+ { name: "WORLD_HUMAN_PROSTITUTE_LOW_CLASS", group: "Crime & Streets" },
5994
+ { name: "WORLD_HUMAN_BUM_FREEWAY", group: "Crime & Streets" },
5995
+ { name: "WORLD_HUMAN_BUM_SLUMPED", group: "Crime & Streets" },
5996
+ { name: "WORLD_HUMAN_BUM_STANDING", group: "Crime & Streets" },
5997
+ { name: "WORLD_HUMAN_BUM_WASH", group: "Crime & Streets" },
5998
+ { name: "PROP_HUMAN_BUM_BIN", group: "Crime & Streets" },
5999
+ { name: "PROP_HUMAN_BUM_SHOPPING_CART", group: "Crime & Streets" },
6000
+ // ── Tourists & Crowds ──────────────────────────────────────────────────────
6001
+ { name: "WORLD_HUMAN_BINOCULARS", group: "Tourists & Crowds" },
6002
+ { name: "WORLD_HUMAN_CHEERING", group: "Tourists & Crowds" },
6003
+ { name: "WORLD_HUMAN_HUMAN_STATUE", group: "Tourists & Crowds" },
6004
+ { name: "WORLD_HUMAN_INSPECT_CROUCH", group: "Tourists & Crowds" },
6005
+ { name: "WORLD_HUMAN_INSPECT_STAND", group: "Tourists & Crowds" },
6006
+ { name: "WORLD_HUMAN_MOBILE_FILM_SHOCKING", group: "Tourists & Crowds" },
6007
+ { name: "WORLD_HUMAN_PAPARAZZI", group: "Tourists & Crowds" },
6008
+ { name: "WORLD_HUMAN_PARTYING", group: "Tourists & Crowds" },
6009
+ { name: "WORLD_HUMAN_STRIP_WATCH_STAND", group: "Tourists & Crowds" },
6010
+ { name: "WORLD_HUMAN_SUPERHERO", group: "Tourists & Crowds" },
6011
+ { name: "WORLD_HUMAN_TOURIST_MAP", group: "Tourists & Crowds" },
6012
+ { name: "WORLD_HUMAN_TOURIST_MOBILE", group: "Tourists & Crowds" },
6013
+ { name: "WORLD_HUMAN_WINDOW_SHOP_BROWSE", group: "Tourists & Crowds" },
6014
+ { name: "WORLD_HUMAN_WINDOW_SHOP_BROWSE_SHOWROOM", group: "Tourists & Crowds" },
6015
+ // ── Props (Misc) ───────────────────────────────────────────────────────────
6016
+ { name: "PROP_HUMAN_ATM", group: "Props (Misc)" },
6017
+ { name: "PROP_HUMAN_BBQ", group: "Props (Misc)" },
6018
+ { name: "PROP_HUMAN_PARKING_METER", group: "Props (Misc)" },
6019
+ { name: "PROP_HUMAN_MOVIE_BULB", group: "Props (Misc)" },
6020
+ { name: "PROP_HUMAN_MOVIE_STUDIO_LIGHT", group: "Props (Misc)" },
6021
+ { name: "PROP_BIRD_IN_TREE", group: "Props (Misc)" },
6022
+ { name: "PROP_BIRD_TELEGRAPH_POLE", group: "Props (Misc)" },
6023
+ // ── Movement ───────────────────────────────────────────────────────────────
6024
+ { name: "Walk", group: "Movement" },
6025
+ { name: "Walk_Facility", group: "Movement" },
6026
+ // ── Animals ────────────────────────────────────────────────────────────────
6027
+ { name: "WORLD_BOAR_GRAZING", group: "Animals" },
6028
+ { name: "WORLD_CAT_SLEEPING_GROUND", group: "Animals" },
6029
+ { name: "WORLD_CAT_SLEEPING_LEDGE", group: "Animals" },
6030
+ { name: "WORLD_COW_GRAZING", group: "Animals" },
6031
+ { name: "WORLD_COYOTE_HOWL", group: "Animals" },
6032
+ { name: "WORLD_COYOTE_REST", group: "Animals" },
6033
+ { name: "WORLD_COYOTE_WANDER", group: "Animals" },
6034
+ { name: "WORLD_COYOTE_WALK", group: "Animals" },
6035
+ { name: "WORLD_CHICKENHAWK_FEEDING", group: "Animals" },
6036
+ { name: "WORLD_CHICKENHAWK_STANDING", group: "Animals" },
6037
+ { name: "WORLD_CORMORANT_STANDING", group: "Animals" },
6038
+ { name: "WORLD_CROW_FEEDING", group: "Animals" },
6039
+ { name: "WORLD_CROW_STANDING", group: "Animals" },
6040
+ { name: "WORLD_DEER_GRAZING", group: "Animals" },
6041
+ { name: "WORLD_DOG_BARKING_ROTTWEILER", group: "Animals" },
6042
+ { name: "WORLD_DOG_BARKING_RETRIEVER", group: "Animals" },
6043
+ { name: "WORLD_DOG_BARKING_SHEPHERD", group: "Animals" },
6044
+ { name: "WORLD_DOG_BARKING_SMALL", group: "Animals" },
6045
+ { name: "WORLD_DOG_SITTING_ROTTWEILER", group: "Animals" },
6046
+ { name: "WORLD_DOG_SITTING_RETRIEVER", group: "Animals" },
6047
+ { name: "WORLD_DOG_SITTING_SHEPHERD", group: "Animals" },
6048
+ { name: "WORLD_DOG_SITTING_SMALL", group: "Animals" },
6049
+ { name: "WORLD_DOLPHIN_SWIM", group: "Animals" },
6050
+ { name: "WORLD_FISH_FLEE", group: "Animals" },
6051
+ { name: "WORLD_FISH_IDLE", group: "Animals" },
6052
+ { name: "WORLD_GULL_FEEDING", group: "Animals" },
6053
+ { name: "WORLD_GULL_STANDING", group: "Animals" },
6054
+ { name: "WORLD_HEN_FLEE", group: "Animals" },
6055
+ { name: "WORLD_HEN_PECKING", group: "Animals" },
6056
+ { name: "WORLD_HEN_STANDING", group: "Animals" },
6057
+ { name: "WORLD_MOUNTAIN_LION_REST", group: "Animals" },
6058
+ { name: "WORLD_MOUNTAIN_LION_WANDER", group: "Animals" },
6059
+ { name: "WORLD_ORCA_SWIM", group: "Animals" },
6060
+ { name: "WORLD_PIG_GRAZING", group: "Animals" },
6061
+ { name: "WORLD_PIGEON_FEEDING", group: "Animals" },
6062
+ { name: "WORLD_PIGEON_STANDING", group: "Animals" },
6063
+ { name: "WORLD_RABBIT_EATING", group: "Animals" },
6064
+ { name: "WORLD_RABBIT_FLEE", group: "Animals" },
6065
+ { name: "WORLD_RATS_EATING", group: "Animals" },
6066
+ { name: "WORLD_RATS_FLEEING", group: "Animals" },
6067
+ { name: "WORLD_SHARK_SWIM", group: "Animals" },
6068
+ { name: "WORLD_SHARK_HAMMERHEAD_SWIM", group: "Animals" },
6069
+ { name: "WORLD_STINGRAY_SWIM", group: "Animals" },
6070
+ { name: "WORLD_WHALE_SWIM", group: "Animals" },
6071
+ // ── Vehicles ───────────────────────────────────────────────────────────────
6072
+ { name: "DRIVE", group: "Vehicles" },
6073
+ { name: "PARK_VEHICLE", group: "Vehicles" },
6074
+ { name: "WORLD_VEHICLE_ATTRACTOR", group: "Vehicles" },
6075
+ { name: "WORLD_VEHICLE_AMBULANCE", group: "Vehicles" },
6076
+ { name: "WORLD_VEHICLE_BICYCLE_BMX", group: "Vehicles" },
6077
+ { name: "WORLD_VEHICLE_BICYCLE_BMX_BALLAS", group: "Vehicles" },
6078
+ { name: "WORLD_VEHICLE_BICYCLE_BMX_FAMILY", group: "Vehicles" },
6079
+ { name: "WORLD_VEHICLE_BICYCLE_BMX_HARMONY", group: "Vehicles" },
6080
+ { name: "WORLD_VEHICLE_BICYCLE_BMX_VAGOS", group: "Vehicles" },
6081
+ { name: "WORLD_VEHICLE_BICYCLE_MOUNTAIN", group: "Vehicles" },
6082
+ { name: "WORLD_VEHICLE_BICYCLE_ROAD", group: "Vehicles" },
6083
+ { name: "WORLD_VEHICLE_BIKE_OFF_ROAD_RACE", group: "Vehicles" },
6084
+ { name: "WORLD_VEHICLE_BIKER", group: "Vehicles" },
6085
+ { name: "WORLD_VEHICLE_BOAT_IDLE", group: "Vehicles" },
6086
+ { name: "WORLD_VEHICLE_BOAT_IDLE_ALAMO", group: "Vehicles" },
6087
+ { name: "WORLD_VEHICLE_BOAT_IDLE_MARQUIS", group: "Vehicles" },
6088
+ { name: "WORLD_VEHICLE_BROKEN_DOWN", group: "Vehicles" },
6089
+ { name: "WORLD_VEHICLE_BUSINESSMEN", group: "Vehicles" },
6090
+ { name: "WORLD_VEHICLE_CLUCKIN_BELL_TRAILER", group: "Vehicles" },
6091
+ { name: "WORLD_VEHICLE_CONSTRUCTION_SOLO", group: "Vehicles" },
6092
+ { name: "WORLD_VEHICLE_CONSTRUCTION_PASSENGERS", group: "Vehicles" },
6093
+ { name: "WORLD_VEHICLE_DISTANT_EMPTY_GROUND", group: "Vehicles" },
6094
+ { name: "WORLD_VEHICLE_DRIVE_PASSENGERS", group: "Vehicles" },
6095
+ { name: "WORLD_VEHICLE_DRIVE_PASSENGERS_LIMITED", group: "Vehicles" },
6096
+ { name: "WORLD_VEHICLE_DRIVE_SOLO", group: "Vehicles" },
6097
+ { name: "WORLD_VEHICLE_EMPTY", group: "Vehicles" },
6098
+ { name: "WORLD_VEHICLE_FARM_WORKER", group: "Vehicles" },
6099
+ { name: "WORLD_VEHICLE_FIRE_TRUCK", group: "Vehicles" },
6100
+ { name: "WORLD_VEHICLE_HELI_LIFEGUARD", group: "Vehicles" },
6101
+ { name: "WORLD_VEHICLE_MARIACHI", group: "Vehicles" },
6102
+ { name: "WORLD_VEHICLE_MECHANIC", group: "Vehicles" },
6103
+ { name: "WORLD_VEHICLE_MILITARY_PLANES_BIG", group: "Vehicles" },
6104
+ { name: "WORLD_VEHICLE_MILITARY_PLANES_SMALL", group: "Vehicles" },
6105
+ { name: "WORLD_VEHICLE_PARK_PARALLEL", group: "Vehicles" },
6106
+ { name: "WORLD_VEHICLE_PARK_PERPENDICULAR_NOSE_IN", group: "Vehicles" },
6107
+ { name: "WORLD_VEHICLE_PASSENGER_EXIT", group: "Vehicles" },
6108
+ { name: "WORLD_VEHICLE_POLICE_BIKE", group: "Vehicles" },
6109
+ { name: "WORLD_VEHICLE_POLICE_CAR", group: "Vehicles" },
6110
+ { name: "WORLD_VEHICLE_POLICE_NEXT_TO_CAR", group: "Vehicles" },
6111
+ { name: "WORLD_VEHICLE_QUARRY", group: "Vehicles" },
6112
+ { name: "WORLD_VEHICLE_SALTON", group: "Vehicles" },
6113
+ { name: "WORLD_VEHICLE_SALTON_DIRT_BIKE", group: "Vehicles" },
6114
+ { name: "WORLD_VEHICLE_SECURITY_CAR", group: "Vehicles" },
6115
+ { name: "WORLD_VEHICLE_STREETRACE", group: "Vehicles" },
6116
+ { name: "WORLD_VEHICLE_TANDL", group: "Vehicles" },
6117
+ { name: "WORLD_VEHICLE_TOURBUS", group: "Vehicles" },
6118
+ { name: "WORLD_VEHICLE_TOURIST", group: "Vehicles" },
6119
+ { name: "WORLD_VEHICLE_TRACTOR", group: "Vehicles" },
6120
+ { name: "WORLD_VEHICLE_TRACTOR_BEACH", group: "Vehicles" },
6121
+ { name: "WORLD_VEHICLE_TRUCK_LOGS", group: "Vehicles" },
6122
+ { name: "WORLD_VEHICLE_TRUCKS_TRAILERS", group: "Vehicles" },
6123
+ // ── Code (Advanced) ────────────────────────────────────────────────────────
6124
+ // These are engine-internal scenarios — rarely the right pick for cinematic
6125
+ // ped placements, but exposed because the game-data dump includes them.
6126
+ { name: "CODE_HUMAN_COWER", group: "Code (Advanced)" },
6127
+ { name: "CODE_HUMAN_CROSS_ROAD_WAIT", group: "Code (Advanced)" },
6128
+ { name: "CODE_HUMAN_PARK_CAR", group: "Code (Advanced)" },
6129
+ { name: "CODE_HUMAN_MEDIC_KNEEL", group: "Code (Advanced)" },
6130
+ { name: "CODE_HUMAN_MEDIC_TEND_TO_DEAD", group: "Code (Advanced)" },
6131
+ { name: "CODE_HUMAN_MEDIC_TIME_OF_DEATH", group: "Code (Advanced)" },
6132
+ { name: "CODE_HUMAN_POLICE_CROWD_CONTROL", group: "Code (Advanced)" },
6133
+ { name: "CODE_HUMAN_POLICE_INVESTIGATE", group: "Code (Advanced)" },
6134
+ { name: "CODE_HUMAN_STAND_COWER", group: "Code (Advanced)" },
6135
+ { name: "CHAINING_ENTRY", group: "Code (Advanced)" },
6136
+ { name: "CHAINING_EXIT", group: "Code (Advanced)" },
6137
+ { name: "EAR_TO_TEXT", group: "Code (Advanced)" },
6138
+ { name: "EAR_TO_TEXT_FAT", group: "Code (Advanced)" },
6139
+ { name: "WORLD_LOOKAT_POINT", group: "Code (Advanced)" }
6140
+ ];
6141
+ var PREFIX_RE = /^(WORLD|PROP|CODE)_(HUMAN_|BIRD_|VEHICLE_|CAT_|DOG_|COYOTE_|FISH_|HEN_|GULL_|CROW_|RABBIT_|RATS_|SHARK_|PIGEON_|ORCA_|WHALE_|STINGRAY_|DOLPHIN_|MOUNTAIN_LION_|PIG_|COW_|DEER_|BOAR_|CHICKENHAWK_|CORMORANT_)?/;
6142
+ function formatGtaScenario(name) {
6143
+ if (!name) return "";
6144
+ const stripped = name.replace(PREFIX_RE, "");
6145
+ const cleaned = stripped.length > 0 ? stripped : name;
6146
+ return cleaned.toLowerCase().split("_").filter(Boolean).map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
6147
+ }
6148
+ function buildGroupedData3(extraNames = []) {
6149
+ const groups = /* @__PURE__ */ new Map();
6150
+ const seen = /* @__PURE__ */ new Set();
6151
+ for (const sc of GTA_SCENARIOS) {
6152
+ if (seen.has(sc.name)) continue;
6153
+ seen.add(sc.name);
6154
+ if (!groups.has(sc.group)) groups.set(sc.group, []);
6155
+ groups.get(sc.group).push(sc);
6156
+ }
6157
+ const data = GTA_SCENARIO_GROUP_ORDER.flatMap((g) => {
6158
+ const items = groups.get(g);
6159
+ if (!items || items.length === 0) return [];
6160
+ return [
6161
+ {
6162
+ group: g,
6163
+ items: items.map((sc) => ({
6164
+ value: sc.name,
6165
+ label: sc.label ?? formatGtaScenario(sc.name)
6166
+ }))
6167
+ }
6168
+ ];
6169
+ });
6170
+ const knownNames = new Set(GTA_SCENARIOS.map((sc) => sc.name));
6171
+ const customs = extraNames.filter((n) => n && !knownNames.has(n));
6172
+ if (customs.length > 0) {
6173
+ data.push({
6174
+ group: "Custom",
6175
+ items: customs.map((n) => ({ value: n, label: n }))
6176
+ });
6177
+ }
6178
+ return data;
6179
+ }
6180
+ function ScenarioSelect({
6181
+ value,
6182
+ onChange,
6183
+ label = "Scenario",
6184
+ size = "xs",
6185
+ searchable = true,
6186
+ clearable = true,
6187
+ ...rest
6188
+ }) {
6189
+ const data = buildGroupedData3([value]);
6190
+ return /* @__PURE__ */ jsxRuntime.jsx(
6191
+ core.Select,
6192
+ {
6193
+ label,
6194
+ size,
6195
+ searchable,
6196
+ clearable,
6197
+ maxDropdownHeight: 320,
6198
+ nothingFoundMessage: "No matching scenarios",
6199
+ placeholder: "Pick a scenario...",
6200
+ ...rest,
6201
+ data,
6202
+ value: value || null,
6203
+ onChange: (v) => onChange(v ?? "")
6204
+ }
6205
+ );
6206
+ }
6207
+ function decimalToHex(color) {
6208
+ if (!color || color === 0) return null;
6209
+ return "#" + color.toString(16).padStart(6, "0");
6210
+ }
6211
+ function RoleOption({ role }) {
6212
+ const swatch = decimalToHex(role.color) || "rgba(255,255,255,0.25)";
6213
+ return /* @__PURE__ */ jsxRuntime.jsxs(core.Flex, { align: "center", gap: "0.6vh", children: [
6214
+ /* @__PURE__ */ jsxRuntime.jsx(
6215
+ "div",
6216
+ {
6217
+ style: {
6218
+ width: "1vh",
6219
+ height: "1vh",
6220
+ borderRadius: "50%",
6221
+ background: swatch,
6222
+ flexShrink: 0,
6223
+ boxShadow: role.color ? `0 0 0.4vh ${swatch}` : void 0
6224
+ }
6225
+ }
6226
+ ),
6227
+ /* @__PURE__ */ jsxRuntime.jsx(core.Text, { size: "xs", c: "rgba(255,255,255,0.9)", children: role.name })
6228
+ ] });
6229
+ }
6230
+ function NotConfiguredBanner({ label }) {
6231
+ const theme = core.useMantineTheme();
6232
+ return /* @__PURE__ */ jsxRuntime.jsxs(core.Flex, { direction: "column", gap: "xxs", children: [
6233
+ label && /* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xxs", tt: "uppercase", lts: "0.05em", c: "rgba(255,255,255,0.55)", children: label }),
6234
+ /* @__PURE__ */ jsxRuntime.jsxs(
6235
+ core.Flex,
6236
+ {
6237
+ align: "center",
6238
+ gap: "xs",
6239
+ px: "xs",
6240
+ py: "xxs",
6241
+ style: {
6242
+ background: "rgba(0,0,0,0.3)",
6243
+ border: "0.1vh dashed rgba(255,255,255,0.12)",
6244
+ borderRadius: theme.radius.xs
6245
+ },
6246
+ children: [
6247
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ExternalLink, { size: "1.4vh", color: "rgba(255,255,255,0.4)" }),
6248
+ /* @__PURE__ */ jsxRuntime.jsx(core.Text, { ff: "Akrobat Bold", size: "xxs", c: "rgba(255,255,255,0.55)", style: { flex: 1 }, children: locale("DiscordNotConfigured") || "Discord bot not configured \u2014 run /dirk_lib and set a bot token + guild ID." })
6249
+ ]
6250
+ }
6251
+ )
6252
+ ] });
6253
+ }
6254
+ function DiscordRoleSelect(props) {
6255
+ const { endpoint, label, size = "xs", placeholder, disabled, style, styles } = props;
6256
+ const [roles, setRoles] = react.useState(null);
6257
+ const [loading, setLoading] = react.useState(false);
6258
+ const [errorCode, setErrorCode] = react.useState(null);
6259
+ const refresh = async () => {
6260
+ setLoading(true);
6261
+ try {
6262
+ const res = await fetchNui(endpoint, {}, {
6263
+ // Browser dev fallback so the component renders something useful
6264
+ // outside FiveM.
6265
+ ok: true,
6266
+ roles: [
6267
+ { id: "1", name: "Admin", color: 15548997, position: 5 },
6268
+ { id: "2", name: "VIP Gold", color: 16426522, position: 4 },
6269
+ { id: "3", name: "Member", color: 5763719, position: 3 },
6270
+ { id: "4", name: "Guest", color: 0, position: 2 }
6271
+ ]
6272
+ });
6273
+ if (res?.ok) {
6274
+ setRoles(res.roles ?? []);
6275
+ setErrorCode(null);
6276
+ } else {
6277
+ setRoles(null);
6278
+ setErrorCode(res?._error || "FetchFailed");
6279
+ }
6280
+ } finally {
6281
+ setLoading(false);
6282
+ }
6283
+ };
6284
+ react.useEffect(() => {
6285
+ refresh();
6286
+ }, [endpoint]);
6287
+ const rolesById = react.useMemo(() => {
6288
+ const map = {};
6289
+ for (const r of roles ?? []) map[r.id] = r;
6290
+ return map;
6291
+ }, [roles]);
6292
+ if (errorCode === "NotConfigured") {
6293
+ return /* @__PURE__ */ jsxRuntime.jsx(NotConfiguredBanner, { label });
6294
+ }
6295
+ const data = (roles ?? []).map((r) => ({
6296
+ value: r.id,
6297
+ label: r.name
6298
+ }));
6299
+ const renderOption = ({ option }) => {
6300
+ const role = rolesById[option.value];
6301
+ return role ? /* @__PURE__ */ jsxRuntime.jsx(RoleOption, { role }) : /* @__PURE__ */ jsxRuntime.jsx(core.Text, { size: "xs", children: option.label });
6302
+ };
6303
+ const refreshButton = /* @__PURE__ */ jsxRuntime.jsx(
6304
+ core.ActionIcon,
6305
+ {
6306
+ size: "xs",
6307
+ variant: "subtle",
6308
+ onClick: refresh,
6309
+ title: locale("Refresh") || "Refresh",
6310
+ loading,
6311
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.RefreshCw, { size: "1.2vh" })
6312
+ }
6313
+ );
6314
+ if (props.multi) {
6315
+ return /* @__PURE__ */ jsxRuntime.jsx(
6316
+ core.MultiSelect,
6317
+ {
6318
+ label,
6319
+ size,
6320
+ placeholder: placeholder || locale("PickRoles") || "Pick roles...",
6321
+ data,
6322
+ value: props.value || [],
6323
+ onChange: (ids) => props.onChange(ids),
6324
+ renderOption,
6325
+ searchable: true,
6326
+ clearable: true,
6327
+ disabled: disabled || loading && !roles,
6328
+ rightSection: refreshButton,
6329
+ style,
6330
+ styles,
6331
+ nothingFoundMessage: errorCode ? `${locale("Error") || "Error"} (${errorCode})` : locale("NoRoles") || "No roles found"
6332
+ }
6333
+ );
6334
+ }
6335
+ return /* @__PURE__ */ jsxRuntime.jsx(
6336
+ core.Select,
6337
+ {
6338
+ label,
6339
+ size,
6340
+ placeholder: placeholder || locale("PickRole") || "Pick a role...",
6341
+ data,
6342
+ value: props.value || null,
6343
+ onChange: (id) => props.onChange(id),
6344
+ renderOption,
6345
+ searchable: true,
6346
+ clearable: true,
6347
+ disabled: disabled || loading && !roles,
6348
+ rightSection: refreshButton,
6349
+ style,
6350
+ styles,
6351
+ nothingFoundMessage: errorCode ? `${locale("Error") || "Error"} (${errorCode})` : locale("NoRoles") || "No roles found"
6352
+ }
6353
+ );
6354
+ }
6355
+
5859
6356
  exports.AdminPageTitle = AdminPageTitle;
5860
6357
  exports.AnimPostFxSelect = AnimPostFxSelect;
5861
6358
  exports.AsyncSaveButton = AsyncSaveButton;
@@ -5868,6 +6365,7 @@ exports.ConfirmModal = ConfirmModal;
5868
6365
  exports.ControlMultiSelect = ControlMultiSelect;
5869
6366
  exports.ControlSelect = ControlSelect;
5870
6367
  exports.Counter = Counter;
6368
+ exports.DiscordRoleSelect = DiscordRoleSelect;
5871
6369
  exports.FiveMKeyBindInput = FiveMKeyBindInput;
5872
6370
  exports.FloatingParticles = FloatingParticles;
5873
6371
  exports.GroupName = GroupName;
@@ -5890,6 +6388,7 @@ exports.NavigationContext = NavigationContext;
5890
6388
  exports.NavigationProvider = NavigationProvider;
5891
6389
  exports.PositionPicker = PositionPicker;
5892
6390
  exports.PromptModal = PromptModal;
6391
+ exports.ScenarioSelect = ScenarioSelect;
5893
6392
  exports.SegmentedControl = SegmentedControl;
5894
6393
  exports.SegmentedProgress = SegmentedProgress;
5895
6394
  exports.SelectItem = SelectItem;