ID:145306
 
Code:
Here is the AI code:
mob
Bump(atom/O)
..()
if(usr.client)
if(istype(O,/mob/))
var/mob/M = O
if(M.canattack>=1)
attack(M)

proc
Wait()
while(usr.wait!=0)
if(usr.wait!=0)
sleep(1.5)
usr.wait-=1
if(usr.wait<=0)
break
return

mob
Enemies
var/mob/Target
Training_Dummy
icon='Demon.dmi'
icon_state="undead"
canattack = 1
maxwait = 20
New()
..()
Wander()


mob
Enemies
proc
Wander()
while(src)
for(var/mob/M in oview(5))
if(istype(M,/mob/Enemies/)||istype(M,/mob/Guards))
continue
else
if(M.canattack>=1)
src.Target = M
break
else
continue
if(src.Target)
while(src.Target)
if(src.Target)
if(src.Target.canattack>=1)
sleep(6)
step_towards(src,Target)
else
src.Target=null
else
src.Target=null

else
sleep(rand(5,20))
step_rand(src)
Bump(atom/O)
if(istype(O,/mob/))
if(istype(O,/mob/Enemies))
else
var/mob/M = O
if(M.canattack>=1)
attack(M)


area
Safe_Zone // This area the enemies cannot get into
layer=100
Enter(atom/M)
if(istype(M,/mob/)) // If it is a player, let them it
if(istype(M,/mob/Enemies/))
return 0
else
return 1


mob
Guards
dir = NORTH
canattack=1
Bump(atom/O)
if(istype(O,/mob/Enemies/))
var/mob/M = O
attack(M)

var/Target
Guard1
name = "Guard"
icon='Demon.dmi'
icon_state="Elf"
str = 99999999
attack = 99999999
New()
..()
while(src)
sleep(2)
for(var/mob/Enemies/M in oview(10))
if(src.Target)
break
else
if(M.client)
continue
else
src.Target=M
while(Target)
sleep(2)
step_to(src,Target,10)
if(Target in oview(src,1))
step_towards(src,Target)
else
step_to(src,Target)
spawn(200)
src.loc=locate(22,42,1)
dir=NORTH

Guard2
name = "Guard"
icon='Demon.dmi'
icon_state="Elf"
str = 99999999
attack = 99999999
New()
..()
while(src)
sleep(2)
for(var/mob/Enemies/M in oview(10))
if(src.Target)
break
else
if(M.client)
continue
else
src.Target=M
while(Target)
sleep(2)
step_to(src,Target,10)
if(Target in oview(src,1))
step_towards(src,Target)
else
step_to(src,Target)
spawn(200)
src.loc=locate(26,42,1)
dir=NORTH

Here is the Magic code:
mob
proc
Cast_Spell(var/mob/start,var/mob/M,var/obj/Spells/S)
var/obj/Spells/O = new S
O.owner=start
O.loc=usr.loc
while(O)
sleep(0.1)
if(M in oview(O,1))
step_towards(O,M)
else
step_to(O,M)
var
spirit_defense
castingspell = 0
spell
var/mob/target
Click()
if(usr.castingspell>=1)
usr.target=src
usr.castingspell=0
Cast_Spell(usr,src,usr.spell)
usr.spell=null
else
attack(src)
obj
Spells
icon = 'Beams.dmi'
var/mob/owner = null
var/lvl = 1
var/lvl1
var/lvl2
var/lvl3
var/lvl4
proc
Update()
..()
suffix = "Level [lvl]"
if(lvl == 1)
name = "[name]"
if(lvl == 2)
name = "Greater [name]"
if(lvl == 3)
name = "Ultimate [name]"
Find_Name(var/obj/Spells/O)
var/one = 1
var/two = 2
var/name
COPYTEXT
var/txt = copytext("[O.name]",one,two)
one+=1
two+=1
if(txt=="(")
return name
else
name+="[txt]"
goto COPYTEXT
Fix_Spaces(var/obj/Spells/O)
var/one = 1
var/two = 2
var/name
COPYTEXT
var/txt = copytext("[O.name]",one,two)
one+=1
two+=1
if(txt=="_")
name+=" "
goto COPYTEXT
if(txt=="-")
return name
else
name+="[txt]"
if(txt=="-")
return name
else
goto COPYTEXT

