mgmg 1.3.2 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d35a19c90c58e70a8410540581af727523ea22584580bbf5ccf3b50fd19cbe4c
4
- data.tar.gz: ca9c6122b4d7d84389787a10ac7073e5f3f633d1c1fffab58be1ad693e3613d4
3
+ metadata.gz: 7d4bcd6c24784e7e3935e56141851a1581dc7027b998e8ddf05197e647a57bbe
4
+ data.tar.gz: d7d03752ecfb2478aee13ff6d7376e8db979f7df7202c58cf809763c0b548c0b
5
5
  SHA512:
6
- metadata.gz: ab690d14c5d159646fa354b551eefe5a2afb7ab8c227769cdd5397262c5b810776611c3171c88af3143a96b18eac10050348c80c9b9801fc809544ec7291414d
7
- data.tar.gz: a17fafc6c8eefdca6a137b0311f2e8ca1e44c71a8ea8a6341359ab6929d6b25228b8d0be96ef06ee29be514e0abfaa93cbc1a0f45ae1cb746175d39ad7a3207d
6
+ metadata.gz: 7558ce118474996b673ea56a04f28d5e36950a272c19d3ad14da2367599c725a58988c215e9c666df7ec9e954ae4106885afa639ccb2477f29e75990957375cb
7
+ data.tar.gz: da3be7de946113103e0d05631a536d7b9ac0022cdd76b4e42a228b3a603a4d737b93bbc1a3cfc685125e9bd4bc3cd27e0d2d4940a72d327975876b9a3c99b9b7
data/CHANGELOG.md CHANGED
@@ -99,3 +99,10 @@
99
99
  - `String#phydef_optimize`,`String#buster_optimize`を追加.
100
100
  - (`Enumerable#search`から呼び出される)`Enumerable#comp_search`における最大道具製作レベルチェックが間違っていたバグを修正.
101
101
  - `String#search`および`Enumerable#search`において,総経験値量が等しい組み合わせの場合,目標パラメータが大きくなる製作Lvの組み合わせを返すように修正.
102
+
103
+ ## 1.4.0 2021/06/03
104
+ - `Mgmg::Equip#atk_sd`,`Mgmg::Equip#dex_as`,`Mgmg::Equip#mag_das`,`Mgmg::Equip#magmag`を,威力値の定数倍(常に`Integer`)から威力値そのもの(`Rational`)に変更.これに伴い,`Mgmg::Equip#power`の返り値も威力値とした.互換性のため,`Mgmg::Equip#fpower`はそのまま残した.
105
+ - ver2.00β12で導入された,合成の消費エレメントが地と火または水で折半される仕様に対応した.`Mgmg::Equip#comp_cost`は従来の値の半分となり,`Mgmg::Equip#total_cost`はver2.00β12以降の総消費エレメントとなった.
106
+ - `Mgmg::TPolynomial#<=>`を追加.
107
+ - `Enumerable#show`を追加.
108
+ - `Mgmg::Equip#pmdef`で,`Mgmg::Equip#phydef`と`Mgmg::Equip#magmag`のうち,小さい方を返すようにし,`String#poly`の引数に`:pmdef`を受け付けるようにした.
data/README.md CHANGED
@@ -25,29 +25,42 @@ Excel版に比べ,入力のチェックがなされておらず,☆制限の
25
25
  あるいは,http://cycloawaodorin.sakura.ne.jp/sonota/mgmg/mgmg.html にてAjax版を利用することもできます.Ajax版は一部の機能しか実装されていませんが,Ruby環境がない場合にも利用できます.
26
26
 
27
27
  ## 使い方
28
- 並列型多段合成杖を製作し,標準出力に出力.
28
+ 並列型多段合成杖を製作し,標準出力に出力する.
29
29
 
30
30
  ```ruby
31
31
  puts '[杖(水玉10火玉5)+本(骨10鉄1)]+[本(水玉5綿2)+杖(骨10鉄1)]'.build(112, 176)
32
32
  #=> 杖4☆20(骨綿)[攻撃:119, MP:104, 魔力:1,859, EL:水2]
33
33
  ```
