overlord 发表于 2007-3-8 16:51:26

回复: 请教安完C4后在屏幕显示这个队员得ID!!!!

说白了呢 我编这些代码很困难 我只是凭自己以前得开发经验来些插件得


#include <amxmodx>
#include <amxmisc>
#include <csx>
public plugin_init()
{
register_plugin("Change to Knife", "1.0", "nuo")
register_logevent("logevent_function_p", 3, "2=Planted_The_Bomb") //这里是注册在安装玩C4后执行
register_clcmd("lastinv","hook_Q", 0, "hook key Q" ) //这个是注册在判断按Q时执行
}
public logevent_function_p
{
}
public hook_Q   
{
}


现在时我想在logevent_function_p这里得到安装C4玩家得ID然后在进入hook_Q里判断这个玩家按Q得时候是不是没有任何武器了      就是这样得代码我写不出来      我不了解程序是如何执行得   不了解在logevent_function_p执行后   也就是说在玩家安装C4后是否就执行hook_Q这里   还是说不管玩家是否安装了C4都会执行hook_Q      这个是我不明白得   我也想找些资料    但是这类得资料真得是有限    而且对我来说看英文得资料是很难理解得   所以才到这里问问    可能是我得问题太肤浅   但是我真得是没有办法    懂这些语言得人更是少   真不知道如何才能学好这门语言   :burn:

jop 发表于 2007-3-8 21:15:43

回复: 请教安完C4后在屏幕显示这个队员得ID!!!!


#include <amxmodx>
#include <amxmisc>
#include <csx>

public plugin_init()
{
   register_plugin("Change to Knife", "1.0", "nuo")
   register_logevent("logevent_function_p", 3, "2=Planted_The_Bomb") //这里是注册在安装玩C4后执行
   register_clcmd("lastinv","hook_Q", 0, "hook key Q" ) //这个是注册在判断按Q时执行
}

// 注册日志事件,当事件发生时被执行,也就是按放C4后被执行一次
public logevent_function_p()
{
   // 这是日志事件,player id 我们可以从日志里获得
   new szLoguser, szName
   read_logargv(0, szLoguser, 79)
   parse_loguser(szLoguser, szName, 31)
   new id = get_user_index(szName) // 获得 id

}

// 注册玩家命令事件,当玩家(id)执行此命令时被执行
public hook_Q(id)
{
}


有一点,可能楼主搞错了,当玩家放好C4后,手里不会没有武器的
一般是主枪/手枪,如果没有枪,也会是雷/刀等。
两个事件执行没有一点联系,不太明白你要的功能。

注册的事件都是当事件发生时被自动执行的
例如 hook_Q(id) 玩家任何时候按Q键,都会被执行一次,
执行时传送的 id 就是按下Q键的玩家

另外,如果使用了 <csx> 模块,可以使用(详见 csx.inc)

// 当事件发生时系统自动执行,也就是按放C4后被执行一次
public bomb_planted(planter)
{
}

用来代替注册日志事件的所有代码,这种 forward 系统自动执行的函数,名字不能改变。

apocalyptic 发表于 2007-3-8 22:33:12

回复: 请教安完C4后在屏幕显示这个队员得ID!!!!

Post by overlord
我想在按C4的同时或按完C4做这样的判断
还有planter是指安装C4玩家的ID吗
请多指教点 谢谢

是,取值范围是1~32的自然数。

overlord 发表于 2007-3-9 08:19:06

回复: 请教安完C4后在屏幕显示这个队员得ID!!!!

我想判断这个玩家是否只有刀或只有刀和C4 有什么简单得判断方法吗

还是只有类似这样得方法判断
stock bool:block_weapon(wpn)
{
switch(wpn)
{
// 没有注释掉的这个禁止使用
case CSW_P228: return true
case CSW_SCOUT: return true
// 这个被注释掉的手雷,不禁止使用
//case CSW_HEGRENADE: return true
case CSW_XM1014: return true
case CSW_MAC10: return true
case CSW_AUG: return true
case CSW_SMOKEGRENADE: return true
//case CSW_ELITE: return true
//case CSW_FIVESEVEN: return true
case CSW_UMP45: return true
case CSW_SG550: return true
case CSW_GALI: return true
case CSW_FAMAS: return true
//case CSW_USP: return true
//case CSW_GLOCK18: return true
case CSW_AWP: return true
case CSW_MP5NAVY: return true
case CSW_M249: return true
//case CSW_M3: return true
case CSW_M4A1: return true
//case CSW_TMP: return true
case CSW_G3SG1: return true
//case CSW_FLASHBANG: return true
//case CSW_DEAGLE: return true
case CSW_SG552: return true
case CSW_AK47: return true
case CSW_P90: return true
}
return false
}


谢谢各位得帮助 谢谢

overlord 发表于 2007-3-9 08:46:15

回复: 请教安完C4后在屏幕显示这个队员得ID!!!!

在问一下get_user_weapon    和get_user_weapons得区别在那里   


我想这两个函数应该可以有一个能统计出   当前玩家有多少武器得

如果我判断出只有1个或2个得时候在进行判断就方便多了   

请指教

