ID:146734
 
Code:
/*mob
var
XLoc
YLoc
ZLoc
inbattle=0
textonscreenlist
south=0
KSmod = 0
HP = 50
THP = 50
strength = 5
tarmor
speed = 5
cexp = 0
texp = 0
Dodge = 1
/mob/monsters/Goblin
icon = 'Enemies.dmi'
icon_state = "Goblin"
Name = "Goblin"
name = "Goblin"
ATK_minimum = 2
ATK_maximum = 2
TATK_minimum = 2
TATK_maximum = 2
HP = 10
THP = 10
strength = 1
body = 1
agility = 2
mind = 1
willpower = 1
spirit = 1
speed = 10
Dodge = 1

mob/monsters/Slave
icon = 'Enemies.dmi'
icon_state = "Slave"
Name = "Slave"
name = "Slave"
ATK_minimum = 2
ATK_maximum = 2
TATK_minimum = 2
TATK_maximum = 2
HP = 7
THP = 7
strength = 1
body = 1
agility = 2
mind = 1
willpower = 1
spirit = 1
speed = 10
Dodge = 1*/

turf
Battle_Grass
icon = 'Turfs.dmi'
icon_state = "grass"
Enter()
if (!usr.client){return}
if(!usr.Bnum)
var/C=rand(1,20)
if(C<5)
var{M;M1;M2;R}
M=new/mob/monsters/Goblin
R=rand(1,2)
if(R<1){M1=new/mob/monsters/Slave}
else{..()}
R=rand(1,3)
if(R==1){M2=new/mob/monsters/Slave}
else{..()}
usr.Rbattle(M,M1,M2)

obj
back
icon='back.dmi'
layer=MOB_LAYER+4
New(client/C) C.screen+=src
text
icon='font.dmi'
layer=MOB_LAYER+5
New(client/C) C.screen+=src

BattleGrounds
icon = 'Turfs.dmi'
icon_state = "grass"
invisibility = 101

Background
icon = 'turfs.dmi'
icon_state = "grass"
density = 1
client
Northeast(){return}
Northwest(){return}
Southwest(){return}
Southeast(){return}
North()
if(usr.inbattle==1)
if(usr.south == 0){return}
for(var/obj/menu/I in usr.client.screen){del I}
if(usr.south == 1){usr.south = 0;new/obj/menu/Curser(usr.client);return}
else ..()
South()
if (usr.inbattle==1)
if(usr.south == 1){return}
for(var/obj/menu/I in usr.client.screen){del I}
if(usr.south == 0){usr.south = 1;new/obj/menu/Curser1(usr.client);return}
else ..()
East()
if(usr.inbattle==1){return}
else ..()
West()
if (usr.inbattle==1){return}
else ..()
Center()
if(usr.south==0)
if (usr.Turn)usr.Attack()
else{usr<<"Not your turn."}
if(usr.south==1)
if (usr.Turn)usr.Run()
else{usr<<"Not your turn."}

obj/menu
icon = 'arrow.dmi'
Curser
layer = MOB_LAYER+58
New(client/C) screen_loc = "1,3", C.screen += src
Curser1
layer = MOB_LAYER+58
New(client/C) screen_loc = "1,2", C.screen += src

