/////////////////////////////////////////////////////////////////////////////////////
//// GRAVE DIGGING - shovel & graves
//// By: Capes last modified - 2018-04-14
/////////////////////////////////////////////////////////////////////////////////////
[DEFNAME body_parts]
random_body_part {01b12 1 01b14 1 01b18 1 01b1a 1 01b1c 1 01cdd 1 01ce5 1 01ced 1 01cf0 1 01cef 1 01cee 1 01ce1 1 01ce9 1 01dad 1}
[DEFNAME gravedigging_settings]
GRAVE_RESET_DELAY = 600 //in secounds (10 mins)
////////////////////////////////////////////////////////////
////// shovel
////////////////////////////////////////////////////////////
[ITEMDEF 0f39]
DEFNAME=i_shovel
TYPE=t_weapon_mace_pick
FLIP=1
VALUE=20
WEIGHT=6.0
RESOURCES=4 i_ingot_iron,2 i_log
SKILLMAKE=Tinkering 20.0,t_tinker_tools
TEVENTS=e_grave_digging        //<- this event adds gravedigging to shovel
CATEGORY=Items by Professions
SUBSECTION=Miner
DESCRIPTION=Shovel
DUPELIST=0f3a
ON=@Create
   HITPOINTS={150 250}
   UsesMax=50
[ITEMDEF 0f3a]
//shovel
DUPEITEM=0f39
///////////////////////////////////////////////////////
//// EVENTS e_grave_digging
////    - adding e_grave_digging to TEVENTS of any item provides 
////        this functionality
////    - defines ON=@TargOn_Ground handler
////    - prevents usage if mounted, to far away or if already dug up
////    - makes sure tile selected is i_grave
////    - lowers karma, then randomly picks an outcome
////        - outcomes - 
////        1 - you found nothing
////        2 - you have disturbed the dead, summons 1 undead
////        3 - you found a body part
////        4 - you found something
////    - reduces uses of item (assuming shovel defualts) with possible breakage
////    - stores src.targp in SERV.LIST._graves_dug_up (prevents further digging)
////    - fires a timerf in GRAVE_RESET_DELAY to remove cords from SERV.LIST._graves_dug_up
////        to allow this tile to be dug up again
///////////////////////////////////////////////////////
[TYPEDEF e_grave_digging]
ON=@TargOn_Ground
    //is mounted quit
    IF (<SRC.FINDLAYER.layer_horse>)    
        SRC.SYSMESSAGE You can't dig up a grave while mounted!
        return 1
    ENDIF
    //to far away quit
    IF (<src.distance <src.targp>> > 1)         
        SRC.SYSMESSAGE Your to far away.
        return 1
    ENDIF
    //already dug up
    IF ((<SERV.LIST._graves_dug_up.FINDELEM <src.targp>> != -1) &&(<eval <SERV.LIST._graves_dug_up.COUNT>> != 0))
        SRC.SYSMESSAGE This grave has already been dug up.
        return 1
    ENDIF    
    //only do if (dispid=i_grave)
    IF (<serv.map(<src.targp.x>,<src.targp.y>).statics.0.dispid> == i_grave)
        //dig up grave, add loot, lose karma
        local._karma = <eval <src.karma>>
        local._karma -= 10
        src.karma = <dlocal._karma>
        SRC.SYSMESSAGE @37 You have lost some karma
        
        //get random number 0-3
        local._rnd_num = <eval RAND(4)>
        //respond to random number (maybe replace with a doswitch)
        IF (<eval <local._rnd_num>> == 0)
            //you found nothing
            SRC.SYSMESSAGE You dig but find nothing.
        ELSEIF (<local._rnd_num> == 1)
            //you have disturbed the dead
            SRC.SYSMESSAGE @30 You dig and disturb the dead.
            SERV.NEWNPC {c_zombie 1 c_skeleton 1 c_ghoul 1} 
            NEW.P = <src.targp.x>,<src.targp.y>,<eval <src.targp.z>+1>
        ELSEIF (<local._rnd_num> == 2)
            //you found a body part
            SERV.NEWITEM random_body_part
            SRC.SYSMESSAGE @30 Gross you found a body part.
            NEW.BOUNCE
        ELSE
            //you found something
            SERV.NEWITEM {poor_gold_pile 1 random_jewelry 1 random_jewel 1}    
            SRC.SYSMESSAGE @70 You found <NEW.name>.
            NEW.BOUNCE
        ENDIF
        
        //reduce shovel uses
        USESCUR --
        IF (<USESCUR><=0)
            DESTROY 1 
            SRC.SYSMESSAGE Your shovel broke.
        ENDIF
        
        //store cords & remove cords sometime laiter
        SERV.LIST._graves_dug_up.ADD <src.targp>
        timerf <dDEF.GRAVE_RESET_DELAY> f_remove_grave_dugup_flag <src.targp>        
                
        return 1    //<-- don't run other events ie minning stuff
    ENDIF
///////////////////////////////////////////////////////
//// FUYNCTION     f_remove_grave_dugup_flag <args>
////    Param - <args> = expecting a <P> string equivelent
////        - removes given cords<args> from SERV.LIST._graves_dug_up
////        - this assumes the cords given in <args> exists
///////////////////////////////////////////////////////
[FUNCTION f_remove_grave_dugup_flag]
    //find the element that holds the cords, and remove it
    SERV.LIST._graves_dug_up.<eval <SERV.LIST._graves_dug_up.FINDELEM <args>>>.REMOVE
///////////////////////////////////////////////////////////////
////    Grave Tiles
///////////////////////////////////////////////////////////////
[MULTIDEF m_grave_ns]
//ID=98967F
NAME=Grave
TYPE=t_multi
CATEGORY=Multis
SUBSECTION=Misc
DESCRIPTION=Grave (north south)
MULTIREGION=0,0,0,0
COMPONENT=00edf,0,0
COMPONENT=00ee1,0,-1
[MULTIDEF m_grave_ew]
//ID=98967F
NAME=Grave
TYPE=t_multi
CATEGORY=Multis
SUBSECTION=Misc
DESCRIPTION=Grave (north south)
MULTIREGION=0,0,0,0
COMPONENT=00ee0,0,0
COMPONENT=00ee2,-1,0
[ITEMDEF 0edf]
DEFNAME=i_grave
CATEGORY=Decoration - Dungeons and The Dead
SUBSECTION=Graves & Gravestones
DESCRIPTION=Grave
//TAG._can_be_dug = 1
DUPELIST=0ee0,0ee1,0ee2, 0ed3 //<- these are also considered ID=0edf when querried OR i_grave
ON=@CREATE
    ATTR=08010
[ITEMDEF 0ee0]
//grave
DUPEITEM=0edf
ON=@CREATE
    ATTR=08010
[ITEMDEF 0ee1]
//grave
DUPEITEM=0edf
ON=@CREATE
    ATTR=08010
[ITEMDEF 0ee2]
//grave
DUPEITEM=0edf
ON=@CREATE
    ATTR=08010
    
[ITEMDEF 0ed3]
//grave
DUPEITEM=0edf
ON=@CREATE
    ATTR=08010
[EOF]