ID:146067
 
Code:
//Weather

obj/Snow
icon='snow.dmi'
layer = MOB_LAYER+52

obj/Rain
icon='rain.dmi'
layer = MOB_LAYER+52

proc/WEATHER()
while(world)
var/randomw
sleep(HOUR*5)
var/obj/Snow/S = new /obj/Snow
world<<"<b><font color=red>A wicked snow storm starts.</b></font>"
for(var/turf/T in world)
T.overlays+= S
if(istype(T,/turf/woodfloor))T.overlays-= S
else if(istype(T,/turf/chalkboardl))T.overlays-= S
else if(istype(T,/turf/chalkboardr))T.overlays-= S
else if(istype(T,/turf/arena))T.overlays-= S
else if(istype(T,/turf/door))T.overlays-= S
else if(istype(T,/turf/chair))T.overlays-= S
else if(istype(T,/turf/cavewall))T.overlays-=S
else if(istype(T,/turf/Naruto_Online))T.overlays-= S
else if(istype(T,/turf/Load))T.overlays-= S
else if(istype(T,/turf/New))T.overlays-= S
else if(istype(T,/turf/Delete))T.overlays-= S
else if(istype(T,/turf/Delete))T.overlays-= S
else if(istype(T,/turf/tablel))T.overlays-= S
else if(istype(T,/turf/tabler))T.overlays-= S
else if(istype(T,/turf/tablem))T.overlays-= S
else if(istype(T,/turf/House))T.overlays-= S
else if(istype(T,/turf/Spawn))T.overlays-= S
else if(istype(T,/turf/Spawn2))T.overlays-= S
else if(istype(T,/turf/Spawn3))T.overlays-= S
else if(istype(T,/turf/wall))T.overlays-= S
else if(istype(T,/turf/roof))T.overlays-= S
else if(istype(T,/turf/Login))T.overlays-= S
else if(istype(T,/turf/LAMP))T.overlays-= S
else if(istype(T,/turf/paper))T.overlays-= S
else if(istype(T,/turf/rooframen1))T.overlays-= S
else if(istype(T,/turf/rooframen2))T.overlays-= S
sleep(HOUR/2)
world<<"<b><font color=red>The winter ice lays upon the world.</b></font>"
T.overlays-= S
if(istype(T,/turf/grass))T.icon_state="snow"
if(istype(T,/turf/water))
randomw = rand(1,2)
if(randomw==1)T.icon_state="ICE"
if(randomw==2)T.icon_state="ICE2"
sleep(HOUR*5)

if(istype(T,/turf/grass))// Line 132
randomw = rand(1,2)
if(randomw==1)T.icon_state="grass"
if(randomw==2)T.icon_state="grass2"

if(istype(T,/turf/water))T.icon_state="water"
sleep(HOUR*5)
var/obj/Rain/R = new /obj/Rain
world<<"<b><font color=red>Rain pats the ground.</b></font>"
T.overlays+= R
if(istype(T,/turf/woodfloor))T.overlays-= R
else if(istype(T,/turf/chalkboardl))T.overlays-= R
else if(istype(T,/turf/chalkboardr))T.overlays-= R
else if(istype(T,/turf/arena))T.overlays-= R
else if(istype(T,/turf/door))T.overlays-= R
else if(istype(T,/turf/chair))T.overlays-= R
else if(istype(T,/turf/cavewall))T.overlays-= R
else if(istype(T,/turf/Naruto_Online))T.overlays-= R
else if(istype(T,/turf/Load))T.overlays-= R
else if(istype(T,/turf/New))T.overlays-= R
else if(istype(T,/turf/Delete))T.overlays-= R
else if(istype(T,/turf/Delete))T.overlays-= R
else if(istype(T,/turf/tablel))T.overlays-= R
else if(istype(T,/turf/tabler))T.overlays-= R
else if(istype(T,/turf/tablem))T.overlays-= R
else if(istype(T,/turf/House))T.overlays-= R
else if(istype(T,/turf/Spawn))T.overlays-= R
else if(istype(T,/turf/Spawn2))T.overlays-= R
else if(istype(T,/turf/Spawn3))T.overlays-= R
else if(istype(T,/turf/wall))T.overlays-= R
else if(istype(T,/turf/roof))T.overlays-= R
else if(istype(T,/turf/Login))T.overlays-= R
else if(istype(T,/turf/LAMP))T.overlays-= R
else if(istype(T,/turf/paper))T.overlays-= R
else if(istype(T,/turf/rooframen1))T.overlays-= R
else if(istype(T,/turf/rooframen2))T.overlays-= R
sleep(HOUR/30)
T.overlays-=R


