ryot 0.2.2

MMORPG library based on the concepts of open tibia written in rust and bevy.
Documentation
syntax = "proto2";

package appearances;

enum Action {
  ACTION_NONE = 0;
  ACTION_LOOK = 1;
  ACTION_USE = 2;
  ACTION_OPEN = 3;
  ACTION_AUTO_WALK = 4;
}

enum FrameType {
  FRAME_TYPE_OUTFIT_IDLE = 0;
  FRAME_TYPE_OUTFIT_MOVING = 1;
  FRAME_TYPE_OBJECT_INITIAL = 2;
}

enum HookType {
  HOOK_TYPE_SOUTH = 1;
  HOOK_TYPE_EAST = 2;
}

enum LoopType {
  LOOP_TYPE_PING_PONG = -1;
  LOOP_TYPE_INFINITE = 0;
  LOOP_TYPE_COUNTED = 1;
}

enum Profession {
  PROFESSION_ANY = -1;
  PROFESSION_NONE = 0;
  PROFESSION_KNIGHT = 1;
  PROFESSION_PALADIN = 2;
  PROFESSION_SORCERER = 3;
  PROFESSION_DRUID = 4;
  PROFESSION_PROMOTED = 10;
}

enum StoreCategory {
  STORE_CATEGORY_ARMORS = 1;
  STORE_CATEGORY_AMULETS = 2;
  STORE_CATEGORY_BOOTS = 3;
  STORE_CATEGORY_CONTAINERS = 4;
  STORE_CATEGORY_DECORATION = 5;
  STORE_CATEGORY_FOOD = 6;
  STORE_CATEGORY_HELMETS_HATS = 7;
  STORE_CATEGORY_LEGS = 8;
  STORE_CATEGORY_OTHERS = 9;
  STORE_CATEGORY_POTIONS = 10;
  STORE_CATEGORY_RINGS = 11;
  STORE_CATEGORY_RUNES = 12;
  STORE_CATEGORY_SHIELDS = 13;
  STORE_CATEGORY_TOOLS = 14;
  STORE_CATEGORY_VALUABLES = 15;
  STORE_CATEGORY_AMMUNITION = 16;
  STORE_CATEGORY_AXES = 17;
  STORE_CATEGORY_CLUBS = 18;
  STORE_CATEGORY_DISTANCE_WEAPONS = 19;
  STORE_CATEGORY_SWORDS = 20;
  STORE_CATEGORY_WANDS_RODS = 21;
  STORE_CATEGORY_PREMIUM_SCROLLS = 22;
  STORE_CATEGORY_TIBIA_COINS = 23;
  STORE_CATEGORY_CREATURE_PRODUCTS = 24;
  STORE_CATEGORY_QUIVER = 25;
}

message VisualElements {
  repeated VisualElement objects = 1;
  repeated VisualElement outfits = 2;
  repeated VisualElement effects = 3;
  repeated VisualElement missiles = 4;
  optional SpecialIds special_ids = 5;
}

message VisualElement {
  optional uint32 id = 1;
  repeated Frame frames = 2;
  optional Flags flags = 3;
  optional string name = 4;
  optional bytes description = 5;
}

message Frame {
  optional FrameType type = 1;
  optional uint32 id = 2;
  optional SpriteInfo sprite_info = 3;
}

message SpriteInfo {
  optional uint32 pattern_width = 1;
  optional uint32 pattern_height = 2;
  optional uint32 pattern_depth = 3;
  optional uint32 layers = 4;
  repeated uint32 sprite_ids = 5;
  optional uint32 bounding_square = 7;
  optional Animation animation = 6;
  optional bool is_opaque = 8;
  repeated Box bounding_box_per_direction = 9;
}

message Animation {
  optional uint32 start_phase = 1;
  optional bool synchronized = 2;
  optional bool is_start_random = 3;
  optional LoopType loop_type = 4;
  optional uint32 loop_count = 5;
  repeated Duration phases = 6;
}

message Duration {
  optional uint32 min = 1;
  optional uint32 max = 2;
}

message Box {
  optional uint32 x = 1;
  optional uint32 y = 2;
  optional uint32 width = 3;
  optional uint32 height = 4;
}

