|
发表于 昨天 15:46
|
显示全部楼层
来自 中国–河南–开封
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#define PLUGIN "Multi-Grenade"
#define VERSION "1.0"
#define AUTHOR "n1anqing"
enum {
MODE_NORMAL, // 普通模式
MODE_PROXIMITY, // 感应模式
MODE_IMPACT, // 碰炸模式
MODE_LASER, // 激光模式
MODE_SPEED, // 速度感应
MODE_REMOTE // 遥控模式
}
new g_iGrenadeMode[33]
new g_iGrenadeEnt[33]
new bool:g_bGrenadeThrown[33]
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
register_event("CurWeapon", "event_weapon_change", "be", "1=1")
RegisterHam(Ham_Think, "grenade", "fw_ThinkGrenade")
RegisterHam(Ham_Item_Deploy, "weapon_hegrenade", "fw_GrenadeDeploy", 1)
register_forward(FM_CmdStart, "fw_CmdStart")
}
public client_putinserver(id) {
g_iGrenadeMode[id] = MODE_NORMAL
g_bGrenadeThrown[id] = false
}
public event_round_start() {
for(new i = 1; i <= 32; i++) {
g_iGrenadeMode[i] = MODE_NORMAL
g_bGrenadeThrown[i] = false
}
}
public event_weapon_change(id) {
if(read_data(2) == CSW_HEGRENADE) {
show_mode_hud(id)
}
}
public fw_GrenadeDeploy(ent) {
new id = get_pdata_cbase(ent, 41, 4)
if(pev_valid(id) && is_user_alive(id)) {
show_mode_hud(id)
}
}
public fw_CmdStart(id, uc) {
if(!is_user_alive(id) || get_user_weapon(id) != CSW_HEGRENADE)
return FMRES_IGNORED
static buttons
buttons = get_uc(uc, UC_Buttons)
if(buttons & IN_ATTACK2 && !(pev(id, pev_oldbuttons) & IN_ATTACK2)) {
g_iGrenadeMode[id] = (g_iGrenadeMode[id] + 1) % 6
show_mode_hud(id)
}
return FMRES_IGNORED
}
public fw_ThinkGrenade(ent) {
if(!pev_valid(ent))
return HAM_IGNORED
static classname[32]
pev(ent, pev_classname, classname, 31)
if(!equal(classname, "grenade"))
return HAM_IGNORED
static owner
owner = pev(ent, pev_owner)
if(!(1 <= owner <= 32))
return HAM_IGNORED
switch(g_iGrenadeMode[owner]) {
case MODE_PROXIMITY: proximity_mode(ent)
case MODE_IMPACT: impact_mode(ent)
case MODE_LASER: laser_mode(ent)
case MODE_SPEED: speed_mode(ent)
case MODE_REMOTE: remote_mode(ent)
}
return HAM_IGNORED
}
// 各模式具体实现函数(示例)
proximity_mode(ent) {
// 感应模式:检测附近是否有敌人
}
impact_mode(ent) {
// 碰炸模式:碰到物体立即爆炸
}
laser_mode(ent) {
// 激光模式:检测激光束触发
}
speed_mode(ent) {
// 速度感应:速度低于阈值爆炸
}
remote_mode(ent) {
// 遥控模式:按E键引爆
}
show_mode_hud(id) {
static mode_name[6][] = {
"普通模式",
"感应模式",
"碰炸模式",
"激光模式",
"速度感应",
"遥控模式"
}
set_hudmessage(0, 255, 0, -1.0, 0.8, 0, 6.0, 1.0)
show_hudmessage(id, "当前手雷模式: %s", mode_name[g_iGrenadeMode[id]])
}
|
|