diff options
Diffstat (limited to 'npc')
-rw-r--r-- | npc/012-7/_import.txt | 1 | ||||
-rw-r--r-- | npc/012-7/politics.txt | 52 | ||||
-rw-r--r-- | npc/functions/politics.txt | 54 | ||||
-rw-r--r-- | npc/functions/util.txt | 6 |
4 files changed, 113 insertions, 0 deletions
diff --git a/npc/012-7/_import.txt b/npc/012-7/_import.txt index e02dd58c7..d0177ddd3 100644 --- a/npc/012-7/_import.txt +++ b/npc/012-7/_import.txt @@ -3,3 +3,4 @@ "npc/012-7/_warps.txt", "npc/012-7/airlia.txt", "npc/012-7/celestia.txt", +"npc/012-7/politics.txt", diff --git a/npc/012-7/politics.txt b/npc/012-7/politics.txt new file mode 100644 index 000000000..3c97546dd --- /dev/null +++ b/npc/012-7/politics.txt @@ -0,0 +1,52 @@ +// TMW2 Scripts +// Author: +// Jesusalva +// Description: +// Town Administrator file, see npc/functions/politics.txt +// User variables: +// #POL_APPLYWEEK = Week of last application +// #POL_VOTEDAY = Day of last vote + +012-7,51,60,0 script Hurnscald Office NPC_POLITICS,{ +do +{ + mesc ".:: "+l("Hurnscald Townhall")+" ::.", 2; + mesc l("Current Town Administrator: ")+$HURNS_MAYOR$, 3; + mesc l("Application fee: @@ GP", .applytax); + next; + select + l("Information"), + rif(#POL_APPLYWEEK != gettimeparam(GETTIME_WEEKDAY), l("Apply for the office!")), + l("View Candidate List and cast a vote"), + l("[Quit]"); + + switch (@menu) { + case 1: + POL_Information(); + break; + case 2: + // array_push might be too sensible for getd/setd + if (Zeny < .applytax) + break; + Zeny-=.applytax; + $HURNS_MONEY+=.applytax; + #POL_APPLYWEEK=gettimeparam(GETTIME_WEEKDAY); + array_push($HURNS_CANDIDATE$, strcharinfo(0)); + array_push($HURNS_VOTES, 0); + mesc l("Application successful!"), 3; + break; + case 3: + POL_Candidate("HURNS"); + break; + default: + close; + } +} while (True); +end; + +OnInit: + .applytax=50; + .distance=4; + end; +} + diff --git a/npc/functions/politics.txt b/npc/functions/politics.txt index b4ddde37d..64884ca46 100644 --- a/npc/functions/politics.txt +++ b/npc/functions/politics.txt @@ -138,6 +138,60 @@ OnSun0000: 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-1; + + // 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; + next; + return true; } + + diff --git a/npc/functions/util.txt b/npc/functions/util.txt index 3b05c799b..389a764ac 100644 --- a/npc/functions/util.txt +++ b/npc/functions/util.txt @@ -799,6 +799,12 @@ function script gettimeparam { if (.@p == GETTIME_DAYOFMONTH) return .@t; + // Weeks (estimative) + .@a=.@t+3; // 01/01/1970 was a Thursday. So this will make it float at sunday. + .@a=.@a/7; + if (.@p == GETTIME_WEEKDAY) + return .@a; + // Months (estimative) .@t=.@t/30; if (.@p == GETTIME_MONTH) |