Wind
Wind_Shot
density = 1
icon_state = "Wind Shot"
name = "Wind_Shot_(lvl 5)-"
lvl1 = 5
lvl2 = 10
Click()
usr.castingspell = 1
usr.spell=/obj/Spells/Wind/Wind_Shot
Bump(atom/O)
if(istype(O,/mob/))
var/mob/M = O
var/dmg
if(src.lvl==1)
dmg = src.owner.attack - M.spirit_defense
s_damage(M,dmg,"darkorchid")
M.hp-=dmg
else
dmg = src.owner.attack - M.spirit_defense*2
s_damage(M,dmg,"darkorchid")
M.hp-=dmg

step(M,NORTH)
M.dir=SOUTH
sleep(2)
step(M,NORTH)
M.dir=SOUTH
deathcheck(M,usr)
del src



Wind_Wave
name = "Wind_Wave_(lvl_15)-"
lvl1 = 15
lvl2 = 20
lvl3 = 25
Summon_Wind_Beast
name = "Summon_Wind_Beast_(lvl_30)-"
lvl1 = 30
Hurricane
name = "Hurricane_(lvl_35)-"
lvl1 = 35
lvl2 = 40
Tornado
name = "Tornado_(lvl_45)-"
lvl1 = 45

Fire
Flame_Call
name = "Flame_Call_(lvl_5)-"
lvl1 = 5
Fire_Dart
name = "Fire_Dart_(lvl_10)-"
lvl1 = 10
Fire_Ball
name = "Fire_Ball_(lvl_15)-"
lvl1 = 15
lvl2 = 20
Fire_Bolt
name = "Fire_Bolt_(lvl_25)-"
lvl1 = 25
Searing_Touch
name = "Searing_Touch_(lvl_30)-"
lvl1 = 30
Ring_of_Fire
name = "Ring_of_Fire_(lvl_40)-"
lvl1 = 40
Fire_Wave
name = "Fire_Wave_(lvl_45)-"
lvl1 = 45
lvl2 = 50
Fire_Rain
name = "Fire_Rain_(lvl_55)-"
lvl1 = 55
lvl2 = 60

Ice
Ice_Dart
name = "Ice_Dart_(lvl_5)-"
lvl1 = 5
Ice_Blast
name = "Ice_Blast_(lvl_10)-"
lvl1 = 10
Ice_Beam
name = "Ice_Beam_(lvl_15)-"
lvl1 = 15
Icicle
name = "Icicle_(lvl_20)-"
lvl1 = 20
Ring_of_Ice
name = "Ring_of_Ice_(lvl_25)-"
lvl1 = 25
Icy_Rain
name = "Icy_Rain_(lvl_30)-"
lvl1 = 30
Frost_Bite
name = "Frost_Bite_(lvl_30)-"
lvl1 = 30

Healing
Heal
name = "Heal_(lvl_5)-"
lvl1 = 5
lvl2 = 15
lvl3 = 20
Purify
name = "Purify_(lvl_25)-"
lvl1 = 25
lvl2 = 30
lvl3 = 35
lvl4 = 40
Convert
name = "Convert_(lvl_45)-"
lvl1 = 45
Bless
name = "Bless_(lvl_50)-"
lvl1 = 50
Group_Heal
name = "Group_Heal_(lvl_55)-"
lvl1 = 55

obj
NPCs
Magic_Teacher
icon='NPC.dmi'
icon_state="Magic Teacher"
density = 1
verb
Talk()
set src in oview(1)
switch(alert(usr,"[src]: Do you want to upgrade or learn a spell?","Magic Teacher","Upgrade","Learn"))
if("Upgrade")
var/obj/Spells/O = input(usr,"[src]: Which spell do you want to upgrade?","Upgrade Spells") as null|obj in usr.spells
if(!O) return
var/original = "[O.name]"
for(var/obj/Spells/S in usr.spells)
if(findtext(S,"[original]"))
del S
else
continue
if(usr.knowledge>=O.lvl2)
if(!O.lvl2) goto LVL3
O.lvl = 2
O.Update()
LVL3
if(usr.knowledge>=O.lvl3)
if(!O.lvl3) goto LVL4
O.lvl = 3
O.Update()
LVL4
if(usr.knowledge>=O.lvl4&&O.name=="Purify")
O.lvl = 4
O.Update()

