#include amxmodx #include reapi native zp_get_user_ammo_packs(id) native zp_set_user_ammo_packs(id, ammount) native zp_get_user_zombie(id) #define TEAMUP_TIME 12.0 #define TASK_TEAMMATE 13399 new g_RequestSender[33] new g_RequestReceiver[33] new g_Teammates[33] new TeamKillSpr new g_Hud new const TeamKill_Sounds[][] = { "teamkill_sounds/teamkill_01.wav", "teamkill_sounds/teamkill_02.wav", "teamkill_sounds/teamkill_03.wav", "teamkill_sounds/teamkill_04.wav", "teamkill_sounds/teamkill_05.wav", "teamkill_sounds/teamkill_06.wav", "teamkill_sounds/teamkill_07.wav", "teamkill_sounds/teamkill_08.wav" } enum { CVAR_MONEY_REWARD, CVAR_HP_REWARD_HUMAN, CVAR_HP_REWARD_ZOMBIE, CVAR_ARMOR_REWARD_HUMAN, CVAR_TEAMKILL_SOUND, CVAR_TEAMKILL_SPRITE, CVAR_MAX_HP_HUMAN, CVAR_MAX_AR_HUMAN, CVAR_MAX_HP_ZOMBIE, CVAR_TAG, MAX_CVARS } new g_cvars[MAX_CVARS] new cTag[32] new const Commands[][][] = { {"say /teamup", "Teamup"}, {"say /accept", "Accept_Teamup"}, {"say /reject", "Reject_Teamup"}, {"say /leave", "Leave_Team"} } public plugin_init() { register_plugin("[ZP] Teamup", "3.2", "sNk_DarK") for (new i = 0; i < sizeof Commands; i++) register_clcmd(Commands[i][0], Commands[i][1]) g_cvars[CVAR_MONEY_REWARD] = register_cvar("teamkill_packs_reward", "75") g_cvars[CVAR_HP_REWARD_HUMAN] = register_cvar("teamkill_hp_reward_human", "20") g_cvars[CVAR_HP_REWARD_ZOMBIE] = register_cvar("teamkill_hp_reward_zombie", "700") g_cvars[CVAR_ARMOR_REWARD_HUMAN] = register_cvar("teamkill_armor_reward_human", "20") g_cvars[CVAR_TEAMKILL_SOUND] = register_cvar("teamkill_sound", "1") g_cvars[CVAR_TEAMKILL_SPRITE] = register_cvar("teamkill_sprite", "1") g_cvars[CVAR_MAX_HP_HUMAN] = register_cvar("teamkill_max_hp_human", "200") g_cvars[CVAR_MAX_AR_HUMAN] = register_cvar("teamkill_max_ar_human", "200") g_cvars[CVAR_MAX_HP_ZOMBIE] = register_cvar("teamkill_max_hp_zombie", "7500") g_cvars[CVAR_TAG] = register_cvar("teamkill_tag", "[ServerName]") get_pcvar_string(g_cvars[CVAR_TAG], cTag, 32) RegisterHookChain(RG_CBasePlayer_Killed, "RG_PlayerKilled") set_task(random_float(160.0, 175.0), "Print_Advert", .flags = "b") g_Hud = CreateHudSyncObj() } public plugin_precache() { TeamKillSpr = precache_model("sprites/teamkill/teamkill_sNk.spr") for (new i = 0; i < sizeof TeamKill_Sounds; i++) precache_sound(TeamKill_Sounds[i]) } public Print_Advert() client_print_color(0, 0, "^4%s^1 To team up with someone, type^3 /teamup^1 | receive more bonuses in a team", cTag) public client_putinserver(id) { g_RequestSender[id] = 0 g_RequestReceiver[id] = 0 g_Teammates[id] = 0 remove_task(TASK_TEAMMATE + id) } public client_disconnected(id) { if (g_Teammates[id]) { client_print_color(g_Teammates[id], g_Teammates[id], "^4%s^1 Your teammate has left the server!", cTag) remove_task(TASK_TEAMMATE + g_Teammates[id]) g_Teammates[g_Teammates[id]] = 0 g_Teammates[id] = 0 } g_RequestSender[id] = 0 g_RequestReceiver[id] = 0 g_Teammates[id] = 0 remove_task(TASK_TEAMMATE + id) } public Task_Show_Teammate(id) { id -= TASK_TEAMMATE set_hudmessage(0, 255, 0, 0.60, 0.95, 0, 6.0, 1.5, 0.0, 0.0, -1) ShowSyncHudMsg(id, g_Hud, "-= Teaming up with =-^n%s", get_name(g_Teammates[id])) } public Teamup(id) { if (g_RequestSender[id] || g_RequestReceiver[id]) { client_print_color(id, id, "^4%s^1 You already have an active request!", cTag) return 1 } if (g_Teammates[id]) { client_print_color(id, id, "^4%s^1 You are already in a team!", cTag) return 1 } new players[32], num get_players(players, num, "ac") new bool:can_display = false new info[6], name[32] new menu = 0 for (new i = 0; i < num; i++) { new target = players[i] if (target != id && !g_Teammates[target] && !g_RequestReceiver[target]) { if (!can_display) { menu = menu_create("Select a player", "teamup_menu_handler") can_display = true } get_user_name(target, name, 32) num_to_str(target, info, 6) menu_additem(menu, name, info) } } if (can_display) cs_menudisplay(id, menu) else client_print_color(id, id, "^4%s^1 No players available for a team!", cTag) return 1 } public teamup_menu_handler(id, menu, item) { if (item == -3) { menu_destroy(menu) return } new info[6] menu_item_getinfo(menu, item, _, info, 6) new target = str_to_num(info) menu_destroy(menu) if (!is_user_connected(target)) { client_print_color(id, id, "^4%s^1 The selected player is no longer connected!", cTag) return } if (g_Teammates[target] || g_RequestReceiver[target]) { client_print_color(id, id, "^4%s^1 The selected player is not available for a team!", cTag) return } g_RequestSender[id] = target g_RequestReceiver[target] = id client_print_color(target, target, "^4%s^3 %s^1 has sent you a team request! Use^3 /accept^1 to accept or^3 /reject^1 to decline", cTag, get_name(id)) client_print_color(id, id, "^4%s^1 You have sent a team request to^3 [ %s ]", cTag, get_name(target)) set_hudmessage(0, 255, 0, -1.0, 0.1, 0, 4.0, 1.5, 0.0, 0.0, -1) show_hudmessage(target, "-= You have received a team request from =-^n%s", get_name(id)) set_task(TEAMUP_TIME, "teamup_request_expired", id) } public teamup_request_expired(sender) { if (!g_RequestSender[sender]) return new receiver = g_RequestSender[sender] if (g_Teammates[sender] != 0 || g_Teammates[receiver] != 0) return client_print_color(sender, sender, "^4%s^1 Your team request has expired!", cTag) client_print_color(receiver, receiver, "^4%s^1 The team request has expired!", cTag) g_RequestSender[sender] = 0 g_RequestReceiver[receiver] = 0 } public Accept_Teamup(id) { if (!g_RequestReceiver[id]) { client_print_color(id, id, "^4%s^1 You have no active requests!", cTag) return 1 } new sender = g_RequestReceiver[id] g_RequestSender[sender] = 0 g_RequestReceiver[id] = 0 g_Teammates[id] = sender g_Teammates[sender] = id set_task(1.0, "Task_Show_Teammate", id + TASK_TEAMMATE, .flags="b") set_task(1.0, "Task_Show_Teammate", sender + TASK_TEAMMATE, .flags="b") client_print_color(id, id, "^4%s^1 You have accepted the team request from^3 %s^1! Use^3 /leave^1 to leave the team", cTag, get_name(sender)) client_print_color(sender, sender, "^4%s^3 %s^1 has accepted your team request! Use^3 /leave^1 to leave the team", cTag, get_name(id)) return 1 } public Reject_Teamup(id) { if (!g_RequestReceiver[id]) { client_print_color(id, id, "^4%s^1 You have no active requests!", cTag) return 1 } new sender = g_RequestReceiver[id] client_print_color(id, id, "^4%s^1 You have rejected the team request from^3 %s^1!", cTag, get_name(sender)) client_print_color(sender, sender, "^4%s^3 %s^1 has rejected your team request!", cTag, get_name(id)) g_RequestSender[sender] = 0 g_RequestReceiver[id] = 0 return 1 } public Leave_Team(id) { if (!g_Teammates[id]) { client_print_color(id, id, "^4%s^1 You have no active requests!", cTag) return 1 } new teammate = g_Teammates[id] client_print_color(id, id, "^4%s^1 You have left the team!", cTag) client_print_color(teammate, teammate, "^4%s^1 Your teammate has left the team!", cTag) remove_task(TASK_TEAMMATE + id) remove_task(TASK_TEAMMATE + teammate) g_Teammates[id] = 0 g_Teammates[teammate] = 0 return 1 } public RG_PlayerKilled(victim, attacker) { if (!is_user_alive(attacker)) return if (g_Teammates[attacker] && g_Teammates[attacker] != victim && attacker != victim) { give_rewards(attacker) client_print_color(attacker, attacker, "^4%s^1 You have received^3 %d HP | %d AR | %d Packs^1 for killing someone through the team", \ cTag, zp_get_user_zombie(attacker) ? get_pcvar_num(g_cvars[CVAR_HP_REWARD_ZOMBIE]) : get_pcvar_num(g_cvars[CVAR_HP_REWARD_HUMAN]), \ get_pcvar_num(g_cvars[CVAR_ARMOR_REWARD_HUMAN]), get_pcvar_num(g_cvars[CVAR_MONEY_REWARD])) if (get_pcvar_num(g_cvars[CVAR_TEAMKILL_SPRITE]) != 0) send_teamkill_effect(victim) if (get_pcvar_num(g_cvars[CVAR_TEAMKILL_SOUND]) != 0) emit_sound(attacker, CHAN_VOICE, TeamKill_Sounds[random_num(0, sizeof TeamKill_Sounds -1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM) new teammate = g_Teammates[attacker] if (is_user_alive(teammate)) { give_rewards(teammate) client_print_color(teammate, teammate, "^4%s^1 You have received^3 %d HP | %d AR | %d Packs^1 because your teammate^4 [ %s ]^1 killed someone", \ cTag, zp_get_user_zombie(teammate) ? get_pcvar_num(g_cvars[CVAR_HP_REWARD_ZOMBIE]) : get_pcvar_num(g_cvars[CVAR_HP_REWARD_HUMAN]), \ get_pcvar_num(g_cvars[CVAR_ARMOR_REWARD_HUMAN]), get_pcvar_num(g_cvars[CVAR_MONEY_REWARD]), get_name(attacker)) } } } send_teamkill_effect(victim) { if (!is_user_connected(victim)) return new origin[3] get_user_origin(victim, origin) message_begin(MSG_PVS, SVC_TEMPENTITY, origin) write_byte(TE_SPRITE) write_coord(origin[0]) write_coord(origin[1]) write_coord(origin[2] + 18) write_short(TeamKillSpr) write_byte(1) write_byte(255) message_end() } give_rewards(id) { zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + get_pcvar_num(g_cvars[CVAR_MONEY_REWARD])) if (zp_get_user_zombie(id)) { if (Float:get_entvar(id, var_health) + get_pcvar_float(g_cvars[CVAR_HP_REWARD_ZOMBIE]) <= get_pcvar_float(g_cvars[CVAR_MAX_HP_ZOMBIE])) set_entvar(id, var_health, Float:get_entvar(id, var_health) + get_pcvar_float(g_cvars[CVAR_HP_REWARD_ZOMBIE])) } else { if (Float:get_entvar(id, var_health) + get_pcvar_float(g_cvars[CVAR_HP_REWARD_HUMAN]) <= get_pcvar_float(g_cvars[CVAR_MAX_HP_HUMAN])) set_entvar(id, var_health, Float:get_entvar(id, var_health) + get_pcvar_float(g_cvars[CVAR_HP_REWARD_HUMAN])) if (rg_get_user_armor(id) + get_pcvar_num(g_cvars[CVAR_ARMOR_REWARD_HUMAN]) <= get_pcvar_num(g_cvars[CVAR_MAX_AR_HUMAN])) rg_set_user_armor(id, rg_get_user_armor(id) + get_pcvar_num(g_cvars[CVAR_ARMOR_REWARD_HUMAN]), ARMOR_NONE) } } get_name(id) { new name[32] get_user_name(id, name, 32) return name } cs_menudisplay(id, menu, page = 0) { if (!is_user_connected(id)) { menu_destroy(menu) return } menu_display(id, menu, page) }