@program #1185 1 1000 d i ( Alynna's object oriented refresh v2.0 ) $def notify ansi_notify $def notify_exclude ansi_notify_exclude $def rpsys "$rpsystem" match $def time2long timex $include #2123 $include $lib/rp $include $lib/alynna ( Resource defines ) $def RESOURCES me @ "resources" getstatint me @ "special/raise-resources" getstatint + $def MAXRESOURCES me @ "resources" getstatint me @ "special/raise-resources" getstatint + 1 + dup * ( Note to coders: New modules must be (1) specified in 'main' and (2) exit only with the strings they want to output in an array. (3) Adjust jobjp when adding jp to someones current job (4) Adjust otherjp when adding jp to anything else. ) lvar param lvar jobjp lvar otherjp lvar totaljp : growthfactor ( f -- f ) me @ "growth" getstatfloat 100.0 + 100.0 / * ; : module ( s a -- ) var modname var modoutput var out modoutput ! modname ! modoutput @ foreach out ! pop out @ if out @ tostr modname @ pretty tellme then repeat ; : magic-study-refresh ( -- a ) var number var target var x1 var Ostudier var Ostudieri me @ "Jobs/Mystic Scholar" getstatfloat me @ "Dream" getstatint 4.0 / growthfactor + me @ "Jobs/Mystic Scholar" rot setstat me @ "Jobs/Mystic Scholar" getstatfloat me @ "Jobs/Mystic Scholarspent" getstatfloat - number ! me @ "Dream" getstatint if str "Mystic study in Dream (^GREEN^" me @ "Dream" getstatstr "^NORMAL^) = ^GREEN^" me @ "Dream" getstatint 4.0 / growthfactor dup otherjp @ + otherjp ! 2 fchop "^NORMAL^jp in Mystic Scholar." cat Ostudieri ! then number @ 3 < if { ostudieri @ ostudier @ } array_make exit then random rpsys "Scholar#" getpropstr atoi % 1 + target ! rpsys "Scholar#/" target @ intostr strcat getpropstr target ! 120 me @ "mage?" getstatint not if 50 + then me @ "Magery" getstatint 6 / not if 50 + then x1 ! me @ target @ "Special/" swap strcat getstatint 10 = if { ostudieri @ ostudier @ } array_make exit then me @ target @ "Special/" swap strcat getstatint dup not if pop 5.0 else 3.0 * then rpsys "cost/" target @ strcat getpropstr atoi 1 + * x1 @ * 100 / x1 ! x1 @ number @ > if { ostudieri @ ostudier @ } array_make exit then me @ target @ "Special/" swap strcat getstatint 1 + me @ target @ "Special/" swap strcat rot setstat me @ "Jobs/Mystic Scholarspent" getstatfloat x1 @ + me @ "Jobs/Mystic Scholarspent" rot setstat str "You learn " target @ " from your research in Mystic Scholar." cat Ostudier ! { ostudieri @ ostudier @ } array_make ; : lore-study-refresh ( -- a ) var number var target var x1 var Olstudier var Olstudieri me @ "Jobs/Scholar" getstatfloat me @ "Research" getstatint 4.0 / growthfactor + me @ "Jobs/Scholar" rot setstat me @ "Jobs/Scholar" getstatfloat me @ "Jobs/Scholarspent" getstatfloat - number ! me @ "Research" getstatint if str "Lore study in Research (^GREEN^" me @ "research" getstatstr "^NORMAL^) = ^GREEN^" me @ "Research" getstatint 4.0 / growthfactor dup otherjp @ + otherjp ! 2 fchop "^NORMAL^jp in Scholar." cat Olstudieri ! then number @ 3 < if { olstudieri @ olstudier @ } array_make exit then random rpsys "lScholar#" getpropstr atoi % 1 + target ! rpsys "lScholar#/" target @ intostr strcat getpropstr target ! 220 me @ "mage?" getstatint not if 50 - then me @ "Magery" getstatint 6 / not if 50 - then x1 ! me @ target @ getstatint 10 = if { olstudieri @ olstudier @ } array_make exit then me @ target @ getstatint dup not if pop 5.0 else 2.0 * then rpsys "cost/" target @ strcat getpropstr atoi 1 + * x1 @ * 100 / x1 ! x1 @ number @ > if { olstudieri @ olstudier @ } array_make exit then me @ target @ getstatint 1 + me @ target @ rot setstat me @ "Jobs/Scholarspent" getstatfloat x1 @ + me @ "Jobs/Scholarspent" rot setstat str "You learn " target @ " from your research in Scholar." cat Olstudier ! { olstudieri @ olstudier @ } array_make ; : staff-refresh ( -- a ) var OShards me @ mlevel 3 > if me @ "@rp/SLast Cycle" getpropval not if me @ "SLast cycle" systime setstat else systime me @ "@rp/SLast Cycle" getpropval - dup 86400 30 * swap - time2long "^GREEN^" swap strcat "^ ^ until your next staff refresh." strcat Oshards ! 86400 me @ player? not if 3 * then > if me @ "SLast Cycle" systime setstat me @ "Special/Shards" getstatint 1 + me @ "Special/Shards" rot setstat "You got a shard from a staff refresh!" Oshards ! then then then { Oshards @ } array_make ; : vote-refresh var Ovotes me @ "voted" "" setstat me @ "votes" getstatint 4 + dup 10 > if pop 10 then me @ swap "votes" swap setstat str "You get 4 more votes, giving you a total of ^GREEN^" me @ "votes" getstatstr "^NORMAL^" cat Ovotes ! { Ovotes @ } array_make ; : jobswitch-refresh var target var Ojob me @ "jobswitch" getstatint not if str "You gained ^GREEN^1.0^NORMAL^jp for staying in " me @ "job" getstatstr "." cat Ojob ! me @ "Job" getstatstr "Jobs/" swap strcat target ! me @ target @ getstatfloat 1.0 dup jobjp @ + jobjp ! + me @ target @ rot setstat then { Ojob @ } array_make ; : mentor-refresh var target var shop me @ "mentored" getstatint dbref dup player? not if pop else shop ! me @ "mentorjob" getstatstr dup "0" smatch if pop me @ "job" getstatstr then "Jobs/" swap strcat target ! shop @ target @ getstatfloat me @ target @ getstatfloat over > if 1.0 + shop @ target @ rot setstat shop @ "You gain ^GREEN^1^NORMAL^ from your mentor." "MENTOR" pretty notify else pop then then me @ "jobswitch" 0 setstat me @ "mentorjob" getstatstr dup "0" smatch if pop me @ "job" getstatstr then "Jobs/" swap strcat target ! me @ "mentored" getstatint dbref dup player? not if pop else shop ! shop @ "@rp/mentortoggle" getpropval not if shop @ "mentortoggle" 1 setstat else shop @ target @ getstatfloat me @ target @ getstatfloat over > if me @ target @ getstatfloat 50.0 / dup 8 > if pop 8.0 then 2 / + shop @ target @ rot setstat shop @ "You gain ^GREEN^" me @ target @ getstatfloat 50 / dup 8 > if pop 8.0 then 2 / 2 fchop strcat "^NORMAL^ JP from your mentor." strcat "MENTOR" pretty notify shop @ "mentortoggle" 0 setstat else pop then then then { "" } array_make ; : hpmptp-refresh var doctor var temp var Ohpmp "" Ohpmp ! ( recover HP ) me @ "HP" getstatint me @ maxhp < if me @ "Stamina" getstatint me @ "Special/Raise-HP" getstatint + random 100 % 11 + * temp ! me @ "Doctor" getstatint dup if dbref dup player? if doctor ! doctor @ "Intelligence" getstatint doctor @ "Perception" getstatint + 2 / doctor @ "Medicine" getstatint doctor 2 / @ "Chemistry" getstatint doctor @ "Herbalism" getstatint + 4 / + 5d5 + 100 * 20 / dup intostr "Healing rate: ^GREEN^" swap strcat "%^NORMAL^ " strcat Ohpmp @ swap strcat Ohpmp ! temp @ * 100 / temp ! else pop then else pop then me @ "MP" getstat temp @ + me @ "MP" rot setstat str "HP regained: ^RED^" temp @ "^NORMAL^ " cat Ohpmp @ swap strcat Ohpmp ! then me @ "HP" getstatint me @ maxhp > if me @ "HP" me @ maxhp setstat then ( recover MP ) me @ "MP" getstatint me @ maxmp < if random me @ "Magery" getstatint 50 * % 1 + me @ "mage?" getstatint if 1 + then me @ "magery" getstatint 6 / + me @ "Special/Raise-MP" getstatint + me @ "Special/Lower-MP" getstatint - temp ! me @ "MP" getstat temp @ + me @ "MP" rot setstat str "MP regained: ^CYAN^" temp @ "^NORMAL^ " cat Ohpmp @ swap strcat Ohpmp ! then me @ "MP" getstatint me @ maxmp > if me @ "MP" me @ maxmp setstat then ( Recover TP ) me @ "TP" getstatint me @ maxtp < if random me @ "Willpower" getstatint 10 * % 1 + me @ "mage?" getstatint not if 1 + then me @ "Special/Raise-TP" getstatint + me @ "Special/Lower-TP" getstatint - temp ! me @ "TP" getstat temp @ + me @ "TP" rot setstat str "TP regained: ^YELLOW^" temp @ "^NORMAL^ " cat Ohpmp @ swap strcat Ohpmp ! then me @ "TP" getstatint me @ maxtp > if me @ "TP" me @ maxtp setstat then ( hpmptpinit ) me @ "@rp/HPMPInit" getpropval not me @ "finish" getstatint and if me @ "HPMPInit" 1 setstat me @ maxmp me @ "MP" rot setstat me @ maxhp me @ "HP" rot setstat me @ maxtp me @ "TP" rot setstat "First time refresh, Setting ^RED^HP^NORMAL^, ^CYAN^MP^NORMAL^ and ^YELLOW^TP^NORMAL^ to MAX" Ohpmp ! then { Ohpmp @ } array_make ; : jp-refresh var target var jpgain var xpgain var Ojpvotes var Ojpxp ( JP for votes and time served) me @ "Votedfor" getstatint me @ "xp" getstatfloat or if me @ "votedfor" getstatint sqrt growthfactor me @ "xp" getstatfloat 50.0 / + 1.0 + growthfactor target ! me @ "jobs/" me @ "job" getstatstr strcat dup me @ swap getstatfloat target @ + me @ rot rot setstat pop me @ "votedfor" getstatint sqrt growthfactor jpgain ! me @ "xp" getstatfloat 50.0 / 1.0 + growthfactor xpgain ! str "JP earned from votes (^GREEN^" me @ "votedfor" getstatint "^NORMAL^) = ^GREEN^" jpgain @ growthfactor dup jobjp @ + jobjp ! 2 fchop "^NORMAL^" cat Ojpvotes ! str "JP earned from time served (^GREEN^" me @ "xp" getstatint "^NORMAL^) = ^GREEN^" xpgain @ growthfactor dup jobjp @ + jobjp ! 2 fchop "^NORMAL^" cat Ojpxp ! me @ "xp" 0 setstat me @ "votedfor" 0 setstat then { Ojpvotes @ Ojpxp @ } array_make ; : gil-refresh var graviton var giltemp var gildiff var Oinfluence ( Now for the gil refresh ) MAXRESOURCES graviton ! ( and the graviton level ) me @ "gil" getstatfloat frand 5.0 * + graviton @ - gildiff ! ( get the difference ) gildiff @ 0 < if ( If we need more gil ) random 25 % 100.0 / ( percentage to affect by ) 0 gildiff @ - ( positive gildiff ) * giltemp ! ( do the multiplication ) str "You gain ^GREEN^" giltemp @ 2 fchop "^NORMAL^ gil from various sources." cat Oinfluence ! me @ "gil" getstatfloat giltemp @ + me @ "gil" rot setstat else ( random 25 % 100.0 / ( percentage to affect by ) gildiff @ ( positive gildiff ) * giltemp ! ( do the multiplication ) str "You lose ^GREEN^" giltemp @ 2 fchop "^NORMAL^ gil from living expenses." cat Oinfluence ! me @ "gil" getstatfloat giltemp @ - me @ "gil" rot setstat ) then { Oinfluence @ } array_make ; : main ( -- ) param ! ( Refresh testing ) command @ "+xrefresh" smatch if me @ "last cycle" 0 setstat then ( initialize jp counters ) 0 jobjp ! 0 otherjp ! 0 totaljp ! ( Finished chargen? ) me @ "Finish" getstatint not if "You have not finished chargen, no refresh." "FFRP" pretty tellme exit then ( Show time to next refresh ) systime me @ "Last Cycle" getstatint - 86400 me @ player? not if 3 * then swap - dup 0 > if time2long str swap "^GREEN^" swap strcat "^NORMAL^ until your next refresh." cat "Refresh" pretty tellme else time2long str swap "^GREEN^" swap strcat "^NORMAL^ since your last refresh was due." cat "Refresh" pretty tellme then ( Time for next refresh ) systime me @ "Last Cycle" getstatint - 86400 me @ player? not if 3 * then > if ( Header ) str "Refresh ^NORMAL^(Growth factor: ^GREEN^" 100 growthfactor toint "%^NORMAL^)" cat header tellme ( modprobe ) "Staff" staff-refresh module "Votes" vote-refresh module "Jobswitch" jobswitch-refresh module "Mentor" mentor-refresh module "HP/MP/TP" hpmptp-refresh module "JP" jp-refresh module "Dreaming" magic-study-refresh module "Lore" lore-study-refresh module "Gil" gil-refresh module ( Footer ) jobjp @ otherjp @ + totaljp ! str "Total JP earned: " jobjp @ 2 fchop " in " me @ "job" getstatstr ", " otherjp @ 2 fchop " in others" ", " totaljp @ 2 fchop " total." cat footer tellme ( set new cycle ) me @ "last cycle" systime setstat then ; . c q