//As silver usr<<"<b><font color=#646464>[original]<font color=#808080> <font color=#9c9c9c>i<font color=#9c9c9c>s<font color=#9c9c9c> <font color=#9c9c9c>n<font color=#9c9c9c>o<font color=#9c9c9c>w<font color=#9c9c9c><font color=#9c9c9c><font color=#cdcdcd> <font color=#cdcdcd>l<font color=#cdcdcd>e<font color=#cdcdcd>v<font color=#cdcdcd>e<font color=#cdcdcd>l<font color=#cdcdcd> <font color=#cdcdcd>[O.lvl]</font>"
var/obj/Spells/OO = new O.type
OO.name = OO.Find_Name(OO)
OO.name+="-"
OO.name = OO.Fix_Spaces(OO)
if(O.lvl==2)
OO.lvl=2
if(OO.name!="Purify")
OO.Update()
if(O.lvl==3)
OO.lvl=3
if(OO.name!="Purify")
OO.Update()
if(O.lvl==4&&OO.name=="Purify")
OO.lvl=4
del O
usr.spells+=list(OO)
usr<<"<b><font color=#feb001>[src]:<font color=#feb001> <font color=#feb001>[original]<font color=#feb001> <font color=#feb001>i<font color=#feb001>s<font color=#feb001> <font color=#feb001>n<font color=#feb001>o<font color=#feb001>w<font color=#feb001><font color=#feb001><font color=#fdcc01> <font color=#fccc01>l<font color=#fccc01>e<font color=#fccc01>v<font color=#fccc01>e<font color=#fccc01>l<font color=#fccc01> <font color=#fccc01>[O.lvl]</font>"
if("Learn")
var/obj/Spells/O = input(usr,"[src]: Which spell do you want to learn?","Magic Teacher") as null|obj in usr.spells2learn
if(!O) return
if(usr.knowledge>=O.lvl1)
var/obj/Spells/OO = new O.type
OO.name = OO.Find_Name(OO)
OO.name+="-"
OO.name = OO.Fix_Spaces(OO)
usr.spells+=list(OO)
usr.spells2learn-=list(O)
usr<<"<b><font color=#fea601>[src]:<font color=#fea601> <font color=#fea601>Y<font color=#fea601>o<font color=#fea601>u<font color=#fea601> <font color=#fea601>n<font color=#fea601>o<font color=#fea601>w<font color=#fea601> <font color=#fea601>k<font color=#fea601>n<font color=#fea601>o<font color=#fea601>w<font color=#fea601><font color=#fea601><font color=#feb601> <font color=#feb601>t<font color=#feb601>h<font color=#feb601>e<font color=#feb601> <font color=#feb601>[OO.name]<font color=#feb601> <font color=#feb601>s<font color=#feb601>p<font color=#feb601>e<font color=#feb601>l<font color=#feb601>l<font color=#feb601>!<font color=#feb601></font>"
else
usr<<"<b><font color=#feb501>[src]:<font color=#feb501> <font color=#feb501>Y<font color=#feb501>o<font color=#feb501>u<font color=#feb501>r<font color=#feb501> <font color=#feb501>k<font color=#feb501>n<font color=#feb501>o<font color=#feb501>w<font color=#feb501>l<font color=#feb501>e<font color=#feb501>d<font color=#feb501>g<font color=#feb501>e<font color=#feb501> <font color=#feb501>l<font color=#feb501>e<font color=#feb501>v<font color=#feb501>e<font color=#feb501>l<font color=#feb501> <font color=#feb501>i<font color=#feb501>s<font color=#feb501> <font color=#feb501>n<font color=#feb501>o<font color=#feb501>t<font color=#feb501> <font color=#feb501>h<font color=#feb501>i<font color=#feb501>g<font color=#feb501>h<font color=#feb501> <font color=#feb501>e<font color=#feb501>n<font color=#feb501><font color=#feb501><font color=#fec901>o<font color=#fec901>u<font color=#fec901>g<font color=#fec901>h<font color=#fec901> <font color=#fec901>t<font color=#fec901>o<font color=#fec901> <font color=#fec901>l<font color=#fec901>e<font color=#fec901>a<font color=#fec901>r<font color=#fec901>n<font color=#fec901> <font color=#fec901>t<font color=#fec901>h<font color=#fec901>i<font color=#fec901>s<font color=#fec901> <font color=#fec901>s<font color=#fec901>p<font color=#fec901>e<font color=#fec901>l<font color=#fec901>l<font color=#fec901>!<font color=#fec901><font color=#fec901><font color=#fec901><font color=#fec901><font color=#fec901></font>"
return



mob/var/list/spells2upgrade
mob/var/list/spells2learn
mob/var/list/spells
mob/var/knowledge = 0

mob
Stat()
..()
if(usr.starting<=0)
statpanel("Spells",usr.spells)