34
34
 
35
- 複数装備を製作し,そのすべてを装備した場合の合計値を標準出力に出力.
35
+ 中間製作品の性能を確認する.
36
36
 
37
37
  ```ruby
38
- ary = %w|本(金3骨1)+[弓(骨1綿1)+[(金3金3)+[弓(綿1綿1)+[杖(10金6)+本(骨92)]]]] フード(石10骨9) 首飾り(宝10水10) 指輪(木10金10)|
39
- puts ary.build(122, 139, 232)
38
+ puts '[杖(水玉10火玉5)+本(骨10鉄1)]+[(水玉5綿2)+杖(10鉄1)]'.build(112, 176).history
39
+ #=> 杖1☆7(貴貴)[MP:15, 魔力:50, EL:水2]
40
+ #=> 本1☆5(骨鉄)[攻撃:44, 魔防:19, MP:20, 魔力:256]
41
+ #=> 杖2☆12(貴骨)[攻撃:56, MP:41, 魔力:650, EL:水2]
42
+ #=> 本1☆3(貴綿)[MP:8, 魔力:36]
43
+ #=> 杖1☆5(骨鉄)[攻撃:24, MP:32, 魔力:321]
44
+ #=> 本2☆8(綿骨)[攻撃:46, MP:35, 魔力:487]
45
+ #=> 杖4☆20(骨綿)[攻撃:119, MP:104, 魔力:1,859, EL:水2]
46
+ ```
47
+
48
+ 複数装備を製作し,そのすべてを装備した場合の合計値を標準出力に出力する.
49
+
50
+ ```ruby
51
+ r = %w|本(金3骨1)+[弓(骨1綿1)+[杖(金3金3)+[弓(綿1綿1)+[杖(宝10金6)+本(骨9鉄2)]]]] フード(石10骨9) 首飾り(宝10水10) 指輪(木10金10)|
52
+ puts r.build(122, 139, 232)
40
53
  #=> 複数装備9(武:1, 頭:1, 飾:2)[攻撃:15, 物防:34, 魔防:28, HP:241, MP:71, 器用:223, 素早:222, 魔力:6,604]
41
54
  ```
42
55
 
43
- 重量1または2で作るのに必要な防具製作Lvを確認.
56
+ 重量1または2で作るのに必要な防具製作Lvを確認する.
44
57
 
45
58
  ```ruby
46
59
  p ['重鎧(皮10金10)'.min_level, '重鎧(皮10金10)'.min_level(2)]
47
60
  #=> [162, 42]
48
61
  ```
49
62
 
50
- 合成レシピから必要製作Lvを確認.
63
+ 合成レシピから必要製作Lvを確認する.
51
64
  ```ruby
52
65
  p '[杖(水玉10火玉5)+本(骨10鉄1)]+[本(水玉5綿2)+杖(骨10鉄1)]'.min_levels
53
66
  #=> {"杖(水玉10火玉5)"=>92, "本(骨10鉄1)"=>48, "本(水玉5綿2)"=>12, "杖(骨10鉄1)"=>28}
@@ -62,13 +75,22 @@ puts '[斧(牙10金10)+剣(鉄10皮1)]+剣(鉄10皮1)'.poly(:attack).to_s('%.4g'
62
75
  #=> (0.02588S+3.364)C+(4.677S+699.9)
63
76
  ```
64
77
 
65
- 既成品の性能を確認.
78
+ 既成品の性能を確認する.
66
79
 
67
80
  ```ruby
68
81
  puts '小竜咆哮'.build
69
82
  #=> 弓1☆10(木骨)[攻撃:50, 器用:120, 素早:50]
70
83
  ```
71
84
 
