dnd5.xgo 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. os := import("os")
  2. json := import("json")
  3. fmt := import("fmt")
  4. //fpaths := import("fpaths")
  5. //objects := import("objects")
  6. html := import("html").Renderer()
  7. enum := import("enum")
  8. // DND5 specification for the RU.
  9. spec := {
  10. ru: {
  11. names : {
  12. system : "Подземелья и Драконы 5E",
  13. str: "Сила",
  14. dex: "Ловкость",
  15. con: "Телосложение",
  16. int: "Интеллект",
  17. wis: "Мудрость",
  18. cha: "Харизма",
  19. prof_bonus : "Бонус мастерства",
  20. prof: "Владение",
  21. modifier: "Модификатор"
  22. }
  23. }
  24. }
  25. calc_mod := func(x) {
  26. return int(x-10)/2
  27. }
  28. new_char_stat := func(stat){
  29. self := stat
  30. self.get_attr_mod = func(name){
  31. return int(self.attr[name]-10)/2
  32. }
  33. self.get_prof_bonus = func() {
  34. return int(self.level-1)/4 + 2
  35. }
  36. self.make_attr_table = func(){
  37. lang_name := "ru"
  38. lang_names := spec[lang_name].names
  39. trow := html.tr()
  40. for _, v in ["Атрибут", "Значение", "Модификатор"] {
  41. trow.add(html.td().body(v))
  42. }
  43. thead := html.thead().body(trow)
  44. lang_map := {}
  45. for k, v in self.attr {
  46. lang_name := lang_names[k]
  47. if lang_name {
  48. lang_map[lang_name] = v
  49. } else {
  50. lang_map[format("undefined(%q)", k)] = v
  51. }
  52. }
  53. lang := enum.sort(enum.keys(lang_map))
  54. tbody := html.tbody()
  55. for _, attr_lang_name in lang {
  56. v := lang_map[attr_lang_name]
  57. tr := html.tr().body(
  58. html.td().body(
  59. attr_lang_name
  60. ),
  61. html.td().body(
  62. v
  63. ),
  64. html.td().body(
  65. calc_mod(v)
  66. )
  67. )
  68. tbody.add(tr)
  69. }
  70. return html.table().body(
  71. thead,
  72. tbody
  73. )
  74. }
  75. self.make_base_table = func() {
  76. hrow := html.tr()
  77. for _, v in ["Название", "Значение"] {
  78. hrow.add(html.td().body(v))
  79. }
  80. thead := html.thead().body(hrow)
  81. values := {
  82. "Уровень": 1,
  83. "": 2
  84. }
  85. tbody := html.tbody().body()
  86. }
  87. return self
  88. }
  89. new := func(c) {
  90. self := {}
  91. self.context = c
  92. self.get_char_stat = func(name){
  93. stat_data := os.read_file(format(
  94. "%s/char/%s/stat.json",
  95. self.context.source_path, name
  96. ))
  97. if is_error(stat_data) {
  98. return stat_data
  99. }
  100. stat := json.decode(stat_data)
  101. return new_char_stat(stat.dnd5)
  102. }
  103. self.spec = spec
  104. return self
  105. }
  106. export new