mob/proc
//starts the random battle
Rbattle(mob/Enemy,mob/Enemy2,mob/Enemy3)
var/turf/Map
for (var/turf/BattleGrounds/BatLoc in world)
var/Taken=0
for (var/atom/A in BatLoc)
if(A.density==1){Taken=1}
if(!Taken){Map=BatLoc}
if (!Map){return}
usr.XLoc=usr.x
usr.YLoc=usr.y
usr.ZLoc=usr.z
usr.inbattle=1
usr.south=0
usr.Move(Map)
usr.dir=WEST
usr<<"You are under attack!<br>To attack hit Numpad 5 with numlock off."
usr.client.lazy_eye = 5
textonscreenbackground(1,1,5,3)
textonscreenTEXT(1.5,12,3,1.3," Attack")
textonscreenTEXT(1.5,12,2,1.3," Run")
new/obj/menu/Curser(usr.client)
if(Enemy!=null)Enemy.Move(locate(usr.x-4,usr.y,usr.z))
if(Enemy2!=null)Enemy2.Move(locate(usr.x-4,usr.y + 1,usr.z))
if(Enemy3!=null)Enemy3.Move(locate(usr.x-4,usr.y-1,usr.z))
var/list/WhichTurn=new()
var/list/ppl=new()
for(var/mob/Aa in world)ppl+=Aa
var/nextturn,PlayerOrder
do
for (var/aa=0;aa<=length(ppl);aa++)
PlayerOrder=0
for(var/mob/ppp in ppl)
if (ppp.speed>PlayerOrder){nextturn=ppp;PlayerOrder=ppp.speed}
else if (ppp.speed==PlayerOrder)nextturn=ppp
WhichTurn+=nextturn
ppl-=nextturn
while (length(ppl)>0)
do
for(var/mob/pp in WhichTurn)
if (pp.HP>0)
if (pp.client)
if(usr.inbattle==1){pp<<"It is now your turn!";pp.Turn = 1}
else return
while(pp.Turn)sleep(5)
else{pp.MonsterAttack()}
while(1)
//You Attack
Attack()
var/list/MonsterList=new()
for (var/mob/M in view())
if(M!=null)
if (M.HP > 0){MonsterList += M}
MonsterList-=usr
MonsterList += "Cancel"
var/mob/enemy = input("Attack who?") in MonsterList
if (enemy == "Cancel")
return
var/hitpercent=50+usr.Dodge
var/hitpercent2=hitpercent-enemy.KSmod
if(hitpercent2>100) hitpercent2=100
if(hitpercent2<0) hitpercent=0
var/hitpercent3=rand(1,100)
var/damagefirst=rand(usr.strength)
var/damagecount=damagefirst-enemy.tarmor
sleep(2)
if(hitpercent3 <= hitpercent2)
if(damagecount > 0)
enemy.HP -= damagecount
view()<<"<font size = 1>[usr] Attacks [enemy] for [damagecount]"
if (enemy != null)
if (enemy.HP < 1)
if (istype(enemy,/mob/monsters)){enemy.icon = null}
usr.Victory()
usr.Turn = 0
else{view() << "<font size = 1>[usr]'s attack bounced off [enemy].";usr.Turn = 0}
else{view() << "<font size = 1>[usr] attacks [enemy], but misses.";usr.Turn = 0}
//Monster Attack
MonsterAttack()
for (var/mob/Player in view())
if (Player.client && Player.HP > 0)
for (var/mob/M in view())
if (M.Bnum == Bnum && M.client)
var/hitpercent=50+usr.Dodge
var/hitpercent2=hitpercent - M.KSmod
if(hitpercent2>100) hitpercent2 = 100
if(hitpercent2<0) hitpercent = 0
var/hitpercent3=rand(1,100)
var/damagefirst=rand(src.strength)
var/damagecount=damagefirst-M.tarmor
sleep(2)
if(hitpercent3 <= hitpercent2)
if(damagecount > 0){M.HP -= damagecount;view()<<"<font size = 1>[src] Attacks [M] for [damagecount]";M.DeathCheck()}
else{view() << "<font size = 1>[src]'s attack bounced off [M]."}
else{view() << "<font size = 1>[src] attacks [M], but misses."}
//Run, Run RUN!!
Run()
switch(rand(1,3))
if(3)
usr<<"<font size = 1>You tryed to run, And Succeeded!"
usr.inbattle=0
usr.client.lazy_eye = 0
usr.Bnum = 0
usr.Turn=0
usr.close_menu()
for(var/mob/monsters/M in oview(5)) del M
usr.Move(locate(usr.XLoc,usr.YLoc,usr.ZLoc))
else{usr<<"<font size = 1>You tryed to run, but failed.";usr.Turn=0}
//When you die, aww
DeathCheck()
if(istype(src,/mob/player))
if(src.HP<=0)
src.icon_state = null
src.client.lazy_eye = 0
src.Move(locate(usr.XLoc, usr.YLoc, usr.ZLoc))
src.Bnum = 0
src.inbattle=0
src.close_menu()
src<<"you died"
//Victory proc, when you win! DING DING
Victory()
var/mm=0
for(var/mob/monsters/M in oview(5))
if(M!=null)
if (M.HP > 0)
mm++
if(mm==0)
var/Gained_Exp
for(var/mob/monsters/M in oview(5))
Gained_Exp+=M.cexp
del M
usr<<"Victory is at hand"
usr<<"You Gained [Gained_Exp] Experience!"
usr.close_menu()
usr.cexp+=Gained_Exp
usr.texp+=Gained_Exp
usr.inbattle=0
usr.client.lazy_eye = 0
usr.Bnum = 0
usr.Move(locate(usr.XLoc,usr.YLoc,usr.ZLoc))
close_menu()
for(var/obj/text/O in client.screen)del O
for(var/obj/back/O in client.screen)del O
for(var/obj/menu/O in client.screen)del O
textonscreenbackground(var/Xcoord1, var/Ycoord1, var/Xcoord2, var/Ycoord2)
for(var/Xcoord=Xcoord1,Xcoord<=Xcoord2,Xcoord++)
for(var/Ycoord=Ycoord1,Ycoord<=Ycoord2,Ycoord++)
var/obj/back/background=new(client)
if(Xcoord==Xcoord1)background.icon_state="l"
if(Xcoord==Xcoord2)background.icon_state="r"
if(Ycoord==Ycoord1)background.icon_state="b"
if(Ycoord==Ycoord2)background.icon_state="t"
if(Xcoord==Xcoord1&&Ycoord==Ycoord1)background.icon_state="ll"
if(Xcoord==Xcoord2&&Ycoord==Ycoord2)background.icon_state="ur"
if(Xcoord==Xcoord1&&Ycoord==Ycoord2)background.icon_state="ul"
if(Xcoord==Xcoord2&&Ycoord==Ycoord1)background.icon_state="lr"
background.screen_loc="[Xcoord],[Ycoord]"
textonscreenTEXT(var/Xcoord1, var/Xcoord2, var/Ycoord1, var/Ycoord2,var/T)
var Xcoord=Xcoord1,Ycoord=Ycoord1
Textonscreenproc(T)
for(var/Y in textonscreenlist)
var/obj/text/characters=new(client)
if(Xcoord==round(Xcoord)&&Ycoord==round(Ycoord)) characters.screen_loc="[Xcoord],[Ycoord]"
else if(Xcoord!=round(Xcoord)&&Ycoord==round(Ycoord)) characters.screen_loc="[Xcoord-0.5]:16,[Ycoord]"
else if(Xcoord==round(Xcoord)&&Ycoord!=round(Ycoord)) characters.screen_loc="[Xcoord],[Ycoord-0.5]:+16"
else if(Xcoord!=round(Xcoord)&&Ycoord!=round(Ycoord)) characters.screen_loc="[Xcoord-0.5]:16,[Ycoord-0.5]:+16"
characters.icon_state="[Y]"
Xcoord+=0.5
if(Xcoord==Xcoord2)
Xcoord=Xcoord1;Ycoord-=0.5
if(Ycoord==Ycoord2-0.5)
break
Textonscreenproc(var/textonscreen)
textonscreenlist=list()
for(var/a=1,a<=length(textonscreen),a++)
textonscreenlist+=copytext(textonscreen,a,a+1)


