• HearthBuddy Plugin编写遇到的问题


    错误1 赋值问题

    貌似编译器版本有点低,无法识别C#的高级语法糖

    属性的初始值,必须是public bool IsEnabled { get{return true;} }

    不能写成public bool IsEnabled { get; }=true;

    Control

    Compiler Error: PluginsAutoConcedeAutoConcede.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:UserscluDesktopHearthbuddy 0.3.1446.417PluginsAutoConcedeAutoConcede.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

    HearthbuddyRoutinesDefaultRoutineDefaultRoutine.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.

  • 相关阅读:
    .net remoting 事件调用循环处理中重复返回的问题.
    MySQL5.7.29winx64解压缩版安装
    IntelliJ IDEA下SVN的配置及使用说明
    navicat12.0.26如何激活
    sql优化的几种方式
    mysql导入文件出现Data truncated for column 'xxx' at row 1的原因
    MessageFormat.format()用法
    idea提交svn不显示新建文件
    后端Long类型传到前端精度丢失的正确解决方式
    在IDEA中的cannot_resolve_method解决方法
  • 原文地址:https://www.cnblogs.com/chucklu/p/11197876.html
Copyright © 2020-2023  润新知