搜索
查看: 8159|回复: 24

关于惩戒鞭尸者的插件

[复制链接]
发表于 2008-2-23 03:38:15 | 显示全部楼层 |阅读模式 来自 广西桂林
大家都知道,在CS里乱说脏话和鞭尸都是一种极不文明,不尊重他人的表现。当然,由于已经有了脏话屏蔽插件,所以基本上可以解决脏话连篇的问题,但对于鞭尸者的惩戒问题,好像解决的还不是很彻底。

鞭尸大概有三种方式,第一种是在尸体上乱喷logo;第二种是用机枪来扫射尸体或者用刀子来乱砍尸体;第三种就比较少见一点,即用手雷来炸尸。目前好像只有喷尸者自杀插件(slaylogo.amxx)能够惩罚鞭尸者,但只是针对第一种情况的,至于第二种情况还是无可奈何啊~

所以,想请高手在slaylogo.sma的基础上再增添一些代码,功能如下:当玩家对着别人的尸体(包括敌人和友军的尸体)开枪或者用刀砍时,超过三枪或三刀同样处死,正所谓“事不过三”。(至于第三种情况以雷炸尸的,暂且不考虑吧,因为不太容易区分玩家是否恶意的,有可能会出现玩家扔出的手雷恰好落在别人尸体上的情况,如果这样也惩罚他们,那么显然也是有失公平的。)
[PHP]include <amxmod>
#define MAX_DISTANCE 75    // detect distance...
#define MAX_PLAYERS 32      // server maximum players
                                                                              
new sprayidorigins[3]
new vorigin[MAX_PLAYERS][3]
new d_index
                                                                              
                             
public plugin_init() {
       register_plugin("Auto-logo punisher","0.01","[PAPA]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[32]
       get_user_name(victim, name , 31);
       get_user_origin( victim, vorigin[d_index], 0 );
       d_index++
       return PLUGIN_CONTINUE;
                                                                              
}
                                                                              
public reset_table() {
                                                                              
       d_index = 0
       new i;
       for (i=0; i < MAX_PLAYERS; i++) {
       vorigin[0] =  0;
       vorigin[1] =  0;
       vorigin[2] =  0;
       }
                                                                              
       return PLUGIN_CONTINUE;
} [/PHP]
发表于 2008-2-23 13:35:35 | 显示全部楼层 来自 云南西双版纳州景洪

回复: 关于惩戒鞭尸者的插件

我服务器只要有人敢喷尸的话.马上没收所有金钱.没人敢喷.
回复

使用道具 举报

发表于 2008-2-24 00:31:09 | 显示全部楼层 来自 广东中山

回复: 关于惩戒鞭尸者的插件

如果有人站在尸体旁边,楼主会不会投鼠忌器呢?
回复

使用道具 举报

 楼主| 发表于 2008-3-30 21:15:50 | 显示全部楼层 来自 甘肃兰州

回复: 关于惩戒鞭尸者的插件

有人能解决这个问题吗?
回复

使用道具 举报

发表于 2008-3-30 22:53:11 | 显示全部楼层 来自 广东深圳

回复: 关于惩戒鞭尸者的插件

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=[], ... ] )
回复

使用道具 举报

发表于 2008-4-1 18:07:35 | 显示全部楼层 来自 广东惠州

回复: 关于惩戒鞭尸者的插件

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?"是对等的.
这是一就是个临时实体创建事件,游戏中经常会发生,这是一个完整的喷图信息
[php]
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()
[/php]
回复

使用道具 举报

 楼主| 发表于 2008-4-2 21:26:35 | 显示全部楼层 来自 甘肃兰州

回复: 关于惩戒鞭尸者的插件

下面的是完整的代码,大家可以先看一看,然后再想想办法:到底能不能获取玩家用枪来射击尸体的事件(即判断出这个鞭尸者的行为)?
[php]#include <amxmodx>
#define MAX_DISTANCE 75 // detect distance...
#define MAX_PLAYERS 32 // server maximum players

new sprayidorigins[3]
new vorigin[MAX_PLAYERS][3]
new d_index


public plugin_init() {
register_plugin("Auto-logo punisher","0.01","[PAPA]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[32]
get_user_name(victim, name , 31);
get_user_origin( victim, vorigin[d_index], 0 );
d_index++
return PLUGIN_CONTINUE;

}

public reset_table() {

d_index = 0
new i;
for (i=0; i < MAX_PLAYERS; i++) {
vorigin[0] = 0;
vorigin[1] = 0;
vorigin[2] = 0;
}

return PLUGIN_CONTINUE;
}


public checkspray() {
new sprayid = read_data(2) ;
sprayidorigins[0] = read_data(3);
sprayidorigins[1] = read_data(4);
sprayidorigins[2] = read_data(5);

new j;
for ( j=0; j < MAX_PLAYERS; j++) {
new distance = get_distance(vorigin[j], sprayidorigins);

if ( distance < MAX_DISTANCE ) {
new name[32]
get_user_name(sprayid,name,31)
client_cmd(sprayid,"kill")

client_print(0,print_chat, "[AMXX] 警告:玩家 %s 由于喷尸而被处死!",name)
user_kill(sprayid,1)
client_cmd(sprayid,"kill")
break
}
}

return PLUGIN_CONTINUE
}[/php]
回复

使用道具 举报

发表于 2008-4-2 21:42:41 | 显示全部楼层 来自 广东惠州

回复: 关于惩戒鞭尸者的插件

这个很难,枪击事件这么频繁,想想每个人开枪时都要进行判断,即使能实现也是很点资源的.
回复

使用道具 举报

 楼主| 发表于 2008-4-2 22:49:25 | 显示全部楼层 来自 甘肃兰州

回复: 关于惩戒鞭尸者的插件

大家知道这个盗取死亡玩家的衣服插件不(covertopsv.amxx)?玩家只需绑定一个键,如:bind v getclothes 那么当他走到尸体旁边时按V键就可以换上死尸的衣服了。当然,这里需要玩家距离尸体的最小距离为:last_dist<80 (详情可以参见covertopsv.sma这个源代码)

因此,我觉得不妨参照一下covertopsv.sma,即先限定玩家与尸体的最小距离,然后再定义:如果玩家在这个最小的距离内射击的话就以鞭尸论 -- 直接处死!不知道这个方法可行不?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注个册吧

×
回复

使用道具 举报

发表于 2008-4-10 14:05:44 | 显示全部楼层 来自 河南郑州

回复: 关于惩戒鞭尸者的插件

支持楼主!喷尸、虐尸等侮辱的行为、动作就是要受到处罚!
回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 注个册吧

快速回复 返回顶部 返回列表