| | Emulator Server Guides Guides for working with World of Warcraft Emulator servers. Learn how to create a WoW Server here.
[NO QUESTIONS HERE] |  | 
07-19-2009
| | Master Sergeant | | | Join Date: Apr 2009
Posts: 131
Reputation: 53 Level up: 64%, 182 Points needed |     | | [GUIDE] More Advanced Lua 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
Player:AdvanceSkill(SKILLID[i], 400)
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)
pUnit:GossipCreateMenu(200, Player, 0)
pUnit:GossipMenuAddItem(10, "Advance My Skills!", 1, 0)
pUnit:GossipMenuAddItem(10, "Goodbye!", 2, 0)
pUnit:GossipSendMenu(Player)
end
function Skill_OnSelect(pUnit, event, Player, id, intid, Code, pMisc)
if intid == 1 then
for i,v in pairs(SKILLID) do
Player:AdvanceSkill(SKILLID[i], 400)
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
__________________ Don't Forget To Give Rep To People Who Help You. 
Last edited by Scubast3ve; 07-26-2009 at 05:22 AM.
| Donate to remove ads, get your "DONATOR title, and get access to the MMOwned community's elite Shoutbawx. 
07-19-2009
|  | Contributor | | | Join Date: Jun 2008 Location: can of duh
Posts: 117
Nominated 17 Times in 5 Posts Reputation: 104 Level up: 83%, 88 Points needed |  | | | Thanks for this, very helpful.
Good to see people posting new infornmation.
repx2 | 
07-20-2009
|  | Sergeant | | | Join Date: May 2008
Posts: 46
Reputation: 16 Level up: 68%, 162 Points needed |   | | 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 | 
07-20-2009
|  | Facebookering? Legendary User | | | Join Date: Jun 2007 Location: British Columbia
Posts: 2,411
Nominated 10 Times in 4 Posts Reputation: 703 Points: 20,929, Level: 20 | Level up: 9%, 1,471 Points needed |     | | | Good guide for those that didn't know this. +2
__________________ Be nice, enjoy MMOwned as a community, and the emu section is da bomb. Need help with emu? Post in the Questions forum and I will answer your replies as soon as I come online! | 
07-26-2009
| | Master Sergeant | | | Join Date: Apr 2009
Posts: 131
Reputation: 53 Level up: 64%, 182 Points needed |     | | | 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.
__________________ Don't Forget To Give Rep To People Who Help You.  |  |
Posting Rules
| You may not post new threads You may not post replies You may not post attachments You may not edit your posts HTML code is Off | | | All times are GMT -4. The time now is 10:09 AM. |