This doesn't need to be complicated. Minimally tested:
(defun C:STAIRRUN (/ pt qu nosing1)
(setq
pt (getpoint "\nLower end of first Riser nosing Line: ")
qu (getint "\nNumber of Risers: ")
); setq
(command "_.line" "_non" pt "_non" (polar pt (/ pi 2) 1.2) "")
(setq nosing1 (entlast)); for selection in Array
(command
"_.copy" "_last" "" "-0.05,0" ""
"_.chprop" "_last" "" "_ltype" "hidden2" "_color" 4 ""
"_.array" nosing1 "_last" "" "_rectangular" 1 qu -0.3
); command
(prin1)
)
It could do more -- force a particular Layer to be current [it draws on the current Layer], wrap Undo begin/end around it all, ask for a width instead of using your 1.2 [which you didn't specify as a constant, but I assumed from your dimension in the larger plan], etc.
I had it ask for the number of risers rather than the number of treads, because that can be used directly in the Array command, but it could ask for the number of treads, and use one more than that in the Array.
You may be interested in my StairPlan command, defined in STAIRS.lsp, available >here<. It calculates the number of risers needed for you, based on the floor-to-floor height and maximum allowable riser. And it has other features. It's for Imperial units, built around US typical Code provisions, but it wouldn't be hard to adjust for metric units.
Kent Cooper, AIA