summaryrefslogblamecommitdiff
path: root/npc/functions/politics.txt
blob: 773607b31154ce72eeb9f12c60e8908aeca112f5 (plain) (tree)
1
2
3
4
5
6
7
8






                                                                                 
                                  













                                                                             



                                                 














                                                                                        

                                              


















                                                                                              



                                                                                                                   





                                            
          
                    





                                                                           




                                                                               
                        




                                                                                                                                        
                        




                                                                                                                                        
                        




                                                                                                                                        
                      




                                                                                                                                
                        




                                                                                                                                      
                          


                                                                                                                                        




                                             
 




























                                                 








                                                                                                                                 
        

























                                                                                                                                      
 
                         

                                                             
                                





                                                         

                   











                                                  
                                                                                  

                

 

 
// TMW2 Script
// Author:
//    Jesusalva
// Description:
//    Central Town Political System Controller
//    Note: The office is NOT Mayor, we have from kings to mayors here and you're
//    not a citzen (yet). It'll be... I'll think in a name better than Minister.
//    Perhaps, Town Administrator.
// NPCs:
//    Tulim - 
//    Halin - 
//    Hurns - Airlia
//    LoF - 
//    Nival - 
//    Frostia - 
// Variables:
//      $LOC_MAYOR$ - Stores the name of current Hurnscald Mayor
//      $LOC_MONEY - Total money reserves of Hurnscald
//      $LOC_TAX - How much in % is charged as taxes. (OnBuy income)
//      $LOC_EXPORT - Defines how much Hurnscald exports (weekly income)
//      $LOC_REPUTATION - Town reputation. Affects Max Tax and Weekly Income;
// Note: Tax cannot exceed 10% ie 1000. Reputation must be between 0 and 100.
//
//  "Temporary Arrays":
//      $LOC_CANDIDATE$ - Candidate for Office
//      $LOC_VOTES - Number of votes of Candidate

// Proccess Taxes from purchases
// PurchaseTaxes( Location )
function	script	PurchaseTaxes	{
    .@tax=0;
    for (.@i=0; .@i < getarraysize(@bought_nameid); .@i++) {
        // Note: Some NPC might not 
        .@price=getiteminfo(@bought_nameid[.@i], ITEMINFO_BUYPRICE);
        .@tax+=.@price*@bought_quantity[.@i];
    }
    .@loc$=strtoupper(getarg(0, LOCATION$));
    .@vat=getd("$"+.@loc$+"_TAX");
    .@tax=.@tax*.@vat/10000;
    if (.@tax) {
        debugmes "%s paid %d in taxes to %s prefecture!", strcharinfo(0), .@tax, .@loc$;
        .@gp=getd("$"+.@loc$+"MONEY");
        setd("$"+.@loc$+"_MONEY", .@gp+.@tax);
    }
    return;
}

// Proccess Taxes from sales (5% from purchase tax)
// SaleTaxes( Location )
function	script	SaleTaxes	{
    .@tax=0;
    for (.@i=0; .@i < getarraysize(@sold_nameid); .@i++) {
        // Note: Some NPC might not 
        .@price=getiteminfo(@sold_nameid[.@i], ITEMINFO_SELLPRICE);
        .@tax+=.@price*@sold_quantity[.@i];
    }
    .@loc$=strtoupper(getarg(0, LOCATION$));
    .@vat=getd("$"+.@loc$+"_TAX");
    .@vat=.@vat/20; // Only 5% of purchase tax, this is often 0.05%
    .@tax=.@tax*.@vat/10000;
    if (.@tax) {
        debugmes "Sale: %s paid %d in taxes to %s prefecture!", strcharinfo(0), .@tax, .@loc$;
        .@gp=getd("$"+.@loc$+"MONEY");
        setd("$"+.@loc$+"_MONEY", .@gp+.@tax);
        Zeny-=.@tax;
        dispbottom col(l("%s is happy because you've paid %d GP in taxes!", getd("$"+.@loc$+"_MAYOR$"), .@tax), 1);
    }
    return;
}

