搜索
查看: 3518|回复: 2

[AMXX 带源码] 【分享】AMXX放火插件amx_fire,带源码,OP可以放火烧玩家

[复制链接]
发表于 2015-12-14 17:22:39 | 显示全部楼层 |阅读模式 来自 中国–北京–北京
本帖最后由 37666564 于 2015-12-14 17:24 编辑

AMXX放火插件amx_fire,带源码,OP可以放火烧玩家。

声明: 此插件是从国外的 amxx 官方论坛上弄来的,我做了一点修改和汉化。

OP通过 "amx_fire #编号或者名字" 可以对玩家放火。 我没设置对大OP的例外,所以,任何人(包括大OP在内),均可被火烧命令处理。
OP也可以对自己放火,也可以对其他OP放火,也包括大OP。  大 OP 也能对自己放火。
任何没被烧到的人,一旦靠近正被火烧的人,他就会被点燃,也就是说,火势可以蔓延给其他人(无论是队友还是敌人)。

一旦着火,火不会熄灭,会一直烧,每烧一次,掉 10 滴血,直到死亡为止。
被烧期间,如果被敌人打伤,则伤害会累计。

被烧期间,如果没死,但所在的队伍胜利了(或者服务器刷新了),则下一局时,火还会继续烧。 总之,你死了,火才熄灭。

使用方法, OP 先在控制台输入  listplayers    ,查询玩家编号。
然后OP在控制台输入 amx_fire #编号或者名字 , 如果名字简单,就可以考虑输入  amx_fire 名字,
如果名字复杂,就考虑输入  amx_fire #编号 。例如玩家 intel 若编号为 29, 则OP可以输入  amx_fire intel, 或者  amx_fire #29 来实现对 intel 放火。

listplayers 和 rcon users 功能一样,区别在于, listplayers 是任何人都可以使用的命令,不管有没有 rcon 密码,不管是否为 AMXX 的 OP。
而 rcon users 是必须输入 rcon 密码之后才能用。

不多说了,源码和编译好的插件一并送上。  如果你们想自己修改源码,则必须使用 Ultraedit 来修改源码,所有的amxx的源码修改,都必须这样。如果你直接在记事本里修改,改完了也没法成功编译,只会显示错误。 修改方法,详情如下   tieba_baidu_com/p/1777358251   (把下划线改成点,没办法,我目前权限低,没法发链接地址)

===================================================================

[mw_shl_code=c,true]/* AMXX Mod script.
*
*Ported by Sp4rt4n
* (c) Copyright 2003, f117bomb
* This file is provided as is (no warranties).
*/  

#include <amxmodx>
#include <amxmisc>
#include <fun>

/*
* Sets a player on fire with effects. Users can catch others on fire by standing next to them.
* Usage: amx_fire <authid, nick or #userid>
*
*/

new gmsgDamage,smoke,mflash
new onfire[33]

public ignite_effects(skIndex[])   {
        new kIndex = skIndex[0]
               
        if (is_user_alive(kIndex) && onfire[kIndex] )    {
                new korigin[3]
                get_user_origin(kIndex,korigin)
                               
                //TE_SPRITE - additive sprite, plays 1 cycle
                message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
                write_byte( 17 )
                write_coord(korigin[0])  // coord, coord, coord (position)
                write_coord(korigin[1])  
                write_coord(korigin[2])
                write_short( mflash ) // short (sprite index)
                write_byte( 20 ) // byte (scale in 0.1's)  
                write_byte( 200 ) // byte (brightness)
                message_end()
               
                //Smoke
                message_begin( MSG_BROADCAST,SVC_TEMPENTITY,korigin)
                write_byte( 5 )
                write_coord(korigin[0])// coord coord coord (position)
                write_coord(korigin[1])
                write_coord(korigin[2])
                write_short( smoke )// short (sprite index)
                write_byte( 20 ) // byte (scale in 0.1's)
                write_byte( 15 ) // byte (framerate)
                message_end()
               
                set_task(0.2, "ignite_effects" , 0 , skIndex, 2)               
        }       
        else    {
                if( onfire[kIndex] )   {
                        onfire[kIndex] = 0
                }
        }       
        return PLUGIN_CONTINUE
}

