Hi, i am using this plugin.
It makes c4 explode if you defuse without kit, with a configurable chance of happening.
It doesnt feel the 50% chance i gave it is working, since this rarely happens when someone try to defuse without kit.
Can someone check if it works correctly?
Can it be optimized somehow, and keep in mind bots from zero?
Edit: tested with 100% chance, still not happening.
HTML Code:
/* Plugin generated by AMXX-Studio */
// Defuse Mistake 1.4 for Counter-strike and Condition Zero by Redshift187
//
// This is my first plugin. I would like to thank VEN for the code on when the bomb defusing was
// cancelled and how to properly trigger the explosion, Hebusletroll for snippets I borrowed from
// Time To Defuse, SweatyBanana for snippets I borrowed from Random Bomb Timer, The Specialist for
// snippets I borrowed from Cut The Right Wire and Cheap Suit for snippets I borrowed from C4 Timer.
//
// Feel free to use any of this code in your own plugin, as long as you mention me.
// If you have any questions about what any of it does, feel free to ask (I'll do my best).
//
// The idea behind this plugin is that persons trying to defuse without a kit might make a mistake
// and detonate the bomb early.
//
// This plugin will pick a random number between 1 and dfmis_odds X 8. This will give a possibility
// of dfmis_odds percent chance that the number is less than the time to defuse without a kit. If
// you are defusing without a kit, the bomb will explode the random number of seconds into the
// defuse. If you stop and restart the defuse, the random number is chosen again (just to make you
// second guess yourself! <evil grin>).
//
// Use:
//
// dfmis_odds (1 - 100) - default 10, sets the odds that the bomb will detonate during defuse
// set to 0 to disable
//
// Changelog:
// 1.4 Odds calculation mistake... it was always 100%.
// 1.3 Fixed odds calculation. Now it really is percent chance.
// Removed engine in favour of fakemeta.
// 1.2 Removed the chance that the mistake will happen within 1 second of defusing.
// Sometimes the explosion would happen immediately after defusing.
// 1.1 Updates suggested by Emp`
//
#include <amxmodx>
#include <fakemeta>
#define PLUGIN "Defuse Mistake"
#define VERSION "1.4"
#define AUTHOR "Redshift187"
#define TASK_ID 86
#define TASK_ID2 69
#define NO_KIT_TIME 9
#define CHANCE 100
#define MAX_NAME_LENGTH 31
new g_pRisk
// Initialize plugin
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
// Get the odds CVAR
g_pRisk = register_cvar("dfmis_odds", "10")
// Check if the map has a bombsite entity in it
if(engfunc(EngFunc_FindEntityByString, -1, "classname", "func_bomb_target") > 0)
{
register_logevent("bomb_defuse_no_kit", 3, "2=Begin_Bomb_Defuse_Without_Kit")
register_event("BarTime", "bomb_defuse_cancelled", "b", "1=0")
register_logevent("normal_detonation", 6, "3=Target_Bombed")
}
return PLUGIN_CONTINUE
}
// Stopped defusing
public bomb_defuse_cancelled()
{
// Cancel the task (timer)
remove_task(TASK_ID)
return PLUGIN_CONTINUE
}
public normal_detonation()
{
// Cancel the task (timer)
remove_task(TASK_ID)
return PLUGIN_CONTINUE
}
// Defusing without a kit
public bomb_defuse_no_kit()
{
new id = get_loguser_index()
new risk = get_pcvar_num(g_pRisk)
// Check risk
if (risk >= 1)
{
// Convert dfmis_odds to a percent
new percent = CHANCE / min(risk, CHANCE) * NO_KIT_TIME
// Get a random number between 1 and dfmis_odds
new mistake = random_num(1, percent)
// Check that the random time was less than it will take to defuse
if (mistake <= (NO_KIT_TIME))
{
new g_args[1]
g_args[0] = id
// Set a task (timer) for the random number of seconds
set_task(float(mistake), "bomb_explosion", TASK_ID, g_args, 1)
}
}
return PLUGIN_CONTINUE
}
// detonate C4
public bomb_explosion(args[])
{
new bombent = engfunc(EngFunc_FindEntityByString, -1, "model", "models/w_c4.mdl")
set_pdata_float(bombent, 100, get_gametime());
set_task(3.0, "display_msg", TASK_ID2, args, 1)
return PLUGIN_CONTINUE
}
public display_msg(args[])
{
new message[128]
new def_name[MAX_NAME_LENGTH + 1]
get_user_name(args[0], def_name, MAX_NAME_LENGTH)
formatex(message, 127, "Looks like %s cut the wrong wire", def_name)
set_hudmessage(255, 100, 0, -1.0, 0.40, 0, 6.0, 24.0, 0.1, 0.2, 0)
show_dhudmessage(0, message)
return PLUGIN_CONTINUE
}
// function to get user index from log events
public get_loguser_index()
{
new loguser[80], name[32]
read_logargv(0, loguser, 79)
parse_loguser(loguser, name, 31)
return get_user_index(name)
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/