Skip to content

Commit

Permalink
Merge pull request #153 from sorokya/case-sensitivity
Browse files Browse the repository at this point in the history
Guild fixes
  • Loading branch information
sorokya committed Aug 14, 2024
2 parents 65ac0ba + 9ab8d0f commit 48b1e57
Show file tree
Hide file tree
Showing 8 changed files with 39 additions and 126 deletions.
76 changes: 25 additions & 51 deletions src/map/map/guild/finish_guild_creation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use eolib::{
},
};

use crate::{character::Character, SETTINGS};
use crate::SETTINGS;

use super::super::Map;

Expand All @@ -18,37 +18,31 @@ impl Map {
guild_tag: String,
guild_name: String,
) {
let mut guild_characters: Vec<Character> = Vec::with_capacity(SETTINGS.guild.min_players);

{
let character = match self.characters.get_mut(&player_id) {
Some(character) => character,
None => return,
};

character.remove_item(1, SETTINGS.guild.create_cost);
character.guild_tag = Some(guild_tag.clone());
character.guild_name = Some(guild_name.clone());
character.guild_rank_string = Some(SETTINGS.guild.default_leader_rank_name.clone());
character.guild_rank = Some(1);

guild_characters.push(character.to_owned());

self.world.add_guild_member(player_id, guild_tag.clone());
let character = match self.characters.get_mut(&player_id) {
Some(character) => character,
None => return,
};

if let Some(player) = character.player.as_ref() {
player.send(
PacketAction::Create,
PacketFamily::Guild,
&GuildCreateServerPacket {
leader_player_id: player_id,
guild_tag: guild_tag.clone(),
guild_name: guild_name.clone(),
rank_name: SETTINGS.guild.default_leader_rank_name.clone(),
gold_amount: character.get_item_amount(1),
},
);
}
character.remove_item(1, SETTINGS.guild.create_cost);
character.guild_tag = Some(guild_tag.clone());
character.guild_name = Some(guild_name.clone());
character.guild_rank_string = Some(SETTINGS.guild.default_leader_rank_name.clone());
character.guild_rank = Some(1);

self.world.add_guild_member(player_id, guild_tag.clone());

if let Some(player) = character.player.as_ref() {
player.send(
PacketAction::Create,
PacketFamily::Guild,
&GuildCreateServerPacket {
leader_player_id: player_id,
guild_tag: guild_tag.clone(),
guild_name: guild_name.clone(),
rank_name: SETTINGS.guild.default_leader_rank_name.clone(),
gold_amount: character.get_item_amount(1),
},
);
}

let packet = GuildAgreeServerPacket {
Expand Down Expand Up @@ -82,31 +76,11 @@ impl Map {
character.guild_rank_string = Some(SETTINGS.guild.default_new_member_rank_name.clone());
character.guild_rank = Some(9);

guild_characters.push(character.to_owned());

self.world.add_guild_member(*player_id, guild_tag.clone());

if let Some(player) = character.player.as_ref() {
player.send_buf(PacketAction::Agree, PacketFamily::Guild, buf.clone());
}
}

let pool = self.pool.clone();

tokio::spawn(async move {
let mut conn = match pool.get_conn().await {
Ok(conn) => conn,
Err(e) => {
error!("Error getting connection from pool: {}", e);
return;
}
};

for character in guild_characters.iter_mut() {
character.save(&mut conn).await.unwrap_or_else(|e| {
error!("Error saving character: {}", e);
});
}
});
}
}
19 changes: 0 additions & 19 deletions src/map/map/guild/join_guild.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,24 +35,5 @@ impl Map {
},
);
}

// TODO: This is potentially unsafe if character changes before being saved..
// Possible duping hazard?
let mut character = character.to_owned();
let pool = self.pool.clone();

tokio::spawn(async move {
let mut conn = match pool.get_conn().await {
Ok(conn) => conn,
Err(e) => {
error!("Error getting connection from pool: {}", e);
return;
}
};

if let Err(e) = character.save(&mut conn).await {
error!("Error saving character: {}", e);
}
});
}
}
17 changes: 0 additions & 17 deletions src/map/map/guild/kick_from_guild.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,22 +28,5 @@ impl Map {
&GuildKickServerPacket::default(),
);
}

let mut character = character.to_owned();
let pool = self.pool.clone();

tokio::spawn(async move {
let mut conn = match pool.get_conn().await {
Ok(conn) => conn,
Err(e) => {
error!("Error getting connection from pool: {}", e);
return;
}
};

if let Err(e) = character.save(&mut conn).await {
error!("Error saving character: {}", e);
}
});
}
}
17 changes: 0 additions & 17 deletions src/map/map/guild/leave_guild.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,22 +18,5 @@ impl Map {
character.guild_rank_string = None;

self.world.remove_guild_member(player_id, guild_tag);

let mut character = character.to_owned();
let pool = self.pool.clone();

tokio::spawn(async move {
let mut conn = match pool.get_conn().await {
Ok(conn) => conn,
Err(e) => {
error!("Error getting connection from pool: {}", e);
return;
}
};

if let Err(e) = character.save(&mut conn).await {
error!("Error saving character: {}", e);
}
});
}
}
17 changes: 0 additions & 17 deletions src/map/map/guild/update_guild_rank.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,22 +19,5 @@ impl Map {
&GuildAcceptServerPacket { rank },
);
}

let mut character = character.to_owned();
let pool = self.pool.clone();

tokio::spawn(async move {
let mut conn = match pool.get_conn().await {
Ok(conn) => conn,
Err(e) => {
error!("Error getting connection from pool: {}", e);
return;
}
};

if let Err(e) = character.save(&mut conn).await {
error!("Error saving character: {}", e);
}
});
}
}
6 changes: 4 additions & 2 deletions src/player/player/handlers/guild.rs
Original file line number Diff line number Diff line change
Expand Up @@ -236,9 +236,11 @@ impl Player {
return;
}

let guild_tag = create.guild_tag.to_uppercase();

if let Err(e) = create_guild(
&mut conn,
&create.guild_tag,
&guild_tag,
&create.guild_name,
&create.description,
)
Expand All @@ -251,7 +253,7 @@ impl Player {
map.finish_guild_creation(
player_id,
guild_create_members,
create.guild_tag,
guild_tag,
create.guild_name,
);
});
Expand Down
3 changes: 3 additions & 0 deletions src/sql/cleanup_guildless_characters.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
UPDATE `Character`
SET `guild_rank` = NULL, `guild_rank_string` = NULL
WHERE `guild_id` IS NULL;
10 changes: 7 additions & 3 deletions src/world/world/disband_guild.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,6 @@ impl World {
map.kick_from_guild(player_id);
}

// Wait a few seconds to ensure all characters have been saved.
tokio::time::sleep(tokio::time::Duration::from_secs(5)).await;

let mut conn = match pool.get_conn().await {
Ok(conn) => conn,
Err(e) => {
Expand All @@ -54,6 +51,13 @@ impl World {
{
error!("Error deleting guild: {}", e);
}

if let Err(e) = conn
.query_drop(include_str!("../../sql/cleanup_guildless_characters.sql"))
.await
{
error!("Error deleting guild: {}", e);
}
});
}
}

0 comments on commit 48b1e57

Please sign in to comment.