Problem description: I am starting to modify Raekwon's Random Battle system these errors keep appearing:

Combat.dm:100:error:BatLoc:undefined type: BatLoc
Combat.dm:102:error:BatLoc:undefined type: BatLoc
Combat.dm:104:error:BatLoc:undefined type: BatLoc
Combat.dm:100:BatLoc :warning: variable defined but not used

Any ideas why?


Did you copy and paste the code? If so, you may have missed part of it.
The error is saying: 'You haven't told me what a /turf/BattleGrounds is, so I don't know what to do'. Like I said, if you copied-and-pasted, try and see if you've missed a bit. If not, try to create your own using the information you've got about them (i.e. 'var X is used here, so it must have a var X').
In response to Hazman
I forgot to but turf infront of it thanks for bring the ovious to my attention.
No put usr in proc. Ungh.

Lummox JR
In response to Lummox JR
well that problem has been dealt with but now I have a problem with well monster. you see all monsters can attack all areas. like my shopkeepers keep attacking me.same code with the error from before fixed.
/*mob
var
XLoc
YLoc
ZLoc
inbattle=0
textonscreenlist
south=0
KSmod = 0
HP = 50
THP = 50
strength = 5
tarmor
speed = 5
cexp = 0
texp = 0
Dodge = 1*/

