Tutorial: Easy Multi-user Quests

The Big S

New Member
Reaction score
6
(Hey guys - This is a small tutorial I made for my clan (Clan ORPG) and I thought I would share it with others - I'll be adding to it soon. I hope it helps!)


Tutorial Objectives: Upon completing this tutorial, users should be able to create dynamic quests for up to 12 players using a small amount of variables and triggers. These quests will be able to store just about any objective from killing X amount of creatures to delivering an item to someone.

(This tutorial was made by popular demand)

Tutorial Index:

To jump to a specific part of the tutorial, simply highlight the section name, copy it, and enter it into find (CTRL+F).

I. Introduction
II. Variables Needed
III. Our First Quest
IV. Tips for other quest types
V. Examples from Athelor ORPG
VI. Credits


I. Introduction

Have you ever wanted to create quests in a multiplayer game, whether it be an ORPG or a simple map? Most people use an approach which uses a huge amount of triggers and variables, which can take up un-needed space in your map and can be glitchy. Today you will learn how to create quests using 1-2 triggers, 3 maximum, and only 1-2 variables per quest.

To follow this tutorial without any problems, you will firstly need to be using the Warcraft III The Frozen Throne World Editor program. You also need to have a moderate knowledge of triggering and variable types/arrays.

II. Variables Needed

Firstly, all of our quests made using this system will be using a string array to store the status of the quest. Go ahead and set up the following variable:

Name: OurQuest
Type: String
Array: Yes; set the number of the array to the number of maximum user controlled players your map has.
Default Setting: "notstarted"

Now we have our basic quest variable. You'll see soon why using strings is so nice and simple.

III. Our First Quest

Today, I will walk you through how to create a simple delivery quest, as well as a tad more advanced kill X units quest. Let us start out with the delivery quest.

The quest objective in this delivery quest will be to deliver a letter from Jim to Bob. The letter is an item which will be called simply "Letter."

First, we will start out with acquiring/completing the quest. Create a unit and call him Jim, and then place him on the map wherever you want. Then create a new trigger. Let's call this trigger "QuestGiverTalk".

Now add the following events/conditions/actions to the trigger:

Events
- A unit comes within 100 feet of Jim 0001 <gen>

Conditions
- ((Entering Unit) is a hero) equal to True

Actions
If/Then/Else
If (All Conditions are true)
- OurQuest [(Player number of (Owner of (Triggering Unit)))] equal to "notstarted"
Then (Do Actions)
- Display to (Player Group (Owner of (Triggering Unit))) for 10 seconds the text "Quest Received: Deliver this letter to Bob!"
- Add Letter to (Triggering Unit)
- Set OurQuest [(Player number of (Owner of (Triggering Unit)))] equal to "started"
- Skip Remaining Actions
Else (Do Actions)
- Do Nothing
If/Then/Else
If (All conditions are true)
- OurQuest [(Player number of (Owner of (Triggering Unit)))] equal to "started"
Then (Do Actions)
- Display to (Player Group (Owner of (Triggering Unit)))] for 10 seconds the text "You already have this quest!"
- Skip Remaining Actions
Else (Do Actions)
- Do Nothing

Alright, now before you start panicking, lets look at this closely.

What this trigger does is, when a unit comes near the quest giver (Jim), and is a hero, the trigger executes.

First, it checks to see if you have the quest started or not. This is why we set the default for the string array to "notstarted", because when you start the game you have not completed any quests, nor started any.

If you have not started the quest, it gives you a little message saying you received the quest, adds the letter item to your inventory, and sets the status for your quest to "started". Why did we use "Player number of owner of triggering unit"? Because each number of the array corresponds to a player.

For example, OurQuest [1] is the quest status for player 1. OurQuest [2] for player 2, etc. So it updates the quest status only for the player who owned the unit that came in range of the quest giver.

Now we are going to make our second trigger, this time for finishing the quest by talking to Bob with the letter. Create a new trigger called "Finishquest".

Events
- A unit comes within 100 of Bob 0001 <gen>

Conditions
- ((Triggering Unit) is a hero) equal to True

Actions
If/Then/Else
If (All conditions are true)
- OurQuest [(Player number of (Owner of (Triggering Unit)))] equal to "started"
- ((Triggering Unit) has item of type Letter) equal to True
Then (Do Actions)
- Display to (Player group (Owner of (Triggering Unit)))] for 10 seconds the text "Quest Complete! Good job!"
- Remove item of type Letter from (Triggering Unit)
- Set OurQuest [(Player number of (Owner of (Triggering Unit)))] equal to "complete"
Else (Do Actions)
- Do Nothing

This trigger worked much the same way as the last. It just checked if the owner of the unit had indeed started the quest, and if they had the letter on them. If they did, it completed the quest for them. In addition, they now will not be able to retake the quest. (Although this can be changed if you wanted them to, just set OurQuest to "notstarted" instead of "complete")

IV. Tips For Other Quest Types

