Jaszczureq Posted July 23, 2020 Share Posted July 23, 2020 Hi. I'm trying to figure out how to interact with collectibles using scripthookVdotnet. What I want to do is to make GTA more like some Ubi-game- in collectibles matter. I love free roaming through GTA map and collect stuff but keeping record of what I've picked up drives me nuts. There are mods that adds blips to map with collectibles but that's it. I still have to keep track by myself of which collectible I took etc. It's time to make use of CS degree :P. I want this script to read list of collectibles from f.e. file, add those points to map and every time I pick up something to then remove it from this file. The main problem is with that interaction. Cant figure out how to make my script react or event find method or prop that would say what collectibles I've already collected. Any kind of help would be appreciated. Thanks in advance, homies. Link to comment Share on other sites More sharing options...
LeeC22 Posted July 23, 2020 Share Posted July 23, 2020 (edited) In the simplest scenario, you'd have your collection of CollectableObjects stored in the data file with a value that says if they've been collected or not. You'd read that data file into the script and create a List<CollectableObject> of the objects that haven't been marked as collected, using the list of positions for those objects stored in your script. You would cycle through the objects in the List, to determine if you were in checking range of any of those objects. Once you got within a certain distance from an object's position, you would create a Pickup:- Pickup myPickup = World.CreatePickup(...); You'd have to use intellisense in Visual Studio to see what options you have for that and see if any seemed suitable. While you remained inside the checking distance, you could use:- if (myPickup.IsCollected) { } When it passed the check, you would mark that object as collected, remove it from the List<CollectableObject> and update the data file. If you moved outside the checking range, you would simply delete the created pickup. Make sure to make the checking distance for deleting the Prop bigger than the checking distance for creating it, so you don't cause frequent deletion > creation > deletion as you move in and out of range. CheckingDistance * 1f for creating and CheckingDistance * 1.5f for deleting would work well enough, depending on how far away you want it to be visible from. Or if you don't want to be limited by the Pickup choices, you could create a CustomPickup class that used any Prop in the game instead of the Pickup object and use your own proximity check to decide when you were close enough to collect the object. Then you follow the same process of marking it as collected, remove it from the List etc... You'd use this instead of the Pickup creation:- Prop myCustomPickup = World.CreateProp(...); Your data file could be as simple as a string of 000000010001010111000011010 to represent the collected state if that's all it needed to do. If you are looking to use a lot of collectables, use distance-squared for "in-the-nearby-area" proximity checking as it is much faster. and then use the World.GetDistance(...) function for precise collection checking on the closest collectable. Disclaimer: I have no experience using the Pickup objects but I have created many mods using proximity based processes. Edited July 23, 2020 by LeeC22 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now