ID:268468
 
    Vodka
icon = 'Items.dmi'
icon_state = "vodka"
name = "Vodka"
verb
Get()
set category = "Item Commands"
set src in oview(1)
src.Move(usr)
Drop()
set category = "Item Commands"
src.Move(usr.loc)
Drink()
set category = "Item Commands"
usr.HP -= 50
usr.DeathCheck()
world << "[usr] was hit by hard liquor!"
usr.overlays += 'Drunk.dmi'
usr.Strength *= 2
usr.Def /= 2
sleep(250)
usr.overlays -= 'Drunk.dmi'
usr.Strength /= 2
usr.Def *= 2
world << "The effects of [usr]'s buzz have worn off."


=/ The "usr" part has to be there for other parts of the code. (Self tending bar :P)
Help will be appreciated :O
=/ The "usr" part has to be there for other parts of the code. (Self tending bar :P)

Just send the object to null and it'll get deleted once all its procs are done and nothing is referencing it.
In response to Theodis
Yes, but the user can keep using it and using it... I should've been more specific =/
In response to Hell Ramen
Yes, but the user can keep using it and using it... I should've been more specific =/

Then give the object a flag that is set when a user uses it and make sure the flag isn't set before the player drinks it ie

obj/Water/var/drank = 0
obj/Water/proc/Drink()
if(drank)
return //Someone already drank it so bail out
drank = 1


//The rest of the drink source code
In response to Theodis
Thanks :P I was even able to add a "You already drank that!" command. Thank you.
Defining Get() and Drop() for every item is stupid. What you should do is this:
item
parent_type = /obj/ //Treat it as an obj, but exclude obj from the type path
verb
get()
set src in oview(1)
if(Move(usr))
usr << "You pick up [src]"
drop()
if(Move(usr.loc))
usr << "You drop [src]"

Then, you can just define item/whatever, and it'll already have get() and drop() verbs.