Osker Lee 发表于 2008-2-13 21:54:22

关于"cs_reset_user_model"的问题

我的服务器用到了玩家随机更换服装插件(change_skin.amxx),其中有vip,alien4和goomba等模型的服装.我们知道,vip是CS里自带的模型,死亡后模型是可以正常倒地的,而像alien4这样的怪物模型死亡后却会出现尸体无法倒地的问题.

因此,我增加了下面的一段代码:
public eDeathMsg()
{
new victim=read_data(2);
if(is_user_connected(victim))
cs_reset_user_model(victim);
}
public client_death(killer, victim, wpnindex, hitplace, TK)
{
if(wpnindex == CSW_C4 && is_user_connected(victim))
cs_reset_user_model(victim);
}
其实目的就是让玩家死亡后恢复其原来的模型,那么怪物的模型就可以正常地倒地了.不过,我想把这段代码的功能改变一下:

1. 当插件检测到玩家被换上vip服装后,因为vip模型死亡后是可以正常倒地的,因此玩家死亡后就不用执行恢复原来模型的指令(cs_reset_user_model),就让他以vip的模型倒地好了.

2. 如果插件检测到玩家被换上了alien4怪物模型的服装,那么玩家死亡后就执行恢复原来模型的指令(cs_reset_user_model),这样一来玩家死亡后就可以正常地倒地了.

zwfgdlc 发表于 2008-2-13 22:20:52

回复: 关于"cs_reset_user_model"的问题

先用cs_get_user_model()函数获取到死亡玩家的模型,判断模型是alien4就执行cs_reset_user_model()

Osker Lee 发表于 2008-2-13 22:36:45

回复: 关于"cs_reset_user_model"的问题

就是说以"cs_get_user_model(vip)"或"cs_get_user_model(alien4)"的形式来检测玩家的模型吗?

zwfgdlc 发表于 2008-2-13 22:55:44

回复: 关于"cs_reset_user_model"的问题


public eDeathMsg()
{
new victim=read_data(2);
new model
cs_get_user_model(victim,model,31)
if(is_user_connected(victim)&&equal(model,"alien4"))
cs_reset_user_model(victim);
}
不知道行不行,不行就把equal(model,"alien4")改成contain(model,"alien4")!=-1

Osker Lee 发表于 2008-2-14 14:06:01

回复: 关于"cs_reset_user_model"的问题

public eDeathMsg()
{
new victim=read_data(2);
new model
cs_get_user_model(victim,model,31)
if(is_user_connected(victim)&&equal(model,"alien4"))
cs_reset_user_model(victim);
}
这样完全可以解决问题! Thanks again!

Osker Lee 发表于 2008-2-14 15:34:20

回复: 关于"cs_reset_user_model"的问题

不知道怎么回事,我把源代码改好后运行插件,发现控制台有debug信息了:
L 02/14/2008 - 15:20:18: Displaying debug trace (plugin "change_skin.amxx")
L 02/14/2008 - 15:20:18: Run time error 4: index out of bounds
L 02/14/2008 - 15:20:18: change_skin.sma::changeSkin (line 88)
L 02/14/2008 - 15:20:18: change_skin.sma::checkALl (line 70)
L 02/14/2008 - 15:20:18: change_skin.sma::roundDelay (line 53)
(?问个题外话:) 对于change_skin这个插件,玩家换服装时,我发现是这样的:开局时,原则上每个玩家都有可能被换服装,但这种概率是随机的.比如,A玩家有可能连续几局都被换服装了,而B玩家则有可能连续几局都没被换服装,主要是看随机概率了.所以,我想问一下:当每局开始时,这个插件的哪些代码是赋予每个玩家一个换服装的概率的呢?

zwfgdlc 发表于 2008-2-14 17:25:24

回复: 关于"cs_reset_user_model"的问题

换服装的概率是由

if( !random(2) || mode==2 )

这行决定的,函数random()随机返回0或1两个数来决定是否给玩家换服装
你最好把修改好的sma文件传上来.

Osker Lee 发表于 2008-2-14 17:51:09

回复: 关于"cs_reset_user_model"的问题


我只用了vip和alien4这两个模型.
new CT_MODEL[]={"vip","alien4"};
new T_MODEL[]={"vip","alien4"};
L 02/14/2008 - 15:20:18: Displaying debug trace (plugin "change_skin.amxx")
L 02/14/2008 - 15:20:18: Run time error 4: index out of bounds
L 02/14/2008 - 15:20:18: change_skin.sma::changeSkin (line 88)
L 02/14/2008 - 15:20:18: change_skin.sma::checkALl (line 70)
L 02/14/2008 - 15:20:18: change_skin.sma::roundDelay (line 53)

zwfgdlc 发表于 2008-2-14 18:18:52

回复: 关于"cs_reset_user_model"的问题

源码似乎不对,是不是你又改过了,提示出错的代码不在日志提示的那行.

Osker Lee 发表于 2008-2-14 18:47:33

回复: 关于"cs_reset_user_model"的问题

对不起,哦,我重新查看了一下,那些debug信息是这样的:
L 02/14/2008 - 18:39:31: Displaying debug trace (plugin "change_skin.amxx")
L 02/14/2008 - 18:39:31: Run time error 4: index out of bounds
L 02/14/2008 - 18:39:31: change_skin.sma::changeSkin (line 82)
L 02/14/2008 - 18:39:31: change_skin.sma::checkALl (line 62)
L 02/14/2008 - 18:39:31: change_skin.sma::roundDelay (line 47)
对了,还有个问题就是,如果我要定义两种或者两种以上的特定模型死亡后执行"cs_reset_user_model"这个指令,是不是可以把代码改成这样:
public eDeathMsg()
{
new victim=read_data(2);
new model
cs_get_user_model(victim,model,31)

if(is_user_connected(victim)&&equal(model,"A模型")&&equal(model,"B模型")&&equal(model,"C模型")......)

cs_reset_user_model(victim);
}
页: [1] 2
查看完整版本: 关于"cs_reset_user_model"的问题