| summaryrefslogtreecommitdiff | 
diff options
Diffstat (limited to 'src/shared/struct')
| -rw-r--r-- | src/shared/struct/shr_armor.erl | 193 | ||||
| -rw-r--r-- | src/shared/struct/shr_armor.erl.m4 | 2 | ||||
| -rw-r--r-- | src/shared/struct/shr_glyph.erl | 21 | ||||
| -rw-r--r-- | src/shared/struct/shr_glyph_board.erl | 21 | ||||
| -rw-r--r-- | src/shared/struct/shr_inventory.erl | 152 | ||||
| -rw-r--r-- | src/shared/struct/shr_player.erl | 39 | ||||
| -rw-r--r-- | src/shared/struct/shr_weapon.erl | 447 | ||||
| -rw-r--r-- | src/shared/struct/shr_weapon.erl.m4 | 2 | 
8 files changed, 224 insertions, 653 deletions
| diff --git a/src/shared/struct/shr_armor.erl b/src/shared/struct/shr_armor.erl deleted file mode 100644 index fa516f3..0000000 --- a/src/shared/struct/shr_armor.erl +++ /dev/null @@ -1,193 +0,0 @@ --module(shr_armor). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --opaque id() :: non_neg_integer(). - --type category() :: 'kinetic' | 'leather' | 'chain' | 'plate'. - --record -( -   armor, -   { -      id :: id(), -      name :: binary(), -      category :: category(), -      coef :: float() -   } -). - --opaque type() :: #armor{}. - --export_type([type/0, id/0]). --export_type ([category/0]). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%% Accessors --export -( -   [ -      get_id/1, -      get_name/1, -      get_coefficient/1, -      get_category/1 -   ] -). - --export -( -   [ -      random_id/0, -      from_id/1, -      apply_to_attributes/2, -      get_resistance_to/2 -   ] -). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%% Accessors --spec get_id (type()) -> id(). -get_id (Ar) -> Ar#armor.id. - --spec get_name (type()) -> binary(). -get_name (Ar) -> Ar#armor.name. - --spec get_coefficient (type()) -> float(). -get_coefficient (Ar) -> Ar#armor.coef. - --spec get_category (type()) -> category(). -get_category (Ar) -> Ar#armor.category. - --spec from_id (id()) -> type(). - -from_id (0) -> -   #armor -   { -      id = 0, -      name = <<"None">>, -      category = leather, -      coef = 0.0 -   }; -from_id (1) -> -   #armor -   { -      id = 1, -      name = <<"Last Meal's Pelts">>, -      category = leather, -      coef = 0.5 -   }; -from_id (2) -> -   #armor -   { -      id = 2, -      name = <<"Bits of Wall">>, -      category = plate, -      coef = 0.5 -   }; -from_id (3) -> -   #armor -   { -      id = 3, -      name = <<"Garden Fence">>, -      category = chain, -      coef = 0.5 -   }; -from_id (4) -> -   #armor -   { -      id = 4, -      name = <<"Morrigan's Pity">>, -      category = kinetic, -      coef = 0.5 -   }; -from_id(_) -> -   from_id(0). - --spec random_id () -> id(). -random_id () -> shr_roll:between(0, 4). - --spec apply_to_attributes -   ( -      type(), -      shr_attributes:type() -   ) -   -> shr_attributes:type(). -apply_to_attributes (Ar, Att) -> -   Constitution = shr_attributes:get_constitution(Att), -   Dexterity = shr_attributes:get_dexterity(Att), -   Speed = shr_attributes:get_speed(Att), -   Strength = shr_attributes:get_strength(Att), -   Mind = shr_attributes:get_mind(Att), -   Impact = shr_math_util:ceil(20.0 * Ar#armor.coef), -   HalfImpact = shr_math_util:ceil(10.0 * Ar#armor.coef), -   Category = Ar#armor.category, - -   case Category of -      kinetic -> shr_attributes:set_unsafe_mind((Mind - Impact), Att); -      leather -> -         shr_attributes:set_unsafe_constitution -         ( -            (Constitution - HalfImpact), -            shr_attributes:set_unsafe_dexterity((Dexterity - HalfImpact), Att) -         ); - -      chain -> -         shr_attributes:set_unsafe_constitution -         ( -            (Constitution - HalfImpact), -            shr_attributes:set_unsafe_dexterity -            ( -               (Dexterity - HalfImpact), -               shr_attributes:set_unsafe_speed((Speed - Impact), Att) -            ) -         ); - -      plate -> -         shr_attributes:set_unsafe_constitution -         ( -            (Constitution - HalfImpact), -            shr_attributes:set_unsafe_dexterity -            ( -               (Dexterity - HalfImpact), -               shr_attributes:set_unsafe_speed -               ( -                  (Speed - Impact), -                  shr_attributes:set_unsafe_strength((Strength - Impact), Att) -               ) -            ) -         ) -   end. - --spec get_resistance_to (shr_weapon:damage_type(), type()) -> non_neg_integer(). -get_resistance_to (DamageType, Armor) -> -   ArmorCategory = Armor#armor.category, -   BaseResistance = -      case {DamageType, ArmorCategory} of -         {slash, kinetic} -> 0.0; -         {slash, leather} -> 20.0; -         {slash, chain} -> 30.0; -         {slash, plate} -> 30.0; -         {blunt, kinetic} -> 20.0; -         {blunt, leather} -> 20.0; -         {blunt, chain} -> 20.0; -         {blunt, plate} -> 20.0; -         {pierce, kinetic} -> 20.0; -         {pierce, leather} -> 20.0; -         {pierce, chain} -> 20.0; -         {pierce, plate} -> 30.0 -      end, - -   ArmorCoefficient = Armor#armor.coef, -   ActualResistance = (ArmorCoefficient * BaseResistance), - -   shr_math_util:ceil(ActualResistance). diff --git a/src/shared/struct/shr_armor.erl.m4 b/src/shared/struct/shr_armor.erl.m4 index 02938e2..e72ba47 100644 --- a/src/shared/struct/shr_armor.erl.m4 +++ b/src/shared/struct/shr_armor.erl.m4 @@ -3,7 +3,7 @@  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --opaque id() :: non_neg_integer(). +-type id() :: non_neg_integer().  -type category() :: 'kinetic' | 'leather' | 'chain' | 'plate'. diff --git a/src/shared/struct/shr_glyph.erl b/src/shared/struct/shr_glyph.erl new file mode 100644 index 0000000..cb971d1 --- /dev/null +++ b/src/shared/struct/shr_glyph.erl @@ -0,0 +1,21 @@ +-module(shr_glyph). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-type id() :: binary(). + +-export_type([id/0]). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + diff --git a/src/shared/struct/shr_glyph_board.erl b/src/shared/struct/shr_glyph_board.erl new file mode 100644 index 0000000..ad1545f --- /dev/null +++ b/src/shared/struct/shr_glyph_board.erl @@ -0,0 +1,21 @@ +-module(shr_glyph_board). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-type id() :: binary(). + +-export_type([id/0]). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + diff --git a/src/shared/struct/shr_inventory.erl b/src/shared/struct/shr_inventory.erl new file mode 100644 index 0000000..5d70720 --- /dev/null +++ b/src/shared/struct/shr_inventory.erl @@ -0,0 +1,152 @@ +-module(shr_inventory). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-record +( +   inventory, +   { +      owner_id :: shr_player:id(), +      portrait_ids :: sets:set(binary()), +      glyph_ids :: sets:set(binary()), +      glyph_board_ids :: sets:set(binary()), +      weapon_ids :: sets:set(binary()), +      armor_ids :: sets:set(binary()) +   } +). + +-opaque type() :: #inventory{}. + +-export_type([type/0]). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%% Accessors +-export +( +   [ +      get_owner_id/1, + +      get_portrait_ids/1, +      get_glyph_ids/1, +      get_glyph_board_ids/1, +      get_weapon_ids/1, +      get_armor_ids/1, + +      set_portrait_ids/2, +      set_glyph_ids/2, +      set_glyph_board_ids/2, +      set_weapon_ids/2, +      set_armor_ids/2 +   ] +). + +-export +( +   [ +      get_portrait_ids_field/0, +      get_glyph_ids_field/0, +      get_glyph_board_ids_field/0, +      get_weapon_ids_field/0, +      get_armor_ids_field/0 +   ] +). + +-export +( +   [ +      new/1 +   ] +). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%% Accessors +-spec get_owner_id (type()) -> shr_player:id(). +get_owner_id (Inv) -> Inv#inventory.owner_id. + +-spec get_portrait_ids (type()) -> sets:set(binary()). +get_portrait_ids (Inv) -> Inv#inventory.portrait_ids. + +-spec get_glyph_ids (type()) -> sets:set(binary()). +get_glyph_ids (Inv) -> Inv#inventory.glyph_ids. + +-spec get_glyph_board_ids (type()) -> sets:set(binary()). +get_glyph_board_ids (Inv) -> Inv#inventory.glyph_board_ids. + +-spec get_weapon_ids (type()) -> sets:set(binary()). +get_weapon_ids (Inv) -> Inv#inventory.weapon_ids. + +-spec get_armor_ids (type()) -> sets:set(binary()). +get_armor_ids (Inv) -> Inv#inventory.armor_ids. + +-spec set_portrait_ids (sets:set(binary()), type()) -> type(). +set_portrait_ids (Value, Inv) -> +   Inv#inventory +   { +      portrait_ids = Value +   }. + +-spec set_glyph_ids (sets:set(binary()), type()) -> type(). +set_glyph_ids (Value, Inv) -> +   Inv#inventory +   { +      glyph_ids = Value +   }. + +-spec set_glyph_board_ids (sets:set(binary()), type()) -> type(). +set_glyph_board_ids (Value, Inv) -> +   Inv#inventory +   { +      glyph_board_ids = Value +   }. + +-spec set_weapon_ids (sets:set(binary()), type()) -> type(). +set_weapon_ids (Value, Inv) -> +   Inv#inventory +   { +      weapon_ids = Value +   }. + +-spec set_armor_ids (sets:set(binary()), type()) -> type(). +set_armor_ids (Value, Inv) -> +   Inv#inventory +   { +      armor_ids = Value +   }. + +-spec get_portrait_ids_field () -> non_neg_integer(). +get_portrait_ids_field () -> #inventory.portrait_ids. + +-spec get_glyph_ids_field () -> non_neg_integer(). +get_glyph_ids_field () -> #inventory.glyph_ids. + +-spec get_glyph_board_ids_field () -> non_neg_integer(). +get_glyph_board_ids_field () -> #inventory.glyph_board_ids. + +-spec get_weapon_ids_field () -> non_neg_integer(). +get_weapon_ids_field () -> #inventory.weapon_ids. + +-spec get_armor_ids_field () -> non_neg_integer(). +get_armor_ids_field () -> #inventory.armor_ids. + +-spec new (shr_player:id()) -> type(). +new (OwnerID) -> +   EmptySet = sets:new(), + +   #inventory +   { +      owner_id = OwnerID, +      portrait_ids = EmptySet, +      glyph_ids = EmptySet, +      glyph_board_ids = EmptySet, +      weapon_ids = EmptySet, +      armor_ids = EmptySet +   }. diff --git a/src/shared/struct/shr_player.erl b/src/shared/struct/shr_player.erl index 2b394c6..13fa1ed 100644 --- a/src/shared/struct/shr_player.erl +++ b/src/shared/struct/shr_player.erl @@ -17,7 +17,8 @@        email :: binary(),        last_active :: integer(),        maps :: list(binary()), -      characters :: list(binary()) +      roster_id :: binary(), +      inventory_id :: binary()     }  ). @@ -46,7 +47,8 @@        get_email/1,        get_last_active/1,        get_maps/1, -      get_characters/1, +      get_inventory_id/1, +      get_roster_id/1,        set_id/2,        set_username/2, @@ -55,7 +57,8 @@        set_email/2,        refresh_active/1,        set_maps/2, -      set_characters/2 +      set_inventory_id/2, +      set_roster_id/2     ]  ). @@ -69,7 +72,8 @@        get_email_field/0,        get_last_active_field/0,        get_maps_field/0, -      get_characters_field/0 +      get_inventory_id_field/0, +      get_roster_id_field/0     ]  ). @@ -85,6 +89,9 @@  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  -spec secure_value (binary(), binary()) -> binary().  secure_value (Salt, Val) -> +   % TODO: Maybe it would be a good idea to include the user's IP in there as +   % well. This would ensure that sessions alway use the same server (and thus, +   % the same caches), and make timed cache exploits easier to prevent.     SaltedVal = erlang:iolist_to_binary([Salt, Val]),     HashedSaltedVal = crypto:hash(sha384, SaltedVal), @@ -105,7 +112,8 @@ new (ID, Username, Password, Email) ->           email = Email,           last_active = 0,           maps = [], -         characters = [] +         inventory_id = <<"0">>, +         roster_id = <<"0">>        },     S0Result = set_password(Password, Result), @@ -136,8 +144,11 @@ get_last_active (Player) -> Player#player.last_active.  -spec get_maps (type()) -> list(binary()).  get_maps (Player) -> Player#player.maps. --spec get_characters (type()) -> list(binary()). -get_characters (Player) -> Player#player.characters. +-spec get_roster_id (type()) -> binary(). +get_roster_id (Player) -> Player#player.roster_id. + +-spec get_inventory_id (type()) -> binary(). +get_inventory_id (Player) -> Player#player.inventory_id.  -spec set_id (binary(), type()) -> type().  set_id (Val, Player) -> Player#player{ id = Val }. @@ -175,8 +186,11 @@ refresh_active (Player) ->  -spec set_maps (list(binary()), type()) -> type().  set_maps (Maps, Player) -> Player#player{ maps = Maps }. --spec set_characters (list(binary()), type()) -> type(). -set_characters (Characters, Player) -> Player#player{ characters = Characters }. +-spec set_roster_id (binary(), type()) -> type(). +set_roster_id (RosterID, Player) -> Player#player{ roster_id = RosterID }. + +-spec set_inventory_id (binary(), type()) -> type(). +set_inventory_id (InvID, Player) -> Player#player{ inventory_id = InvID }.  -spec get_id_field () -> non_neg_integer().  get_id_field () -> #player.id. @@ -199,8 +213,11 @@ get_last_active_field () -> #player.last_active.  -spec get_maps_field () -> non_neg_integer().  get_maps_field () -> #player.maps. --spec get_characters_field () -> non_neg_integer(). -get_characters_field () -> #player.characters. +-spec get_roster_id_field () -> non_neg_integer(). +get_roster_id_field () -> #player.roster_id. + +-spec get_inventory_id_field () -> non_neg_integer(). +get_inventory_id_field () -> #player.inventory_id.  -spec password_is (binary(), type()) -> boolean().  password_is (Val, Player) -> diff --git a/src/shared/struct/shr_weapon.erl b/src/shared/struct/shr_weapon.erl deleted file mode 100644 index ade46f8..0000000 --- a/src/shared/struct/shr_weapon.erl +++ /dev/null @@ -1,447 +0,0 @@ --module(shr_weapon). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --opaque id() :: non_neg_integer(). - --type range_type() :: 'ranged' | 'melee'. --type range_modifier() :: 'long' | 'short'. --type damage_type() :: 'slash' | 'pierce' | 'blunt'. --type damage_modifier() :: 'heavy' | 'light'. - --record -( -   weapon, -   { -      id :: id(), -      name :: binary(), -      range_type :: range_type(), -      range_mod :: range_modifier(), -      damage_type :: damage_type(), -      damage_mod :: damage_modifier(), -      coef :: float() -   } -). - --opaque type() :: #weapon{}. - --export_type([type/0, id/0]). --export_type -( -   [ -      range_type/0, -      range_modifier/0, -      damage_type/0, -      damage_modifier/0 -   ] -). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%% Accessors --export -( -   [ -      get_id/1, -      get_name/1, -      get_range_type/1, -      get_range_modifier/1, -      get_damage_type/1, -      get_damage_modifier/1, -      get_coefficient/1, -      get_ranges/1, -      get_damages/1 -   ] -). - --export -( -   [ -      random_id/0, -      from_id/1, -      can_parry/1, -      apply_to_attributes/2 -   ] -). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec ranges_of_type -   ( -      range_type(), -      range_modifier() -   ) -   -> {non_neg_integer(), non_neg_integer()}. -ranges_of_type (ranged, long) -> {2, 6}; -ranges_of_type (ranged, short) -> {1, 4}; -ranges_of_type (melee, long) -> {0, 2}; -ranges_of_type (melee, short) -> {0, 1}. - --spec damages_of_type -   ( -      range_type(), -      damage_modifier() -   ) -   -> {non_neg_integer(), non_neg_integer()}. -damages_of_type (ranged, heavy) -> {15, 30}; -damages_of_type (ranged, light) -> {10, 25}; -damages_of_type (melee, heavy) -> {20, 35}; -damages_of_type (melee, light) -> {15, 30}. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%% Accessors --spec get_id (type()) -> id(). -get_id (Wp) -> Wp#weapon.id. - --spec get_name (type()) -> binary(). -get_name (Wp) -> Wp#weapon.name. - --spec get_range_type (type()) -> range_type(). -get_range_type (Wp) -> Wp#weapon.range_type. - --spec get_range_modifier (type()) -> range_modifier(). -get_range_modifier (Wp) -> Wp#weapon.range_mod. - --spec get_damage_type (type()) -> damage_type(). -get_damage_type (Wp) -> Wp#weapon.damage_type. - --spec get_damage_modifier (type()) -> damage_modifier(). -get_damage_modifier (Wp) -> Wp#weapon.damage_mod. - --spec get_coefficient (type()) -> float(). -get_coefficient (Wp) -> Wp#weapon.coef. - --spec get_ranges (type()) -> {non_neg_integer(), non_neg_integer()}. -get_ranges (Wp) -> -   ranges_of_type(Wp#weapon.range_type, Wp#weapon.range_mod). - --spec get_damages (type()) -> {non_neg_integer(), non_neg_integer()}. -get_damages (Wp) -> -   Coef = Wp#weapon.coef, -   {Min, Max} = damages_of_type(Wp#weapon.range_type, Wp#weapon.damage_mod), -   {shr_math_util:ceil(Min * Coef), shr_math_util:ceil(Max * Coef)}. - --spec can_parry (type()) -> boolean(). -can_parry (Wp) -> (Wp#weapon.range_type == melee). - --spec from_id (id()) -> type(). - -from_id (0) -> -   #weapon -   { -      id = 0, -      name = <<"None">>, -      range_type = melee, -      range_mod = short, -      damage_type = blunt, -      damage_mod = light, -      coef = 0.3 -   }; -from_id (1) -> -   #weapon -   { -      id = 1, -      name = <<"Dagger">>, -      range_type = melee, -      range_mod = short, -      damage_type = slash, -      damage_mod = light, -      coef = 1.0 -   }; -from_id (2) -> -   #weapon -   { -      id = 2, -      name = <<"Sword">>, -      range_type = melee, -      range_mod = short, -      damage_type = slash, -      damage_mod = heavy, -      coef = 1.0 -   }; -from_id (3) -> -   #weapon -   { -      id = 3, -      name = <<"Claymore">>, -      range_type = melee, -      range_mod = long, -      damage_type = slash, -      damage_mod = light, -      coef = 1.0 -   }; -from_id (4) -> -   #weapon -   { -      id = 4, -      name = <<"Bardiche">>, -      range_type = melee, -      range_mod = long, -      damage_type = slash, -      damage_mod = heavy, -      coef = 1.0 -   }; -from_id (5) -> -   #weapon -   { -      id = 5, -      name = <<"Stiletto">>, -      range_type = melee, -      range_mod = short, -      damage_type = pierce, -      damage_mod = light, -      coef = 1.0 -   }; -from_id (6) -> -   #weapon -   { -      id = 6, -      name = <<"Pickaxe">>, -      range_type = melee, -      range_mod = short, -      damage_type = pierce, -      damage_mod = heavy, -      coef = 1.0 -   }; -from_id (7) -> -   #weapon -   { -      id = 7, -      name = <<"Rapier">>, -      range_type = melee, -      range_mod = long, -      damage_type = pierce, -      damage_mod = light, -      coef = 1.0 -   }; -from_id (8) -> -   #weapon -   { -      id = 8, -      name = <<"Pike">>, -      range_type = melee, -      range_mod = long, -      damage_type = pierce, -      damage_mod = heavy, -      coef = 1.0 -   }; -from_id (9) -> -   #weapon -   { -      id = 9, -      name = <<"Club">>, -      range_type = melee, -      range_mod = short, -      damage_type = blunt, -      damage_mod = light, -      coef = 1.0 -   }; -from_id (10) -> -   #weapon -   { -      id = 10, -      name = <<"Mace">>, -      range_type = melee, -      range_mod = short, -      damage_type = blunt, -      damage_mod = heavy, -      coef = 1.0 -   }; -from_id (11) -> -   #weapon -   { -      id = 11, -      name = <<"Staff">>, -      range_type = melee, -      range_mod = long, -      damage_type = blunt, -      damage_mod = light, -      coef = 1.0 -   }; -from_id (12) -> -   #weapon -   { -      id = 12, -      name = <<"War Hammer">>, -      range_type = melee, -      range_mod = long, -      damage_type = blunt, -      damage_mod = heavy, -      coef = 1.0 -   }; -from_id (13) -> -   #weapon -   { -      id = 13, -      name = <<"Short Bow (Broadhead)">>, -      range_type = ranged, -      range_mod = short, -      damage_type = slash, -      damage_mod = light, -      coef = 1.0 -   }; -from_id (14) -> -   #weapon -   { -      id = 14, -      name = <<"Short Bow (Blunt)">>, -      range_type = ranged, -      range_mod = short, -      damage_type = blunt, -      damage_mod = light, -      coef = 1.0 -   }; -from_id (15) -> -   #weapon -   { -      id = 15, -      name = <<"Short Bow (Bodkin Point)">>, -      range_type = ranged, -      range_mod = short, -      damage_type = pierce, -      damage_mod = light, -      coef = 1.0 -   }; -from_id (16) -> -   #weapon -   { -      id = 16, -      name = <<"Long Bow (Broadhead)">>, -      range_type = ranged, -      range_mod = long, -      damage_type = slash, -      damage_mod = light, -      coef = 1.0 -   }; -from_id (17) -> -   #weapon -   { -      id = 17, -      name = <<"Long Bow (Blunt)">>, -      range_type = ranged, -      range_mod = long, -      damage_type = blunt, -      damage_mod = light, -      coef = 1.0 -   }; -from_id (18) -> -   #weapon -   { -      id = 18, -      name = <<"Long Bow (Bodkin Point)">>, -      range_type = ranged, -      range_mod = long, -      damage_type = pierce, -      damage_mod = light, -      coef = 1.0 -   }; -from_id (19) -> -   #weapon -   { -      id = 19, -      name = <<"Crossbow (Broadhead)">>, -      range_type = ranged, -      range_mod = short, -      damage_type = slash, -      damage_mod = heavy, -      coef = 1.0 -   }; -from_id (20) -> -   #weapon -   { -      id = 20, -      name = <<"Crossbow (Blunt)">>, -      range_type = ranged, -      range_mod = short, -      damage_type = blunt, -      damage_mod = heavy, -      coef = 1.0 -   }; -from_id (21) -> -   #weapon -   { -      id = 21, -      name = <<"Crossbow (Bodkin Point)">>, -      range_type = ranged, -      range_mod = short, -      damage_type = pierce, -      damage_mod = heavy, -      coef = 1.0 -   }; -from_id (22) -> -   #weapon -   { -      id = 22, -      name = <<"Arbalest (Broadhead)">>, -      range_type = ranged, -      range_mod = long, -      damage_type = slash, -      damage_mod = heavy, -      coef = 1.0 -   }; -from_id (23) -> -   #weapon -   { -      id = 23, -      name = <<"Arbalest (Blunt)">>, -      range_type = ranged, -      range_mod = long, -      damage_type = blunt, -      damage_mod = heavy, -      coef = 1.0 -   }; -from_id (24) -> -   #weapon -   { -      id = 24, -      name = <<"Arbalest (Bodkin Point)">>, -      range_type = ranged, -      range_mod = long, -      damage_type = pierce, -      damage_mod = heavy, -      coef = 1.0 -   }; -from_id (_) -> -   from_id(0). - - --spec random_id () -> id(). -random_id () -> shr_roll:between(0, 24). - --spec apply_to_attributes -   ( -      type(), -      shr_attributes:type() -   ) -   -> shr_attributes:type(). -apply_to_attributes (Weapon, Attributes) -> -   Dexterity = shr_attributes:get_dexterity(Attributes), -   Speed = shr_attributes:get_speed(Attributes), -   RangeModifier = Weapon#weapon.range_mod, -   DamageModifier = Weapon#weapon.damage_mod, - -   Impact = (20.0 * Weapon#weapon.coef), -   FullImpact = shr_math_util:ceil(Impact), -   QuarterImpact = shr_math_util:ceil(Impact / 4.0), - -   ResultingDexterity = -      case RangeModifier of -         long -> (Dexterity - FullImpact); -         short -> (Dexterity - QuarterImpact) -      end, -   ResultingSpeed = -      case DamageModifier of -         heavy -> (Speed - FullImpact); -         light -> (Speed - QuarterImpact) -      end, - -   S0Attributes = shr_attributes:set_unsafe_speed(ResultingSpeed, Attributes), -   S1Attributes = -      shr_attributes:set_unsafe_dexterity(ResultingDexterity, S0Attributes), - -   S1Attributes. diff --git a/src/shared/struct/shr_weapon.erl.m4 b/src/shared/struct/shr_weapon.erl.m4 index d22adfb..251c308 100644 --- a/src/shared/struct/shr_weapon.erl.m4 +++ b/src/shared/struct/shr_weapon.erl.m4 @@ -3,7 +3,7 @@  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --opaque id() :: non_neg_integer(). +-type id() :: non_neg_integer().  -type range_type() :: 'ranged' | 'melee'.  -type range_modifier() :: 'long' | 'short'. | 


