Code:
/*
MEDIC - REGENERATION AND SPEED
HWGUY - HP AND AP
SOLDIER - GRAVITY AND ARMOR
SCOUT - SPEED AND GRAVITY
MADE BY FROZEN USP!
*/
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>
#include <nvault>
#include <engine>
#include <fakemeta>
#define TASK_REGEN 999
#define CLASS_NOTHING 0
#define CLASS_SCOUT 1
#define CLASS_SOLDIER 2
#define CLASS_HWGUY 3
#define CLASS_MEDIC 4
#define MAXCLASSES 5
new PlayerClass[33]
new PlayerXP[33]
new PlayerLevel[33]
new const CLASSES[MAXCLASSES][] = {
"None",
"Scout",
"Soldier",
"Hwguy",
"Medic"
}
new msgtext
new const LEVELS[20] = {
100,
200,
400,
800,
1600,
3200,
4000,
4500,
5000,
5300,
5900,
6800,
7600,
8500,
9000,
10000,
12000,
15000,
16000,
20000
}
public plugin_init()
{
register_plugin("TFC Mod", "1.0", "Frozen Usp")
register_cvar("sv_tfcmod", "1")
register_event("DeathMsg", "DeathMsg", "b")
register_cvar("XP_per_kill", "20")
register_menucmd(register_menuid("menu_ChooseClass"),1023,"DoChooseClass");
register_event("ResetHUD","ResetHUD","be")
register_event("ResetHUD","on_spawn","be")
register_event("CurWeapon","Event_CurWeapon","be","1=1")
msgtext = get_user_msgid("StatusText")
register_clcmd("say /changeclass", "ChooseClass")
register_clcmd("say_team /changeclass", "ChooseClass")
}
public on_spawn(id)
{
// give the user 50 extra health
if(PlayerClass[id] ==CLASS_HWGUY)
set_user_health(id,200)
// and 100 points of armour + a helmet
if(PlayerClass[id] == CLASS_HWGUY || PlayerClass[id] ==CLASS_SOLDIER)
cs_set_user_armor(id,150,CS_ARMOR_VESTHELM)
// and reduce their gravity to half
if(PlayerClass[id] == CLASS_SCOUT || PlayerClass[id] ==CLASS_SOLDIER)
set_user_gravity(id,0.3)
// and in 5 seconds, call the on_regen function
set_task(5.0,"on_regen",TASK_REGEN+id)
}
public Event_CurWeapon(id)
{
if(PlayerClass[id] == CLASS_SCOUT || PlayerClass[id] ==CLASS_MEDIC)
{
set_user_maxspeed(id,430.0)
}
return
}
public on_regen(id)
{
// here, we take away the constant part of the task's id ( 999 )
// and are left with just the player id
// (the task id is 999 + player's id )
if ( id > TASK_REGEN )
if(PlayerClass[id] ==CLASS_MEDIC)
id -= TASK_REGEN ;
// don't regen dead people !
if ( !is_user_alive(id) )
return ;
// if(PlayerClass[id] ==CLASS_MEDIC)give user 5 hp
if(PlayerClass[id] ==CLASS_MEDIC)
set_user_health(id,get_user_health(id)+5)
// and do it again in 5 seconds
if(PlayerClass[id] ==CLASS_MEDIC)
set_task(5.0,"on_regen",TASK_REGEN+id)
}
public SaveXP(id)
{
new authid[32];
get_user_authid(id,authid,31);
new vaultkey[64], vaultdata[64];
format(vaultkey,63,"CLASS-%s-class",authid);
format(vaultdata,63,"%d",PlayerClass[id]);
set_vaultdata(vaultkey,vaultdata);
format(vaultkey,63,"CLASS-%s-xp",authid);
format(vaultdata,63,"%d",PlayerXP[id]);
set_vaultdata(vaultkey,vaultdata);
format(vaultkey,63,"CLASS-%s-level",authid);
format(vaultdata,63,"%d",PlayerLevel[id]);
set_vaultdata(vaultkey,vaultdata);
}
public LoadXP(id)
{
new authid[32];
get_user_authid(id,authid,31);
new vaultkey[64], vaultdata[64];
format(vaultkey,63,"CLASS-%s-class",authid);
get_vaultdata(vaultkey,vaultdata,63);
PlayerClass[id] = str_to_num(vaultdata);
format(vaultkey,63,"CLASS-%s-xp",authid);
get_vaultdata(vaultkey,vaultdata,63);
PlayerXP[id] = str_to_num(vaultdata);
format(vaultkey,63,"CLASS-%s-level",authid);
get_vaultdata(vaultkey,vaultdata,63);
PlayerLevel[id] = str_to_num(vaultdata);
}
public client_connect(id)
{
if(get_cvar_num("SaveXP") == 1) {
LoadXP(id)
client_print(id, print_chat, "[TFC] Loaded")
client_print(id, print_chat, "[TFC] You are a %s with level %s and %s XP", PlayerClass[id], PlayerLevel[id], PlayerXP[id])
}
}
public client_disconnect(id)
{
if(get_cvar_num("SaveXP") == 1) {
SaveXP(id)
}
}
stock ChooseClass(id)
{
new menu[192]
new keys = MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4
format(menu, 191, "TFC: Choose Class^n^n1. Scout^n2. Soldier^n3. Hwguy^n4. Medic^n^n0. Exit")
show_menu(id, keys, menu, -1, "menu_ChooseClass")
return PLUGIN_CONTINUE
}
public DoChooseClass(id, key)
{
if(key == 0) {
if(PlayerClass[id] == CLASS_SCOUT) {
ChooseClass(id)
return PLUGIN_HANDLED
}
PlayerClass[id] = CLASS_SCOUT
}
if(key == 1) {
if(PlayerClass[id] == CLASS_SOLDIER) {
ChooseClass(id)
return PLUGIN_HANDLED
}
PlayerClass[id] = CLASS_SOLDIER
}
if(key == 2) {
if(PlayerClass[id] == CLASS_HWGUY) {
ChooseClass(id)
return PLUGIN_HANDLED
}
PlayerClass[id] = CLASS_HWGUY
}
if(key == 3) {
if(PlayerClass[id] == CLASS_MEDIC) {
ChooseClass(id)
return PLUGIN_HANDLED
}
PlayerClass[id] = CLASS_MEDIC
}
ShowHUD(id)
return PLUGIN_HANDLED
}
public ResetHUD(id)
{
if(PlayerClass[id] == CLASS_NOTHING) {
ChooseClass(id)
return PLUGIN_HANDLED
}
return PLUGIN_HANDLED
}
public DeathMsg()
{
if(get_cvar_num("sv_tfcmod") == 0) {
return PLUGIN_HANDLED
}
new attacker = read_data(1)
if(PlayerClass[attacker] == CLASS_NOTHING) {
return PLUGIN_HANDLED
}
if(PlayerLevel[attacker] == 6) {
return PLUGIN_HANDLED
}
PlayerXP[attacker] += get_cvar_num("XP_per_kill")
if(PlayerXP[attacker] >= LEVELS[PlayerLevel[attacker]]) {
PlayerLevel[attacker] += 1
client_print(attacker, print_chat, "[TFC] Congratulations! You are now level %i!", PlayerLevel[attacker])
if(get_cvar_num("SaveXP") == 1) {
SaveXP(attacker)
}
ShowHUD(attacker)
}
ShowHUD(attacker)
return PLUGIN_CONTINUE
}
public ShowHUD(id)
{
new HUD[51]
format(HUD, 50, "[%s]Level: %i XP: %i", CLASSES[PlayerClass[id]], PlayerLevel[id], PlayerXP[id])
message_begin(MSG_ONE, msgtext, {0,0,0}, id)
write_byte(0)
write_string(HUD)
message_end()
return
}