【代码鉴赏】每回合将所有玩家手上的武器全部清空 代码鉴赏

我不当学长 管理员组 2022-7-25 1067

开发知识点:

  • HookEvent事件
  • 移除玩家武器

代码赏析:

public void OnPluginStart()
{
	HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy); //Hook每回合开始事件
	HookEvent("player_spawn",Event_Spawn); //Hook玩家重生事件
}

public void Event_RoundStart(Event event, const char[] name, bool dontBroadcast)
{
	for (int i = 1; i < MAXPLAYERS; i++) {
        if (IsClientInGame(i) && IsPlayerAlive(i)) {
            StripWeapons(i);//删除武器
        }
    }
}

public void Event_Spawn(Event event, const char[] name, bool dontBroadcast)
{
	RequestFrame(RequestFrame_Callback, event.GetInt("userid"));
}

public void RequestFrame_Callback(int client)
{
	if(!(client = GetClientOfUserId(client))) return;

	switch(GetClientTeam(client))
	{
		case Team_T:
		{
			StripWeapons(client); //如果玩家属于T阵营,那么删除玩家当前的武器
			GivePlayerItem(client, "weapon_knife");//给玩家装备上匕首
			return;
		}
	}

//移除武器
stock void StripWeapons(int client)
{
	RemoveWeaponBySlot(client, Slot_Primary); //移除主武器
	RemoveWeaponBySlot(client, Slot_Secondary); //移除服务器
	RemoveWeaponBySlot(client, Slot_Knife); //移除匕首
	while(RemoveWeaponBySlot(client)) {}
}

stock bool RemoveWeaponBySlot(int client, int slot = Slot_Grenade)
{
	int ent = GetPlayerWeaponSlot(client, slot);
	return ent > MaxClients && RemovePlayerItem(client, ent) && AcceptEntityInput(ent, "Kill");
}

参考:

上传的附件:

CSGO插件分享-申明 1、本网站名称:CSGO插件分享-中文站  网址:https://bbs.csgocn.net
2、本站的宗旨在于为CSGO玩家提供一个插件分享的中文资源平台,多数插件来源于SourceMod论坛,并配以中文介绍和安装教程。
3、欢迎有能力的朋友共享有趣的CSGO插件资源。
4、本站资源大多为百度网盘,如发现链接失效,可以点: 这里进行反馈,我们会第一时间更新。
最新回复 (3)
  • 茶糜 一级用户组@Ta 2022-7-26 1
    引用 2
    其实不需要插件,直接改mp_ct_default_primary和mp_t_default_primary以及second  还有手雷和电击枪就可以了,只是刀不能移除
  • salute 赞助用户组@Ta 2022-7-26 1
    引用 3
    Tea社-茶糜 其实不需要插件,直接改mp_ct_default_primary和mp_t_default_primary以及second 还有手雷和电击枪就可以了,只是刀不能移除
    可是这个只适用于pug,在越狱模式中,对于上局存活的玩家仍保留武器,这肯定是不可行的
  • PYDBMH 一级用户组@Ta 2022-7-26 0
    引用 4
    滚来滚去……~(~o ̄▽ ̄)~o  。。。滚来滚去……o~(_△_o~)  ~。。。
返回