Glad we're getting you sorted, Kinji!
For your question about multiple conditions, you have a couple of options for that.
1. You can do it with another Mule and embedded get statements. Using multiple mules is the same idea people will do with rollable tables sometimes, where you would have a "LootPick" mule for each of the different results Pick could generate (ie, a Pick for your 10 range, one for your 11-20 range, one for your 21-50 range, etc.). For instance, say you had a "LootPick10" mule, and you roll an 8 on the d100. You already know you're pulling from the <=10 line in your d100 Mule... so that line could reference the LootPick10 mule. This would require the ?{Pick} result to be set at the top level of the macro, so that it was there when we got to the mule line; I'll assume that would be named "PickResult", stored in the "LootResult" mule. If all of that is accurate, then we can embed a get statement in another get statement. The inner one will be detected and resolved first:
<=10=get.MuleBoy.LootPick10.get.MuleBoy.LootResult.PickResult/get/get ...
11-20=get.MuleBoy.LootPick20.get.MuleBoy.LootResult.PickResult/get/get ...
21-50=get.MuleBoy.LootPick50.get.MuleBoy.LootResult.PickResult/get/get ...
...etc...
Based on what I *think* you're trying to do, I don't think that's a particularly efficient method, but I'm including it in case I don't have a grasp on what you want to do and you might see that this method would work better than others.
2. You can use APILogic (another metascript) to introduce a conditional to your mule return. This would be more efficient than the above, but not the closest match to what you want (I think -- see below for what might be the closest match). This approach is, however, extremely powerful.
<=10={&if get.MuleBoy.LootResult.PickResult/get = 1}Legendary{&elseif get.MuleBoy.LootResult.PickResult/get = 2}Rare{&else}Common{&end} ...
That will work by default (with ZeroFrame installed) because Muler runs at a higher priority than APILogic, so the get statements will resolve before the logical conditions are evaluated. (If you want to see the priority of the metascripts you have installed, run !0 from the chat -- this order can be rearranged as a configuration to ZeroFrame, or it can be altered for a given loop within a given message).
One added benefit of using APILogic is that you wouldn't have to commit your ?{Pick} result to a mule. APILogic lets you define terms and definitions as text replacement operations in the command line. ZeroFrame processes the message on a loop, and with every loop, each metascript gets a chance to detect any work it has to do. One of the things APIL has to do is replace defined terms with their definitions... so when the mule returns a defined term, APILogic will get a chance to replace it. So if in the top level of the macro you define "thepick" to be the result of the ?{Pick} query:
{&define ([thepick]?{Pick|1|2|3}) }
...that means that the above example of using APILogic in a mule return can be rendered simply:
<=10={&if thepick = 1}Legendary{&elseif thepick = 2}Rare{&else}Common{&end} ...
Your top level macro would lose the set statement.
3. What I think you're actually trying to do is to give yourself the ability to choose an option instead of roll one... while reserving the ability to roll if you actually want to do that. If that's what you're looking to do, then you can put your the roll in the query:
?{Pick|Random,[[1d6]]|Legendary,[[1]]|Rare,[[2]]|Common[[3]]}
Then, since that is going to return a roll, regardless, you can use the ZeroFrame .value statement to get the value, and assign it either to a mule variable or to a definition:
{&define ([thepick]?{Pick|Random,[[1d6]]|Legendary,[[1]]|Rare,[[2]]|Common[[3]]}.value) }
Now you've either selected an option from the query manually, or let it roll one for you. Elsewhere when you use "thepick", it will be replaced with what has been selected. If you wanted to use that to pull from a Mule of some special rarity (call it "LootSpecialRarity"), then your "10" line from your d100 mule can become:
<=10=get\.MuleBoy.LootSpecialRarity.thepick/get ...
Note I used the ZeroFrame deferral character (a backslash) between the get and the dot (.). This is because, like I said, by default Muler runs before APILogic... so before you go get something from your mule using a definition, you need to replace that definition with the value you've assigned to it. So we slow down this muler construction by one cycle (using one backslash), so that APILogic has a chance to work, first. If, instead of a definition you used a muler set statement at the top level of your macro, then you would simply do this with a nested get, as I showed before:
<=10=get.MuleBoy.LootSpecialRarity.get.MuleBoy.LootResult.PickResult/get/get ...