JASS 101 Classroom

Status
Not open for further replies.
I

IKilledKEnny

Guest
JASS 101: Basic Jass Classrom
Lesson 4: Loops & If / Then / Else

Greeting

Here we are already, at the fourth lesson. The last lesson’s assignment was:

Well, this is the end of this lesson (which was surprisingly short), for your "home work" you must create a function that gets inside local variables the triggering unit, the target unit of the spell and it's location as well the owners of both units. After that increase the gold value of the owner of the casting unit by 200, and reduce the owner of the target's gold by 200. Lastly move the caster to the target's location.

The best works were made by:

DrinkSlum
Purgeandfire
Andrewgosu

The all got 100/100 for their assignments.

JASS:

function Trig_Untitled_Trigger_001_Actions takes nothing returns nothing
local unit caster=GetTriggerUnit() // The caster is stored in a local
local unit target=GetSpellTargetUnit() // The target is stored in a local
local player casterOwner=GetOwningPlayer(caster) // The owner of the caster is stored in a local
local player targetOwner=GetOwningPlayer(target) // The owner of the target is stoed in a local
local location targetLoc=GetUnitLoc(target) // The location of the target is stored in a local

call SetPlayerState(casterOwner,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(casterOwner,PLAYER_STATE_RESOURCE_GOLD)+200) // We set casterOwner’s gold to a new one
call SetPlayerState(targetOwner,PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(targetOwner,PLAYER_STATE_RESOURCE_GOLD)+200) // We set targetOwner’s gold to a new one

call SetUnitLocPositionLoc(caster,targetLoc) // We move caster to targetLoc
endfunction


This was enough to get a perfect grade.

Here is the lesson plan:
Lesson 4: Loops & If / Then / Else
What are Loops?
What is If / Then / Else?
Conclusion
Assignment

I suggest reading the lesson in the order presented, skipping parts may shorten the read but in the future it will only harm you

What are Loops?

In this chapter loops will be explained in detail, what are they, how the can be used and what is the dangers when using the

What are loops? Loops store in themselves actions (you can think of them as mini-triggers) which will run until a condition is met. For example you can create a loop that will run 15 times, and each time it will create a unit.

How do we start loop? Well it’s simple you type in a new line “loop”

JASS:
 loop


After that you need to declare a condition, this can be done like so:

JASS:
 exitwhen condition


Where’s condition is a condition that can change. After that you type the actions that will be repeated and then close the loop by typing endloop. Here is an example:

JASS:

local integer i=3
loop
  exitwhen i>5
  // Here we’ll do some random actions, this part has nothing to do with out chapter
  set i=i+1
endloop


As you can see what this loop will do is run until i (which is 3) will be bigger then 5 where we increase i’s size every run (set i=i+1). This could be done also like this:

JASS:

local integer i_2=-5
loop
  exitwhen i>-3
  // actions
  set i=i+1
endloop


As you can see, the two loops will run the same amount of times (2 times each). The best thing in Jass’es loops is that they are flexible. Unlike GUI loops, where you run until some integer is equal to another you can do anything in JASS loops.

JASS:

  exitwhen GetPlayerState(arguments) == 200
  exitwhen LocalUnitVar==null

etc


Those are just two out of the many examples that can serve as exitwhen condition, the JASS loops can introduce you to a whole new world of possibilities when working with loops and totally edit them, doing whatever you want.

However, while JASS loops are great there are 2 problems with them. The first one is that that the loops might cause world editor to crash if you forget to add at the end of the loop ‘endloop’. Secondly a bad exitwhen condition will cause the game to crash because the loop will last forever. Here is an example

JASS:

loop 
  exithwen 5555 > 9090905
  // Blah blah
endloop


5555 will never be bigger then 9090905, thus the loop will run until the game will crash.

Challenge 1: Create a loop that will run until a unit steps into a region.




If you did the following you get 100 points:

JASS:

loop
  exitwhen RectContainsUnit(SomeRect, SomeUnit)
endloop


Challenge 2: Create a loop that will create 5 soldier for player.



Solution:
JASS:

local integer i=1

loop
  exitwhen 1>5
  CreateUnitAtLoc(RandomPlayer,SomeID,SomeLoc,SomeReal)
  set i=i+1
endloop


One more thing before we can move to if / then / else actions. Unlike GUI you can force a loop to stop. In certain situations this can be extremely helpful to you, since sometimes you would want to “skip remaining actions” but only inside a loop. How can this be done? Easily, remember that we said we need to set a condition for the loop so it will not run forever? Well, how do we set the condition? “Exitwhen some condition”. Understanding that we can say that once we get “exitwhen true” the loop will stop. Thus the line

JASS:

exitwhen true


Will stop the loop immediately. For example this loop:

JASS:

loop 
exitwhen true
// do something
endloop


Will not run even one time because we quit it immediately.

So those are basic loops, not much to say about those because they vary so much, let’s move on to If / Then / Else actions.

What is If / Then / Else

I’ll discuss in this chapter if / then / else action, how to work with it and what is it’s dangers

