#include "cleanup"
#include "spawner"

void GroupThanks(object oPC)
{
 object oTeam;
 object oCreature;
 int oDice;


 oCreature = GetFirstObjectInArea(OBJECT_SELF);
 while ((GetObjectType(oCreature)!=OBJECT_TYPE_CREATURE)||
       (GetIsPC(oCreature))||(GetTag(oCreature)=="starfall")||(GetTag(oCreature)=="reaper"))
      {
       oCreature =GetNextObjectInArea(OBJECT_SELF);
      }


 oTeam = GetFirstFactionMember(oCreature, FALSE);
 while (GetIsObjectValid(oTeam))
      {
       if (!GetIsDead(oTeam))
          {
           NPCvoice(oTeam, oPC, 9);
           DelayCommand(0.8, NPCvoice(oTeam, oPC, 10));

           oDice = d2();
           if (oDice==1)
              {
               DelayCommand(1.0, AssignCommand(oTeam, ActionPlayAnimation
               (ANIMATION_FIREFORGET_GREETING)));
              }
           else
              {
               DelayCommand(1.0, AssignCommand(oTeam, ActionPlayAnimation
               (ANIMATION_FIREFORGET_BOW)));
              }

          }
       oTeam = GetNextFactionMember(oCreature, FALSE);
      }
}

void LimboSend(object oPC)
{
object oTarget1,
       oTarget2,
       oTarget3,
       oTarget4,
       oTarget5,
       oTarget6,
       oTarget7,
       oTarget8,
       oTarget9,
       oTarget10,
       oTarget11,
       oTarget12,
       oTarget13,
       oTarget14,
       oTarget15,
       oTarget16,
       oTarget17,
       oStuff;

    object oMod = GetModule();
    SetLocalInt(oMod, "d1", 0);
    SetLocalInt(oMod, "d2", 0);
    SetLocalInt(oMod, "d2a", 0);
    SetLocalInt(oMod, "d3", 0);
    SetLocalInt(oMod, "d4", 0);
    SetLocalInt(oMod, "d5", 0);
    SetLocalInt(oMod, "sw_hw", 0);
    SetLocalInt(oMod, "sw_dr", 0);
    SetLocalInt(oMod, "sw_bl", 0);
    SetLocalInt(oMod, "sw_pf", 0);
    SetLocalInt(oMod, "sw_df", 0);
    SetLocalInt(oMod, "sw_pm", 0);
    SetLocalInt(oMod, "sw_bm", 0);
    SetLocalInt(oMod, "sw_lm", 0);
    SetLocalInt(oMod, "sw_ll", 0);
    SetLocalInt(oMod, "sw_xx", 0);
    SetLocalInt(oMod, "ch_hw", 0);
    SetLocalInt(oMod, "ch_dr", 0);
    SetLocalInt(oMod, "ch_bl", 0);
    SetLocalInt(oMod, "ch_pf", 0);
    SetLocalInt(oMod, "ch_df", 0);
    SetLocalInt(oMod, "ch_pm", 0);
    SetLocalInt(oMod, "ch_bm", 0);
    SetLocalInt(oMod, "ch_lm", 0);
    SetLocalInt(oMod, "ch_ll", 0);
    SetLocalInt(oMod, "ch_xx", 0);
    SetLocalInt(oMod, "gr_xx", 0);
    SetLocalInt(oMod, "challenge", 0);
    SetLocalInt(oMod, "hwar_on", 0);
    SetLocked(GetObjectByTag("arena_gate"), FALSE);

object oMonster = GetNearestCreature(CREATURE_TYPE_IS_ALIVE, TRUE, oPC);
effect eEffect = EffectVisualEffect(VFX_IMP_UNSUMMON);
oTarget1 = GetObjectByTag("zep_balrog001");
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, GetLocation(oTarget1));
DestroyObject(GetObjectByTag("zep_balrog001"));
oTarget2 = GetObjectByTag("dragon1");
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, GetLocation(oTarget2));
DestroyObject(GetObjectByTag("dragon1"));
oTarget3 = GetObjectByTag("zep_halfdrafn001");
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, GetLocation(oTarget3));
DestroyObject(GetObjectByTag("zep_halfdrafn001"));
oTarget4 = GetObjectByTag("zep_marilithb001");
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, GetLocation(oTarget4));
DestroyObject(GetObjectByTag("zep_marilithb001"));
oTarget5 = GetObjectByTag("palewarrior");
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, GetLocation(oTarget5));
DestroyObject(GetObjectByTag("palewarrior"));
oTarget6 = GetObjectByTag("zep_pitfiend001");
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, GetLocation(oTarget6));
DestroyObject(GetObjectByTag("zep_pitfiend001"));
oTarget7 = GetObjectByTag("dopple");
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, GetLocation(oTarget7));
DestroyObject(GetObjectByTag("dopple"));
oTarget8 = GetObjectByTag("boss1");
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, GetLocation(oTarget8));
DestroyObject(GetObjectByTag("boss1"));
oTarget9 = GetObjectByTag("lord");
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, GetLocation(oTarget9));
DestroyObject(GetObjectByTag("lord"));
oTarget10 = GetObjectByTag("lucifer");
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, GetLocation(oTarget10));
DestroyObject(GetObjectByTag("lucifer"));
oTarget11 = GetObjectByTag("boss002");
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, GetLocation(oTarget11));
DestroyObject(GetObjectByTag("boss002"));
oTarget12 = GetObjectByTag("thor");
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, GetLocation(oTarget12));
DestroyObject(GetObjectByTag("thor"));
oTarget13 = GetObjectByTag("angel");
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, GetLocation(oTarget13));
DestroyObject(GetObjectByTag("angel"));
oTarget14 = GetObjectByTag("notime1");
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, GetLocation(oTarget14));
DestroyObject(GetObjectByTag("notime1"));
oTarget15 = GetObjectByTag("notime2");
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, GetLocation(oTarget15));
DestroyObject(GetObjectByTag("notime2"));
oTarget16 = GetObjectByTag("notime3");
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, GetLocation(oTarget16));
DestroyObject(GetObjectByTag("notime3"));
oTarget17 = GetObjectByTag("notime4");
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, GetLocation(oTarget17));
DestroyObject(GetObjectByTag("notime4"));
oTarget17 = GetObjectByTag("notime4");
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, GetLocation(oTarget17));
DestroyObject(GetObjectByTag("death"));
oTarget17 = GetObjectByTag("death");
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, GetLocation(oTarget17));
DestroyObject(GetObjectByTag("dragon2"));oTarget17 = GetObjectByTag("notime4");
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, GetLocation(oTarget17));
DestroyObject(GetObjectByTag("dragon2"));
oTarget17 = GetObjectByTag("mistress2");
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, GetLocation(oTarget17));
DestroyObject(GetObjectByTag("mistress2"));
oTarget17 = GetObjectByTag("bard2");
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, GetLocation(oTarget17));
DestroyObject(GetObjectByTag("bard2"));
oTarget17 = GetObjectByTag("darcher");
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, GetLocation(oTarget17));
DestroyObject(GetObjectByTag("darcher"));
oTarget17 = GetObjectByTag("beli2");
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, GetLocation(oTarget17));
DestroyObject(GetObjectByTag("beli2"));
oTarget17 = GetObjectByTag("palewarrior3");
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, GetLocation(oTarget17));
DestroyObject(GetObjectByTag("palewarrior3"));
oTarget17 = GetObjectByTag("hdrag2");
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, GetLocation(oTarget17));
DestroyObject(GetObjectByTag("hdrag2"));
oTarget17 = GetObjectByTag("pfiend2");
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, GetLocation(oTarget17));
DestroyObject(GetObjectByTag("pfiend2"));
oTarget17 = GetObjectByTag("horod2");
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, GetLocation(oTarget17));
DestroyObject(GetObjectByTag("horod2"));
oTarget17 = GetObjectByTag("div2");
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, GetLocation(oTarget17));
DestroyObject(GetObjectByTag("div2"));
oTarget17 = GetObjectByTag("pwar3");
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, GetLocation(oTarget17));
DestroyObject(GetObjectByTag("pwar3"));