turf
Battle_Grass
icon = 'Turfs.dmi'
icon_state = "grass"
Enter()
if (!usr.client){return}
if(!usr.Bnum)
var/C=rand(1,20)
if(C<5)
var{M;M1;M2;R}
M=new/mob/monsters/Goblin
R=rand(1,2)
if(R<1){M1=new/mob/monsters/Slave}
else{..()}
R=rand(1,3)
if(R==1){M2=new/mob/monsters/Slave}
else{..()}
usr.Rbattle(M,M1,M2)

obj
back
icon='back.dmi'
layer=MOB_LAYER+4
New(client/C) C.screen+=src
text
icon='font.dmi'
layer=MOB_LAYER+5
New(client/C) C.screen+=src
turf
BattleGrounds
icon = 'Turfs.dmi'
icon_state = "b"
invisibility = 101

void
icon='Turfs.dmi'
icon_state="v"
density=1
client
Northeast(){return}
Northwest(){return}
Southwest(){return}
Southeast(){return}
North()
if(usr.inbattle==1)
if(usr.south == 0){return}
for(var/obj/menu/I in usr.client.screen){del I}
if(usr.south == 1){usr.south = 0;new/obj/menu/Curser(usr.client);return}
else ..()
South()
if (usr.inbattle==1)
if(usr.south == 1){return}
for(var/obj/menu/I in usr.client.screen){del I}
if(usr.south == 0){usr.south = 1;new/obj/menu/Curser1(usr.client);return}
else ..()
East()
if(usr.inbattle==1){return}
else ..()
West()
if (usr.inbattle==1){return}
else ..()
Center()
if(usr.south==0)
if (usr.Turn)usr.Attack()
else{usr<<"Not your turn."}
if(usr.south==1)
if (usr.Turn)usr.Run()
else{usr<<"Not your turn."}

obj/menu
icon = 'arrow.dmi'
Curser
layer = MOB_LAYER+58
New(client/C) screen_loc = "1,3", C.screen += src
Curser1
layer = MOB_LAYER+58
New(client/C) screen_loc = "1,2", C.screen += src

