Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@
**/*.rs.bk

.vscode
.idea/
89 changes: 56 additions & 33 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ use bevy::{
prelude::{
apply_deferred, in_state, AddAsset, App, AssetServer, Assets, Camera, Camera3dBundle,
Color, Commands, IntoSystemConfigs, IntoSystemSetConfigs, Msaa, OnEnter, OnExit,
PluginGroup, PostStartup, PostUpdate, PreUpdate, Quat, Res, ResMut, Resource, Startup,
State, SystemSet, Transform, Update, Vec3,
OnTransition, PluginGroup, PostStartup, PostUpdate, PreUpdate, Quat, Res, ResMut, Resource,
Startup, State, SystemSet, Transform, Update, Vec3,
},
render::{render_resource::WgpuFeatures, settings::WgpuSettings},
transform::TransformSystem,
Expand Down Expand Up @@ -64,10 +64,10 @@ use model_loader::ModelLoader;
use render::{DamageDigitMaterial, RoseRenderPlugin};
use resources::{
load_ui_resources, run_network_thread, ui_requested_cursor_apply_system, update_ui_resources,
AppState, ClientEntityList, DamageDigitsSpawner, DebugRenderConfig, GameData, HotkeysConfig,
InterfaceConfig, NameTagCache, NetworkThread, NetworkThreadMessage, RenderConfiguration,
SelectedTarget, ServerConfiguration, SoundCache, SoundConfig, SpecularTexture, VfsResource,
WorldTime, ZoneTime,
AppState, AutoLogin, ClientEntityList, DamageDigitsSpawner, DebugRenderConfig, GameData,
HotkeysConfig, InterfaceConfig, NameTagCache, NetworkThread, NetworkThreadMessage,
RenderConfiguration, SelectedTarget, ServerConfiguration, SoundCache, SoundConfig,
SpecularTexture, VfsResource, WorldTime, ZoneTime,
};
use scripting::RoseScriptingPlugin;
use systems::{
Expand All @@ -81,20 +81,20 @@ use systems::{
debug_render_collider_system, debug_render_directional_light_system,
debug_render_skeleton_system, directional_light_system, effect_system, facing_direction_system,
free_camera_system, game_connection_system, game_mouse_input_system, game_state_enter_system,
game_zone_change_system, hit_event_system, item_drop_model_add_collider_system,
item_drop_model_system, login_connection_system, login_event_system, login_state_enter_system,
login_state_exit_system, login_system, model_viewer_enter_system, model_viewer_exit_system,
model_viewer_system, move_destination_effect_system, name_tag_system,
name_tag_update_color_system, name_tag_update_healthbar_system, name_tag_visibility_system,
network_thread_system, npc_idle_sound_system, npc_model_add_collider_system,
npc_model_update_system, orbit_camera_system, particle_sequence_system,
passive_recovery_system, pending_damage_system, pending_skill_effect_system,
personal_store_model_add_collider_system, personal_store_model_system, player_command_system,
projectile_system, quest_trigger_system, sound_trigger_system, spawn_effect_system,
spawn_projectile_system, status_effect_system, system_func_event_system,
update_position_system, use_item_event_system, vehicle_model_system, vehicle_sound_system,
visible_status_effects_system, world_connection_system, world_time_system, zone_time_system,
zone_viewer_enter_system, DebugInspectorPlugin,
game_state_exit_system, game_zone_change_system, hit_event_system,
item_drop_model_add_collider_system, item_drop_model_system, login_connection_system,
login_event_system, login_state_enter_system, login_state_exit_system, login_system,
model_viewer_enter_system, model_viewer_exit_system, model_viewer_system,
move_destination_effect_system, name_tag_system, name_tag_update_color_system,
name_tag_update_healthbar_system, name_tag_visibility_system, network_thread_system,
npc_idle_sound_system, npc_model_add_collider_system, npc_model_update_system,
orbit_camera_system, particle_sequence_system, passive_recovery_system, pending_damage_system,
pending_skill_effect_system, personal_store_model_add_collider_system,
personal_store_model_system, player_command_system, projectile_system, quest_trigger_system,
sound_trigger_system, spawn_effect_system, spawn_projectile_system, status_effect_system,
system_func_event_system, update_position_system, use_item_event_system, vehicle_model_system,
vehicle_sound_system, visible_status_effects_system, world_connection_system,
world_time_system, zone_time_system, zone_viewer_enter_system, DebugInspectorPlugin,
};
use ui::{
init_window_system, load_dialog_sprites_system, ui_bank_system, ui_character_create_system,
Expand All @@ -105,14 +105,14 @@ use ui::{
ui_debug_entity_inspector_system, ui_debug_item_list_system, ui_debug_menu_system,
ui_debug_npc_list_system, ui_debug_physics_system, ui_debug_render_system,
ui_debug_skill_list_system, ui_debug_zone_lighting_system, ui_debug_zone_list_system,
ui_debug_zone_time_system, ui_drag_and_drop_system, ui_game_menu_system, ui_hotbar_system,
ui_inventory_system, ui_item_drop_name_system, ui_login_system, ui_message_box_system,
ui_minimap_system, ui_npc_store_system, ui_number_input_dialog_system, ui_party_option_system,
ui_party_system, ui_personal_store_system, ui_player_info_system, ui_quest_list_system,
ui_respawn_system, ui_selected_target_system, ui_server_select_system, ui_settings_system,
ui_skill_list_system, ui_skill_tree_system, ui_sound_event_system, ui_status_effects_system,
ui_window_sound_system, ui_window_system, widgets::Dialog, DialogLoader, UiSoundEvent,
UiStateDebugWindows, UiStateDragAndDrop, UiStateWindows,
ui_debug_zone_time_system, ui_drag_and_drop_system, ui_exit_system, ui_game_menu_system,
ui_hotbar_system, ui_inventory_system, ui_item_drop_name_system, ui_login_system,
ui_message_box_system, ui_minimap_system, ui_npc_store_system, ui_number_input_dialog_system,
ui_party_option_system, ui_party_system, ui_personal_store_system, ui_player_info_system,
ui_quest_list_system, ui_respawn_system, ui_selected_target_system, ui_server_select_system,
ui_settings_system, ui_skill_list_system, ui_skill_tree_system, ui_sound_event_system,
ui_status_effects_system, ui_window_sound_system, ui_window_system, widgets::Dialog,
DialogLoader, UiSoundEvent, UiStateDebugWindows, UiStateDragAndDrop, UiStateWindows,
};
use vfs_asset_io::VfsAssetIo;
use zms_asset_loader::{ZmsAssetLoader, ZmsMaterialNumFaces, ZmsNoSkinAssetLoader};
Expand Down Expand Up @@ -568,10 +568,6 @@ fn run_client(config: &Config, app_state: AppState, mut systems_config: SystemsC
port: format!("{}", config.server.port),
preset_username: Some(config.account.username.clone()),
preset_password: Some(config.account.password.clone()),
preset_server_id: config.auto_login.server_id,
preset_channel_id: config.auto_login.channel_id,
preset_character_name: config.auto_login.character_name.clone(),
auto_login: config.auto_login.enabled,
})
.insert_resource(config.clone())
.add_systems(Startup, init_window_system)
Expand All @@ -583,6 +579,16 @@ fn run_client(config: &Config, app_state: AppState, mut systems_config: SystemsC
DebugInspectorPlugin,
));

if config.auto_login.enabled {
app.insert_resource(AutoLogin {
preset_username: Some(config.account.username.clone()),
preset_password: Some(config.account.password.clone()),
preset_server_id: config.auto_login.server_id,
preset_channel_id: config.auto_login.channel_id,
preset_character_name: config.auto_login.character_name.clone(),
});
}

// Setup state
app.add_state::<AppState>()
.insert_resource(State::new(app_state));
Expand Down Expand Up @@ -627,6 +633,7 @@ fn run_client(config: &Config, app_state: AppState, mut systems_config: SystemsC
Update,
(free_camera_system, orbit_camera_system).in_set(GameSystemSets::UpdateCamera),
);

app.insert_resource(NameTagCache::default()).add_systems(
Update,
(
Expand Down Expand Up @@ -708,6 +715,7 @@ fn run_client(config: &Config, app_state: AppState, mut systems_config: SystemsC
(
ui_window_sound_system.before(ui_sound_event_system),
ui_sound_event_system,
ui_exit_system,
)
.after(UiSystemSets::UiLast),
);
Expand Down Expand Up @@ -856,7 +864,22 @@ fn run_client(config: &Config, app_state: AppState, mut systems_config: SystemsC
.init_resource::<ZoneTime>()
.init_resource::<SelectedTarget>();

app.add_systems(OnEnter(AppState::Game), game_state_enter_system);
app.add_systems(OnEnter(AppState::Game), game_state_enter_system)
// Don't run exit when transitioning from model or zone viewer
.add_systems(
OnTransition {
from: AppState::Game,
to: AppState::GameLogin,
},
game_state_exit_system,
)
.add_systems(
OnTransition {
from: AppState::Game,
to: AppState::GameCharacterSelect,
},
game_state_exit_system,
);

app.add_systems(
Update,
Expand Down
30 changes: 20 additions & 10 deletions src/protocol/irose/game_client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
use std::net::SocketAddr;
use tokio::net::TcpStream;

use crate::protocol::{ProtocolClient, ProtocolClientError};
use rose_data::{QuestTriggerHash, SkillId};
use rose_game_common::{
components::MoveMode,
Expand All @@ -23,14 +24,15 @@
PacketClientChangeVehiclePart, PacketClientChat, PacketClientClanCommand,
PacketClientConnectRequest, PacketClientCraftItem, PacketClientDropItemFromInventory,
PacketClientEmote, PacketClientIncreaseBasicStat, PacketClientJoinZone,
PacketClientLevelUpSkill, PacketClientMove, PacketClientMoveCollision,
PacketClientMoveToggle, PacketClientMoveToggleType, PacketClientNpcStoreTransaction,
PacketClientPartyReply, PacketClientPartyRequest, PacketClientPartyUpdateRules,
PacketClientPersonalStoreBuyItem, PacketClientPersonalStoreListItems,
PacketClientPickupItemDrop, PacketClientQuestRequest, PacketClientQuestRequestType,
PacketClientRepairItemUsingItem, PacketClientRepairItemUsingNpc, PacketClientReviveRequest,
PacketClientSetHotbarSlot, PacketClientSetReviveZone, PacketClientUseItem,
PacketClientWarpGateRequest,
PacketClientLevelUpSkill, PacketClientLogoutRequest, PacketClientMove,

Check failure on line 27 in src/protocol/irose/game_client.rs

View workflow job for this annotation

GitHub Actions / Build (ubuntu-latest)

unresolved imports `rose_network_irose::game_client_packets::PacketClientLogoutRequest`, `rose_network_irose::game_client_packets::PacketClientReturnToCharacterSelect`
PacketClientMoveCollision, PacketClientMoveToggle, PacketClientMoveToggleType,
PacketClientNpcStoreTransaction, PacketClientPartyReply, PacketClientPartyRequest,
PacketClientPartyUpdateRules, PacketClientPersonalStoreBuyItem,
PacketClientPersonalStoreListItems, PacketClientPickupItemDrop, PacketClientQuestRequest,
PacketClientQuestRequestType, PacketClientRepairItemUsingItem,
PacketClientRepairItemUsingNpc, PacketClientReturnToCharacterSelect,
PacketClientReviveRequest, PacketClientSetHotbarSlot, PacketClientSetReviveZone,
PacketClientUseItem, PacketClientWarpGateRequest,
},
game_server_packets::{
ConnectResult, PacketConnectionReply, PacketServerAdjustPosition, PacketServerAnnounceChat,
Expand Down Expand Up @@ -65,8 +67,6 @@
ClientPacketCodec, IROSE_112_TABLE,
};

use crate::protocol::{ProtocolClient, ProtocolClientError};

pub struct GameClient {
server_address: SocketAddr,
client_message_rx: tokio::sync::mpsc::UnboundedReceiver<ClientMessage>,
Expand Down Expand Up @@ -1580,6 +1580,16 @@
}))
.await?;
}
ClientMessage::ReturnToCharacterSelect => {
connection
.write_packet(Packet::from(&PacketClientReturnToCharacterSelect))
.await?;
}
ClientMessage::Logout => {
connection
.write_packet(Packet::from(&PacketClientLogoutRequest))
.await?;
}
unimplemented => {
log::info!("Unimplemented GameClient ClientMessage {:?}", unimplemented);
}
Expand Down
6 changes: 5 additions & 1 deletion src/protocol/irose/world_client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,11 @@ impl WorldClient {
};
self.server_message_tx.send(message).ok();
}
// ServerPackets::ReturnToCharacterSelect -> ServerMessage::ReturnToCharacterSelect
Some(ServerPackets::ReturnToCharacterSelect) => {
self.server_message_tx
.send(ServerMessage::ReturnToCharacterSelect)
.ok();
}
_ => log::info!("Unhandled WorldClient packet {:?}", packet),
}

Expand Down
3 changes: 3 additions & 0 deletions src/resources/hotkeys_config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ pub struct HotkeysConfig {
pub clan: KeyboardShortcut,
#[serde(with = "KeyboardShortcutDef")]
pub settings: KeyboardShortcut,
#[serde(with = "KeyboardShortcutDef")]
pub exit: KeyboardShortcut,

#[serde(with = "KeyboardShortcutDef")]
pub hotbar_1: KeyboardShortcut,
Expand Down Expand Up @@ -44,6 +46,7 @@ impl Default for HotkeysConfig {
quests: KeyboardShortcut::new(Modifiers::ALT, Key::Q),
clan: KeyboardShortcut::new(Modifiers::ALT, Key::N),
settings: KeyboardShortcut::new(Modifiers::ALT, Key::O),
exit: KeyboardShortcut::new(Modifiers::ALT, Key::X),

hotbar_1: KeyboardShortcut::new(Modifiers::NONE, Key::F1),
hotbar_2: KeyboardShortcut::new(Modifiers::NONE, Key::F2),
Expand Down
2 changes: 1 addition & 1 deletion src/resources/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ pub use name_tag_settings::NameTagSettings;
pub use network_thread::{run_network_thread, NetworkThread, NetworkThreadMessage};
pub use render_configuration::RenderConfiguration;
pub use selected_target::SelectedTarget;
pub use server_configuration::ServerConfiguration;
pub use server_configuration::{AutoLogin, ServerConfiguration};
pub use server_list::{ServerList, ServerListGameServer, ServerListWorldServer};
pub use sound_cache::SoundCache;
pub use sound_config::SoundConfig;
Expand Down
7 changes: 6 additions & 1 deletion src/resources/server_configuration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,13 @@ pub struct ServerConfiguration {
pub port: String,
pub preset_username: Option<String>,
pub preset_password: Option<String>,
}

#[derive(Resource)]
pub struct AutoLogin {
pub preset_username: Option<String>,
pub preset_password: Option<String>,
pub preset_server_id: Option<usize>,
pub preset_channel_id: Option<usize>,
pub preset_character_name: Option<String>,
pub auto_login: bool,
}
12 changes: 12 additions & 0 deletions src/resources/server_list.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,17 @@ pub struct ServerListWorldServer {

#[derive(Resource)]
pub struct ServerList {
pub selected_server: Option<usize>,
pub selected_channel: Option<usize>,
pub world_servers: Vec<ServerListWorldServer>,
}

impl From<Vec<ServerListWorldServer>> for ServerList {
fn from(value: Vec<ServerListWorldServer>) -> Self {
ServerList {
selected_server: None,
selected_channel: None,
world_servers: value,
}
}
}
2 changes: 2 additions & 0 deletions src/resources/ui_resources.rs
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ pub struct UiResources {
pub dialog_quest_list: Handle<Dialog>,
pub dialog_respawn: Handle<Dialog>,
pub dialog_select_server: Handle<Dialog>,
pub dialog_exit: Handle<Dialog>,
pub dialog_skill_list: Handle<Dialog>,
pub dialog_skill_tree: Handle<Dialog>,
pub skill_tree_dealer: Handle<Dialog>,
Expand Down Expand Up @@ -541,6 +542,7 @@ pub fn load_ui_resources(
dialog_quest_list: dialog_files["DLGQUEST.XML"].clone(),
dialog_respawn: dialog_files["DLGRESTART.XML"].clone(),
dialog_select_server: dialog_files["DLGSELSVR.XML"].clone(),
dialog_exit: dialog_files["DLGSYSTEM.XML"].clone(),
dialog_skill_list: dialog_files["DLGSKILL.XML"].clone(),
dialog_skill_tree: dialog_files["DLGSKILLTREE.XML"].clone(),
skill_tree_dealer: dialog_files["SKILLTREE_DEALER.XML"].clone(),
Expand Down
Loading
Loading