overlord 发表于 2007-3-9 09:20:02

回复: 请教安完C4后在屏幕显示这个队员得ID!!!!

#include <amxmodx>
#include <amxmisc>
#include <csx>

public plugin_init()
{
register_plugin("Change to Knife", "1.0", "nuo")
//register_logevent("logevent_function_p", 3, "2=Planted_The_Bomb") //这里是注册在安装玩C4后执行
register_clcmd("lastinv","hook_Q", 0, "hook key Q" ) //这个是注册在判断按Q时执行
}

// 注册日志事件,当事件发生时被执行,也就是按放C4后被执行一次
public hook_Q(id)
{
new szLoguser, szName
read_logargv(0, szLoguser, 79)
parse_loguser(szLoguser, szName, 31)
new id = get_user_index(szName) // 获得 id
new Weapons
new numWeapons,weapon
get_user_weapons(id, Weapons, numWeapons)
if (numWeapons<=2) //判断是否少于2种武器
{
for(new i=0;i<numWeapons;i++)
{
if(Weapons==CSW_C4) //如果有一个是C4的话 按Q就切换成刀
{
engclient_cmd(id, "weapon_knife")
return PLUGIN_HANDLED
}
}
}
else return PLUGIN_CONTINUE
}

根据我目前的水平暂时只能写出这些但发现一些错误 不知道错在哪里 请指教一下

jop 发表于 2007-3-9 13:54:47

回复: 请教安完C4后在屏幕显示这个队员得ID!!!!

   new szLoguser, szName
   read_logargv(0, szLoguser, 79)
   parse_loguser(szLoguser, szName, 31)
   new id = get_user_index(szName) // 获得 id
// 这段多余的,这是日志事件才需要
// 玩家命令事件会自动传送id

weapon // 没有使用?多余的

public hook_Q(id)
{

//函数的最后面需要返回值
return PLUGIN_CONTINUE
}

不错,整体没有大问题,只是一些处理过程好像不很合理--
如果像上面的代码,玩家只要有C4在身上,但当前武器并非C4时,按Q也会切换为刀,不知是否你的原意?

//如果只是需要当玩家手持C4时,按Q才切换为刀时,可以这样做(方法之一)

#include <amxmodx>
#include <amxmisc>

public plugin_init()
{
   register_plugin("Change to Knife", "1.0", "nuo")
   register_clcmd("lastinv","hook_Q", 0, "hook key Q" ) //这个是注册在判断按Q时执行
}

// 注册日志事件,当事件发生时被执行,也就是按放C4后被执行一次
public hook_Q(id)
{
   // 玩家当前手持武器不是C4?仔细看代码 No sXe 插件
   // 添上判断当前武器代码。。。。
   {
      engclient_cmd(id, "weapon_knife") // 强制换为刀
      return PLUGIN_HANDLED // 换为刀后,返回 PLUGIN_HANDLED 屏蔽Q键的切换
   }
   return PLUGIN_CONTINUE // 其他情况,让事件正常运作
}

overlord 发表于 2007-3-9 14:08:39

回复: 请教安完C4后在屏幕显示这个队员得ID!!!!

先谢谢Jop对我的帮助

我现在要做的是我要判断出玩家没有任何武器 只有C4和刀 或者只有刀的时候

只有这个时候按Q才切换成刀
#include <amxmodx>
#include <amxmisc>

public plugin_init()
{
   register_plugin("Change to Knife", "1.0", "nuo")
   register_clcmd("lastinv","hook_Q", 0, "hook key Q" ) //这个是注册在判断按Q时执行
}

// 注册日志事件,当事件发生时被执行,也就是按放C4后被执行一次
public hook_Q(id)
{
   // 玩家当前手持武器不是C4?仔细看代码 No sXe 插件
   // 添上判断当前武器代码。。。。
    new Weapons
new numWeapons
get_user_weapons(id, Weapons, numWeapons)
if (numWeapons<=2)    //判断是否少于2种武器
{
for(new i=0;i<numWeapons;i++)
{
   if(Weapons==CSW_C4)    //如果有一个是C4的话按Q就切换成刀
   {
    engclient_cmd(id, "weapon_knife")
    return PLUGIN_HANDLED
   }
}
}
return PLUGIN_CONTINUE // 其他情况,让事件正常运作
}

这样写怎么还有错误loose indentation这个错误什么意思

jop 发表于 2007-3-9 14:19:06

回复: 请教安完C4后在屏幕显示这个队员得ID!!!!

上下文没有对齐,不会有影响的

但好的习惯是代码每一节都需要区分并且,同一节需要对齐,方便检查。。

public test()
{
    if (ok==0)
    {
      // .....
      // ....
    }
}

overlord 发表于 2007-3-9 14:26:22

回复: 请教安完C4后在屏幕显示这个队员得ID!!!!

运行过去了    原来是我开始是用记事本写的    里面加了不少的空格

现在我重新弄了一下    用UE弄的    哈哈

谢谢   我去试试   看是不是我想要的效果   

谢谢你
页: 1 [2] 3
查看完整版本: 请教安完C4后在屏幕显示这个队员得ID!!!!