Loops were easy right? Well so is if / then /else action. If / Then / Else like loops is an action that contain actions in it. The way if / then /else works is like so: You declare a condition that the If / Then / Else action will refer to. If the condition is true it will do one set of actions, if the condition is false it will do other set of actions. Like in loops we need to end the if / then / else were world editor will crash. We use endif instead of endloop. This is how we create if / then /else action:

JASS:

if somecondtion then
  // The actions that will run when the condition is true
else 
  // The other set of actions
endif


There are few ways to work with condition. If you are referring to a Boolean then you can do

JASS:

if SomeBoolean then
etc.

The action that I just showed is exactly like:

JASS:

if SomeBoolean ==true then
etc.


Also

JASS:

if not(SomeBooleab) then
etc


Is

JASS:

if SomeBoolean == false then
etc.


When working with integer / reals you might want to check sizes. This can be done easily following this list:

Code:
== Equal to…
=! Not equal to…
>= Greater or equal to…
=< Smaller or equal to…
> Greater then…
< Smaller then..

Example:

JASS:

if 3 &gt; 5 then
  // These actions will never run because 3 can’t be bigger then 5.
else
  // These actions will run because 3 is smaller then 5
endif


Challenge 3: Create if / then / else action that check which player got more gold, blue or red.



Solution:

JASS:

if GetPlayerState(Player(0),PLAYER_STATE_RESOURCE_GOLD)&gt;GetPlayerState(Player(1),PLAYER_STATE_RESOURCE_GOLD) then
  // Actions
else
  // Other actions
endif


There are two last things you need to know before you have a complete basic knowledge of if / then / else. The first thing is, is that you don’t have to put the else line. For example, you want to have only one set of actions that will run only if the condition is true. Very well no need to add the else line. For example:

JASS:

if condition then
do something
endif


this is legal, what it would do is simply run actions only when the condition is true but will ignore it if it is false.

The other thing is that there is another command called “elseif”. Elseif much like it sounds is else that calls an immediate if / then / else actions.

For example:

JASS:

if condition then
something
elseif condition then
something
endif


This is the exact same thing as this:

JASS:

if condition then
something
else
if condition then
something
endif
endif


And that’s it! You have a basic knowledge of if / then / else actions and loops.

Conclusion

We know then that if / then / else and loops must be closed or they crash world editor.
When working with loops we define a condition that will cause the loop to stop, and the loop will run the actions in it until the condition is met. If / Then / Else actions will get a condition, if the condition is true one set of the actions will run, else other set will run. Loops can be forced to stop easily and if / then / else has few shortcuts to ease our lives.

Assignment

Create a loop that will run until player red has 9000 gold. Each run give him 500 gold more. If he player red has more then 2000 gold, then remove 100 of his gold, if he has over 5000 then remove 300 of his gold if he has over 800 decrease it by 400. In other words:

Code:
Create a loop that will run until player red has more then 9000 gold.
  Each time the loop runs add the player 500 gold.
  Create an if then else action/s,
    If player red has over 2000 gold then remove 100 from his current gold
    If player red has over 5000 gold then remove 300 from his current gold
    Finally if player red has over 8000 gold remove 400 from his current gold
 

Attachments

  • JASS 101 Lesson 4.doc
    41.5 KB · Views: 330

elmstfreddie

The Finglonger
Reaction score
203
1:45 in the morning??? You ees crazee!
Ok, done. Handing in.

However I feel that if/then/elses are pretty self-explanatory :p
 

elmstfreddie

The Finglonger
Reaction score
203
If it weren't what good would it be?
No matter what the 3rd condition would always be true :rolleyes:
So yes, inside the loop.
 

elmstfreddie

The Finglonger
Reaction score
203
Does it matter?
If it's before it adds like 1 extra loop. That takes what? A millisecond? microsecond???
lol, just bothering you.
Think about it though...
 

elmstfreddie

The Finglonger
Reaction score
203
He didn't say so, so just assume you don't.
So pretty much you will instantly get 9000 gold or whatever, but it's the fact you did the coding right I guess.
 

elmstfreddie

The Finglonger
Reaction score
203
"that's what we used in the old days"
..
lol
sad.
Anyways, get JASSCraft or JASSEditor as he said. I don't make anything in WE really...
 
I

IKilledKEnny

Guest
> 1:45 in the morning

It was 10 A.M. here when I posted the thread, we live in different parts of the world. ;)

> Should the if/then/elses be in the loop?

Yes.

> Should it check the gold before you add it or after you add it?

After you add the 500 gold you should check how much gold the player has, but it doesn't really matter, just for pratice.

> DO i need wait on the loop

No need.

Thanks to Tom Jones's comments, the lesson will be updated soon enough, I will bump this thread when it does.

Please excuse me in advanced for double posting.
 

ertaboy356b

Old School Gamer
Reaction score
86
I just have no time to make the assignment.. I'm far away from home right now, so I don't have WE... Anyway, I brought JassCraft with me and created this function... I wonder if its correct.. haven't Tested it...

_____________________________________________________________________________________
Deleted... ^_^
 
Status
Not open for further replies.
General chit-chat
Help Users
  • No one is chatting at the moment.
  • Monovertex Monovertex:
    How are you all? :D
    +1
  • 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

      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