Hello There, Guest! Login or Register


Driver Jobs
#21
Please don't go off topic. If you have a suggestion of your own feel free to open your own topic.
Reply
#22
(03-05-2013, 01:24 PM)Jay link Wrote: I've just had a random idea that I'd be keen to implement:

Driver Jobs
"3/40 driver jobs complete!"

The idea

Special cars parked in specific locations. When a player enters one of these cars, they are prompted with a message:

You have entered a driver job car. Would you like to attempt the driver mission? Yes/No

If they click No they are ejected from the car.
If they click Yes...

We can mark vehicles as objectives, which will show a bouncing arrow above them.  Is this something we can do to clarify which vehicles are "mission vehicles"?  Otherwise it's rather vague.  I wouldn't like to enter a random vehicle and find out I can't drive it, because that's what I want to do when entering a vehicle.

Quote:A checkpoint shows at a location that has previously been set and the countdown begins.
For example, a player enters a special Super GT parked near the casino. They must drive to Los Santos Airport in 120 seconds. They cannot exit the car.
If they do it, they pass the driver job.

Leaving the car in similar minigames in Grand Theft Auto itself allows you to re-enter the car within a few seconds.  The Countdown class has half-implemented support for per-player countdowns (documentation), could we implement them as a screen-centered semi-transparent overlay with a number asking them to re-enter the car?  We may need some more advanced solution to clarify that they have to re-enter the vehicle however.

Quote:This has the same concept as hidden packages: We create about 40 of these jobs. For every one a player passes, a message shows: "x out of 40 driver jobs complete!".

For all fourty jobs you'd have to define (a) a starting point with a vehicle, (b) a destination and © measure what a reasonable time would be to drive there.  We don't want it to be too easy.  That's a lot of work.  In a later version of the feature it'd be nice to add "obstacles", i.e. closed roads or inconveniently parked vehicles.  Maybe we should start with a small number and then extend that?  We can store them in MySQL.

Quote:When a player finds all of the special cars and completes all of the driver jobs, they unlock a new command similar to /inf, but speaks for itself: /maverick.

For a helicopter?  I'm not really in favor of randomly spawning vehicles.  Furthermore, what happens if we add new driver job locations later on?  Do they lose the command until they finish all the new ones?  Instead, for each job we can define (a) the start position, (b) the end position and © a maximum time to do it.  Then, based on both the maximum and average time of all other players, we can define the reward (in dollars) which the player will be getting.

Quote:Each individual job can have different levels of difficulty. This system can be nice and dynamic so that its easy to add new driver jobs.

It should be fun for players because they have to:
- Explore to find these special vehicles

We can mark them as an objective to make them recognizable when they're in sight.  We can add them to the live map (both in-game and out-game) to make them discoverable, but we'll need an icon to display them.  Or do you want them to be completely hidden?  They will be really hard to find.

Quote:- When they finally find one they have to actually complete the mission, unlike the spraytags

Yes.  But they can retry if they fail, right?

Quote:- Its addicting: If a player misses the deadline by a few seconds they're gunna keep trying.

Agreed.  Is there a sign-up fee?  I guess it would be best to keep it free, I don't really see a reason to pay money for this.

Quote:- Its easy and fun to understand for new players.

Yup!  Great!

Quote:The implementation

Whilst I'd like this to be nice and dynamic, I don't see the need to include the possibility for any run-time editing of the job like changing the route or so on. I'd like to keep this short and sweet so everything works as expected, nice and easy. On this basis I also don't see the need to store anything (relating to the job data) externally.

We'd like to store all data externally, and limit the gamemode to logic.  You could use either a JSON file, a local SQLite database or the main MySQL database.  I would recommend using MySQL since it gives us more flexibility, and we could also display it on the website.

Quote:Whilst leaving options in for further improvement and expansion in the future, for now I only see the need for three classes:

Job - core class which maintains information relating to the state of the mission and attributes for controlling this. Contains information for the location of the completion point and time to complete it. Future expansion may include storing of best times but this will be omitted from the first version.

So there will be one Job instance per job?  That sounds reasonable.  What data will it store?  You'd need a vehicle coordinate, vehicle model Id, destination coordinate and maximum time.  In order to make it more dynamic, I'd also store the average time of previous players who finished it (and the count, so we can update this during gamemode runtime) and maybe the best time, including the player's name.  We can only record stores for registered players...

