/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include < cstrike >
#include < fun >
#include < hamsandwich >
#include <fun>
#include <nvault>
#include < csx >
//Define:
#define PLUGIN "LevelMode"
#define VERSION "1.0"
#define AUTHOR "Paradox."
#define MAXCLASSES 4 //aici schimbati numarul claselor
#define MAXLEVELS 9 //aici schimbati numarul levelelor
//Colorchat:
#if defined _colorchat_included
#endinput
#endif
#define _colorchat_included
enum Color
{
NORMAL = 1, // clients scr_concolor cvar color
GREEN, // Green Color
TEAM_COLOR, // Red, grey, blue
GREY, // grey
RED, // Red
BLUE, // Blue
}
new TeamName[][] =
{
"",
"TERRORIST",
"CT",
"SPECTATOR"
}
ColorChat(id, Color:type, const msg[], {Float,Sql,Result,_}:...)
{
new message[256];
switch(type)
{
case NORMAL: // clients scr_concolor cvar color
{
message[0] = 0x01;
}
case GREEN: // Green
{
message[0] = 0x04;
}
default: // White, Red, Blue
{
message[0] = 0x03;
}
}
vformat(message[1], 251, msg, 4);
// Make sure message is not longer than 192 character. Will crash the server.
message[192] = '^0';
new team, ColorChange, index, MSG_Type;
if(id)
{
MSG_Type = MSG_ONE;
index = id;
} else {
index = FindPlayer();
MSG_Type = MSG_ALL;
}
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[])
{
static bool:saytext_used;
static get_user_msgid_saytext;
if(!saytext_used)
{
get_user_msgid_saytext = get_user_msgid("SayText");
saytext_used = true;
}
message_begin(type, get_user_msgid_saytext, _, id);
write_byte(id)
write_string(message);
message_end();
}
Team_Info(id, type, team[])
{
static bool:teaminfo_used;
static get_user_msgid_teaminfo;
if(!teaminfo_used)
{
get_user_msgid_teaminfo = get_user_msgid("TeamInfo");
teaminfo_used = true;
}
message_begin(type, get_user_msgid_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 <= get_maxplayers())
{
if(is_user_connected(++i))
return i;
}
return -1;
}
//Cvaruri:
new PlayerXP[33],PlayerLevel[33],PlayerClass[33] //xp,level si clasa playerului
new XP_Kill,XP_Knife,XP_Hs,XP_AWP //valoare xp-ului primit
new XP_save //porneste/opreste salvarea xp-ului
new XP_plant,XP_defuse,XP_he // plan,defuse,he
new g_vault //salvarea xp-ului
new advertise ,reminder// arata mesaje la conectare
//Clase :
new const CLASSES[MAXCLASSES][] = {
"Incepator",
"Mediu",
"Avansat",
"Expert"
}
//Levele
new const LEVELS[MAXLEVELS] = {
100,
500,
1000,
5000,
10000,
50000,
60000,
90000,
100000
}
//Plugin_init
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
//Comenzi publice
register_clcmd("say /xp" ,"PrintXp") //arata xp-lu in chat
register_clcmd("say /info" ,"InfoXp") //arata un motd cu informatii despre pluginul de xp
register_clcmd("sayw /class","ClassCmd") //arata un meniu de unde iti poti alege clasa
//Comenzi admini
register_concmd("amx_givexp" ,"CmdGiveXp",ADMIN_RCON,"Adauga xp unui user")
register_concmd("amx_takexp", "CmdTakeXp",ADMIN_RCON,"Ia din xp-ul unui user")
register_concmd("amx_xp" ,"CmdFindXp" ,ADMIN_RCON,"Arata xp-ul unui player")
//Ham
RegisterHam( Ham_Spawn, "player", "Playerspawn", 1 )
//Deathmsg
register_event( "DeathMsg", "DeathMsg", "a" )
//Inregistrare cvaruri xp
XP_Kill=register_cvar("xp_kill","20") //cat xp sa primeasca pe kill
XP_Hs=register_cvar("xp_hs","0") //cat xp sa primeasca pe hs
XP_AWP=register_cvar("xp_awp","20") //cat xp sa primeasca cand foloseste awp
XP_Knife=register_cvar("xp_knife","20") //cat xp sa primeasca cand foloseste knife
XP_plant=register_cvar("xp_plant","0")// cat xp sa primeasca pe plant
XP_defuse=register_cvar("xp_defuse","0") //cat xp sa primeasca pe defuse
XP_save=register_cvar("xp_save" ,"1") //porneste/opreste salvarea xp-ului
XP_he=register_cvar("xp_he","0") // xp primit pe he
advertise=register_cvar("xp_advertise" ,"1")
reminder=register_cvar("xp_reminder","1")
//Inregistrare cvar nvault(new system)
g_vault=nvault_open("XpClasicMod") //facem un fisier nvault care sa pastreze datele
}
public client_putinserver(id) {
if(get_cvar_num("XP_save")==1) { //verifica daca trebuie sa salveze xp
LoadXp(id)
}
set_task(10.0,"ClientMsg",id) //mesaj la conectare
set_task(300.0, "ReminderMsg", id ) //reminder
}
public client_disconnect(id) {
if(get_pcvar_num(XP_save)==1) { //verifica daca trebuie sa salveze xp
SaveXp(id)
PlayerXP[id]=0 //stergem xp-ul temporar pentru a nu putea fi folosit de alti playeri
PlayerLevel[id]=0 //stergem level-ul temporar pentru a nu putea fi folosit de alti playeri
PlayerClass[id]=0 //stergem clasa temporar
}
}
//Se salveaza doar levelul si xp-ul. Clasa nu se salveaza,e doar pentru design.
public SaveXp(id) //salvam xp-ul
{
new name[32]
get_user_name(id,name,31) //salvam pe nume
new vaultkey[64],vaultdata[256]
format(vaultkey,63,"%s-XpClasic",name)
format(vaultdata,255,"%i#%i#",PlayerXP[id],PlayerLevel[id])
nvault_set(g_vault,vaultkey,vaultdata) //salvam datele
return PLUGIN_CONTINUE
}
public LoadXp(id) //incarcam xp-ul
{
new name[32]
get_user_name(id,name,31)
new vaultkey[64],vaultdata[256]
format(vaultkey,63,"%s-XpClasic",name)
format(vaultdata,255,"%i#%i#",PlayerXP[id],PlayerLevel[id])
//incarcam xp-ul
nvault_get(g_vault,vaultkey,vaultdata,255)
replace_all(vaultdata, 255, "#", " ")
new playerxp[32], playerlevel[32]
parse(vaultdata, playerxp, 31, playerlevel, 31)
PlayerXP[id] = str_to_num(playerxp)
PlayerLevel[id] = str_to_num(playerlevel)
return PLUGIN_CONTINUE
}
public ClientMsg(id) { //mesaj la conectare
if(get_pcvar_num(advertise) == 1) {
ColorChat(id,GREEN,"[ClasicXp]Bine ai venit!")
ColorChat(id,GREEN,"[ClasicXp]Fa fraguri pentru a acumula puncte de experienta.")
ColorChat(id,GREEN,"[ClasicXp]Pe acest server ruleaza modul XP.")
ColorChat(id,GREEN,"[ClasicXp]Pentru mai multe detalii scrie /info.")
}
}
public ReminderMsg(id) { //iti arata xp-ul,clasa si levelul in hud
if(get_pcvar_num(reminder) ==1) {
set_hudmessage(255, 0, 0, 0.75, 0.01, 0, 6.0, 15.0)
show_hudmessage(id, "Level: %i XP: %i Class: %s",PlayerLevel[id],PlayerXP[id],CLASSES[PlayerClass[id]])
}
}
public PrintXp(id) {
ColorChat(id,RED,"Ai %i XP cu levelul %i si clasa %s.",PlayerXP[id],PlayerLevel[id],CLASSES[PlayerClass[id]])
}
public CmdGiveXp(id) { //da xp unui player
if( get_user_flags( id ) & ADMIN_RCON )
{
new PlayerToGive[ 32 ], XP[ 32 ]
read_argv( 1,PlayerToGive, 31 )
read_argv( 2, XP, 31 )
new Player = cmd_target( id, PlayerToGive, 9 )
if( !Player ) {
return 1
}
new XPtoGive = str_to_num( XP )
new name[ 32 ], owner[ 32 ]
get_user_name( id, owner, 31 )
get_user_name( Player, name, 31 )
ColorChat(0,GREEN,"Adminul %s i-a dat lui %s %s XP.", owner,name,XP)
PlayerXP[ Player ] += XPtoGive
SaveXp( id )
}
else
{
client_print( id, print_console, "Nu ai acces la aceasta comanda." )
}
return 0
}
public CmdTakeXp(id) { //ia xp-ul unui player
if( get_user_flags( id ) & ADMIN_RCON )
{
new PlayerToTake[ 32 ], XP[ 32 ]
read_argv( 1, PlayerToTake, 31 )
read_argv( 2, XP, 31 )
new Player = cmd_target( id, PlayerToTake, 9 )
if( !Player ) {
return 1
}
new XPtoTake = str_to_num( XP )
new name[ 32 ], owner[ 32 ]
get_user_name( id, owner, 31 )
get_user_name( Player, name, 31 )
ColorChat(0,GREEN,"Adminul %s i-a luat lui %s %s XP.",owner,name,XP)
PlayerXP[ Player ] -= XPtoTake
SaveXp( id )
}
else
{
client_print( id, print_console, "Nu ai acces la aceasta comanda." );
}
return 0
}
public CmdFindXp(id) { //aflam xp-ul unui player
if( get_user_flags( id ) & ADMIN_RCON)
{
new Arg1[ 32 ]
read_argv( 1, Arg1, 31 )
new PlayertoFind= cmd_target( id, Arg1, 9 )
if( !PlayertoFind ) {
return 1
}
new Name[ 32 ]
get_user_name( id, Name, 31 )
console_print( id, "Player %s are levelul %i si %i XP.", Name, PlayerLevel[ PlayertoFind], PlayerXP[ PlayertoFind ] )
}
else
{
client_print( id, print_console, "Nu ai acces la aceasta comanda." )
}
return 0
}
public DeathMsg(iWpnIndex) {
new headshot=read_data(3) //determina daca playerul a fost omorat prin hs
new Victim=read_data(2) // variabila care retine victima
new victim_name[32] //variabila care retine numele vctimei
get_user_name( Victim, victim_name, 31 ) //aflam numele victimei
new weapon, HitPoint, attacker = get_user_attacker( Victim, weapon, HitPoint)
if(headshot) {
PlayerXP[attacker] += get_pcvar_num(XP_Hs) //adauga xp pentru 1 hs
client_print(attacker,print_chat,"Ai primit %i XP pentru ca l-ai omorat prin hs pe %s.",get_pcvar_num(XP_Hs),victim_name)
}
else {
PlayerXP[attacker ] += get_pcvar_num( XP_Kill ) //adauga xp pentru 1 kill
client_print(attacker,print_chat,"Ai primit %i XP pentru ca l-ai omorat pe %s. ",get_pcvar_num(XP_Kill),victim_name)
}
if(weapon== CSW_KNIFE) {
PlayerXP[attacker] += get_pcvar_num(XP_Knife) //adauga xp pentru 1 kill cu knife
client_print(attacker,print_chat,"Ai primit %i XP pentru ca l-ai omorat cu knife pe %s.",get_pcvar_num(XP_Knife),victim_name)
}
if(weapon== CSW_AWP) {
PlayerXP[attacker] += get_pcvar_num(XP_AWP) //adauga xp pentru 1 kill cu awp
client_print(attacker,print_chat,"Ai primit %i XP pentru ca l-ai omorat cu awp pe %s.",get_pcvar_num(XP_AWP),victim_name)
}
if( iWpnIndex == CSW_HEGRENADE )
{
PlayerXP[attacker] += get_pcvar_num(XP_he) //adauga xp pentru 1 kill cu he
client_print(attacker,print_chat,"Ai primit %i XP pentru ca l-ai omorat cu he pe %s.",get_pcvar_num(XP_he),victim_name)
}
PlayerXP[Victim ] -= get_pcvar_num( XP_Kill ) //scade xp pentru 1 kill
client_print(Victim,print_chat,"Ai pierdut %i XP pentru ca ai fost omorat. ")
}
public Playerspawn( id )
{
if( ( PlayerLevel[ id] < 10 && ( PlayerXP[ id ] > LEVELS[ PlayerLevel[ id ] ] ) ) )
{
while( PlayerXP[ id ] > LEVELS[ PlayerLevel[ id] ] )
{
PlayerLevel[ id] += 1
ColorChat(id,GREEN,"Felicitari,acum ai %i XP cu levelul %i si clasa %s,",PlayerXP[id],PlayerLevel[id],CLASSES[PlayerClass[id]])
}
while( PlayerXP[ id ] < LEVELS[ PlayerLevel[ id] ] )
{
PlayerLevel[ id] -= 1
ColorChat(id,GREEN,"Acum ai %i XP cu levelul %i si clasa %s,",PlayerXP[id],PlayerLevel[id],CLASSES[PlayerClass[id]])
}
}
}
public bomb_planted( planter )
{
PlayerXP[planter] += get_pcvar_num(XP_plant) //adauga xp pentru plant
client_print(planter,print_chat,"Ai primit %i XP pentru plant.",get_pcvar_num(XP_plant))
}
public bomb_defused( defuser )
{
PlayerXP[defuser] += get_pcvar_num(XP_defuse) //adauga xp pentru defuse
client_print(defuser,print_chat,"Ai primit %i XP pentru defuse.",get_pcvar_num(XP_defuse))
}
public InfoXp(id) {
show_motd(id,"/addons/amxmodx/configs/inf.txt")
}
public ClassCmd(id) {
new menu = menu_create("Class Menu" , "Class_Handler");
menu_additem(menu ,"Incepator", "1" , 0);
menu_additem(menu ,"Mediu", "2" , 0);
menu_additem(menu ,"Avansat", "3" , 0);
menu_additem(menu ,"Expert", "4" , 0);
menu_setprop(menu , MPROP_EXIT , MEXIT_ALL);
menu_display(id , menu , 0);
}
public Class_Handler(id , menu , item) //handlerul meniului
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
}
new szCommand[6] , szName[64]; new access , callback
menu_item_getinfo(menu , item , access , szCommand , 5 , szName , 63 , callback)
new i = str_to_num(szCommand)
if(PlayerClass[id] != i)
{
PlayerClass[id] = i
client_print(id,print_chat,"Acum esti %s",CLASSES[i])
}
else
{
client_print(id,print_chat,"Esti deja %s",CLASSES[i])
}
menu_destroy(menu);
return PLUGIN_CONTINUE
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/