use-on-demand
Version:
421 lines (326 loc) • 13.1 kB
TypeScript
/**
* 原程序的一些BUG:
* 1.【董事长】,释放技能的判断,【双非】会导致,任何角色都会被施加【极速】。
* 2.一些继承关系,文字描述不大清楚。
*
* 3.有一个Buff,代码是会反复触发的;而描述中是单次。
* 1.每当贱民死亡,所有贱民物理攻击+50%。
* 1.此处,应该只有0级生物,才会触发。(根据ID判断)
*
* 4.有一次【onHurt】写错了。
* 1.应该是【_onHurt】。
* 2.也有可能,【onHurt】不是写错了,而是手动绑的方法???
*
* 5.
*/
/**
* 相关框架信息:
* 1.godot引擎
* 1.【3.2.1】
* 2.存档地址:
* 【C:\Users\Administrator\AppData\Roaming\Godot\app_userdata\Legend Creatures\data1】
* 2.需要创意工坊的【BaseTools】工具。
*/
//——————————————————————————————————————————————————————————————————————————————
//——————————————————————————————————————————————————————————————————————————————
//——————————————————————————————————————————————————————————————————————————————
interface Cell {
}
interface ReTimer {
}
type Path_Type = NullableType<string>;
type ImgRelPath_Type = string | 'cex___toolman/cha.png'
type CurFileName_Type = 'g_test'
interface BaseTool {
connect: INode['connect'];
g_sys: {
has(key: CurFileName_Type): unknown; // 可以读取【base.g_sys】到自己的【全局变量】
};
loadImg(path: Path_Type, imgRelPath: ImgRelPath_Type): ITexture;
}
interface ITexture {
}
interface IFile {
/**
* 得到一个实例
* 1.原文为【new】,但new是关键字。
*/
create(): this; //
}
/**
* 文件夹相关
*/
interface IDirectory {
/**
* 得到一个实例
* 1.原文为【new】,但new是关键字。
*/
create(): this; //
open(path: string): IResultE; // 打开一处目录
list_dir_begin(
bol: boolean, // ??????
): void; // 遍历该目录
get_next(): string; // 获取组中,下一个条目。(游标)
current_is_dir(): boolean; // (游标控制)当前游标,是否一个文件夹
}
interface IImage {
/**
* 得到一个实例
* 1.原文为【new】,但new是关键字。
*/
create(): this; //
load(path: string): void; // 读取一处路径,作为文本
}
interface IImageTexture {
/**
* 得到一个实例
* 1.原文为【new】,但new是关键字。
*/
create(): this; //
create_from_image(im: IImage): void; // 有一处图片,创建【图片纹理】。
}
enum IFileModeE {
READ,
WRITE,
}
enum IResultE {
OK,
Error,
}
interface INode {
add_child(node: INode): void; // 添加一个子节点。
set_texture(texture: ITexture): void; // 设置【纹理内容】。
get_children(): Array<INode>; // 获得所有子节点。
get_node(path: Path_Type): INode; // 查找到一个【虚拟场景节点】
has_node(path: Path_Type): NullableType<INode>; // 查找一个【虚拟场景节点】是否存在。 是-返回Node 否-null
/**
* 绑定一个新的钩子回调。
* 1.连接基础工具信号。
*/
connect(
hook: 'onHurt' | '_onHurt', // 钩子名称 WARN 此处【onHurt】是不是写错了???
context: any, // 上下文,如self
fnName: 'onHurt', // 要绑上去的函数名称
args?: any[], // 可选:触发时,传递的参数列表。
): void;
}
type call_deferred_MethodE = 'testInit';
type globalData_ToolE = 'g_base'; //
type globalData_infoDs_Type = {
[key in globalData_ToolE]: NullableType<BaseTool>; // 获取基础工具对象
}
type chaData_CharR = 'cex___toolman';
type chaData_infoDs_Type = {
[key in chaData_CharR]: {
dir: NullableType<string>; // 获取本MOD地址,本测试工具用工具人实现,实际应用请选择你MOD实际存在的角色ID
};
}
enum SignalE {
onPickCha, // 选角色界面时发射信号
onPickItem, // 选道具界面时发射信号
onNewGame, // 初次进入游戏界面时发射信号
onLoadGame, // 读取进入游戏界面时发射信号
onSaveGame, // 退回标题页面时发射信号
}
enum AtkType {
NORMAL, // 普通攻击。
SKILL, // 技能伤害。
ContinueBuffDamage, // 持续Buff伤害。
}
/**
* 攻击信息。
* 1.有【攻击方】、【受伤方】。
* 2.在【攻击敌方】、【收到敌方伤害】时,都会触发。
*/
interface IAtkInfo {
atkType: AtkType;
atkCha: Chara; // 攻击方的角色。
}
/**
* 角色队列。
* 1.有一定的拓展方法。
*/
type CharaSequence = Array<Chara> & {
sort_custom(context: any, type: 'sort'): CharaSequence;
};
enum TeamTypeE {
Enemy = 1, // 敌方阵营
Our = 2, // 己方阵营
}
namespace Ability {
export interface Base {
lv: number; // 等级
name: string; // 名字
}
export interface Att {
maxHp: number; // 最大生命(呈现在游戏中时,每点代表112.5,取整数,下同)
atkRan: number; // 攻击距离
atk: number; // 攻击力(每点代表8.5)
mgiAtk: number; // 魔法攻击(每点代表13.7)
def: number; // 物理防御(每点代表15)
mgiDef: number; // 魔法防御(每点代表16.6)
//
atkEff: 'atk_dao'; // 攻击时的特效
}
export interface MyBuff {
addBuff(buff: Buff): void; //
hasBuff(buffName: Buff['name']): NullableType<Buff>; // 根据名字,查找Buff。有则返回实例,无则返回null
delBuff(buff: Buff): void; //
}
export interface RelatedChara {
newChara(charName: Chara['name'], belongCell: Cell): Chara;
}
}
/**
* 一般内置属性、方法,用 _ 开头命名。
*/
namespace LifeCycle {
interface _IAllBase {
_upS(): void; // 每过了一秒 的回调。
_connect(): void; //
}
interface UIHook {
pressed(): void; // 当某个UI(如 按钮),按下时。
button_down(): void; // 特指【按钮按下】。
tree_exited(): void; //
}
interface GameHook {
onNewGame(): void; // 【钩子】新开游戏时,初始化的操作
onLoadGame(): void; // 【钩子】当读取游戏时,初始化的操作
onBattleStart(): void; // 【钩子】当单场战斗开始时,初始化的操作
}
export interface Chara extends _IAllBase {
_info(): void; //
_extInit(): void; // 额外的初始化
_castCdSkill(id: string): void; // 处理【CD技能】的施放
_onBattleStart(): void; // 当战斗开始时
_onKillChara(atkInfo: IAtkInfo): void; // 当己角色,击杀了,其它一个角色 时
_onCharaDel(char: Chara): void; // 当场上任一角色死亡时。(似乎,是个全局通知广播?)
_onHurt(atkInfo: IAtkInfo): void; // 当己角色,受到伤害时
}
export interface Buff extends _IAllBase {
_init(): void; // Buff的初始化
}
}
namespace Global {
/**
* 容器、单元格,相关。
* 1.代表地图的一个格子。
*/
export interface ICell {
cell: Cell; // 容器、单元格。
cellRan(a: Cell, b: Cell): number; // 计算 两个Cell 之间的距离。
}
export interface IBuff {
attInit(): void; // ???相关的初始化?
// 自带的一些Buff效果。
b_jieShuang: Buff; // 结霜Buff
b_shaoZhuo: Buff; // 烧灼Buff
b_jiSu: Buff; // 极速Buff
}
export interface Base {
reTimer(duration: number): ReTimer; // ???
yield(t: ReTimer, name: 'timeout'): void; // 应该是,线程阻塞【若干秒】的意思。
range(num: number): unknown; //
getAllChas(
team: TeamTypeE, // 角色所属阵营
): CharaSequence; // 场上所有的角色队列。(可分 己方阵营、地方阵营)
}
export interface Skill {
addCdSkill(charName: string, cd: number): void; // 添加带CD技能。
addSkillTxt(desc: string): void; // 角色/技能 的描述。
}
export interface Att {
normalAtkChara(char: Chara): void; // 指定,攻击某一目标
}
export interface System {
// 系统层面的对象
sys: INode & {
// 主要面板
main: {
// 自身领主角色
player: {
plusGold(goldNum: number): void; // 增加【自身】黄金。
addItem(item: PackItem): void; // 增加【自身】的【背包物品】。
}
};
rndPer(possibleRatio: number): boolean; // 可能性概率。 最大值 100
newItem(itemName: string): PackItem; // 创建一个新的【背包物品】。
};
file: {
file_exists(path: string): NullableType<IFile>; // 检查,文件是否存在。 是-File 否-null
open(path: string, mode: IFileModeE): void; // 尝试打开文件,建立文件流
get_len(): number; // 查看当前文件流,所剩长度
get_line(): string; // 获取当前文件流,下一行文本
close(): void; // 关闭文件流
store_line(str: string): void; // 在文件流中,存储一行文本
}
parse_json(str: string): any; // 从文本,解析出JSON对象·。
// TIP 具体加载流程
id: string; // 此MOD创意工坊ID,可选,暂不使用
name: CurFileName_Type; // 此文件名称
test: boolean; // 是否开启测试,推荐格式,非必要
data: Array<any> | Map<string, any>; // 想要支持硬盘保存的数据,也可以改成字典或其他类型
base: NullableType<any>; // 基础工具变量名
path: Path_Type; // 本MOD的地址
call_deferred(customFn: call_deferred_MethodE): void; // (经常在全局_init后调用)读取完毕后初始化,可解决【创意工坊后于本地mod调用】的问题
emit_signal(signal: SignalE): void; // 发射广播信号。
globalData: {
infoDs: globalData_infoDs_Type & {
has(toolName: globalData_ToolE): NullableType<BaseTool>; // 检测是否有【依赖的工具】
};
};
chaData: {
infoDs: chaData_infoDs_Type;
};
print(str: string): void; //
}
}
interface IGlobal extends Global.ICell, Global.IBuff, Global.Base, Global.Skill, Global.Att, Global.System {
}
interface Chara extends //
LifeCycle.Chara, //
INode,
//
Ability.Base, Ability.MyBuff, Ability.RelatedChara //
{
global: IGlobal; // 全局的一些变量、方法。
img: ImageBitmap;
attCoe: Ability.Att; // 攻击属性
evos: Array<Chara['name']>; // 进化树,下一步的进化分支 的角色名。
team: TeamTypeE; // 【所属团队】。 1-自己团队 2-敌方团队
isDeath: boolean; // 自身是否死亡
isSumm: unknown; // ?????????
}
interface Buff extends LifeCycle.Buff {
id: string; // 唯一ID
name: string; // 名称
life: number; // 剩余时间(可由外部设定)
/**
* 得到一个实例
* 1.原文为【new】,但new是关键字。
*/
create(
life?: number, // 【life】是持续时间。不传的话,默认是【永远存在】。
): Buff; //
//
//
// 【Buff加成】攻击相关
att: {
spd: number; // 攻击速度【比率】。 默认值 为1 。
atkL: number; // 物理攻击力【比率】
mgiAtkL: number; // 魔法攻击力【比率】
cri: number; // 暴击几率
};
masCha: Chara; // TIP MasterChar - Buff原本相关,可挂靠的【角色】
}
interface Label extends INode {
/**
* 得到一个实例
* 1.原文为【new】,但new是关键字。
*/
create(): this; //
text: string;
}
interface PackItem {
}