Problem description:

Programming\Lighting.dm:132:error: proc definition not allowed inside another proc

P.S. I don't care how inefficent this system is, how can I fix my problem?

You are indenting things under sleep(). I think you might be thinking about spawn(), since you only indent stuff after spawn(). In other words, either change sleep to spawn, or unindent whatever is in sleep().

~~> Dragon Lord
Take the proc definition out of the proc. Could you show us which line it was referring to?
In response to Unknown Person
Unknown Person wrote:
You are indenting things under sleep(). I think you might be thinking about spawn().

Nope, definately looking for sleep.


Since you only indent stuff after spawn(). In other words, either change sleep to spawn, or unindent whatever is in sleep().

Did you even look at my snippet? That would make every turf wait whatever time to remove the overlay. Causing more lag. Look over what I have carefully.


In response to XzDoG
You don't indent with sleep(), that is why he said spawn(). Unindent everything indented under sleep().
In response to Kalzar
Just forget it, No one sees what the hell is going on. I cant indent sleep, that will screw up the proccess. Also, I refuse to use spawn.
In response to XzDoG
You have T.overlays-=R indented under Sleep. It has to be unindented, or sleep be changed to spawn, or put above sleep.
In response to Soccerguy13
I tried the indentation part.

<small>
loading Project-XZDOG.dme
Programming\Lighting.dm:124:error:T.overlays:undefined var
Programming\Lighting.dm:125:error:T:undefined var
Programming\Lighting.dm:125:error:T.icon_state:undefined var
Programming\Lighting.dm:126:error:T:undefined var
Programming\Lighting.dm:128:error:T.icon_state:undefined var
Programming\Lighting.dm:129:error:T.icon_state:undefined var
Programming\Lighting.dm:132:error:T:undefined var
Programming\Lighting.dm:134:error:T.icon_state:undefined var
Programming\Lighting.dm:135:error:T.icon_state:undefined var
Programming\Lighting.dm:137:error:T:undefined var
Programming\Lighting.dm:137:error:T.icon_state:undefined var
Programming\Lighting.dm:141:error:T.overlays:undefined var
Programming\Lighting.dm:142:error:T:undefined var
Programming\Lighting.dm:142:error:T.overlays:undefined var
Programming\Lighting.dm:143:error:T:undefined var
Programming\Lighting.dm:143:error:T.overlays:undefined var
Programming\Lighting.dm:144:error:T:undefined var
Programming\Lighting.dm:144:error:T.overlays:undefined var
Programming\Lighting.dm:145:error:T:undefined var
Programming\Lighting.dm:145:error:T.overlays:undefined var
Programming\Lighting.dm:146:error:T:undefined var
Programming\Lighting.dm:146:error:T.overlays:undefined var
Programming\Lighting.dm:147:error:T:undefined var
Programming\Lighting.dm:147:error:T.overlays:undefined var
Programming\Lighting.dm:148:error:T:undefined var
Programming\Lighting.dm:148:error:T.overlays:undefined var
Programming\Lighting.dm:149:error:T:undefined var
Programming\Lighting.dm:149:error:T.overlays:undefined var
Programming\Lighting.dm:150:error:T:undefined var
Programming\Lighting.dm:150:error:T.overlays:undefined var
Programming\Lighting.dm:151:error:T:undefined var
Programming\Lighting.dm:151:error:T.overlays:undefined var
Programming\Lighting.dm:152:error:T:undefined var
Programming\Lighting.dm:152:error:T.overlays:undefined var
Programming\Lighting.dm:153:error:T:undefined var
Programming\Lighting.dm:153:error:T.overlays:undefined var
Programming\Lighting.dm:154:error:T:undefined var
Programming\Lighting.dm:154:error:T.overlays:undefined var
Programming\Lighting.dm:155:error:T:undefined var
Programming\Lighting.dm:155:error:T.overlays:undefined var
Programming\Lighting.dm:156:error:T:undefined var
Programming\Lighting.dm:156:error:T.overlays:undefined var
Programming\Lighting.dm:157:error:T:undefined var
Programming\Lighting.dm:157:error:T.overlays:undefined var
Programming\Lighting.dm:158:error:T:undefined var
Programming\Lighting.dm:158:error:T.overlays:undefined var
Programming\Lighting.dm:159:error:T:undefined var
Programming\Lighting.dm:159:error:T.overlays:undefined var
Programming\Lighting.dm:160:error:T:undefined var
Programming\Lighting.dm:160:error:T.overlays:undefined var
Programming\Lighting.dm:161:error:T:undefined var
Programming\Lighting.dm:161:error:T.overlays:undefined var
Programming\Lighting.dm:162:error:T:undefined var
Programming\Lighting.dm:162:error:T.overlays:undefined var
Programming\Lighting.dm:163:error:T:undefined var
Programming\Lighting.dm:163:error:T.overlays:undefined var
Programming\Lighting.dm:164:error:T:undefined var
Programming\Lighting.dm:164:error:T.overlays:undefined var
Programming\Lighting.dm:165:error:T:undefined var
Programming\Lighting.dm:165:error:T.overlays:undefined var
Programming\Lighting.dm:166:error:T:undefined var
Programming\Lighting.dm:166:error:T.overlays:undefined var
Programming\Lighting.dm:167:error:T:undefined var
Programming\Lighting.dm:167:error:T.overlays:undefined var
Programming\Lighting.dm:169:error:T.overlays:undefined var
Programming\Lighting.dm:124:error::invalid expression
Programming\Lighting.dm:90:randomw :warning: variable defined but not used</small>
In response to XzDoG
Can anyone help me with the runtime errors I posted?
In response to Hell Ramen
Hell Ramen wrote:
[link]

