Well no one here seems to appreciate the many features of lua and i hope that this can help you make your code alot smaller.

I am going to be working with a "For Loop" and an "Array."

For those of you have done any programming before you should know how arrays and loops work so you should be able to grasp this alot faster.

First i will show you how to declare your "Array." The array will be named "SKILLID," the only way that a name impacts on your code is when you use names where you either use them again in your code or use invalid characters. Trying sticking to just letters.

The Declaration:
Code:
`SKILLID = {43, 44, 45, 46, 54, 55, 95, 136, 160, 162, 172, 173, 176, 226, 227, 228, 229, 473, 633}`

As you know SKILLID is the array and so is assigned data with the "=" in this first statement. The data is contained within {}. Brackets define the type of data to be stored in a variable, {} defines that the data is an array. Incase you are wondering, variables in this language are not primarily integers, strings, bools or anything else you wish to dream of. Lua will assign the most relevant variable type. Back to the lesson. You will see data contained within the brackets, just as a reference these are skill id's. This data is split up into different pieces with a ", " which is how each number is given it's own index in the array. An index is a number given to a point in any array. In Lua the index starts with a 1 and then moves up one every time.

Now that you know how and why everything is where it is, you will be shown how calling from an array can be done.

Knowing that an index starts at 1 a person could assume that 43 would be assigned an index of 1. Using this data again is very simple.

x = SKILLID[1]

In this example x has been assigned the number 43. This was just a bit of show and tell but it should help if you can figure it out then you know that SKILLID[2] has the number 44 in it.

Moving on in the lesson, Loops:
Code:
```for i,v in pairs(SKILLID) do
end```

This type of loop is called a "For Loop." A for loop will start at the lowest index and move through to the highest.

The loop will be declared by the for command. "i,v" are two variables. "i" is the variable that stores the index, hence "i". "v" is the variable that holds the value at the current index, hence "v". You can use anything not just these but they are the most logical choice.

"in pairs(SKILLID)" declares that the current index from the array SKILLID will be stored in "i" and the value of that position will be stored in "v." Lucky last on the first line is "do," this initiates the for and it will begin looping until the last index of the array.

Most people should be familiar with "Player:AdvanceSkill()" so this isn't something that needs explaining but the data inside does. Remembering the basics on index's? Well this is where you can put the into action. There are two things you can do at this point. You could declare "Player:AdvanceSkill()" as "Player:AdvanceSkill(v, 400)" or "Player:AdvanceSkill(SKILLID[i], 400). The first example uses the data currently stored in "v." The second one uses the current index, "i" as was done before to get the stored value. Another really important part is "end" just like in every if and anything you use don't for get to end it.

Now i thought that my code was sexy and great example of why loops are so important in this kind of thing it could save you 17+ lines of code. ^^
Code:
```SKILLID = {43, 44, 45, 46, 54, 55, 95, 136, 160, 162, 172, 173, 176, 226, 227, 228, 229, 473, 633}

function Skill_OnGossip(pUnit, event, Player)
end

function Skill_OnSelect(pUnit, event, Player, id, intid, Code, pMisc)
if intid == 1 then
for i,v in pairs(SKILLID) do
end
end
Player:GossipComplete()
end

RegisterUnitGossipEvent(NPCID, 1, "Skill_OnGossip")
RegisterUnitGossipEvent(NPCID, 2, "Skill_OnSelect")```

Hope this tutorial made the subject covered alot easier to understand. If you have any questions please leave them below.

Regards,
Scuba <3

2. Thanks for this, very helpful.

Good to see people posting new infornmation.

repx2

3. wow good post, is very nice knowlege to know

rep x 2

P.S. i would space it out and lower the size, its hard to read, like a wall of text XD

4. Good guide for those that didn't know this. +2

5. Spaced i guess ^^ i'm no good at this kind of thing. And it's good to hear that you guys find this a good guide.

6. Hahaha. Man i didn't know anything 2 years ago =]

Funny to look back on old work

7. Good guide, thanks.

8. Can someone please for the sake of god and every human with eyes, please edit his font colour ?