Mesh code not working

Godot Version

4.4

Question

my mesh generation code is doing weird things
strange triangles
probably the indices

func _ready():
var surface_array =
surface_array.resize(Mesh.ARRAY_MAX)

# PackedVector**Arrays for mesh construction.
var verts = PackedVector3Array()
var uvs = PackedVector2Array()
var normals = PackedVector3Array()
var indices = PackedInt32Array()


## Insert code here to generate mesh ##
var startPoint = Vector3(0,0,0)
var dimension = Vector2(10,10)
var resolution = 1

for i in range(dimension.y):
	for g in range(dimension.x):
		var vert = Vector3 (0,0,0)
		vert.x = i * resolution + startPoint.x
		vert.z = g * resolution + startPoint.z
		vert.y = 0
		verts.append(vert)
		normals.append(vert.normalized())
		uvs.append(Vector2(i,g))
		if g < dimension.y-2 and i < dimension.x-2:
			indices.append(i*g+i)
			indices.append(i*g+i+1)
			indices.append(i*g+i+2)


# Assign arrays to surface array.
surface_array[Mesh.ARRAY_VERTEX] = verts
surface_array[Mesh.ARRAY_TEX_UV] = uvs
surface_array[Mesh.ARRAY_NORMAL] = normals
surface_array[Mesh.ARRAY_INDEX] = indices

# Create mesh surface from mesh array.
# No blendshapes, lods, or compression used.
mesh = ArrayMesh.new()
mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, surface_array)

What type of mesh is this even supposed to be?
I tried visualizing it on paper a bit and it is probably not supposed to be like it:

yeah i found the problem it was very broken
but I tried to fix it and its still broken

extends MeshInstance3D

#var rings = 50
#var radial_segments = 50
#var radius = 1

func _ready():
var surface_array =
surface_array.resize(Mesh.ARRAY_MAX)

# PackedVector**Arrays for mesh construction.
var verts = PackedVector3Array()
var uvs = PackedVector2Array()
var normals = PackedVector3Array()
var indices = PackedInt32Array()


## Insert code here to generate mesh ##
var startPoint = Vector3(0,0,0)
var dimension = Vector2(10,10)
var resolution = 1

for i in range(dimension.y):
	for g in range(dimension.x):
		var vert = Vector3 (0,0,0)
		vert.x = i * resolution + startPoint.x
		vert.z = g * resolution + startPoint.z
		vert.y = 0
		verts.append(vert)
		normals.append(vert.normalized())
		uvs.append(Vector2(i,g))
		if g < dimension.x and i < dimension.y:
			indices.append(g*(i+1))
			indices.append(g*(i+1)+1)
			indices.append(g*(i+1)+dimension.x)
	
# Vertex indices.
#var thisrow = 0
#var prevrow = 0
#var point = 0

# Loop over rings.

#for i in range(rings + 1):
#	var v = float(i) / rings
#	var w = sin(PI * v)
#	var y = cos(PI * v)

	# Loop over segments in ring.
#	for j in range(radial_segments + 1):
#		var u = float(j) / radial_segments
#		var x = sin(u * PI * 2.0)
#		var z = cos(u * PI * 2.0)
#		var vert = Vector3(x * radius * w, y * radius, z * radius * w)
#		verts.append(vert)
#		normals.append(vert.normalized())
#		uvs.append(Vector2(u, v))
#		point += 1

		# Create triangles in ring using indices.
#		if i > 0 and j > 0:
#			indices.append(prevrow + j - 1)
#			indices.append(prevrow + j)
#			indices.append(thisrow + j - 1)

#			indices.append(prevrow + j)
#			indices.append(thisrow + j)
#			indices.append(thisrow + j - 1)

	#prevrow = thisrow
	#thisrow = point

#######################################

# Assign arrays to surface array.
surface_array[Mesh.ARRAY_VERTEX] = verts
surface_array[Mesh.ARRAY_TEX_UV] = uvs
surface_array[Mesh.ARRAY_NORMAL] = normals
surface_array[Mesh.ARRAY_INDEX] = indices

# Create mesh surface from mesh array.
# No blendshapes, lods, or compression used.
mesh = ArrayMesh.new()
mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, surface_array)

found another problem, tried to fix but failed

extends MeshInstance3D

#var rings = 50
#var radial_segments = 50
#var radius = 1