Don't help me.
You seem to be adding extra indentations to certian sections.
The stuff between world<<"<font color=red>The winter ice lays upon the world.</font>" and sleep(HOUR*5).
Then sleep(HOUR*5) until the next sleep(HOUR*5).
Then again after that one. Inside that bad indentation you've also got another one after world<<"<font color=red>Rain pats the ground.</font>" and another after sleep(HOUR/30).
There are probably more in there I've missed.


[Edit]
Later on you start using a var named T when it doesn't exist outside of that for() loop you've got up top.
You'll need to do a new for() loop before every one of your 'add overlays to all the turfs' sections.






Just to clarify, Unknown Person wasn't saying that you should be using spawn() he was saying that you were using sleep() as if it was spawn().
Ie:
//It looks like you're writing your sleep()s in this format:

sleep(10)
world << "I waited 1 second!"

//Instead of the correct format of:

sleep(10)
world << "I waited 1 second!"






Just a quick tip, you've got these huge sections of if(istype())'s. You really don't need them all. I know you said you didn't want any efficiency tips, but the way you're doing it you're doing like 21 checks for every turf in the world. If you've got even a tiny 50x50x5 map that's 250,000 extra checks*.
It would work much better with a simple system like this:
turf
var/weatherProof = 0
woodfloor
weatherProof = 1

for(var/turf/T in world)
if(!T.weatherProof) T.overlays += S



*That's 50*50*5=12,500 for the amount of turfs on the map. Then you've got 21 checks per turf instead of 1, so that's 20 extra checks per turfs. 12,500*20=250,000.
So on a 50x50x5 map that's 262,500 checks for your current system (more if you add anymore weather-proof turfs) against 12,500 checks the more efficient system (and that wont increase if you add more weather-proof turfs).
In response to DarkView
proc/WEATHER()
while(world)
var/randomw
sleep(100)
var/obj/Snow/S = new /obj/Snow
world<<"<b><font color=red>A wicked snow storm starts.</b></font>"
for(var/turf/T in world)
if(!T.weatherProof) T.overlays += S
if(istype(T,/turf/LAMP/Area)) T.overlays += S
sleep(100)
world<<"<b><font color=red>The winter ice lays upon the world.</b></font>"
for(var/turf/T in world)
if(!T.weatherProof) T.overlays -= S
if(istype(T,/turf/grass))T.icon_state="snow"
if(istype(T,/turf/water))
randomw = rand(1,2)
if(randomw==1)T.icon_state="ICE"
if(randomw==2)T.icon_state="ICE2"
sleep(100)
if(istype(T,/turf/grass))
randomw = rand(1,2)
if(randomw==1)T.icon_state="grass"
if(randomw==2)T.icon_state="grass2"
if(istype(T,/turf/water))T.icon_state="water"
world<<"<b><font color=red>The winter ice melts away.</b></font>"
sleep(100)
var/obj/Rain/R = new /obj/Rain
world<<"<b><font color=red>Rain pats the ground.</b></font>"
if(!T.weatherProof) T.overlays += R
sleep(100)
if(!T.weatherProof) T.overlays-=R


