【代码分享】CS2 按 G丢枪事件hook 代码鉴赏 教学 科普 CS2

我不当学长 管理员组 5天前 58

总结下来有2种,From@花青绿老师:

1. 使用签名然后外加代码hook

// 签名
"DropWeaponCommandHandler": {
    "signatures": {
      "library": "server",
      "windows": "48 89 74 24 20 57 41 54 41 57 48 83 EC 40 45 0F B6 F8",
      "linux": "55 48 89 E5 41 57 41 56 41 55 41 89 D5 41 54 53 48 89 FB"
    }
  }

代码:

private MemoryFunctionWithReturn<nint, nint, nint> DropWeaponCommandHandler_Func_Linux = new MemoryFunctionWithReturn<nint, nint, nint>(GameData.GetSignature("DropWeaponCommandHandler"));
  private MemoryFunctionWithReturn<nint, nint, bool> DropWeaponCommandHandler_Func_Windows = new MemoryFunctionWithReturn<nint, nint, bool>(GameData.GetSignature("DropWeaponCommandHandler"));


  public HookResult Handler(DynamicHook hook)
  {
    var weaponServices = new CCSPlayer_WeaponServices(hook.GetParam<nint>(0));
    Console.WriteLine(weaponServices.Pawn.Value.Controller.Value.PlayerName);
    return HookResult.Stop;
  }
  public override void Load(bool hotReload)
  {
    if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
    {
      DropWeaponCommandHandler_Func_Windows.Hook(Handler, HookMode.Pre);
    }
    else
    {
      DropWeaponCommandHandler_Func_Linux.Hook(Handler, HookMode.Pre);
    };
  }

  public override void Unload(bool hotReload)
  {
    if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
    {
      DropWeaponCommandHandler_Func_Windows.Unhook(Handler, HookMode.Pre);
    }
    else
    {
      DropWeaponCommandHandler_Func_Linux.Unhook(Handler, HookMode.Pre);
    };
  }


2. 通过usermessage获取到(仅能获取ui信息,但无法阻止用户丢枪

HookUserMessage(124, (msg) =>

// 124 来源:GameTracking-CS2/Protobufs/usermessages.proto at master · SteamDatabase/GameTracking-CS2

// UM_TextMsg = 124;
    {
      var info = msg.ReadString("param", 0);
      if (info == "#SFUI_Notice_CannotDropWeapon" || info == "#SFUI_Notice_YouDroppedWeapon" || info == "#SFUI_Notice_CannotDropWeaponDuringWarmup")
      {
        Console.WriteLine("触发G键");
      }
      return HookResult.Continue;
    }, HookMode.Pre);


CSGO插件分享-申明 1、本网站名称:CSGO插件分享-中文站  网址:https://bbs.csgocn.net
2、本站的宗旨在于为CSGO玩家提供一个插件分享的中文资源平台,多数插件来源于SourceMod论坛,并配以中文介绍和安装教程。
3、欢迎有能力的朋友共享有趣的CSGO插件资源。
4、本站资源大多为百度网盘,如发现链接失效,可以点: 这里进行反馈,我们会第一时间更新。
最新回复 (0)
返回