items: Initial weapons handling. Added 3 swords with various differences.
This commit is contained in:
parent
2cf0989621
commit
3c90c8e4bc
@ -17,16 +17,46 @@
|
|||||||
%% You should have received a copy of the GNU Affero General Public License
|
%% You should have received a copy of the GNU Affero General Public License
|
||||||
%% along with EGS. If not, see <http://www.gnu.org/licenses/>.
|
%% along with EGS. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
-record(psu_element, {type, percent}).
|
||||||
|
-record(psu_pa, {type, level}).
|
||||||
|
|
||||||
-record(psu_item, {name, description, rarity, buy_price, sell_price, data}).
|
-record(psu_item, {name, description, rarity, buy_price, sell_price, data}).
|
||||||
-record(psu_clothing_item, {appearance, type, manufacturer, overlap, gender, colors}).
|
-record(psu_clothing_item, {appearance, type, manufacturer, overlap, gender, colors}).
|
||||||
-record(psu_consumable_item, {max_quantity, pt_diff, status_effect, target, use_condition, item_effect}).
|
-record(psu_consumable_item, {max_quantity, pt_diff, status_effect, target, use_condition, item_effect}).
|
||||||
-record(psu_parts_item, {appearance, type, manufacturer, overlap, gender}).
|
-record(psu_parts_item, {appearance, type, manufacturer, overlap, gender}).
|
||||||
-record(psu_special_item, {}).
|
-record(psu_special_item, {}).
|
||||||
|
-record(psu_striking_weapon_item, {pp, atp, ata, atp_req, shop_element, hand, max_upgrades, attack_label,
|
||||||
|
attack_sound, hitbox_a, hitbox_b, hitbox_c, hitbox_d, nb_targets, effect, model}).
|
||||||
-record(psu_trap_item, {max_quantity}).
|
-record(psu_trap_item, {max_quantity}).
|
||||||
|
|
||||||
|
-record(psu_special_item_variables, {}).
|
||||||
|
-record(psu_striking_weapon_item_variables, {is_active, slot, current_pp, max_pp, element, pa}).
|
||||||
|
|
||||||
%% Items.
|
%% Items.
|
||||||
|
|
||||||
-define(ITEMS, [
|
-define(ITEMS, [
|
||||||
|
%% Swords.
|
||||||
|
%% @todo Do the shop for these.
|
||||||
|
|
||||||
|
{16#01010900, #psu_item{name="Huge Cutter",
|
||||||
|
description="",
|
||||||
|
rarity=15, buy_price=10, sell_price=1, data=#psu_striking_weapon_item{
|
||||||
|
pp=100, atp=200, ata=300, atp_req=1, shop_element=#psu_element{type=0, percent=0}, hand=both, max_upgrades=50, attack_label=0,
|
||||||
|
attack_sound={default, 1961}, hitbox_a=16#9f01, hitbox_b=16#76fd, hitbox_c=16#3f29, hitbox_d=16#2222, nb_targets=5, effect=0, model=9
|
||||||
|
}}},
|
||||||
|
{16#01010a00, #psu_item{name="Kan Yu",
|
||||||
|
description="",
|
||||||
|
rarity=15, buy_price=10, sell_price=1, data=#psu_striking_weapon_item{
|
||||||
|
pp=100, atp=200, ata=300, atp_req=1, shop_element=#psu_element{type=0, percent=0}, hand=both, max_upgrades=50, attack_label=0,
|
||||||
|
attack_sound={default, 1961}, hitbox_a=16#9f01, hitbox_b=16#76fd, hitbox_c=16#3f29, hitbox_d=16#2222, nb_targets=5, effect=1, model=10
|
||||||
|
}}},
|
||||||
|
{16#01010b00, #psu_item{name="De Ragan Slayer",
|
||||||
|
description="",
|
||||||
|
rarity=15, buy_price=10, sell_price=1, data=#psu_striking_weapon_item{
|
||||||
|
pp=100, atp=200, ata=300, atp_req=1, shop_element=#psu_element{type=0, percent=0}, hand=both, max_upgrades=50, attack_label=0,
|
||||||
|
attack_sound={custom, 0}, hitbox_a=16#9f01, hitbox_b=16#76fd, hitbox_c=16#3f29, hitbox_d=16#2222, nb_targets=133, effect=0, model=11
|
||||||
|
}}},
|
||||||
|
|
||||||
%% Consumables.
|
%% Consumables.
|
||||||
%% item_effect: 0x20: give points! fixed pt_diff
|
%% item_effect: 0x20: give points! fixed pt_diff
|
||||||
%% 0x22: give SE! ignore pt_diff
|
%% 0x22: give SE! ignore pt_diff
|
||||||
|
@ -111,8 +111,9 @@
|
|||||||
playtime=0,
|
playtime=0,
|
||||||
appearance,
|
appearance,
|
||||||
onlinestatus=0,
|
onlinestatus=0,
|
||||||
options={options, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0}
|
options={options, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0},
|
||||||
}). % also: shortcuts partnercards blacklist npcs flags items...
|
inventory
|
||||||
|
}). % also: shortcuts partnercards blacklist npcs flags...
|
||||||
|
|
||||||
%% @doc Table containing all mission objects.
|
%% @doc Table containing all mission objects.
|
||||||
|
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -193,7 +193,11 @@ char_select_load(Number) ->
|
|||||||
Class = psu_characters:class_binary_to_atom(ClassBin),
|
Class = psu_characters:class_binary_to_atom(ClassBin),
|
||||||
Appearance = psu_appearance:binary_to_tuple(Race, AppearanceBin),
|
Appearance = psu_appearance:binary_to_tuple(Race, AppearanceBin),
|
||||||
Options = psu_characters:options_binary_to_tuple(OptionsBin),
|
Options = psu_characters:options_binary_to_tuple(OptionsBin),
|
||||||
Character = #characters{slot=Number, name=Name, race=Race, gender=Gender, class=Class, appearance=Appearance, options=Options}, % TODO: temporary set the slot here, won't be needed later
|
Character = #characters{slot=Number, name=Name, race=Race, gender=Gender, class=Class, appearance=Appearance, options=Options, % TODO: temporary set the slot here, won't be needed later
|
||||||
|
inventory= [{16#11010000, #psu_special_item_variables{}}, {16#11020000, #psu_special_item_variables{}}, {16#11020100, #psu_special_item_variables{}}, {16#11020200, #psu_special_item_variables{}},
|
||||||
|
{16#01010900, #psu_striking_weapon_item_variables{is_active=0, slot=0, current_pp=99, max_pp=100, element=#psu_element{type=1, percent=50}, pa=#psu_pa{type=0, level=0}}},
|
||||||
|
{16#01010a00, #psu_striking_weapon_item_variables{is_active=0, slot=0, current_pp=99, max_pp=100, element=#psu_element{type=2, percent=50}, pa=#psu_pa{type=0, level=0}}},
|
||||||
|
{16#01010b00, #psu_striking_weapon_item_variables{is_active=0, slot=0, current_pp=99, max_pp=100, element=#psu_element{type=3, percent=50}, pa=#psu_pa{type=0, level=0}}}]},
|
||||||
User = OldUser#egs_user_model{state=online, character=Character, area=#psu_area{questid=undefined, zoneid=undefined, mapid=undefined},
|
User = OldUser#egs_user_model{state=online, character=Character, area=#psu_area{questid=undefined, zoneid=undefined, mapid=undefined},
|
||||||
prev_area={psu_area, 0, 0, 0}, prev_entryid=0, pos=#pos{x=0.0, y=0.0, z=0.0, dir=0.0}, setid=0},
|
prev_area={psu_area, 0, 0, 0}, prev_entryid=0, pos=#pos{x=0.0, y=0.0, z=0.0, dir=0.0}, setid=0},
|
||||||
egs_user_model:write(User),
|
egs_user_model:write(User),
|
||||||
@ -218,7 +222,7 @@ data_load(Folder, Number) ->
|
|||||||
char_load(User) ->
|
char_load(User) ->
|
||||||
send_0d01(User),
|
send_0d01(User),
|
||||||
% 0246
|
% 0246
|
||||||
send_0a0a(),
|
send_0a0a((User#egs_user_model.character)#characters.inventory),
|
||||||
send_1006(5, 0),
|
send_1006(5, 0),
|
||||||
send_1005((User#egs_user_model.character)#characters.name),
|
send_1005((User#egs_user_model.character)#characters.name),
|
||||||
send_1006(12, 0),
|
send_1006(12, 0),
|
||||||
@ -701,39 +705,33 @@ event({item_description_request, ItemID}) ->
|
|||||||
%% @todo Apparently B is always ItemID+1. Not sure why.
|
%% @todo Apparently B is always ItemID+1. Not sure why.
|
||||||
%% @todo Currently use a separate file for the data sent for the weapons.
|
%% @todo Currently use a separate file for the data sent for the weapons.
|
||||||
%% @todo TargetGID and TargetLID must be validated, they're either the player's or his NPC characters.
|
%% @todo TargetGID and TargetLID must be validated, they're either the player's or his NPC characters.
|
||||||
|
%% @todo Handle NPC characters properly.
|
||||||
event({item_equip, ItemIndex, TargetGID, TargetLID, A, B}) ->
|
event({item_equip, ItemIndex, TargetGID, TargetLID, A, B}) ->
|
||||||
GID = get(gid),
|
GID = get(gid),
|
||||||
Category = case ItemIndex of
|
{ok, User} = egs_user_model:read(GID),
|
||||||
% units would be 8, traps would be 12
|
Inventory = (User#egs_user_model.character)#characters.inventory,
|
||||||
19 -> 2; % armor
|
case lists:nth(ItemIndex + 1, Inventory) of
|
||||||
Y when Y =:= 5; Y =:= 6; Y =:= 7 -> 0; % clothes
|
{ItemID, Variables} when element(1, Variables) =:= psu_special_item_variables ->
|
||||||
_ -> 1 % weapons
|
<< Category:8, _:24 >> = << ItemID:32 >>,
|
||||||
end,
|
send(<< 16#01050300:32, 0:64, TargetGID:32/little, 0:64, 16#00011300:32, GID:32/little, 0:64,
|
||||||
Filename = case ItemIndex of
|
TargetGID:32/little, TargetLID:32/little, ItemIndex:8, 1:8, Category:8, A:8, B:32/little >>);
|
||||||
% weapons
|
{ItemID, Variables} when element(1, Variables) =:= psu_striking_weapon_item_variables ->
|
||||||
16 -> "p/packet0105_sword.bin";
|
ItemInfo = proplists:get_value(ItemID, ?ITEMS),
|
||||||
13 -> "p/packet0105_twindaggers.bin";
|
#psu_item{data=Constants} = ItemInfo,
|
||||||
15 -> "p/packet0105_dagger.bin";
|
#psu_striking_weapon_item{attack_sound=Sound, hitbox_a=HitboxA, hitbox_b=HitboxB,
|
||||||
9 -> "p/packet0105_rcsm.bin";
|
hitbox_c=HitboxC, hitbox_d=HitboxD, nb_targets=NbTargets, effect=Effect, model=Model} = Constants,
|
||||||
14 -> "p/packet0105_saber.bin";
|
<< Category:8, _:24 >> = << ItemID:32 >>,
|
||||||
8 -> "p/packet0105_mgun.bin";
|
{SoundInt, SoundType} = case Sound of
|
||||||
X when X =:= 17; X =:= 18 ->
|
{default, Val} -> {Val, 0};
|
||||||
"p/packet0105_twinguns.bin";
|
{custom, Val} -> {Val, 8}
|
||||||
% armor
|
end,
|
||||||
19 -> "p/packet0105_armor.bin";
|
send(<< 16#01050300:32, 0:64, TargetGID:32/little, 0:64, 16#00011300:32, GID:32/little, 0:64,
|
||||||
% clothes
|
TargetGID:32/little, TargetLID:32/little, ItemIndex:8, 1:8, Category:8, A:8, B:32/little,
|
||||||
X when X =:= 5; X =:= 6; X =:= 7 ->
|
SoundInt:32/little, HitboxA:16, HitboxB:16, HitboxC:16, HitboxD:16, SoundType:4, NbTargets:4, 0:8, Effect:8, Model:8 >>);
|
||||||
none;
|
undefined ->
|
||||||
_ -> % default, for lou
|
%% @todo Shouldn't be needed later when NPCs are handled correctly.
|
||||||
"p/packet0105_twindaggers.bin"
|
ignore
|
||||||
end,
|
end;
|
||||||
case Filename of
|
|
||||||
none -> File = << >>;
|
|
||||||
_ -> {ok, File} = file:read_file(Filename)
|
|
||||||
end,
|
|
||||||
send(<< 16#01050300:32, 0:64, TargetGID:32/little-unsigned-integer, 0:64, 16#00011300:32, GID:32/little-unsigned-integer,
|
|
||||||
0:64, TargetGID:32/little-unsigned-integer, TargetLID:32/little-unsigned-integer, ItemIndex, 1, Category, A, B:32/little-unsigned-integer,
|
|
||||||
File/binary >>);
|
|
||||||
|
|
||||||
%% @todo A and B are unknown.
|
%% @todo A and B are unknown.
|
||||||
%% @see item_equip
|
%% @see item_equip
|
||||||
@ -1180,7 +1178,7 @@ build_010a_list([ItemID|Tail], Acc) ->
|
|||||||
UCS2Name = << << X:8, 0:8 >> || X <- Name >>,
|
UCS2Name = << << X:8, 0:8 >> || X <- Name >>,
|
||||||
NamePadding = 8 * (46 - byte_size(UCS2Name)),
|
NamePadding = 8 * (46 - byte_size(UCS2Name)),
|
||||||
RarityBin = Rarity - 1,
|
RarityBin = Rarity - 1,
|
||||||
DataBin = build_010a_item(Data),
|
DataBin = build_item_constants(Data),
|
||||||
BinItemID = case element(1, Data) of
|
BinItemID = case element(1, Data) of
|
||||||
psu_clothing_item -> %% Change the ItemID to enable all colors.
|
psu_clothing_item -> %% Change the ItemID to enable all colors.
|
||||||
<< A:8, _:4, B:12, _:8 >> = << ItemID:32 >>,
|
<< A:8, _:4, B:12, _:8 >> = << ItemID:32 >>,
|
||||||
@ -1191,18 +1189,6 @@ build_010a_list([ItemID|Tail], Acc) ->
|
|||||||
Bin = << UCS2Name/binary, 0:NamePadding, RarityBin:8, 0:8, BinItemID/binary, SellPrice:32/little, DataBin/binary >>,
|
Bin = << UCS2Name/binary, 0:NamePadding, RarityBin:8, 0:8, BinItemID/binary, SellPrice:32/little, DataBin/binary >>,
|
||||||
build_010a_list(Tail, [Bin|Acc]).
|
build_010a_list(Tail, [Bin|Acc]).
|
||||||
|
|
||||||
build_010a_item(#psu_clothing_item{appearance=Appearance, manufacturer=Manufacturer, type=Type, overlap=Overlap, gender=Gender, colors=Colors}) ->
|
|
||||||
GenderInt = case Gender of male -> 16#1b; female -> 16#2b end,
|
|
||||||
<< Appearance:16, Type:4, Manufacturer:4, Overlap:8, GenderInt:8, Colors/binary, 0:40 >>;
|
|
||||||
build_010a_item(#psu_consumable_item{max_quantity=MaxQuantity, pt_diff=PointsDiff,
|
|
||||||
status_effect=StatusEffect, target=Target, use_condition=UseCondition, item_effect=ItemEffect}) ->
|
|
||||||
<< 0:8, MaxQuantity:8, Target:8, UseCondition:8, PointsDiff:16/little, StatusEffect:8, ItemEffect:8, 0:96 >>;
|
|
||||||
build_010a_item(#psu_parts_item{appearance=Appearance, manufacturer=Manufacturer, type=Type, overlap=Overlap, gender=Gender}) ->
|
|
||||||
GenderInt = case Gender of male -> 16#14; female -> 16#24 end,
|
|
||||||
<< Appearance:16, Type:4, Manufacturer:4, Overlap:8, GenderInt:8, 0:120 >>;
|
|
||||||
build_010a_item(#psu_trap_item{max_quantity=MaxQuantity}) ->
|
|
||||||
<< 2:32/little, 16#ffffff:24, MaxQuantity:8, 0:96 >>.
|
|
||||||
|
|
||||||
%% @doc Trigger a character-related event.
|
%% @doc Trigger a character-related event.
|
||||||
send_0111(A, B) ->
|
send_0111(A, B) ->
|
||||||
GID = get(gid),
|
GID = get(gid),
|
||||||
@ -1377,10 +1363,9 @@ send_0a06() ->
|
|||||||
send(<< A/binary, GID:32/little-unsigned-integer, B/binary, GID:32/little-unsigned-integer, C/binary, GID:32/little-unsigned-integer, D/binary >>).
|
send(<< A/binary, GID:32/little-unsigned-integer, B/binary, GID:32/little-unsigned-integer, C/binary, GID:32/little-unsigned-integer, D/binary >>).
|
||||||
|
|
||||||
%% @todo Handle more than just goggles.
|
%% @todo Handle more than just goggles.
|
||||||
send_0a0a() ->
|
send_0a0a(Inventory) ->
|
||||||
{ok, << _:68608/bits, Rest/bits >>} = file:read_file("p/packet0a0a.bin"),
|
{ok, << _:68608/bits, Rest/bits >>} = file:read_file("p/packet0a0a.bin"),
|
||||||
GID = get(gid),
|
GID = get(gid),
|
||||||
Inventory = [{16#11010000, todo}, {16#11020000, todo}, {16#11020100, todo}, {16#11020200, todo}],
|
|
||||||
NbItems = length(Inventory),
|
NbItems = length(Inventory),
|
||||||
ItemVariables = build_0a0a_item_variables(Inventory, []),
|
ItemVariables = build_0a0a_item_variables(Inventory, []),
|
||||||
ItemConstants = build_0a0a_item_constants(Inventory, []),
|
ItemConstants = build_0a0a_item_constants(Inventory, []),
|
||||||
@ -1390,7 +1375,24 @@ build_0a0a_item_variables([], Acc) ->
|
|||||||
Bin = iolist_to_binary(lists:reverse(Acc)),
|
Bin = iolist_to_binary(lists:reverse(Acc)),
|
||||||
Padding = 17280 - 8 * byte_size(Bin),
|
Padding = 17280 - 8 * byte_size(Bin),
|
||||||
<< Bin/binary, 0:Padding >>;
|
<< Bin/binary, 0:Padding >>;
|
||||||
build_0a0a_item_variables([{ItemID, _Variables}|Tail], Acc) ->
|
%% @todo Handle rank, rarity and hands properly.
|
||||||
|
build_0a0a_item_variables([{ItemID, Variables}|Tail], Acc) when element(1, Variables) =:= psu_striking_weapon_item_variables ->
|
||||||
|
#psu_striking_weapon_item_variables{is_active=IsActive, slot=Slot, current_pp=CurrentPP, max_pp=MaxPP,
|
||||||
|
element=#psu_element{type=EleType, percent=ElePercent}, pa=#psu_pa{type=PAType, level=PALevel}} = Variables,
|
||||||
|
ItemIndex = 0,
|
||||||
|
Rank = 4,
|
||||||
|
Grind = 0,
|
||||||
|
Rarity = 14, %% Rarity - 1
|
||||||
|
Hand = both,
|
||||||
|
<< _:8, WeaponType:8, _:16 >> = << ItemID:32 >>,
|
||||||
|
HandBin = case Hand of
|
||||||
|
both -> << 16#0000:16 >>;
|
||||||
|
_ -> error
|
||||||
|
end,
|
||||||
|
Bin = << IsActive:8, Slot:8, 0:16, ItemIndex:32/little, ItemID:32, 0:32, CurrentPP:16/little, MaxPP:16/little, 0:16, %% @todo What's this 0:16?
|
||||||
|
Grind:4, Rank:4, Rarity:8, EleType:8, ElePercent:8, HandBin/binary, WeaponType:8, PAType:8, PALevel:8, 0:40 >>,
|
||||||
|
build_0a0a_item_variables(Tail, [Bin|Acc]);
|
||||||
|
build_0a0a_item_variables([{ItemID, #psu_special_item_variables{}}|Tail], Acc) ->
|
||||||
ItemIndex = 0,
|
ItemIndex = 0,
|
||||||
Action = case ItemID of
|
Action = case ItemID of
|
||||||
16#11010000 -> << 16#12020100:32 >>;
|
16#11010000 -> << 16#12020100:32 >>;
|
||||||
@ -1406,15 +1408,37 @@ build_0a0a_item_constants([], Acc) ->
|
|||||||
Padding = 34560 - 8 * byte_size(Bin),
|
Padding = 34560 - 8 * byte_size(Bin),
|
||||||
<< Bin/binary, 0:Padding >>;
|
<< Bin/binary, 0:Padding >>;
|
||||||
build_0a0a_item_constants([{ItemID, _Variables}|Tail], Acc) ->
|
build_0a0a_item_constants([{ItemID, _Variables}|Tail], Acc) ->
|
||||||
#psu_item{name=Name, sell_price=SellPrice, data=Data} = proplists:get_value(ItemID, ?ITEMS),
|
#psu_item{name=Name, rarity=Rarity, sell_price=SellPrice, data=Data} = proplists:get_value(ItemID, ?ITEMS),
|
||||||
UCS2Name = << << X:8, 0:8 >> || X <- Name >>,
|
UCS2Name = << << X:8, 0:8 >> || X <- Name >>,
|
||||||
NamePadding = 8 * (46 - byte_size(UCS2Name)),
|
NamePadding = 8 * (46 - byte_size(UCS2Name)),
|
||||||
<< Category:8, _:24 >> = << ItemID:32 >>,
|
<< Category:8, _:24 >> = << ItemID:32 >>,
|
||||||
DataBin = build_0a0a_item_constants_data(Data),
|
DataBin = build_item_constants(Data),
|
||||||
Bin = << UCS2Name/binary, 0:NamePadding, 0:8, Category:8, SellPrice:32/little, DataBin/binary >>,
|
RarityInt = Rarity - 1,
|
||||||
|
Bin = << UCS2Name/binary, 0:NamePadding, RarityInt:8, Category:8, SellPrice:32/little, DataBin/binary >>,
|
||||||
build_0a0a_item_constants(Tail, [Bin|Acc]).
|
build_0a0a_item_constants(Tail, [Bin|Acc]).
|
||||||
|
|
||||||
build_0a0a_item_constants_data(#psu_special_item{}) ->
|
build_item_constants(#psu_clothing_item{appearance=Appearance, manufacturer=Manufacturer, type=Type, overlap=Overlap, gender=Gender, colors=Colors}) ->
|
||||||
|
GenderInt = case Gender of male -> 16#1b; female -> 16#2b end,
|
||||||
|
<< Appearance:16, Type:4, Manufacturer:4, Overlap:8, GenderInt:8, Colors/binary, 0:40 >>;
|
||||||
|
build_item_constants(#psu_consumable_item{max_quantity=MaxQuantity, pt_diff=PointsDiff,
|
||||||
|
status_effect=StatusEffect, target=Target, use_condition=UseCondition, item_effect=ItemEffect}) ->
|
||||||
|
<< 0:8, MaxQuantity:8, Target:8, UseCondition:8, PointsDiff:16/little, StatusEffect:8, ItemEffect:8, 0:96 >>;
|
||||||
|
build_item_constants(#psu_parts_item{appearance=Appearance, manufacturer=Manufacturer, type=Type, overlap=Overlap, gender=Gender}) ->
|
||||||
|
GenderInt = case Gender of male -> 16#14; female -> 16#24 end,
|
||||||
|
<< Appearance:16, Type:4, Manufacturer:4, Overlap:8, GenderInt:8, 0:120 >>;
|
||||||
|
%% @todo Handle rank properly.
|
||||||
|
build_item_constants(#psu_striking_weapon_item{pp=PP, atp=ATP, ata=ATA, atp_req=Req, shop_element=#psu_element{type=EleType, percent=ElePercent},
|
||||||
|
hand=Hand, max_upgrades=MaxUpgrades, attack_label=AttackLabel}) ->
|
||||||
|
Rank = 4,
|
||||||
|
HandInt = case Hand of
|
||||||
|
both -> 0;
|
||||||
|
_ -> error
|
||||||
|
end,
|
||||||
|
<< PP:16/little, ATP:16/little, ATA:16/little, Req:16/little, 16#ffffff:24,
|
||||||
|
EleType:8, ElePercent:8, HandInt:8, 0:8, Rank:8, 0:8, MaxUpgrades:8, AttackLabel:8, 0:8 >>;
|
||||||
|
build_item_constants(#psu_trap_item{max_quantity=MaxQuantity}) ->
|
||||||
|
<< 2:32/little, 16#ffffff:24, MaxQuantity:8, 0:96 >>;
|
||||||
|
build_item_constants(#psu_special_item{}) ->
|
||||||
<< 0:160 >>.
|
<< 0:160 >>.
|
||||||
|
|
||||||
%% @doc Item description.
|
%% @doc Item description.
|
||||||
|
Loading…
Reference in New Issue
Block a user