/
area/city/
area/crypts/
area/guilds/
area/psuedowild/
area/religion/
data/documents/MPDocs/
data/html/
data/mobprogs/
data/quest/
data/world/
data/world/_utilities/
data/world/images/
design/html/
notes/
player/
#if defined(macintosh)
#include <types.h>
#else
#include <sys/types.h>
#endif
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include "merc.h"
#include "interp.h"
#include "magic.h"
#include "recycle.h"
#include "tables.h"
#define ptc printf_to_char


/*
 * random_kill_bonus()
 *
 * On a kill, players have a chance of a random bonus.
 * This bonus can be pretty much anything, extra experience,
 * questpoints, stat boosts, free spells/enhancement, rare
 * items, etc.
 */
int random_kill_bonus(CHAR_DATA * ch, CHAR_DATA * mob, int experience)
{
    int quest, stat;

    switch(number_range(0, 75))
    {   default:
            break;
        
        /* Case 1: Extra Experience 2x  */
        case 1:
            ptc(ch, "{WThri has smiled apon you. You recive double experience!{x\n\r");
            experience *= 2;
            break;
        /* Case 2: No Experience        */
        case 2:
            ptc(ch, "{RMarduk laughs at you from above, and steals your experience!{x\n\r");
            experience = 0;
            break;
        /* Case 3: 5-10 QPs             */
        case 3:
            quest = number_range(5, 10);
            ptc(ch, "{WKuan Yin smiles on you. You recive %d quest points!{x\n\r", quest);
            ch->quest_curr  += quest;
            ch->quest_accum += quest;
            experience = 0;
            break;
        /* Case 4: +1 Strength */
        case 4:
            stat = 1;
            ptc(ch, "{wYou feel stronger!{x\n\r");
            ch->perm_stat[STAT_STR] += stat;
            ch->mod_stat[STAT_STR]  += stat;
            experience = 0;
            break;
        /* Case 5: +1 Intelligence */
        case 5:
            stat = 1;
            ptc(ch, "{wYou feel smarter!{x\n\r");
            ch->perm_stat[STAT_INT] += stat;
            ch->mod_stat[STAT_INT]  += stat;
            experience = 0;
            break;
        /* Case 6: +1 Wisdom */
        case 6:
            stat = 1;
            ptc(ch, "{wYou feel more wise!{x\n\r");
            ch->perm_stat[STAT_WIS] += stat;
            ch->mod_stat[STAT_WIS]  += stat;
            experience = 0;
            break;
        /* Case 7: +1 Constitution */
        case 7:
            stat = 1;
            ptc(ch, "{wYou feel healthier!{x\n\r");
            ch->perm_stat[STAT_CON] += stat;
            ch->mod_stat[STAT_CON]  += stat;
            experience = 0;
            break;
        /* Case 8: +1 Charisma */
        case 8:
            stat = 1;
            ptc(ch, "{wYou feel more charismatic!{x\n\r");
            ch->perm_stat[STAT_CHA] += stat;
            ch->mod_stat[STAT_CHA]  += stat;
            experience = 0;
            break;
        /* Case 9: +1 Force */
        case 9:
            stat = 1;
            ptc(ch, "{GYou feel more powerful!{x\n\r");
            ch->multis[0] += stat;
            experience = 0;
            break;
        /* Case 10: +1 Intuition */
        case 10:
            stat = 1;
            ptc(ch, "{GYou feel more insightful!{x\n\r");
            ch->multis[1] += stat;
            experience = 0;
            break;
        /* Case 11: +1 Luck */
        case 11:
            stat = 1;
            ptc(ch, "{GYou feel more lucky!{x\n\r");
            ch->multis[2] += stat;
            experience = 0;
            break;
        /* Case 12: +1 Speed */
        case 12:
            stat = 1;
            ptc(ch, "{GYou feel quicker!{x\n\r");
            ch->multis[3] += stat;
            experience = 0;
            break;
        /* Case 13: +1 Resilience */
        case 13:
            stat = 1;
            ptc(ch, "{GYou feel more resilient!{x\n\r");
            ch->multis[4] += stat;
            experience = 0;
            break;
        /* Case 14: +1 Command */
        case 14:
            stat = 1;
            ptc(ch, "{GYou feel more in command of the situation!{x\n\r");
            ch->multis[5] += stat;
            experience = 0;
            break;
    }
    
    return experience;
}

/*
 * heal_char()
 *
 * Function takes care of healing players. Anywhere a player
 * ammounts health, it should go through here.
 * kinda the opposite of damage()
 */
void heal_char (CHAR_DATA * ch, int ammount, bool magic)
{
    /* Malady prevents all healing */
    if (IS_AFFECTED2(ch, AFF2_MALADY))
    {
        stc("{MYour body doesn't seem to heal!{x\n", ch);
        return;
    }
    
    /* Hungry? Non-magical healing of course*/
    if (!magic)
    {
        if (ch->pcdata->condition[COND_HUNGER] == 0)
            ammount /= 2;
        if (ch->pcdata->condition[COND_THIRST] == 0)
            ammount /= 2;
    }
    
    /* Sitting on something? */
    if (!magic)
    {
        if (ch->on != NULL && ch->on->item_type == ITEM_FURNITURE)
            ammount = ammount * ch->on->value[3] / 100;
    }
    if (magic)
    {
        if (ch->on != NULL && ch->on->item_type == ITEM_FURNITURE)
            ammount = ammount * ch->on->value[4] / 100;
    }
    
    /* Take care of position */
    switch (ch->position)
    {   default:
            break;
        case POS_SLEEPING:
            ammount *= 3;
            break;
        case POS_RESTING:
            ammount *= 2;
            break;
        case POS_FIGHTING:
            ammount /= 2;
            break;
    }
    
    /* Take care of heal rate of the room
     * Non-magical adds hp heal rate
     * Magical adds mana regen rate
     */
    if (!magic)
        ammount = ammount * ch->in_room->heal_rate / 100;
    if (magic)
        ammount = ammount * ch->in_room->mana_rate / 100;
    
    /* Rejuvination 5x heal rate IF its non-magic*/
    if (!magic && (IS_AFFECTED2(ch, AFF2_REJUVINATION)))
        ammount *= 5;
    
    /* regeneration 2x heal rate */
    if (IS_AFFECTED(ch, AFF_REGENERATION))
        ammount *= 2;
    
    /* Plague/poison/diease, reduces by 10x if non-magical */
    if (!magic && (IS_AFFECTED(ch, AFF_PLAGUE)))
        ammount = ammount / 10;
    if (!magic && (IS_AFFECTED(ch, AFF_POISON)))
        ammount = ammount / 10;
    
    /* Add the health */
    ch->hit += ammount;
    
    /* Take care of going over max hp */
    if (ch->hit > ch->max_hit)
        ch->hit = ch->max_hit;
    
    /* finally, update their position */
    update_pos(ch);
    
    return;
}