Maybe this helps you a bit. It is thrown together very fast and I don't have much time to explain it currently. But take a look:
Type TItem Field Name:String Field Multiplier:Float Field FireDmg:Float Field IceDmg:Float Field Class:String Field AttackMin:Int Field AttackMAx:Int End Type Type TMultiplier Global Map:TMap = CreateMap() Global List:TList = New TList Field Multi:Float Field Name:String Function Add(Name:String,Multi:Float,chance:Int=1) Local M:TMultiplier = New TMultiplier M.Multi = Multi M.Name = Name Map.Insert(Name,M) For Local I:Int = 0 To Chance-1 List.addlast(M.Name) Next End Function Function Get:TMultiplier() Local I:Int = Rand(0,CountList(TMultiplier.List)-1) Return TMultiplier(MapValueForKey(TMultiplier.Map,String(TMultiplier.List.ValueatIndex(I)))) End Function End Type Type TClass Global Map:TMap = CreateMap() Global List:TList = New TList Field Name:String Function Add(Name:String,chance:Int=1) Local M:TClass = New TClass M.Name = Name Map.Insert(Name,M) For Local I:Int = 0 To Chance-1 List.addlast(M.Name) Next End Function Function Get:TClass() Local I:Int = Rand(0,CountList(TClass.List)-1) Return TClass(MapValueForKey(TClass.Map,String(TClass.List.ValueatIndex(I)))) End Function End Type Type TExtra Global Map:TMap = CreateMap() Global List:TList = New TList Field Name:String Function Add(Name:String,chance:Int=1) Local M:TExtra= New TExtra M.Name = Name Map.Insert(Name,M) For Local I:Int = 0 To Chance-1 List.addlast(M.Name) Next End Function Function Get:TExtra() Local I:Int = Rand(0,CountList(TEXtra.List)-1) Return TExtra(MapValueForKey(TExtra.Map,String(TExtra.List.ValueatIndex(I)))) End Function End Type TMultiplier.Add("Rare",5.0,1.0) TMultiplier.Add("Regular",2.5,4.0) TMultiplier.Add("Bad",1.0,10.0) TClass.Add("Sword",1.0) TClass.Add("Axe",1.0) TExtra.Add("Fire",5.0) TExtra.Add("Ice",5.0) TExtra.Add("the Destructor",1.0) For Local I:Int = 0 To 99 Local M:TMultiplier = TMultiplier.Get() Local C:TClass = TClass.Get() Local E:TExtra = TExtra.Get() Print M.Name + " " + C.Name + " of " + E.Name Next