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!