summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared')
-rw-r--r--src/shared/struct/inventory/shr_equipment.erl89
1 files changed, 79 insertions, 10 deletions
diff --git a/src/shared/struct/inventory/shr_equipment.erl b/src/shared/struct/inventory/shr_equipment.erl
index 25cc8fb..132f9b4 100644
--- a/src/shared/struct/inventory/shr_equipment.erl
+++ b/src/shared/struct/inventory/shr_equipment.erl
@@ -6,6 +6,7 @@
-define(PORTRAIT_FIELD, <<"pt">>).
-define(GLYPH_BOARD_FIELD, <<"gb">>).
-define(GLYPHS_FIELD, <<"gl">>).
+-define(SKILL_FIELD, <<"sk">>).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -19,7 +20,8 @@
armor :: shr_armor:id(),
portrait :: shr_portrait:id(),
glyph_board :: shr_glyph_board:id(),
- glyphs :: list(shr_glyph:id())
+ glyphs :: list(shr_glyph:id()),
+ skill :: shr_skill:id()
}
).
@@ -32,7 +34,8 @@
armor :: shr_armor:type(),
portrait :: shr_portrait:type(),
glyph_board :: shr_glyph_board:type(),
- glyphs :: list(shr_glyph:type())
+ glyphs :: list(shr_glyph:type()),
+ skill :: shr_skill:type()
}
).
@@ -55,6 +58,7 @@
get_portrait/1,
get_glyph_board/1,
get_glyphs/1,
+ get_skill/1,
set_primary_weapon/2,
set_secondary_weapon/2,
@@ -62,6 +66,7 @@
set_portrait/2,
set_glyph_board/2,
set_glyphs/2,
+ set_skill/2,
ataxia_set_primary_weapon/2,
ataxia_set_secondary_weapon/2,
@@ -70,6 +75,7 @@
ataxia_set_glyph_board/2,
ataxia_set_glyphs/2,
ataxia_set_glyphs/3,
+ ataxia_set_skill/2,
get_primary_weapon_id/1,
get_secondary_weapon_id/1,
@@ -77,6 +83,7 @@
get_portrait_id/1,
get_glyph_board_id/1,
get_glyph_ids/1,
+ get_skill_id/1,
set_primary_weapon_id/2,
set_secondary_weapon_id/2,
@@ -84,6 +91,7 @@
set_portrait_id/2,
set_glyph_board_id/2,
set_glyph_ids/2,
+ set_skill_id/2,
ataxia_set_primary_weapon_id/2,
ataxia_set_secondary_weapon_id/2,
@@ -91,7 +99,8 @@
ataxia_set_portrait_id/2,
ataxia_set_glyph_board_id/2,
ataxia_set_glyph_ids/2,
- ataxia_set_glyph_ids/3
+ ataxia_set_glyph_ids/3,
+ ataxia_set_skill_id/2
]
).
@@ -122,7 +131,8 @@
get_armor_field/0,
get_portrait_field/0,
get_glyph_board_field/0,
- get_glyphs_field/0
+ get_glyphs_field/0,
+ get_skill_field/0
]
).
@@ -157,6 +167,10 @@ get_glyph_board (#shr_eq_ref{ glyph_board = R }) -> shr_glyph_board:from_id(R).
get_glyphs (#shr_eq{ glyphs = R }) -> R;
get_glyphs (#shr_eq_ref{ glyphs = R }) -> lists:map(fun shr_glyph:from_id/1, R).
+-spec get_skill (either()) -> shr_skill:type().
+get_skill (#shr_eq{ skill = R }) -> R;
+get_skill (#shr_eq_ref{ skill = R }) -> shr_skill:from_id(R).
+
-spec get_primary_weapon_id (either()) -> shr_weapon:id().
get_primary_weapon_id (#shr_eq_ref{ primary = R }) -> R;
get_primary_weapon_id (#shr_eq{ primary = R }) -> shr_weapon:get_id(R).
@@ -181,6 +195,10 @@ get_glyph_board_id (#shr_eq{ glyph_board = R }) -> shr_glyph_board:get_id(R).
get_glyph_ids (#shr_eq_ref{ glyphs = R }) -> R;
get_glyph_ids (#shr_eq{ glyphs = R }) -> lists:map(fun shr_glyph:get_id/1, R).
+-spec get_skill_id (either()) -> shr_skill:id().
+get_skill_id (#shr_eq_ref{ skill = R }) -> R;
+get_skill_id (#shr_eq{ skill = R }) -> shr_skill:get_id(R).
+
-spec set_primary_weapon
(shr_weapon:type(), type()) -> type();
(shr_weapon:type(), unresolved()) -> unresolved().
@@ -328,6 +346,27 @@ ataxia_set_glyphs (V, VUpdate, Eq) ->
)
}.
+-spec set_skill
+ (shr_skill:type(), type()) -> type();
+ (shr_skill:type(), unresolved()) -> unresolved().
+set_skill (V, Eq) when is_record(Eq, shr_eq) ->
+ Eq#shr_eq{ skill = V };
+set_skill (V, Eq) when is_record(Eq, shr_eq_ref) ->
+ Eq#shr_eq_ref{ skill = shr_skill:get_id(V) }.
+
+-spec ataxia_set_skill
+ (shr_skill:type(), type()) -> {type(), ataxic:basic()};
+ (shr_skill:type(), unresolved()) -> {unresolved(), ataxic:basic()}.
+ataxia_set_skill (V, Eq) ->
+ {
+ set_skill(V, Eq),
+ ataxic:update_field
+ (
+ get_skill_field(),
+ ataxic:constant(shr_skill:get_id(V))
+ )
+ }.
+
-spec set_primary_weapon_id
(shr_weapon:id(), type()) -> type();
(shr_weapon:id(), unresolved()) -> unresolved().
@@ -466,6 +505,27 @@ ataxia_set_glyph_ids (V, VUpdate, Eq) ->
ataxic:update_field(get_glyphs_field(), VUpdate)
}.
+-spec set_skill_id
+ (shr_skill:id(), type()) -> type();
+ (shr_skill:id(), unresolved()) -> unresolved().
+set_skill_id (V, Eq) when is_record(Eq, shr_eq_ref) ->
+ Eq#shr_eq_ref{ skill = V };
+set_skill_id (V, Eq) when is_record(Eq, shr_eq) ->
+ Eq#shr_eq{ skill = shr_skill:from_id(V) }.
+
+-spec ataxia_set_skill_id
+ (shr_skill:id(), type()) -> {type(), ataxic:basic()};
+ (shr_skill:id(), unresolved()) -> {unresolved(), ataxic:basic()}.
+ataxia_set_skill_id (V, Eq) ->
+ {
+ set_skill_id(V, Eq),
+ ataxic:update_field
+ (
+ get_skill_field(),
+ ataxic:constant(V)
+ )
+ }.
+
-spec default () -> type().
default () ->
DefaultGlyphBoard = shr_glyph_board:default(),
@@ -481,7 +541,8 @@ default () ->
(
fun (_E) -> shr_glyph:default() end,
shr_glyph_board:get_slots(DefaultGlyphBoard)
- )
+ ),
+ skill = shr_skill:default()
}.
-spec default_unresolved () -> unresolved().
@@ -498,7 +559,8 @@ default_unresolved () ->
(
fun (_E) -> shr_glyph:default_id() end,
shr_glyph_board:get_slots(shr_glyph_board:default())
- )
+ ),
+ skill = shr_skill:default_id()
}.
-spec decode (map()) -> unresolved().
@@ -510,7 +572,8 @@ decode (Map) ->
armor = maps:get(?ARMOR_FIELD, Map),
portrait = maps:get(?PORTRAIT_FIELD, Map),
glyph_board = maps:get(?GLYPH_BOARD_FIELD, Map),
- glyphs = maps:get(?GLYPHS_FIELD, Map)
+ glyphs = maps:get(?GLYPHS_FIELD, Map),
+ skill = maps:get(?SKILL_FIELD, Map)
}.
-spec encode (either()) -> {list({binary(), any()})}.
@@ -522,7 +585,8 @@ encode (Eq) ->
{?ARMOR_FIELD, get_armor_id(Eq)},
{?PORTRAIT_FIELD, get_portrait_id(Eq)},
{?GLYPH_BOARD_FIELD, get_glyph_board_id(Eq)},
- {?GLYPHS_FIELD, get_glyph_ids(Eq)}
+ {?GLYPHS_FIELD, get_glyph_ids(Eq)},
+ {?SKILL_FIELD, get_skill_id(Eq)}
]
}.
@@ -535,7 +599,8 @@ resolve (EqRef) ->
armor = shr_armor:from_id(EqRef#shr_eq_ref.armor),
portrait = shr_portrait:from_id(EqRef#shr_eq_ref.portrait),
glyph_board = shr_glyph_board:from_id(EqRef#shr_eq_ref.glyph_board),
- glyphs = lists:map(fun shr_glyph:from_id/1, EqRef#shr_eq_ref.glyphs)
+ glyphs = lists:map(fun shr_glyph:from_id/1, EqRef#shr_eq_ref.glyphs),
+ skill = shr_skill:from_id(EqRef#shr_eq_ref.skill)
}.
-spec to_unresolved (type()) -> unresolved().
@@ -547,7 +612,8 @@ to_unresolved (Eq) ->
armor = shr_armor:get_id(Eq#shr_eq.armor),
portrait = shr_portrait:get_id(Eq#shr_eq.portrait),
glyph_board = shr_glyph_board:get_id(Eq#shr_eq.glyph_board),
- glyphs = lists:map(fun shr_glyph:get_id/1, Eq#shr_eq.glyphs)
+ glyphs = lists:map(fun shr_glyph:get_id/1, Eq#shr_eq.glyphs),
+ skill = shr_skill:get_id(Eq#shr_eq.skill)
}.
-spec get_primary_weapon_field () -> non_neg_integer().
@@ -562,6 +628,9 @@ get_armor_field () -> #shr_eq_ref.armor.
-spec get_portrait_field () -> non_neg_integer().
get_portrait_field () -> #shr_eq_ref.portrait.
+-spec get_skill_field () -> non_neg_integer().
+get_skill_field () -> #shr_eq_ref.skill.
+
-spec get_glyph_board_field () -> non_neg_integer().
get_glyph_board_field () -> #shr_eq_ref.glyph_board.