Difference between revisions of "Talk:Scripting Tutorial: My Second Script"
imported>GuidoBot (section request) |
imported>GuidoBot m (forgot to sign) |
||
Line 43: | Line 43: | ||
#Buggy lazy logic. e.g. for '''if x == 4 && y == IsInCombat'''. Sometimes a set of conditions on one line do not get compiled correctly. Often best to use nested '''if''' blocks instead. Very hard to know when this has or is going to happen. | #Buggy lazy logic. e.g. for '''if x == 4 && y == IsInCombat'''. Sometimes a set of conditions on one line do not get compiled correctly. Often best to use nested '''if''' blocks instead. Very hard to know when this has or is going to happen. | ||
If this stuff has been covered already then feel free to remove or move this from the discussion. Instead please add a link or links to the relevent articles in your article. | If this stuff has been covered already then feel free to remove or move this from the discussion. Instead please add a link or links to the relevent articles in your article. [[User:GuidoBot|GuidoBot]] 19:24, 19 October 2006 (EDT) |
Revision as of 18:24, 19 October 2006
1st) thanks for this great tutorial! Really well made!
2nd) in case of a a wrong answer the controlvar has to be reset to "0" not to "-1". I already corrected it in your last code-example. --Jeepcreep 15:32, 30 May 2006 (EDT)
for the sake of consistency: changed it in the previous code snippets as well. N.B.: Setting the controlvar to "-1" prevents to OnActivate from ever succeeding. The if-condition "==" could've been changed to "<" but then you're explanation regarding the double-equal sign would've been inconsistent. Hope this is ok. --Jeepcreep 15:40, 30 May 2006 (EDT)
- Have you tested it? If so, does it still work? TheImperialDragon 16:24, 30 May 2006 (EDT)
- I've tested it and it only works that way anyhow. The first version simply does not produce the desired result: setting the controlvar to -1 after a wrong answer won't get you in the If-block of the OnActive-block again (as it tested for "controlvar == 0"), resulting in the cupboard actually not responding at all, you had two chances: either give the correct answer and open it and be happy or give the wrong answer, be punished and never be able to open it anyway.... --Jeepcreep 16:34, 30 May 2006 (EDT)
- Yeah, but isn't that the way it's supposed to work? I copied this from the article itself.
What do we want?
"Before we really start writing our tutorial script we should decide what we want it to do! For this tutorial we are going to make a Riddle Cupboard: The cupboard will ask a riddle and only the right answer will open the cupboard. If the player provides the wrong answer, a trap will go off, hurting the player, and the cupboard can't be opened. That’s a fairly complex undertaking, but we will take it step by step and see that it's not so bad after all."
- So I assume after one wrong answer, it is supposed to be sealed forever, unless the player reloads a save game. TheImperialDragon 16:45, 30 May 2006 (EDT)
- Hrm.. haven't seen it that way - but you might be right indeed. Well in that case, I'll just change it back to the old values then. However, this does not make too much sense, this double-punishes the player, first with a lightning bolt, then with forever sealing the chest not giving him any chance of rethink his/her error.. but if that's the way it's supposed to be, then so shall it be :) nevermind --Jeepcreep 16:54, 30 May 2006 (EDT)
Hey, that's by me
Hadn't noticed this had made it here. Neat :) And great job converting it for Oblivion, I actually learned a couple of things myself :) --GhanBuriGhan 12:56, 28 July 2006 (EDT)
Section request
Firstly, nice job! I wondered if you wouldn't mind adding a section on the script compiler (interpretor) quirks and general things to use or watch out for? To get you started, and by way of example:
- Uses of space, comma and parenthesis. Arguments to commands have to be separated by spaces or/and commas. Commas are treated as spaces and are not necessary. You cannot use spaces in math expressions without parenthesis. For example, set x to a + b is not compiled correctly but set x to a+b and set x to (a + b) are. Note: set x to a-b is not compiled but set x to (a)-b is fine. (Compiler glitch.) Spaces around logical evaluators are optional, i.e. a==1 and a == 1 are equivalent(?).
- Use of ';' for comments and debugging.
- Use of Message for debugging.
- Matching Begin with End in blocks, and not confusing with endif.
Compiler glitches to watch for - i.e. things that the compiler doesn't pick up that will break your code!
- Extra arguments to functions: example if a == 3 garbage - the extra garbage is/maybe ignorred. Similarly when functions are used as arguments, e.g. set a to b*3 GetContainer garbage.
- Mismatched if/else/elseif/endif statements. e.g. if...endif...endif. Some of these types of error will get picked up but some wont.
- Buggy lazy logic. e.g. for if x == 4 && y == IsInCombat. Sometimes a set of conditions on one line do not get compiled correctly. Often best to use nested if blocks instead. Very hard to know when this has or is going to happen.
If this stuff has been covered already then feel free to remove or move this from the discussion. Instead please add a link or links to the relevent articles in your article. GuidoBot 19:24, 19 October 2006 (EDT)