-	script	Politics	NPC_HIDDEN,{

OnSun0000:
    // Weekly income
    $TULIM_MONEY+=$TULIM_EXPORT*limit(0, $TULIM_REPUTATION, 100)/100;
    $HALIN_MONEY+=$HALIN_EXPORT*limit(0, $HALIN_REPUTATION, 100)/100;
    $HURNS_MONEY+=$HURNS_EXPORT*limit(0, $HURNS_REPUTATION, 100)/100;
    $LOF_MONEY+=$LOF_EXPORT*limit(0, $LOF_REPUTATION, 100)/100;
    $NIVAL_MONEY+=$NIVAL_EXPORT*limit(0, $NIVAL_REPUTATION, 100)/100;
    $FROSTIA_MONEY+=$FROSTIA_EXPORT*limit(0, $FROSTIA_REPUTATION, 100)/100;

    // Send salary to Town Administrators (20% from exports and 5GP/reputation)
    .@tax=$TULIM_EXPORT*limit(0, $TULIM_REPUTATION, 100)/500;
    .@tax+=$TULIM_REPUTATION*5;
    .@tax=min($TULIM_MONEY, .@tax);
    $TULIM_MONEY-=.@tax;
    rodex_sendmail(gf_charnameid($TULIM_MAYOR$), "Tulimshar Townhall", "Term Income", "You've received the money for the term.", .@tax);

    .@tax=$HALIN_EXPORT*limit(0, $HALIN_REPUTATION, 100)/500;
    .@tax+=$HALIN_REPUTATION*5;
    .@tax=min($HALIN_MONEY, .@tax);
    $HALIN_MONEY-=.@tax;
    rodex_sendmail(gf_charnameid($HALIN_MAYOR$), "Halinarzo Townhall", "Term Income", "You've received the money for the term.", .@tax);

    .@tax=$HURNS_EXPORT*limit(0, $HURNS_REPUTATION, 100)/500;
    .@tax+=$HURNS_REPUTATION*5;
    .@tax=min($HURNS_MONEY, .@tax);
    $HURNS_MONEY-=.@tax;
    rodex_sendmail(gf_charnameid($HURNS_MAYOR$), "Hurnscald Townhall", "Term Income", "You've received the money for the term.", .@tax);

    .@tax=$LOF_EXPORT*limit(0, $LOF_REPUTATION, 100)/500;
    .@tax+=$LOF_REPUTATION*5;
    .@tax=min($LOF_MONEY, .@tax);
    $LOF_MONEY-=.@tax;
    rodex_sendmail(gf_charnameid($LOF_MAYOR$), "LoF Townhall", "Term Income", "You've received the money for the term.", .@tax);

    .@tax=$NIVAL_EXPORT*limit(0, $NIVAL_REPUTATION, 100)/500;
    .@tax+=$NIVAL_REPUTATION*5;
    .@tax=min($NIVAL_MONEY, .@tax);
    $NIVAL_MONEY-=.@tax;
    rodex_sendmail(gf_charnameid($NIVAL_MAYOR$), "Nivalis Townhall", "Term Income", "You've received the money for the term.", .@tax);

    .@tax=$FROSTIA_EXPORT*limit(0, $FROSTIA_REPUTATION, 100)/500;
    .@tax+=$FROSTIA_REPUTATION*5;
    .@tax=min($FROSTIA_MONEY, .@tax);
    $FROSTIA_MONEY-=.@tax;
    rodex_sendmail(gf_charnameid($FROSTIA_MAYOR$), "Frostia Townhall", "Term Income", "You've received the money for the term.", .@tax);

    // Conduct elections
    .@w=array_highest($TULIM_VOTES);
    if ($TULIM_CANDIDATE$[.@w] != "")
        $TULIM_MAYOR$=$TULIM_CANDIDATE$[.@w];
    deletearray($TULIM_CANDIDATE$);
    deletearray($TULIM_VOTES);

    .@w=array_highest($HALIN_VOTES);
    if ($HALIN_CANDIDATE$[.@w] != "")
        $HALIN_MAYOR$=$HALIN_CANDIDATE$[.@w];
    deletearray($HALIN_CANDIDATE$);
    deletearray($HALIN_VOTES);

    .@w=array_highest($HURNS_VOTES);
    if ($HURNS_CANDIDATE$[.@w] != "")
        $HURNS_MAYOR$=$HURNS_CANDIDATE$[.@w];
    deletearray($HURNS_CANDIDATE$);
    deletearray($HURNS_VOTES);

    .@w=array_highest($LOF_VOTES);
    if ($LOF_CANDIDATE$[.@w] != "")
        $LOF_MAYOR$=$LOF_CANDIDATE$[.@w];
    deletearray($LOF_CANDIDATE$);
    deletearray($LOF_VOTES);

    .@w=array_highest($NIVAL_VOTES);
    if ($NIVAL_CANDIDATE$[.@w] != "")
        $NIVAL_MAYOR$=$NIVAL_CANDIDATE$[.@w];
    deletearray($NIVAL_CANDIDATE$);
    deletearray($NIVAL_VOTES);

    .@w=array_highest($FROSTIA_VOTES);
    if ($FROSTIA_CANDIDATE$[.@w] != "")
        $FROSTIA_MAYOR$=$FROSTIA_CANDIDATE$[.@w];
    deletearray($FROSTIA_CANDIDATE$);
    deletearray($FROSTIA_VOTES);

    // Notify new mayors of their victory
    rodex_sendmail(gf_charnameid($TULIM_MAYOR$), "Tulimshar Townhall", "Election Victory", "You've been elected to the office!");
    rodex_sendmail(gf_charnameid($HALIN_MAYOR$), "Halinarzo Townhall", "Election Victory", "You've been elected to the office!");
    rodex_sendmail(gf_charnameid($HURNS_MAYOR$), "Hurnscald Townhall", "Election Victory", "You've been elected to the office!");
    rodex_sendmail(gf_charnameid($LOF_MAYOR$), "LoF Townhall", "Election Victory", "You've been elected to the office!");
    rodex_sendmail(gf_charnameid($NIVAL_MAYOR$), "Nivalis Townhall", "Election Victory", "You've been elected to the office!");
    rodex_sendmail(gf_charnameid($FROSTIA_MAYOR$), "Frostia Townhall", "Election Victory", "You've been elected to the office!");

    end;
}
/////////////////////////