85
+ 目標威力を最小のスキル経験値で達成する鍛冶Lvと道具製作Lvの組み合わせを探索し,必要な総経験値を確認する.
86
+
87
+ ```ruby
88
+ r = '双短剣(金3皮1)+[杖(鉄2綿1)+[斧(玉5鉄1)+[杖(綿1綿1)+[斧(玉5金3)+[剣(金3牙1)+[斧(木2牙1)+[剣(木2牙1)+双短剣(鉄10木1)]]]]]]]'
89
+ sc = r.search(:atk_sd, 1_000_000)
90
+ p [sc, Mgmg.exp(*sc)]
91
+ #=> [[155, 376], 304969]
92
+ ```
93
+
72
94
  ### 表記ゆれについて
73
95
  本ゲームでは,装備種別の名称に,下記の表のような表記ゆれが存在します.
74
96
 
@@ -136,9 +158,9 @@ puts '小竜咆哮'.build
136
158
 
137
159
  `para`として,複数の9パラ値を組み合わせた以下のシンボルを指定することもできます.
138
160
  ```ruby
139
- :atkstr, :atk_sd, :dex_as, :mag_das, :magmag
161
+ :atkstr, :atk_sd, :dex_as, :mag_das, :magmag, :pmdef
140
162
  ```
141
- これらは同名のメソッドと異なり,本来の威力値等に関する近似多項式を返し,4倍化や2倍化はされていません.また,自動選択の`:power`は指定できません.
163
+ ただし,自動選択の`:power`は指定できません.
142
164
 
143
165
  また,`:cost`を渡すことで,消費エレメント量に関する近似多項式を得られます.`self`に`"+"`が含まれていれば合成品とみなし,最後の合成に必要な地エレメント量を,それ以外では,武器なら消費火エレメント量を,防具なら消費水エレメント量を返します.ただし,`self`が既成品そのものの場合,零多項式を返します.
144
166
 
@@ -199,7 +221,7 @@ puts '小竜咆哮'.build
199
221
  ### `Mgmg::Equip#inspect`
200
222
  `Mgmg::Equip#to_s`の出力に加え,0となる9パラ値を省略せず,総消費エレメント量を連結した文字列を出力します.すなわち,
201
223
  ```ruby
202
- "杖4☆20(骨綿)[攻撃:119, 物防:0, 魔防:0, HP:0, MP:104, 腕力:0, 器用:0, 素早:0, 魔力:1859, EL:火0地0水2]<コスト:火4913150水0>"
224
+ "杖4☆20(骨綿)[攻撃:119, 物防:0, 魔防:0, HP:0, MP:104, 腕力:0, 器用:0, 素早:0, 魔力:1859, EL:火0地0水2]<コスト:火20661575水0>"
203
225
  ```
204
226
  のような文字列を返します.
205
227
 
@@ -208,7 +230,13 @@ puts '小竜咆哮'.build
208
230
 
209
231
  ### `Mgmg::Equip#total_cost`
210
232
  製作に必要な総エレメント量を,火,地,水の順のベクトルとして返します.ケージの十分性の確認には,下記の`comp_cost`を用います.
211
- ver2.00β12以降では,合成時の消費エレメントが,武器なら火,防具なら水エレメントと半々の消費に変更されていますが,現在,この変更には対応していません.
233
+
234
+ ### `Mgmg::Equip#comp_cost(outsourcing=false)`
235
+ `self`が合成によって作られたものだとした場合の消費地エレメント量を返します.地ケージ確保のための確認用途が多いと思うので短い`cost`をエイリアスとしています.`outsourcing`が真の場合,街の道具製作屋に頼んだ場合のコストを返します.
236
+ 武器なら火エレメント,防具なら水エレメントを,地エレメントと同値分だけ消費するため,火または水ケージも同量必要となります.
237
+
238
+ ### `Mgmg::Equip#smith_cost(outsourcing=false)`
239
+ `self`が鍛冶・防具製作によって作られたものだったものだとした場合の消費火・水エレメント量を返します.`outscourcing`が真の場合,街の鍛冶屋・防具製作屋に頼んだ場合のコストを返します.
212
240
 
213
241
  ### `Mgmg::Equip#attack, phydef, magdef, hp, mp, str, dex, speed, magic, fire, earth, water`
214
242
  それぞれ
