My So Far Weirdest Error

Hi, I’m having serius problems with the first bug ever to best my mind in every way possible.
The error message is the same standard message you normally get when trying to refer to an index that is out-of-bounds of an array;

ArgumentOutOfRangeException: Index is less than 0 or more than or equal to the list count.
Parameter name: index
6

System.Collections.ArrayList.get_Item (int) <0x000a6>
UnityScript.Lang.Array.get_Item (int) <0x00028>
(wrapper dynamic-method) UnityScript.Lang.Array.Array$get_Item$System.Single (object,object[ ]) <0x000c8>
Boo.Lang.Runtime.RuntimeServices.Dispatch (object,string,System.Type[ ],object[ ],Boo.Lang.Runtime.DispatcherCache/DispatcherFactory) <0x00089>

Ok, so far so good, now here comes the weird part;
I’m not refering to any array!
the error occurs in line 102, which is a declaration of a while-loop that only uses integer;

while(objectstomake != 0){

Now, thats a weird bug if ever I saw one.

I’ve tried with everything I know regarding bugfixing, but nothing works, it just keeps on giving an argument-out-of-range-exception on that same code-snippet.

Please help. :cry:

Here’s the full while-block for those that want to read;

		while(objectstomake != 0){
			objecttomake = null;
			r = Random.Range(0, ocoin1 + ocoin2 + ocoin3 + ogem1 + ogem2 + ogem3 + ogem4 + ogem5 + ogem6 + ogem7 + ogem8 + ogem9 + ospecial1 + ospecial2 + ospecial3 + ospecial4 + ospecial5 + ospecial6 + ospecial7 + ospecial8);
			rr = Random.Range(0, 360);
			switch(Camera.main.GetComponent(Generate).arr[r]){
				case 1 : 
					objecttomake = coin1;
					var rrr1 = Random.Range(0, 2);
					heads = rrr1;
					break;
				case 2 : 
					objecttomake = coin2;
					var rrr2 = Random.Range(0, 2);
					heads = rrr2;
					break;
				case 3 : 
					objecttomake = coin3;
					var rrr3 = Random.Range(0, 2);
					heads = rrr3;
					break;
				case 4 : 
					objecttomake = gem1;
					heads = 2;
					break;
				case 5 : 
					objecttomake = gem2;
					heads = 2;
					break;
				case 6 : 
					objecttomake = gem3;
					heads = 2;
					break;
				case 7 : 
					objecttomake = gem4;
					heads = 2;
					break;
				case 8 : 
					objecttomake = gem5;
					heads = 2;
					break;
				case 9 : 
					objecttomake = gem6;
					heads = 2;
					break;
				case 10 : 
					objecttomake = gem7;
					heads = 2;
					break;
				case 11 : 
					objecttomake = gem8;
					heads = 2;
					break;
				case 12 : 
					objecttomake = gem9;
					heads = 2;
					break;
				case 13 : 
					objecttomake = special1;
					heads = 2;
					break;
				case 14 : 
					objecttomake = special2;
					heads = 2;
					break;
				case 15 : 
					objecttomake = special3;
					heads = 2;
					break;
				case 16 : 
					objecttomake = special4;
					heads = 2;
					break;
				case 17 : 
					objecttomake = special5;
					heads = 2;
					break;
				case 18 : 
					objecttomake = special6;
					heads = 2;
					break;
				case 19 : 
					objecttomake = special7;
					heads = 2;
					break;
				case 20 : 
					objecttomake = special8;
					heads = 2;
					break;
				default :
					print("error");
			}
			if(heads == 1){
				rotation = Vector3(0, 0, 180);
			}
			if(heads == 0){
				rotation = Vector3(0, 0, 0);
			}
			if(createnone == false){
				Instantiate(objecttomake, transform.position, Quaternion.identity);
				justmade = GameObject.FindWithTag("justmade");
				justmade.transform.localScale.x *= increment;
				justmade.transform.localScale.y *= increment;
				justmade.transform.localScale.z *= increment;
				justmade.transform.parent.collider.radius *= increment;
				justmade.tag = "Untagged";
				justmade.transform.parent.tag = "object";
				justmade.transform.parent.parent = centerofmap.transform;
				justmade.transform.parent.GetComponent(Infobank).xposition = position;
				justmade.transform.parent.GetComponent(Infobank).zposition = objectstomake - 1;
				Camera.main.GetComponent(Generate).posarr[objectstomake - 1][position] = justmade.transform.parent.gameObject;
				justmade.transform.parent.GetComponent(Objectfall).waitfordrop = true;
				if(heads == 2){
					justmade.transform.eulerAngles = Vector3(0, 0, rr);
				}
				else{
					justmade.transform.eulerAngles.y = rr;
					justmade.transform.parent.transform.eulerAngles = rotation;
				}
				if(Camera.main.GetComponent(Generate).changeplace == false){
					justmade.transform.parent.gameObject.AddComponent(Destroyonclick);
				}
				else{
					justmade.transform.parent.gameObject.AddComponent(Changeplace);
				}
			}
			createnone = false;
			print(objectstomake);
			objectstomake -= 1;
		}

Can you post the whole script? It might not be the loop itself that causes the error.