You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

148 lines
3.0 KiB

  1. //Hack to force eslint pass
  2. const r = null;
  3. //Count the amount of permadead characters
  4. r.db('live').table('character').filter({
  5. value: {
  6. permadead: true
  7. }
  8. }).count();
  9. //Count the amount of permadead characters per spirit
  10. r.db('live').table('character')
  11. .filter({
  12. value: {
  13. permadead: true
  14. }
  15. })
  16. .group(row => {
  17. return row('value')('class');
  18. })
  19. .count();
  20. //All players that are level 20
  21. r.db('live').table('character')
  22. .filter(row => {
  23. return row('value')('components').contains(cpn => {
  24. return cpn('type').eq('stats').and(cpn('values')('level').ge(20));
  25. });
  26. });
  27. //Group by mod action source, aggregate and order by count
  28. r.db('live').table('modLog')
  29. .group(f => f('value')('source')).count().ungroup().orderBy('reduction');
  30. //List Items with dex > 30
  31. r.db('live').table('character')
  32. .concatMap(row => {
  33. return row('value')('components')
  34. .filter(cpn => {
  35. return cpn('type').eq('inventory');
  36. })
  37. .concatMap(c => {
  38. return [{
  39. name: row('value')('name'),
  40. cpn: c('items').filter(item => {
  41. return item('stats')('dex').ge(30);
  42. })
  43. }];
  44. })
  45. .filter(c => {
  46. return c('cpn').count().ge(1);
  47. });
  48. });
  49. r.db('live').table('character')
  50. .concatMap(row => {
  51. return row('value')('components')
  52. .filter(cpn => {
  53. return cpn('type').eq('inventory');
  54. })
  55. .concatMap(c => {
  56. return [{
  57. name: row('value')('name'),
  58. account: row('value')('account'),
  59. cpn: c('items').filter(item => {
  60. return item('quantity').ge(30000);
  61. })
  62. }];
  63. })
  64. .filter(c => {
  65. return c('cpn').count().ge(1);
  66. });
  67. });
  68. //Play time per account from low to high
  69. r.db('live').table('character')
  70. .concatMap(row => {
  71. return row('value')('components')
  72. .filter(cpn => {
  73. return cpn('type').eq('stats');
  74. })
  75. .concatMap(c => {
  76. return [{
  77. account: row('value')('account'),
  78. name: row('value')('name'),
  79. played: c('stats')('played')
  80. }];
  81. });
  82. })
  83. .group('account')
  84. .sum('played')
  85. .ungroup()
  86. .orderBy('reduction');
  87. //Amount of characters per level
  88. r.db('live').table('character')
  89. .concatMap(row => {
  90. return row('value')('components')
  91. .filter(cpn => {
  92. return cpn('type').eq('stats');
  93. })
  94. .concatMap(c => {
  95. return [{
  96. level: c('values')('level')
  97. }];
  98. });
  99. })
  100. .group('level')
  101. .count();
  102. r.db('live').table('character')
  103. .concatMap(row => {
  104. return row('value')('components')
  105. .filter(cpn => {
  106. return cpn('type').eq('stats');
  107. })
  108. .concatMap(c => {
  109. return [{
  110. level: c('values')('level'),
  111. xp: c('values')('xpTotal')
  112. }];
  113. });
  114. })
  115. .filter(c => {
  116. return c('level').eq(2);
  117. })
  118. .group('xp')
  119. .count();
  120. r.db('live').table('character')
  121. .concatMap(row => {
  122. return row('value')('components')
  123. .filter(cpn => {
  124. return cpn('type').eq('stats');
  125. })
  126. .concatMap(c => {
  127. return [{
  128. level: c('values')('level'),
  129. xp: c('values')('xpTotal'),
  130. streaks: c('stats')('mobKillStreaks')
  131. }];
  132. });
  133. })
  134. .filter(c => {
  135. return c('level').eq(2).and(c('xp').eq(10));
  136. });