if (GetIsEnemy(oPC, oMonster))
{
oStuff = GetFirstItemInInventory(oMonster);
            while(GetIsObjectValid(oStuff))
            {
             DestroyObject(oStuff);
             oStuff = GetNextItemInInventory(oMonster);
            }
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eEffect, GetLocation(oMonster));
DestroyObject(oMonster);
}
}

void Limbo(object oPC)
{
LimboSend(oPC);
DelayCommand(0.5, LimboSend(oPC));
DelayCommand(1.0, LimboSend(oPC));
DelayCommand(1.5, LimboSend(oPC));

//DelayCommand(5.0, CleanArea(oPC));
}






void EradS(object oPC)
{
effect eEffect= EffectDeath();
object oTarget;
object oStuff;
string sRef;
object oPest;

oPest= GetFirstObjectInArea(OBJECT_SELF);
while (GetIsObjectValid(oPest))
      {
       if ((!GetIsPC(oPest))&&(GetTag(oPest)!="starfall"))
           {
            ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oPest);
           }
       oPest = GetNextObjectInArea(OBJECT_SELF);
      }
}

void Eradicate(object oPC)
{
object oMod = GetModule();
int iStatus = GetLocalInt(oMod, "war_won");
int iTurnFlag = GetLocalInt(oMod, "turn_flag");
int iPCSide = GetLocalInt(oPC, "pc_side");
int iHappy = GetLocalInt(oPC, "iHappy");
int iConvSwitch = GetLocalInt(oPC, "conv_switch");

//FloatingTextStringOnCreature("conv switch: "+IntToString(iConvSwitch), oPC);
//FloatingTextStringOnCreature("war won: "+IntToString(iStatus), oPC);
//FloatingTextStringOnCreature("iHappy: "+IntToString(iHappy), oPC);

if ((iConvSwitch==1)&&(iStatus==1))
   {
    if (iHappy==1)
       {

        SetLocalInt(oPC, "iHappy", 0);
        AssignCommand(oPC, PlayVoiceChat(VOICE_CHAT_GOODBYE));
        GroupThanks(oPC);
        DelayCommand(5.0, Limbo(oPC));
        SetLocalInt(oMod, "war_won",0);
        return;
       }
   Limbo(oPC);
   return;
  }


 if ((iStatus==1)&&(iTurnFlag!=1)&&(iPCSide!=0))
   {
    if (iHappy==1)
       {

        SetLocalInt(oPC, "iHappy", 0);
        AssignCommand(oPC, PlayVoiceChat(VOICE_CHAT_GOODBYE));
        GroupThanks(oPC);
        DelayCommand(5.0, Limbo(oPC));
        SetLocalInt(oMod, "war_won",0);
       }
    else
       {
        Limbo(oPC);
       }
   }
else
   {
    EradS(oPC);
    DelayCommand(0.5, EradS(oPC));
    DelayCommand(1.0, EradS(oPC));
    DelayCommand(1.5, EradS(oPC));
    DelayCommand(5.0, CleanArea(oPC));
   }
}



//void main (){}