FFDraw: 一个针对FFxiv的悬浮窗图形显示框架
此处应有介绍
- 下载
- 适用人群:python环境我不会装啊,exe怎么报错啊,py文件怎么启动啊,怎么更新啊我去
- 双击
run.bat
,会自动在当前文件夹安装FFD,同时搭建python环境,并启动FFD
- 什么?你不会填网络代理端口?兄弟还是当绿玩吧,与科技无缘
- 需求
python3.10
或以上的x64版本
作为运行环境
- 下载专案后在专案目录运行
python -m pip install -r requirements.txt
安装依赖
- 如果遇到安装依赖问题请自行搜索
pip换源
相关
- 执行
main.py
- 去 release 下载带exe的发布
- 双击
FFDraw.exe
运行
- 注:exe版本未必属于最新版本,也未必适应你的运行环境,请尽量使用python版本或从其他人获取最新版本的build (安装
pyinstaller
并运行 pack.py
)
- 注2:cn版本与正常版本差异为默认值适配国内网络、国服默认路径编码,无需手动设置,两个版本均能适用与国服与国际服
- 注3:如果报毒,可以使用
python版本
或者关掉防毒
或者添加c盘信任
或者不用
- 如果在非独显直连的机器上遇到图层黑色无法穿透之类,请尝试游戏级本程序均使用核显并重启程序
- 如果遇到报错
failed to set hardware filter to promiscuous mode
之类,请修改 config.json
中的 sniffer/sniff_promisc
为 false
并重启程序
- 如果遇到报错
Npcap/Winpcap is not installed
之类,请下载 npcap 安装后重启
- 如果遇到编码问题
utf8 cant decode
之类,请修改 config.json
中的 path_encoding
为 gbk
并重启程序
- 关于跨域:设置
web_server/enable_cors
,另外如果你不打算给链接设置ssl, chrome 请在 chrome://flags/ 中设置 Block insecure private network requests
为 disable
(ref)
本程序基础的使用基于 http rpc api, 运行后将json指令传送到 http://127.0.0.1:8001/rpc
即可
一个基础的 json payload 例子:
{
"cmd": "add_omen",
"color": "enemy",
"shape_scale": {
"key": "circle",
"range": 5
},
"pos": {
"key": "actor_pos",
"id": 269567252
},
"duration": 10
}
在本接口中,关键字和其他参数在同一层,请注意
更多例子参阅 这里
参数 |
类型 |
描述 |
shape |
number |
图形的形状,高十六位为类型,低十六位为参数(后详) |
scale |
number[3] |
图形的比例,对应[东西刻度,上下刻度,南北刻度] |
shape_scale |
(number, number[3]) |
一般用于使用特殊值(后详),为形状、比例的二元组,当存在时忽略 shape 和 scale 参数 |
surface |
number[3] /number[4] |
填充颜色的rgba值,如果输入长度为3,默认alpha为1 |
line |
number[3] /number[4] |
线条颜色的rgba值,如果输入长度为3,默认alpha为1 |
line_width |
number |
线条宽度,默认为3 |
color |
string /number[3] /number[4] |
输入为 string 时会套用预设配色(后详),否则等同于surface 参数,当存在时忽略 surface 和 line 参数 |
pos |
number[3] |
图像在游戏3d空间里面的位置,对应 [东西刻度,上下刻度,南北刻度] |
facing |
number |
图像沿着y轴的旋转量,以rad为单位 |
duration |
number |
图像的存活时间,空则一直存在需要手动清除 |
label |
string |
在指定位置显示的文字 |
label_color |
number[3] |
显示文字的颜色 |
label_scale |
number |
显示文字的比例 |
label_at |
number |
显示文字的相对坐标的位置(参见这里) |
参数 |
类型 |
描述 |
src |
number[3] |
线条的来源 |
dst |
number[3] |
线条的目标 |
width |
number |
线条粗幼,默认3 |
color |
string /number[3] /number[4] |
线条颜色,输入为 string 时会套用预设配色 |
label |
string |
在指定位置显示的文字 |
label_color |
number[3] |
显示文字的颜色 |
label_scale |
number |
显示文字的比例 |
label_at |
number |
显示文字的相对坐标的位置 |
参数 |
类型 |
描述 |
id |
number |
图形的omen_id,如果为-1则全部删除 |
- 描述:foreach(
values
as name
)func
()
参数 |
类型 |
描述 |
values |
any[] |
变量的列表 |
name |
string |
变量赋值的名字 |
func |
指令 |
执行的指令 |
参数 |
类型 |
描述 |
args |
map[str,any] |
变量的列表 |
func |
指令 |
执行的指令 |
关键字 |
描述 |
enemy |
珊瑚色 |
g_enemy |
橘色 |
friend |
海水蓝 |
g_friend |
天蓝色 |
图形类型 |
参数 |
描述 |
0x1 |
内圈比例 * 0xffff |
参数为空是普通圆形,否则月环,如果需要描述外圈 20 内圈 10 的月环,图形值为 0x10000|int((10/20)*0xffff) (scale为 [20,1,20] ) |
0x2 |
特殊值 |
矩形,参数为1时前后镜像,参数为2时,在1的基础上另外绘画一个90度旋转的矩形(交叉) |
0x5 |
角度(单位deg) |
扇形,如果需要角度为20的扇形,图形值为 0x50000|20 |
- 类型:
any
- 描述:设为创建时的数值,而不是即时数值
- 类型:
any
- 描述:获取
foreach
赋值的变量
参数 |
类型 |
描述 |
name |
string |
获取变量的名字 |
- 类型:
number
- 描述:当前图形的进度,为 0-1 之间的值
- 类型:
1/0
- 描述:当前图形是否在xz轴上覆盖某个坐标
参数 |
类型 |
描述 |
pos |
number[3] |
查询坐标 |
- 类型:
number
- 描述:当前图形覆盖了多少个actor
参数 |
类型 |
描述 |
ids |
number[] |
actor id 列表 |
- 类型:
any
- 描述:输入python表达式并获取返回 (本特殊值未来可能因为安全原因弃用,请避免使用)
参数 |
类型 |
描述 |
code |
string |
python表达式 |
args |
map[str,any] |
表达式用到的变量 |
- 类型:
number[3]
- 描述:返回对应实体的位置
参数 |
类型 |
描述 |
id |
number |
实体id |
status_id |
number |
状态id |
source_id |
number |
来源id,可选 |
- 类型:
number
- 描述:返回角色某状态的剩余时间,无则为0
参数 |
类型 |
描述 |
id |
number |
实体id |
status_id |
number |
状态id |
source_id |
number |
来源id,可选 |
- 类型:
number
- 描述:返回角色某状态的参数,无则为0
参数 |
类型 |
描述 |
id |
number |
实体id |
status_id |
number |
状态id |
source_id |
number |
来源id,可选 |
- 类型:
number
- 描述:返回角色某状态的来源id,无则为0
参数 |
类型 |
描述 |
id |
number |
实体id |
status_id |
number |
状态id |
- 类型:
1/0
- 描述:该id对应的实体是否能被选中
参数 |
类型 |
描述 |
a1 |
number |
实体a的id |
a2 |
number |
实体b的id |
关键字:player_by_distance_idx
- 类型: number
- 描述:根据与某实体的距离排序所有玩家并返回指定index的角色id(可能造成性能负担,谨慎使用)
参数 |
类型 |
描述 |
src |
number |
指定实体的id |
idx |
number |
查询index |
关键字:actor_relative_facing
- 类型: number
- 描述:src实体看向dst实体时的面向
参数 |
类型 |
描述 |
src |
number |
来源实体的id |
dst |
number |
目标实体的id |
- 类型: any
- 描述:尝试返回
expr
值,如果出现任意错误则返回 default
值
参数 |
类型 |
描述 |
expr |
any |
表达式 |
default |
any |
默认值 |
- 类型: any
- 描述:如果
cond!=0
,返回true
,否则返回false
参数 |
类型 |
描述 |
cond |
any |
判断式 |
true |
any |
真值 |
false |
any |
假值 |
参数 |
类型 |
描述 |
v1 |
any |
数值1 |
v2 |
any |
数值2 |
参数 |
类型 |
描述 |
v1 |
any |
数值1 |
v2 |
any |
数值2 |
参数 |
类型 |
描述 |
v1 |
any |
数值1 |
v2 |
any |
数值2 |
参数 |
类型 |
描述 |
v1 |
any |
数值1 |
v2 |
any |
数值2 |
- 类型:
number
- 描述:返回
values
的总和(可以用于相加2/3/4元组)
参数 |
类型 |
描述 |
values |
number[] |
数值 |
- 类型:
number
- 描述:返回
values
的总乘
参数 |
类型 |
描述 |
values |
number[] |
数值 |
- 类型:
number
- 描述:返回
values
的总除
参数 |
类型 |
描述 |
values |
number[] |
数值 |
- 类型:
number
- 描述:返回
values
的最小值
参数 |
类型 |
描述 |
values |
number[] |
数值 |
- 类型:
number
- 描述:返回
values
的最大值
参数 |
类型 |
描述 |
values |
number[] |
数值 |
- 类型:
string
- 描述:
format
.format(*args
)
参数 |
类型 |
描述 |
format |
string |
格式 |
args |
any[] |
数值 |
- 类型:
(number, number[3])
- 描述:用于
shape_scale
的特殊值,表述圆形
- 类型:
(number, number[3])
- 描述:用于
shape_scale
的特殊值,表述扇形
参数 |
类型 |
描述 |
deg |
number |
扇形角度 |
range |
number |
半径 |
- 类型:
(number, number[3])
- 描述:用于
shape_scale
的特殊值,表述环形
参数 |
类型 |
描述 |
inner |
number |
内圈半径 |
range |
number |
外圈半径 |
- 类型:
(number, number[3])
- 描述:用于
shape_scale
的特殊值,表述矩形
参数 |
类型 |
描述 |
width |
number |
宽度 |
range |
number |
长度 |
- 类型:
(number, number[3])
- 描述:用于
shape_scale
的特殊值,表述十字
参数 |
类型 |
描述 |
width |
number |
宽度 |
range |
number |
长度 |
- 类型:
(number, number[3])
- 描述:用于
shape_scale
的特殊值,表述某技能的形状(本接口无法判断扇形角度及月环内圈,统一输出90度扇形和50%月环)
- 类型:
None
- 描述:用于
shape_scale
或 shape
的特殊值,会返回0并将omen销毁
- 类型:
number[]
- 描述:返回符合 actor_type 的 id 列表
参数 |
类型 |
描述 |
type |
number |
1:玩家,2:战斗npc,3:事件npc |
- 类型:
number[]
- 描述:返回符合 base_id 的 id 列表
参数 |
类型 |
描述 |
id |
number |
base_id |
- 类型:
number[]
- 描述:返回队伍中所有人的id
参数 |
类型 |
描述 |
val |
number |
返回的倍数 |
- 类型:
number
- 描述:在rad和deg间转换
参数 |
类型 |
描述 |
rad |
number |
优先判断,将rad转换为deg |
deg |
number |
如果rad为空,将deg转换为rad |
- 编写python模块置于plugins文件夹中,会自动导入
update(main:FFDraw)->any
每帧调用,一般用于直接调用gui进行绘制
process_command(command:dict)->bool
httpapi在找不到指令cmd时调用,返回true为已处理