ID:907494
 
(See the best response by Aramm12.)
Problem description:

I seem to run into a lot of issues where I'm not calling ..() in a proc, and it ends up failing to function properly.

I've never really learned when to properly use it. I just place it in where I've seen others use it.

When and where are appropriate places to use this function?
Best response
Since my main key, NNAAAAHH is banned from posting on your topics, even though I do not really know you or why you chose to do as such, I will reply with my friend's old key.

You place ..() to call the default function of the proc you're using it in. If you do not call ..(), you're overwriting the default function with whatever proc you're neglecting to call it in.

Example:
mob/proc/death()
src.dead=1
mob/Enemy/proc/death()
del(src)
mob/Player/proc/death()
src.deaths++
..()
..(args) can be used for a number of things, as Aramm12 stated.

//..(args) calls the parent process(proc) with or without args.
mob
proc
Dead(Killer)
if(Killer)
Killer.kills++
if(!src.client)
del src
AI
proc
Dead(dmg,mob/Killer)
src.health-=dmg
if(src.health<=0)..(Killer)
In a lot of built-in procedures, the reference states what the "Default action" or what it "Returns." When overriding, you access those with ..().

mob/Move()
// this proc has a default action (actually move)
// as well as a return value from that action
. = ..()
if(.)
world << "Moved!"
else world << "Failed to move!"

mob/var/locked
mob/Move()
return !locked && ..()
// ..() is only called when !locked is true
// which is why you can determine when the move succeeds