public ignite_player(skIndex[])   {
        new kIndex = skIndex[0]
               
        if (is_user_alive(kIndex) && onfire[kIndex] )    {
                new korigin[3]
                new players[32], inum = 0
                new pOrigin[3]               
                new kHeath = get_user_health(kIndex)
                get_user_origin(kIndex,korigin)
               
                //create some damage
                set_user_health(kIndex,kHeath-10)  // 一旦身体着火,就会连续被烧(无法停止),每烧一次,减10滴血,减到死为止。被烧期间,如果被敌人打伤,则掉血量会累计
                message_begin(MSG_ONE, gmsgDamage, {0,0,0}, kIndex)
                write_byte(30) // dmg_save
                write_byte(30) // dmg_take
                write_long(1<<21) // visibleDamageBits
                write_coord(korigin[0]) // damageOrigin.x
                write_coord(korigin[1]) // damageOrigin.y
                write_coord(korigin[2]) // damageOrigin.z
                message_end()
                               
                //create some sound
                emit_sound(kIndex,CHAN_ITEM, "ambience/flameburst1.wav", 0.6, ATTN_NORM, 0, PITCH_NORM)
                               
                //身体着火的人,可以传给其他人,无论是队友还是敌人,只要靠近他,火就会引燃靠近者                               
                get_players(players,inum,"a")
                for(new i = 0 ;i < inum; ++i)   {                                                                       
                        get_user_origin(players,pOrigin)                               
                        if( get_distance(korigin,pOrigin) < 100  )   {
                                if( !onfire[players] )   {
                                        new spIndex[2]
                                        spIndex[0] = players
                                        new pName[32], kName[32]                                       
                                        get_user_name(players,pName,31)
                                        get_user_name(kIndex,kName,31)
                                        client_print(0,3,"%s身上的火焰引燃了%s",kName,pName)
                                        onfire[players] =1
                                        ignite_player(players)
                                        ignite_effects(players)  
                                }                                       
                        }
                }                       
                players[0] = 0
                pOrigin[0] = 0                                       
                korigin[0] = 0               
               
                //Call Again in 2 seconds               
                set_task(2.0, "ignite_player" , 0 , skIndex, 2)               
        }       
               
        return PLUGIN_CONTINUE
}


public fire_player(id,level,cid) {
        if (!cmd_access(id,level,cid,2))
                return PLUGIN_HANDLED
       
        new arg[32]
        read_argv(1,arg,31)
       
        new victim = cmd_target(id,arg,7)
        if (!victim)
                return PLUGIN_HANDLED

        new skIndex[2]
        skIndex[0] = victim       
        new name[32]
        get_user_name(victim,name,31)
       
        onfire[victim] = 1
        ignite_effects(skIndex)
        ignite_player(skIndex)
               
        new adminname[32]  
        get_user_name(id,adminname,31)  
        switch(get_cvar_num("amx_show_activity"))   {
                 case 2:   client_print(0,print_chat,"管理员 %s: 对玩家 %s 放火",adminname,name)
                 case 1:   client_print(0,print_chat,"管理员 对玩家 %s 放火",name)
        }                        
        return PLUGIN_HANDLED
}  

public plugin_precache()   {  
        mflash = precache_model("sprites/muzzleflash.spr")
        smoke = precache_model("sprites/steam1.spr")
        precache_sound("ambience/flameburst1.wav")
        return PLUGIN_CONTINUE
}

public plugin_init() {  
   register_plugin("Admin Fire","1.0.0","f117bomb")  
   register_concmd("amx_fire","fire_player",ADMIN_SLAY,"<authid, nick or #userid>")  
   gmsgDamage = get_user_msgid("Damage")
   
   return PLUGIN_CONTINUE  
}
[/mw_shl_code]

本帖子中包含更多资源

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

×
发表于 2015-12-29 14:34:06 | 显示全部楼层 来自 中国–四川–成都
呵呵呵!跟SUPER插件差不多的!!感谢分享
回复

使用道具 举报

发表于 2016-8-22 03:27:27 | 显示全部楼层 来自 中国–广西–钦州
支持支持支持
回复

使用道具 举报

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

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