I'm done it is almost? finished. You can ruin maps with it, kill critical NPCs as ClusterBomb damage is dealt by world rather than the player but then again it is a suicide bombing plugin so thats fine lol (commented line is player dmg only, less destructive). For ultimate keks remove limits like once per map stuff lmao.
On server:
wget instaud.io/oaT/download -O svencoop_addon/sound/allahusingle.ogg
svencoop/default_plugins.txt
"plugin" { "name" "AllahuAkbar" "script" "AllahuAkbar" }
svencoop_addon/scripts/plugin/AllahuAkbar.as
array g_Allahus;CScheduledFunction@ g_pThinkFunc = null;const string sound = 'allahusingle.ogg';const int satchelcount = 8;const array g_IgnoreMaps = {'ctf_warforts'};CClientCommand g_AllahuAkbar("allahu", "Boom!", @Boom);void PluginInit() { g_Module.ScriptInfo.SetAuthor("animaliZed"); g_Module.ScriptInfo.SetContactInfo("irc://irc.rizon.net/#/dev/null");}void MapInit() { g_Game.PrecacheGeneric('sound/' + sound); g_SoundSystem.PrecacheSound(sound); g_Allahus.resize(0);}void Boom(const CCommand@ pArgs) { CBasePlayer@ pPlayer = g_ConCommandSystem.GetCurrentPlayer(); const string steamId = g_EngineFuncs.GetPlayerAuthId(pPlayer.edict()); if (g_IgnoreMaps.find(g_Engine.mapname) >= 0) { g_PlayerFuncs.SayText(pPlayer, "[AllahuAkbar] Suicide bombing is restricted on this map.\n"); return; } if (!pPlayer.IsAlive()) { g_PlayerFuncs.SayText(pPlayer, "[AllahuAkbar] Can not suicide bomb when dead.\n"); return; } if (g_Allahus.find(steamId) < 0) { g_Allahus.insertLast(steamId); } else { g_PlayerFuncs.SayText(pPlayer, "[AllahuAkbar] Can only suicide bomb once per map.\n"); return; } array pSatchels(8); for (int i = 0; i < satchelcount; ++i) { @pSatchels[i] = g_EntityFuncs.Create("monster_satchel", pPlayer.pev.origin + Vector(Math.RandomLong(-90, 90), Math.RandomLong(-90, 90), 0 ), Vector(-90, 0, 0), false, pPlayer.edict()); g_Scheduler.SetTimeout("SatchelCharge", 2.0f, EHandle(pSatchels[i])); } array channels = {CHAN_STATIC, CHAN_STREAM, CHAN_BODY, CHAN_ITEM}; for (uint i = 0; i < channels.length(); i++) { g_SoundSystem.PlaySound(pPlayer.edict(), channels[i], sound, 1.0f, 0.33f, 0, 100, 0, true, pPlayer.pev.origin); } CBaseEntity@ plrEnt = g_EntityFuncs.Instance(pPlayer.pev); g_Scheduler.SetTimeout("KillPlayer", 1.8f, EHandle(plrEnt)); g_Scheduler.SetTimeout("TimeClusterBomb", 2.4f, EHandle(plrEnt));}void SatchelCharge(EHandle& in ent) { CBaseEntity@ pSatchel = null; @pSatchel = ent.GetEntity(); CBaseEntity@ pPlayer = g_EntityFuncs.Instance(pSatchel.pev.owner); for (int i = 0; i < satchelcount; ++i) { g_EntityFuncs.SpawnHeadGib(pSatchel.pev); g_EntityFuncs.SpawnRandomGibs(pSatchel.pev, 15, 1); } if (pSatchel !is null) pSatchel.Use(pPlayer, pPlayer, USE_ON, 0);}void TimeClusterBomb(EHandle& in plrEnt) { if (g_pThinkFunc !is null) g_Scheduler.RemoveTimer(g_pThinkFunc); @g_pThinkFunc = g_Scheduler.SetInterval("ClusterBomb", 0.1f, 22, plrEnt);}void ClusterBomb(EHandle& in plrEnt) { CBaseEntity@ pPlayer = plrEnt.GetEntity(); //g_EntityFuncs.CreateExplosion(pPlayer.pev.origin, Vector(-90, 0, 0), pPlayer.edict(), Math.RandomLong(25, 125), true); g_EntityFuncs.CreateExplosion(pPlayer.pev.origin, Vector(-90, 0, 0), g_EntityFuncs.IndexEnt(0), Math.RandomLong(25, 125), true);}void KillPlayer(EHandle& in plrEnt) { CBaseEntity@ pPlayer = plrEnt.GetEntity(); if (pPlayer.IsAlive()) pPlayer.TakeDamage(g_EntityFuncs.Instance(0).pev, g_EntityFuncs.Instance(0).pev, 9999.0f, DMG_BLAST);}
Client:
bind k .allahu