func _ready():
var surface_array =
surface_array.resize(Mesh.ARRAY_MAX)

# PackedVector**Arrays for mesh construction.
var verts = PackedVector3Array()
var uvs = PackedVector2Array()
var normals = PackedVector3Array()
var indices = PackedInt32Array()


## Insert code here to generate mesh ##
var startPoint = Vector3(0,0,0)
var dimension = Vector2(10,10)
var resolution = 1

for i in range(dimension.y):
	for g in range(dimension.x):
		var vert = Vector3 (0,0,0)
		vert.x = i * resolution + startPoint.x
		vert.z = g * resolution + startPoint.z
		vert.y = 0
		verts.append(vert)
		normals.append(vert.normalized())
		uvs.append(Vector2(i,g))
		if g < dimension.x and i < dimension.y:
			indices.append(g*i+g)
			indices.append(g*i+g+1)
			indices.append(g*i+g+dimension.x)
		if(g > -1 and i < dimension.y):
			indices.append(g*i+g+1)
			indices.append(g*i+g+dimension.x)
			indices.append(g*i+g+dimension.x-1)
	
# Vertex indices.
#var thisrow = 0
#var prevrow = 0
#var point = 0

# Loop over rings.

#for i in range(rings + 1):
#	var v = float(i) / rings
#	var w = sin(PI * v)
#	var y = cos(PI * v)

	# Loop over segments in ring.
#	for j in range(radial_segments + 1):
#		var u = float(j) / radial_segments
#		var x = sin(u * PI * 2.0)
#		var z = cos(u * PI * 2.0)
#		var vert = Vector3(x * radius * w, y * radius, z * radius * w)
#		verts.append(vert)
#		normals.append(vert.normalized())
#		uvs.append(Vector2(u, v))
#		point += 1

		# Create triangles in ring using indices.
#		if i > 0 and j > 0:
#			indices.append(prevrow + j - 1)
#			indices.append(prevrow + j)
#			indices.append(thisrow + j - 1)

#			indices.append(prevrow + j)
#			indices.append(thisrow + j)
#			indices.append(thisrow + j - 1)

	#prevrow = thisrow
	#thisrow = point

#######################################

# Assign arrays to surface array.
surface_array[Mesh.ARRAY_VERTEX] = verts
surface_array[Mesh.ARRAY_TEX_UV] = uvs
surface_array[Mesh.ARRAY_NORMAL] = normals
surface_array[Mesh.ARRAY_INDEX] = indices

# Create mesh surface from mesh array.
# No blendshapes, lods, or compression used.
mesh = ArrayMesh.new()
mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, surface_array)

So i made some changes and now it does something but its still very broken
theres a bunch of weird triangles below the main plain
theres also some strange shadows going on

extends MeshInstance3D

#var rings = 50
#var radial_segments = 50
#var radius = 1

func _ready():
var surface_array =
surface_array.resize(Mesh.ARRAY_MAX)

# PackedVector**Arrays for mesh construction.
var verts = PackedVector3Array()
var uvs = PackedVector2Array()
var normals = PackedVector3Array()
var indices = PackedInt32Array()



var startPoint = Vector3(0,0,0)	
var dimension = Vector2(10,10)
var resolution = 1

for y in range(dimension.y):
	for x in range(dimension.x):
		var vert = Vector3 (0,0,0)
		vert.x = (x-1) * resolution + startPoint.x
		vert.z = (y-1) * resolution + startPoint.z
		vert.y = 0

		verts.append(vert)
		normals.append(vert.normalized())
		uvs.append(Vector2(x,y))
		if x < dimension.x and y < dimension.y:
			indices.append(x+y*dimension.x)
			indices.append(x+1+y*dimension.x)
			indices.append(x+(y+1)*dimension.x)
			
			indices.append(x+1+y*dimension.x)
			indices.append(x+1+(y+1)*dimension.x)
			indices.append(x+(y+1)*dimension.x)

# Assign arrays to surface array.
surface_array[Mesh.ARRAY_VERTEX] = verts
surface_array[Mesh.ARRAY_TEX_UV] = uvs
surface_array[Mesh.ARRAY_NORMAL] = normals
surface_array[Mesh.ARRAY_INDEX] = indices

# Create mesh surface from mesh array.
# No blendshapes, lods, or compression used.
mesh = ArrayMesh.new()
mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, surface_array)