@@ -218,47 +246,40 @@ ver2.00β12以降では,合成時の消費エレメントが,武器なら火
218
246
  の値を`Integer`で返します.
219
247
 
220
248
  ### `Mgmg::Equip#power`
221
- 武器種別ごとに適した威力計算値の4倍の値を返します.具体的には以下の値です.
249
+ 武器種別ごとに適した威力計算値を返します.具体的には以下の値です.
222
250
 
223
- |武器種別|威力計算値の4倍|
251
+ |武器種別|威力計算値|
224
252
  |:-|:-|
225
- |短剣,双短剣|攻撃x4+腕力x2+器用x2|
226
- |剣,斧|攻撃x4+腕力x4|
227
- |弓|max(器用x4+攻撃x2+腕力x2, 魔力x4+器用x2+攻撃+腕力)|
228
- |弩|器用x4+攻撃x2+腕力x2|
229
- |杖,本|max(魔力x8,攻撃x4+腕力x4)|
253
+ |短剣,双短剣|攻撃+腕力/2+器用/2|
254
+ |剣,斧|攻撃+腕力|
255
+ |弓|max(器用+攻撃/2+腕力/2, 魔力+器用/2+攻撃/4+腕力/4)|
256
+ |弩|器用+攻撃/2+腕力/2|
257
+ |杖,本|max(魔力x2,攻撃+腕力)|
230
258
 
231
259
  弓,杖,本では`self`の性能から用途を判別し,高威力となるものの値を返します.防具に対してこのメソッドを呼び出すと,9パラメータのうち最も高い値を返します.
232
260
 
233
- 防具の場合,9パラメータのうち,最大のものの2倍の値を返します.ただし,最大の値に魔防が含まれている場合,代わりに「魔防x2+魔力」を返します.
261
+ 防具の場合,9パラメータのうち,最大のものを返します.ただし,最大の値に魔防が含まれている場合,代わりに「魔防+魔力/2」を返します.
234
262
 
235
- 複数装備の場合,9パラメータの合計値の4倍を返します.ただし,HPとMPは4倍にしません.HPとMPの特例は,消費エレメント量の計算と同様とするものです.
263
+ 複数装備の場合,9パラメータの合計値を返します.ただし,HPとMPは1/4倍します.HPとMPの特例は,消費エレメント量の計算と同様とするものです.
236
264
 
237
265
  いずれの場合も,EL値,重量,☆は無視されます.
238
266
 
239
- ### `Mgmg::Equip#fpower`
240
- 武器または複数装備の場合,`Mgmg::Equip#power.fdiv(4)`を返します.防具の場合,`Mgmg::Equip#power.fdiv(2)`を返します.
241
-
242
267
  ### `Mgmg::Equip#atkstr, atk_sd, dex_as, mag_das`
243
268
  それぞれ
244
269
  ```
245
- 攻撃+腕力,攻撃x2+腕力+器用,器用x2+攻撃+腕力,魔力x4+器用x2+攻撃+腕力
270
+ 攻撃+腕力,攻撃+腕力/2+器用/2,器用+攻撃/2+腕力/2,魔力+器用/2+攻撃/4+腕力/4
246
271
  ```
247
272
  の値を返します.これらはそれぞれ
248
273
  ```
249
274
  (剣,斧,杖,本),(短剣,双短剣),(弓,弩),(バスターアロー)
250
275
  ```
251
- の威力の定数倍の値です.トリックプレーやディバイドには対応していません.
276
+ の威力です.トリックプレーやディバイドには対応していません.
252
277
 
253
278
  ### `Mgmg::Equip#magmag`
254
- 「魔防x2+魔力」の値を返します.魔力の半分が魔防に加算されることから,実際の魔防性能に比例した値となります.
279
+ 「魔防+魔力/2」の値を返します.魔力の半分が魔防に加算されることから,実際の魔防性能となります.
255
280
 
