andy what were you doing
make guild card sending much more sane
This commit is contained in:
parent
bf595f9693
commit
de8f44f269
@ -32,10 +32,3 @@ pub struct GuildCardData {
|
||||
pub user_id: u32,
|
||||
pub guildcard: guildcard::GuildCardData,
|
||||
}
|
||||
|
||||
#[derive(Clone, Default)]
|
||||
pub struct GuildCard {
|
||||
pub id: u32,
|
||||
pub character_id: u32,
|
||||
pub guildcard: guildcard::GuildCard,
|
||||
}
|
@ -1,7 +1,6 @@
|
||||
use std::convert::{From, Into, TryFrom, TryInto};
|
||||
use std::collections::HashMap;
|
||||
|
||||
use libpso::character::character;
|
||||
use libpso::packet::ship::{UpdateConfig, WriteInfoboard};
|
||||
use crate::entity::item::tech::Technique;
|
||||
|
||||
@ -223,6 +222,10 @@ impl CharacterInfoboard {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Default)]
|
||||
pub struct CharacterGuildCard {
|
||||
pub description: String,
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct CharacterEntity {
|
||||
@ -240,6 +243,7 @@ pub struct CharacterEntity {
|
||||
pub techs: CharacterTechniques,
|
||||
pub config: CharacterConfig,
|
||||
pub info_board: CharacterInfoboard,
|
||||
pub guildcard: CharacterGuildCard,
|
||||
}
|
||||
|
||||
impl std::default::Default for CharacterEntity {
|
||||
@ -256,6 +260,7 @@ impl std::default::Default for CharacterEntity {
|
||||
techs: CharacterTechniques::new(),
|
||||
config: CharacterConfig::new(),
|
||||
info_board: CharacterInfoboard::new(),
|
||||
guildcard: CharacterGuildCard::default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -52,12 +52,4 @@ pub trait EntityGateway {
|
||||
fn get_items_by_character(&self, _char: &CharacterEntity) -> Vec<Item> {
|
||||
unimplemented!();
|
||||
}
|
||||
|
||||
fn create_guild_card_by_character(&self, _character: &CharacterEntity) -> GuildCard {
|
||||
unimplemented!();
|
||||
}
|
||||
|
||||
fn get_guild_card_by_character(&self, _character: &CharacterEntity) -> Option<GuildCard> {
|
||||
unimplemented!();
|
||||
}
|
||||
}
|
||||
|
@ -15,7 +15,6 @@ use std::sync::{Arc, Mutex};
|
||||
pub struct InMemoryGateway {
|
||||
users: Arc<Mutex<HashMap<u32, UserAccount>>>,
|
||||
user_settings: Arc<Mutex<HashMap<u32, UserSettings>>>,
|
||||
guildcards: Arc<Mutex<HashMap<u32, GuildCard>>>,
|
||||
characters: Arc<Mutex<HashMap<u32, CharacterEntity>>>,
|
||||
items: Arc<Mutex<HashMap<ItemEntityId, Item>>>,
|
||||
}
|
||||
@ -25,7 +24,6 @@ impl InMemoryGateway {
|
||||
InMemoryGateway {
|
||||
users: Arc::new(Mutex::new(HashMap::new())),
|
||||
user_settings: Arc::new(Mutex::new(HashMap::new())),
|
||||
guildcards: Arc::new(Mutex::new(HashMap::new())),
|
||||
characters: Arc::new(Mutex::new(HashMap::new())),
|
||||
items: Arc::new(Mutex::new(HashMap::new())),
|
||||
}
|
||||
@ -143,40 +141,4 @@ impl EntityGateway for InMemoryGateway {
|
||||
})
|
||||
.collect()
|
||||
}
|
||||
|
||||
fn create_guild_card_by_character(&self, character: &CharacterEntity) -> GuildCard {
|
||||
let mut guildcards = self.guildcards.lock().unwrap();
|
||||
let user = self.get_user_by_id(character.user_id).unwrap();
|
||||
let settings = self.get_user_settings_by_user(&user).unwrap();
|
||||
let id = guildcards
|
||||
.iter()
|
||||
.fold(0, |sum, (i, _)| std::cmp::max(sum, *i))
|
||||
+ 1;
|
||||
let new_guildcard = GuildCard {
|
||||
id: id,
|
||||
character_id: character.id,
|
||||
guildcard: libpso::character::guildcard::GuildCard {
|
||||
guildcard: user.guildcard,
|
||||
name: libpso::utf8_to_utf16_array!(character.name, 24),
|
||||
team: settings.settings.team_name,
|
||||
desc: [0; 88], // TODO?
|
||||
reserved1: 1,
|
||||
language: 0,
|
||||
section_id: character.section_id.into(),
|
||||
class: character.char_class.into(),
|
||||
padding: 0,
|
||||
comment: [0; 88], // TODO?
|
||||
},
|
||||
};
|
||||
guildcards.insert(id, new_guildcard.clone());
|
||||
new_guildcard
|
||||
}
|
||||
|
||||
fn get_guild_card_by_character(&self, character: &CharacterEntity) -> Option<GuildCard> {
|
||||
let guildcards = self.guildcards.lock().unwrap();
|
||||
guildcards
|
||||
.iter()
|
||||
.find(|(_, k)| k.character_id == character.id)
|
||||
.map(|(_, k)| k.clone())
|
||||
}
|
||||
}
|
||||
|
@ -73,13 +73,11 @@ fn main() {
|
||||
entity_gateway.create_user_settings_by_user(&fake_user);
|
||||
let mut character = entity_gateway.new_character_by_user(&fake_user);
|
||||
character.name = "Test Char 1".into();
|
||||
entity_gateway.create_guild_card_by_character(&character);
|
||||
entity_gateway.set_character(&character);
|
||||
let mut character = entity_gateway.new_character_by_user(&fake_user);
|
||||
character.slot = 2;
|
||||
character.name = "\tE12345678".into();
|
||||
character.exp = 80000000;
|
||||
entity_gateway.create_guild_card_by_character(&character);
|
||||
entity_gateway.set_character(&character);
|
||||
|
||||
entity_gateway.new_item(
|
||||
@ -115,12 +113,10 @@ fn main() {
|
||||
entity_gateway.create_user_settings_by_user(&fake_user2);
|
||||
let mut character = entity_gateway.new_character_by_user(&fake_user2);
|
||||
character.name = "Test Char 3".into();
|
||||
entity_gateway.create_guild_card_by_character(&character);
|
||||
entity_gateway.set_character(&character);
|
||||
let mut character = entity_gateway.new_character_by_user(&fake_user2);
|
||||
character.slot = 2;
|
||||
character.name = "Test Char 4".into();
|
||||
entity_gateway.create_guild_card_by_character(&character);
|
||||
entity_gateway.set_character(&character);
|
||||
|
||||
let fake_user3 = UserAccount {
|
||||
@ -138,12 +134,10 @@ fn main() {
|
||||
entity_gateway.create_user_settings_by_user(&fake_user3);
|
||||
let mut character = entity_gateway.new_character_by_user(&fake_user3);
|
||||
character.name = "Test Char 5".into();
|
||||
entity_gateway.create_guild_card_by_character(&character);
|
||||
entity_gateway.set_character(&character);
|
||||
let mut character = entity_gateway.new_character_by_user(&fake_user3);
|
||||
character.slot = 2;
|
||||
character.name = "Test Char 6".into();
|
||||
entity_gateway.create_guild_card_by_character(&character);
|
||||
entity_gateway.set_character(&character);
|
||||
|
||||
let fake_user4 = UserAccount {
|
||||
@ -161,12 +155,10 @@ fn main() {
|
||||
entity_gateway.create_user_settings_by_user(&fake_user4);
|
||||
let mut character = entity_gateway.new_character_by_user(&fake_user4);
|
||||
character.name = "Test Char 7".into();
|
||||
entity_gateway.create_guild_card_by_character(&character);
|
||||
entity_gateway.set_character(&character);
|
||||
let mut character = entity_gateway.new_character_by_user(&fake_user4);
|
||||
character.slot = 2;
|
||||
character.name = "Test Char 8".into();
|
||||
entity_gateway.create_guild_card_by_character(&character);
|
||||
entity_gateway.set_character(&character);
|
||||
|
||||
async_std::task::block_on(async move {
|
||||
|
@ -10,13 +10,14 @@ use libpso::{PacketParseError, PSOPacket};
|
||||
use libpso::crypto::bb::PSOBBCipher;
|
||||
use libpso::character::character;
|
||||
use libpso::packet::ship::{ROOM_MENU_ID};
|
||||
use libpso::{utf8_to_array, utf8_to_utf16_array};
|
||||
|
||||
use crate::common::cipherkeys::{ELSEWHERE_PRIVATE_KEY, ELSEWHERE_PARRAY};
|
||||
use crate::common::serverstate::{SendServerPacket, RecvServerPacket, ServerState, OnConnect, ClientId};
|
||||
use crate::common::leveltable::CharacterLevelTable;
|
||||
|
||||
use crate::entity::gateway::EntityGateway;
|
||||
use crate::entity::account::{UserAccount, UserSettings, USERFLAG_NEWCHAR, USERFLAG_DRESSINGROOM, GuildCard};
|
||||
use crate::entity::account::{UserAccount, UserSettings, USERFLAG_NEWCHAR, USERFLAG_DRESSINGROOM};
|
||||
use crate::entity::character::CharacterEntity;
|
||||
use crate::entity::item::{ItemLocation, Item};
|
||||
use crate::login::login::get_login_status;
|
||||
@ -122,21 +123,20 @@ struct ClientState {
|
||||
settings: UserSettings,
|
||||
character: CharacterEntity,
|
||||
session: Session,
|
||||
guildcard: GuildCard,
|
||||
//guildcard: GuildCard,
|
||||
inventory: items::ActiveInventory,
|
||||
//bank: Bank,
|
||||
block: u32,
|
||||
}
|
||||
|
||||
impl ClientState {
|
||||
fn new(user: UserAccount, settings: UserSettings, character: CharacterEntity, inventory: items::ActiveInventory, /*bank: Bank,*/ session: Session, guildcard: GuildCard) -> ClientState {
|
||||
fn new(user: UserAccount, settings: UserSettings, character: CharacterEntity, inventory: items::ActiveInventory, /*bank: Bank,*/ session: Session) -> ClientState {
|
||||
ClientState {
|
||||
user: user,
|
||||
settings: settings,
|
||||
character: character,
|
||||
session: session,
|
||||
inventory: inventory,
|
||||
guildcard: guildcard,
|
||||
//bank: bank,
|
||||
block: 1,
|
||||
}
|
||||
@ -181,11 +181,9 @@ impl<EG: EntityGateway> ShipServerState<EG> {
|
||||
.clone();
|
||||
let settings = self.entity_gateway.get_user_settings_by_user(&user)
|
||||
.ok_or(ShipError::ClientNotFound(id))?;
|
||||
let guildcard = self.entity_gateway.get_guild_card_by_character(&character)
|
||||
.ok_or(ShipError::ClientNotFound(id))?;
|
||||
let inventory = self.item_database.get_character_inventory(&mut self.entity_gateway, &character);
|
||||
|
||||
self.clients.insert(id, ClientState::new(user, settings, character, inventory, pkt.session, guildcard));
|
||||
self.clients.insert(id, ClientState::new(user, settings, character, inventory, pkt.session));
|
||||
vec![SendShipPacket::LoginResponse(response), SendShipPacket::ShipBlockList(ShipBlockList::new(&self.name, 3))]
|
||||
},
|
||||
Err(err) => {
|
||||
@ -331,22 +329,21 @@ impl<EG: EntityGateway> ShipServerState<EG> {
|
||||
fn direct_message(&mut self, id: ClientId, msg: &DirectMessage) -> Box<dyn Iterator<Item = (ClientId, SendShipPacket)> + Send> {
|
||||
let cmsg = msg.clone();
|
||||
let client = self.clients.get_mut(&id).unwrap();
|
||||
let gc = self.entity_gateway.get_guild_card_by_character(&client.character).unwrap();
|
||||
match &cmsg.msg {
|
||||
GameMessage::GuildcardSend(GuildcardSend) => {
|
||||
GameMessage::GuildcardSend(guildcard_send) => {
|
||||
let out_msg = DirectMessage{
|
||||
flag: cmsg.flag,
|
||||
msg: GameMessage::GuildcardRecv(GuildcardRecv {
|
||||
client: 141,
|
||||
target: 8,
|
||||
guildcard: gc.guildcard.guildcard,
|
||||
name: gc.guildcard.name,
|
||||
team: gc.guildcard.team,
|
||||
desc: gc.guildcard.desc,
|
||||
client: guildcard_send.client,
|
||||
target: guildcard_send.target,
|
||||
guildcard: client.user.id,
|
||||
name: utf8_to_utf16_array!(client.character.name, 0x18),
|
||||
team: [0; 0x10], // TODO: teams not yet implemented
|
||||
desc: utf8_to_utf16_array!(client.character.guildcard.description, 0x58),
|
||||
one: 1,
|
||||
language: gc.guildcard.language,
|
||||
section_id: gc.guildcard.section_id,
|
||||
class: gc.guildcard.class,
|
||||
language: 0, // TODO: add language flag to character
|
||||
section_id: client.character.section_id.into(),
|
||||
class: client.character.char_class.into(),
|
||||
}),
|
||||
};
|
||||
Box::new(self.client_location.get_area_by_user(id).clients().iter()
|
||||
|
Loading…
x
Reference in New Issue
Block a user