ID:142679
 
I am here on behalf of Unknown Duelist of Duel Monsters Unlimited. As of late, we've been debugging, and finding error after error in the game (thanks to Axerob's suggestion. Neither UD nor me know much about code, he knows more than me, but yeh).

Well, I think the problem Description for this should go first...

Problem description:
I think it more proper to list the Dream Daemon Error Report.

StartDuel()
Request Duel (/obj/DuelOv/StartDuel): Click(Sidewalk (47,79,2) (/turf/DOMINO/pavement1), "mapwindow.map1", "icon-x=13;icon-y=6;left=1")


Now, we've tried everything we could to find what might be wrong with the below code, however everything we've done has come up bringing back no results, and the server keeps crashing. We just recently updated to Build 414, and now we're in a bit of a pickle. Could anyone tell us what's wrong with the below code and how to fix it.

Code:
turf/Dueling/TurfDuelingBlock
name=""

turf/Dueling/SoloDuelBlock
name=""

obj/rps
icon='rps.dmi'
icon_state=""

obj/DuelOv/StartDuel
icon='hud.dmi'
icon_state="duel"
name = "Request Duel"
layer=77
Click()
StartDuel()

proc/StartDuel()
if(usr.Dueling==1) return
if(usr.DekEdt==1) return
usr.DuelCk=0
usr.DekCk(usr.DuelCk)
if(usr.DuelCk!=1)
alert(usr,"You do not have a Deck that can be used in a Duel.","No Deck")
usr.DuelCk=0
return
usr.SeeDuel.Cut()
usr.SeeDuel+=usr.key
for(var/mob/N in view(6,src))
if(N.Dueling && N.DuelOpponent==null)
N.DuelOpponent=usr
N.SeeDuel+=usr.key
usr.DuelOpponent=N
usr.SeeDuel+=N.key
N << "[usr.name] has joined your Duel."
if(usr.loggedin==0) return
usr.DuelLP=8000
usr.Drawing=0
usr.MoveLkd=1
usr.Dueling=1
usr.CrntDck.Cut()
usr.DuelDeckLoad()
var/obj/buttonoff1=new/obj/OffOv/disabled
buttonoff1.screen_loc="21,21"
usr.client.screen+=buttonoff1
var/obj/buttonoff2=new/obj/OffOv/disabled
buttonoff2.screen_loc="20,21"
usr.client.screen+=buttonoff2
var/obj/buttonoff3=new/obj/OffOv/disabled
buttonoff3.screen_loc="19,21"
usr.client.screen+=buttonoff3
var/obj/buttonoff4=new/obj/OffOv/disabled
buttonoff4.screen_loc="18,21"
usr.client.screen+=buttonoff4
usr.verbs+=/mob/verb/DuelSay
usr.client.command_text={"duelsay ""}
usr.Monster1=null
usr.Monster2=null
usr.Monster3=null
usr.Monster4=null
usr.Monster5=null
usr.ExtraZone=null
usr.ST1=null
usr.ST2=null
usr.ST3=null
usr.ST4=null
usr.ST5=null
usr.tmduel=0
usr.FieldSlot=null
var/dueldir=sd_Alert(usr, "Which Direction?", "Duel Direction", list("Left","Right"), pick("Left"),0,0,"300x125",,dstyle,"[usr.key]",1)
if(dueldir=="Right")
usr.dir=EAST
usr.client.eye=locate(usr.x+3,usr.y,usr.z)
else
usr.dir=WEST
usr.client.eye=locate(usr.x-3,usr.y,usr.z)
if(!usr.DuelOpponent) usr.AcvDuelist=1
usr.DuelDiskLoad()
usr.DuelLPDisplay=new/obj/overlays/DuelLPDisplays/LP_IN(locate(usr.x,usr.y-1,usr.z))
if(dueldir=="Right")
usr.DuelLPDisplay.pixel_y+=20
usr.DuelLPDisplay.pixel_x-=20
else
usr.DuelLPDisplay.pixel_y+=20
usr.DuelLPDisplay.pixel_x+=20
usr.DuelLPDisplayRefresh(usr)
usr.DuelHand.Cut()
usr.DuelGraveyard.Cut()
usr.DuelRFG.Cut()
PopulateFakeVerbs(usr)
usr.ShuffleDeck("No Output")
if(usr.ddisk=="Doma") usr << sound('doma_disk_on.ogg',0,0,1)
else if(usr.ddisk=="Academy Red" || usr.ddisk=="Academy Blue" || usr.ddisk=="Academy Yellow") usr << sound('duel_disk_on.ogg',0,0,1)
else if(usr.ddisk=="Battle City") usr << sound('battle_city_on.ogg',0,0,1)
usr.RFG=new/obj/rfg(locate(usr.x,usr.y-1,usr.z))
if(dueldir=="Right")
usr.RFG.pixel_y-=16
usr.RFG.pixel_x-=10
else
usr.RFG.pixel_x+=10
usr.RFG.pixel_y-=16
for(var/mob/M in view("21x21"))
if(usr.DuelOpponent) M << "<center><font color=#0b8aec><b>A duel begins.....<br><b>[usr.name]</b> vs <b>[usr.DuelOpponent.name]</b>.</font></center>"
else M << "<center><font color=#0b8aec><b>[usr.name]</b> raises [usr.Gender] Duel Disk.</font></center>"
var/browsefile=list('A.gif','Beacon.gif','Bushido.gif','Chronicle.gif','Clock.gif','Crest.gif','Crystal.gif','Fog.gif','Hyper-Venom.gif','Ice.gif','Maiden.gif','Plasma.gif','Protection.gif','Sacred Beast.gif','Scab.gif','Shine.gif','Spell.gif','Turn.gif','Vaccine.gif','Venom.gif','Continuous.gif','Counter.gif','DARK.gif','DIVINE.gif','EARTH.gif','Equip.gif','Field.gif','FIRE.gif','LIGHT.gif','Normal.gif','Quick-Play.gif','Ritual.gif','SPELLC.gif','TRAPC.gif','WATER.gif','WIND.gif','special_summon.png','norm_summon.png')
for(var/v in browsefile)
usr << browse_rsc(v,"[v]")

mob/proc
BlkBtn()
var/obj/buttonoff1=new/obj/OffOv/disabled
buttonoff1.screen_loc="21,21"
src.client.screen+=buttonoff1
var/obj/buttonoff2=new/obj/OffOv/disabled
buttonoff2.screen_loc="20,21"
src.client.screen+=buttonoff2
var/obj/buttonoff3=new/obj/OffOv/disabled
buttonoff3.screen_loc="19,21"
src.client.screen+=buttonoff3
var/obj/buttonoff4=new/obj/OffOv/disabled
buttonoff4.screen_loc="18,21"
src.client.screen+=buttonoff4

DuelDeckLoad()
var/i=1
var/list/workingdecks[]=new()
var/list/currentcheckingdeck[]=new()
for(i,i<=src.decks.len,i++)
currentcheckingdeck+=src.decks[i]
SeeIfDeckWorks(workingdecks,currentcheckingdeck,i)
var/targetdeck=input(src,"Which deck would you like to use?","Deck Slot") in workingdecks
var/list/newdeckz[]=new()
var/list/newdecku[]=new()
var/DeckChoice=text2num(copytext(targetdeck,1,3))
newdeckz+=src.decks[DeckChoice]
newdecku+=src.sdeck[DeckChoice]
src.CurDeck=DeckChoice
src.CurSide=DeckChoice
Deckload(newdeckz,src)
DeckloadSide(newdecku,src)

SeeIfDeckWorks(var/list/decksthatwork,var/list/checkingdeck,var/deckcounter)
var/cardsindeck=0
for(var/O in checkingdeck)
var/obj/Z = new O
if(Z.fusion!=1) cardsindeck++
del(Z)
checkingdeck.Cut()
if(cardsindeck>=40)
if(deckcounter<10) decksthatwork+="[deckcounter] - [src.DeckName[deckcounter]]"
else decksthatwork+="[deckcounter] - [src.DeckName[deckcounter]]"

DekCk(workingdeck)
var/bigenoughdeck=0
if(src.decks.len>0)
var/list/checkingdeck[]=new()
for(var/i=1,i<=src.decks.len,i++)
checkingdeck.Cut()
for(var/I in src.decks[i])
checkingdeck+=I
var/cardsindeck=0
for(var/O in checkingdeck)
var/Z = "[O]"
if(copytext(Z,1,19)=="/obj/cards/monster")
var/obj/cards/Q = new O
if(Q.fusion!=1)
cardsindeck++
del(Q)
else cardsindeck++
checkingdeck.Cut()
if(cardsindeck>=40)
bigenoughdeck=1
i=src.decks.len
else
bigenoughdeck=0
if(bigenoughdeck==1)
usr.DuelCk++

DeckChoice()
var/list/totaldecklist=new()
var/i
for(i=1, i<=src.decks.len, i++)
if(i<10) totaldecklist+="[i] - [src.DeckName[i]]"
else totaldecklist+="[i] - [src.DeckName[i]]"
totaldecklist+="(Cancel)"
var/targetdeck=input("Which deck slot would you like to load?","Deck Slot") in totaldecklist
if(targetdeck=="(Cancel)") return..()
var/list/newdeckz[]=new()

var/DeckChoice=text2num(copytext(targetdeck,1,3))
newdeckz+=src.decks[DeckChoice]
Deckload(newdeckz,src)

DuelDiskLoad()
var/N
switch(src.ddisk)
if("Volcanic") N="axel"
if("Birdman") N="birdman"
if("Dark World") N="drkworld"
if("Doma") N="chaos"
if("Battle City") N="battlecity"
if("Amazon") N="amazon"
if("Academy Red") N="acad"
if("Academy Yellow") N="acad"
if("Academy Blue") N="acad"
if(src.ddisk=="Academy Red") make_image(src,'DuelDisks.dmi',"osiris_ddisk",1,1,8,5,0,/obj/DuelOv/DuelDisk)
if(src.ddisk=="Academy Blue") make_image(src,'DuelDisks.dmi',"obelisk_ddisk",1,1,8,5,0,/obj/DuelOv/DuelDisk)
if(src.ddisk=="Academy Yellow") make_image(src,'DuelDisks.dmi',"ra_ddisk",1,1,8,5,0,/obj/DuelOv/DuelDisk)
else make_image(src,'DuelDisks.dmi',"[N]_ddisk",1,1,8,5,0,/obj/DuelOv/DuelDisk)
make_image(src,'DuelDisks.dmi',"[N]_dslot",1,1,8,5,0,/obj/DuelOv/DuelDisk2)
make_image(src,'DuelDisks.dmi',"[N]_lp",1,1,8,5,0,/obj/DuelOv/ChangeLP)
if(src.ddisk=="Doma")
var/obj/dueldeck=new/obj/DuelOv/DrawCard
dueldeck.name="Deck ([usr.CrntDck.len] Cards)"
//dueldeck.icon_state="[usr.sleeve_type]"
src.client.screen+=dueldeck
dueldeck.screen_loc="7:-5,2"
else
var/obj/dueldeck=new/obj/DuelOv/DrawCard
dueldeck.name="Deck ([usr.CrntDck.len] Cards)"
//dueldeck.icon_state="[usr.sleeve_type]"
src.client.screen+=dueldeck
dueldeck.screen_loc="6:-5,2"
make_image(src,'DuelDisks.dmi',"[N]_z1",1,1,8,5,0,/obj/DuelOv/Zone1)
make_image(src,'DuelDisks.dmi',"[N]_z2",1,1,8,5,0,/obj/DuelOv/Zone2)
make_image(src,'DuelDisks.dmi',"[N]_z3",1,1,8,5,0,/obj/DuelOv/Zone3)
make_image(src,'DuelDisks.dmi',"[N]_z4",1,1,8,5,0,/obj/DuelOv/Zone4)
make_image(src,'DuelDisks.dmi',"[N]_z5",1,1,8,5,0,/obj/DuelOv/Zone5)
make_image(src,'DuelDisks.dmi',"[N]_fst",1,1,8,5,0,/obj/DuelOv/FlipSetST)
if(src.ddisk=="Academy Red") make_image(src,'DuelDisks.dmi',"osiris_grvyrd",1,1,8,5,0,/obj/DuelOv/ViewGraveyard)
if(src.ddisk=="Academy Blue") make_image(src,'DuelDisks.dmi',"obelisk_grvyrd",1,1,8,5,0,/obj/DuelOv/ViewGraveyard)
if(src.ddisk=="Academy Yellow") make_image(src,'DuelDisks.dmi',"ra_grvyrd",1,1,8,5,0,/obj/DuelOv/ViewGraveyard)
else make_image(src,'DuelDisks.dmi',"[N]_grvyrd",1,1,8,5,0,/obj/DuelOv/ViewGraveyard)
make_image(src,'DuelDisks.dmi',"[N]_end",1,1,8,5,0,/obj/DuelOv/EndDuel)

fieldrfg(var/Z)
if(usr.DuelRFG.len==0)
usr.RFG.icon=null
usr.RFG.name=null
usr.RFG.overlays=null
else
var/obj/rfglist
for(var/obj/cards/D in usr.DuelRFG)
rfglist=D
usr.RFG.name="[usr.name]'s RFG"
usr.RFG.name+=" ([usr.DuelRFG.len] Cards)"
if(rfglist.FaceDown==1)
usr.RFG.icon='Sleeves.dmi'
usr.RFG.icon_state="[usr.sleeve_type]"
else usr.RFG.icon=rfglist.icon
if(Z==EAST) usr.RFG.icon=turn(usr.RFG.icon,90)
else usr.RFG.icon=turn(usr.RFG.icon,270)
if(!usr.RFG.overlays.len)
usr.RFG.overlays+='rfg.dmi'
var/obj/rfgico=new/obj/rfg
rfgico.icon='other_icons.dmi'
rfgico.icon_state="rfg"
rfgico.pixel_y+=12
usr.RFG.overlays+=rfgico



There are way too many errors for me to enumerate here. If you wanted to go about solving them, though, you should probably read this and then this.

Hiead
You really want to know how to narrow down the problem?

First: Enable Debugging so we can find the file and line of the problem. This is done by Build > Preference for [game name] > Generate Debugging Mode (1st option)

Second of all, and the most glaring cause: usr... yes, usr in your procedures like in proc/StartDuel(). Don't believe me? Try finding out via DM Reference what usr actually is

Now, check this link out and read it:
http://www.byond.com/members/ DreamMakers?command=view_post&post=35932

Might I suggest sending arguments to the proc who started the duel, or making it mob/proc, such as:
mob/proc/StartDuel()
Use src here, not usr
turf/Click() usr.StartDuel()

OR

proc/StartDuel(mob/M)
if(!ismob(M)||!M.client)return // No mob/client, nothing happens
Use M instead of usr.
turf/Click() StartDuel(usr)


May I suggest using lists as well for some of your stuff?

Third: Too many to list, see what Hiead mentioned.