关于惩戒鞭尸者的插件
大家都知道,在CS里乱说脏话和鞭尸都是一种极不文明,不尊重他人的表现。当然,由于已经有了脏话屏蔽插件,所以基本上可以解决脏话连篇的问题,但对于鞭尸者的惩戒问题,好像解决的还不是很彻底。鞭尸大概有三种方式,第一种是在尸体上乱喷logo;第二种是用机枪来扫射尸体或者用刀子来乱砍尸体;第三种就比较少见一点,即用手雷来炸尸。目前好像只有喷尸者自杀插件(slaylogo.amxx)能够惩罚鞭尸者,但只是针对第一种情况的,至于第二种情况还是无可奈何啊~
所以,想请高手在slaylogo.sma的基础上再增添一些代码,功能如下:当玩家对着别人的尸体(包括敌人和友军的尸体)开枪或者用刀砍时,超过三枪或三刀同样处死,正所谓“事不过三”。(至于第三种情况以雷炸尸的,暂且不考虑吧,因为不太容易区分玩家是否恶意的,有可能会出现玩家扔出的手雷恰好落在别人尸体上的情况,如果这样也惩罚他们,那么显然也是有失公平的。)
include <amxmod>
#define MAX_DISTANCE 75 // detect distance...
#define MAX_PLAYERS 32 // server maximum players
new sprayidorigins
new vorigin
new d_index
public plugin_init() {
register_plugin("Auto-logo punisher","0.01","PERt+")
register_event( "RoundTime", "reset_table", "bc" );
register_event("23", "checkspray", "a", "1=112")
register_event( "DeathMsg", "store_table", "a" );
}
public store_table() {
new victim = read_data( 2 );
new name
get_user_name(victim, name , 31);
get_user_origin( victim, vorigin, 0 );
d_index++
return PLUGIN_CONTINUE;
}
public reset_table() {
d_index = 0
new i;
for (i=0; i < MAX_PLAYERS; i++) {
vorigin =0;
vorigin =0;
vorigin =0;
}
return PLUGIN_CONTINUE;
}
回复: 关于惩戒鞭尸者的插件
我服务器只要有人敢喷尸的话.马上没收所有金钱.没人敢喷.回复: 关于惩戒鞭尸者的插件
如果有人站在尸体旁边,楼主会不会投鼠忌器呢?回复: 关于惩戒鞭尸者的插件
有人能解决这个问题吗?回复: 关于惩戒鞭尸者的插件
Post by Osker Lee大家都知道,在CS里乱说脏话和鞭尸都是一种极不文明,不尊重他人的表现。当然,由于已经有了脏话屏蔽插件,所以基本上可以解决脏话连篇的问题,但对于鞭尸者的惩戒问题,好像解决的还不是很彻底。
鞭尸大概有三种方式,第一种是在尸体上乱喷logo;第二种是用机枪来扫射尸体或者用刀子来乱砍尸体;第三种就比较少见一点,即用手雷来炸尸。目前好像只有喷尸者自杀插件(slaylogo.amxx)能够惩罚鞭尸者,但只是针对第一种情况的,至于第二种情况还是无可奈何啊~
所以,想请高手在slaylogo.sma的基础上再增添一些代码,功能如下:当玩家对着别人的尸体(包括敌人和友军的尸体)开枪或者用刀砍时,超过三枪...
楼主贴代码只贴了一部分:)
源代码中的下面一局话中的23和1=112是根据什么得来的?
register_event("23", "checkspray", "a", "1=112")
register_event ( const event[], const function[], const flags[], [ cond=[], ... ] )
回复: 关于惩戒鞭尸者的插件
Post by Cr@zyTreE楼主贴代码只贴了一部分:)
源代码中的下面一局话中的23和1=112是根据什么得来的?
register_event("23", "checkspray", "a", "1=112")
register_event ( const event[], const function[], const flags[], [ cond=[], ... ] )
23跟"tempentity?"是对等的.
这是一就是个临时实体创建事件,游戏中经常会发生,这是一个完整的喷图信息
message_begin(MSG_BROADCAST, get_user_msgid("tempentity?"), {0,0,0}, 0)
write_byte(112)
write_byte(1)
write_coord(1312.03)
write_coord(1238.33)
write_coord(68.24)
write_short(0)
write_byte(0)
message_end()
回复: 关于惩戒鞭尸者的插件
下面的是完整的代码,大家可以先看一看,然后再想想办法:到底能不能获取玩家用枪来射击尸体的事件(即判断出这个鞭尸者的行为)?#include <amxmodx>
#define MAX_DISTANCE 75 // detect distance...
#define MAX_PLAYERS 32 // server maximum players
new sprayidorigins
new vorigin
new d_index
public plugin_init() {
register_plugin("Auto-logo punisher","0.01","PERt+")
register_event( "RoundTime", "reset_table", "bc" );
register_event("23", "checkspray", "a", "1=112")
register_event( "DeathMsg", "store_table", "a" );
server_cmd("cl_corpsestay 180")
}
public store_table() {
new victim = read_data( 2 );
new name
get_user_name(victim, name , 31);
get_user_origin( victim, vorigin, 0 );
d_index++
return PLUGIN_CONTINUE;
}
public reset_table() {
d_index = 0
new i;
for (i=0; i < MAX_PLAYERS; i++) {
vorigin = 0;
vorigin = 0;
vorigin = 0;
}
return PLUGIN_CONTINUE;
}
public checkspray() {
new sprayid = read_data(2) ;
sprayidorigins = read_data(3);
sprayidorigins = read_data(4);
sprayidorigins = read_data(5);
new j;
for ( j=0; j < MAX_PLAYERS; j++) {
new distance = get_distance(vorigin, sprayidorigins);
if ( distance < MAX_DISTANCE ) {
new name
get_user_name(sprayid,name,31)
client_cmd(sprayid,"kill")
client_print(0,print_chat, " 警告:玩家 %s 由于喷尸而被处死!",name)
user_kill(sprayid,1)
client_cmd(sprayid,"kill")
break
}
}
return PLUGIN_CONTINUE
}
回复: 关于惩戒鞭尸者的插件
这个很难,枪击事件这么频繁,想想每个人开枪时都要进行判断,即使能实现也是很点资源的.回复: 关于惩戒鞭尸者的插件
大家知道这个盗取死亡玩家的衣服插件不(covertopsv.amxx)?玩家只需绑定一个键,如:bind v getclothes 那么当他走到尸体旁边时按V键就可以换上死尸的衣服了。当然,这里需要玩家距离尸体的最小距离为:last_dist<80 (详情可以参见covertopsv.sma这个源代码)因此,我觉得不妨参照一下covertopsv.sma,即先限定玩家与尸体的最小距离,然后再定义:如果玩家在这个最小的距离内射击的话就以鞭尸论 -- 直接处死!不知道这个方法可行不?