44 lines
1.2 KiB
Rust
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;
|