Плъгин за AFK
-
cgozzie
Извън линия - Потребител
- Мнения: 1319
- Регистриран на: 13 Окт 2016, 22:10
- Местоположение: Варна
- Се отблагодари: 245 пъти
- Получена благодарност: 43 пъти
Плъгин за AFK
Трябва ми прост плъгин само за Афк като е да го киква на 90сек и ако може да се дабави ако бомбата е в него на 30сек да се прехвърли на друг играч който не е афк нищо друго излишно.
Плъгин за AFK
1. https://forums.alliedmods.net/showthread.php?p=2874
2. https://forums.alliedmods.net/showthread.php?p=209449
2. https://forums.alliedmods.net/showthread.php?p=209449
The Best Deathrun Server: 79.124.49.91:27019
The Best Respawn Server: 79.124.49.88:27021
The Best Respawn Server: 79.124.49.88:27021
Плъгин за AFK
Заповядай
Код за потвърждение: Избери целия код
#include <amxmodx>
#include <fakemeta>
// plugin's main information
#define PLUGIN_NAME "AFK Bomb Transfer"
#define PLUGIN_VERSION "0.4"
#define PLUGIN_AUTHOR "VEN"
// comment to avoid autodisabling the plugin on maps which not contain bomb targets
#define BOMB_MAP_CHECK
// float value, hud messages display time (in seconds)
#define MSG_TIME 7.0
// CVAR name, affects on spawned AFK bomb carrier which never moved after spawn
new CVAR_SPAWN[] = "afk_bombtransfer_spawn"
// CVAR value, max. allowed bomb carrier AFK time (in seconds)
new DEFAULT_SPAWN[] = "7"
// CVAR name, affects on any AFK bomb carrier except one which obey previous CVAR
new CVAR_TIME[] = "afk_bombtransfer_time"
// CVAR value, max. allowed bomb carrier AFK time (in seconds)
new DEFAULT_TIME[] = "15"
// do not set this value less than "maxplayers"
#define MAX_PLAYERS 32
// initial AMXX version number supported CVAR pointers in get/set_pcvar_* natives
#define CVAR_POINTERS_AMXX_INIT_VER_NUM 170
// determine if get/set_pcvar_* natives can be used
#if defined AMXX_VERSION_NUM && AMXX_VERSION_NUM >= CVAR_POINTERS_AMXX_INIT_VER_NUM
#define CVAR_POINTERS
new g_pcvar_spawn
new g_pcvar_time
#endif
new TEAM[] = "TERRORIST"
new WEAPON[] = "weapon_c4"
#define FL_ONGROUND (1<<9)
#define MIN_AFK_TIME 30 // I use this incase stupid admins accidentally set mp_afktime to something silly.
#define WARNING_TIME 15 // Start warning the user this many seconds before they are about to be kicked.
#define CHECK_FREQ 5
new bool:g_freezetime = true
new bool:g_spawn
new bool:g_planting
new g_carrier
new g_pos[MAX_PLAYERS + 1][3]
new g_time[MAX_PLAYERS + 1]
new g_maxplayers
new g_oldangles[33][3]
new g_afktime[33]
new bool:g_spawned[33] = {true, ...}
public plugin_init() {
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
register_cvar("afk_version", "1.0b", FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_SPONLY)
register_cvar("mp_afktime", "90") // Kick people AFK longer than this time
register_cvar("mp_afkminplayers", "8") // Only kick AFKs when there is atleast this many players on the server
set_task(float(CHECK_FREQ),"checkPlayers",_,_,_,"b")
register_event("ResetHUD", "playerSpawned", "be")
#if defined CVAR_POINTERS
g_pcvar_spawn = register_cvar(CVAR_SPAWN, DEFAULT_SPAWN)
g_pcvar_time = register_cvar(CVAR_TIME, DEFAULT_TIME)
#else
register_cvar(CVAR_SPAWN, DEFAULT_SPAWN)
register_cvar(CVAR_TIME, DEFAULT_TIME)
#endif
#if defined BOMB_MAP_CHECK
// is current map not contain bomb targets?
if (!engfunc(EngFunc_FindEntityByString, -1, "classname", "func_bomb_target"))
return
#endif
register_event("WeapPickup", "event_got_bomb", "be", "1=6")
register_event("BarTime", "event_bar_time", "be")
register_event("TextMsg", "event_bomb_drop", "bc", "2=#Game_bomb_drop")
register_event("TextMsg", "event_bomb_drop", "a", "2=#Bomb_Planted")
register_event("HLTV", "event_new_round", "a", "1=0", "2=0")
register_logevent("logevent_round_start", 2, "1=Round_Start")
set_task(1.0, "task_afk_check", _, _, _, "b") // plugin's core loop
g_maxplayers = get_maxplayers()
}
/* *************************************************** Base **************************************************** */
public event_new_round() {
g_freezetime = true
g_spawn = true
g_planting = false
g_carrier = 0
}
public event_got_bomb(id) {
g_carrier = id
}
public event_bar_time(id) {
if (id == g_carrier) {
g_planting = bool:read_data(1)
get_user_origin(id, g_pos[id])
g_time[id] = 0
}
}
public event_bomb_drop() {
g_spawn = false
g_planting = false
g_carrier = 0
}
public logevent_round_start() {
new id[32], num
get_players(id, num, "ae", TEAM)
if (!num) // is server empty?
return
g_freezetime = false
// update afk timers and current positions
new x
for (new i = 0; i < num; ++i) {
x = id[i]
get_user_origin(x, g_pos[x])
g_time[x] = 0
}
}
public task_afk_check() {
if (g_freezetime) // is freezetime right now?
return
// afk check
new id[32], num, x, origin[3]
get_players(id, num, "ae", TEAM)
for (new i = 0; i < num; ++i) {
x = id[i]
get_user_origin(x, origin)
if (origin[0] != g_pos[x][0] || origin[1] != g_pos[x][1] || (x == g_carrier && g_planting)) {
g_time[x] = 0
g_pos[x][0] = origin[0]
g_pos[x][1] = origin[1]
if (g_spawn && x == g_carrier)
g_spawn = false
}
else
g_time[x]++
}
// is bomb not currently carried or Ts number less than 2?
if (!g_carrier || num < 2)
return
#if defined CVAR_POINTERS
new max_time = get_pcvar_num(g_spawn ? g_pcvar_spawn : g_pcvar_time)
#else
new max_time = get_cvar_num(g_spawn ? CVAR_SPAWN : CVAR_TIME)
#endif
// is plugin disabled (cvar <= 0) or carrier isn't afk?
if (max_time <= 0 || g_time[g_carrier] < max_time)
return
// find who from non-afk Ts is the closest to the afk carrier
get_user_origin(g_carrier, origin)
new min_dist = 999999, dist, recipient, origin2[3]
for (new i = 0; i < num; ++i) {
x = id[i]
if (g_time[x] < max_time) {
get_user_origin(x, origin2)
dist = get_distance(origin, origin2)
if (dist < min_dist) {
min_dist = dist
recipient = x
}
}
}
if (!recipient) // is all Ts afk?
return
new carrier = g_carrier
engclient_cmd(carrier, "drop", WEAPON) // drop the backpack
new c4 = engfunc(EngFunc_FindEntityByString, -1, "classname", WEAPON) // find weapon_c4 entity
if (!c4)
return
new backpack = pev(c4, pev_owner) // get backpack entity
if (backpack <= g_maxplayers)
return
// my backpack transfer trick (improved)
set_pev(backpack, pev_flags, pev(backpack, pev_flags) | FL_ONGROUND)
dllfunc(DLLFunc_Touch, backpack, recipient)
// hud messages stuff below
set_hudmessage(0, 255, 0, 0.35, 0.8, _, _, MSG_TIME)
new message[128], c_name[32], r_name[32]
get_user_name(carrier, c_name, 31)
get_user_name(recipient, r_name, 31)
format(message, 127, "Bomb transferred to ^"%s^"^nsince ^"%s^" is AFK", r_name, c_name)
for (new i = 0; i < num; ++i)
show_hudmessage(id[i], "%s", message)
set_hudmessage(255, 255, 0, 0.42, 0.3, _, _, MSG_TIME, _, _, 3)
show_hudmessage(recipient, "You got the bomb!")
}
/* **************************************************** EOF **************************************************** */
public checkPlayers() {
for (new i = 1; i <= get_maxplayers(); i++) {
if (is_user_alive(i) && is_user_connected(i) && !is_user_bot(i) && !is_user_hltv(i) && g_spawned[i]) {
new newangle[3]
get_user_origin(i, newangle)
if ( newangle[0] == g_oldangles[i][0] && newangle[1] == g_oldangles[i][1] && newangle[2] == g_oldangles[i][2] ) {
g_afktime[i] += CHECK_FREQ
check_afktime(i)
} else {
g_oldangles[i][0] = newangle[0]
g_oldangles[i][1] = newangle[1]
g_oldangles[i][2] = newangle[2]
g_afktime[i] = 0
}
}
}
return PLUGIN_HANDLED
}
check_afktime(id) {
new numplayers = get_playersnum()
new minplayers = get_cvar_num("mp_afkminplayers")
if (numplayers >= minplayers) {
new maxafktime = get_cvar_num("mp_afktime")
if (maxafktime < MIN_AFK_TIME) {
log_amx("cvar mp_afktime %i is too low. Minimum value is %i.", maxafktime, MIN_AFK_TIME)
maxafktime = MIN_AFK_TIME
set_cvar_num("mp_afktime", MIN_AFK_TIME)
}
if ( maxafktime-WARNING_TIME <= g_afktime[id] < maxafktime) {
new timeleft = maxafktime - g_afktime[id]
client_print(id, print_chat, "[AFK Kicker] You have %i seconds to move or you will be kicked for being AFK", timeleft)
} else if (g_afktime[id] > maxafktime) {
new name[32]
get_user_name(id, name, 31)
client_print(0, print_chat, "[AFK Kicker] %s was kicked for being AFK longer than %i seconds", name, maxafktime)
log_amx("%s was kicked for being AFK longer than %i seconds", name, maxafktime)
server_cmd("kick #%d ^"You were kicked for being AFK longer than %i seconds^"", get_user_userid(id), maxafktime)
}
}
}
public client_connect(id) {
g_afktime[id] = 0
return PLUGIN_HANDLED
}
public client_putinserver(id) {
g_afktime[id] = 0
return PLUGIN_HANDLED
}
public playerSpawned(id) {
g_spawned[id] = false
new sid[1]
sid[0] = id
set_task(0.75, "delayedSpawn",_, sid, 1) // Give the player time to drop to the floor when spawning
return PLUGIN_HANDLED
}
public delayedSpawn(sid[]) {
get_user_origin(sid[0], g_oldangles[sid[0]])
g_spawned[sid[0]] = true
return PLUGIN_HANDLED
}
Плъгин за AFK
Това с цел spam ли го направи ? Да беше погледнал какво съм писал преди да пускаш ново мнение...[N]eXuS написа: ↑31 Мар 2018, 16:03 ЗаповядайКод за потвърждение: Избери целия код
#include <amxmodx> #include <fakemeta> // plugin's main information #define PLUGIN_NAME "AFK Bomb Transfer" #define PLUGIN_VERSION "0.4" #define PLUGIN_AUTHOR "VEN" // comment to avoid autodisabling the plugin on maps which not contain bomb targets #define BOMB_MAP_CHECK // float value, hud messages display time (in seconds) #define MSG_TIME 7.0 // CVAR name, affects on spawned AFK bomb carrier which never moved after spawn new CVAR_SPAWN[] = "afk_bombtransfer_spawn" // CVAR value, max. allowed bomb carrier AFK time (in seconds) new DEFAULT_SPAWN[] = "7" // CVAR name, affects on any AFK bomb carrier except one which obey previous CVAR new CVAR_TIME[] = "afk_bombtransfer_time" // CVAR value, max. allowed bomb carrier AFK time (in seconds) new DEFAULT_TIME[] = "15" // do not set this value less than "maxplayers" #define MAX_PLAYERS 32 // initial AMXX version number supported CVAR pointers in get/set_pcvar_* natives #define CVAR_POINTERS_AMXX_INIT_VER_NUM 170 // determine if get/set_pcvar_* natives can be used #if defined AMXX_VERSION_NUM && AMXX_VERSION_NUM >= CVAR_POINTERS_AMXX_INIT_VER_NUM #define CVAR_POINTERS new g_pcvar_spawn new g_pcvar_time #endif new TEAM[] = "TERRORIST" new WEAPON[] = "weapon_c4" #define FL_ONGROUND (1<<9) #define MIN_AFK_TIME 30 // I use this incase stupid admins accidentally set mp_afktime to something silly. #define WARNING_TIME 15 // Start warning the user this many seconds before they are about to be kicked. #define CHECK_FREQ 5 new bool:g_freezetime = true new bool:g_spawn new bool:g_planting new g_carrier new g_pos[MAX_PLAYERS + 1][3] new g_time[MAX_PLAYERS + 1] new g_maxplayers new g_oldangles[33][3] new g_afktime[33] new bool:g_spawned[33] = {true, ...} public plugin_init() { register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR) register_cvar("afk_version", "1.0b", FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_SPONLY) register_cvar("mp_afktime", "90") // Kick people AFK longer than this time register_cvar("mp_afkminplayers", "8") // Only kick AFKs when there is atleast this many players on the server set_task(float(CHECK_FREQ),"checkPlayers",_,_,_,"b") register_event("ResetHUD", "playerSpawned", "be") #if defined CVAR_POINTERS g_pcvar_spawn = register_cvar(CVAR_SPAWN, DEFAULT_SPAWN) g_pcvar_time = register_cvar(CVAR_TIME, DEFAULT_TIME) #else register_cvar(CVAR_SPAWN, DEFAULT_SPAWN) register_cvar(CVAR_TIME, DEFAULT_TIME) #endif #if defined BOMB_MAP_CHECK // is current map not contain bomb targets? if (!engfunc(EngFunc_FindEntityByString, -1, "classname", "func_bomb_target")) return #endif register_event("WeapPickup", "event_got_bomb", "be", "1=6") register_event("BarTime", "event_bar_time", "be") register_event("TextMsg", "event_bomb_drop", "bc", "2=#Game_bomb_drop") register_event("TextMsg", "event_bomb_drop", "a", "2=#Bomb_Planted") register_event("HLTV", "event_new_round", "a", "1=0", "2=0") register_logevent("logevent_round_start", 2, "1=Round_Start") set_task(1.0, "task_afk_check", _, _, _, "b") // plugin's core loop g_maxplayers = get_maxplayers() } /* *************************************************** Base **************************************************** */ public event_new_round() { g_freezetime = true g_spawn = true g_planting = false g_carrier = 0 } public event_got_bomb(id) { g_carrier = id } public event_bar_time(id) { if (id == g_carrier) { g_planting = bool:read_data(1) get_user_origin(id, g_pos[id]) g_time[id] = 0 } } public event_bomb_drop() { g_spawn = false g_planting = false g_carrier = 0 } public logevent_round_start() { new id[32], num get_players(id, num, "ae", TEAM) if (!num) // is server empty? return g_freezetime = false // update afk timers and current positions new x for (new i = 0; i < num; ++i) { x = id[i] get_user_origin(x, g_pos[x]) g_time[x] = 0 } } public task_afk_check() { if (g_freezetime) // is freezetime right now? return // afk check new id[32], num, x, origin[3] get_players(id, num, "ae", TEAM) for (new i = 0; i < num; ++i) { x = id[i] get_user_origin(x, origin) if (origin[0] != g_pos[x][0] || origin[1] != g_pos[x][1] || (x == g_carrier && g_planting)) { g_time[x] = 0 g_pos[x][0] = origin[0] g_pos[x][1] = origin[1] if (g_spawn && x == g_carrier) g_spawn = false } else g_time[x]++ } // is bomb not currently carried or Ts number less than 2? if (!g_carrier || num < 2) return #if defined CVAR_POINTERS new max_time = get_pcvar_num(g_spawn ? g_pcvar_spawn : g_pcvar_time) #else new max_time = get_cvar_num(g_spawn ? CVAR_SPAWN : CVAR_TIME) #endif // is plugin disabled (cvar <= 0) or carrier isn't afk? if (max_time <= 0 || g_time[g_carrier] < max_time) return // find who from non-afk Ts is the closest to the afk carrier get_user_origin(g_carrier, origin) new min_dist = 999999, dist, recipient, origin2[3] for (new i = 0; i < num; ++i) { x = id[i] if (g_time[x] < max_time) { get_user_origin(x, origin2) dist = get_distance(origin, origin2) if (dist < min_dist) { min_dist = dist recipient = x } } } if (!recipient) // is all Ts afk? return new carrier = g_carrier engclient_cmd(carrier, "drop", WEAPON) // drop the backpack new c4 = engfunc(EngFunc_FindEntityByString, -1, "classname", WEAPON) // find weapon_c4 entity if (!c4) return new backpack = pev(c4, pev_owner) // get backpack entity if (backpack <= g_maxplayers) return // my backpack transfer trick (improved) set_pev(backpack, pev_flags, pev(backpack, pev_flags) | FL_ONGROUND) dllfunc(DLLFunc_Touch, backpack, recipient) // hud messages stuff below set_hudmessage(0, 255, 0, 0.35, 0.8, _, _, MSG_TIME) new message[128], c_name[32], r_name[32] get_user_name(carrier, c_name, 31) get_user_name(recipient, r_name, 31) format(message, 127, "Bomb transferred to ^"%s^"^nsince ^"%s^" is AFK", r_name, c_name) for (new i = 0; i < num; ++i) show_hudmessage(id[i], "%s", message) set_hudmessage(255, 255, 0, 0.42, 0.3, _, _, MSG_TIME, _, _, 3) show_hudmessage(recipient, "You got the bomb!") } /* **************************************************** EOF **************************************************** */ public checkPlayers() { for (new i = 1; i <= get_maxplayers(); i++) { if (is_user_alive(i) && is_user_connected(i) && !is_user_bot(i) && !is_user_hltv(i) && g_spawned[i]) { new newangle[3] get_user_origin(i, newangle) if ( newangle[0] == g_oldangles[i][0] && newangle[1] == g_oldangles[i][1] && newangle[2] == g_oldangles[i][2] ) { g_afktime[i] += CHECK_FREQ check_afktime(i) } else { g_oldangles[i][0] = newangle[0] g_oldangles[i][1] = newangle[1] g_oldangles[i][2] = newangle[2] g_afktime[i] = 0 } } } return PLUGIN_HANDLED } check_afktime(id) { new numplayers = get_playersnum() new minplayers = get_cvar_num("mp_afkminplayers") if (numplayers >= minplayers) { new maxafktime = get_cvar_num("mp_afktime") if (maxafktime < MIN_AFK_TIME) { log_amx("cvar mp_afktime %i is too low. Minimum value is %i.", maxafktime, MIN_AFK_TIME) maxafktime = MIN_AFK_TIME set_cvar_num("mp_afktime", MIN_AFK_TIME) } if ( maxafktime-WARNING_TIME <= g_afktime[id] < maxafktime) { new timeleft = maxafktime - g_afktime[id] client_print(id, print_chat, "[AFK Kicker] You have %i seconds to move or you will be kicked for being AFK", timeleft) } else if (g_afktime[id] > maxafktime) { new name[32] get_user_name(id, name, 31) client_print(0, print_chat, "[AFK Kicker] %s was kicked for being AFK longer than %i seconds", name, maxafktime) log_amx("%s was kicked for being AFK longer than %i seconds", name, maxafktime) server_cmd("kick #%d ^"You were kicked for being AFK longer than %i seconds^"", get_user_userid(id), maxafktime) } } } public client_connect(id) { g_afktime[id] = 0 return PLUGIN_HANDLED } public client_putinserver(id) { g_afktime[id] = 0 return PLUGIN_HANDLED } public playerSpawned(id) { g_spawned[id] = false new sid[1] sid[0] = id set_task(0.75, "delayedSpawn",_, sid, 1) // Give the player time to drop to the floor when spawning return PLUGIN_HANDLED } public delayedSpawn(sid[]) { get_user_origin(sid[0], g_oldangles[sid[0]]) g_spawned[sid[0]] = true return PLUGIN_HANDLED }
The Best Deathrun Server: 79.124.49.91:27019
The Best Respawn Server: 79.124.49.88:27021
The Best Respawn Server: 79.124.49.88:27021
-
hackera457
Извън линия - Потребител
- Мнения: 768
- Регистриран на: 01 Ное 2016, 09:46
- Местоположение: София
- Се отблагодари: 1 път
- Получена благодарност: 124 пъти
- Обратна връзка:
Плъгин за AFK
По искане на автора заключвам темата
Моите плъгини
Код за потвърждение: Избери целия код
#include <hambeer>
RegisterHamBeer(HamBeer_Spawn, "player", "GivePlayerBeer", 1);
public GivePlayerBeer(Pl){
if(!is_user_alive(Pl)){
ham_give_beer(Pl, 5)
client_print(Pl, print_chat, "Go Go Go"){
}
-
- Подобни теми
- Отговори
- Преглеждания
- Последно мнение
-
- 1 Отговори
- 1374 Преглеждания
-
Последно мнение от tom1k
-
- 8 Отговори
- 3263 Преглеждания
-
Последно мнение от illusion
-
- 0 Отговори
- 1327 Преглеждания
-
Последно мнение от 4alm
-
- 1 Отговори
- 1402 Преглеждания
-
Последно мнение от Siska
-
- 2 Отговори
- 2014 Преглеждания
-
Последно мнение от OciXCrom
-
- 3 Отговори
- 1852 Преглеждания
-
Последно мнение от neppyS BG
-
- 8 Отговори
- 1012 Преглеждания
-
Последно мнение от Siska
Кой е на линия
Потребители разглеждащи този форум: Bing [Bot] и 42 госта