This commit is contained in:
parent
70c89cd9ad
commit
e349a41b16
@ -3,6 +3,7 @@ use serde::{Serialize, Deserialize};
|
|||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
use crate::ship::room::Episode;
|
use crate::ship::room::Episode;
|
||||||
|
use std::fmt;
|
||||||
|
|
||||||
#[derive(Debug, Copy, Clone, PartialEq, Serialize, Deserialize)]
|
#[derive(Debug, Copy, Clone, PartialEq, Serialize, Deserialize)]
|
||||||
pub enum MapArea {
|
pub enum MapArea {
|
||||||
@ -256,6 +257,60 @@ impl MapArea {
|
|||||||
MapArea::SaintMillion => Episode::Four,
|
MapArea::SaintMillion => Episode::Four,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn as_string(&self) -> &str{
|
||||||
|
match self {
|
||||||
|
MapArea::Pioneer2Ep1 => "Pioneer 2",
|
||||||
|
MapArea::Forest1 => "Forest 1",
|
||||||
|
MapArea::Forest2 => "Forest 2",
|
||||||
|
MapArea::Caves1 => "Caves 1",
|
||||||
|
MapArea::Caves2 => "Caves 2",
|
||||||
|
MapArea::Caves3 => "Caves 3",
|
||||||
|
MapArea::Mines1 => "Mines 1",
|
||||||
|
MapArea::Mines2 => "Mines 2",
|
||||||
|
MapArea::Ruins1 => "Ruins 1",
|
||||||
|
MapArea::Ruins2 => "Ruins 2",
|
||||||
|
MapArea::Ruins3 => "Ruins 3",
|
||||||
|
MapArea::Dragon => "Dragon",
|
||||||
|
MapArea::DeRolLe => "De Rol Le",
|
||||||
|
MapArea::VolOpt => "Vol Opt",
|
||||||
|
MapArea::DarkFalz => "Dark Falz",
|
||||||
|
MapArea::Pioneer2Ep2 => "Pioneer 2",
|
||||||
|
MapArea::VrTempleAlpha => "Vr Temple Alpha",
|
||||||
|
MapArea::VrTempleBeta => "Vr Temple Beta",
|
||||||
|
MapArea::VrSpaceshipAlpha => "Vr Spaceship Alpha",
|
||||||
|
MapArea::VrSpaceshipBeta => "Vr Spaceship Beta",
|
||||||
|
MapArea::Cca => "CCA",
|
||||||
|
MapArea::JungleAreaNorth => "Jungle Area North",
|
||||||
|
MapArea::JungleAreaEast => "Jungle Area East",
|
||||||
|
MapArea::Mountain => "Mountain",
|
||||||
|
MapArea::Seaside => "Seaside",
|
||||||
|
MapArea::SeabedUpper => "Seabed Upper",
|
||||||
|
MapArea::SeabedLower => "Seabed Lower",
|
||||||
|
MapArea::GalGryphon => "Gal Gryphon",
|
||||||
|
MapArea::OlgaFlow => "Olga Flow",
|
||||||
|
MapArea::BarbaRay => "Barba Ray",
|
||||||
|
MapArea::GolDragon => "Gol Dragon",
|
||||||
|
MapArea::SeasideNight => "Seaside Night",
|
||||||
|
MapArea::Tower => "Tower",
|
||||||
|
MapArea::Pioneer2Ep4 => "Pioneer 2",
|
||||||
|
MapArea::CraterEast => "Crater East",
|
||||||
|
MapArea::CraterWest => "Crater West",
|
||||||
|
MapArea::CraterSouth => "Crater South",
|
||||||
|
MapArea::CraterNorth => "Crater North",
|
||||||
|
MapArea::CraterInterior => "Crater Interior",
|
||||||
|
MapArea::SubDesert1 => "Sub Desert 1",
|
||||||
|
MapArea::SubDesert2 => "Sub Desert 2",
|
||||||
|
MapArea::SubDesert3 => "Sub Desert 3",
|
||||||
|
MapArea::SaintMillion => "Saint Million",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl fmt::Display for MapArea {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
|
write!(f, "{}", self.as_string())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,11 +3,11 @@ use crate::common::serverstate::ClientId;
|
|||||||
use crate::common::leveltable::CharacterLevelTable;
|
use crate::common::leveltable::CharacterLevelTable;
|
||||||
use crate::ship::ship::{SendShipPacket, ShipError, Clients, Rooms};
|
use crate::ship::ship::{SendShipPacket, ShipError, Clients, Rooms};
|
||||||
use crate::ship::character::{FullCharacterBytesBuilder};
|
use crate::ship::character::{FullCharacterBytesBuilder};
|
||||||
use crate::ship::location::{ClientLocation, LobbyId, RoomLobby, ClientLocationError};
|
use crate::ship::location::{ClientLocation, LobbyId, RoomLobby, ClientLocationError, RoomId};
|
||||||
//use crate::ship::items::;
|
|
||||||
use crate::ship::packet;
|
use crate::ship::packet;
|
||||||
use crate::ship::items::ItemManager;
|
use crate::ship::items::ItemManager;
|
||||||
use crate::entity::gateway::EntityGateway;
|
use crate::entity::gateway::EntityGateway;
|
||||||
|
use crate::ship::map::MapArea;
|
||||||
|
|
||||||
// this function needs a better home
|
// this function needs a better home
|
||||||
pub fn block_selected(id: ClientId,
|
pub fn block_selected(id: ClientId,
|
||||||
@ -130,3 +130,25 @@ pub fn remove_from_lobby(id: ClientId,
|
|||||||
(n.client, leave_lobby_pkt.clone())
|
(n.client, leave_lobby_pkt.clone())
|
||||||
}).collect())
|
}).collect())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_room_tab_info(id: ClientId,
|
||||||
|
pkt: &MenuDetail,
|
||||||
|
client_location: &mut ClientLocation,
|
||||||
|
clients: &Clients)
|
||||||
|
-> Result<Vec<(ClientId, SendShipPacket)>, anyhow::Error> {
|
||||||
|
let room_id = RoomId(pkt.item as usize);
|
||||||
|
let clients_in_room = client_location.get_clients_in_room(room_id).map_err(|err| -> ClientLocationError { err.into() })?;
|
||||||
|
let mut room_info = String::new();
|
||||||
|
for client in clients_in_room {
|
||||||
|
let cs = clients.get(&client.client).ok_or(ShipError::ClientNotFound(client.client))?;
|
||||||
|
let gc = cs.user.guildcard;
|
||||||
|
let name = &cs.character.name;
|
||||||
|
let cls = cs.character.char_class;
|
||||||
|
let leveltable = CharacterLevelTable::default();
|
||||||
|
let lv = leveltable.get_level_from_exp(cls, cs.character.exp);
|
||||||
|
let floor = cs.area.unwrap_or(MapArea::Pioneer2Ep1);
|
||||||
|
|
||||||
|
room_info += format!("{} Lv{} {}\n{} {}\n", gc,lv,name,cls,floor).as_str();
|
||||||
|
}
|
||||||
|
Ok(vec![(id, SendShipPacket::SmallLeftDialog(SmallLeftDialog::new(room_info)))])
|
||||||
|
}
|
@ -178,6 +178,7 @@ pub enum SendShipPacket {
|
|||||||
DirectMessage(DirectMessage),
|
DirectMessage(DirectMessage),
|
||||||
PlayerChat(PlayerChat),
|
PlayerChat(PlayerChat),
|
||||||
SmallDialog(SmallDialog),
|
SmallDialog(SmallDialog),
|
||||||
|
SmallLeftDialog(SmallLeftDialog),
|
||||||
JoinRoom(JoinRoom),
|
JoinRoom(JoinRoom),
|
||||||
AddToRoom(AddToRoom),
|
AddToRoom(AddToRoom),
|
||||||
LeaveLobby(LeaveLobby),
|
LeaveLobby(LeaveLobby),
|
||||||
@ -219,6 +220,7 @@ impl SendServerPacket for SendShipPacket {
|
|||||||
SendShipPacket::DirectMessage(pkt) => pkt.as_bytes(),
|
SendShipPacket::DirectMessage(pkt) => pkt.as_bytes(),
|
||||||
SendShipPacket::PlayerChat(pkt) => pkt.as_bytes(),
|
SendShipPacket::PlayerChat(pkt) => pkt.as_bytes(),
|
||||||
SendShipPacket::SmallDialog(pkt) => pkt.as_bytes(),
|
SendShipPacket::SmallDialog(pkt) => pkt.as_bytes(),
|
||||||
|
SendShipPacket::SmallLeftDialog(pkt) => pkt.as_bytes(),
|
||||||
SendShipPacket::JoinRoom(pkt) => pkt.as_bytes(),
|
SendShipPacket::JoinRoom(pkt) => pkt.as_bytes(),
|
||||||
SendShipPacket::AddToRoom(pkt) => pkt.as_bytes(),
|
SendShipPacket::AddToRoom(pkt) => pkt.as_bytes(),
|
||||||
SendShipPacket::LeaveLobby(pkt) => pkt.as_bytes(),
|
SendShipPacket::LeaveLobby(pkt) => pkt.as_bytes(),
|
||||||
@ -636,9 +638,9 @@ impl<EG: EntityGateway> ServerState for ShipServerState<EG> {
|
|||||||
let block = self.blocks.with_client(id, &self.clients)?;
|
let block = self.blocks.with_client(id, &self.clients)?;
|
||||||
handler::quest::player_chose_quest(id, questmenuselect, &mut self.clients, &block.client_location, &mut block.rooms)?
|
handler::quest::player_chose_quest(id, questmenuselect, &mut self.clients, &block.client_location, &mut block.rooms)?
|
||||||
},
|
},
|
||||||
RecvShipPacket::MenuDetail(_menudetail) => {
|
RecvShipPacket::MenuDetail(menudetail) => {
|
||||||
//unreachable!();
|
let block = self.blocks.with_client(id, &self.clients)?;
|
||||||
Box::new(Vec::new().into_iter())
|
Box::new(handler::lobby::get_room_tab_info(id, menudetail, &mut block.client_location, &mut self.clients)?.into_iter())
|
||||||
},
|
},
|
||||||
RecvShipPacket::RoomPasswordReq(room_password_req) => {
|
RecvShipPacket::RoomPasswordReq(room_password_req) => {
|
||||||
let block = self.blocks.with_client(id, &self.clients)?;
|
let block = self.blocks.with_client(id, &self.clients)?;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user