256
- ### `Mgmg::Equip#comp_cost(outsourcing=false)`
257
- `self`が合成によって作られたものだとした場合の消費地エレメント量を返します.地ケージ確保のための確認用途が多いと思うので短い`cost`をエイリアスとしています.`outsourcing`が真の場合,街の道具製作屋に頼んだ場合のコストを返します.
258
- ver2.00β12以降では武器なら火,防具なら水エレメントと半々の消費に変更されていますが,現在,この変更には対応していません.
259
-
260
- ### `Mgmg::Equip#smith_cost(outsourcing=false)`
261
- `self`が鍛冶・防具製作によって作られたものだったものだとした場合の消費火・水エレメント量を返します.`outscourcing`が真の場合,街の鍛冶屋・防具製作屋に頼んだ場合のコストを返します.
281
+ ### `Mgmg::Equip#pmdef`
282
+ 物防と実効魔防のうち,小さい方を返します.
262
283
 
263
284
  ### `Mgmg::Equip#+(other)`
264
285
  `self`と`other`を装備した「複数装備」の`Mgmg::Equip`を返します.`self`と`other`はいずれも単品でも「複数装備」でも構いません.武器複数などの装備可否チェックはされません.
data/lib/mgmg.rb CHANGED
@@ -29,13 +29,17 @@ class String
29
29
  when :atkstr
30
30
  self.poly(:attack, left_associative: la) + self.poly(:str, left_associative: la)
31
31
  when :atk_sd
32
- self.poly(:attack) + self.poly(:str, left_associative: la).quo(2) + self.poly(:dex, left_associative: la).quo(2)
32
+ self.poly(:attack, left_associative: la) + self.poly(:str, left_associative: la).quo(2) + self.poly(:dex, left_associative: la).quo(2)
33
33
  when :dex_as
34
- self.poly(:dex) + self.poly(:attack, left_associative: la).quo(2) + self.poly(:str, left_associative: la).quo(2)
34
+ self.poly(:dex, left_associative: la) + self.poly(:attack, left_associative: la).quo(2) + self.poly(:str, left_associative: la).quo(2)
35
35
  when :mag_das
36
- self.poly(:magic) + self.poly(:dex_as, left_associative: la).quo(2)
36
+ self.poly(:magic, left_associative: la) + self.poly(:dex_as, left_associative: la).quo(2)
37
37
  when :magmag
38
- self.poly(:magdef) + self.poly(:magic, left_associative: la).quo(2)
38
+ self.poly(:magdef, left_associative: la) + self.poly(:magic, left_associative: la).quo(2)
39
+ when :pmdef
40
+ pd = self.poly(:phydef, left_associative: la)
41
+ md = self.poly(:magmag, left_associative: la)
42
+ pd <= md ? pd : md
39
43
  when :cost
40
44
  if Mgmg::SystemEquip.keys.include?(self)
41
45
  return Mgmg::TPolynomial.new(Mgmg::Mat.new(1, 1, 0.quo(1)), 28, 0, 12, 12)
@@ -62,9 +66,9 @@ class String
62
66
  def peff(para, smith, comp=smith, left_associative: true)
63
67
  poly(para, left_associative: left_associative).eff(smith, comp)
64
68
  end
65
- def show(smith=-1, comp=smith, left_associative: true)
69
+ def show(smith=-1, comp=smith, left_associative: true, para: :power)
66
70
  built = self.build(smith, comp, left_associative: left_associative)
67
- pstr = '%.3f' % built.fpower
71
+ pstr = '%.3f' % built.para_call(para)
68
72
  pstr.sub!(/\.?0+\Z/, '')
69
73
  puts "Building"
70
74
  puts " #{self}"
@@ -89,6 +93,15 @@ module Enumerable
89
93
  end
90
94
  end.sum
91
95
  end
96
+ def show(smith=-1, armor=smith, comp=armor.tap{armor=smith}, left_associative: true, para: :power)
97
+ built = self.build(smith, armor, comp, left_associative: left_associative)
98
+ pstr = '%.3f' % built.para_call(para)
99
+ pstr.sub!(/\.?0+\Z/, '')
100
+ puts "Building"
101
+ puts " #{self.join(', ')}"
102
+ puts "with levels (#{smith}, #{armor}, #{comp}) yields (#{pstr}, #{built.total_cost})"
103
+ puts " #{built}"
104
+ end
92
105
  def min_levels(left_associative: true)
