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: 325

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.
  • Varine Varine:
    Apparently ABS emits styrene particulates which can be like .2 micrometers, which idk if the VOC detectors I have can even catch that
  • Varine Varine:
    Anyway I need to get some of those sensors and two air pressure sensors installed before an after the filters, which I need to figure out how to calculate the necessary pressure for and I have yet to find anything that tells me how to actually do that, just the cfm ratings
  • Varine Varine:
    And then I have to set up an arduino board to read those sensors, which I also don't know very much about but I have a whole bunch of crash course things for that
  • Varine Varine:
    These sensors are also a lot more than I thought they would be. Like 5 to 10 each, idk why but I assumed they would be like 2 dollars
  • Varine Varine:
    Another issue I'm learning is that a lot of the air quality sensors don't work at very high ambient temperatures. I'm planning on heating this enclosure to like 60C or so, and that's the upper limit of their functionality
  • Varine Varine:
    Although I don't know if I need to actually actively heat it or just let the plate and hotend bring the ambient temp to whatever it will, but even then I need to figure out an exfiltration for hot air. I think I kind of know what to do but it's still fucking confusing
  • The Helper The Helper:
    Maybe you could find some of that information from AC tech - like how they detect freon and such
  • Varine Varine:
    That's mostly what I've been looking at
  • Varine Varine:
    I don't think I'm dealing with quite the same pressures though, at the very least its a significantly smaller system. For the time being I'm just going to put together a quick scrubby box though and hope it works good enough to not make my house toxic
  • Varine Varine:
    I mean I don't use this enough to pose any significant danger I don't think, but I would still rather not be throwing styrene all over the air
  • The Helper The Helper:
    New dessert added to recipes Southern Pecan Praline Cake https://www.thehelper.net/threads/recipe-southern-pecan-praline-cake.193555/
  • The Helper The Helper:
    Another bot invasion 493 members online most of them bots that do not show up on stats
  • Varine Varine:
    I'm looking at a solid 378 guests, but 3 members. Of which two are me and VSNES. The third is unlisted, which makes me think its a ghost.
    +1
  • The Helper The Helper:
    Some members choose invisibility mode
    +1
  • The Helper The Helper:
    I bitch about Xenforo sometimes but it really is full featured you just have to really know what you are doing to get the most out of it.
  • The Helper The Helper:
    It is just not easy to fix styles and customize but it definitely can be done
  • The Helper The Helper:
    I do know this - xenforo dropped the ball by not keeping the vbulletin reputation comments as a feature. The loss of the Reputation comments data when we switched to Xenforo really was the death knell for the site when it came to all the users that left. I know I missed it so much and I got way less interested in the site when that feature was gone and I run the site.
  • Blackveiled Blackveiled:
    People love rep, lol
    +1
  • The Helper The Helper:
    The recipe today is Sloppy Joe Casserole - one of my faves LOL https://www.thehelper.net/threads/sloppy-joe-casserole-with-manwich.193585/
  • The Helper The Helper:
    Decided to put up a healthier type recipe to mix it up - Honey Garlic Shrimp Stir-Fry https://www.thehelper.net/threads/recipe-honey-garlic-shrimp-stir-fry.193595/
  • The Helper The Helper:
    Here is another comfort food favorite - Million Dollar Casserole - https://www.thehelper.net/threads/recipe-million-dollar-casserole.193614/

      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