版本更新

This commit is contained in:
南沢响也 committed 2026-05-16 01:53:52 +08:00
1 parent 780c8e54c6
commit 8251a7d3f4
3 files changed
+118 -9

No files matched your search

+3 -3
View File
@@ -957,12 +957,12 @@
{
"Name": "PVP技能绘制",
"Guid": "070e161a-26e9-4a57-8b19-da8c4201058c",
"Version": "0.0.0.6",
"Version": "0.0.0.7",
"Author": "Tetora",
"Repo": "https://github.com/Hibiya615/TetoraKAScript/tree/main",
"DownloadUrl": "https://raw.githubusercontent.com/Hibiya615/TetoraKAScript/refs/heads/main/PVP/PVPAction.cs",
"Note": "v0.0.0.6:\r\nPVP技能绘制,全部地图可用,未做任何区域限制。\r\n推荐先自己过一遍设置把不需要的关闭\r\n改完用户设置的数值记得点保存!保存!\r\n【仅适用敌方目标标记】是用于四小的,因为一般都会给四小标头标x",
"UpdateInfo": "API15",
"Note": "v0.0.0.7:\r\nPVP技能绘制,全部地图可用,未做任何区域限制。\r\n推荐先自己过一遍设置把不需要的关闭\r\n改完用户设置的数值记得点保存!保存!\r\n【仅适用敌方目标标记】是用于四小的,因为一般都会给四小标头标x",
"UpdateInfo": "追加舞者镰刀LB范围预测",
"TerritoryIds": []
},
{
+96 -3
View File
@@ -22,17 +22,18 @@ using FFXIVClientStructs.FFXIV.Client.Game.UI;
namespace PVPAction;
[ScriptType(guid: "070e161a-26e9-4a57-8b19-da8c4201058c", name: "PVP技能绘制", territorys: [],
version: "0.0.0.6", author: "Tetora", note: noteStr)]
version: "0.0.0.7", author: "Tetora", note: noteStr)]
public class PVPTAction
{
const string noteStr =
"""
v0.0.0.6:
v0.0.0.7:
PVP技能绘制,全部地图可用,未做任何区域限制。
推荐先自己过一遍设置把不需要的关闭
改完用户设置的数值记得点保存!保存!
【仅适用敌方目标标记】是用于四小的,因为一般都会给四小标头标x
【瞬发技能范围预测】需要手动使用宏触发
""";
#region 基础控制
@@ -50,11 +51,20 @@ public class PVPTAction
public bool isOnlyMark { get; set; } = false;
[UserSetting("自身部分技能颜色(如圣盾阵)")]
public ScriptColor SelfAOEColor { get; set; } = new() { V4 = new(0f, 1f, 1f, 1f) };
public ScriptColor SelfAOEColor { get; set; } = new() { V4 = new(1f, 0f, 1f, 1f) };
[UserSetting("自身部分技能填充亮度(推荐小于1)")]
public float SelfAOEFillBrightness { get; set; } = 0.4f;
[UserSetting("自身控制技能预测颜色(如行列舞)")]
public ScriptColor SelfCompulsoryControlColor { get; set; } = new() { V4 = new(1f, 0f, 0f, 10f) };
[UserSetting("自身控制技能预测填充亮度(推荐小于1)")]
public float SelfCompulsoryControlFillBrightness { get; set; } = 0f;
[UserSetting("自身控制技能预测显示时间(ms)")]
public int MoveActionsTime { get; set; } = 10000;
[UserSetting("敌方部分技能颜色(如占星、诗人LB)")]
public ScriptColor EnmityAOEColor { get; set; } = new() { V4 = new(1f, 0f, 1f, 1f) };
@@ -674,6 +684,89 @@ public class PVPTAction
#endregion
#region 舞者
[ScriptMethod(name: "———————— 舞者 ————————", eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:"])]
public void 舞者 (Event @event, ScriptAccessory accessory) { }
[ScriptMethod(name: "行列舞预测描边 [ 触发宏: /e 15mCompulsoryControl ]", eventType: EventTypeEnum.Chat, eventCondition: ["Type:Echo", "Message:regex:^15mCompulsoryControl$"])]
public void 行列舞预测描边 (Event @event, ScriptAccessory accessory)
{
var dp = accessory.Data.GetDefaultDrawProperties();
dp.Name = "行列舞预测描边";
dp.Scale = new Vector2(15f);
dp.InnerScale = new Vector2(14.9f);
dp.Owner = accessory.Data.Me;
dp.Color = SelfCompulsoryControlColor.V4.WithW(10f);
dp.Radian = float.Pi * 2;
dp.DestoryAt = MoveActionsTime;
accessory.Method.SendDraw(DrawModeEnum.Default, DrawTypeEnum.Donut, dp);
}
[ScriptMethod(name: "行列舞预测填充 [ 填充亮度在用户设置 ]", eventType: EventTypeEnum.Chat, eventCondition: ["Type:Echo", "Message:regex:^15mCompulsoryControl$"])]
public void 行列舞预测填充 (Event @event, ScriptAccessory accessory)
{
var dp = accessory.Data.GetDefaultDrawProperties();
dp.Name = "行列舞预测填充";
dp.Scale = new Vector2(15f);
dp.Owner = accessory.Data.Me;
dp.Color = SelfCompulsoryControlColor.V4.WithW(SelfCompulsoryControlFillBrightness);
dp.DestoryAt = MoveActionsTime;
accessory.Method.SendDraw(DrawModeEnum.Default, DrawTypeEnum.Circle, dp);
}
[ScriptMethod(name: "行列舞触发销毁", eventType: EventTypeEnum.ActionEffect, eventCondition: ["ActionId:regex:^29432$"],userControl: false)]
public void 行列舞销毁(Event @event, ScriptAccessory accessory)
{
if (@event.TargetId() != accessory.Data.Me) return;
accessory.Method.RemoveDraw($"行列舞预测.*");
}
#endregion
#region 镰刀
[ScriptMethod(name: "———————— 镰刀 ————————", eventType: EventTypeEnum.StartCasting, eventCondition: ["ActionId:"])]
public void 镰刀 (Event @event, ScriptAccessory accessory) { }
[ScriptMethod(name: "暗夜游魂预测描边 [ 触发宏: /e 10mCompulsoryControl ]", eventType: EventTypeEnum.Chat, eventCondition: ["Type:Echo", "Message:regex:^10mCompulsoryControl$"])]
public void 暗夜游魂预测描边 (Event @event, ScriptAccessory accessory)
{
var dp = accessory.Data.GetDefaultDrawProperties();
dp.Name = "暗夜游魂预测描边";
dp.Scale = new Vector2(10f);
dp.InnerScale = new Vector2(9.94f);
dp.Owner = accessory.Data.Me;
dp.Color = SelfCompulsoryControlColor.V4.WithW(10f);
dp.Radian = float.Pi * 2;
dp.DestoryAt = MoveActionsTime;
accessory.Method.SendDraw(DrawModeEnum.Default, DrawTypeEnum.Donut, dp);
}
[ScriptMethod(name: "暗夜游魂预测填充 [ 填充亮度在用户设置 ]", eventType: EventTypeEnum.Chat, eventCondition: ["Type:Echo", "Message:regex:^10mCompulsoryControl$"])]
public void 暗夜游魂预测填充 (Event @event, ScriptAccessory accessory)
{
var dp = accessory.Data.GetDefaultDrawProperties();
dp.Name = "暗夜游魂预测填充";
dp.Scale = new Vector2(10f);
dp.Owner = accessory.Data.Me;
dp.Color = SelfCompulsoryControlColor.V4.WithW(SelfCompulsoryControlFillBrightness);
dp.DestoryAt = MoveActionsTime;
accessory.Method.SendDraw(DrawModeEnum.Default, DrawTypeEnum.Circle, dp);
}
[ScriptMethod(name: "暗夜游魂触发销毁", eventType: EventTypeEnum.ActionEffect, eventCondition: ["ActionId:regex:^29553$"],userControl: false)]
public void 暗夜游魂销毁(Event @event, ScriptAccessory accessory)
{
if (@event.TargetId() != accessory.Data.Me) return;
accessory.Method.RemoveDraw($"暗夜游魂预测.*");
}
#endregion
}
public static class EventExtensions
+19 -3
View File
@@ -141,10 +141,17 @@ public class PVPToy
if (@event.TargetId() != accessory.Data.Me) return;
if (ActionExt.IsSpellReady(29054) && !IbcHelper.HasStatus(accessory, accessory.Data.MyObject, 0xBEE))
{
string sourceName = @event["SourceName"]?.ToString();
if (isText) accessory.Method.TextInfo("已尝试自动使用《防御》", duration: 1800, true);
accessory.Method.SendChat($"/pvpac 防御");
accessory.Method.SendChat($"/e 侦测到被狙!鸭鸭试着帮你开了盾!<se.1> <se.1>");
accessory.Method.SendChat($"/e 侦测到被《{sourceName}》狙了!鸭鸭试着帮你开了盾!<se.1> <se.1>");
}
/*
if (!string.IsNullOrEmpty(sourceName))
{
accessory.Method.SendChat($"/e 就是《{sourceName}》把你狙了!");
}
*/
}
[ScriptMethod(name: "被战士抓自动防御", eventType: EventTypeEnum.ActionEffect, eventCondition: ["ActionId:29081"])]
@@ -155,14 +162,23 @@ public class PVPToy
{
if (@event.TargetId() != accessory.Data.Me) return;
if (ActionExt.IsSpellReady(29054) && !IbcHelper.HasStatus(accessory, accessory.Data.MyObject, 0xBEE))
{
{
string sourceName = @event["SourceName"]?.ToString();
if (isText) accessory.Method.TextInfo("已尝试自动使用《防御》", duration: 1800, true);
accessory.Method.SendChat($"/pvpac 防御");
accessory.Method.SendChat($"/e 侦测到被战士抓了!鸭鸭试着帮你进行了防御!<se.3> <se.3>");
accessory.Method.SendChat($"/e 侦测到被战士《{sourceName}》抓了!鸭鸭试着帮你进行了防御!<se.3> <se.3>");
}
}
}
[ScriptMethod(name: "谁踹的我.jpg", eventType: EventTypeEnum.ActionEffect, eventCondition: ["ActionId:29485"])]
public void WhoMeteorImpactMe(Event @event, ScriptAccessory accessory)
{
if (@event.TargetId() != accessory.Data.Me) return;
string sourceName = @event["SourceName"]?.ToString();
accessory.Method.SendChat($"/e 鸭鸭:就是武僧《{sourceName}》踹的你! <se.2>");
}
[ScriptMethod(name: "对方诗人LB播报", eventType: EventTypeEnum.ActionEffect, eventCondition: ["ActionId:29401"],suppress:3000)]
public void FinalFantasiaTTS(Event @event, ScriptAccessory accessory)
{