93
106
  build(-1, -1, -1, left_associative: left_associative).min_levels
94
107
  end
data/lib/mgmg/const.rb CHANGED
@@ -20,7 +20,8 @@ module Mgmg
20
20
  '兜': 8, '額当て': 9, '帽子': 10, 'フード': 11, '重鎧': 12, '軽鎧': 13, '服': 14, '法衣': 15,
21
21
  '盾': 16, '小手': 17, '手袋': 18, '腕輪': 19, 'すね当て': 20, 'ブーツ': 21, '靴': 22, 'サンダル': 23,
22
22
  'ブローチ': 24, '指輪': 25, '首飾り': 26, '耳飾り': 27,
23
- '額': 9, '帽': 10, 'フ': 11, '重': 12, '軽': 13, 'ローブ':15, '法':15, 'ロ': 15, '小': 17, 'グ': 18, 'グローブ': 18, '腕': 19,
23
+ '額': 9, '帽': 10, 'フ': 11, '重': 12, '軽': 13, 'ローブ':15, '法':15, 'ロ': 15,
24
+ '小': 17, '袋': 18, 'グ': 18, 'グローブ': 18, '腕': 19,
24
25
  '脛当て': 20, '脛': 20, 'す': 20, 'サ': 23, '指': 25, '耳': 26, '首': 27
25
26
  }
