et voila un plugin mtl avec limitation 1 pour smg pompe deagle
PHP Code:
/* AMX Mod Plugin
*
* (c) Copyright 2007, Alban Cotillon
* This file is provided as is (no warranties).
*
* Utilisation :
* ____________
*
* Cvars :
* mtl_active : 1 pour activer le plugin , 0 pour le désactiver
* mtl_ecart <nbre> : Nombre entier indiquant l'écart frags/morts pour activer la 1ère restriction (--> smg's, pompes, pistolets)
* mtl_ecart2 <nbre> : Nombre entier indiquant l'écart frags/morts pour activer la 2ème restriction (--> glock & usp)
* mtl_bombfrags : nombre de frags attribués pour l'explosion ou le désamorçage de la bombe (defaut 3)
*
* Commandes :
* /mtl ou say /mtl : Aide
*
*
*
* Nécessite le module fakemeta !
* __________________________
*/
#include <amxmodx>
#include <fakemeta>
new const MTL_VERSION[] = "1.1.2"
#define MAX_PLAYERS 32
#define OFFSET_TEAM 114
#define OFFSET_CSDEATHS 444
#define OFFSET_USP_AMMO 382
#define OFFSET_GLOCK_AMMO 386
#define NODROP_BITSUM ((1<<CSW_HEGRENADE) | (1<<CSW_SMOKEGRENADE) | (1<<CSW_FLASHBANG) | (1<<CSW_KNIFE) | (1<<CSW_C4))
#define GUNS_BITSUM ((1<<CSW_M3) | (1<<CSW_XM1014) | (1<<CSW_MAC10) | (1<<CSW_MP5NAVY) | (1<<CSW_UMP45) | (1<<CSW_P90) | (1<<CSW_USP) | (1<<CSW_GLOCK18) | (1<<CSW_ELITE) | (1<<CSW_FIVESEVEN) | (1<<CSW_DEAGLE) | (1<<CSW_P228))
#define USP_GLOCK_BITSUM ((1<<CSW_USP) | (1<<CSW_GLOCK18))
#define OTHER_GUNS_NUM 10
new const g_iGunsIdsList[OTHER_GUNS_NUM] = { CSW_M3 , CSW_XM1014 , CSW_MAC10 , CSW_MP5NAVY , CSW_UMP45 , CSW_P90 , CSW_DEAGLE , CSW_P228 , CSW_ELITE , CSW_FIVESEVEN }
new const g_szGunsList[OTHER_GUNS_NUM][10] = { "m3" , "xm1014" , "mac10" , "mp5navy" , "ump45" , "p90" , "deagle" , "p228" , "elite" , "fiveseven" }
new g_iIsLimited[MAX_PLAYERS+1]
new bool:g_RestartAttempt[MAX_PLAYERS+1]
new bool:g_bWasAlive[MAX_PLAYERS+1]
new g_iPlanterId
new g_pcvarMtlActive, g_pcvarMtlEcart, g_pcvarMtlEcart2, g_pcvarMtlBombfrags
new g_iEcarts, g_iEcarts2
public plugin_init() {
register_plugin("mT Limiter", MTL_VERSION, "Iznogood/ConnorMcLeod/freeworldgreg")
register_dictionary("mtl.txt")
register_cvar("mTl", MTL_VERSION, FCVAR_SERVER|FCVAR_SPONLY) // mTl tracker
g_pcvarMtlEcart = register_cvar("mtl_ecart", "5")
g_pcvarMtlEcart2 = register_cvar("mtl_ecart2", "10")
g_pcvarMtlActive = register_cvar("mtl_active", "1" )
g_pcvarMtlBombfrags = register_cvar("mtl_bombfrags", "0")
register_event("TextMsg", "eRestartAttempt", "a", "2=#Game_will_restart_in")
register_event("ResetHUD", "eResetHUD", "be")
register_event("CurWeapon", "eCurWeapon", "be", "1=1")
register_logevent("ePlanted_The_Bomb", 3, "2=Planted_The_Bomb")
register_event("23", "eBomb_Explosed", "a", "1=17", "6=-105", "7=17")
register_logevent("eDefused_The_Bomb", 3, "2=Defused_The_Bomb")
register_event("DeathMsg", "eDeathMsg", "a")
register_logevent("eRoundStart", 2, "1=Round_Start")
register_clcmd("say /mtl", "help_mtl", 0, ": affiche l'aide du plugin mTL")
register_clcmd("/mtl", "help_mtl", 0, ": affiche l'aide du plugin mTL")
register_clcmd("fullupdate", "fullupdateCmd")
}
public plugin_cfg() {
g_iEcarts = get_pcvar_num(g_pcvarMtlEcart)
g_iEcarts2 = get_pcvar_num(g_pcvarMtlEcart2)
}
public client_putinserver(id) {
g_iIsLimited[id] = 0
g_bWasAlive[id] = false
}
public fullupdateCmd() {
return PLUGIN_HANDLED_MAIN
}
public eRestartAttempt() {
new players[MAX_PLAYERS], num
get_players(players, num, "a")
for (new i; i < num; ++i)
g_RestartAttempt[players[i]] = true
}
public eRoundStart() {
if(!get_pcvar_num( g_pcvarMtlActive ))
return
g_iPlanterId = 0
g_iEcarts = get_pcvar_num(g_pcvarMtlEcart)
g_iEcarts2 = get_pcvar_num(g_pcvarMtlEcart2)
if(!random(4)) {
set_hudmessage(85, 95, 255, -1.0, 0.10, 1, 1.0, 7.0, 0.1, 0.2, -1)
show_hudmessage(0, "%L", LANG_PLAYER, "MTL_ADV", MTL_VERSION)
}
}
public eResetHUD(id) {
if (g_RestartAttempt[id]) {
g_RestartAttempt[id] = false
return
}
event_player_spawn(id)
}
event_player_spawn(id) {
if( !get_pcvar_num( g_pcvarMtlActive ) )
return
if( is_user_bot( id ) )
return
new Float:frags
pev(id, pev_frags, frags)
new diff = floatround(frags) - get_pdata_int(id, OFFSET_CSDEATHS)
if( diff >= g_iEcarts2 )
g_iIsLimited[id] = 2
else if( diff >= g_iEcarts )
g_iIsLimited[id] = 1
else {
g_iIsLimited[id] = 0
if(!g_bWasAlive[id])
g_bWasAlive[id] = true
return
}
static const szKnife[] = "weapon_knife"
client_cmd(id, szKnife)
set_hudmessage(85, 95, 255, -1.0, 0.4, 1, 1.0, 7.0, 0.1, 0.2, -1)
if( g_iIsLimited[id] == 1 )
show_hudmessage(id, "%L", id, "MTL_LIM1", g_iEcarts )
else
{
show_hudmessage(id, "%L", id, "MTL_LIM2", g_iEcarts2 )
if( g_bWasAlive[id] )
{
new weapons = pev(id, pev_weapons)
if( !(weapons & (1<<CSW_USP)) && !(weapons & (1<<CSW_GLOCK18)) )
{
for(new i; i<OTHER_GUNS_NUM; i++)
{
if( weapons & (1<<g_iGunsIdsList[i]) )
{
client_cmd(id, "drop weapon_%s", g_szGunsList[i])
break
}
}
set_task(0.2, "give_user_gun", id)
}
}
}
if(!g_bWasAlive[id])
g_bWasAlive[id] = true
}
public eDeathMsg() {
g_bWasAlive[read_data(2)] = false
}
public give_user_gun(id) {
new team = get_pdata_int(id, OFFSET_TEAM)
switch(team)
{
case 1:
{
static const szGlock18Name[] = "weapon_glock18"
if( fmGiveItem(id, szGlock18Name) > 0 )
{
if( get_pdata_int(id, OFFSET_GLOCK_AMMO) < 40 )
{
set_pdata_int(id, OFFSET_GLOCK_AMMO, 40)
}
}
}
case 2:
{
static const szUspName[] = "weapon_usp"
if( fmGiveItem(id, szUspName) > 0 )
{
if( get_pdata_int(id, OFFSET_USP_AMMO) < 24 )
{
set_pdata_int(id, OFFSET_USP_AMMO, 24)
}
}
}
}
}
fmGiveItem(index, const item[]) {
new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, item))
if (!pev_valid(ent))
return 0
new Float:origin[3]
pev(index, pev_origin, origin)
set_pev(ent, pev_origin, origin)
set_pev(ent, pev_spawnflags, pev(ent, pev_spawnflags) | SF_NORESPAWN)
dllfunc(DLLFunc_Spawn, ent)
new save = pev(ent, pev_solid)
dllfunc(DLLFunc_Touch, ent, index)
if (pev(ent, pev_solid) != save)
return ent
engfunc(EngFunc_RemoveEntity, ent)
return -1
}
public eCurWeapon(id) {
if(!get_pcvar_num(g_pcvarMtlActive))
return
if(!g_iIsLimited[id])
return
if(is_user_bot(id ))
return
if( !( ( (g_iIsLimited[id]==1 ? GUNS_BITSUM : USP_GLOCK_BITSUM) | NODROP_BITSUM ) & (1<<read_data(2)) ) )
{
static const szDropCmd[] = "drop"
client_cmd( id, szDropCmd)
}
}
public ePlanted_The_Bomb() {
new loguser[80], name[32]
read_logargv(0, loguser, 79)
parse_loguser(loguser, name, 31)
g_iPlanterId = get_user_index(name)
}
public eDefused_The_Bomb() {
if( !get_pcvar_num( g_pcvarMtlActive ) )
return
new Float:fFragsToGive = get_pcvar_float(g_pcvarMtlBombfrags) - 3.0
if( !fFragsToGive )
return
new loguser[80], name[32]
read_logargv(0, loguser, 79)
parse_loguser(loguser, name, 31)
new iDefuser = get_user_index(name)
new Float:fFrags
pev(iDefuser, pev_frags, fFrags)
set_pev(iDefuser, pev_frags, fFragsToGive + fFrags)
}
public eBomb_Explosed() {
if( !get_pcvar_num( g_pcvarMtlActive ) )
return
if(!g_iPlanterId || !is_user_connected(g_iPlanterId))
return
new Float:fFragsToGive = get_pcvar_float(g_pcvarMtlBombfrags) - 3.0
if( !fFragsToGive )
return
new Float:fFrags
pev(g_iPlanterId, pev_frags, fFrags)
set_pev(g_iPlanterId, pev_frags, fFragsToGive + fFrags)
}
public help_mtl(id) {
if (get_pcvar_num( g_pcvarMtlActive ) != 1)
return
new len = 1200
static buffer[1201]
new title[32]
new n = 0
n += formatex(buffer[n], len-n, "<html><head><STYLE type=^"text/css^">")
n += formatex(buffer[n], len-n, "BODY{font-family: ^"Times New Roman^", Arial;background: black; color: white}")
n += formatex(buffer[n], len-n, "A:link { color: white }A:visited { color: white }A:active { color: white }</STYLE></head>")
n += formatex(buffer[n], len-n, "<body><font face=Tahoma size=2pt><h1><font color=red>mT Limiter</font></h1><br>")
n += formatex(buffer[n], len-n, "%L <b><font color=orange>%d</font></b><br>", id, "MTL_MOTD1", g_iEcarts)
n += formatex(buffer[n], len-n, "%L<br><br>", id, "MTL_MOTD2")
n += formatex(buffer[n], len-n, "%L <b><font color=red>%d</font></b><br>", id, "MTL_MOTD1", g_iEcarts2)
n += formatex(buffer[n], len-n, "%L<br><br>", id, "MTL_MOTD4")
n += formatex(buffer[n], len-n, "<br><br><i>%L</i></body></html>", id, "MTL_MOTD5", MTL_VERSION)
formatex(title, 31, "%L", id, "MTL_MOTD6")
show_motd(id, buffer, title)
}
et maintenant je vais essayer de rajouter une troisieme limitation pour le cut voili voilou