mob/proc
//starts the random battle
Rbattle(mob/Enemy,mob/Enemy2,mob/Enemy3)
var/turf/Map
for (var/turf/BattleGrounds/BatLoc in world)
var/Taken=0
for (var/atom/A in BatLoc)
if(A.density==1){Taken=1}
if(!Taken){Map=BatLoc}
if (!Map){return}
usr.XLoc=usr.x
usr.YLoc=usr.y
usr.ZLoc=usr.z
usr.inbattle=1
usr.south=0
usr.Move(Map)
usr.dir=WEST
usr<<"You are under attack!<br>To attack hit Numpad 5 with numlock off."
usr.client.lazy_eye = 5
textonscreenbackground(1,1,5,3)
textonscreenTEXT(1.5,12,3,1.3," Attack")
textonscreenTEXT(1.5,12,2,1.3," Run")
new/obj/menu/Curser(usr.client)
if(Enemy!=null)Enemy.Move(locate(usr.x-4,usr.y,usr.z))
if(Enemy2!=null)Enemy2.Move(locate(usr.x-4,usr.y + 1,usr.z))
if(Enemy3!=null)Enemy3.Move(locate(usr.x-4,usr.y-1,usr.z))
var/list/WhichTurn=new()
var/list/ppl=new()
for(var/mob/Aa in world)ppl+=Aa
var/nextturn,PlayerOrder
do
for (var/aa=0;aa<=length(ppl);aa++)
PlayerOrder=0
for(var/mob/ppp in ppl)
if (ppp.speed>PlayerOrder){nextturn=ppp;PlayerOrder=ppp.speed}
else if (ppp.speed==PlayerOrder)nextturn=ppp
WhichTurn+=nextturn
ppl-=nextturn
while (length(ppl)>0)
do
for(var/mob/pp in WhichTurn)
if (pp.HP>0)
if (pp.client)
if(usr.inbattle==1){pp<<"It is now your turn!";pp.Turn = 1}
else return
while(pp.Turn)sleep(5)
else{pp.MonsterAttack()}
while(1)
//You Attack
Attack()
var/list/MonsterList=new()
for (var/mob/M in view())
if(M!=null)
if (M.HP > 0){MonsterList += M}
MonsterList-=usr
MonsterList += "Cancel"
var/mob/enemy = input("Attack who?") in MonsterList
if (enemy == "Cancel")
return
var/hitpercent=50+usr.Dodge
var/hitpercent2=hitpercent-enemy.KSmod
if(hitpercent2>100) hitpercent2=100
if(hitpercent2<0) hitpercent=0
var/hitpercent3=rand(1,100)
var/damagefirst=rand(usr.strength)
var/damagecount=damagefirst-enemy.tarmor
sleep(2)
if(hitpercent3 <= hitpercent2)
if(damagecount > 0)
enemy.HP -= damagecount
view()<<"<font size = 1>[usr] Attacks [enemy] for [damagecount]"
if (enemy != null)
if (enemy.HP < 1)
if (istype(enemy,/mob/monsters)){enemy.icon = null}
usr.Victory()
usr.Turn = 0
else{view() << "<font size = 1>[usr]'s attack bounced off [enemy].";usr.Turn = 0}
else{view() << "<font size = 1>[usr] attacks [enemy], but misses.";usr.Turn = 0}
//Monster Attack
MonsterAttack()
for (var/mob/Player in view())
if (Player.client && Player.HP > 0)
for (var/mob/M in view())
if (M.Bnum == Bnum && M.client)
var/hitpercent=50+usr.Dodge
var/hitpercent2=hitpercent - M.KSmod
if(hitpercent2>100) hitpercent2 = 100
if(hitpercent2<0) hitpercent = 0
var/hitpercent3=rand(1,100)
var/damagefirst=rand(src.strength)
var/damagecount=damagefirst-M.tarmor
sleep(2)
if(hitpercent3 <= hitpercent2)
if(damagecount > 0){M.HP -= damagecount;view()<<"<font size = 1>[src] Attacks [M] for [damagecount]";M.DeathCheck()}
else{view() << "<font size = 1>[src]'s attack bounced off [M]."}
else{view() << "<font size = 1>[src] attacks [M], but misses."}
//Run, Run RUN!!
Run()
switch(rand(1,3))
if(3)
usr<<"<font size = 1>You tryed to run, And Succeeded!"
usr.inbattle=0
usr.client.lazy_eye = 0
usr.Bnum = 0
usr.Turn=0
usr.close_menu()
for(var/mob/monsters/M in oview(5)) del M
usr.Move(locate(usr.XLoc,usr.YLoc,usr.ZLoc))
else{usr<<"<font size = 1>You tryed to run, but failed.";usr.Turn=0}
//When you die, aww
DeathCheck()
if(istype(src,/mob/player))
if(src.HP<=0)
src.icon_state = null
src.client.lazy_eye = 0
src.Move(locate(usr.XLoc, usr.YLoc, usr.ZLoc))
src.Bnum = 0
src.inbattle=0
src.close_menu()
src<<"you died"
//Victory proc, when you win! DING DING
Victory()
var/mm=0
for(var/mob/monsters/M in oview(5))
if(M!=null)
if (M.HP > 0)
mm++
if(mm==0)
var/Gained_Exp
for(var/mob/monsters/M in oview(5))
Gained_Exp+=M.cexp
del M
usr<<"Victory is at hand"
usr<<"You Gained [Gained_Exp] Experience!"
usr.close_menu()
usr.cexp+=Gained_Exp
usr.texp+=Gained_Exp
usr.inbattle=0
usr.client.lazy_eye = 0
usr.Bnum = 0
usr.Move(locate(usr.XLoc,usr.YLoc,usr.ZLoc))
close_menu()
for(var/obj/text/O in client.screen)del O
for(var/obj/back/O in client.screen)del O
for(var/obj/menu/O in client.screen)del O
textonscreenbackground(var/Xcoord1, var/Ycoord1, var/Xcoord2, var/Ycoord2)
for(var/Xcoord=Xcoord1,Xcoord<=Xcoord2,Xcoord++)
for(var/Ycoord=Ycoord1,Ycoord<=Ycoord2,Ycoord++)
var/obj/back/background=new(client)
if(Xcoord==Xcoord1)background.icon_state="l"
if(Xcoord==Xcoord2)background.icon_state="r"
if(Ycoord==Ycoord1)background.icon_state="b"
if(Ycoord==Ycoord2)background.icon_state="t"
if(Xcoord==Xcoord1&&Ycoord==Ycoord1)background.icon_state="ll"
if(Xcoord==Xcoord2&&Ycoord==Ycoord2)background.icon_state="ur"
if(Xcoord==Xcoord1&&Ycoord==Ycoord2)background.icon_state="ul"
if(Xcoord==Xcoord2&&Ycoord==Ycoord1)background.icon_state="lr"
background.screen_loc="[Xcoord],[Ycoord]"
textonscreenTEXT(var/Xcoord1, var/Xcoord2, var/Ycoord1, var/Ycoord2,var/T)
var Xcoord=Xcoord1,Ycoord=Ycoord1
Textonscreenproc(T)
for(var/Y in textonscreenlist)
var/obj/text/characters=new(client)
if(Xcoord==round(Xcoord)&&Ycoord==round(Ycoord)) characters.screen_loc="[Xcoord],[Ycoord]"
else if(Xcoord!=round(Xcoord)&&Ycoord==round(Ycoord)) characters.screen_loc="[Xcoord-0.5]:16,[Ycoord]"
else if(Xcoord==round(Xcoord)&&Ycoord!=round(Ycoord)) characters.screen_loc="[Xcoord],[Ycoord-0.5]:+16"
else if(Xcoord!=round(Xcoord)&&Ycoord!=round(Ycoord)) characters.screen_loc="[Xcoord-0.5]:16,[Ycoord-0.5]:+16"
characters.icon_state="[Y]"
Xcoord+=0.5
if(Xcoord==Xcoord2)
Xcoord=Xcoord1;Ycoord-=0.5
if(Ycoord==Ycoord2-0.5)
break
Textonscreenproc(var/textonscreen)
textonscreenlist=list()
for(var/a=1,a<=length(textonscreen),a++)
textonscreenlist+=copytext(textonscreen,a,a+1)