/* proc
Check_Upgrades(var/obj/Spells/O)
if(O.lvl==1)
if(usr.knowledge>=O.lvl2)
if(!O.lvl2==null)
usr<<"<b><font color=#feba01>M<font color=#feba01>a<font color=#feba01>g<font color=#feba01>i<font color=#feba01>c<font color=#feba01> <font color=#feba01>T<font color=#feba01>e<font color=#feba01>a<font color=#feba01>c<font color=#feba01>h<font color=#feba01>e<font color=#feba01>r<font color=#feba01>:<font color=#feba01> <font color=#feba01>A<font color=#feba01> <font color=#feba01>n<font color=#feba01>e<font color=#feba01>w<font color=#feba01> <font color=#feba01>s<font color=#feba01>p<font color=#feba01>e<font color=#feba01>l<font color=#feba01>l<font color=#feba01> <font color=#feba01>u<font color=#feba01>p<font color=#feba01>g<font color=#feba01><font color=#feba01><font color=#fdcf01>r<font color=#fccf01>a<font color=#fccf01>d<font color=#fccf01>e<font color=#fccf01> <font color=#fccf01>i<font color=#fccf01>s<font color=#fccf01> <font color=#fccf01>n<font color=#fccf01>o<font color=#fccf01>w<font color=#fccf01> <font color=#fccf01>a<font color=#fccf01>v<font color=#fccf01>a<font color=#fccf01>i<font color=#fccf01>l<font color=#fccf01>a<font color=#fccf01>b<font color=#fccf01>l<font color=#fccf01>e<font color=#fccf01>!<font color=#fccf01><font color=#fccf01><font color=#fccf01><font color=#fccf01></font>"
if(O.lvl==2)
if(usr.knowledge>=O.lvl3)
if(!O.lvl3==null)
usr<<"<b><font color=#feba01>M<font color=#feba01>a<font color=#feba01>g<font color=#feba01>i<font color=#feba01>c<font color=#feba01> <font color=#feba01>T<font color=#feba01>e<font color=#feba01>a<font color=#feba01>c<font color=#feba01>h<font color=#feba01>e<font color=#feba01>r<font color=#feba01>:<font color=#feba01> <font color=#feba01>A<font color=#feba01> <font color=#feba01>n<font color=#feba01>e<font color=#feba01>w<font color=#feba01> <font color=#feba01>s<font color=#feba01>p<font color=#feba01>e<font color=#feba01>l<font color=#feba01>l<font color=#feba01> <font color=#feba01>u<font color=#feba01>p<font color=#feba01>g<font color=#feba01><font color=#feba01><font color=#fdcf01>r<font color=#fccf01>a<font color=#fccf01>d<font color=#fccf01>e<font color=#fccf01> <font color=#fccf01>i<font color=#fccf01>s<font color=#fccf01> <font color=#fccf01>n<font color=#fccf01>o<font color=#fccf01>w<font color=#fccf01> <font color=#fccf01>a<font color=#fccf01>v<font color=#fccf01>a<font color=#fccf01>i<font color=#fccf01>l<font color=#fccf01>a<font color=#fccf01>b<font color=#fccf01>l<font color=#fccf01>e<font color=#fccf01>!<font color=#fccf01><font color=#fccf01><font color=#fccf01><font color=#fccf01></font>"
if(O.lvl==3)
if(usr.knowledge>=O.lvl4)
if(!O.lvl4==null)
usr<<"<b><font color=#feba01>M<font color=#feba01>a<font color=#feba01>g<font color=#feba01>i<font color=#feba01>c<font color=#feba01> <font color=#feba01>T<font color=#feba01>e<font color=#feba01>a<font color=#feba01>c<font color=#feba01>h<font color=#feba01>e<font color=#feba01>r<font color=#feba01>:<font color=#feba01> <font color=#feba01>A<font color=#feba01> <font color=#feba01>n<font color=#feba01>e<font color=#feba01>w<font color=#feba01> <font color=#feba01>s<font color=#feba01>p<font color=#feba01>e<font color=#feba01>l<font color=#feba01>l<font color=#feba01> <font color=#feba01>u<font color=#feba01>p<font color=#feba01>g<font color=#feba01><font color=#feba01><font color=#fdcf01>r<font color=#fccf01>a<font color=#fccf01>d<font color=#fccf01>e<font color=#fccf01> <font color=#fccf01>i<font color=#fccf01>s<font color=#fccf01> <font color=#fccf01>n<font color=#fccf01>o<font color=#fccf01>w<font color=#fccf01> <font color=#fccf01>a<font color=#fccf01>v<font color=#fccf01>a<font color=#fccf01>i<font color=#fccf01>l<font color=#fccf01>a<font color=#fccf01>b<font color=#fccf01>l<font color=#fccf01>e<font color=#fccf01>!<font color=#fccf01><font color=#fccf01><font color=#fccf01><font color=#fccf01></font>"
else
return

Check_Spells(var/obj/Spells/O)
if(usr.knowledge>=O.lvl1)
usr<<"<b><font color=#fcbe01>M<font color=#fcbe01>a<font color=#fcbe01>g<font color=#fcbe01>i<font color=#fcbe01>c<font color=#fcbe01> <font color=#fcbe01>T<font color=#fcbe01>e<font color=#fcbe01>a<font color=#fcbe01>c<font color=#fcbe01>h<font color=#fcbe01>e<font color=#fcbe01>r<font color=#fcbe01>:<font color=#fcbe01> <font color=#fcbe01>Y<font color=#fcbe01>o<font color=#fcbe01>u<font color=#fcbe01> <font color=#fcbe01>c<font color=#fcbe01>a<font color=#fcbe01>n<font color=#fcbe01> <font color=#fcbe01>n<font color=#fcbe01>o<font color=#fcbe01>w<font color=#fcbe01><font color=#fcbe01><font color=#fec201> <font color=#fec201>l<font color=#fec201>e<font color=#fec201>a<font color=#fec201>r<font color=#fec201>n<font color=#fec201> <font color=#fec201>a<font color=#fec201> <font color=#fec201>n<font color=#fec201>e<font color=#fec201>w<font color=#fec201> <font color=#fec201>s<font color=#fec201>p<font color=#fec201>e<font color=#fec201>l<font color=#fec201>l<font color=#fec201>!<font color=#fec201><font color=#fec201><font color=#fec201></font>"
else
return

*/


