Mai jos aveti sursa (.sma )
- | Afiseaza codul
#include <amxmodx> #include <amxmisc> #include <csx> #include <nvault> #include <cstrike> #include <fun> #define Plugin "Points System" #define Version "1.3" #define Author "Alka / Doombringer" #define MAXSLOTS 32 new doublekills[33], multikills[33], spree[33] new kills[33], deaths[33] new Float:spreetime[33] new toggle_spree enum Color { YELLOW = 1, GREEN, TEAM_COLOR, GREY, RED, BLUE } new TeamName[][] = { "", "TERRORIST", "CT", "SPECTATOR" } new kill_points, death_points, time_points; new def_points, boom_points; new head_points, knife_points, nade_points, tk_points, skill_points; new TeamInfo,SayText,MaxSlots; new points[32], vote_choices[3] new bool:IsConnected[MAXSLOTS + 1]; new warmup_time new iconstatus; new bool:g_PistolsDisabled = false new spawn_time public plugin_init() { register_plugin(Plugin, Version, Author); register_event("RoundTime", "RoundStart", "b"); register_event("DeathMsg","Event_Death","a"); kill_points = register_cvar("PS_kill_points", "1"); death_points = register_cvar("PS_death_points", "0"); def_points = register_cvar("PS_defusion_points", "20"); boom_points = register_cvar("PS_boom_points", "20"); time_points = register_cvar("PS_time_points", "00"); head_points = register_cvar("PS_head_points", "2"); knife_points = register_cvar("PS_knife_points", "5"); nade_points = register_cvar("PS_nade_points", "5"); tk_points = register_cvar("PS_tk_points", "0"); skill_points = register_cvar("PS_skill_points", "0"); toggle_spree = register_cvar("PS_spree",""); register_cvar("PS_warmuptime", "0"); register_cvar("PS_respawn", "0"); register_cvar("PS_respawntime", "0"); register_cvar("PS_sptime","0"); register_clcmd("say /points", "show_points"); register_clcmd("say /toppoints", "show_top15"); register_concmd("amx_points", "cmd_points", ADMIN_LEVEL_H, " - <name> <points> Set's someones points"); register_concmd("amx_vote_point", "cmd_vote_points", ADMIN_LEVEL_H, " - <name> <reason> <give/remove> Start's a point vote"); register_concmd("amx_warmupround", "warmup", ADMIN_LEVEL_H, "WarmUp round! Only Knifes..."); TeamInfo = get_user_msgid("TeamInfo"); SayText = get_user_msgid("SayText"); MaxSlots = get_maxplayers(); iconstatus = get_user_msgid("StatusIcon"); } public check_pistols() { set_task(1.0, "check_pistols") new mapname[32] get_mapname(mapname,31) if ( containi(mapname,"ka_")!=-1 || containi(mapname,"scoutzknivez")!=-1 ) g_PistolsDisabled = true } public spawn_timer(id) { spawn_time-- if(spawn_time < 1) { set_task(0.4, "player_spawn", id) spawn_time = get_cvar_num("PS_respawntime") return PLUGIN_HANDLED; } set_hudmessage(0, 100,255, -1.0, 0.35, 0, 3.0, 2.0) show_hudmessage(id, "You will respawn in %d seconds", spawn_time) set_task(1.0, "spawn_timer", id) return PLUGIN_HANDLED; } public Event_Death() { if ( !get_cvar_num("PS_respawn") ) return PLUGIN_CONTINUE; new victim = read_data(2) spawn_time = get_cvar_num("PS_respawntime") spawn_timer(victim) return PLUGIN_CONTINUE; } public player_giveitems(id) { give_item(id, "item_suit") give_item(id, "weapon_knife") if ( !g_PistolsDisabled ) { new wpnList[32] = 0, number = 0, bool:foundGlock = false, bool:foundUSP = false get_user_weapons(id,wpnList,number) for (new i = 0;i < number;i++) { if (wpnList == CSW_GLOCK18) foundGlock = true if (wpnList == CSW_USP) foundUSP = true } if (cs_get_user_team(id) == CS_TEAM_T && !foundGlock ) { give_item(id,"weapon_glock18") give_item(id,"ammo_9mm") give_item(id,"ammo_9mm") } else if (cs_get_user_team(id) == CS_TEAM_CT && !foundUSP ) { give_item(id,"weapon_usp") give_item(id,"ammo_45acp") give_item(id,"ammo_45acp") } } return PLUGIN_CONTINUE; } public player_spawn(id) { if(!is_user_alive(id)) { spawn(id); set_task(0.6, "player_spawn", id); if( get_cvar_num("PS_sptime") ) { set_task(0.1, "protect", id) } return PLUGIN_CONTINUE; } set_task(0.2, "player_giveitems", id); return PLUGIN_CONTINUE; } public protect(id) { new Float:SPTime = get_cvar_float("PS_sptime"); set_user_godmode(id, 1) if(get_user_team(id) == 1) { set_user_rendering(id,kRenderFxGlowShell,18,166,122,kRenderFxNone,1) } else if(get_user_team(id) == 2) { set_user_rendering(id,kRenderFxGlowShell,18,166,122,kRenderFxNone,1) } set_task(SPTime, "protect_off", id) return PLUGIN_HANDLED; } public protect_off(id) { if(!is_user_connected(id)) return PLUGIN_HANDLED; else { set_user_godmode(id, 0) set_user_rendering(id, kRenderFxGlowShell, 0, 0,0, kRenderNormal,0) } return PLUGIN_HANDLED; } public cmd_points(id, level, cid) { if(!cmd_access(id, level, cid, 2)) return PLUGIN_HANDLED; new arg1[32], arg2[11], name[32] read_argv(1, arg1, 31) read_argv(2, arg2, 10) new player = cmd_target(id, arg1, 1) if(!player) return PLUGIN_HANDLED; points[player] = str_to_num(arg2) get_user_name(player, name, 31) client_print(id, print_console,"Successfully set %s points to %s!", name, arg2) ColorChat(player,GREY,"An admin set your points to ^x04%s", arg2) return PLUGIN_HANDLED; } public cmd_vote_points(id, level, cid) { if(!cmd_access(id, level, cid, 2)) return PLUGIN_HANDLED; new arg1[32], arg2[132], arg3[17] read_argv(1, arg1, 31) read_argv(2, arg2, 131) read_argv(3, arg3, 16) if(!equal(arg3, "give") && !equal(arg3, "remove")) { client_print(id, print_chat, "invalid mode. Valid modes are: give, remove.") return PLUGIN_HANDLED; } new player = cmd_target(id, arg1, 2) display_menu(player, arg2, arg3) return PLUGIN_HANDLED; } public save_points(id) { new valut = nvault_open("points") if(valut == INVALID_HANDLE) set_fail_state("nValut returned invalid handle") new key[62], value[10], ip[33] get_user_ip(id, ip, 32, 1); format(key, 61,"%s-points", ip) format(value, 9,"%d", points[id]) nvault_set(valut, key, value) nvault_close(valut) return PLUGIN_CONTINUE; } public load_points(id) { new valut = nvault_open("points") if(valut == INVALID_HANDLE) set_fail_state("nValut returned invalid handle") new key[100], ip[33] get_user_ip(id, ip, 32, 1); formatex(key, 99,"%s-points", ip) points[id] = nvault_get(valut, key) nvault_close(valut) return PLUGIN_CONTINUE; } public show_points(id) { ColorChat(id, GREEN, "^x01[^x04ELF^x01]Detii in acest moment ^x03%d ^x01points!", points[id]) } public give_time_points(id) { if(cs_get_user_team(id) != CS_TEAM_SPECTATOR) { points[id] += get_pcvar_num(time_points) ColorChat(id, GREEN, "^x01[^x04ELF^x01] Ai primit ^x03%d ^x01points pentru ca ai stat pe server timp de o ora",get_pcvar_num(time_points)) } } public client_putinserver(id) { set_task(3600.0, "give_time_points", id,_,_,"b") set_task(20.0, "advertise", id) load_points(id) } public client_disconnect(id) { save_points(id) } public client_death(killer, victim, weapon, hitplace, TK) { if(TK) { points[killer] -= get_pcvar_num(tk_points) ColorChat(killer, GREEN, "^x01[^x04PointsSystem^x01] You lost ^x03%d ^x01points for TKing!", get_pcvar_num(tk_points)) return PLUGIN_CONTINUE } points[killer] += get_pcvar_num(kill_points) points[victim] -= get_pcvar_num(death_points) ColorChat(killer, GREEN, "^x01[^x04ELF^x01] Ai primit ^x03%d ^x01points pentru acest frag!", get_pcvar_num(kill_points)) ColorChat(victim, GREEN, "^x01[^x04ELF^x01] Ai pierdut ^x03%d ^x01points pentru ca ai murit!", get_pcvar_num(death_points)) if(hitplace == HIT_HEAD) { points[killer] += get_pcvar_num(head_points) ColorChat(killer, GREEN, "^x01[^x04ELF^x01] Ai primit ^x03%d ^x01points pentru acest HeadShoot!", get_pcvar_num(head_points)) } if(weapon == CSW_KNIFE) { points[killer] += get_pcvar_num(knife_points) ColorChat(killer, GREEN , "^x01[^x04ELF^x01] Ai primit ^x03%d ^x01points pentru frag cu cutitul!", get_pcvar_num(knife_points)) } if(weapon == CSW_HEGRENADE) { points[killer] += get_pcvar_num(nade_points) ColorChat(killer, GREEN, "^x01[^x04ELF^x01] Ai primit ^x03%d ^x01points pentru frag cu HEgrenade!", get_pcvar_num(nade_points)) } if(weapon == CSW_KNIFE && hitplace == HIT_HEAD) { points[killer] += get_pcvar_num(skill_points) ColorChat(killer, GREEN, "^x01[^x04ELF^x01] Ai primit ^x03%d ^x01points pentru skill!", get_pcvar_num(skill_points)) } if( get_pcvar_num(toggle_spree) ) { if(get_user_team(killer)!=get_user_team(victim)&&killer!=victim) { kills[killer] = kills[killer] + 1 deaths[victim] = deaths[victim] + 1 check_kills(killer) } } return PLUGIN_CONTINUE; } public bomb_explode(planter) { points[planter] += get_pcvar_num(boom_points) ColorChat(planter, GREEN, "^x01[^x04ELF^x01] Ai primit ^x03%d ^x01points pentru ca ai detonat bomba!", get_pcvar_num(boom_points)) } public bomb_defused(defuser) { points[defuser] += get_pcvar_num(def_points) ColorChat(defuser, GREEN, "^x01[^x04ELF^x01] Ai primit ^x03%d ^x01points pentru ca ai defuzat bomba!", get_pcvar_num(def_points)) } public show_top15(id) { new i, count; static sort[33][2], maxPlayers; if(!maxPlayers) maxPlayers = get_maxplayers(); for(i=1;i<=maxPlayers;i++) { sort[count][0] = i; sort[count][1] = points; count++; } SortCustom2D(sort,count,"stats_custom_compare"); new motd[1024], len len = format(motd, 1023,"<body bgcolor=#000000><font color=#FFB000><pre>") len += format(motd[len], 1023-len,"%2s %-22.22s %6s^n", "#", "Nick", "Points") static name[32] for(new a = 0; a < 15; a++) { get_user_name(sort[a][0], name, 31) len += format(motd[len], 1023-len,"%2d %-22.22s %6d^n", a + 1, name, sort[a][1]) } len += format(motd[len], 1023-len,"</body></font></pre>") show_motd(id, motd, "Points Top 15:") return PLUGIN_CONTINUE; } public stats_custom_compare(elem1[],elem2[]) { if(elem1[1] > elem2[1]) return -1; else if(elem1[1] < elem2[1]) return 1; return 0; } public display_menu(id, reason[], mode[]) { new temp[56], name[32] get_user_name(id, name, 31) if(equal(mode, "give")) format(temp, 55, "\rA dat %s points deoarece %s?", name, reason) else if(equal(mode, "remove")) format(temp, 55, "\rA sters points lui %s deoarece %s?", name, reason) new menu = menu_create(temp, "menu_handler") menu_additem(menu, "\wYes", "1", 0) menu_additem(menu, "\wNo", "2", 0) for(new i = 1; i < get_playersnum(); i++) menu_display(i, menu, 0) set_task(30.0, "finish_vote", id, mode, 16) } public finish_vote(id, mode[]) { client_print(0, print_chat, "Voting over...") if(vote_choices[1] > vote_choices[2]) { if(equal(mode, "give")) { points[id]++ client_print(0, print_chat, "Alegerea ^"yes^" a castigat votul!") client_print(id, print_chat, "Ai castigat puncte in urma votului!") } else if(equal(mode, "remove")) { points[id]-- client_print(0, print_chat, "Alegerea ^"yes^" a castigat votul!") client_print(id, print_chat, "Ai pierdut puncte in urma votului!") } } else if(vote_choices[1] < vote_choices[2]) { if(equal(mode, "give")) { client_print(0, print_chat, "Alegerea ^"no^" a castigat votul!") client_print(id, print_chat, "Din pacate niciun punct pentru tine! =)") } else if(equal(mode, "remove")) { client_print(0, print_chat, "Alegerea ^"no^" a castigat votul!") client_print(id, print_chat, "Ai avut noroc si nu ai pierdut puncte") } } for(new i = 1; i < get_playersnum(); i++) menu_cancel(i) return PLUGIN_CONTINUE; } public menu_handler(id, menu, item) { if (item == MENU_EXIT) { menu_destroy(menu) return PLUGIN_HANDLED } new data[6], name[32] new access, callback menu_item_getinfo(menu, item, access, data, 5, _, _, callback) new key = str_to_num(data) get_user_name(id, name, 31) vote_choices[key]++ client_print(0, print_chat,"%s voted on %s", name, vote_choices[key] == 1 ? "yes":"no") menu_cancel(id) return PLUGIN_HANDLED; } public advertise(id) { set_hudmessage(0,255, 0, 0.30, 0.85, 1, 6.0, 6.0); show_hudmessage(id,"Acest server foloseste un Sistem de Puncte!Tasteaza /points.^nIn acest moment ai: %d points!",points[id]) } public RoundStart(id) { set_spree(id) reset_spree(id) } public check_kills(id) { spree[id] = spree[id] + 1 spreetime[id] = spreetime[id] + 4.0 new name[20] get_user_name(id, name, 19) new r, g, b r = random(256) g = random(256) b = random(256) if(spree[id] == 2) { set_hudmessage(r, g, b, 0.01, 0.54, 1, 6.0, 6.0, 0.1, 0.2, -1); show_hudmessage(0, "Double Kill: %s", name) } if(spree[id] == 3) { set_hudmessage(r, g, b, 0.01, 0.54, 1, 6.0, 6.0, 0.1, 0.2, -1); show_hudmessage(0, "Triple Kill: %s", name) } if(spree[id] == 4) { set_hudmessage(r, g, b, 0.01, 0.54, 1, 6.0, 6.0, 0.1, 0.2, -1); show_hudmessage(0, "Multi Kill: %s", name) } if(spree[id] == 5) { set_hudmessage(r, g, b, 0.01, 0.54, 1, 6.0, 6.0, 0.1, 0.2, -1); show_hudmessage(0, "Ultra kill: %s", name) } if(spree[id] == 6) { set_hudmessage(r, g, b, 0.01, 0.54, 1, 6.0, 6.0, 0.1, 0.2, -1); show_hudmessage(0, "Mega kill: %s", name) } if(spree[id] > 7) { set_hudmessage(r, g, b, 0.01, 0.54, 1, 6.0, 6.0, 0.1, 0.2, -1); show_hudmessage(0, "Rampage: %s", name) } remove_task(id) set_task(spreetime[id], "reset_spree", id) } public reset_spree(id) { set_spree(id) spree[id] = 0 } public set_spree(id) { if(spree[id] == 2) doublekills[id] = doublekills[id] + 1 else if(spree[id] > 2) multikills[id] = multikills[id] + 1 } public warmup(id,level,cid) { if(!cmd_access(id,level,cid,2)) return PLUGIN_HANDLED; new arg1[4]; read_argv(1,arg1,3); new players[32], num get_players(players, num) new player for(new i = 0; i < num; i++) { player = players if(equal(arg1,"1") || equali(arg1,"on")) { warmuptimer(player) showicon(player) set_task(0.1, "switchweapon", player,_,_,"b") } } return PLUGIN_CONTINUE } public warmuptimer(player) { warmup_time-- set_hudmessage(255,255,255, -1.0, 0.35, 0, 3.0, 2.0) show_hudmessage(player, "Warm Up round! %d seconds left.", warmup_time) set_task(1.0, "warmuptimer", player); if(warmup_time < 1) { warmup_time = get_cvar_num("PS_warmuptime"); server_cmd("sv_restart 1"); remove_task(player); return PLUGIN_HANDLED; } return PLUGIN_HANDLED; } public switchweapon(player) { engclient_cmd(player,"weapon_knife") } public showicon(player) { message_begin(MSG_ONE,iconstatus,{0,0,0},player); write_byte(2); write_string("d_knife"); write_byte(0); write_byte(255); write_byte(0); message_end(); } public ColorChat(id, Color:type, const msg[], {Float,Sql,Result,_}:...) { static message[256]; switch(type) { case YELLOW: { message[0] = 0x01; } case GREEN: { message[0] = 0x04; } default: { message[0] = 0x03; } } vformat(message[1], 251, msg, 4); message[192] = '^0'; new team, ColorChange, index, MSG_Type; if(!id) { index = FindPlayer(); MSG_Type = MSG_ALL; } else { MSG_Type = MSG_ONE; index = id; } team = get_user_team(index); ColorChange = ColorSelection(index, MSG_Type, type); ShowColorMessage(index, MSG_Type, message); if(ColorChange) { Team_Info(index, MSG_Type, TeamName[team]); } } ShowColorMessage(id, type, message[]) { message_begin(type, SayText, _, id); write_byte(id) write_string(message); message_end(); } Team_Info(id, type, team[]) { message_begin(type, TeamInfo, _, id); write_byte(id); write_string(team); message_end(); return 1; } ColorSelection(index, type, Color:Type) { switch(Type) { case RED: { return Team_Info(index, type, TeamName[1]); } case BLUE: { return Team_Info(index, type, TeamName[2]); } case GREY: { return Team_Info(index, type, TeamName[0]); } } return 0; } FindPlayer() { new i = -1; while(i <= MaxSlots) { if(IsConnected[++i]) { return i; } } return -1; }