/////////////////////////////////////////////////////////
//
//  Craftable Natural Resources (CNR) by Festyx
//
//  Name:  cnr_rock_ondam
//
//  Desc:  When a rock is beaten, chips are produced.
//
//  Author: David Bobeck 26Jan03
//
/////////////////////////////////////////////////////////
#include "cnr_config_inc"
#include "cnr_language_inc"

void SpawnNewRock(string sRockTag, location locRock)
{
  CreateObject(OBJECT_TYPE_PLACEABLE, sRockTag, locRock);
  DestroyObject(OBJECT_SELF);
}

void main()
{
  object oDamager = GetLastDamager();
  location locRock = GetLocation(OBJECT_SELF);
  object oNugget1 = OBJECT_INVALID;
  object oNugget2 = OBJECT_INVALID;
  object oGem = OBJECT_INVALID;
  string sRockTag = GetTag(OBJECT_SELF);

  if (!GetIsObjectValid(oDamager) || !GetIsPC(oDamager))
  {
    return;
  }

  if (GetLocalInt(OBJECT_SELF, "CnrDamageBelowThreshold"))
  {
    return;
  }

  // the rock starts with 100 or so hit points
  if (GetCurrentHitPoints() < 80)
  {
    SetLocalInt(OBJECT_SELF, "CnrDamageBelowThreshold", TRUE);

    // Create the nugget and have the PC pick it up.
    string sNuggetTag = GetLocalString(GetModule(), sRockTag + "_NuggetTag");
    if (sNuggetTag != "")
    {
      oNugget1 = CreateObject(OBJECT_TYPE_ITEM, sNuggetTag, GetLocation(oDamager));
      FloatingTextStringOnCreature(CNR_TEXT_YOU_HAVE_CHIPPED_OFF_A + GetName(oNugget1) + "!", oDamager);

      if (cnr_d100(1) <= CNR_FLOAT_ORE_MINING_FIND_SECOND_NUGGET_PERCENTAGE)
      {
        oNugget2 = CreateObject(OBJECT_TYPE_ITEM, sNuggetTag, GetLocation(oDamager));
        FloatingTextStringOnCreature(CNR_TEXT_AND_A_SECOND + GetName(oNugget2) + "!", oDamager);
      }

      if (cnr_d100(1) <= CNR_FLOAT_ORE_MINING_FIND_MYSTERY_MINERAL_PERCENTAGE)
      {
        oGem = CreateObject(OBJECT_TYPE_ITEM, "cnrGemMineral000", GetLocation(oDamager));
        FloatingTextStringOnCreature(CNR_TEXT_AND_A + GetName(oGem) + "!", oDamager);
      }

      AssignCommand(oDamager, ActionPickUpItem(oNugget1));

      if (oNugget2 != OBJECT_INVALID)
      {
        AssignCommand(oDamager, ActionPickUpItem(oNugget2));
      }

      if (oGem != OBJECT_INVALID)
      {
        AssignCommand(oDamager, ActionPickUpItem(oGem));
      }
    }

    // Sometimes the rock will get used up
    if (cnr_d100(1) <= CNR_FLOAT_ORE_MINING_DEPOSIT_BREAKAGE_PERCENTAGE)
    {
      if (CNR_FLOAT_ORE_MINING_DEPOSIT_RESPAWN_TIME_SECS > 0.0)
      {
        ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(), OBJECT_SELF);
        object oSpawner = CreateObject(OBJECT_TYPE_PLACEABLE, "cnrobjectspawner", locRock);
        AssignCommand(oSpawner, DelayCommand(CNR_FLOAT_ORE_MINING_DEPOSIT_RESPAWN_TIME_SECS, SpawnNewRock(sRockTag, locRock)));
        DestroyObject(OBJECT_SELF, 2.0); // provide time for death effect
        FloatingTextStringOnCreature(CNR_TEXT_THATS_THE_END_OF_THAT, oDamager);
      }
      return;
    }

    // Create a new rock with full hitpoints
    CreateObject(OBJECT_TYPE_PLACEABLE, sRockTag, locRock);
    DestroyObject(OBJECT_SELF);
  }
}