MC_survival/item.d.ts
2025-01-14 12:27:52 +08:00

301 lines
8.7 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

interface Item<I extends AllIdsOf<'items'>> {
/**
* 道具id
*/
id: I;
/**
* 道具的类型
*/
cls: ItemClsOf<I>;
/**
* 道具的名称
*/
name: string;
/**
* 道具的描述
*/
text?: string;
/**
* 是否在道具栏隐藏
*/
hideInToolBox: boolean;
/**
* 装备信息
*/
equip: ItemClsOf<I> extends 'equips' ? Equip : never;
/**
* 回放使用时是否不先打开道具栏再使用
*/
hideInReplay: boolean;
/**
* 即捡即用效果
*/
itemEffect?: string;
/**
* 即捡即用道具捡过之后的提示
*/
itemEffectTip?: string;
/**
* 使用道具时执行的事件
*/
useItemEvent?: MotaEvent;
/**
* 使用道具时执行的代码
*/
useItemEffect?: string;
/**
* 能否使用道具
*/
canUseItemEffect?: string | boolean;
}
interface EquipBase {
/**
* 装备增加的数值
*/
value: Record<keyof SelectType<HeroStatus, number>, number>;
/**
* 装备增加的百分比
*/
percentage: Record<keyof SelectType<HeroStatus, number>, number>;
}
interface Equip extends EquipBase {
/**
* 可以装备到的装备孔
*/
type: number | string;
/**
* 动画信息
*/
animate: AnimationIds;
/**
* 穿上装备时执行的事件
*/
equipEvent?: MotaEvent;
/**
* 脱下装备时执行的事件
*/
unequipEvent?: MotaEvent;
}
/**
* 道具相关的内容
*/
interface Items {
/**
* 获得所有道具
*/
getItems(): {
[P in AllIdsOf<'items'>]: Item<P>;
};
/**
* 执行即捡即用类的道具获得时的效果
* @example core.getItemEffect('redPotion', 10) // 执行获得10瓶红血的效果
* @param itemId 道具id
* @param itemNum 道具数量默认为1
*/
getItemEffect(itemId: AllIdsOf<'items'>, itemNum?: number): void;
/**
* 即捡即用类的道具获得时的额外提示
* @example core.getItemEffectTip(redPotion) // (获得 红血瓶)',生命+100'
* @param itemId 道具id
* @returns 图块属性itemEffectTip的内容
*/
getItemEffectTip(itemId: AllIdsOf<'items'>): string;
/**
* 使用一个道具
* @example core.useItem('pickaxe', true) // 使用破墙镐,不计入录像,无回调
* @param itemId 道具id
* @param noRoute 是否不计入录像快捷键使用的请填true否则可省略
* @param callback 道具使用完毕或使用失败后的回调函数,好像没什么意义吧(
*/
useItem(
itemId: ItemIdOf<'tools' | 'constants'>,
noRoute?: boolean,
callback?: () => void
): void;
/**
* 检查能否使用某种道具
* @example core.canUseItem('pickaxe') // 能否使用破墙镐
* @param itemId 道具id
* @returns true表示可以使用
*/
canUseItem(itemId: AllIdsOf<'items'>): boolean;
/**
* 统计某种道具的持有量
* @example core.itemCount('yellowKey') // 持有多少把黄钥匙
* @param itemId 道具id
* @returns 该种道具的持有量,不包括已穿戴的装备
*/
itemCount(itemId: AllIdsOf<'items'>): number;
/**
* 检查主角是否持有某种道具(不包括已穿戴的装备)
* @example core.hasItem('yellowKey') // 主角是否持有黄钥匙
* @param itemId 道具id
* @returns true表示持有
*/
hasItem(itemId: AllIdsOf<'items'>): boolean;
/**
* 检查主角是否穿戴着某件装备
* @example core.hasEquip('sword5') // 主角是否装备了神圣剑
* @param itemId 装备id
* @returns true表示已装备
*/
hasEquip(itemId: ItemIdOf<'equips'>): boolean;
/**
* 检查主角某种类型的装备目前是什么
* @example core.getEquip(1) // 主角目前装备了什么盾牌
* @param equipType 装备类型,自然数
* @returns 装备idnull表示未穿戴
*/
getEquip(equipType: number): ItemIdOf<'equips'> | null;
/**
* 设置某种道具的持有量
* @example core.setItem('yellowKey', 3) // 设置黄钥匙为3把
* @param itemId 道具id
* @param itemNum 新的持有量可选自然数默认为0
*/
setItem(itemId: AllIdsOf<'items'>, itemNum?: number): void;
/**
* 静默增减某种道具的持有量 不会更新游戏画面或是显示提示
* @example core.addItem('yellowKey', -2) // 没收两把黄钥匙
* @param itemId 道具id
* @param itemNum 增加量,负数表示减少
*/
addItem(itemId: AllIdsOf<'items'>, itemNum?: number): void;
/**
* @deprecated 使用addItem代替。
* 删除某个物品一定的数量相当于addItem(itemId, -n);
* @param itemId 道具id
* @param itemNum 减少量,负数表示增加
*/
removeItem(itemId?: AllIdsOf<'items'>, itemNum?: number): void;
/**
* 根据类型获得一个可用的装备孔
* @param equipId 道具名称
*/
getEquipTypeByName(name?: ItemIdOf<'equips'>): number;
/**
* 判定某件装备的类型
* @example core.getEquipTypeById('shield5') // 1盾牌
* @param equipId 装备id
* @returns 类型编号,自然数
*/
getEquipTypeById(equipId: ItemIdOf<'equips'>): number;
/**
* 检查能否穿上某件装备
* @example core.canEquip('sword5', true) // 主角可以装备神圣剑吗,如果不能会有提示
* @param equipId 装备id
* @param hint 无法穿上时是否提示(比如是因为未持有还是别的什么原因)
* @returns true表示可以穿上false表示无法穿上
*/
canEquip(equipId: ItemIdOf<'equips'>, hint?: boolean): boolean;
/**
* 尝试穿上某件背包里的装备并提示
* @example core.loadEquip('sword5') // 尝试装备上背包里的神圣剑,无回调
* @param equipId 装备id
* @param callback 穿戴成功或失败后的回调函数
*/
loadEquip(equipId: ItemIdOf<'equips'>, callback?: () => void): void;
/**
* 脱下某个类型的装备
* @example core.unloadEquip(1) // 卸下盾牌,无回调
* @param equipType 装备类型编号,自然数
* @param callback 卸下装备后的回调函数
*/
unloadEquip(equipType: number, callback?: () => void): void;
/**
* 比较两件(类型可不同)装备的优劣
* @example core.compareEquipment('sword5', 'shield5') // 比较神圣剑和神圣盾的优劣
* @param compareEquipId 装备甲的id
* @param beComparedEquipId 装备乙的id
* @returns 两装备的各属性差甲减乙0省略
*/
compareEquipment<F extends ItemIdOf<'equips'>>(
compareEquipId: F,
beComparedEquipId: Exclude<ItemIdOf<'equips'>, F>
): EquipBase;
/**
* 保存当前套装
* @example core.quickSaveEquip(1) // 将当前套装保存为1号套装
* @param index 套装编号,自然数
*/
quickSaveEquip(index: number): void;
/**
* 快速换装
* @example core.quickLoadEquip(1) // 快速换上1号套装
* @param index 套装编号,自然数
*/
quickLoadEquip(index: number): void;
/**
* 设置某个装备的属性并计入存档
* @example core.setEquip('sword1', 'value', 'atk', 300, '+='); // 设置铁剑的攻击力数值再加300
* @param equipId 装备id
* @param valueType 增幅类型只能是value数值或percentage百分比
* @param name 要修改的属性名称如atk
* @param value 要修改到的属性数值
* @param operator 操作符,如+=表示在原始值上增加
* @param prefix 独立开关前缀,一般不需要
*/
setEquip(
equipId: ItemIdOf<'equips'>,
valueType: 'value' | 'percentage',
name: keyof SelectType<HeroStatus, number>,
value: number,
operator?: MotaOperator,
prefix?: string
): void;
/**
* 真正的穿脱装备
* @param type 装备孔
* @param loadId 装上的装备
* @param unloadId 脱下的装备
* @param callback 回调函数
*/
_realLoadEquip(
type: number,
loadId?: ItemIdOf<'equips'>,
unloadId?: ItemIdOf<'equips'>,
callback?: () => void
): void;
}
declare const items: new () => Items;