Quote:Vehicle - Subclass which stores information relating to the vehicle: State (in use? available?), (current) location. Any additional features that may be included such as distance to location meter could be included here. Again however, this will be omitted from the first version.

I wouldn't store this.  We can query whether the job is being played in a method similar to Job::isAssociatedVehicleOccupied().  If someone is in it, then it clearly is occupied.  Current location can be queried by GetVehiclePos, which also enables distance and all.  All of this is trivial.  If you want a richer UI, I would add a class like DriverJobUserInterface.

Quote:Player - Subclass which contains attributes for the player element that's taking part in the mission. Obviously given SA-MP's use of vehicles only one player can undertake a mission at any one time and this class needs to maintain this. Communication with the job class is obviously vital. It should also handle integration with the players account - each completed mission needs to be saved along with some stats such as times.

Would it make sense to generalize this to a much more general PlayerMinigameStatistics class?  It'd be nice if we can make this dynamic, and don't need to update the database structure every time a new minigame shows up.

I would suggest having the following classes:

Minigames/Gameplay/DrivingJobController.pwn
The controller receives related events (onPlayerEnterVehicle, onPlayerLeaveVehicle, a timer if it's running) and determines whether the player is in a driving job game.  Most of the logic for the minigame would be in here, whereas the DrivingJob class would mostly contain data.  We'd need some structure to quickly determine which job a player is interested in, to avoid having to loop through N driving job vehicles each time someone enters a car.

Minigames/Gameplay/DrivingJob.pwn
The data container for each individual driving job object.

Minigames/Gameplay/DrivingJobUserInterface.pwn
Do we need a user interface?  We can have DrivingJobController::startJobForPlayer and DrivingJobController::stopJobForPlayer which either create or destroy the UI for a certain player using this class.  This class would know about the driving job a player is involved in (i.e. by querying DrivingJobController::drivingJobIdForPlayer()), get the final destination from the DrivingJob class and then calculates the distance based on their current position.

I'm not sure yet what the /Gameplay/ directory should be.  It's the type of minigame this is, since I imagine we'll have more games here (when we rewrite the truck delivery game, for example).  Any suggestion?

Quote:If I get some time tomorrow morning I'll draw a detailed class diagram.

Thoughts?

I like this idea, thank you!  We'll need to work a bit on the implementation plan and I've got a few open questions, but this will definitely add value in a nice, discoverable way.
Reply
#23
I like the idea.

Participating in the mission should be optionally like in SP where you have to press the '2' button for an secondary mission after entering the vehicle. Players should be able to leave the vehicle and the mission should be canceled if they don't get back into the vehicle within 15 seconds. Damaging the vehicle should lower the reward, maybe display the damage on-screen. I would concentrate the missions around LV and the desert since there isn't any activity elsewhere on the map and things get boring. Next to an icon on the map lets put one of those red corona's over the special vehicles.

As per the reward, I agree with Russel that random vehicle spawns are not ideal. We could look into other rewards, for example an series of achievements which unlock special features like an spawnweapon slot that is kept over sessions or special hats (character customization).

It would be cool if there were some NPC involved, maybe an passenger or an person at the destination.

(03-07-2013, 04:23 PM)Jay link Wrote: I like this as it introduces the multiplayer side to the mission :)
Perhaps we could introduce a new feature: If you kill a player on one of these missions, you get +4 kills.

I don't like this at all, this will only lead to annoyed players and hunting.
Reply
#24
(03-12-2013, 07:57 PM)oostcoast link Wrote: As per the reward, I agree with Russel that random vehicle spawns are not ideal. We could look into other rewards, for example an series of achievements which unlock special features like an spawnweapon slot that is kept over sessions or special hats (character customization).
Anything other than money would do. For me money is absolutely not the reason to play minigames and other stuff anymore; my bank is full enough. Imo money balancing needs a bit of attention as well in order to bring in money rewards.
Reply
#25
Great idea!
Reply
#26
Stickied this topic in order to make progress happen between now and any date.
Reply
#27
Good luck!
Reply
#28
Great idea, didnt read all replies, and you dont need to reply on me, because maybe this has already been answered but i was wondering; is there gonna be a hint to where the car is at? Who sets the first tim to compete / complete the mission?

Please put it on the main norification board on www.sa-mp.nl when this is implemented, thank you

Greetings, Captaint
Reply