As I mentioned earlier, there really is no limit to what you can do with quests this way. Some quests, such as a kill X units quest will need two variables. One variable such as OurQuest (Array just like in the last example), as well as an integer array (With the array being the max amount of players). Then, just add a condition to the quest completion trigger:

- KillCount [(Player number of (Owner of (Triggering Unit)))] greater than or equal to 10

You would also need to have it update when you killed the correct unit type. Lets say we needed to kill 10 Trolls:

Events
- A unit dies

Conditions
- Unit type of (Dying Unit) equal to Troll
- ((Killing Unit) is a hero) equal to True

Actions
- Set KillCount [(Player number of (Owner of (Killing Unit)))] equal to KillCount [(Player number of (Owner of (Killing Unit)))] + 1
- Display to (Player group (Owner of (Killing Unit)))] for 10 seconds the text "Quest Update: You've killed a troll!"

This just adds one to the killcount every time you kill a troll. If you wanted to make it a set number like 10, just add the condition:

- KillCount [(Player number of (Owner of (Killing Unit)))] less than 10

So there you have it, an easy way to make killing quests and delivery quests!

V. Examples From Athelor ORPG

This section is coming soon!

VI. Credits

Tutorial created by The Big S
 
General chit-chat
Help Users
  • No one is chatting at the moment.
  • Ghan Ghan:
    Howdy
  • Ghan Ghan:
    Still lurking
    +3
  • The Helper The Helper:
    I am great and it is fantastic to see you my friend!
    +1
  • The Helper The Helper:
    If you are new to the site please check out the Recipe and Food Forum https://www.thehelper.net/forums/recipes-and-food.220/
  • Monovertex Monovertex:
    How come you're so into recipes lately? Never saw this much interest in this topic in the old days of TH.net
  • Monovertex Monovertex:
    Hmm, how do I change my signature?
  • tom_mai78101 tom_mai78101:
    Signatures can be edit in your account profile. As for the old stuffs, I'm thinking it's because Blizzard is now under Microsoft, and because of Microsoft Xbox going the way it is, it's dreadful.
  • The Helper The Helper:
    I am not big on the recipes I am just promoting them - I use the site as a practice place promoting stuff
    +2
  • Monovertex Monovertex:
    @tom_mai78101 I must be blind. If I go on my profile I don't see any area to edit the signature; If I go to account details (settings) I don't see any signature area either.
  • The Helper The Helper:
    You can get there if you click the bell icon (alerts) and choose preferences from the bottom, signature will be in the menu on the left there https://www.thehelper.net/account/preferences
  • The Helper The Helper:
    I think I need to split the Sci/Tech news forum into 2 one for Science and one for Tech but I am hating all the moving of posts I would have to do
  • The Helper The Helper:
    What is up Old Mountain Shadow?
  • The Helper The Helper:
    Happy Thursday!
    +1
  • Varine Varine:
    Crazy how much 3d printing has come in the last few years. Sad that it's not as easily modifiable though
  • Varine Varine:
    I bought an Ender 3 during the pandemic and tinkered with it all the time. Just bought a Sovol, not as easy. I'm trying to make it use a different nozzle because I have a fuck ton of Volcanos, and they use what is basically a modified volcano that is just a smidge longer, and almost every part on this thing needs to be redone to make it work
  • Varine Varine:
    Luckily I have a 3d printer for that, I guess. But it's ridiculous. The regular volcanos are 21mm, these Sovol versions are about 23.5mm
  • Varine Varine:
    So, 2.5mm longer. But the thing that measures the bed is about 1.5mm above the nozzle, so if I swap it with a volcano then I'm 1mm behind it. So cool, new bracket to swap that, but THEN the fan shroud to direct air at the part is ALSO going to be .5mm to low, and so I need to redo that, but by doing that it is a little bit off where it should be blowing and it's throwing it at the heating block instead of the part, and fuck man
  • Varine Varine:
    I didn't realize they designed this entire thing to NOT be modded. I would have just got a fucking Bambu if I knew that, the whole point was I could fuck with this. And no one else makes shit for Sovol so I have to go through them, and they have... interesting pricing models. So I have a new extruder altogether that I'm taking apart and going to just design a whole new one to use my nozzles. Dumb design.
  • Varine Varine:
    Can't just buy a new heatblock, you need to get a whole hotend - so block, heater cartridge, thermistor, heatbreak, and nozzle. And they put this fucking paste in there so I can't take the thermistor or cartridge out with any ease, that's 30 dollars. Or you can get the whole extrudor with the direct driver AND that heatblock for like 50, but you still can't get any of it to come apart
  • Varine Varine:
    Partsbuilt has individual parts I found but they're expensive. I think I can get bits swapped around and make this work with generic shit though
  • Ghan Ghan:
    Heard Houston got hit pretty bad by storms last night. Hope all is well with TH.
  • The Helper The Helper:
    Power back on finally - all is good here no damage
    +2
  • V-SNES V-SNES:
    Happy Friday!
    +1

      The Helper Discord

      Staff online

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top