Okay! Now, the snow starts but it doesnt get removed, the grass and water icon states dont change and the rain never starts. However, the text is showing.
In response to XzDoG
Ok. I'll break this down into comments to show you what's wrong.

proc/WEATHER()
while(world)
var/randomw
sleep(100)
var/obj/Snow/S = new /obj/Snow
world<<"<b><font color=red>A wicked snow storm starts.</b></font>"
for(var/turf/T in world)
if(!T.weatherProof) T.overlays += S
if(istype(T,/turf/LAMP/Area)) T.overlays += S
sleep(100)
world<<"<b><font color=red>The winter ice lays upon the world.</b></font>"

//Everything until this point is fine.

for(var/turf/T in world)
if(!T.weatherProof) T.overlays -= S
if(istype(T,/turf/grass))T.icon_state="snow"
if(istype(T,/turf/water))
randomw = rand(1,2)
if(randomw==1)T.icon_state="ICE"
if(randomw==2)T.icon_state="ICE2"

//This is where you want the inside of your loop to end.


//The following is still inside of that loop you started to 'lay ice upon the world'. So for every turf in the world it's going to sleep(100) then do the following to that turf.
sleep(100)
if(istype(T,/turf/grass))
randomw = rand(1,2)
if(randomw==1)T.icon_state="grass"
if(randomw==2)T.icon_state="grass2"
if(istype(T,/turf/water))T.icon_state="water"
world<<"<b><font color=red>The winter ice melts away.</b></font>"
sleep(100)
var/obj/Rain/R = new /obj/Rain
world<<"<b><font color=red>Rain pats the ground.</b></font>"
if(!T.weatherProof) T.overlays += R
sleep(100)
if(!T.weatherProof) T.overlays-=R
In response to DarkView
proc/WEATHER()
while(world)
var/randomw
sleep(100)
var/obj/Snow/S = new /obj/Snow
world<<"<b><font color=red>A wicked snow storm starts.</b></font>"
for(var/turf/T in world)
if(!T.weatherProof) T.overlays += S
if(istype(T,/turf/LAMP/Area)) T.overlays += S
//sleep(HOUR/2)
sleep(100)
world<<"<b><font color=red>The winter ice lays upon the world.</b></font>"
for(var/turf/T in world)
if(!T.weatherProof) T.overlays -= S
if(istype(T,/turf/grass))T.icon_state="snow"
if(istype(T,/turf/water))
randomw = rand(1,2)
if(randomw==1)T.icon_state="ICE"
if(randomw==2)T.icon_state="ICE2"
//sleep(HOUR*5)
sleep(100)
if(istype(T,/turf/grass))
randomw = rand(1,2)
if(randomw==1)T.icon_state="grass"
if(randomw==2)T.icon_state="grass2"
if(istype(T,/turf/water))T.icon_state="water"

world<<"<b><font color=red>The winter ice melts away.</b></font>"
//sleep(HOUR*5)
sleep(100)
var/obj/Rain/R = new /obj/Rain
world<<"<b><font color=red>Rain pats the ground.</b></font>"
for(var/turf/T in world)
if(!T.weatherProof) T.overlays += R
sleep(HOUR/30)
if(!T.weatherProof) T.overlays-=R


This is what I have from what I have gathered from your posts. It still isn't working, whats wrong?
In response to XzDoG
You've still got a sleep() inside a loop (and the effects of what you'd want to be two loops inside a single loop). The sleep() between the ice being layed and the ice melting.
In response to XzDoG
I did, doing if statements tons of times are bad habbits. Break out of them, or you'll turn out to be a cruddy programmer.