quest_school.tw 54 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807
  1. :: quest_school
  2. <<switch $location_var[$here][0]>>
  3. <<case 'title'>>
  4. School student
  5. <<case 'start'>>
  6. <<set $q.school.classes = {}>>
  7. <<set $q.school.gradeAverage = 0>>
  8. <<set $q.school.missedDays = 0>>
  9. <<set $q.school.period = 0>>
  10. <<set $q.school.attendedDays = 0>>
  11. <<set $q.school.homeworkLeft = 0>>
  12. <<set $q.school.lastAttendedDay = 0>>
  13. <<set $q.school.missedClasses = 0>>
  14. <<set $q.school.missedDays = 0>>
  15. <<set $q.school.missedDayWarnings = 0>>
  16. <<run $q.school.registerEvent('afterSchool',14,0,null,null,null,'daily')>>
  17. <<run $q.school.registerEvent('groupRelDeterioration',0,0,null,null,null,'daily')>>
  18. <<run $q.school.registerDayEvent('graduation',25,5,($time.year+1))>>
  19. <<set $q.school.groups = {
  20. 'cool': {rel:0,raw:0,prev:0},
  21. 'jocks': {rel: 0,raw:0,prev:0},
  22. 'nerds': {rel: 0,raw:0,prev:0},
  23. 'gopniks': {rel: 0,raw:0,prev:0},
  24. 'outcasts': {rel: 0,raw:0,prev:0},
  25. 'teachers': {rel: 0,raw:0,prev:0},
  26. }>>
  27. <<set $q.school.config = {
  28. groupsMaxGainDaily: 10,
  29. groupsMaxLoseDaily: 30,
  30. }>>
  31. <<case 'stageDescription'>>
  32. <<switch $location_var[$here][1]>>
  33. <<case 0>>
  34. You are a student in your last year at highschool.
  35. You are expected to attend classes and behave yourself in order to not get expelled.
  36. If you want to attain good grades, you will need to listen to the lectures and participate actively in classes.
  37. School usually starts at 08:00. You should arrive there before this time.
  38. The school is located in the residential area of Pavlovsk.
  39. <<case 8000>>
  40. You have ignored all warning and have been absent from school for several days again. Surely you will get expelled at some point.
  41. <<case 8001>>
  42. You have been expelled for absenteeism.
  43. <</switch>>
  44. <<case 'vars'>>
  45. <<switch $location_var[$here][1]>>
  46. <<case 'startTimes'>>
  47. <<set $result = [
  48. [8,0],
  49. [8,50],
  50. [9,40],
  51. [9,55],
  52. [10,45],
  53. [11,35],
  54. [12,25],
  55. [13,15],
  56. [14,0]
  57. ]>>
  58. <<case 'timetable'>>
  59. <<set $result = [
  60. ['math', 'russian', 'break', 'english', 'art', 'breakLunch', 'biology', 'pe'],
  61. ['literature', 'geography','break', 'science', 'shop', 'breakLunch', 'computer', 'music'],
  62. ['math', 'russian', 'break', 'biology', 'history', 'breakLunch', 'computer', 'pe'],
  63. ['literature', 'geography','break', 'science', 'shop', 'breakLunch', 'computer', 'music'],
  64. ['math', 'russian', 'break', 'english', 'art', 'breakLunch', 'history', 'pe']
  65. ]>>
  66. <</switch>>
  67. <<case 'event'>>
  68. <<switch $location_var[$here][1]>>
  69. <<case 'afterSchool'>>
  70. <<if $time.isSchoolDay>>
  71. <<if $q.school.lastAttendedDay != $time.daystart>>
  72. <<set $q.school.missedDays += 1>>
  73. <<if $q.school.missedDays > 2>>
  74. <<set $q.school.missedDayWarnings += 1>>
  75. <<set $q.school.missedDays = 0>>
  76. <<switch $q.school.missedDayWarnings>>
  77. <<case 3>>
  78. <!--Prelud to getting expelled -->
  79. <<run $q.school.setStage(8000)>>
  80. <<case 2>>
  81. <!--recude all grades by 40 -->
  82. <<case 1>>
  83. <!--recude all grades by 20 -->
  84. <</switch>>
  85. <</if>>
  86. <</if>>
  87. <</if>>
  88. <<case 'groupRelDeterioration'>>
  89. <<for _deteriorationGroup range ['cool','jocks','nerds','gopniks']>>
  90. <<run $q.school.func('groupRelInc',_deteriorationGroup,-1 * rand(0,1))>>
  91. <<set $q.school.groups[_deteriorationGroup].prev = $q.school.groups[_deteriorationGroup].rel>>
  92. <<set $q.school.groups[_deteriorationGroup].raw = $q.school.groups[_deteriorationGroup].rel>>
  93. <</for>>
  94. <</switch>>
  95. <<case 'func'>>
  96. <<switch $location_var[$here][1]>>
  97. <!-- !!When the character attends a class then remember to include the following-->
  98. <!-- !! gs 'grades', 'attend_class', 'institution', 'name' Here institution and name are the once you assigned when you created the class.-->
  99. <!-- !!Then remember to include a number af calls for activities during that class corresponding to the number of optional in class educational activities assigned when the class was created.-->
  100. <!-- !!Each activity should use one of the following 3 different calls.-->
  101. <!-- !! gs 'grades', 'class_activity', 'institution', 'name'-->
  102. <!-- !! gs 'grades', 'class_activity_skill', 'institution', 'name', skill-->
  103. <!-- !! gs 'grades', 'class_activity_attributes', 'institution', 'name', attribute-->
  104. <!-- !!The first is to be used if the activity is not to be modified by anything.-->
  105. <!-- !!The second is if the activity is going to be modified by a skill. This will in general only increase the grade gain from the activity up 85% (It can lower it if the skill is less than 15)-->
  106. <!-- !!The numerical argument 'skill' should be the skill you want to modify whit, for example if you want to use the characters dance skill it should be pcs_danc.-->
  107. <!-- !!If you want to modify it by more that one skill you need to decide how. For example if you want to modify by both the characters singing skill and the instrumental music skill, you could take the maximum which would be the Math.max(psc_vokal,pcs_instrmusic) or you could take the average which would be (pcs_vokal+pcs_instrmusic)/2.-->
  108. <!-- !!These are just suggestions but remember that the result should return a number between 0 and 100.-->
  109. <!-- !!The third activity call is to be used if you want to modify by an attribute. This can half the grade gain if the attribute is 0 and increase it by 50% if the attribute is 100. If the attribute is 50 this will give the same as the unmodified call.-->
  110. <!-- !!If you want to modify by more than one attribute then you can do it by using one of the methods explained under the call modified by skill.-->
  111. <!-- !!For a class where there is optional opportunities to study outside class that can effect the characters grade ther is th following three calls.-->
  112. <!-- !! gs 'grades', 'optional_activity', 'institution', 'name', 'use of computer'-->
  113. <!-- !! gs 'grades', 'optional_activity_skill', 'institution', 'name', 'use of computer', skill-->
  114. <!-- !! gs 'grades', 'optional_activity_attributes', 'institution', 'use of computer', 'name', attribute-->
  115. <!-- !!The difference between the three is how it is modified. This work exactly as for gs 'grades', 'class_activity'.-->
  116. <!-- !! 'use of computer' is 'yes' if a computer use to make the activity, 'no' if not. This modifies the grade gain depending of what was choose when the class was created.-->
  117. <!-- !!These optional activities can be called as many time as one want. the are particularly made for repeatable activities.-->
  118. <!-- !!The number of these optional activities chosen when the class created is how many time this activity have to be done with out modifies to achieve maximal grade gain in a given week.-->
  119. <!-- !!The modifiers mean that it can take more of less depending on skill, attributes and if a computer is used or not.-->
  120. <!-- !!For converting the weekly grade gain into change of the actual grade for the classes, the following should be called either in cikl Sunday night, or the first time the character enters the institution in a given week.-->
  121. <!-- !!Remember to call it for each institution the character attends.-->
  122. <!-- !! gs 'grades', 'calculate_grade', 'institution'-->
  123. <!-- !!Here are some other action that can be done using this file.-->
  124. <!-- !! gs 'grades', 'grade_cap', 'institution', 'name' number-->
  125. <!-- !!This make such that the grade can never go above the 'number' given (this should be a number less than 100). Can be used if a teacher don't want to give higher grade for some reason.-->
  126. <!-- !! gs 'grades', 'grade_cap', 'institution', 'name'-->
  127. <!-- !!This removes any grade cap on the class.-->
  128. <!-- !! gs 'grades', 'grade_award', 'institution', 'name' number-->
  129. <!-- !!This add or subtract to number given from the grade directly, but respecting any cap on the grade. Can be used for giving the character a grade bonus or punishment for some discrete event. For example a bribe or punishment.-->
  130. <!-- !! gs 'grades', 'grades_above', 'institution', number-->
  131. <!-- !!This call set the variable class[$institution+'_grades_above_<<number>>'] which returns the number of classes in institution which have a grade equal or higher than the number.-->
  132. <!-- !!This variable is not set automatically, so whenever you want to use it, remeber to make this call first.-->
  133. <!-- !!The following variable is set by this files for reference in events other places.-->
  134. <!-- !! class[$institution+'_<<name>>_grade'], This is the grade of the class in institution by the name given.-->
  135. <!-- !! class[$institution+'_grade_average'], This is the average of the grades in institution.-->
  136. <!-- !!For handling the grades for classes in school, university adn other places the main character teke classes.-->
  137. <!-- !!First important thing is that to use these system to handle the characters grades for a class, it has to be initilized by the following call:-->
  138. <!-- !! gs 'grades', 'createclass', 'institution', 'name', 'number classes', 'number of optional in class educational activities', 'classes obligatory', 'use of homework', 'use computer in homework and out of class activities', 'number of out of class educational activities for max effectiveness'-->
  139. <!-- 2: 'name' is simply just the name of the class, make sure that the combination of institution and name is unique.-->
  140. <!-- 3: 'number of classes' This is the number of classes that the character have each standard week. This number can be 0, but then the only weekly actions that affects grades are the out class educational ones.-->
  141. <!-- 4: 'number of optional in class educational activities' is the number of actions that the character can do in a given class to improve their grades. Examples include pay attention, ask question. Remember when you write your class to include the given number of activities in each class.-->
  142. <!-- 5: 'class obligatory' this is eithe 'yes' or 'no'. The difference between an obligatory class and a non obligatory is whether your in class performance is taking into account in your grade. Think the difference between a high-school where you grade is partially given by you teacher evaluating your performance throughout the year and a university lecture where your grade only depends on your performance at the exam.-->
  143. <!-- 6: 'use of homework' this is an other 'yes' or 'no' question. This is if the class gives assignments as part of the daily homework. Specifically used to see if doing the daily homework contributes to the grade of this class.-->
  144. <!-- 7: 'use computer in homework and out of class activities' this is to determine if the grade gain from doing homework or out of class activities is affected by access to a computer o not: 0 mean it is not affected, 1 means that the grade is affected if you do not use a computer and 2 means that the homework will not contribute to your grade if you do not use a computer.-->
  145. <!-- 8: 'number of out of class educational activities for max effectiveness' this for classes that have repeatable study activities outside the class. This can for example be use for self study classes at university. The number is not the maximal number of a time the character can do these activities, but the number of times the character have to do them to get the maximal increase in grade id the associated attribute is 50 or skill is 15.-->
  146. <<case 'createclass'>>
  147. <<set _newClass = {
  148. classes: parseInt($location_var[$here][3]),
  149. grade_cap: 100,
  150. homework: $location_var[$here][6].toBoolean(),
  151. name: $location_var[$here][2],
  152. obligatory: $location_var[$here][5].toBoolean(),
  153. optionalclassactivities: parseInt($location_var[$here][4]),
  154. outofclassactivities: parseInt($location_var[$here][8]),
  155. usecomputer: $location_var[$here][7].toBoolean(),
  156. }>>
  157. <<if _newClass.homework>>
  158. <<setinit _newClass['weekly_grade_gain_max'] = 10 * _newClass.classes + 10 * _newClass.optionalclassactivities * _newClass.classes + 50 + 10 * _newClass.outofclassactivities>>
  159. <<else>>
  160. <<setinit _newClass['weekly_grade_gain_max'] = 10 * _newClass.classes + 10 * _newClass.optionalclassactivities * _newClass.classes + 10 * _newClass.outofclassactivities>>
  161. <</if>>
  162. <<if _newClass.obligatory>>
  163. <<if _newClass.homework>>
  164. <<setinit _newClass['weekly_grade_gain_breakeven_point'] = Math.min(10*_newClass.classes+25, 5*_newClass.classes +50)>>
  165. <<else>>
  166. <<setinit _newClass['weekly_grade_gain_breakeven_point'] = 10 * _newClass.classes>>
  167. <</if>>
  168. <<elseif _newClass.homework>>
  169. <<setinit _newClass['weekly_grade_gain_breakeven_point'] = 50>>
  170. <<else>>
  171. <<setinit _newClass['weekly_grade_gain_breakeven_point'] = 5 * _newClass.outofclassactivities>>
  172. <</if>>
  173. <<setinit _newClass['optional_weekly_max'] = 10 * _newClass.outofclassactivities>>
  174. <<set $q.school.classes[_newClass.name] = _newClass>>
  175. <<unset _newClass>>
  176. <<case 'grade_cap'>>
  177. <!-- !!This set a cap on the grade of the class. Used if something are preventing the character for obtaining a higher grade, for example a teacher mad at the character.-->
  178. <<set $q.school.classes[$location_var[$here][2]].grade_cap = parseInt($location_var[$here][3])>>
  179. <<set $q.school.classes[$location_var[$here][2]].grade = Math.min($q.school.classes[$location_var[$here][2]].grade,$q.school.classes[$location_var[$here][2]].grade_cap)>>
  180. <<case 'grade_cap_removed'>>
  181. <!-- !!Remove the above cap.-->
  182. <<run $q.school.func('grade_cap',100)>>
  183. <<case 'attend_class'>>
  184. <!-- !!This adds the point for attending a class. Also the first time it is called in a given day it register that there will be classes that day.-->
  185. <<setinit $q.school.classes[$location_var[$here][2]].class_day[$time.weekday] = 1>>
  186. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += 10>>
  187. <<case 'class_activity'>>
  188. <!-- !!This adds the point for doing an in class activity that is not modified.-->
  189. <<if $pc.pcs_stam <= 0>>
  190. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  191. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += 1>>
  192. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  193. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += 2>>
  194. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  195. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += 3>>
  196. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  197. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += 5>>
  198. <<else>>
  199. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += 5>>
  200. <</if>>
  201. <<elseif $pc.pcs_stam < $pc.stammax / 5>>
  202. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  203. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += 2>>
  204. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  205. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += 4>>
  206. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  207. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += 6>>
  208. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  209. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += 8>>
  210. <<else>>
  211. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += 9>>
  212. <</if>>
  213. <<else>>
  214. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  215. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += 2>>
  216. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  217. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += 5>>
  218. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  219. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += 7>>
  220. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  221. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += 9>>
  222. <<else>>
  223. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += 10>>
  224. <</if>>
  225. <</if>>
  226. <<case 'class_activity_skill'>>
  227. <!-- !!This adds the point for doing an in class activity modified by a skill.-->
  228. <<set _skillLevel = parseInt($location_var[$here][3])>>
  229. <<if $pc.pcs_stam <= 0>>
  230. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  231. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += (2*(85+_skillLevel))/200>>
  232. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  233. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += (5*(85+_skillLevel))/200>>
  234. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  235. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += (7*(85+_skillLevel))/200>>
  236. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  237. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += (9*(85+_skillLevel))/200>>
  238. <<else>>
  239. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += (10*(85+_skillLevel))/200>>
  240. <</if>>
  241. <<elseif $pc.pcs_stam < $pc.stammax / 5>>
  242. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  243. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += (6*(85+_skillLevel))/400>>
  244. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  245. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += (15*(85+_skillLevel))/400>>
  246. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  247. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += (21*(85+_skillLevel))/400>>
  248. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  249. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += (27*(85+_skillLevel))/400>>
  250. <<else>>
  251. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += (30*(85+_skillLevel))/400>>
  252. <</if>>
  253. <<else>>
  254. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  255. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += (2*(85+_skillLevel))/100>>
  256. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  257. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += (5*(85+_skillLevel))/100>>
  258. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  259. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += (7*(85+_skillLevel))/100>>
  260. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  261. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += (9*(85+_skillLevel))/100>>
  262. <<else>>
  263. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += (10*(85+_skillLevel))/100>>
  264. <</if>>
  265. <</if>>
  266. <<case 'class_activity_attributes'>>
  267. <!-- !!This adds the point for doing an in class activity modified by an attributes.-->
  268. <<set _skillLevel = parseInt($location_var[$here][3])>>
  269. <<if $pc.pcs_stam <= 0>>
  270. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  271. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += (2*(50+_skillLevel))/200>>
  272. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  273. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += (5*(50+_skillLevel))/200>>
  274. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  275. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += (7*(50+_skillLevel))/200>>
  276. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  277. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += (9*(50+_skillLevel))/200>>
  278. <<else>>
  279. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += (10*(50+_skillLevel))/200>>
  280. <</if>>
  281. <<elseif $pc.pcs_stam < $pc.stammax / 5>>
  282. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  283. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += (6*(50+_skillLevel))/400>>
  284. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  285. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += (15*(50+_skillLevel))/400>>
  286. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  287. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += (21*(50+_skillLevel))/400>>
  288. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  289. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += (27*(50+_skillLevel))/400>>
  290. <<else>>
  291. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += (30*(50+_skillLevel))/400>>
  292. <</if>>
  293. <<else>>
  294. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  295. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += (2*(50+_skillLevel))/100>>
  296. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  297. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += (5*(50+_skillLevel))/100>>
  298. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  299. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += (7*(50+_skillLevel))/100>>
  300. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  301. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += (9*(50+_skillLevel))/100>>
  302. <<else>>
  303. <<setinit $q.school.classes[$location_var[$here][2]].weekly_grade_gain += (10*(50+_skillLevel))/100>>
  304. <</if>>
  305. <</if>>
  306. <<case 'optional_activity'>>
  307. <!-- !!This adds the point for doing an optional out of class activity that is not modified.-->
  308. <<if !$q.school.classes[$location_var[$here][2]].use_computer or $location_var[$here][3].toBoolean()>>
  309. <<if $pc.pcs_stam <= 0>>
  310. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  311. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += 1>>
  312. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  313. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += 2>>
  314. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  315. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += 3>>
  316. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  317. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += 4>>
  318. <<else>>
  319. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += 5>>
  320. <</if>>
  321. <<elseif $pc.pcs_stam < $pc.stammax / 5>>
  322. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  323. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += 2>>
  324. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  325. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += 4>>
  326. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  327. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += 6>>
  328. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  329. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += 8>>
  330. <<else>>
  331. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += 9>>
  332. <</if>>
  333. <<else>>
  334. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  335. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += 2>>
  336. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  337. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += 5>>
  338. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  339. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += 7>>
  340. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  341. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += 9>>
  342. <<else>>
  343. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += 10>>
  344. <</if>>
  345. <</if>>
  346. <<elseif $q.school.classes[$location_var[$here][2]].use_computer>>
  347. <<if $pc.pcs_stam <= 0>>
  348. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  349. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += 1>>
  350. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  351. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += 1>>
  352. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  353. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += 2>>
  354. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  355. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += 2>>
  356. <<else>>
  357. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += 3>>
  358. <</if>>
  359. <<elseif $pc.pcs_stam < $pc.stammax / 5>>
  360. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  361. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += 1>>
  362. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  363. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += 2>>
  364. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  365. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += 2>>
  366. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  367. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += 3>>
  368. <<else>>
  369. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += 4>>
  370. <</if>>
  371. <<else>>
  372. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  373. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += 1>>
  374. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  375. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += 2>>
  376. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  377. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += 3>>
  378. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  379. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += 4>>
  380. <<else>>
  381. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += 5>>
  382. <</if>>
  383. <</if>>
  384. <</if>>
  385. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain = Math.min(
  386. $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain,
  387. $q.school.classes[$location_var[$here][2]].optional_weekly_max,
  388. )>>
  389. <<case 'optional_activity_skill'>>
  390. <!-- !!This adds the point for doing an optional out of class activity modified by a skill.-->
  391. <<set _skillLevel = parseInt($location_var[$here][4])>>
  392. <<if !$q.school.classes[$location_var[$here][2]].use_computer or $location_var[$here][3].toBoolean()>>
  393. <<if $pc.pcs_stam <= 0>>
  394. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  395. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (2*(85+_skillLevel))/200>>
  396. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  397. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (5*(85+_skillLevel))/200>>
  398. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  399. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (7*(85+_skillLevel))/200>>
  400. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  401. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (9*(85+_skillLevel))/200>>
  402. <<else>>
  403. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (10*(85+_skillLevel))/200>>
  404. <</if>>
  405. <<elseif $pc.pcs_stam < $pc.stammax / 5>>
  406. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  407. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (6*(85+__skillLevel))/400>>
  408. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  409. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (15*(85+_skillLevel))/400>>
  410. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  411. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (21*(85+_skillLevel))/400>>
  412. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  413. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (27*(85+_skillLevel))/400>>
  414. <<else>>
  415. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (30*(85+_skillLevel))/400>>
  416. <</if>>
  417. <<else>>
  418. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  419. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (2*(85+_skillLevel))/100>>
  420. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  421. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (5*(85+_skillLevel))/100>>
  422. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  423. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (7*(85+_skillLevel))/100>>
  424. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  425. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (9*(85+_skillLevel))/100>>
  426. <<else>>
  427. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (10*(85+_skillLevel))/100>>
  428. <</if>>
  429. <</if>>
  430. <<elseif $q.school.classes[$location_var[$here][2]].use_computer>>
  431. <<if $pc.pcs_stam <= 0>>
  432. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  433. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (1*(85+_skillLevel))/200>>
  434. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  435. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (2*(85+_skillLevel))/200>>
  436. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  437. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (3*(85+_skillLevel))/200>>
  438. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  439. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (4*(85+_skillLevel))/200>>
  440. <<else>>
  441. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (5*(85+_skillLevel))/200>>
  442. <</if>>
  443. <<elseif $pc.pcs_stam < $pc.stammax / 5>>
  444. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  445. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (3*(85+_skillLevel))/400>>
  446. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  447. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (6*(85+_skillLevel))/400>>
  448. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  449. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (9*(85+_skillLevel))/400>>
  450. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  451. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (12*(85+_skillLevel))/400>>
  452. <<else>>
  453. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (15*(85+_skillLevel))/400>>
  454. <</if>>
  455. <<else>>
  456. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  457. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (1*(85+_skillLevel))/100>>
  458. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  459. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (2*(85+_skillLevel))/100>>
  460. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  461. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (3*(85+_skillLevel))/100>>
  462. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  463. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (4*(85+_skillLevel))/100>>
  464. <<else>>
  465. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (5*(85+_skillLevel))/100>>
  466. <</if>>
  467. <</if>>
  468. <</if>>
  469. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain = Math.min(
  470. $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain,
  471. $q.school.classes[$location_var[$here][2]].optional_weekly_max,
  472. )>>
  473. <<case 'optional_activity_attribute'>>
  474. <!-- !!This adds the point for doing an optional out of class activity modified by an attributes.-->
  475. <<set _skillLevel = parseInt($location_var[$here][4])>>
  476. <<if !$q.school.classes[$location_var[$here][2]].use_computer or $location_var[$here][3].toBoolean()>>
  477. <<if $pc.pcs_stam <= 0>>
  478. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  479. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (2*(50+_skillLevel))/200>>
  480. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  481. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (5*(50+_skillLevel))/200>>
  482. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  483. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (7*(50+_skillLevel))/200>>
  484. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  485. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (9*(50+_skillLevel))/200>>
  486. <<else>>
  487. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (10*(50+_skillLevel))/200>>
  488. <</if>>
  489. <<elseif $pc.pcs_stam < $pc.stammax / 5>>
  490. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  491. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (6*(50+_skillLevel))/400>>
  492. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  493. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (15*(50+_skillLevel))/400>>
  494. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  495. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (21*(50+_skillLevel))/400>>
  496. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  497. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (27*(50+_skillLevel))/400>>
  498. <<else>>
  499. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (30*(50+_skillLevel))/400>>
  500. <</if>>
  501. <<else>>
  502. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  503. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (2*(50+_skillLevel))/100>>
  504. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  505. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (5*(50+_skillLevel))/100>>
  506. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  507. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (7*(50+_skillLevel))/100>>
  508. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  509. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (9*(50+_skillLevel))/100>>
  510. <<else>>
  511. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (10*(50+_skillLevel))/100>>
  512. <</if>>
  513. <</if>>
  514. <<elseif $q.school.classes[$location_var[$here][2]].use_computer>>
  515. <<if $pc.pcs_stam <= 0>>
  516. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  517. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (1*(50+_skillLevel))/200>>
  518. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  519. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (2*(50+_skillLevel))/200>>
  520. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  521. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (3*(50+_skillLevel))/200>>
  522. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  523. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (4*(50+_skillLevel))/200>>
  524. <<else>>
  525. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (5*(50+_skillLevel))/200>>
  526. <</if>>
  527. <<elseif $pc.pcs_stam < $pc.stammax / 5>>
  528. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  529. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (3*(50+_skillLevel))/400>>
  530. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  531. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (6*(50+_skillLevel))/400>>
  532. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  533. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (9*(50+_skillLevel))/400>>
  534. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  535. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (12*(50+_skillLevel))/400>>
  536. <<else>>
  537. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (15*(50+_skillLevel))/400>>
  538. <</if>>
  539. <<else>>
  540. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  541. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (1*(50+_skillLevel))/100>>
  542. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  543. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (2*(50+_skillLevel))/100>>
  544. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  545. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (3*(50+_skillLevel))/100>>
  546. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  547. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (4*(50+_skillLevel))/100>>
  548. <<else>>
  549. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain += (5*(50+_skillLevel))/100>>
  550. <</if>>
  551. <</if>>
  552. <</if>>
  553. <<setinit $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain = Math.min(
  554. $q.school.classes[$location_var[$here][2]].optional_weekly_grade_gain,
  555. $q.school.classes[$location_var[$here][2]].optional_weekly_max,
  556. )>>
  557. <<case 'homework'>>
  558. <!-- !!Doing homweork is done by using the following call, remember to have the check lernHome >= number of homeworks before calling this to make sure that there is actually homework to do. The action will automatically lower this variable. Also remember that lernHome have to be increased by one for each day of school.-->
  559. <!-- !! gs 'grades', 'homework', 'institution', 'use of computer', 'number of homeworks', 'joint', 'npc identifier'-->
  560. <!-- !! 2 'use of computer' is 'yes' if a computer was available for doing the homework and 'no' if not.-->
  561. <!-- !! 3 'number of homeworks' is the number of gomework assignments you want to do whit this one call. Remember to make sure that this number is not greater than lernHome.-->
  562. <!-- !! 4 'joint' 0 if you do the homework alone, 1 if you do it together with an npc, 2 if a npc does the homework for you, 3 use a modifier equal to the numbe set as the next argument.-->
  563. <!-- !! 5 'npc identifier' the npc identifier from npcstatic in the for A(number) for the npc helping/doing for you. If 'joint' = 3 then the number set here will be used as the modifier for doing the homework-->
  564. <<set _numberOfHomeworks = parseInt($location_var[$here][3])>>
  565. <<set $q.school.homeworkLeft -= _numberOfHomeworks>>
  566. <!-- !!The modifier for doing home work is the characters intelligence if that do it alone, the intelligence of the npc that make it for them (but at least 50), or the maximum of the intelligence of the character and the npc the are doing it together with, with a small bonus if there intelligence is close, or the value set as ARGs[5].-->
  567. <<if $location_var[$here][4] == 2>>
  568. <<set _homework_modifier = Math.max($npcs.get($location_var[$here][5],'intel'), 50)>>
  569. <<elseif $location_var[$here][4] == 1>>
  570. <<set _npcIntelligence = $npcs.get($location_var[$here][5],'intel')>>
  571. <!--<<set _homework_modifier =
  572. Math.max(_npcIntelligence, $pc.intelligence)
  573. +
  574. (Math.max(
  575. 10 + min(_npcIntelligence - $pc.intelligence, $pc.intelligence - _npcIntelligence),0)
  576. *
  577. (100 - Math.max(_npcIntelligence, $pc.intelligence)))/50>>-->
  578. <!-- Too complicated for my taste -->
  579. <<set _homework_modifier = (_npcIntelligence + $pc.intelligence) / 2 * 1.2>><!-- Average of both intelligences and 20% bonus for synergy. -->
  580. <<elseif $location_var[$here][4] == 3>>
  581. <<set _homework_modifier = parseInt($ARGS[5])>>
  582. <<else>>
  583. <<set _homework_modifier = $pc.intelligence>>
  584. <</if>>
  585. <<for _classId, _classData range $q.school.classes>>
  586. <<if _classData.homework>>
  587. <<if !$location_var[$here][2].toBoolean()>><!--No computer is used -->
  588. <<if !_classData.usecomputer>>
  589. <<if $pc.pcs_stam <= 0>>
  590. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  591. <<setinit $q.school.classes[_classId].weekly_grade_gain += _numberOfHomeworks*((2*1*(50+_homework_modifier))/200)>>
  592. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  593. <<setinit $q.school.classes[_classId].weekly_grade_gain += _numberOfHomeworks*((2*2*(50+_homework_modifier))/200)>>
  594. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  595. <<setinit $q.school.classes[_classId].weekly_grade_gain += _numberOfHomeworks*((2*3*(50+_homework_modifier))/200)>>
  596. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  597. <<setinit $q.school.classes[_classId].weekly_grade_gain += _numberOfHomeworks*((2*4*(50+_homework_modifier))/200)>>
  598. <<else>>
  599. <<setinit $q.school.classes[_classId].weekly_grade_gain += _numberOfHomeworks*((2*5*(50+_homework_modifier))/200)>>
  600. <</if>>
  601. <<elseif $pc.pcs_stam < $pc.stammax / 5>>
  602. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  603. <<setinit $q.school.classes[_classId].weekly_grade_gain += _numberOfHomeworks*((2*3*(50+_homework_modifier))/400)>>
  604. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  605. <<setinit $q.school.classes[_classId].weekly_grade_gain += _numberOfHomeworks*((2*6*(50+_homework_modifier))/400)>>
  606. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  607. <<setinit $q.school.classes[_classId].weekly_grade_gain += _numberOfHomeworks*((2*9*(50+_homework_modifier))/400)>>
  608. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  609. <<setinit $q.school.classes[_classId].weekly_grade_gain += _numberOfHomeworks*((2*12*(50+_homework_modifier))/400)>>
  610. <<else>>
  611. <<setinit $q.school.classes[_classId].weekly_grade_gain += _numberOfHomeworks*((2*15*(50+_homework_modifier))/400)>>
  612. <</if>>
  613. <<else>>
  614. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  615. <<setinit $q.school.classes[_classId].weekly_grade_gain += _numberOfHomeworks*((2*1*(50+_homework_modifier))/100)>>
  616. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  617. <<setinit $q.school.classes[_classId].weekly_grade_gain += _numberOfHomeworks*((2*2*(50+_homework_modifier))/100)>>
  618. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  619. <<setinit $q.school.classes[_classId].weekly_grade_gain += _numberOfHomeworks*((2*3*(50+_homework_modifier))/100)>>
  620. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  621. <<setinit $q.school.classes[_classId].weekly_grade_gain += _numberOfHomeworks*((2*4*(50+_homework_modifier))/100)>>
  622. <<else>>
  623. <<setinit $q.school.classes[_classId].weekly_grade_gain += _numberOfHomeworks*((2*5*(50+_homework_modifier))/100)>>
  624. <</if>>
  625. <</if>>
  626. <</if>>
  627. <<else>>
  628. <<if $pc.pcs_stam <= 0>>
  629. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  630. <<setinit $q.school.classes[_classId].weekly_grade_gain += _numberOfHomeworks*((2*(50+_homework_modifier))/200)>>
  631. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  632. <<setinit $q.school.classes[_classId].weekly_grade_gain += _numberOfHomeworks*((5*(50+_homework_modifier))/200)>>
  633. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  634. <<setinit $q.school.classes[_classId].weekly_grade_gain += _numberOfHomeworks*((7*(50+_homework_modifier))/200)>>
  635. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  636. <<setinit $q.school.classes[_classId].weekly_grade_gain += _numberOfHomeworks*((9*(50+_homework_modifier))/200)>>
  637. <<else>>
  638. <<setinit $q.school.classes[_classId].weekly_grade_gain += _numberOfHomeworks*((10*(50+_homework_modifier))/200)>>
  639. <</if>>
  640. <<elseif $pc.pcs_stam < $pc.stammax / 5>>
  641. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  642. <<setinit $q.school.classes[_classId].weekly_grade_gain += _numberOfHomeworks*((6*(50+_homework_modifier))/400)>>
  643. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  644. <<setinit $q.school.classes[_classId].weekly_grade_gain += _numberOfHomeworks*((15*(50+_homework_modifier))/400)>>
  645. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  646. <<setinit $q.school.classes[_classId].weekly_grade_gain += _numberOfHomeworks*((21*(50+_homework_modifier))/400)>>
  647. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  648. <<setinit $q.school.classes[_classId].weekly_grade_gain += _numberOfHomeworks*((27*(50+_homework_modifier))/400)>>
  649. <<else>>
  650. <<setinit $q.school.classes[_classId].weekly_grade_gain += _numberOfHomeworks*((30*(50+_homework_modifier))/400)>>
  651. <</if>>
  652. <<else>>
  653. <<if getvar("$pcs_condition['lack_of_sleep']") >= 20>>
  654. <<setinit $q.school.classes[_classId].weekly_grade_gain += _numberOfHomeworks*((2*(50+_homework_modifier))/100)>>
  655. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 10>>
  656. <<setinit $q.school.classes[_classId].weekly_grade_gain += _numberOfHomeworks*((5*(50+_homework_modifier))/100)>>
  657. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 5>>
  658. <<setinit $q.school.classes[_classId].weekly_grade_gain += _numberOfHomeworks*((7*(50+_homework_modifier))/100)>>
  659. <<elseif getvar("$pcs_condition['lack_of_sleep']") >= 2>>
  660. <<setinit $q.school.classes[_classId].weekly_grade_gain += _numberOfHomeworks*((9*(50+_homework_modifier))/100)>>
  661. <<else>>
  662. <<setinit $q.school.classes[_classId].weekly_grade_gain += _numberOfHomeworks*((10*(50+_homework_modifier))/100)>>
  663. <</if>>
  664. <</if>>
  665. <</if>>
  666. <</if>>
  667. <</for>>
  668. <<unset _homework_modifier>>
  669. <<case 'grade_award'>>
  670. <!-- !!This changes the grade directly of ARGS[3]-->
  671. <<setinit $q.school.classes[$location_var[$here][2]].grade = Math.clamp(parseInt($location_var[$here][3]),0,$q.school.classes[$location_var[$here][2]].grade_cap)>>
  672. <<run $q.school.func('grade_average_update')>>
  673. <<case 'grade_average_update'>>
  674. <<set _t_gradeSum = 0>>
  675. <<for _classId, _classData range $q.school.classes>>
  676. <<set _t_gradeSum += _classData.grade>>
  677. <</for>>
  678. <<set $q.school.gradeAverage = _t_gradeSum / Object.keys($q.school.classes).length>>
  679. <<case 'calculate_grade'>>
  680. <!-- !!This calculates the change in grade for each class in the institution $ARGS[1] at the end of the week. Should either be called from cikl when we move from Sunday to Monday, or the first time the character enters the institution in a given week.-->
  681. <<for _classId, _classData range $q.school.classes>>
  682. <<setinit $q.school.classes[_classId].weekly_grade_gain += $q.school.classes[_classId].optional_weekly_grade_gain>>
  683. <<setinit $q.school.classes[_classId].optional_weekly_grade_gain = 0>>
  684. <<if $q.school.classes[_classId].weekly_grade_gain < $q.school.classes[_classId].weekly_grade_gain_breakeven_point>>
  685. <<setinit $q.school.classes[_classId].grade -= (5 - (5 * $q.school.classes[_classId].weekly_grade_gain)/$q.school.classes[_classId].weekly_grade_gain_breakeven_point)>>
  686. <<else>>
  687. <<setinit $q.school.classes[_classId].grade += (3*($q.school.classes[_classId].weekly_grade_gain-$q.school.classes[_classId].weekly_grade_gain_breakeven_point))
  688. /
  689. ($q.school.classes[_classId].weekly_grade_gain_max -$q.school.classes[_classId].weekly_grade_gain_breakeven_point)>>
  690. <</if>>
  691. <<if $q.school.classes[_classId].grade > $q.school.classes[_classId].grade_cap>>
  692. <<setinit $q.school.classes[_classId].grade = $q.school.classes[_classId].grade_cap>>
  693. <</if>>
  694. <<setinit $q.school.classes[_classId].weekly_grade_gain = 0>>
  695. <</for>>
  696. <<run $q.school.func('grade_average_update')>>
  697. <<case 'grade_description'>>
  698. <<set _tempGrade = parseInt($location_var[$here][2])>>
  699. <<if _tempGrade < 10>>
  700. <<set $result = '1'>>
  701. <<elseif _tempGrade < 20>>
  702. <<set $result = '2-'>>
  703. <<elseif _tempGrade < 35>>
  704. <<set $result = '2'>>
  705. <<elseif _tempGrade < 40>>
  706. <<set $result = '2+'>>
  707. <<elseif _tempGrade < 50>>
  708. <<set $result = '3-'>>
  709. <<elseif _tempGrade < 65>>
  710. <<set $result = '3'>>
  711. <<elseif _tempGrade < 70>>
  712. <<set $result = '3+'>>
  713. <<elseif _tempGrade < 75>>
  714. <<set $result = '4-'>>
  715. <<elseif _tempGrade < 86>>
  716. <<set $result = '4'>>
  717. <<elseif _tempGrade < 90>>
  718. <<set $result = '4+'>>
  719. <<elseif _tempGrade < 92>>
  720. <<set $result = '5-'>>
  721. <<elseif _tempGrade < 97>>
  722. <<set $result = '5'>>
  723. <<else>>
  724. <<set $result = '5+'>>
  725. <</if>>
  726. <<case 'isWearingSchoolUniform'>>
  727. <<set $result = ($wardrobe.PCloStyle2 == 4)>>
  728. <<case 'schoolOutfitDescription'>>
  729. <<set _schoolOutfitData = $location_var[$here][2]>>
  730. <<if getvar("_schoolOutfitData.inhibition") <= 10>>
  731. <<set $result = '<font color="lightblue">This uniform is very conservative. Only the nerds would approve of you wearing it.</font>'>>
  732. <<elseif getvar("_schoolOutfitData.skirtShortness") < 5 and getvar("_schoolOutfitData.thinness") < 5 and getvar("_schoolOutfitData.includesBra") == 0>>
  733. <<if getvar("_schoolOutfitData.inhibition") >= 30 or getvar("_schoolOutfitData.topcut") == 4>>
  734. <<set $result = '<font color="red">This uniform, despite meeting the school uniform regulations, is too risqué. Everybody in school apart from the gopniks will think that you\'re a slut but they will respect you for beating the school rules.</font>'>>
  735. <<elseif getvar("_schoolOutfitData.quality") >= 4>>
  736. <<set $result = '<font color="lightblue">This uniform complies with the regulations and is of good quality. It would certainly help you with your standing with the cool kids and jocks.</font>'>>
  737. <<else>>
  738. <<set $result = '<font color="lightblue">This uniform complies with the school regulations on skirt length. Nobody in school would be offended by you wearing it.</font>'>>
  739. <</if>>
  740. <<elseif getvar("_schoolOutfitData.skirtShortness") == 5 and getvar("_schoolOutfitData.thinness") < 5 and getvar("_schoolOutfitData.includesBra") == 0>>
  741. <<if getvar("_schoolOutfitData.inhibition") >= 25>>
  742. <<set $result = '<font color="red">This uniform slightly breaches the school uniform regulations and it is too risqué. Everybody in school apart from the gopniks will think that you\'re a slut.</font>'>>
  743. <<elseif getvar("_schoolOutfitData.quality") >= 4>>
  744. <<set $result = '<font color="lightblue">This uniform slightly breaches the school regulations on skirt length and is of good quality. Everybody apart from the nerds would approve of you wearing it.</font>'>>
  745. <<else>>
  746. <<set $result = '<font color="lightblue">This uniform slightly breaches the school regulations on skirt length. The gopnik would approve of you wearing it but they will respect you for beating the school rules.</font>'>>
  747. <</if>>
  748. <<else>>
  749. <<set $result = '<font color="red">This uniform makes a mockery of the school uniform regulations. Everybody in school apart from the gopniks will think that you\'re a slut.</font>'>>
  750. <</if>>
  751. <<case 'groupRelInc'>>
  752. <<set _gRI_groupId = $location_var[$here][2]>>
  753. <<set _gRI_change = $location_var[$here][3]>>
  754. <<run $q.school.func('groupRelSet',_gRI_groupId, $q.school.groups[_gRI_groupId].raw + _gRI_change, true)>>
  755. <<case 'groupRelSet'>>
  756. <!--
  757. 2: string GroupId
  758. 3: number Value
  759. 4: (optional) boolean Use Constraints (used for inits)
  760. -->
  761. <<set _gRS_groupId = $location_var[$here][2]>>
  762. <<set _gRS_val = $location_var[$here][3]>>
  763. <<set $q.school.groups[_gRS_groupId].raw = _gRS_val>>
  764. <<if !$location_var[$here][4]>>
  765. <<set $q.school.groups[_gRS_groupId].rel = Math.clamp(_gRS_val,0,1000)>>
  766. <<else>>
  767. <<set $q.school.groups[_gRS_groupId].rel = Math.clamp(_gRS_val,Math.max(0,$q.school.groups[_gRS_groupId].prev - $q.school.config.groupsMaxLoseDaily),Math.min(1000,$q.school.groups[_gRS_groupId].prev + $q.school.config.groupsMaxGainDaily))>>
  768. <</if>>
  769. <<case 'groupMembersRelInc'>>
  770. <<set _gMRI_Id = ['','cool','jocks','nerds','gopniks','outcasts','teachers'].indexOf($location_var[$here][2])>>
  771. <<set _gMRI_filter = {grupTipe:_gMRI_Id}>>
  772. <<if $location_var[$here][4]>>
  773. <<set _gMRI_filter.gender = ($location_var[$here][4] == 'male' ? 0 : 1)>>
  774. <</if>>
  775. <<set _gMRI_npcIds = $npcs.ids(_gMRI_filter)>>
  776. <<for _gMRI_npcId range _gMRI_npcIds>>
  777. <<run $npcs.inc(_gMRI_npcId,'rel',$location_var[$here][3])>>
  778. <</for>>
  779. <<case 'onPostIntro'>>
  780. <<for _groupKey, _groupData range $q.school.groups>>
  781. <<set $q.school.groups[_groupKey].prev = $q.school.groups[_groupKey].rel>>
  782. <</for>>
  783. <</switch>>
  784. <</switch>>