HearthBuddy Plugin编写遇到的问题
错误1 赋值问题
貌似编译器版本有点低,无法识别C#的高级语法糖
属性的初始值,必须是public bool IsEnabled { get{return true;} }
不能写成public bool IsEnabled { get; }=true;
Control
Compiler Error: \Plugins\AutoConcede\AutoConcede.cs(75,38) :
error CS0840: 'AutoConcede.AutoConcede.Control.get' must declare a body because it is not marked abstract or extern. Automatically implemented properties must define both get and set accessors.
Compiler Error: c:\Users\clu\Desktop\Hearthbuddy 0.3.1446.417\Plugins\AutoConcede\AutoConcede.cs(76,40) : error CS0840: 'AutoConcede.AutoConcede.Settings.get' must declare a body because it is not marked abstract or extern. Automatically implemented properties must define both get and set accessors.
2019-07-16 14:22:58,834 [14] DEBUG Logger (null) - [AutoConcede] Initialize
自动投降不工作,提示是
2019-07-16 15:10:03,568 [5] INFO Logger (null) - [Concede] GameState == null.
2019
public static bool Concede(bool logReason) { bool result; try { if (GameState.Get() == null) { if (logReason) { TritonHs.ilog_0.InfoFormat("[Concede] GameState == null.", Array.Empty<object>()); } result = false; } else if (!GameUtils.CanConcedeCurrentMission()) { TritonHs.ilog_0.InfoFormat("[Concede] !GameUtils.CanConcedeCurrentMission().", Array.Empty<object>()); result = false; } else { GameState.Get().Concede(); using (TritonHs.Memory.ReleaseFrame(true)) { Thread.Sleep(1000); } result = true; } } catch (Exception ex) { if (logReason) { TritonHs.ilog_0.InfoFormat("[Concede] An exception occurred. {0}", ex.ToString()); } result = false; } return result; }
关于在选牌阶段,以及回合开始投降
https://tieba.baidu.com/p/5929349383?red_tag=2707770290
Hearthbuddy\Routines\DefaultRoutine\DefaultRoutine.cs
public async Task MulliganLogic(MulliganData mulliganData)
public async Task OurTurnLogic()
DefaultRoutine继承了Triton.Bot.IRoutine接口
public interface IRoutine : IRunnable, IAuthored, IBase, IConfigurable { // Token: 0x06001185 RID: 4485 void SetConfiguration(string name, params object[] param); // Token: 0x06001186 RID: 4486 object GetConfiguration(string name); // Token: 0x06001187 RID: 4487 Task<bool> Logic(string type, object context); }
主要逻辑的入口,都是在Logic函数里面
/// <summary> /// The routine's coroutine logic to execute. /// </summary> /// <param name="type">The requested type of logic to execute.</param> /// <param name="context">Data sent to the routine from the bot for the current logic.</param> /// <returns>true if logic was executed to handle this type and false otherwise.</returns> public async Task<bool> Logic(string type, object context) { // The bot is requesting mulligan logic. if (type == "mulligan") { await MulliganLogic(context as MulliganData); return true; } // The bot is requesting emote logic. if (type == "emote") { await EmoteLogic(context as EmoteData); return true; } // The bot is requesting our turn logic. if (type == "our_turn") { await OurTurnLogic(); return true; } // The bot is requesting opponent turn logic. if (type == "opponent_turn") { await OpponentTurnLogic(); return true; } // The bot is requesting our turn logic. if (type == "our_turn_combat") { await OurTurnCombatLogic(); return true; } // The bot is requesting opponent turn logic. if (type == "opponent_turn_combat") { await OpponentTurnCombatLogic(); return true; } // The bot is requesting arena draft logic. if (type == "arena_draft") { await ArenaDraftLogic(context as ArenaDraftData); return true; } // The bot is requesting quest handling logic. if (type == "handle_quests") { await HandleQuestsLogic(context as QuestData); return true; } // Whatever the current logic type is, this routine doesn't implement it. return false; }
无法识别Object,必须改成小写的object
如何确定插件是否加载成功
查看plugins的tab那边是否显示了相应的插件,如果没有显示,就说明插件编译失败。可以去日志文件看细节
需要依据GameEventManager 中的事件,来决定如何写代码
public class GameEventManager : IRunnable, IResetable
2019-07-17 11:51:33,227 [19] DEBUG Logger (null) - [AutoConcede] ConcedeThread for loop, index = 1
2019-07-17 11:51:33,228 [14] INFO Logger (null) - [GameEventManagerOnMulliganConfirm]
2019-07-17 11:51:49,782 [14] ERROR Logger (null) - [Tick] Exception during execution:
GreyMagic.InjectionDesyncException: Process must have frozen or gotten out of sync: Injection Finished Event was never fired
at GreyMagic.Executor.WaitForInjection(Int32 timeout)
at GreyMagic.Executor.SharedExecuteLogicEnd(Int32 timeout)
at GreyMagic.Executor.Execute(Int32 timeout)
at GreyMagic.Executor.GrabFrame()
at GreyMagic.ExternalProcessMemory.AcquireFrame(Boolean isHardLock)
at Triton.Bot.BotManager.smethod_1(IBot ibot_1)
2019-07-17 11:51:49,785 [14] DEBUG Logger (null) - [BotThreadFunction] An InjectionDesyncException was detected.
作者:Chuck Lu GitHub |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2015-07-16 WCF Host中的BaseAddress 和 Endpoint中的Address的区别
2015-07-16 使用vs自带的wcf配置工具
2015-07-16 Automatic Code Generation-->Implement Interface
2015-07-16 Learning WCF Chapter1 Exposing Multiple Service Endpoints
2015-07-16 无法自动调试 未能调试远程过程。这通常说明未在服务器上启用调试 WCF 托管在IIS上
2015-07-16 ServiceModel Metadata Utility Tool (Svcutil.exe)