message Flags {
  optional Ground ground = 1;
  optional bool is_edge = 2;
  optional bool is_bottom = 3;
  optional bool is_top = 4;
  optional bool is_container = 5;
  optional bool is_cumulative = 6;
  optional bool is_usable = 7;
  optional bool can_force_use = 8;
  optional bool is_multi_use = 9;
  optional WriteInfo write_info = 10;
  optional WriteOnceInfo write_once_info = 11;
  optional bool is_liquid_pool = 12;
  optional bool is_not_walkable = 13;
  optional bool is_not_movable = 14;
  optional bool blocks_sight = 15;
  optional bool is_avoidable = 16;
  optional bool has_no_movement_animation = 17;
  optional bool can_be_taken = 18;
  optional bool is_liquid_container = 19;
  optional bool can_be_hanged = 20;
  optional HookInfo hook_info = 21;
  optional bool can_rotate = 22;
  optional Light light = 23;
  optional bool cannot_hide = 24;
  optional bool is_translucent = 25;
  optional Displacement displacement = 26;
  optional Elevation elevation = 27;
  optional bool lying_object = 28;
  optional bool should_always_animate = 29;
  optional Minimap minimap = 30;
  optional LensHelp lens_help = 31;
  optional bool is_ground = 32;
  optional bool should_ignore_look = 33;
  optional Slot slot = 34;
  optional DefaultAction default_action = 35;
  optional MarketInfo market_info = 36;
  optional bool wrap = 37;
  optional bool unwrap = 38;
  optional bool has_top_effect = 39;
  repeated NpcSalesInfo npc_sales_info = 40;
  optional ChangedToExpire changed_to_expire = 41;
  optional bool is_corpse = 42;
  optional bool is_player_corpse = 43;
  optional Cyclopedia cyclopedia = 44;
  optional bool is_ammo = 45;
  optional bool should_show_off_socket = 46;
  optional bool is_reportable = 47;
  optional UpgradeClassification upgrade_classification = 48;
  optional bool reverse_addons_east = 49;
  optional bool reverse_addons_west = 50;
  optional bool reverse_addons_south = 51;
  optional bool reverse_addons_north = 52;
  optional bool wears_out = 53;
  optional bool clock_expires = 54;
  optional bool expires = 55;
  optional bool expirestop = 56;
  optional bool is_decoration_kit = 57;
}

message Ground {
  optional uint32 speed = 1;
}

message WriteInfo {
  optional uint32 max_length = 1;
}

message WriteOnceInfo {
  optional uint32 max_length = 1;
}

message HookInfo {
  optional HookType south = 1;
  optional HookType east = 2;
}

message Light {
  optional uint32 brightness = 1;
  optional uint32 color = 2;
}

message Displacement {
  optional uint32 x = 1;
  optional uint32 y = 2;
}

message Elevation {
  optional uint32 height = 1;
}

message Minimap {
  optional uint32 color = 1;
}

message LensHelp {
  optional uint32 id = 1;
}

message Slot {
  optional uint32 id = 1;
}

message DefaultAction {
  optional Action action = 1;
}

message MarketInfo {
  optional StoreCategory category = 1;
  optional uint32 trade_as_object_id = 2;
  optional uint32 show_as_object_id = 3;
  optional string name = 4;
  repeated Profession restrict_to_profession = 5;
  optional uint32 minimum_level = 6;
}

message NpcSalesInfo {
  optional string name = 1;
  optional string location = 2;
  optional uint32 sale_price = 3;
  optional uint32 buy_price = 4;
  optional uint32 currency_id = 5;
  optional string currency_quest_flag_display_name = 6;
}

message ChangedToExpire {
  optional uint32 former_object_type_id = 1;
}

message Cyclopedia {
  optional uint32 id = 1;
}

message UpgradeClassification {
  optional uint32 value = 1;
}

message SpecialIds {
  optional uint32 gold_coin_id = 1;
  optional uint32 platinum_coin_id = 2;
  optional uint32 crystal_coin_id = 3;
  optional uint32 tibia_coin_id = 4;
  optional uint32 stamped_letter_id = 5;
  optional uint32 supply_stash_id = 6;
}