Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include < amxmodx >
- #include < amxmisc >
- #include < nvault >
- #include < engine >
- #include < fun >
- #include < hamsandwich >
- #pragma semicolon 1
- #define NAME "Knife Experience Mod"
- #define VERSION "1.0.0 beta"
- #define AUTHOR "SNIPER"
- #define VAR "KNFexpMOD"
- #define Slots 32
- #define Cvars 6
- #define Task 517
- new vault;
- new SyncHudObj1;
- new SyncHudObj2;
- enum {
- LevelRatio,
- HappyHourStart,
- HappyHourStop,
- InstantLoad,
- ChangeDelay, // 5(4)
- ChatPrefix
- };
- new cvar_pointer[Cvars];
- new const knife_names[][] = {
- "KNIFE_NONE", // 0
- "KNIFE_DEFAULT",
- "KNIFE_MACHETE",
- "KNIFE_BAK",
- "KNIFE_POCKET",
- "KNIFE_BUTCHER",// 5
- "KNIFE_WOODEN",
- "KNIFE_DRAGON",
- "KNIFE_NINJA",
- "KNIFE_BLACK",
- "KNIFE_HITMAN", // 10
- "KNIFE_ICE",
- "KNIFE_JEDAJ"
- };
- new const file_names[][] = {
- "machete", // 2
- "bak",
- "pocket",
- "butcher", // 5
- "wooden",
- "dragon",
- "ninja",
- "black",
- "hitman", // 10
- "ice",
- "jedaj"
- };
- new g_msg_bartime;
- new g_msg_saytext;
- new user_exp[Slots+1];
- new user_knife[Slots+1];
- new user_lvl[Slots+1] = 1;
- new earned_knifes[Slots+1] = 3;
- new user_new_knife[Slots+1];
- new AuthID[Slots+1][35];
- public plugin_init()
- {
- register_plugin(NAME, VERSION, AUTHOR);
- register_cvar(VAR, VERSION, (FCVAR_SERVER|FCVAR_SPONLY));
- RegisterHam(Ham_Killed, "player", "PlayerKilled", 1);
- RegisterHam(Ham_Spawn, "player", "PlayerSpawn", 1);
- register_event("CurWeapon", "CurWeapon", "be", "1=1");
- register_clcmd("say", "SayHandle");
- register_clcmd("say_team", "SayHandle");
- register_concmd("knife_setlvl", "CmdSetLvl", ADMIN_RCON, "<nick> <level>");
- register_dictionary("knife_expmod.txt");
- vault = nvault_open("KnifeExpMod");
- g_msg_bartime = get_user_msgid("BarTime");
- g_msg_saytext = get_user_msgid("SayText");
- SyncHudObj1 = CreateHudSyncObj();
- SyncHudObj2 = CreateHudSyncObj();
- register_message(get_user_msgid("SayText"), "SayTextHandle");
- static const cvar_defaults[][] = { "80", "22", "10", "1", "7", "[Knife EXP]" };
- static const cvar_names[][] = { "knife_level_ratio", "knife_happy_hour_start", "knife_happy_hour_stop",
- "knife_instant_load", "knife_change_delay", "knife_chat_prefix" };
- for(new i = 0; i < Cvars; i++)
- cvar_pointer[i] = register_cvar(cvar_names[i], cvar_defaults[i]);
- static cfg_file[] = "addons/amxmodx/configs/knife/settings.cfg";
- new line_num = file_size(cfg_file, 1);
- if(!file_exists(cfg_file) || line_num != Cvars+1)
- {
- if(!dir_exists("addons/amxmodx/configs/knife/"))
- mkdir("addons/amxmodx/configs/knife/");
- if(file_exists(cfg_file))
- delete_file(cfg_file);
- static const cvar_descriptions[][] = { "LEVEL_RATIO", "START", "STOP", "PREFIX", "INST_LOAD", "DELAY" };
- static line[128];
- for(new i = 0; i < Cvars; i++)
- {
- formatex(line, charsmax(line), "%s ^"%s^" // %L", cvar_names[i], cvar_defaults[i], LANG_SERVER, cvar_descriptions[i]);
- write_file(cfg_file, line);
- }
- }
- server_cmd("exec %s", cfg_file);
- }
- public plugin_precache()
- {
- precache_model("models/v_knife.mdl");
- precache_model("models/p_knife.mdl");
- static dir[34];
- for(new i = 0; i < sizeof file_names; i++)
- {
- formatex(dir, charsmax(dir), "models/knife_expmod/v_%s.mdl", file_names[i]);
- precache_model(dir);
- formatex(dir, charsmax(dir), "models/knife_expmod/p_%s.mdl", file_names[i]);
- precache_model(dir);
- }
- precache_sound("knife_expmod/select");
- precache_sound("knife_expmod/level_up");
- precache_sound("knife_expmod/exit");
- }
- public KnifeMenu(id)
- {
- static szText[60];
- formatex(szText, charsmax(szText), "%L", id, "MENU_TITLE");
- new menu = menu_create(szText, "KnifeMenu_Handle");
- for(new i = 1; i <= earned_knifes[id]; i++)
- {
- LoadData(id, i);
- formatex(szText, charsmax(szText), "\y%L \rLvl:\y %i \rExp:\y %i", id, knife_names[i], user_lvl[id], user_exp[id]);
- menu_additem(menu, szText);
- }
- LoadData(id, user_knife[id]);
- formatex(szText, charsmax(szText), "%L",id, "MENU_NEXT");
- menu_setprop(menu, MPROP_NEXTNAME, szText);
- formatex(szText, charsmax(szText), "%L",id, "MENU_BACK");
- menu_setprop(menu, MPROP_BACKNAME, szText);
- formatex(szText, charsmax(szText), "%L",id, "MENU_EXIT", earned_knifes[id]);
- menu_setprop(menu, MPROP_EXITNAME, szText);
- client_cmd(id, "spk knife_expmod/select");
- menu_display(id, menu);
- }
- public KnifeMenu_Handle(id, menu, item)
- {
- if(item == MENU_EXIT)
- {
- client_cmd(id, "spk knife_expmod/exit");
- menu_destroy(menu);
- return PLUGIN_CONTINUE;
- }
- item++;
- SaveData(id);
- if(item == user_knife[id])
- {
- PrintChat(id, "%L", id, "ALREADY_HAVE");
- client_cmd(id, "spk knife_expmod/exit");
- return PLUGIN_CONTINUE;
- }
- if(user_new_knife[id])
- {
- PrintChat(id, "%L", id, "CHANGE_PROGRES");
- client_cmd(id, "spk knife_expmod/exit");
- return PLUGIN_CONTINUE;
- }
- if(user_knife[id])
- {
- user_new_knife[id] = item;
- if(is_user_alive(id))
- {
- PrintChat(id, "%L", id, "WILL_BE_CHANGED");
- SetTask(id);
- strip_user_weapons(id);
- user_knife[id] = 0;
- }
- else
- PrintChat(id, "%L", id, "WILL_NEXT_ROUND");
- }
- else
- {
- if(is_user_alive(id))
- {
- strip_user_weapons(id);
- give_item(id, "weapon_knife");
- }
- user_knife[id] = item;
- LoadData(id, user_knife[id]);
- }
- menu_destroy(menu);
- client_cmd(id, "spk knife_expmod/select");
- return PLUGIN_CONTINUE;
- }
- public client_putinserver(id)
- {
- user_exp[id] = 0;
- user_knife[id] = 0;
- user_lvl[id] = 0;
- earned_knifes[id] = 0;
- user_new_knife[id] = 0;
- get_user_authid(id, AuthID[id], charsmax(AuthID));
- LoadData(id, user_knife[id]);
- }
- public client_disconnect(id)
- {
- SaveData(id);
- SetTask(id, 0);
- }
- public client_PreThink(id)
- {
- if(!is_user_connected(id))
- return PLUGIN_CONTINUE;
- if(!is_user_alive(id))
- {
- new target = entity_get_int(id, EV_INT_iuser2);
- if(!target || target == id)
- return PLUGIN_CONTINUE;
- new nick[64];
- get_user_name(target, nick, charsmax(nick));
- set_hudmessage(0, 255, 255, 0.02, 0.56, 0, 0.0, 0.3, 0.0, 0.0, -1);
- ShowSyncHudMsg(id, SyncHudObj1, "Nick: %s^n%L: %L^nLvl: %i^nExp: %i / %i^n%L: %i",nick, id, "KNIFE", id, knife_names[user_knife[target]], user_lvl[target], user_exp[target], ExpForLevel(target), id, "EARNED", earned_knifes[target]);
- return PLUGIN_CONTINUE;
- }
- set_hudmessage(255, 0, 0, 0.02, 0.17, 0, 0.0, 0.3, 0.0, 0.0, -1);
- ShowSyncHudMsg(id, SyncHudObj1, "[%L: %L ]^n[Lvl: %i ]^n[Exp: %i /%i ]^n[%L: %i ]", id, "KNIFE", id, knife_names[user_knife[id]], user_lvl[id], user_exp[id], ExpForLevel(id), id, "EARNED", earned_knifes[id]);
- return PLUGIN_CONTINUE;
- }
- public SayHandle(id)
- {
- new cmd[25], argv[25];
- formatex(cmd, charsmax(cmd), "/%L", id, "SAY_CMD");
- read_argv(1, argv, charsmax(argv));
- if(containi(argv, cmd) != -1)
- KnifeMenu(id);
- }
- public SayTextHandle()
- {
- new id = get_msg_arg_int(1);
- if(!is_user_connected(id))
- return PLUGIN_CONTINUE;
- new Message[256];
- get_msg_arg_string(2, Message, charsmax(Message));
- if(equal(Message,"#Cstrike_Chat_All"))
- {
- copy(Message, charsmax(Message), "");
- formatex(Message, charsmax(Message), "^x04[lvl: %i]", user_lvl[id]);
- add(Message, charsmax(Message), "^x03 %s1^x01 : %s2");
- }
- else
- {
- copy(Message, charsmax(Message), "");
- new len = formatex(Message, charsmax(Message), "^x04[lvl: %i]", user_lvl[id]);
- len += formatex(Message[len], charsmax(Message)-len, " ");
- get_msg_arg_string(2, Message[len], charsmax(Message)-len);
- }
- set_msg_arg_string(2, Message);
- return PLUGIN_CONTINUE;
- }
- public CallSpawn(id)
- {
- id -= Task;
- PlayerSpawn(id);
- }
- public PlayerSpawn(id)
- {
- SetTask(id, 0);
- if(!is_user_alive(id))
- return PLUGIN_CONTINUE;
- SaveData(id);
- strip_user_weapons(id);
- if(user_new_knife[id])
- {
- user_knife[id] = user_new_knife[id];
- user_new_knife[id] = 0;
- }
- if(!user_knife[id])
- {
- KnifeMenu(id);
- return PLUGIN_CONTINUE;
- }
- LoadData(id, user_knife[id]);
- give_item(id, "weapon_knife");
- return PLUGIN_CONTINUE;
- }
- public PlayerKilled(id, attacker)
- {
- if(!is_user_alive(attacker) || is_user_alive(id))
- return PLUGIN_CONTINUE;
- if(user_new_knife[id])
- {
- SetTask(id, 0);
- PrintChat(id, "%L", id, "WILL_NEXT_ROUND");
- }
- new new_exp = random_num(50, 150);
- if(IsHappyHour())
- new_exp*=2;
- user_exp[attacker] += new_exp;
- CheckLevel(attacker);
- return PLUGIN_CONTINUE;
- }
- public CheckLevel(id)
- {
- new current_lvl = user_lvl[id];
- while(user_exp[id] >= ExpForLevel(id))
- user_lvl[id]++;
- if(user_lvl[id] == current_lvl)
- {
- SaveData(id);
- return PLUGIN_CONTINUE;
- }
- set_hudmessage(255, 0, 0, -1.0, 0.20, 2, 2.0, 8.0);
- ShowSyncHudMsg(id, SyncHudObj2, "%L", id, "WELCOME_LEVEL", user_lvl[id]);
- client_cmd(id, "spk knife_expmod/level_up");
- if(is_user_alive(id))
- {
- static MapName[32], Health;
- get_mapname(MapName, charsmax(MapName));
- if(contain(MapName, "1hp") != -1) Health = 1;
- else if(contain(MapName, "35hp") != -1) Health = 35;
- else if(contain(MapName, "65hp") != -1) Health = 65;
- else if(contain(MapName, "200hp") != -1) Health = 200;
- else Health = 0;
- if(is_user_alive(id) && get_user_health(id) < Health)
- {
- set_user_health(id, Health);
- PrintChat(id, "%L", id, "WON_HEALTH");
- }
- }
- Calculate(id);
- SaveData(id);
- return PLUGIN_CONTINUE;
- }
- public Calculate(id)
- {
- while((earned_knifes[id] < 4 && user_lvl[id] > 9 && user_knife[id] <= 3) || (earned_knifes[id] < 5 && user_lvl[id] > 19 && user_knife[id] == 4) || (earned_knifes[id] < 6 && user_lvl[id] > 29 && user_knife[id] == 5))
- {
- earned_knifes[id] ++;
- set_hudmessage(255, 0, 0, -1.0, 0.15, 2, 2.0, 12.0);
- ShowSyncHudMsg(id, SyncHudObj2, "%L %L!",id, "YOU_EARNED", id, knife_names[earned_knifes[id]]);
- }
- while((earned_knifes[id] < 7 && user_lvl[id] >= 40 && user_knife[id] == 6) || (earned_knifes[id] < 9 && user_lvl[id] >= 50 && user_knife[id] > 6 && user_knife[id] < 9) || (earned_knifes[id] < 11 && user_lvl[id] >= 60 && user_knife[id] > 8 && user_knife[id] < 11))
- {
- earned_knifes[id] += 2;
- set_hudmessage(255, 0, 0, -1.0, 0.15, 2, 2.0, 12.0);
- ShowSyncHudMsg(id, SyncHudObj2, "%L %L %L %L!",id, "YOU_EARNED", id, knife_names[earned_knifes[id]-1], id, "AND", id, knife_names[earned_knifes[id]]);
- }
- if(earned_knifes[id] >= sizeof knife_names)
- earned_knifes[id] = sizeof knife_names - 1;
- }
- stock ExpForLevel(id)
- return user_lvl[id]*get_pcvar_num(cvar_pointer[LevelRatio]) + user_lvl[id]*get_pcvar_num(cvar_pointer[LevelRatio]);
- public CmdSetLvl(id, level, cid)
- {
- if(!cmd_access(id, level, cid, 3))
- {
- client_cmd(id, "spk knife_expmod/exit");
- return PLUGIN_CONTINUE;
- }
- new arg[35];
- read_argv(1, arg, sizeof arg -1);
- new player = cmd_target(id, arg);
- if(!player)
- return PLUGIN_CONTINUE;
- read_argv(2, arg, sizeof arg -1);
- new value = str_to_num(arg);
- if(value < 3)
- value = 3;
- else if(value >= sizeof knife_names)
- value = sizeof knife_names -1;
- earned_knifes[player] = value;
- SaveData(player);
- if(!dir_exists("addons/amxmodx/configs/knife/logs/"))
- mkdir("addons/amxmodx/configs/knife/logs/");
- static LogFile[58]; new LogText[196];
- static Date[9]; new Time[9];
- new Name[32], Name2[32];
- get_time("%H:%M:%S", Time, charsmax(Time));
- get_time("%y%m%d", Date, charsmax(Date));
- get_user_name(id, Name, charsmax(Name));
- get_user_name(player, Name2, charsmax(Name2));
- formatex(LogFile, charsmax(LogFile), "addons/amxmodx/configs/knife/logs/%s.log", Date);
- formatex(LogText, charsmax(LogText), "^n^n^n[%s] Admin: %s^"<%s>^" %L: knife_setlvl ^"%s<%s>^" level %i",Time, Name, AuthID[id], LANG_SERVER, "COMMAND", Name2, AuthID[player], value);
- write_file(LogFile, LogText);
- client_cmd(id, "spk knife_expmod/select");
- return PLUGIN_CONTINUE;
- }
- public CurWeapon(id)
- {
- if(get_user_weapon(id) != CSW_KNIFE || !is_user_connected(id))
- return PLUGIN_CONTINUE;
- if(user_knife[id] == 1 || !user_knife[id])
- {
- entity_set_string(id, EV_SZ_viewmodel, "models/v_knife.mdl");
- entity_set_string(id, EV_SZ_weaponmodel, "models/p_knife.mdl");
- return PLUGIN_CONTINUE;
- }
- static Model[34];
- formatex(Model, charsmax(Model), "models/knife_expmod/v_%s.mdl", file_names[user_knife[id]-2]);
- entity_set_string(id, EV_SZ_viewmodel, Model);
- formatex(Model, charsmax(Model), "models/knife_expmod/p_%s.mdl", file_names[user_knife[id]-2]);
- entity_set_string(id, EV_SZ_weaponmodel, Model);
- return PLUGIN_CONTINUE;
- }
- public SaveData(id)
- {
- new VaultKey[45], VaultData[25];
- formatex(VaultKey, charsmax(VaultKey),"%s-%i-exp", AuthID[id], user_knife[id]);
- formatex(VaultData, charsmax(VaultData),"#%i#%i", user_exp[id], user_lvl[id]);
- nvault_set(vault, VaultKey, VaultData);
- formatex(VaultKey, charsmax(VaultKey), "%s-knifes", AuthID[id]);
- formatex(VaultData, charsmax(VaultData), "#%i#%i", earned_knifes[id], user_knife[id]);
- nvault_set(vault, VaultKey, VaultData);
- }
- public LoadData(id, knife)
- {
- new VaultKey[45], VaultData[15], PlayerData[2][8];
- formatex(VaultKey, charsmax(VaultKey), "%s-knifes", AuthID[id]);
- nvault_get(vault, VaultKey, VaultData, charsmax(VaultData));
- replace_all(VaultData, charsmax(VaultData), "#", " ");
- parse(VaultData, PlayerData[0], 7, PlayerData[1], 7);
- earned_knifes[id] = str_to_num(PlayerData[0])>3?str_to_num(PlayerData[0]):3;
- if(!user_knife[id] && get_pcvar_num(cvar_pointer[InstantLoad]) && !user_exp[id])
- {
- user_knife[id] = str_to_num(PlayerData[1]);
- knife = user_knife[id];
- }
- copy(PlayerData[0], 7, "");
- copy(PlayerData[1], 7, "");
- formatex(VaultKey, charsmax(VaultKey),"%s-%i-exp", AuthID[id], knife);
- nvault_get(vault, VaultKey, VaultData, charsmax(VaultData));
- replace_all(VaultData, charsmax(VaultData), "#", " ");
- parse(VaultData, PlayerData[0], 7, PlayerData[1], 7);
- user_exp[id] = str_to_num(PlayerData[0]);
- user_lvl[id] = str_to_num(PlayerData[1])>0?str_to_num(PlayerData[1]):1;
- }
- stock bool: IsHappyHour()
- {
- static Hours, Minutes, Seconds;
- time(Hours, Minutes, Seconds);
- new BeginHour = get_pcvar_num(cvar_pointer[HappyHourStart]);
- new EndHour = get_pcvar_num(cvar_pointer[HappyHourStop]);
- if(BeginHour == EndHour)
- return false;
- if(BeginHour > EndHour && (Hours >= BeginHour || Hours < EndHour))
- return true;
- if(BeginHour < EndHour && (Hours >= BeginHour || Hours < EndHour))
- return true;
- return false;
- }
- stock MakeBarTime(index, seconds)
- {
- message_begin(MSG_ONE_UNRELIABLE, g_msg_bartime, _, index);
- write_short(seconds);
- message_end();
- }
- stock PrintChat(index, const input[], any:...)
- {
- static prefix[25];
- static message[191];
- get_pcvar_string(cvar_pointer[ChatPrefix], prefix, charsmax(prefix));
- new len = formatex(message, charsmax(message), "^4%s^1 ", prefix);
- vformat(message[len], 190-len, input, 3);
- message_begin(MSG_ONE_UNRELIABLE, g_msg_saytext, _, index);
- write_byte(index);
- write_string(message);
- message_end();
- }
- stock SetTask(index, set = 1)
- {
- if(set && !task_exists(index+Task))
- {
- set_task(get_pcvar_float(cvar_pointer[ChangeDelay]), "CallSpawn", index+Task);
- MakeBarTime(index, get_pcvar_num(cvar_pointer[ChangeDelay]));
- return PLUGIN_CONTINUE;
- }
- if(task_exists(index+Task))
- {
- remove_task(index+Task);
- MakeBarTime(index, 0);
- }
- return PLUGIN_CONTINUE;
- }
- public plugin_end()
- nvault_close(vault);
Add Comment
Please, Sign In to add comment