// Dialog helpers
// General info
// POL_Information(  )
function	script	POL_Information	{

    mesc l("Weekly, at Sunday 00:00, elections are held.");
    mesc l("The current town administrator will be re-elected if there are no candidates.");
    mesc l("Town Administrator can use the town money for investments, and also receive a salary depending on how well the town is.");
    next;
    mesc l("A player may be the town admin of several different towns.");
    mesc l("However, an account may only apply for an office weekly.");
    mesc l("The account with highest votes will win. Ties will be solved by date of application.");
    mesc l("An account may vote anywhere, but only once every day.");
    next;
    return;
}

// Candidate Info and voting
// POL_Candidate( TOWNCODE )
function	script	POL_Candidate	{
    copyarray( .@cd$, getd("$"+getarg(0)+"_CANDIDATE$"), getarraysize(getd("$"+getarg(0)+"_CANDIDATE$")) );
    copyarray( .@vt, getd("$"+getarg(0)+"_VOTES"), getarraysize(getd("$"+getarg(0)+"_VOTES")) );

    .@list$="Don't vote";
    for (.@i=0;.@i<getarraysize(.@cd$);.@i++) {
        mesc .@cd$[.@i] + " - "+.@vt[.@i] + " " + l("votes");
        .@list$+=":"+.@cd$[.@i];
    }

    next;
    if (#POL_VOTEDAY == gettimeparam(GETTIME_DAYOFMONTH))
        return;
    mesc l("In whom to vote?");
    select .@list$;
    .@vote=@menu-2;

    // Didn't vote
    if (.@vote < 0)
        return;

    // Cast the vote
    #POL_VOTEDAY=gettimeparam(GETTIME_DAYOFMONTH);
    .@str$="$"+getarg(0)+"_VOTES"+"["+.@vote+"]";
    .@vt=getd(.@str$);
    setd(.@str$, .@vt+1);

    mesc l("The vote was cast."), 3;
    mesc l("You supported: ")+getd("$"+getarg(0)+"_CANDIDATE$"+"["+.@vote+"]"), 3;
    next;
    return true;
}