Skip to content

Instantly share code, notes, and snippets.

@benfalk
Created December 13, 2017 03:26
Show Gist options
  • Save benfalk/e4544a3e4fcfe1b1ea771a1d54d6e861 to your computer and use it in GitHub Desktop.
Save benfalk/e4544a3e4fcfe1b1ea771a1d54d6e861 to your computer and use it in GitHub Desktop.
defmodule EOD.Packet.Client.CharacterCrudRequest do
use EOD.Packet do
code 0xFF
structure Character do
blank using: 0x00, size: [bytes: 4]
field :name, :c_string, size: [bytes: 24]
field :custom_mode, :integer, size: [bytes: 1]
field :eye_size, :integer, size: [bytes: 1]
field :lip_size, :integer, size: [bytes: 1]
field :eye_color, :integer, size: [bytes: 1]
field :hair_color, :integer, size: [bytes: 1]
field :face_type, :integer, size: [bytes: 1]
field :hair_style, :integer, size: [bytes: 1]
blank using: 0x00, size: [bytes: 3]
field :mood_type, :integer, size: [bytes: 1]
blank using: 0x00, size: [bytes: 1]
enum :action, :integer, size: [bytes: 4], default: 0 do
0x00000000 -> :nothing
0x12345678 -> :delete
0x23456789 -> :create
0x3456789A -> :update
end
# Skipping unknown byte + location, class, and race names
blank using: 0x00, size: [bytes: 73]
field :level, :integer, size: [bytes: 1]
field :class, :integer, size: [bytes: 1]
field :realm, :integer, size: [bytes: 1]
compound :race_and_gender, :integer, size: [bytes: 1] do
field :race, default: 0
field :gender, default: 0
end
field :model, :little_int, size: [bytes: 2]
field :region, :integer, size: [bytes: 1]
blank using: 0x00, size: [bytes: 5]
field :strength, :integer, size: [bytes: 1]
field :dexterity, :integer, size: [bytes: 1]
field :constitution, :integer, size: [bytes: 1]
field :quickness, :integer, size: [bytes: 1]
field :intelligence, :integer, size: [bytes: 1]
field :piety, :integer, size: [bytes: 1]
field :empathy, :integer, size: [bytes: 1]
field :charisma, :integer, size: [bytes: 1]
# Skipping equipment and zone bytes
blank using: 0x00, size: [bytes: 44]
# race and gender are woven together in a single byte, this untangles
# them from each other and splices them back together
defp compound(:from_binary, :race_and_gender, int) do
<<_::1, first_race_bit::1, _::1, gender::1, race_last_four::4>> = <<int::8>>
<<race::8>> = <<0::3, first_race_bit::1, race_last_four::4>>
%{race: race, gender: gender}
end
defp compound(:to_binary, :race_and_gender, %{race: race, gender: gender}) do
<<0::3, first_race_bit::1, race_last_four::4>> = <<race::8>>
<<num::8>> = <<0::1, first_race_bit::1, 0::1, gender::1, race_last_four::4>>
num
end
end
field :username, :c_string, size: [bytes: 24]
array :characters, Character, size: 10
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment