blastmud/blastmud_game/src/message_handler/user_commands/invincible.rs
Condorra 19cef2d9c4 Allow selling in stores, with Josephine special behaviour
Also added a staff invincible mode to help clean out NPCs with wrong
inventory.
2024-02-26 22:35:55 +11:00

44 lines
1.2 KiB
Rust

use super::{get_player_item_or_fail, user_error, UResult, UserVerb, UserVerbRef, VerbContext};
use crate::models::item::ItemFlag;
use ansi::ansi;
use async_trait::async_trait;
pub struct Verb;
#[async_trait]
impl UserVerb for Verb {
async fn handle(
self: &Self,
ctx: &mut VerbContext,
_verb: &str,
remaining: &str,
) -> UResult<()> {
let requester = get_player_item_or_fail(ctx).await?;
let remaining = remaining.trim();
let state = if remaining == "on" {
true
} else if remaining == "off" {
false
} else {
return user_error(
ansi!("use <bold>staff_invincible on<reset> or <bold>staff_invincible off<reset>")
.to_owned(),
);
};
let mut requester = (*requester).clone();
requester.flags = requester
.flags
.into_iter()
.filter(|f| f != &ItemFlag::Invincible)
.collect();
if state {
requester.flags.push(ItemFlag::Invincible);
}
ctx.trans.save_item_model(&requester).await?;
Ok(())
}
}
static VERB_INT: Verb = Verb;
pub static VERB: UserVerbRef = &VERB_INT as UserVerbRef;