obj
Books
var/knowledge
icon = 'Books.dmi'
Gold_Book
knowledge = 2//Change the knowledge lvl to whatever!
icon_state = "Gold Book"

verb
Read_Book()
set src in oview(1)
usr.knowledge+=src.knowledge
usr<<"<b><font color=#01cbfa>Y<font color=#01cbfa>o<font color=#01cbfa>u<font color=#01cbfa> <font color=#01cbfa>h<font color=#01cbfa>a<font color=#01cbfa>v<font color=#01cbfa>e<font color=#01cbfa> <font color=#01cbfa>g<font color=#01cbfa>a<font color=#01cbfa>i<font color=#01cbfa>n<font color=#01cbfa>e<font color=#01cbfa>d<font color=#01cbfa><font color=#01cbfa><font color=#01d2d9> <font color=#01d2d9>[src.knowledge]<font color=#01d2d9> <font color=#01d2d9>k<font color=#01d2d9>n<font color=#01d2d9>o<font color=#01d2d9>w<font color=#01d2d9>l<font color=#01d2d9>e<font color=#01d2d9>d<font color=#01d2d9>g<font color=#01d2d9>e<font color=#01d2d9>!<font color=#01d2d9></font>"
sleep(5)
for(var/obj/Spells/O in usr.spells)
if(O.lvl==1)
if(usr.knowledge>=O.lvl2&&O.lvl2!=null)
var/obj/Spells/OO = new O.type
OO.name = OO.Find_Name(OO)
OO.name+="-"
OO.name = OO.Fix_Spaces(OO)
usr.spells2upgrade+=list(OO)
if(O.lvl==2)
if(usr.knowledge>=O.lvl3&&O.lvl3!=null)
var/obj/Spells/OO = new O.type
OO.name = OO.Find_Name(OO)
OO.name+="-"
OO.name = OO.Fix_Spaces(OO)
usr.spells2upgrade+=list(OO)
if(O.lvl==3)
if(usr.knowledge>=O.lvl4&&O.lvl4!=null)
var/obj/Spells/OO = new O.type
OO.name = OO.Find_Name(OO)
OO.name+="-"
OO.name = OO.Fix_Spaces(OO)
usr.spells2upgrade+=list(OO)
del src


mob
verb
test()
usr.knowledge+=5
usr<<knowledge

Problem description:
The training dummy and the guard just stand still and dont find a target. I included the magic code because when i was testing it, i first saw the problem. If i am doing something wrong in the magic code that can screw up the coding in the AI code, plz tell me!
THX!
Ugh. no usr in procs...
In response to Crzylme
k, and i noticed that i put the wrong mob which is why it wasn't working lol!