mgmg 1.4.2 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -0
- data/README.md +25 -13
- data/lib/mgmg/equip.rb +18 -23
- data/lib/mgmg/ir.rb +3 -10
- data/lib/mgmg/optimize.rb +21 -9
- data/lib/mgmg/option.rb +85 -0
- data/lib/mgmg/reinforce.rb +3 -3
- data/lib/mgmg/search.rb +182 -222
- data/lib/mgmg/system_equip.rb +6 -0
- data/lib/mgmg/utils.rb +9 -2
- data/lib/mgmg/version.rb +1 -1
- data/lib/mgmg.rb +161 -72
- data/mgmg.gemspec +4 -4
- data/reference.md +127 -48
- metadata +11 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '0939daf2680e3d9a8a80a9616355ed10232ce6794b288ea86d295d283cfde413'
|
4
|
+
data.tar.gz: 7c6f9fdf112335d9844f1ec9e06c694b9cffd0a897787b4c9e74b306296b179c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 31c5e140183a5417c833b7af756b454701333d71293bad1e5cd3f15073d71657c0503038daf0f7c7c02290aee22cef38c795ff98fc92df85462da96759c816f9
|
7
|
+
data.tar.gz: d02cfe4e1f571b76083c644cd0c44d41caced733e22d4c24853ac91b2a3410f53500c7867bda2b2109d46a873d4110a801d1cf2ecb7f2a3a54ba48f1d31d8b51
|
data/CHANGELOG.md
CHANGED
@@ -120,3 +120,14 @@
|
|
120
120
|
- `Mgmg::Equip#reinforce`および`Mgmg::IR`を使うメソッド群に`reinforcement`キーワード引数を追加.
|
121
121
|
- スキルおよび料理による強化効果をシミュレートできるようになった.
|
122
122
|
- 料理については,プリセット料理名または`Mgmg.#cuisine`で生成される`Mgmg::Cuisine`オブジェクトを使う.
|
123
|
+
|
124
|
+
## 1.5.0 2022/06/22
|
125
|
+
- `Mgmg::Option`を実装し,search系メソッドを中心としたキーワード引数を,このクラスに集約してから受け渡すようにした.
|
126
|
+
- オプションオブジェクトは`Mgmg.#option`によって生成し,キーワード引数`opt`に渡す.従来のキーワード引数は廃止された.
|
127
|
+
- この変更で,一部の受け渡し忘れのバグが修正され,パフォーマンスが改善した.
|
128
|
+
- `Enumerable#search`で無駄な処理が発生していて,処理時間がかかっていたバグを修正.
|
129
|
+
- `String#min_level`,`Enumerable#min_level`の仕様を変更し,合成後の重量を目標値にするのに必要な鍛冶・道具製作Lvを計算するようにした.
|
130
|
+
- この変更に伴い,`Mgmg::Equip#min_level`を,`Mgmg::Equip#min_levels_max`に名称変更し,`String#min_levels_max`,`Enumerable#min_levels_max`を追加した.
|
131
|
+
- 関連して,`String#max_weight`,`String#min_weight`,`Enumerable#max_weight`,`Enumerable#min_weight`,`Enumerable#max_weights`,`Enumerable#min_weights`を追加した.
|
132
|
+
- `Mgmg::Option#smith_min`,`Mgmg::Option#armor_min`のデフォルト値を,`String#min_level`,`Enumerable#min_level`を用いて設定する仕様とし,その目標重量を`Mgmg::Option#target_weight`で指定するようにした.
|
133
|
+
- `String#min_comp`,`String#min_smith`,`Enumerable#min_comp`,`Enumerable#min_smith`において,既製品のみである,合成を行わないなど,該当スキルが必要ないレシピである場合の返り値を`-1`に変更した.
|
data/README.md
CHANGED
@@ -53,19 +53,21 @@ puts r.build(122, 139, 232)
|
|
53
53
|
#=> 複数装備9(武:1, 頭:1, 飾:2)[攻撃:15, 物防:34, 魔防:28, HP:241, MP:71, 器用:223, 素早:222, 魔力:6,604]
|
54
54
|
```
|
55
55
|
|
56
|
-
|
57
|
-
|
56
|
+
製作品の重量及び特定の重量にするために必要な鍛冶・防具製作Lvを確認する.
|
58
57
|
```ruby
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
58
|
+
r = 'サンダル(骨2皮1)+[重鎧(金3金3)+[フード(骨2宝1)+[重鎧(皮10金10)+軽鎧(鉄10皮1)]]]'
|
59
|
+
p r.min_levels # 各材料装備を重量1で作るのに必要な防具製作Lv
|
60
|
+
#=> {"サンダル(骨2皮1)"=>3, "重鎧(金3金3)"=>202, "フード(骨2宝1)"=>3, "重鎧(皮10金10)"=>162, "軽鎧(鉄10皮1)"=>68}
|
61
|
+
p r.min_levels(2) # 同重量2以下
|
62
|
+
#=> {"サンダル(骨2皮1)"=>3, "重鎧(金3金3)"=>102, "フード(骨2宝1)"=>3, "重鎧(皮10金10)"=>42, "軽鎧(鉄10皮1)"=>27}
|
63
|
+
p [r.min_weight, r.max_weight] # 最小重量と最大重量
|
64
|
+
#=> [5, 11]
|
65
|
+
p r.min_level # 最小重量で作るのに必要な防具製作Lv
|
66
|
+
#=> 202
|
67
|
+
p r.min_level(7) # 重量7以下で作るのに必要な防具製作Lv
|
68
|
+
#=> 102
|
69
|
+
p r.min_level(-1) # 最小重量+1=重量6以下で作るのに必要な防具製作Lv
|
70
|
+
#=> 162
|
69
71
|
```
|
70
72
|
|
71
73
|
近似多項式を得る.
|
@@ -91,11 +93,21 @@ p [sc, Mgmg.exp(*sc)]
|
|
91
93
|
#=> [[155, 376], 304969]
|
92
94
|
```
|
93
95
|
|
96
|
+
最小重量で製作できない鍛冶レベルを探索範囲に含める.
|
97
|
+
|
98
|
+
```ruby
|
99
|
+
r = '双短剣(金3皮1)+[杖(水1綿1)+[斧(玉5水1)+[杖(鉄1綿1)+[[斧(木2金3)+剣(鉄10皮1)]+[剣(木2綿1)+双短剣(鉄10皮1)]]]]]'
|
100
|
+
sc = r.search(:atk_sd, 2000, opt: Mgmg.option(target_weight: 9))
|
101
|
+
p [sc, Mgmg.exp(*sc)]
|
102
|
+
#=> [[70, 130], 38046]
|
103
|
+
# オプションなしの場合は鍛冶Lv100以上を探索するため,[[100, 126], 41054] になる
|
104
|
+
```
|
105
|
+
|
94
106
|
探索の際,スキル及び料理を考慮する.
|
95
107
|
|
96
108
|
```ruby
|
97
109
|
r = '重鎧(皮2綿1)+[帽子(宝1宝1)+[重鎧(玉5金3)+[帽子(宝1宝1)+[重鎧(玉5金6)+[軽鎧(金3骨1)+[重鎧(皮2骨1)+軽鎧(鉄10綿1)]]]]]]'
|
98
|
-
sc = r.search(:phydef, 100_000,
|
110
|
+
sc = r.search(:phydef, 100_000, opt: Mgmg.option(buff: %w|物防御UP アースドランと氷河酒の蒸し焼き ガードアップ|))
|
99
111
|
p [sc, Mgmg.exp(*sc)]
|
100
112
|
#=> [[120, 264], 152502]
|
101
113
|
```
|
data/lib/mgmg/equip.rb
CHANGED
@@ -57,15 +57,15 @@ module Mgmg
|
|
57
57
|
@min_levels
|
58
58
|
else
|
59
59
|
@min_levels.map do |key, value|
|
60
|
-
[key,
|
60
|
+
[key, Equip.min_level(key, w)]
|
61
61
|
end.to_h
|
62
62
|
end
|
63
63
|
end
|
64
|
-
def
|
64
|
+
def min_levels_max(w=1)
|
65
65
|
if @kind == 28
|
66
|
-
ret = [
|
66
|
+
ret = [-1, -1]
|
67
67
|
min_levels(w).each do |str, ml|
|
68
|
-
if str.build
|
68
|
+
if str.build.kind < 8
|
69
69
|
if ret[0] < ml
|
70
70
|
ret[0] = ml
|
71
71
|
end
|
@@ -77,7 +77,7 @@ module Mgmg
|
|
77
77
|
end
|
78
78
|
ret
|
79
79
|
else
|
80
|
-
min_levels(w).values.append(
|
80
|
+
min_levels(w).values.append(-1).max
|
81
81
|
end
|
82
82
|
end
|
83
83
|
|
@@ -193,15 +193,9 @@ module Mgmg
|
|
193
193
|
def +(other)
|
194
194
|
self.dup.add!(other)
|
195
195
|
end
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
zero.history.clear
|
200
|
-
[zero, self]
|
201
|
-
else
|
202
|
-
raise TypeError, "Mgmg::Equip can't be coerced into other than 0"
|
203
|
-
end
|
204
|
-
end
|
196
|
+
Zero = self.new(28, 0, Vec.new(6, 0), 12, 12, Vec.new(9, 0), Vec.new(3, 0))
|
197
|
+
Zero.history.clear
|
198
|
+
Zero.freeze
|
205
199
|
end
|
206
200
|
|
207
201
|
class << Equip
|
@@ -212,7 +206,7 @@ module Mgmg
|
|
212
206
|
end
|
213
207
|
private def build_sub0(stack, str)
|
214
208
|
SystemEquip.each do |k, v|
|
215
|
-
if
|
209
|
+
if SystemEquipRegexp[k].match(str)
|
216
210
|
stack << v
|
217
211
|
str = str.gsub(k, "<#{stack.length-1}>")
|
218
212
|
end
|
@@ -305,7 +299,7 @@ module Mgmg
|
|
305
299
|
|
306
300
|
ret = new(kind, ( weight<1 ? 1 : weight ), (main_s+sub_s).div(2), main_mc, sub_mc, para, ele)
|
307
301
|
ret.total_cost[kind < 8 ? 0 : 2] += ret.smith_cost(outsourcing)
|
308
|
-
ret.min_levels.store(str,
|
302
|
+
ret.min_levels.store(str, Equip.min_level(str))
|
309
303
|
ret
|
310
304
|
end
|
311
305
|
|
@@ -323,14 +317,14 @@ module Mgmg
|
|
323
317
|
[(main_s-1)*3, (sub_s-1)*3, l].max
|
324
318
|
end
|
325
319
|
|
326
|
-
def min_comp(str,
|
320
|
+
def min_comp(str, opt: Option.new)
|
327
321
|
str = Mgmg.check_string(str)
|
328
322
|
stack, str = minc_sub0([], str)
|
329
|
-
(minc_sub(stack, str, left_associative)[1]-1)*3
|
323
|
+
(minc_sub(stack, str, opt.left_associative)[1]-1)*3
|
330
324
|
end
|
331
325
|
private def minc_sub0(stack, str)
|
332
326
|
SystemEquip.each do |k, v|
|
333
|
-
if
|
327
|
+
if SystemEquipRegexp[k].match(str)
|
334
328
|
stack << v.star
|
335
329
|
str = str.gsub(k, "<#{stack.length-1}>")
|
336
330
|
end
|
@@ -352,14 +346,15 @@ module Mgmg
|
|
352
346
|
end
|
353
347
|
end
|
354
348
|
|
355
|
-
def min_smith(str,
|
349
|
+
def min_smith(str, opt: Option.new)
|
356
350
|
str = Mgmg.check_string(str)
|
357
351
|
stack, str = mins_sub0([], str)
|
358
|
-
(([mins_sub(stack, str, left_associative)]+stack).max-1)*3
|
352
|
+
ret = (([mins_sub(stack, str, opt.left_associative)]+stack).max-1)*3
|
353
|
+
ret < 0 ? -1 : ret
|
359
354
|
end
|
360
355
|
private def mins_sub0(stack, str)
|
361
356
|
SystemEquip.each do |k, v|
|
362
|
-
if
|
357
|
+
if SystemEquipRegexp[k].match(str)
|
363
358
|
stack << 0
|
364
359
|
str = str.gsub(k, "<#{stack.length-1}>")
|
365
360
|
end
|
@@ -373,7 +368,7 @@ module Mgmg
|
|
373
368
|
elsif m = ( lassoc ? /\A(.+)\+(.+?)\Z/ : /\A(.+?)\+(.+)\Z/ ).match(str)
|
374
369
|
[mins_sub(stack, m[1], lassoc), mins_sub(stack, m[2], lassoc)].max
|
375
370
|
elsif m = /\A\<(\d+)\>\Z/.match(str)
|
376
|
-
|
371
|
+
0
|
377
372
|
else
|
378
373
|
mins_sub2(str)
|
379
374
|
end
|
data/lib/mgmg/ir.rb
CHANGED
@@ -31,7 +31,7 @@ module Mgmg
|
|
31
31
|
((s+@sub9)*@coef).div(@den)
|
32
32
|
end
|
33
33
|
def evaluate3(s, a, c)
|
34
|
-
if sa==:a
|
34
|
+
if @sa==:a
|
35
35
|
((a+@sub9)*@coef).div(@den)
|
36
36
|
else
|
37
37
|
((s+@sub9)*@coef).div(@den)
|
@@ -313,14 +313,7 @@ module Mgmg
|
|
313
313
|
def +(other)
|
314
314
|
self.dup.add!(other)
|
315
315
|
end
|
316
|
-
|
317
|
-
if other == 0
|
318
|
-
zero = self.class.new(28, Vec.new(6, 0), 12, 12, Array.new(9){Const.new(0)})
|
319
|
-
[zero, self]
|
320
|
-
else
|
321
|
-
raise TypeError, "Mgmg::IR can't be coerced into other than 0"
|
322
|
-
end
|
323
|
-
end
|
316
|
+
Zero = self.new(28, Vec.new(6, 0), 12, 12, Array.new(9){Const.new(0)})
|
324
317
|
end
|
325
318
|
class << IR
|
326
319
|
def build(str, left_associative: true, reinforcement: [])
|
@@ -330,7 +323,7 @@ module Mgmg
|
|
330
323
|
end
|
331
324
|
private def build_sub0(stack, str)
|
332
325
|
SystemEquip.each do |k, v|
|
333
|
-
if
|
326
|
+
if SystemEquipRegexp[k].match(str)
|
334
327
|
stack << from_equip(v)
|
335
328
|
str = str.gsub(k, "<#{stack.length-1}>")
|
336
329
|
end
|
data/lib/mgmg/optimize.rb
CHANGED
@@ -2,8 +2,12 @@ module Mgmg
|
|
2
2
|
module Optimize; end
|
3
3
|
class << Optimize
|
4
4
|
InvList = [%w|帽子 フード サンダル|.freeze, %w|宝1 骨1 木1 木2 骨2|.freeze, %w|宝1 骨1 木1|.freeze].freeze
|
5
|
-
def phydef_optimize(str, smith, comp=smith,
|
6
|
-
best =
|
5
|
+
def phydef_optimize(str, smith, comp=smith, opt: Option.new)
|
6
|
+
best = if smith.nil? then
|
7
|
+
[str, str.poly(:phydef, opt: opt), str.poly(:magdef, opt: opt), str.poly(:cost, opt: opt)]
|
8
|
+
else
|
9
|
+
[str, str.build(smith, comp, opt: opt)]
|
10
|
+
end
|
7
11
|
str = Mgmg.check_string(str)
|
8
12
|
ai = 0
|
9
13
|
while str.sub!(/(帽子|フード|サンダル)\([宝木骨][12][宝木骨]1\)/){
|
@@ -19,7 +23,7 @@ module Mgmg
|
|
19
23
|
m = /([^\+]*\([^\(]+[綿皮]1\))\]*\Z/.match(str)
|
20
24
|
if m
|
21
25
|
if smith
|
22
|
-
if m[1].sub(/綿1\)/, '皮1)').build(smith).weight == m[1].sub(/皮1\)/, '綿1)').build(smith).weight
|
26
|
+
if m[1].sub(/綿1\)/, '皮1)').build(smith, opt: opt).weight == m[1].sub(/皮1\)/, '綿1)').build(smith, opt: opt).weight
|
23
27
|
skin = true
|
24
28
|
end
|
25
29
|
else
|
@@ -35,7 +39,11 @@ module Mgmg
|
|
35
39
|
b = b0
|
36
40
|
while b
|
37
41
|
r = pd_apply_idx(str, a, b)
|
38
|
-
best =
|
42
|
+
best = if smith.nil? then
|
43
|
+
pd_better(best, [r, r.poly(:phydef, opt: opt), r.poly(:magdef, opt: opt), r.poly(:cost, opt: opt)], opt.magdef_maximize)
|
44
|
+
else
|
45
|
+
pd_better(best, [r, r.build(smith, comp, opt: opt)], opt.magdef_maximize)
|
46
|
+
end
|
39
47
|
b = pd_next_b(b)
|
40
48
|
end
|
41
49
|
a = pd_next_a(a)
|
@@ -49,7 +57,11 @@ module Mgmg
|
|
49
57
|
b = b0
|
50
58
|
while b
|
51
59
|
r = pd_apply_idx(str, a, b)
|
52
|
-
best =
|
60
|
+
best = if smith.nil? then
|
61
|
+
pd_better(best, [r, r.poly(:phydef, opt: opt), r.poly(:magdef, opt: opt), r.poly(:cost, opt: opt)], opt.magdef_maximize)
|
62
|
+
else
|
63
|
+
pd_better(best, [r, r.build(smith, comp, opt: opt)], opt.magdef_maximize)
|
64
|
+
end
|
53
65
|
b = pd_next_b(b)
|
54
66
|
end
|
55
67
|
a = pd_next_a(a)
|
@@ -102,7 +114,7 @@ module Mgmg
|
|
102
114
|
end
|
103
115
|
return pre
|
104
116
|
else
|
105
|
-
raise
|
117
|
+
raise UnexpectedError
|
106
118
|
end
|
107
119
|
end
|
108
120
|
private def pd_apply_idx(str, a, b)
|
@@ -146,8 +158,8 @@ module Mgmg
|
|
146
158
|
end
|
147
159
|
|
148
160
|
MwList = %w|綿 皮 骨 木 水|.freeze
|
149
|
-
def buster_optimize(str, smith, comp=smith,
|
150
|
-
best = ( smith.nil? ? [str, str.poly(:mag_das)] : [str, str.build(smith, comp)] )
|
161
|
+
def buster_optimize(str, smith, comp=smith, opt: Option.new)
|
162
|
+
best = ( smith.nil? ? [str, str.poly(:mag_das, opt: opt)] : [str, str.build(smith, comp, opt: opt)] )
|
151
163
|
str = Mgmg.check_string(str)
|
152
164
|
ai = -1
|
153
165
|
org = nil
|
@@ -162,7 +174,7 @@ module Mgmg
|
|
162
174
|
a = Array.new(ai){ [0, 0, 0] }
|
163
175
|
while a
|
164
176
|
r = bus_apply_idx(str, a)
|
165
|
-
best = bus_better(best, ( smith.nil? ? [r, r.poly(:mag_das)] : [r, r.build(smith, comp)] ))
|
177
|
+
best = bus_better(best, ( smith.nil? ? [r, r.poly(:mag_das, opt: opt)] : [r, r.build(smith, comp, opt: opt)] ))
|
166
178
|
a = bus_next_a(a)
|
167
179
|
end
|
168
180
|
best[0]
|
data/lib/mgmg/option.rb
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
module Mgmg
|
2
|
+
module_function def option(recipe=nil, **kw)
|
3
|
+
ret = Option.new(**kw)
|
4
|
+
ret.set_default(recipe) unless recipe.nil?
|
5
|
+
ret
|
6
|
+
end
|
7
|
+
class Option
|
8
|
+
def initialize(
|
9
|
+
left_associative: true,
|
10
|
+
smith_min: nil, armor_min:nil, comp_min: nil, smith_max: 10000, armor_max: 10000, comp_max: 10000,
|
11
|
+
step: 1, magdef_maximize: true,
|
12
|
+
target_weight: 0, reinforcement: [], buff: nil,
|
13
|
+
irep: nil, cut_exp: Float::INFINITY
|
14
|
+
)
|
15
|
+
@left_associative = left_associative
|
16
|
+
@smith_min = smith_min
|
17
|
+
@armor_min = armor_min
|
18
|
+
@comp_min = comp_min
|
19
|
+
@smith_max = smith_max
|
20
|
+
@armor_max = armor_max
|
21
|
+
@comp_max = comp_max
|
22
|
+
@step = step
|
23
|
+
@magdef_maximize = magdef_maximize
|
24
|
+
@target_weight = target_weight
|
25
|
+
@reinforcement = reinforcement
|
26
|
+
unless buff.nil?
|
27
|
+
if @reinforcement.empty?
|
28
|
+
@reinforcement = buff
|
29
|
+
else
|
30
|
+
raise ArgumentError, "reinforcement and buff are exclusive"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
@irep = irep
|
34
|
+
@cut_exp = cut_exp
|
35
|
+
end
|
36
|
+
attr_accessor :left_associative, :smith_min, :armor_min, :comp_min, :smith_max, :armor_max, :comp_max
|
37
|
+
attr_accessor :step, :magdef_maximize, :target_weight, :reinforcement, :irep, :cut_exp
|
38
|
+
def initialize_copy(other)
|
39
|
+
@left_associative = other.left_associative
|
40
|
+
@smith_min = other.smith_min
|
41
|
+
@armor_min = other.armor_min
|
42
|
+
@comp_min = other.comp_min
|
43
|
+
@smith_max = other.smith_max
|
44
|
+
@armor_max = other.armor_max
|
45
|
+
@comp_max = other.comp_max
|
46
|
+
@step = other.step
|
47
|
+
@magdef_maximize = other.magdef_maximize
|
48
|
+
@target_weight = other.target_weight
|
49
|
+
@reinforcement = other.reinforcement.dup
|
50
|
+
@irep = other.irep
|
51
|
+
@cut_exp = other.cut_exp
|
52
|
+
end
|
53
|
+
def set_default(recipe, force: false)
|
54
|
+
case recipe
|
55
|
+
when String
|
56
|
+
if @smith_min.nil? && @armor_min
|
57
|
+
@smith_min = @armor_min
|
58
|
+
end
|
59
|
+
if force || @smith_min.nil?
|
60
|
+
s = recipe.min_level(@target_weight, opt: self)
|
61
|
+
@smith_min = s if force || @smith_min.nil?
|
62
|
+
@armor_min = s if force || @armor_min.nil?
|
63
|
+
end
|
64
|
+
when Enumerable
|
65
|
+
if force || @smith_min.nil? || @armor_min.nil?
|
66
|
+
@target_weight = [@target_weight, @target_weight] if @target_weight.kind_of? Numeric
|
67
|
+
s, a = recipe.min_level(*@target_weight, opt: self)
|
68
|
+
@smith_min = s if force || @smith_min.nil?
|
69
|
+
@armor_min = a if force || @armor_min.nil?
|
70
|
+
end
|
71
|
+
else
|
72
|
+
raise ArgumentError, 'recipe should be String or Enumerable'
|
73
|
+
end
|
74
|
+
@comp_min = recipe.min_comp(opt: self) if force || @comp_min.nil?
|
75
|
+
@irep = recipe.ir(opt: self) if force || @irep.nil?
|
76
|
+
self
|
77
|
+
end
|
78
|
+
def buff
|
79
|
+
@reinforcement
|
80
|
+
end
|
81
|
+
def buff=(v)
|
82
|
+
@reinforcement = v
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
data/lib/mgmg/reinforce.rb
CHANGED
@@ -14,7 +14,7 @@ module Mgmg
|
|
14
14
|
alias :inspect :to_s
|
15
15
|
end
|
16
16
|
|
17
|
-
#
|
17
|
+
# スキル名 攻 物 防 HP MP 腕 器 速 魔
|
18
18
|
Skill = {
|
19
19
|
'物防御UP' => Reinforcement.new( Vec[ 0, 10, 0, 0, 0, 0, 0, 0, 0] ),
|
20
20
|
'魔防御UP' => Reinforcement.new( Vec[ 0, 0, 10, 0, 0, 0, 0, 0, 0] ),
|
@@ -42,9 +42,9 @@ module Mgmg
|
|
42
42
|
if Skill.has_key?(arg)
|
43
43
|
Skill[arg]
|
44
44
|
elsif SystemCuisine.has_key?(arg)
|
45
|
-
SystemCuisine[arg]
|
45
|
+
cuisine(SystemCuisine[arg])
|
46
46
|
else
|
47
|
-
raise
|
47
|
+
raise InvalidReinforcementNameError, arg
|
48
48
|
end
|
49
49
|
else
|
50
50
|
raise ArgumentError, "The argument should be Mgmg::Cuisine or skill name String. (`#{arg}' is given)"
|