make fuel tank not count towards "talk to everyone" achievement

This commit is contained in:
yuni 2024-10-09 23:50:39 +02:00
parent a618414a1a
commit 9a578e1093
2 changed files with 19 additions and 5 deletions

View file

@ -112,6 +112,7 @@ pub struct Talker {
pub chat_name: String, pub chat_name: String,
pub actor_id: String, pub actor_id: String,
pub name: Option<String>, pub name: Option<String>,
pub counts_towards_achievement: bool,
pub pronoun: Option<String>, pub pronoun: Option<String>,
pub talking_speed: f32, pub talking_speed: f32,
} }
@ -654,8 +655,10 @@ pub fn handle_new_conversations(
} }
match (*chatdb).get_chat_by_id(&event.talker.chat_name) { match (*chatdb).get_chat_by_id(&event.talker.chat_name) {
Ok(chat_id) => { Ok(chat_id) => {
if let Some(name) = &event.talker.name { if event.talker.counts_towards_achievement {
ew_achievement.send(game::AchievementEvent::TalkTo(name.clone())); if let Some(name) = &event.talker.name {
ew_achievement.send(game::AchievementEvent::TalkTo(name.clone()));
}
} }
let mut chat = Chat { let mut chat = Chat {
internal_id: chat_id, internal_id: chat_id,

View file

@ -80,6 +80,7 @@ struct ParserState {
angular_momentum: DVec3, angular_momentum: DVec3,
pronoun: Option<String>, pronoun: Option<String>,
message_on_entry: Option<String>, message_on_entry: Option<String>,
chat_counts_towards_achievements: bool,
is_sphere: bool, is_sphere: bool,
is_player: bool, is_player: bool,
is_lifeform: bool, is_lifeform: bool,
@ -140,6 +141,7 @@ impl Default for ParserState {
angular_momentum: DVec3::new(0.03, 0.3, 0.09), angular_momentum: DVec3::new(0.03, 0.3, 0.09),
pronoun: None, pronoun: None,
message_on_entry: None, message_on_entry: None,
chat_counts_towards_achievements: true,
is_sphere: false, is_sphere: false,
is_player: false, is_player: false,
is_lifeform: false, is_lifeform: false,
@ -482,6 +484,9 @@ pub fn load_defs(mut ew_spawn: EventWriter<SpawnEvent>) {
["chatid", chat] => { ["chatid", chat] => {
state.chat = chat.to_string(); state.chat = chat.to_string();
} }
["chat_achievement", "no"] => {
state.chat_counts_towards_achievements = false;
}
["scale", scale] => { ["scale", scale] => {
if let Ok(scale_float) = scale.parse::<f32>() { if let Ok(scale_float) = scale.parse::<f32>() {
state.model_scale = scale_float; state.model_scale = scale_float;
@ -835,6 +840,9 @@ fn spawn_scenes(
// command: chatid OxygenTank // command: chatid OxygenTank
state.chat = String::from("OxygenTank"); state.chat = String::from("OxygenTank");
// command: chat_achievement no
state.chat_counts_towards_achievements = false;
// command: pointofinterest yes // command: pointofinterest yes
ew_spawn.send(SpawnEvent(state)); ew_spawn.send(SpawnEvent(state));
} }
@ -1082,16 +1090,19 @@ fn spawn_entities(
actor.insert(actor::Identifier(state.id.clone())); actor.insert(actor::Identifier(state.id.clone()));
id2pos.0.insert(state.id.clone(), absolute_pos); id2pos.0.insert(state.id.clone(), absolute_pos);
} }
if !state.chat.is_empty() { if !state.chat.is_empty() {
actor.insert(chat::Talker { actor.insert(chat::Talker {
actor_id: state.id.clone(), actor_id: state.id.clone(),
chat_name: state.chat.clone(), chat_name: state.chat.clone(),
name: state.name.clone(), name: state.name.clone(),
pronoun: state.pronoun.clone(), pronoun: state.pronoun.clone(),
counts_towards_achievement: state.chat_counts_towards_achievements,
talking_speed: 1.0, talking_speed: 1.0,
}); });
if let Some(name) = &state.name { if state.chat_counts_towards_achievements {
achievement_tracker.all_people.insert(name.clone()); if let Some(name) = &state.name {
achievement_tracker.all_people.insert(name.clone());
}
} }
} }
if state.is_vehicle { if state.is_vehicle {