26
27
  EquipName = [
data/lib/mgmg/equip.rb CHANGED
@@ -83,13 +83,13 @@ module Mgmg
83
83
  attack()+str()
84
84
  end
85
85
  def atk_sd
86
- attack()*2+str()+dex()
86
+ attack()+str().quo(2)+dex().quo(2)
87
87
  end
88
88
  def dex_as
89
- attack()+str()+dex()*2
89
+ attack().quo(2)+str().quo(2)+dex()
90
90
  end
91
91
  def mag_das
92
- magic()*4+dex_as()
92
+ magic()+dex_as().quo(2)
93
93
  end
94
94
  [:fire, :earth, :water].each.with_index do |s, i|
95
95
  define_method(s){ @element[i] }
@@ -98,35 +98,34 @@ module Mgmg
98
98
  def power
99
99
  case @kind
100
100
  when 0, 1
101
- atk_sd()*2
101
+ atk_sd()
102
102
  when 2, 3
103
- atkstr()*4
103
+ atkstr()
104
104
  when 4
105
- [dex_as()*2, mag_das()].max
105
+ [dex_as(), mag_das()].max
106
106
  when 5
107
- dex_as()*2
107
+ dex_as()
108
108
  when 6, 7
109
- [magic()*8, atkstr()*4].max
109
+ [magic()*2, atkstr()].max
110
110
  when 28
111
- (@para.sum*4)-((hp()+mp())*3)
111
+ @para.sum-((hp()+mp())*3.quo(4))
112
112
  else
113
113
  ret = @para.max
114
114
  if ret == magdef()
115
- ret*2+magic()
115
+ ret+magic().quo(2)
116
116
  else
117
- ret*2
117
+ ret
118
118
  end
119
119
  end
120
120
  end
121
121
  def magmag
122
- magdef()*2+magic()
122
+ magdef()+magic().quo(2)
123
123
  end
124
124
  def fpower
125
- if @kind < 8 || @kind == 28
126
- power().fdiv(4)
127
- else
128
- power().fdiv(2)
129
- end
125
+ power().to_f
126
+ end
127
+ def pmdef
128
+ [phydef(), magmag()].min
130
129
  end
131
130
 
132
131
  def smith_cost(outsourcing=false)
@@ -146,9 +145,9 @@ module Mgmg
146
145
  end
147
146
  def comp_cost(outsourcing=false)
148
147
  if outsourcing
149
- [(@star**2)*5+@para.sum+hp().cdiv(4)-hp()+mp().cdiv(4)-mp(), 0].max
148
+ [(@star**2)*5+@para.sum+hp().cdiv(4)-hp()+mp().cdiv(4)-mp(), 0].max.div(2)
150
149
  else
151
- [((@star**2)*5+@para.sum+hp().cdiv(4)-hp()+mp().cdiv(4)-mp()).div(2), 0].max
150
+ [((@star**2)*5+@para.sum+hp().cdiv(4)-hp()+mp().cdiv(4)-mp()).div(2), 0].max.div(2)
152
151
  end
153
152
  end
154
153
  alias :cost :comp_cost
@@ -171,8 +170,7 @@ module Mgmg
171
170
  end
172
171
  end
173
172
  @weight += other.weight
174
- @main = 12
175
- @sub = 12
173
+ @main, @sub = 12, 12
176
174
  @para.add!(other.para)
177
175
  @element.add!(other.element)
178
176
  @total_cost.add!(other.total_cost)
@@ -257,7 +255,9 @@ module Mgmg
257
255
 
258
256
  ret = new(main_k, main.weight+sub.weight, main_s+sub_s, main_sub, sub_main, para, ele)
259
257
  ret.total_cost.add!(main.total_cost).add!(sub.total_cost)
260
- ret.total_cost[1] += ret.comp_cost(outsourcing)
258
+ cc = ret.comp_cost(outsourcing)
259
+ ret.total_cost[1] += cc
260
+ ret.total_cost[main_k < 8 ? 0 : 2] += cc
261
261
  ret.min_levels.merge!(main.min_levels, sub.min_levels)
262
262
  ret.history = [*main.history, *sub.history, ret]
263
263
  ret
@@ -292,11 +292,7 @@ module Mgmg
292
292
  weight = ( ( EquipWeight[kind] + SubWeight[sub_m] - level.div(2) ) * ( MainWeight[main_m] ) ).div(10000)
293
293
 
294
294
  ret = new(kind, ( weight<1 ? 1 : weight ), (main_s+sub_s).div(2), main_mc, sub_mc, para, ele)
295
- if kind < 8
296
- ret.total_cost[0] = ret.smith_cost(outsourcing)
297
- else
298
- ret.total_cost[2] = ret.smith_cost(outsourcing)
299
- end
295
+ ret.total_cost[kind < 8 ? 0 : 2] += ret.smith_cost(outsourcing)
300
296
  ret.min_levels.store(str, str.min_level)
301
297
  ret
302
298
  end
@@ -321,7 +317,7 @@ module Mgmg
321
317
  if m.nil? || mat.nil?
322
318
  raise InvalidMaterialError.new(str)
323
319
  end
324
- [mat, m[1].to_i, mat<90 ? mat.div(10): 9]
320
+ [mat, m[1].to_i, mat<90 ? mat.div(10) : 9]
325
321
  end
326
322
 
327
323
  def min_comp(str, left_associative: true)
data/lib/mgmg/poly.rb CHANGED
@@ -276,6 +276,15 @@ module Mgmg
276
276
  end
277
277
  true
278
278
  end
279
+ def <=>(other)
280
+ if self == other
281
+ 0
282
+ elsif self < other
283
+ -1
284
+ else
285
+ 1
286
+ end
287
+ end
279
288
  end
280
289
  class << TPolynomial
281
290
  ParamIndex = Hash.new
data/lib/mgmg/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Mgmg
2
- VERSION = "1.3.2"
2
+ VERSION = "1.4.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mgmg
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.2
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - KAZOON
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-05-18 00:00:00.000000000 Z
11
+ date: 2021-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -98,7 +98,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
98
  - !ruby/object:Gem::Version
99
99
  version: '0'
100
100
  requirements: []
101
- rubygems_version: 3.2.17
101
+ rubygems_version: 3.2.19
102
102
  signing_key:
103
103
  specification_version: 4
104
104
  summary: Calculate specs of equipments of Megurimeguru, a game produced by Kou.