// This script adjusts the PC's alignment.
// Called from debug console only.

#include "inc_utility"

void main()
{
    object oPC = OBJECT_SELF;
    
    int nOldLawChaos = GetLawChaosValue(oPC); // (100=law, 0=chaos)
    int nOldGoodEvil = GetGoodEvilValue(oPC); // (100=law, 0=chaos)
    DoDebug("Old alignment: " + IntToString(nOldLawChaos) + " / " + IntToString(nOldGoodEvil));

    int nNewLawChaos = nOldLawChaos;
    int nNewGoodEvil = nOldGoodEvil;

    string sNewAlign = GetStringUpperCase(GetLocalString(oPC, "prc_setalign"));
    DeleteLocalString(oPC, "prc_setalign");
    string sNewLawChaos = GetLocalString(oPC, "prc_setalign_lc");
    DeleteLocalString(oPC, "prc_setalign_lc");
    string sNewGoodEvil = GetLocalString(oPC, "prc_setalign_ge");
    DeleteLocalString(oPC, "prc_setalign_ge");

    if (GetStringLength(sNewAlign) == 2)
    {
        string sAlign = GetSubString(sNewAlign, 0, 1);
        if (sAlign == "L")
            nNewLawChaos = 85;
        else if (sAlign == "N")
            nNewLawChaos = 50;
        else if (sAlign == "C")
            nNewLawChaos = 15;
        
        sAlign = GetSubString(sNewAlign, 1, 1);
        if (sAlign == "G")
            nNewGoodEvil = 85;
        else if (sAlign == "N")
            nNewGoodEvil = 50;
        else if (sAlign == "E")
            nNewGoodEvil = 15;
    }
 
    if (sNewLawChaos != "")
    {
        nNewLawChaos = StringToInt(sNewLawChaos);    
        if (nNewLawChaos > 100)
            nNewLawChaos = 100;
        else if (nNewLawChaos < 0)
            nNewLawChaos = 0;
    }

    if (sNewGoodEvil != "")
    {
        nNewGoodEvil = StringToInt(sNewGoodEvil);
        if (nNewGoodEvil > 100)
            nNewGoodEvil = 100;
        else if (nNewGoodEvil < 0)
            nNewGoodEvil = 0;
    }
            
    if (nNewLawChaos > nOldLawChaos)
        AdjustAlignment(oPC, ALIGNMENT_LAWFUL, nNewLawChaos - nOldLawChaos, FALSE);
    else
        AdjustAlignment(oPC, ALIGNMENT_CHAOTIC, nOldLawChaos - nNewLawChaos, FALSE);

    if (nNewGoodEvil > nOldGoodEvil)
        AdjustAlignment(oPC, ALIGNMENT_GOOD, nNewGoodEvil - nOldGoodEvil, FALSE);
    else
        AdjustAlignment(oPC, ALIGNMENT_EVIL, nOldGoodEvil - nNewGoodEvil, FALSE);

    DoDebug("New alignment: " + IntToString(nNewLawChaos) + " / " + IntToString(nNewGoodEvil));
}