Any thoughts?
In response to Sleinth
Sleinth wrote:
well that problem has been dealt with

No it hasn't. You still have usr all over Rbattle(), Attack(), Run(), DeathCheck(), and Victory(). You can't expect to reasonably debug anything when your procs are chock full of a var whose value you can't be sure of.

Lummox JR
In response to Lummox JR
Well, in his defense, he's modifying a horrendous snippet created by Crappa Pyle. So, really, Rae should be the one getting lectured about usr abuse. :P Not that he can't fix it himself, but he's not the original offender here.

~X
In response to Xooxer
Im fixing the usr thing right now but do you know why things that arent in battle can attack
In response to Sleinth
Sleinth wrote:
Im fixing the usr thing right now but do you know why things that arent in battle can attack

That's a common symptom of usr abuse. Read about it here!
In response to Wizkidd0123
thats nice in all but that still doesnt tell me why my NPCs can attack when there not in battle.
In response to Sleinth
Sleinth wrote:
thats nice in all but that still doesnt tell me why my NPCs can attack when there not in battle.

I said this earlier, but it bears repeating: When usr abuse is all over your code, it's not possible to reasonably debug it until that usr abuse is gone. Fix the obvious problems first, and then it will be clearer why you're having that particular trouble--or it may go away entirely.

Lummox JR