hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2025.08.03. 00:53



Jelenlévő felhasználók

Jelenleg 384 felhasználó van jelen :: 0 regisztrált, 0 rejtett és 384 vendég

A legtöbb felhasználó (2883 fő) 2025.07.30. 16:00-kor tartózkodott itt.

Regisztrált felhasználók: nincs regisztrált felhasználóaz elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása Hozzászólás a témához  [16 hozzászólás ]  OldalElőző12
Szerző Üzenet
HozzászólásElküldve:2012.04.11. 21:09 
Offline
Őskövület
Avatar

Csatlakozott:2012.02.07. 23:34
Hozzászólások:2192
Megköszönt másnak: 27 alkalommal
Megköszönték neki: 55 alkalommal
Kód -ba rakd így:
Kód:
new PLUGIN_VERSION[] = "1.0.2"

// Based experience ; this are times by the players level
#define Kill_Experience    50   
#define Hos_Experience    20
#define Obj_Experience    35
#define MIN_PLAYERS    1 //Minimum players that are connected to get objective xp

#define Max_Level    60
// Max level for each passive upgrades
#define MaxLevel_Health    12
#define MaxLevel_Armor    12
#define MaxLevel_Speed    12
#define MaxLevel_Gravity   12
#define MaxLevel_Stealth   12

// How much you get per level
#define Health_PerLevel    15
#define Armor_PerLevel    20
#define Speed_PerLevel    30   
#define Gravity_PerLevel   0.1 // 10%
#define Stealth_PerLevel   60

// Max items players can carry
#define Max_PlayerItems    3

#define Item_Money    1 // 0 = Experience; 1 = dollars   
#define Item_Death    1 // Player lose item on death

// Item plugins configs
#define MAX_ITEMS    100
#define MAX_MAPITEMS    100
#define MAX_ITEM_NAME_SIZE   64
#define MAX_ITEM_DESC_SIZE   128


new LevelUpSound[] = { "events/task_complete.wav" }
new DeniedSound[] = { "buttons/blip1.wav"}
new UpgradedSound[] = { "items/tr_kevlar.wav" }
new BoughtItemSound[] = { "items/ammopickup1.wav" }
new PickUpItemSound[] = { "items/ammopickup2.wav" }
new DropItemSound[]   = { "events/enemy_died.wav" }
new ItemModel[] = { "models/w_gaussammo.mdl" }

new LEVELS[Max_Level] =
{
5, //0
10, //1
20,   //2
40,   //3
80,   //4
160,   //5
320,   //6
640,   //7
1000,   //8
2000,   //9
3000,   //10
4000,   //11
5000,   //12
6000,   //13
8000,   //14
10000,   //15
20000, //16
30000, //17
40000,   //18
50000,   //19
60000,   //20
70000,   //21
80000,   //22
90000,   //23
100000,   //24
110000,   //25
120000,   //26
130000,   //27
140000,   //28
150000,   //29
160000,   //30
170000,   //31
180000,   //32
190000,   //33
200000,   //34
220000,   //35
240000,   //36
250000,   //37
260000,   //38
280000,   //39
300000,   //40
330000,   //41
350000,   //42
360000,   //43
390000,   //44
400000,   //45
440000,   //46
450000,   //47
490000,   //48
500000,   //49
550000,   //50
600000,   //51
700000,   //52
800000,   //53
900000,   //54
1000000,//55
1200000,//56
1400000,//57
1600000,//58
1800000,//59
2000000,//60

}

/* DO NOT EDIT BEYOND THIS LINE UNLESS YOU KNOW WHAT YOU ARE DOING */

#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <engine>
#include <vault>
#include <fun>

new g_HealthLevel[33]
new g_ArmorLevel[33]
new g_SpeedLevel[33]
new g_GravityLevel[33]
new g_StealthLevel[33]
new bool:g_PlayerReseted[33]

new PlayerXp[33]
new PlayerLevel[33]
new PlayerPoints[33]

new g_MapItemNum
new bool:ftimeover
new bool:g_DirExist
new g_ConfigsDir[64]
new g_ItemOriginDir[64]
new g_MapItemOrgins[MAX_MAPITEMS+1][3]

new g_numberofitems
new g_menuPosition[33]
new g_itemindex[MAX_ITEMS+1]
new g_itemcost[MAX_ITEMS+1]
new g_itemname[MAX_ITEMS+1][MAX_ITEM_NAME_SIZE+1]
new g_itemdesc[MAX_ITEMS+1][MAX_ITEM_DESC_SIZE+1]
new bool:g_iPlayerItem[33][MAX_ITEMS+1]
new g_PlayerNumItems[33]



new PLUGIN_NAME[] = "Upgrades Mod 2.0"
new PLUGIN_AUTHOR[] = "Cheap_Suit"

public plugin_init()
{
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
register_cvar("um_enable", "1")
register_cvar("um_autosavexp", "1")
register_cvar("um_itemsremoved", "1")

if(get_cvar_num("um_enable"))
{
register_clcmd("um_addxp", "cmd_AddXP", ADMIN_IMMUNITY, "<@all/t/ct>/<name><xp> - give users xp eg. um_addxp cheap_suit 100")
register_clcmd("um_setlevel", "cmd_SetLevel", ADMIN_IMMUNITY, "<name><level> - give users xp eg. um_setlevel cheap_suit 5")
register_clcmd("um_mapitems", "Open_MapItemConfig", ADMIN_IMMUNITY, "- Open's Map item configs")
register_clcmd("say /ummenu", "open_MainMenu")
register_clcmd("say /upgrade", "open_PassiveUpgrades")
register_clcmd("say /itemshop", "open_ItemUpgrades")
register_clcmd("say /itemlist", "display_itemlist")
register_clcmd("say /umhelp", "display_help")
register_clcmd("say /myitems", "display_myitems")
register_clcmd("say /dropitems","cmd_DropItems")
register_concmd("ummenu", "open_MainMenu")
register_concmd("upgrade", "open_PassiveUpgrades")
register_concmd("itemshop", "open_ItemUpgrades")
register_concmd("itemlist", "display_itemlist")
register_concmd("umhelp", "display_help")
register_concmd("myitems", "display_myitems")
register_concmd("dropitems", "cmd_DropItems")

register_touch("UmItem", "player", "Pickup_Items")
register_directory()

register_event("DeathMsg", "Event_DeathMsg", "a")
register_event("ResetHUD", "Event_ResetHUD", "be")
register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
register_event("Damage", "Event_Damage", "bd", "2>0")
register_event("StatusValue", "Event_StatusValue", "bd", "1=2")

register_event("TextMsg", "Event_GameRestart", "a", "2=#Game_will_restart_in", "2&#Game_C")
register_event("SendAudio", "Event_RoundEnd", "a", "2=%!MRAD_terwin", "2=%!MRAD_ctwin", "2=%!MRAD_rounddraw")

register_logevent("LogEvent_Objectives", 3, "1=triggered")
register_logevent("LogEvent_RoundStart", 2, "0=World triggered", "1=Round_Start")

register_menucmd(register_menuid("Main Upgrades Menu"), 1023, "Action_MainMenu")
register_menucmd(register_menuid("Passive Upgrades"), 1023, "Action_PassiveUpgrades")
register_menucmd(register_menuid("MI Config Menu"), 1023, "Action_MapItemConfig")
register_menucmd(register_menuid("Item Shop"), 1023, "Action_ItemUpgrades")


//Advertise the command to the dead people
set_task(random_float(50.0, 90.0), "display_Advertisements", _, _, _, "b")
set_task(0.1, "client_experience", 12, _, _, "b")
}
set_task(0.1, "check_cvar", 34, _, _, "b")
}

public check_cvar()
{
if(!get_cvar_num("um_enable"))
{
remove_items()
remove_task(12)
remove_task(34)

for(new i = 1; i <= get_maxplayers(); ++i) if(is_user_connected(i))
{
message_begin(MSG_ONE, get_user_msgid("StatusText"), {0, 0, 0}, i)
write_byte(0)
write_string("")
message_end()
}

for(new i = 0; i < get_pluginsnum(); ++i)
{
new temp[2], name[64]
get_plugin(i, name, 63, temp, 1, temp, 1, temp, 1, temp, 1)
if(equali(name, "Item_", 5)) {
server_cmd("amxx pause %s", name)
}
}

server_cmd("amxx pause %s", PLUGIN_NAME)
server_print("If enabled again, restart server for upgrades mod to work properly")
}
}

register_directory()
{
get_configsdir(g_ConfigsDir, 63)
format(g_ItemOriginDir, 63, "%s/itemorigin", g_ConfigsDir)

if(!dir_exists(g_ItemOriginDir))
{
log_amx("itemorigin directory does not exist")
g_DirExist = false
}
else
{
g_DirExist = true

new CurMap[32]
get_mapname(CurMap, 31)
Load_Origins(CurMap)
}

}

public client_authorized(id)
{
g_HealthLevel[id] = 0
g_ArmorLevel[id] = 0
g_SpeedLevel[id] = 0
g_GravityLevel[id] = 0
g_StealthLevel[id] = 0

PlayerXp[id] = 0
PlayerLevel[id] = 0
PlayerPoints[id] = 0

g_PlayerNumItems[id] = 0
for(new i = 1; i <= MAX_ITEMS; ++i) {
g_iPlayerItem[id][MAX_ITEMS] = false
}
LoadData(id)
}

public client_disconnect(id)
{
if(get_cvar_num("um_autosavexp")) {
SaveData(id)
}
}

public client_experience()
{   
new Players[32], iNum
get_players(Players, iNum)

for(new i = 0; i < iNum; ++i)
{
new id = Players[i]
if(is_user_alive(id))
{
new InfoMsg[255]
format(InfoMsg, 254, "Level: %d/%d XP: %d/%d Points: %d Items: %d/%d", PlayerLevel[id], Max_Level-1, PlayerXp[id], LEVELS[PlayerLevel[id]], PlayerPoints[id], g_PlayerNumItems[id], Max_PlayerItems)

message_begin(MSG_ONE, get_user_msgid("StatusText"), {0, 0, 0}, id)
write_byte(0)
write_string(InfoMsg)
message_end()
}

if(PlayerXp[id] >= LEVELS[Max_Level-1] || PlayerLevel[id] >= Max_Level-1)
{
PlayerLevel[id] = Max_Level-1
PlayerXp[id] = LEVELS[Max_Level-1]
return PLUGIN_CONTINUE
}

if(PlayerXp[id] >= LEVELS[PlayerLevel[id]])
{
PlayerLevel[id] += 1
PlayerPoints[id] += 1
display_PassiveUpgrades(id)
client_cmd(id, "spk %s", LevelUpSound)
}
}
return PLUGIN_CONTINUE
}

public LogEvent_RoundStart()
{
ftimeover = true
set_task(0.6, "Spawn_Items")
}

public Event_RoundEnd()
{
ftimeover = false
if(get_cvar_num("um_itemsremoved")) {
set_task(2.5, "remove_items")
}
}

public remove_items()
{
new items = find_ent_by_class(-1, "UmItem")
while(items)
{
remove_entity(items)
items = find_ent_by_class(items, "UmItem")
}
}

public Event_GameRestart()
{
new Float:fRestartCvar = get_cvar_float("sv_restart")
set_task((fRestartCvar - 0.2), "Event_RoundEnd")
}

get_connectedplayers()
{
new cpl
for(new i = 1; i <= get_maxplayers(); ++i) if(is_user_connected(i)) {
cpl += 1
}
return cpl
}

public Event_StatusValue(id)
{
new target = read_data(2)
if(target != id && target != 0)
{
new sName[32], szMenuBody[512]
get_user_name(target, sName, 31)

new len = format(szMenuBody, 511, "Name: %s^n", sName)
len += format(szMenuBody[len], 511-len, "Level: %d^n", PlayerLevel[target])
len += format(szMenuBody[len], 511-len, "Items: %d^n", g_PlayerNumItems[target])
for(new i = 1; i <= g_numberofitems; ++i) if(g_iPlayerItem[target][i]) {
len += format(szMenuBody[len], 511-len, "%s^n", g_itemname[i])
}
set_hudmessage(255, 255, 255, 0.6, -1.0, 0, 0.0, 6.0, 0.0, 0.0, 1)
show_hudmessage(id, szMenuBody)
}
}

public LogEvent_Objectives()
{
if(get_connectedplayers() < MIN_PLAYERS) {
return PLUGIN_CONTINUE
}

new sArg[64], sAction[64]
read_logargv(0, sArg, 64)
read_logargv(2, sAction, 64)

new sName[1], iUserId, iExperienceGain
parse_loguser(sArg, sName, 0, iUserId)
new id = find_player("k", iUserId)

if(equal(sAction,"Planted_The_Bomb") || equal(sAction, "Defused_The_Bomb") || equal(sAction, "Escaped_As_VIP"))
{
if(PlayerLevel[id] < 1) {
iExperienceGain = Obj_Experience
} else {
iExperienceGain = Obj_Experience * PlayerLevel[id]
}

add_experience(id, iExperienceGain)
client_print(id, print_chat, "+%d objective xp", iExperienceGain)
client_print(id, print_console, "*** +%d objective xp ***", iExperienceGain)
}
else if(equal(sAction, "Rescued_A_Hostage"))
{
if(PlayerLevel[id] < 1) {
iExperienceGain = Hos_Experience
} else {
iExperienceGain = Hos_Experience * PlayerLevel[id]
}   

add_experience(id, iExperienceGain)
client_print(id, print_chat, "+%d objective xp", iExperienceGain)
client_print(id, print_console, "*** +%d objective xp ***", iExperienceGain)
}
return PLUGIN_CONTINUE
}

public Event_HostagesRescued()
{
if(get_connectedplayers() < MIN_PLAYERS) {
return PLUGIN_CONTINUE
}

new iPlayers[32], iNum, i
get_players(iPlayers, iNum, "ae", "CT")
for(i = 0; i <= iNum; i++)
{
new id = iPlayers[i]

new iExperienceGain
if(PlayerLevel[id] < 1) {
iExperienceGain = Obj_Experience
} else {
iExperienceGain = Obj_Experience * PlayerLevel[id]
}

add_experience(id, iExperienceGain)
client_print(id, print_chat, "+%d objective xp", iExperienceGain)
client_print(id, print_console, "*** +%d objective xp ***", iExperienceGain)
}
return PLUGIN_CONTINUE
}

public Event_DeathMsg()
{
new attacker = read_data(1)
new victim = read_data(2)

if(!is_user_connected(attacker) || !is_user_connected(victim)) {
return PLUGIN_CONTINUE
}

#if(Item_Death)
Drop_Items(victim)
#endif
if(get_user_team(attacker) == get_user_team(victim)) {
return PLUGIN_CONTINUE
}

if(attacker != victim)
{
new iExperienceGain
if(PlayerLevel[attacker] < 1) {
iExperienceGain = Kill_Experience
} else {
iExperienceGain = Kill_Experience * PlayerLevel[attacker]
}   

add_experience(attacker, iExperienceGain)
client_print(attacker, print_center, "+%d kill xp", iExperienceGain)
client_print(attacker, print_console, "*** +%d kill xp ***", iExperienceGain)
}
return PLUGIN_CONTINUE
}

public Event_Damage(id)
{
if(!is_user_connected(id)) {
return PLUGIN_CONTINUE
}
#if(Item_Death)
Drop_Items(id)
#endif
return PLUGIN_CONTINUE
}

public Event_ResetHUD(id)
{
if(!is_user_alive(id)) {
return PLUGIN_CONTINUE
}

if(g_HealthLevel[id] > 0)
{
set_user_health(id, 100)
add_health(id, g_HealthLevel[id] * Health_PerLevel)
}

if(g_ArmorLevel[id] > 0)
{
cs_set_user_armor(id, 100, CS_ARMOR_KEVLAR)
add_armor(id, g_ArmorLevel[id] * Armor_PerLevel)
}

if(PlayerPoints[id] > 0) {
display_PassiveUpgrades(id)
}

if(g_PlayerReseted[id])
{
new iPoints = g_HealthLevel[id] + g_ArmorLevel[id] + g_SpeedLevel[id] + g_GravityLevel[id] + g_StealthLevel[id]
PlayerPoints[id] += iPoints
g_HealthLevel[id] = 0
g_ArmorLevel[id] = 0
g_SpeedLevel[id] = 0
g_GravityLevel[id] = 0
g_StealthLevel[id] = 0
client_print(id, print_chat, "Your Points has been reseted")
g_PlayerReseted[id] = false
}
if(get_cvar_num("um_autosavexp")) {
SaveData(id)
}
return PLUGIN_CONTINUE
}

public Event_CurWeapon(id)
{
new Weapon_ID = read_data(2)
//new Weapon_Clip = read_data(3)

new Float: fGravity = g_GravityLevel[id] * Gravity_PerLevel
if(get_user_gravity(id) != fGravity) {
set_gravity(id, fGravity)
}

new Float:fSpeed = 240.0 + (g_SpeedLevel[id] * Speed_PerLevel)
if(get_user_maxspeed(id) != fSpeed && ftimeover) {
set_user_maxspeed(id, fSpeed)
}

if(g_StealthLevel[id] > 0)
{
new iStealth = g_StealthLevel[id] * MaxLevel_Stealth
new iKnifeStealth = iStealth + 10
switch(Weapon_ID)
{
case CSW_KNIFE: set_stealth(id, iStealth)
default:set_stealth(id, iKnifeStealth)
}
} else if(g_StealthLevel[id] < 1) {
set_user_rendering(id, kRenderFxNone, kRenderNormal)
}
return PLUGIN_CONTINUE
}

public cmd_AddXP(id, level, cid)
{
if(!cmd_access(id, level, cid, 3)) {
return PLUGIN_HANDLED
}

new Arg1[64], Target
read_argv(1, Arg1, 63)

new iAddExp[32], Value
read_argv(2, iAddExp, 31)
if(iAddExp[0] == '-')
{
console_print(id, "You cant have a - in the value")
return PLUGIN_HANDLED
}
Value = str_to_num(iAddExp)

new AdminName[32]
get_user_name(id, AdminName, 31)

new TargetTeam
new Players[32], iNum
if(Arg1[0] == '@')
{
if(equali(Arg1[1], "all"))
{
TargetTeam = 0
get_players(Players, iNum)
}
else if(equali(Arg1[1], "t"))
{
TargetTeam = 1
get_players(Players, iNum, "e" , "terrorist")

}
else if(equali(Arg1[1], "ct"))
{
TargetTeam = 2
get_players(Players, iNum, "e" , "ct")
}

for(new i = 0; i < iNum; ++i)
{
Target = Players[i]
add_experience(Target, Value)
}

switch(TargetTeam)
{
case 0:
{
console_print(id, "You have given %d xp to all", Value)
client_print(0, print_chat, "Admin: %s has given %d xp to all", AdminName, Value)
}
case 1:
{
console_print(id, "You have given %d xp to the terrorist team", Value)
client_print(0, print_chat, "Admin: %s has given %d xp to the terrorist team", AdminName, Value)
}
case 2:
{
console_print(id, "You have given %d xp to the terrorist team", Value)
client_print(0, print_chat, "Admin: %s has given %d xp to the ct team", AdminName, Value)
}   
}
}
else
{
Target = cmd_target(id, Arg1, 0)
if(!is_user_connected(Target)) {
return PLUGIN_HANDLED
}

new TargetName[32]
get_user_name(Target, TargetName, 31)

add_experience(Target, Value)

console_print(id, "You have given %d xp to %s", Value, TargetName)
client_print(Target, print_chat, "Admin: %s has given you %d xp", AdminName, Value)
}
return PLUGIN_HANDLED
}

public cmd_SetLevel(id, level, cid)
{
if(!cmd_access(id, level, cid, 3)) {
return PLUGIN_HANDLED
}

new Arg1[64], Target
read_argv(1, Arg1, 63)
Target = cmd_target(id, Arg1, 0)

new iLevel[32], Value
read_argv(2, iLevel, 31)
Value = str_to_num(iLevel)

if(!is_user_connected(Target)) {
return PLUGIN_HANDLED
}

if(Value > Max_Level-1)
{
console_print(id, "You cant have a more than %d", Max_Level-1)
return PLUGIN_HANDLED
}

new AdminName[32]
get_user_name(id, AdminName, 31)

new TargetName[32]
get_user_name(Target, TargetName, 31)

PlayerLevel[Target] = Value
PlayerXp[Target] = LEVELS[PlayerLevel[Target]]

g_HealthLevel[Target] = 0
g_ArmorLevel[Target] = 0
g_SpeedLevel[Target] = 0
g_GravityLevel[Target] = 0
g_StealthLevel[Target] = 0
PlayerPoints[Target] = PlayerLevel[Target]

client_cmd(id, "spk %s", LevelUpSound)

console_print(id, "You have set %s level to %d", TargetName, Value)
client_print(Target, print_chat, "Admin: %s has set your level to %d", AdminName, Value)

return PLUGIN_HANDLED
}

public display_Advertisements()
{
new Players[32], iNum
get_players(Players, iNum, "b")

for(new i = 0; i < iNum; ++i)
{
new id = Players[i]
client_print(id, print_chat, "This server is running %s Version: %s", PLUGIN_NAME, PLUGIN_VERSION)
client_print(id, print_chat, "Main Commands: say /umhelp | say /ummenu")
}
}

public display_myitems(id)
{
new szMenuBody[512]
new len = format(szMenuBody, 511, "Items: %d^n", g_PlayerNumItems[id])
for(new i = 1; i <= g_numberofitems; ++i) if(g_iPlayerItem[id][i]) {
len += format(szMenuBody[len], 511-len, "%s^n", g_itemname[i])
}
set_hudmessage(255, 255, 255, 0.6, -1.0, 0, 0.0, 10.0, 0.0, 0.0, 4)
show_hudmessage(id, szMenuBody)

return PLUGIN_HANDLED
}

public open_ItemUpgrades(id)
{
display_ItemUpgrades(id, g_menuPosition[id] = 0)
return PLUGIN_HANDLED
}

public open_PassiveUpgrades(id)
{
display_PassiveUpgrades(id)
return PLUGIN_HANDLED
}

public display_help(id)
{
new szMotd[2048], szTitle[64], iPos = 0
format(szTitle, 63, "%s Version: %s", PLUGIN_NAME, PLUGIN_VERSION)
iPos += format(szMotd[iPos], 2047-iPos, "<html><head><style type=^"text/css^">pre{color:#FFB000;}body{background:#000000;margin-left:8px;margin-top:0px;}</style></head><pre><body>")
iPos += format(szMotd[iPos], 2047-iPos, "^n^n<b>%s</b>^n^n", szTitle)
iPos += format(szMotd[iPos], 2047-iPos, "Client Commands:^n")
iPos += format(szMotd[iPos], 2047-iPos, "say /ummenu - Main menu^n")
iPos += format(szMotd[iPos], 2047-iPos, "say /upgrade - Passive upgrades menu^n")
iPos += format(szMotd[iPos], 2047-iPos, "say /itemshop - Item shop menu^n")
iPos += format(szMotd[iPos], 2047-iPos, "say /myitem - Displays your items^n")
iPos += format(szMotd[iPos], 2047-iPos, "say /dropitems - Drop all your items^n")
iPos += format(szMotd[iPos], 2047-iPos, "say /itemlist - Displays all items with description^n")
iPos += format(szMotd[iPos], 2047-iPos, "say /umhelp - Displays help^n")
iPos += format(szMotd[iPos], 2047-iPos, "Can also type in the console without '/'^n")
iPos += format(szMotd[iPos], 2047-iPos, "Bind example: bind home ummenu^n^n")
iPos += format(szMotd[iPos], 2047-iPos, "Passive Upgrades:^n")
iPos += format(szMotd[iPos], 2047-iPos, "Health - Increase Health; HP per level: %d^n", Health_PerLevel)
iPos += format(szMotd[iPos], 2047-iPos, "Armor - Increase Armor; AP per level: %d^n", Armor_PerLevel)
iPos += format(szMotd[iPos], 2047-iPos, "Speed - Increases Speed; Speed per level: %d^n", Speed_PerLevel)
iPos += format(szMotd[iPos], 2047-iPos, "Gravity - Decreases your gravity; -Gravity per level %d^n", floatround((Gravity_PerLevel * 100)))
iPos += format(szMotd[iPos], 2047-iPos, "Stealth - Descreses Visability; Stealth per level: %d^n", Stealth_PerLevel)

show_motd(id, szMotd, szTitle)
return PLUGIN_HANDLED
}

public display_itemlist(id)
{
new szMotd[2048], szTitle[64], iPos = 0
format(szTitle, 63, "Item List")
iPos += format(szMotd[iPos], 2047-iPos, "<html><head><style type=^"text/css^">pre{color:#FFB000;}body{background:#000000;margin-left:8px;margin-top:0px;}</style></head><pre><body>")
iPos += format(szMotd[iPos], 2047-iPos, "^n^n<b>%s</b>^n^n", szTitle)
iPos += format(szMotd[iPos], 2047-iPos, "# Item Name | Item Description | Item Cost^n")

for(new i = 1; i <= g_numberofitems; ++i) {
iPos += format(szMotd[iPos], 2047-iPos, "(%d)%s %s %d^n", i, g_itemname[i], g_itemdesc[i], g_itemcost[i])
}
show_motd(id, szMotd, szTitle)
return PLUGIN_HANDLED
}

public open_MainMenu(id)
{
new szMenuBody[512]
new len = format(szMenuBody, 511, "Main Upgrades Menu^n")
len += format(szMenuBody[len], 511-len, "^n1. Passive Upgrades")
len += format(szMenuBody[len], 511-len, "^n2 Item Shop")
len += format(szMenuBody[len], 511-len, "^n3. Item List")
len += format(szMenuBody[len], 511-len, "^n4. Upgrades Help")
len += format(szMenuBody[len], 511-len, "^n^n^n8. Save Experience")
len += format(szMenuBody[len], 511-len, "^n9. Plugin Info")
len += format(szMenuBody[len], 511-len, "^n0. Cancel")

new keys = (1<<0|1<<1|1<<2|1<<3|1<<7|1<<8|1<<9)
show_menu(id, keys, szMenuBody, -1, "Main Upgrades Menu")   
}

public Action_MainMenu(id, key)
{
switch(key)
{
case 0:   open_PassiveUpgrades(id)
case 1: open_ItemUpgrades(id)
case 2: display_itemlist(id)
case 3: display_help(id)
case 7:
{
SaveData(id)
client_print(id, print_chat, "Saved experience")
}
case 8: client_print(id, print_chat, "%s by %s Version: %s", PLUGIN_NAME, PLUGIN_AUTHOR, PLUGIN_VERSION)
}
return PLUGIN_HANDLED
}

public cmd_DropItems(id)
{
if(!is_user_alive(id)) {
return PLUGIN_HANDLED
}

if(g_PlayerNumItems[id] < 1)
{
client_print(id, print_chat, "You dont have any items")
return PLUGIN_HANDLED
}
Drop_Items(id)
client_cmd(id, "spk %s", DropItemSound)
return PLUGIN_HANDLED
}

public Open_MapItemConfig(id, level, cid)
{
if(!cmd_access(id, level, cid, 1)) {
return PLUGIN_HANDLED
}

if(!g_DirExist)
{
console_print(id, "itemconfig directory does not exist")
return PLUGIN_HANDLED
}
display_MapItemConfig(id)
return PLUGIN_HANDLED
}

display_MapItemConfig(id)
{
new MenuBody[512]
new len = format(MenuBody, 511, "Map Item Menu^n")
len += format(MenuBody[len], 511-len, "^n1. Create Spawn Points")
len += format(MenuBody[len], 511-len, "^n2 Remove All Spawn Points")
len += format(MenuBody[len], 511-len, "^n^n0. Cancel")

new keys = (1<<0|1<<1|1<<9)
show_menu(id, keys, MenuBody, -1, "MI Config Menu")   
}

public Action_MapItemConfig(id, key)
{
switch(key)
{
case 0:   
{
if(g_MapItemNum >= MAX_MAPITEMS)
{
client_print(id, print_chat, "Max map items reached")
return PLUGIN_HANDLED
}

new Origin[3]
get_user_origin(id, Origin, 0)

new MapName[33]
get_mapname(MapName, 32)
Save_Origin(MapName, Origin)

Load_Origins(MapName)
display_MapItemConfig(id)
client_print(id, print_chat, "item spawn point created")
}   
case 1:
{
RemoveMapItems()
client_print(id, print_chat, "All spawn points removed")
}
}
return PLUGIN_HANDLED
}

display_ItemUpgrades(id, pos)
{
if(pos < 0) {
return
}

new start = pos * 8
if(start >= g_numberofitems) {
start = pos = g_menuPosition[id]
}

new menuBody[512]
new len = format(menuBody, 511, "Item Shop^n^n")

new end = start + 8
new keys = MENU_KEY_0

if(end > g_numberofitems) {
end = g_numberofitems
}

new b = 0
for(new a = start; a < end; ++a)
{
new i = a + 1
keys |= (1<<b)
new money
#if(Item_Money)   
money = cs_get_user_money(id)
#else
money = PlayerXp[id]
#endif
if(g_iPlayerItem[id][i] ||(money < g_itemcost[i]) || g_PlayerNumItems[id] >= Max_PlayerItems) {
len += format(menuBody[len], 511-len,"\r%d. %s (%d)\w^n", ++b, g_itemname[i], g_itemcost[i])
} else {
len += format(menuBody[len], 511-len,"%d. %s (%d)^n", ++b, g_itemname[i], g_itemcost[i])
}
}

if(end != g_numberofitems)
{
format(menuBody[len], 511-len, "^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT")
keys |= MENU_KEY_9
}
else
{
format(menuBody[len], 511-len, "^n0. %L", id, pos ? "BACK" : "EXIT")
}
show_menu(id, keys, menuBody, -1, "Item Shop")
}

public Action_ItemUpgrades(id, key)
{
switch(key)
{
case 8: display_ItemUpgrades(id, ++g_menuPosition[id])
case 9: display_ItemUpgrades(id, --g_menuPosition[id])
default:
{
if(!is_user_alive(id)) {
return PLUGIN_HANDLED
}

++key
new money
new plugin_id = g_itemindex[g_menuPosition[id] * 8 + key]
new item_id = g_menuPosition[id] * 8 + key
new func = get_func_id("Enable_Item", plugin_id)
#if(Item_Money)
money = cs_get_user_money(id)
#else
money = PlayerXp[id]
#endif
new cost = g_itemcost[item_id]
if(g_PlayerNumItems[id] >= Max_PlayerItems)
{
client_print(id, print_chat, "Only %d items", Max_PlayerItems)
client_cmd(id, "spk %s", DeniedSound)
display_ItemUpgrades(id, g_menuPosition[id])
return PLUGIN_HANDLED
}

if(g_iPlayerItem[id][item_id])
{
client_print(id, print_chat, "You already have %s", g_itemname[item_id])
client_cmd(id, "spk %s", DeniedSound)
display_ItemUpgrades(id, g_menuPosition[id])
return PLUGIN_HANDLED
}

if(money >= cost)
{
callfunc_begin_i(func, plugin_id)
callfunc_push_int(id)
callfunc_end()

g_PlayerNumItems[id] += 1
g_iPlayerItem[id][item_id] = true
#if(Item_Money)
cs_set_user_money(id, money - cost, 1)
#else
PlayerXp[id] = money - cost
#endif
client_cmd(id, "spk %s", BoughtItemSound)
client_print(id, print_chat, "Item Bought: %s", g_itemname[item_id])
client_print(id, print_chat, "Item Description: %s", g_itemdesc[item_id])

if(g_PlayerNumItems[id] < Max_PlayerItems) {
display_ItemUpgrades(id, g_menuPosition[id])
}
}
else
{
#if(Item_Money)
client_print(id, print_chat, "You need $%d to buy %s", g_itemcost[item_id], g_itemname[item_id])
#else
client_print(id, print_chat, "You need %d xp to buy %s", g_itemcost[item_id], g_itemname[item_id])
#endif
display_ItemUpgrades(id, g_menuPosition[id])
client_cmd(id, "spk %s", DeniedSound)
}
}
}
return PLUGIN_HANDLED
}

display_PassiveUpgrades(id)
{
new szMenuBody[512]
new len = format(szMenuBody, 511, "Passive Upgrades^n")
len += format(szMenuBody[len], 511-len, "^n1. Health (%d/%d)", g_HealthLevel[id],   MaxLevel_Health)
len += format(szMenuBody[len], 511-len, "^n2. Armor (%d/%d)", g_ArmorLevel[id],   MaxLevel_Armor)
len += format(szMenuBody[len], 511-len, "^n3. Speed (%d/%d)",   g_SpeedLevel[id], MaxLevel_Speed)
len += format(szMenuBody[len], 511-len, "^n4. Gravity (%d/%d)",   g_GravityLevel[id], MaxLevel_Gravity)
len += format(szMenuBody[len], 511-len, "^n5. Stealth (%d/%d)",   g_StealthLevel[id],   MaxLevel_Stealth)
len += format(szMenuBody[len], 511-len, "^n^n9. Reset")
len += format(szMenuBody[len], 511-len, "^n0. Cancel")

new keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<8|1<<9)
show_menu(id, keys, szMenuBody, -1, "Passive Upgrades")
}

public Action_PassiveUpgrades(id, key)
{
switch(key)
{
case 0:
{
if(g_HealthLevel[id] >= MaxLevel_Health) {
return PLUGIN_HANDLED
} else if(!is_user_alive(id)) {
return PLUGIN_HANDLED
} else {
Set_Upgrade(id, 0)
}
}
case 1:
{
if(g_ArmorLevel[id] >= MaxLevel_Armor) {
return PLUGIN_HANDLED
} else if(!is_user_alive(id)) {
return PLUGIN_HANDLED
} else {
Set_Upgrade(id, 1)
}
}
case 2:
{
if(g_SpeedLevel[id] >= MaxLevel_Speed) {
return PLUGIN_HANDLED
} else if(!is_user_alive(id)) {
return PLUGIN_HANDLED
} else {
Set_Upgrade(id, 2)
}
}
case 3:
{
if(g_GravityLevel[id] >= MaxLevel_Gravity) {
return PLUGIN_HANDLED
} else if(!is_user_alive(id)) {
return PLUGIN_HANDLED
} else {
Set_Upgrade(id, 3)
}
}
case 4:
{
if(g_StealthLevel[id] >= MaxLevel_Stealth) {
return PLUGIN_HANDLED
} else if(!is_user_alive(id)) {
return PLUGIN_HANDLED
} else {
Set_Upgrade(id, 4)
}
}
case 8:
{
g_PlayerReseted[id] = true
client_print(id, print_chat, "Your points will be reseted next time you spawn")
}
}
return PLUGIN_HANDLED
}

public Set_Upgrade(id, value)
{
if(PlayerPoints[id] > 0)
{
switch(value)
{
case 0:
{
g_HealthLevel[id] += 1
add_health(id, Health_PerLevel)
client_print(id, print_chat, "+%d Health", g_HealthLevel[id] * Health_PerLevel)
}
case 1:
{
g_ArmorLevel[id] += 1
add_armor(id, Armor_PerLevel)
client_print(id, print_chat, "+%d Armor", g_ArmorLevel[id] * Armor_PerLevel)
}
case 2:
{
g_SpeedLevel[id] += 1
new Float:fSpeed = 240.0 + (g_SpeedLevel[id] * Speed_PerLevel)

if(ftimeover) {
set_user_maxspeed(id, fSpeed)
}
client_print(id, print_chat, "+%d Speed", g_SpeedLevel[id] * Speed_PerLevel)
}
case 3:
{
g_GravityLevel[id] += 1
new Float: fGravity = g_GravityLevel[id] * Gravity_PerLevel
set_gravity(id, fGravity)
client_print(id, print_chat, "-%d Gravity", g_GravityLevel[id] * floatround((Gravity_PerLevel * 100)))
}
case 4:
{
g_StealthLevel[id] += 1
set_stealth(id, Stealth_PerLevel)
client_print(id, print_chat, "+%d Stealth", g_StealthLevel[id] * Stealth_PerLevel)
}
}

PlayerPoints[id] -= 1
client_cmd(id, "spk %s", UpgradedSound)

if(PlayerPoints[id] > 0) {
display_PassiveUpgrades(id)
}
} else {
client_cmd(id, "spk %s", DeniedSound)
}
}

public register_umitem(item_index, item_name[], item_desc[], item_cost)
{
if(g_numberofitems == MAX_ITEMS) {
return -2
}

g_numberofitems++
g_itemindex[g_numberofitems] = item_index
format(g_itemname[g_numberofitems], MAX_ITEM_NAME_SIZE, item_name)
format(g_itemdesc[g_numberofitems], MAX_ITEM_DESC_SIZE, item_desc)
g_itemcost[g_numberofitems] = item_cost

return g_numberofitems
}

add_experience(id, value)
{
if(PlayerLevel[id] <= Max_Level-1) {
PlayerXp[id] += value
}
}

add_armor(id, value)
{
new CsArmorType:ArmorType
new iArmor = cs_get_user_armor(id, ArmorType)
cs_set_user_armor(id, iArmor + value, ArmorType)
}

add_health(id, value)
{
new iHealth = get_user_health(id)
set_user_health(id, iHealth + value)
}

set_stealth(id, value)
{
new iMax_Stealth = 20 + (MaxLevel_Stealth * Stealth_PerLevel)
set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, iMax_Stealth - value)
}

set_gravity(id, Float:value) {
set_user_gravity(id, 1.00 - value)
}

SaveData(id)
{
new authid[32]
get_user_authid(id, authid, 31)
new vaultkey[64], vaultdata[64]

format(vaultkey, 63, "Account-%s-Level", authid)
format(vaultdata, 63, "%d", PlayerLevel[id])
set_vaultdata(vaultkey, vaultdata)

format(vaultkey, 63, "Account-%s-Xp", authid)
format(vaultdata, 63, "%d", PlayerXp[id])
set_vaultdata(vaultkey, vaultdata)

format(vaultkey, 63, "Account-%s-Points", authid)
format(vaultdata, 63, "%d", PlayerLevel[id])
set_vaultdata(vaultkey, vaultdata)
}

LoadData(id)
{
new authid[32]
get_user_authid(id,authid,31)
new vaultkey[64], vaultdata[64]

format(vaultkey, 63, "Account-%s-Level", authid)
get_vaultdata(vaultkey, vaultdata, 63)
PlayerLevel[id] = str_to_num(vaultdata)

format(vaultkey, 63, "Account-%s-Xp", authid)
get_vaultdata(vaultkey, vaultdata, 63)
PlayerXp[id] = str_to_num(vaultdata)

format(vaultkey, 63, "Account-%s-Points", authid)
get_vaultdata(vaultkey, vaultdata, 63)
PlayerPoints[id] = str_to_num(vaultdata)
}

public Pickup_Items(ptr, ptd)
{
if(is_user_alive(ptd) && is_valid_ent(ptr))
{
new item_id = entity_get_int(ptr, EV_INT_iuser4)
new plugin_id = g_itemindex[item_id]
new func = get_func_id("Enable_Item", plugin_id)
if(!g_iPlayerItem[ptd][item_id])
{
if(g_PlayerNumItems[ptd] < Max_PlayerItems)
{
callfunc_begin_i(func, plugin_id)
callfunc_push_int(ptd)
callfunc_end()

g_PlayerNumItems[ptd] += 1
g_iPlayerItem[ptd][item_id] = true
client_cmd(ptd, "spk %s", PickUpItemSound)
client_print(ptd, print_chat, "Item Picked: %s", g_itemname[item_id])

remove_entity(ptr)
}
}
}
}

Drop_Items(id)
{
for(new item_id = 1; item_id <= MAX_ITEMS ; item_id++)
{
if(g_iPlayerItem[id][item_id])
{
new Float:fVelocity[3], Float:fOrigin[3], Float:fGlowColors[3] = {100.0, 100.0, 100.0}
entity_get_vector(id, EV_VEC_origin, fOrigin)
fOrigin[2] += 75

VelocityByAim(id, 130, fVelocity)

new item_ent = create_entity("info_target")
if(is_valid_ent(item_ent))
{
entity_set_string(item_ent, EV_SZ_classname, "UmItem")

entity_set_int(item_ent, EV_INT_solid, SOLID_TRIGGER)
entity_set_int(item_ent, EV_ENT_owner, 0)
entity_set_int(item_ent, EV_INT_movetype, 6)
entity_set_int(item_ent, EV_INT_iuser4, item_id)
entity_set_int(item_ent, EV_INT_renderfx, kRenderFxGlowShell)

entity_set_vector(item_ent, EV_VEC_origin, fOrigin)
entity_set_vector(item_ent, EV_VEC_velocity, fVelocity)
entity_set_vector(item_ent, EV_VEC_rendercolor, fGlowColors)

entity_set_model(item_ent, ItemModel)
entity_set_size(item_ent, Float:{-2.5, -2.5, -1.5}, Float:{2.5, 2.5, 1.5})

new plugin_id = g_itemindex[item_id]
new func = get_func_id("Disable_Item", plugin_id)

callfunc_begin_i(func, plugin_id)
callfunc_push_int(id)
callfunc_end()

g_iPlayerItem[id][item_id] = false
g_PlayerNumItems[id] = 0
}
}
}
return PLUGIN_CONTINUE
}

Save_Origin(CurMap[], Origin[3])
{
new MapFile[64], Text[64]
format(MapFile, 63, "%s/%s.cfg", g_ItemOriginDir, CurMap)
if(!file_exists(MapFile))
{
new Comments[64]
format(Comments, 63, "; Map item origins for %s", CurMap)
write_file(MapFile, Comments, -1)
}

format(Text, 64, "%i %i %i", Origin[0], Origin[1], Origin[2])
write_file(MapFile, Text, -1)
}

Load_Origins(CurMap[])
{
new MapFile[64]
format(MapFile, 63, "%s/%s.cfg", g_ItemOriginDir, CurMap)
if(!file_exists(MapFile)) {
return PLUGIN_CONTINUE
}

g_MapItemNum = 0
for(new i = 1; i <= MAX_MAPITEMS; ++i)
{
g_MapItemOrgins[i][0] = 0
g_MapItemOrgins[i][1] = 0
g_MapItemOrgins[i][2] = 0
}

new Text[64], Line = 0, Len = 0
while(read_file(MapFile, Line++, Text, 63, Len))
{
if((Text[0]==';') || !Len) {
continue
}

if(g_MapItemNum >= MAX_MAPITEMS)
{
log_amx("Max map items reached, please increase MAX_MAPITEMS")
break
}

new iOrigin[3][16]
parse(Text, iOrigin[0], 15, iOrigin[1], 15, iOrigin[2], 15)

g_MapItemNum++
g_MapItemOrgins[g_MapItemNum][0] = str_to_num(iOrigin[0])
g_MapItemOrgins[g_MapItemNum][1] = str_to_num(iOrigin[1])
g_MapItemOrgins[g_MapItemNum][2] = str_to_num(iOrigin[2])
}
return PLUGIN_CONTINUE
}

public Spawn_Items()
{
for(new i = 1; i <= MAX_MAPITEMS; ++i)
{
if((g_MapItemOrgins[i][0] == 0)
&& (g_MapItemOrgins[i][1] == 0)
&& g_MapItemOrgins[i][2] == 0) {
continue
}
Create_Items(g_MapItemOrgins[i])
}
}

RemoveMapItems()
{
new MapFile[64], CurMap[32]
get_mapname(CurMap, 31)
format(MapFile, 63, "%s/%s.cfg", g_ItemOriginDir, CurMap)
if(file_exists(MapFile)) {
delete_file(MapFile)
}

g_MapItemNum = 0
for(new i = 1; i <= MAX_MAPITEMS; ++i)
{
g_MapItemOrgins[i][0] = 0
g_MapItemOrgins[i][1] = 0
g_MapItemOrgins[i][2] = 0
}
}

Create_Items(Origin[3])
{
new Float:flOrigin[3]
IVecFVec(Origin, flOrigin)

new Float:fGlowColors[3] = {0.0, 100.0, 0.0}
new item_ent = create_entity("info_target")
new item_id = random_num(1, g_numberofitems)
if(is_valid_ent(item_ent))
{
entity_set_string(item_ent, EV_SZ_classname, "UmItem")

entity_set_int(item_ent, EV_INT_solid, SOLID_TRIGGER)
entity_set_int(item_ent, EV_ENT_owner, 0)
entity_set_int(item_ent, EV_INT_movetype, 6)
entity_set_int(item_ent, EV_INT_iuser4, item_id)
entity_set_int(item_ent, EV_INT_renderfx, kRenderFxGlowShell)

entity_set_vector(item_ent, EV_VEC_origin, flOrigin)
entity_set_vector(item_ent, EV_VEC_rendercolor, fGlowColors)

drop_to_floor(item_ent)
entity_set_model(item_ent, ItemModel)
entity_set_size(item_ent, Float:{-2.5, -2.5, -1.5}, Float:{2.5, 2.5, 1.5})

}
return PLUGIN_CONTINUE
}

public plugin_precache()
{
precache_model(ItemModel)
precache_sound(DeniedSound)
precache_sound(LevelUpSound)
precache_sound(UpgradedSound)
precache_sound(PickUpItemSound)
precache_sound(BoughtItemSound)
}

_________________
[sma]CMD:fear(playerid, params[]){ new str[5]; if(!sscanf(params, "s[5]", str)){ if(egyezik(str, "find")) Msg(playerid, "A-a!");}  return 1;}[/sma]


Hozzászólás jelentése
Vissza a tetejére
   
HozzászólásElküldve:2012.04.11. 21:10 
Offline
Lelkes

Csatlakozott:2011.12.17. 21:56
Hozzászólások:15
bocsánat még új vagyok és nemtudom, hogy kell rendesen bemásolni


Hozzászólás jelentése
Vissza a tetejére
   
HozzászólásElküldve:2012.04.11. 21:24 
Offline
Lelkes

Csatlakozott:2011.12.17. 21:56
Hozzászólások:15
Kód:
new PLUGIN_VERSION[]    = "1.0.2"

// Based experience ; this are times by the players level
#define Kill_Experience      50   
#define Hos_Experience      20
#define Obj_Experience      35
#define MIN_PLAYERS      1 //Minimum players that are connected to get objective xp

#define Max_Level      60
// Max level for each passive upgrades
#define MaxLevel_Health      12
#define MaxLevel_Armor      12
#define MaxLevel_Speed      12
#define MaxLevel_Gravity   12
#define MaxLevel_Stealth   12

// How much you get per level
#define Health_PerLevel      15
#define Armor_PerLevel      20
#define Speed_PerLevel      30      
#define Gravity_PerLevel   0.1 // 10%
#define Stealth_PerLevel   60

// Max items players can carry
#define Max_PlayerItems      3

#define Item_Money      1 // 0 = Experience; 1 = dollars   
#define Item_Death      1 // Player lose item on death

// Item plugins configs
#define MAX_ITEMS      100
#define MAX_MAPITEMS      100
#define MAX_ITEM_NAME_SIZE   64
#define MAX_ITEM_DESC_SIZE   128


new LevelUpSound[]    = { "events/task_complete.wav" }
new DeniedSound[]    = { "buttons/blip1.wav"}
new UpgradedSound[]    = { "items/tr_kevlar.wav" }
new BoughtItemSound[]    = { "items/ammopickup1.wav" }
new PickUpItemSound[]    = { "items/ammopickup2.wav" }
new DropItemSound[]   = { "events/enemy_died.wav" }
new ItemModel[]    = { "models/w_gaussammo.mdl" }

new LEVELS[Max_Level] =
{
   5,    //0
   10,    //1
   20,   //2
   40,   //3
   80,   //4
   160,   //5
   320,   //6
   640,   //7
   1000,   //8
   2000,   //9
   3000,   //10
   4000,   //11
   5000,   //12
   6000,   //13
   8000,   //14
   10000,   //15
   20000,    //16
   30000,    //17
   40000,   //18
   50000,   //19
   60000,   //20
   70000,   //21
   80000,   //22
   90000,   //23
   100000,   //24
   110000,   //25
   120000,   //26
   130000,   //27
   140000,   //28
   150000,   //29
   160000,   //30
   170000,   //31
   180000,   //32
   190000,   //33
   200000,   //34
   220000,   //35
   240000,   //36
   250000,   //37
   260000,   //38
   280000,   //39
   300000,   //40
   330000,   //41
   350000,   //42
   360000,   //43
   390000,   //44
   400000,   //45
   440000,   //46
   450000,   //47
   490000,   //48
   500000,   //49
   550000,   //50
   600000,   //51
   700000,   //52
   800000,   //53
   900000,   //54
   1000000,//55
   1200000,//56
   1400000,//57
   1600000,//58
   1800000,//59
   2000000,//60
   
}

/* DO NOT EDIT BEYOND THIS LINE UNLESS YOU KNOW WHAT YOU ARE DOING */

#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <engine>
#include <vault>
#include <fun>

new g_HealthLevel[33]
new g_ArmorLevel[33]
new g_SpeedLevel[33]
new g_GravityLevel[33]
new g_StealthLevel[33]
new bool:g_PlayerReseted[33]

new PlayerXp[33]
new PlayerLevel[33]
new PlayerPoints[33]

new g_MapItemNum
new bool:ftimeover
new bool:g_DirExist
new g_ConfigsDir[64]
new g_ItemOriginDir[64]
new g_MapItemOrgins[MAX_MAPITEMS+1][3]

new g_numberofitems
new g_menuPosition[33]
new g_itemindex[MAX_ITEMS+1]
new g_itemcost[MAX_ITEMS+1]
new g_itemname[MAX_ITEMS+1][MAX_ITEM_NAME_SIZE+1]
new g_itemdesc[MAX_ITEMS+1][MAX_ITEM_DESC_SIZE+1]
new bool:g_iPlayerItem[33][MAX_ITEMS+1]
new g_PlayerNumItems[33]



new PLUGIN_NAME[]    = "Upgrades Mod 2.0"
new PLUGIN_AUTHOR[]    = "Cheap_Suit"

public plugin_init()
{
   register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
   register_cvar("um_enable", "1")
   register_cvar("um_autosavexp", "1")
   register_cvar("um_itemsremoved", "1")
   
   if(get_cvar_num("um_enable"))
   {
      register_clcmd("um_addxp", "cmd_AddXP", ADMIN_IMMUNITY, "<@all/t/ct>/<name><xp> - give users xp eg. um_addxp cheap_suit 100")
      register_clcmd("um_setlevel", "cmd_SetLevel", ADMIN_IMMUNITY, "<name><level> - give users xp eg. um_setlevel cheap_suit 5")
      register_clcmd("um_mapitems", "Open_MapItemConfig", ADMIN_IMMUNITY, "- Open's Map item configs")
      register_clcmd("say /ummenu",    "open_MainMenu")
      register_clcmd("say /upgrade",    "open_PassiveUpgrades")
      register_clcmd("say /itemshop", "open_ItemUpgrades")
      register_clcmd("say /itemlist", "display_itemlist")
      register_clcmd("say /umhelp",    "display_help")
      register_clcmd("say /myitems",    "display_myitems")
      register_clcmd("say /dropitems","cmd_DropItems")
      register_concmd("ummenu",    "open_MainMenu")
      register_concmd("upgrade",    "open_PassiveUpgrades")
      register_concmd("itemshop",    "open_ItemUpgrades")
      register_concmd("itemlist",    "display_itemlist")
      register_concmd("umhelp",    "display_help")
      register_concmd("myitems",    "display_myitems")
      register_concmd("dropitems",    "cmd_DropItems")
      
      register_touch("UmItem", "player", "Pickup_Items")
      register_directory()
      
      register_event("DeathMsg", "Event_DeathMsg", "a")
      register_event("ResetHUD", "Event_ResetHUD", "be")
      register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
      register_event("Damage", "Event_Damage", "bd", "2>0")
      register_event("StatusValue", "Event_StatusValue", "bd", "1=2")
   
      register_event("TextMsg", "Event_GameRestart", "a", "2=#Game_will_restart_in", "2&#Game_C")
      register_event("SendAudio", "Event_RoundEnd", "a", "2=%!MRAD_terwin", "2=%!MRAD_ctwin", "2=%!MRAD_rounddraw")    
   
      register_logevent("LogEvent_Objectives", 3, "1=triggered")
      register_logevent("LogEvent_RoundStart", 2, "0=World triggered", "1=Round_Start")
      
      register_menucmd(register_menuid("Main Upgrades Menu"), 1023, "Action_MainMenu")
      register_menucmd(register_menuid("Passive Upgrades"), 1023, "Action_PassiveUpgrades")
      register_menucmd(register_menuid("MI Config Menu"), 1023, "Action_MapItemConfig")
      register_menucmd(register_menuid("Item Shop"), 1023, "Action_ItemUpgrades")
      
   
      //Advertise the command to the dead people
      set_task(random_float(50.0, 90.0), "display_Advertisements", _, _, _, "b")
      set_task(0.1, "client_experience", 12, _, _, "b")
   }
   set_task(0.1, "check_cvar", 34, _, _, "b")
}

public check_cvar()
{
   if(!get_cvar_num("um_enable"))
   {
      remove_items()
      remove_task(12)
      remove_task(34)
      
      for(new i = 1; i <= get_maxplayers(); ++i) if(is_user_connected(i))
      {
         message_begin(MSG_ONE, get_user_msgid("StatusText"), {0, 0, 0}, i)
         write_byte(0)
         write_string("")
         message_end()
      }
      
      for(new i = 0; i < get_pluginsnum(); ++i)
      {
         new temp[2], name[64]
         get_plugin(i, name, 63, temp, 1, temp, 1, temp, 1, temp, 1)
         if(equali(name, "Item_", 5)) {
            server_cmd("amxx pause %s", name)
         }
      }

      server_cmd("amxx pause %s", PLUGIN_NAME)
      server_print("If enabled again, restart server for upgrades mod to work properly")
   }
}

register_directory()
{
   get_configsdir(g_ConfigsDir, 63)
   format(g_ItemOriginDir, 63, "%s/itemorigin", g_ConfigsDir)
   
   if(!dir_exists(g_ItemOriginDir))
   {
      log_amx("itemorigin directory does not exist")
      g_DirExist = false
   }
   else
   {
      g_DirExist = true
      
      new CurMap[32]
      get_mapname(CurMap, 31)
      Load_Origins(CurMap)
   }
   
}

public client_authorized(id)
{
   g_HealthLevel[id] = 0
   g_ArmorLevel[id] = 0
   g_SpeedLevel[id] = 0
   g_GravityLevel[id] = 0
   g_StealthLevel[id] = 0
      
   PlayerXp[id] = 0
   PlayerLevel[id] = 0
   PlayerPoints[id] = 0
      
   g_PlayerNumItems[id] = 0
   for(new i = 1; i <= MAX_ITEMS; ++i) {
      g_iPlayerItem[id][MAX_ITEMS] = false
   }
   LoadData(id)
}

public client_disconnect(id)
{
   if(get_cvar_num("um_autosavexp")) {
      SaveData(id)
   }
}

public client_experience()
{   
   new Players[32], iNum
   get_players(Players, iNum)
   
   for(new i = 0; i < iNum; ++i)
   {
      new id = Players[i]
      if(is_user_alive(id))
      {
         new InfoMsg[255]
         format(InfoMsg, 254, "Level: %d/%d    XP: %d/%d    Points: %d    Items: %d/%d", PlayerLevel[id], Max_Level-1, PlayerXp[id], LEVELS[PlayerLevel[id]], PlayerPoints[id], g_PlayerNumItems[id], Max_PlayerItems)
                  
         message_begin(MSG_ONE, get_user_msgid("StatusText"), {0, 0, 0}, id)
         write_byte(0)
         write_string(InfoMsg)
         message_end()
      }
   
      if(PlayerXp[id] >= LEVELS[Max_Level-1] || PlayerLevel[id] >= Max_Level-1)
      {
         PlayerLevel[id] = Max_Level-1
         PlayerXp[id] = LEVELS[Max_Level-1]
         return PLUGIN_CONTINUE
      }
      
      if(PlayerXp[id] >= LEVELS[PlayerLevel[id]])
      {
         PlayerLevel[id] += 1
         PlayerPoints[id] += 1
         display_PassiveUpgrades(id)
         client_cmd(id, "spk %s", LevelUpSound)
      }
   }
   return PLUGIN_CONTINUE
}

public LogEvent_RoundStart()
{
   ftimeover = true
   set_task(0.6, "Spawn_Items")
}

public Event_RoundEnd()
{
   ftimeover = false
   if(get_cvar_num("um_itemsremoved")) {
      set_task(2.5, "remove_items")
   }
}

public remove_items()
{
   new items = find_ent_by_class(-1, "UmItem")
   while(items)
   {
      remove_entity(items)
      items = find_ent_by_class(items, "UmItem")
   }
}

public Event_GameRestart()
{
   new Float:fRestartCvar = get_cvar_float("sv_restart")
   set_task((fRestartCvar - 0.2), "Event_RoundEnd")
}

get_connectedplayers()
{
   new cpl
   for(new i = 1; i <= get_maxplayers(); ++i) if(is_user_connected(i)) {
      cpl += 1
   }
   return cpl
}

public Event_StatusValue(id)
{
   new target = read_data(2)
     if(target != id && target != 0)
     {
      new sName[32], szMenuBody[512]
      get_user_name(target, sName, 31)

      new len = format(szMenuBody, 511, "Name: %s^n", sName)
      len += format(szMenuBody[len], 511-len, "Level: %d^n", PlayerLevel[target])
      len += format(szMenuBody[len], 511-len, "Items: %d^n", g_PlayerNumItems[target])
      for(new i = 1; i <= g_numberofitems; ++i) if(g_iPlayerItem[target][i]) {
         len += format(szMenuBody[len], 511-len, "%s^n", g_itemname[i])
      }
      set_hudmessage(255, 255, 255, 0.6, -1.0, 0, 0.0, 6.0, 0.0, 0.0, 1)
      show_hudmessage(id, szMenuBody)
   }
}

public LogEvent_Objectives()
{
   if(get_connectedplayers() < MIN_PLAYERS) {
      return PLUGIN_CONTINUE
   }
   
   new sArg[64], sAction[64]
   read_logargv(0, sArg, 64)
   read_logargv(2, sAction, 64)
   
   new sName[1], iUserId, iExperienceGain
   parse_loguser(sArg, sName, 0, iUserId)
   new id = find_player("k", iUserId)

   if(equal(sAction,"Planted_The_Bomb") || equal(sAction, "Defused_The_Bomb") || equal(sAction, "Escaped_As_VIP"))
   {
      if(PlayerLevel[id] < 1) {
         iExperienceGain = Obj_Experience
      } else {
         iExperienceGain = Obj_Experience * PlayerLevel[id]
      }
      
      add_experience(id, iExperienceGain)
      client_print(id, print_chat, "+%d objective xp", iExperienceGain)
      client_print(id, print_console, "*** +%d objective xp ***", iExperienceGain)
   }
   else if(equal(sAction, "Rescued_A_Hostage"))
   {
      if(PlayerLevel[id] < 1) {
         iExperienceGain = Hos_Experience
      } else {
         iExperienceGain = Hos_Experience * PlayerLevel[id]
      }   
      
      add_experience(id, iExperienceGain)
      client_print(id, print_chat, "+%d objective xp", iExperienceGain)
      client_print(id, print_console, "*** +%d objective xp ***", iExperienceGain)
   }
   return PLUGIN_CONTINUE
}

public Event_HostagesRescued()
{
   if(get_connectedplayers() < MIN_PLAYERS) {
      return PLUGIN_CONTINUE
   }
   
   new iPlayers[32], iNum, i
   get_players(iPlayers, iNum, "ae", "CT")
   for(i = 0; i <= iNum; i++)
   {
      new id = iPlayers[i]
      
      new iExperienceGain
      if(PlayerLevel[id] < 1) {
         iExperienceGain = Obj_Experience
      } else {
         iExperienceGain = Obj_Experience * PlayerLevel[id]
      }
      
      add_experience(id, iExperienceGain)
      client_print(id, print_chat, "+%d objective xp", iExperienceGain)
      client_print(id, print_console, "*** +%d objective xp ***", iExperienceGain)
   }
   return PLUGIN_CONTINUE
}

public Event_DeathMsg()
{
   new attacker = read_data(1)
   new victim = read_data(2)

   if(!is_user_connected(attacker) || !is_user_connected(victim)) {
      return PLUGIN_CONTINUE
   }
   
   #if(Item_Death)
      Drop_Items(victim)
   #endif
   if(get_user_team(attacker) == get_user_team(victim)) {
      return PLUGIN_CONTINUE
   }

   if(attacker != victim)
   {
      new iExperienceGain
      if(PlayerLevel[attacker] < 1) {
         iExperienceGain = Kill_Experience
      } else {
         iExperienceGain = Kill_Experience * PlayerLevel[attacker]
      }      
         
      add_experience(attacker, iExperienceGain)
      client_print(attacker, print_center, "+%d kill xp", iExperienceGain)
      client_print(attacker, print_console, "*** +%d kill xp ***", iExperienceGain)
   }
   return PLUGIN_CONTINUE
}

public Event_Damage(id)
{
   if(!is_user_connected(id)) {
      return PLUGIN_CONTINUE
   }
   #if(Item_Death)
      Drop_Items(id)
   #endif
   return PLUGIN_CONTINUE
}

public Event_ResetHUD(id)
{
   if(!is_user_alive(id)) {
      return PLUGIN_CONTINUE
   }

   if(g_HealthLevel[id] > 0)
   {
      set_user_health(id, 100)
      add_health(id, g_HealthLevel[id] * Health_PerLevel)
   }
   
   if(g_ArmorLevel[id] > 0)
   {
      cs_set_user_armor(id, 100, CS_ARMOR_KEVLAR)
      add_armor(id, g_ArmorLevel[id] * Armor_PerLevel)
   }
   
   if(PlayerPoints[id] > 0) {
      display_PassiveUpgrades(id)
   }
   
   if(g_PlayerReseted[id])
   {
      new iPoints =  g_HealthLevel[id] + g_ArmorLevel[id] + g_SpeedLevel[id] + g_GravityLevel[id] + g_StealthLevel[id]
      PlayerPoints[id] += iPoints
      g_HealthLevel[id] = 0
      g_ArmorLevel[id] = 0
      g_SpeedLevel[id] = 0
      g_GravityLevel[id] = 0
      g_StealthLevel[id] = 0
      client_print(id, print_chat, "Your Points has been reseted")
      g_PlayerReseted[id] = false
   }
   if(get_cvar_num("um_autosavexp")) {
      SaveData(id)
   }
   return PLUGIN_CONTINUE
}

public Event_CurWeapon(id)
{
   new Weapon_ID = read_data(2)
   //new Weapon_Clip = read_data(3)
   
   new Float: fGravity = g_GravityLevel[id] * Gravity_PerLevel
   if(get_user_gravity(id) != fGravity) {
      set_gravity(id, fGravity)
   }

   new Float:fSpeed = 240.0 + (g_SpeedLevel[id] * Speed_PerLevel)
   if(get_user_maxspeed(id) != fSpeed && ftimeover) {
      set_user_maxspeed(id, fSpeed)
   }
   
   if(g_StealthLevel[id] > 0)
   {
      new iStealth = g_StealthLevel[id] * MaxLevel_Stealth
      new iKnifeStealth = iStealth + 10
      switch(Weapon_ID)
      {
         case CSW_KNIFE: set_stealth(id, iStealth)
         default:set_stealth(id, iKnifeStealth)
      }
   } else if(g_StealthLevel[id] < 1) {
      set_user_rendering(id, kRenderFxNone, kRenderNormal)
   }
   return PLUGIN_CONTINUE
}

public cmd_AddXP(id, level, cid)
{
   if(!cmd_access(id, level, cid, 3)) {
      return PLUGIN_HANDLED
   }
   
   new Arg1[64], Target
   read_argv(1, Arg1, 63)
   
   new iAddExp[32], Value
   read_argv(2, iAddExp, 31)
   if(iAddExp[0] == '-')
   {
      console_print(id, "You cant have a - in the value")
      return PLUGIN_HANDLED
   }
   Value = str_to_num(iAddExp)
   
   new AdminName[32]
   get_user_name(id, AdminName, 31)
   
   new TargetTeam
   new Players[32], iNum
   if(Arg1[0] == '@')
   {
      if(equali(Arg1[1], "all"))
      {
         TargetTeam = 0
         get_players(Players, iNum)
      }
      else if(equali(Arg1[1], "t"))
      {
         TargetTeam = 1
         get_players(Players, iNum, "e" , "terrorist")
      
      }
      else if(equali(Arg1[1], "ct"))
      {
         TargetTeam = 2
         get_players(Players, iNum, "e" , "ct")
      }
      
      for(new i = 0; i < iNum; ++i)
      {
         Target = Players[i]
         add_experience(Target, Value)
      }
      
      switch(TargetTeam)
      {
         case 0:
         {
            console_print(id, "You have given %d xp to all", Value)
            client_print(0, print_chat, "Admin: %s has given %d xp to all", AdminName, Value)
         }
         case 1:
         {
            console_print(id, "You have given %d xp to the terrorist team", Value)
            client_print(0, print_chat, "Admin: %s has given %d xp to the terrorist team", AdminName, Value)
         }
         case 2:
         {
            console_print(id, "You have given %d xp to the terrorist team", Value)
            client_print(0, print_chat, "Admin: %s has given %d xp to the ct team", AdminName, Value)
         }   
      }
   }
   else
   {
      Target = cmd_target(id, Arg1, 0)
      if(!is_user_connected(Target)) {
         return PLUGIN_HANDLED
      }
      
      new TargetName[32]
      get_user_name(Target, TargetName, 31)
      
      add_experience(Target, Value)
      
      console_print(id, "You have given %d xp to %s", Value, TargetName)
      client_print(Target, print_chat, "Admin: %s has given you %d xp", AdminName, Value)
   }
   return PLUGIN_HANDLED
}

public cmd_SetLevel(id, level, cid)
{
   if(!cmd_access(id, level, cid, 3)) {
      return PLUGIN_HANDLED
   }
   
   new Arg1[64], Target
   read_argv(1, Arg1, 63)
   Target = cmd_target(id, Arg1, 0)
   
   new iLevel[32], Value
   read_argv(2, iLevel, 31)
   Value = str_to_num(iLevel)
   
   if(!is_user_connected(Target)) {
      return PLUGIN_HANDLED
   }
   
   if(Value > Max_Level-1)
   {
      console_print(id, "You cant have a more than %d", Max_Level-1)
      return PLUGIN_HANDLED
   }
   
   new AdminName[32]
   get_user_name(id, AdminName, 31)
      
   new TargetName[32]
   get_user_name(Target, TargetName, 31)
   
   PlayerLevel[Target] = Value
   PlayerXp[Target] = LEVELS[PlayerLevel[Target]]

   g_HealthLevel[Target] = 0
   g_ArmorLevel[Target] = 0
   g_SpeedLevel[Target] = 0
   g_GravityLevel[Target] = 0
   g_StealthLevel[Target] = 0
   PlayerPoints[Target] = PlayerLevel[Target]
   
   client_cmd(id, "spk %s", LevelUpSound)
   
   console_print(id, "You have set %s level to %d", TargetName, Value)
   client_print(Target, print_chat, "Admin: %s has set your level to %d", AdminName, Value)

   return PLUGIN_HANDLED
}
   
public display_Advertisements()
{
   new Players[32], iNum
   get_players(Players, iNum, "b")
   
   for(new i = 0; i < iNum; ++i)
   {
      new id = Players[i]
      client_print(id, print_chat, "This server is running %s Version: %s", PLUGIN_NAME, PLUGIN_VERSION)
      client_print(id, print_chat, "Main Commands: say /umhelp  |  say /ummenu")
   }
}
   
public display_myitems(id)
{
   new szMenuBody[512]
   new len = format(szMenuBody, 511, "Items: %d^n", g_PlayerNumItems[id])
   for(new i = 1; i <= g_numberofitems; ++i) if(g_iPlayerItem[id][i]) {
      len += format(szMenuBody[len], 511-len, "%s^n", g_itemname[i])
   }
   set_hudmessage(255, 255, 255, 0.6, -1.0, 0, 0.0, 10.0, 0.0, 0.0, 4)
   show_hudmessage(id, szMenuBody)
   
   return PLUGIN_HANDLED
}

public open_ItemUpgrades(id)
{
   display_ItemUpgrades(id, g_menuPosition[id] = 0)
   return PLUGIN_HANDLED
}

public open_PassiveUpgrades(id)
{
   display_PassiveUpgrades(id)
   return PLUGIN_HANDLED
}

public display_help(id)
{
   new szMotd[2048], szTitle[64], iPos = 0
   format(szTitle, 63, "%s Version: %s", PLUGIN_NAME, PLUGIN_VERSION)
   iPos += format(szMotd[iPos], 2047-iPos, "<html><head><style type=^"text/css^">pre{color:#FFB000;}body{background:#000000;margin-left:8px;margin-top:0px;}</style></head><pre><body>")
   iPos += format(szMotd[iPos], 2047-iPos, "^n^n<b>%s</b>^n^n", szTitle)
   iPos += format(szMotd[iPos], 2047-iPos, "Client Commands:^n")
   iPos += format(szMotd[iPos], 2047-iPos, "say /ummenu - Main menu^n")
   iPos += format(szMotd[iPos], 2047-iPos, "say /upgrade - Passive upgrades menu^n")
   iPos += format(szMotd[iPos], 2047-iPos, "say /itemshop - Item shop menu^n")
   iPos += format(szMotd[iPos], 2047-iPos, "say /myitem - Displays your items^n")
   iPos += format(szMotd[iPos], 2047-iPos, "say /dropitems - Drop all your items^n")
   iPos += format(szMotd[iPos], 2047-iPos, "say /itemlist - Displays all items with description^n")
   iPos += format(szMotd[iPos], 2047-iPos, "say /umhelp - Displays help^n")
   iPos += format(szMotd[iPos], 2047-iPos, "Can also type in the console without '/'^n")
   iPos += format(szMotd[iPos], 2047-iPos, "Bind example: bind home ummenu^n^n")
   iPos += format(szMotd[iPos], 2047-iPos, "Passive Upgrades:^n")
   iPos += format(szMotd[iPos], 2047-iPos, "Health - Increase Health; HP per level: %d^n", Health_PerLevel)
   iPos += format(szMotd[iPos], 2047-iPos, "Armor - Increase Armor; AP per level: %d^n", Armor_PerLevel)
   iPos += format(szMotd[iPos], 2047-iPos, "Speed - Increases Speed; Speed per level: %d^n", Speed_PerLevel)
   iPos += format(szMotd[iPos], 2047-iPos, "Gravity - Decreases your gravity; -Gravity per level %d^n", floatround((Gravity_PerLevel * 100)))
   iPos += format(szMotd[iPos], 2047-iPos, "Stealth - Descreses Visability; Stealth per level: %d^n", Stealth_PerLevel)
   
   show_motd(id, szMotd, szTitle)
   return PLUGIN_HANDLED
}

public display_itemlist(id)
{
   new szMotd[2048], szTitle[64], iPos = 0
   format(szTitle, 63, "Item List")
   iPos += format(szMotd[iPos], 2047-iPos, "<html><head><style type=^"text/css^">pre{color:#FFB000;}body{background:#000000;margin-left:8px;margin-top:0px;}</style></head><pre><body>")
   iPos += format(szMotd[iPos], 2047-iPos, "^n^n<b>%s</b>^n^n", szTitle)
   iPos += format(szMotd[iPos], 2047-iPos, "# Item Name | Item Description | Item Cost^n")
   
   for(new i = 1; i <= g_numberofitems; ++i) {
      iPos += format(szMotd[iPos], 2047-iPos, "(%d)%s   %s   %d^n", i, g_itemname[i], g_itemdesc[i], g_itemcost[i])
   }
   show_motd(id, szMotd, szTitle)
   return PLUGIN_HANDLED
}

public open_MainMenu(id)
{
   new szMenuBody[512]
   new len = format(szMenuBody, 511, "Main Upgrades Menu^n")
   len += format(szMenuBody[len], 511-len, "^n1. Passive Upgrades")
   len += format(szMenuBody[len], 511-len, "^n2  Item Shop")
   len += format(szMenuBody[len], 511-len, "^n3. Item List")
   len += format(szMenuBody[len], 511-len, "^n4. Upgrades Help")
   len += format(szMenuBody[len], 511-len, "^n^n^n8. Save Experience")
   len += format(szMenuBody[len], 511-len, "^n9. Plugin Info")
   len += format(szMenuBody[len], 511-len, "^n0. Cancel")

   new keys = (1<<0|1<<1|1<<2|1<<3|1<<7|1<<8|1<<9)
   show_menu(id, keys, szMenuBody, -1, "Main Upgrades Menu")      
}

public Action_MainMenu(id, key)
{
   switch(key)
   {
      case 0:   open_PassiveUpgrades(id)
      case 1: open_ItemUpgrades(id)
      case 2: display_itemlist(id)
      case 3: display_help(id)
      case 7:
      {
         SaveData(id)
         client_print(id, print_chat, "Saved experience")
      }
      case 8: client_print(id, print_chat, "%s by %s  Version: %s", PLUGIN_NAME, PLUGIN_AUTHOR, PLUGIN_VERSION)
   }
   return PLUGIN_HANDLED
}

public cmd_DropItems(id)
{
   if(!is_user_alive(id)) {
      return PLUGIN_HANDLED
   }
   
   if(g_PlayerNumItems[id] < 1)
   {
      client_print(id, print_chat, "You dont have any items")
      return PLUGIN_HANDLED
   }
   Drop_Items(id)
   client_cmd(id, "spk %s", DropItemSound)
   return PLUGIN_HANDLED
}

public Open_MapItemConfig(id, level, cid)
{
   if(!cmd_access(id, level, cid, 1)) {
      return PLUGIN_HANDLED
   }
   
   if(!g_DirExist)
   {
      console_print(id, "itemconfig directory does not exist")
      return PLUGIN_HANDLED
   }
   display_MapItemConfig(id)
   return PLUGIN_HANDLED
}

display_MapItemConfig(id)
{
   new MenuBody[512]
   new len = format(MenuBody, 511, "Map Item Menu^n")
   len += format(MenuBody[len], 511-len, "^n1. Create Spawn Points")
   len += format(MenuBody[len], 511-len, "^n2  Remove All Spawn Points")
   len += format(MenuBody[len], 511-len, "^n^n0. Cancel")

   new keys = (1<<0|1<<1|1<<9)
   show_menu(id, keys, MenuBody, -1, "MI Config Menu")   
}

public Action_MapItemConfig(id, key)
{
   switch(key)
   {
      case 0:   
      {
         if(g_MapItemNum >= MAX_MAPITEMS)
         {
            client_print(id, print_chat, "Max map items reached")
            return PLUGIN_HANDLED
         }
         
         new Origin[3]
         get_user_origin(id, Origin, 0)
         
         new MapName[33]
         get_mapname(MapName, 32)
         Save_Origin(MapName, Origin)
         
         Load_Origins(MapName)
         display_MapItemConfig(id)
         client_print(id, print_chat, "item spawn point created")
      }         
      case 1:
      {
         RemoveMapItems()
         client_print(id, print_chat, "All spawn points removed")
      }
   }
   return PLUGIN_HANDLED
}

display_ItemUpgrades(id, pos)
{
   if(pos < 0) {
      return
   }
   
   new start = pos * 8
     if(start >= g_numberofitems) {
          start = pos = g_menuPosition[id]
   }

   new menuBody[512]
     new len = format(menuBody, 511, "Item Shop^n^n")
   
     new end = start + 8
     new keys = MENU_KEY_0

   if(end > g_numberofitems) {
          end = g_numberofitems
   }
   
   new b = 0
     for(new a = start; a < end; ++a)
   {
      new i = a + 1
      keys |= (1<<b)
      new money
      #if(Item_Money)      
         money = cs_get_user_money(id)
      #else
         money = PlayerXp[id]
      #endif
      if(g_iPlayerItem[id][i] ||(money < g_itemcost[i]) || g_PlayerNumItems[id] >= Max_PlayerItems) {
         len += format(menuBody[len], 511-len,"\r%d. %s (%d)\w^n", ++b, g_itemname[i], g_itemcost[i])
      } else {
         len += format(menuBody[len], 511-len,"%d. %s (%d)^n", ++b, g_itemname[i], g_itemcost[i])
      }
     }

     if(end != g_numberofitems)
   {
          format(menuBody[len], 511-len, "^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT")
          keys |= MENU_KEY_9
     }
     else
   {
      format(menuBody[len], 511-len, "^n0. %L", id, pos ? "BACK" : "EXIT")
   }
     show_menu(id, keys, menuBody, -1, "Item Shop")
}

public Action_ItemUpgrades(id, key)
{
   switch(key)
   {
          case 8: display_ItemUpgrades(id, ++g_menuPosition[id])
      case 9: display_ItemUpgrades(id, --g_menuPosition[id])
          default:
      {
         if(!is_user_alive(id)) {
            return PLUGIN_HANDLED
         }
         
         ++key
         new money
         new plugin_id = g_itemindex[g_menuPosition[id] * 8 + key]
         new item_id = g_menuPosition[id] * 8 + key
         new func = get_func_id("Enable_Item", plugin_id)
         #if(Item_Money)
            money = cs_get_user_money(id)
         #else
            money = PlayerXp[id]
         #endif
         new cost = g_itemcost[item_id]
         if(g_PlayerNumItems[id] >= Max_PlayerItems)
         {
            client_print(id, print_chat, "Only %d items", Max_PlayerItems)
            client_cmd(id, "spk %s", DeniedSound)
            display_ItemUpgrades(id, g_menuPosition[id])
            return PLUGIN_HANDLED
         }
      
         if(g_iPlayerItem[id][item_id])
         {
            client_print(id, print_chat, "You already have %s", g_itemname[item_id])
            client_cmd(id, "spk %s", DeniedSound)
            display_ItemUpgrades(id, g_menuPosition[id])
            return PLUGIN_HANDLED
         }
         
         if(money >= cost)
         {
            callfunc_begin_i(func, plugin_id)
            callfunc_push_int(id)
            callfunc_end()

            g_PlayerNumItems[id] += 1
            g_iPlayerItem[id][item_id] = true
            #if(Item_Money)
               cs_set_user_money(id, money - cost, 1)
            #else
               PlayerXp[id] = money - cost
            #endif
            client_cmd(id, "spk %s", BoughtItemSound)
            client_print(id, print_chat, "Item Bought: %s", g_itemname[item_id])
            client_print(id, print_chat, "Item Description: %s", g_itemdesc[item_id])
         
            if(g_PlayerNumItems[id] < Max_PlayerItems) {
               display_ItemUpgrades(id, g_menuPosition[id])
            }
         }
         else
         {
            #if(Item_Money)
               client_print(id, print_chat, "You need $%d to buy %s", g_itemcost[item_id], g_itemname[item_id])
            #else
               client_print(id, print_chat, "You need %d xp to buy %s", g_itemcost[item_id], g_itemname[item_id])
            #endif
            display_ItemUpgrades(id, g_menuPosition[id])
            client_cmd(id, "spk %s", DeniedSound)
         }
      }
   }
   return PLUGIN_HANDLED
}

display_PassiveUpgrades(id)
{
   new szMenuBody[512]
   new len = format(szMenuBody, 511, "Passive Upgrades^n")
   len += format(szMenuBody[len], 511-len, "^n1. Health (%d/%d)",    g_HealthLevel[id],   MaxLevel_Health)
   len += format(szMenuBody[len], 511-len, "^n2. Armor (%d/%d)",    g_ArmorLevel[id],   MaxLevel_Armor)
   len += format(szMenuBody[len], 511-len, "^n3. Speed (%d/%d)",   g_SpeedLevel[id],    MaxLevel_Speed)
   len += format(szMenuBody[len], 511-len, "^n4. Gravity (%d/%d)",   g_GravityLevel[id],    MaxLevel_Gravity)
   len += format(szMenuBody[len], 511-len, "^n5. Stealth (%d/%d)",   g_StealthLevel[id],   MaxLevel_Stealth)
   len += format(szMenuBody[len], 511-len, "^n^n9. Reset")
   len += format(szMenuBody[len], 511-len, "^n0. Cancel")

   new keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<8|1<<9)
   show_menu(id, keys, szMenuBody, -1, "Passive Upgrades")
}

public Action_PassiveUpgrades(id, key)
{
   switch(key)
   {
      case 0:
      {
         if(g_HealthLevel[id] >= MaxLevel_Health) {
            return PLUGIN_HANDLED
         } else if(!is_user_alive(id)) {
            return PLUGIN_HANDLED
         } else {
            Set_Upgrade(id, 0)
         }
      }
      case 1:
      {
         if(g_ArmorLevel[id] >= MaxLevel_Armor) {
            return PLUGIN_HANDLED
         } else if(!is_user_alive(id)) {
            return PLUGIN_HANDLED
         } else {
            Set_Upgrade(id, 1)
         }
      }
      case 2:
      {
         if(g_SpeedLevel[id] >= MaxLevel_Speed) {
            return PLUGIN_HANDLED
         } else if(!is_user_alive(id)) {
            return PLUGIN_HANDLED
         } else {
            Set_Upgrade(id, 2)
         }
      }
      case 3:
      {
         if(g_GravityLevel[id] >= MaxLevel_Gravity) {
            return PLUGIN_HANDLED
         } else if(!is_user_alive(id)) {
            return PLUGIN_HANDLED
         } else {
            Set_Upgrade(id, 3)
         }
      }
      case 4:
      {
         if(g_StealthLevel[id] >= MaxLevel_Stealth) {
            return PLUGIN_HANDLED
         } else if(!is_user_alive(id)) {
            return PLUGIN_HANDLED
         } else {
            Set_Upgrade(id, 4)
         }
      }
      case 8:
      {
         g_PlayerReseted[id] = true
         client_print(id, print_chat, "Your points will be reseted next time you spawn")
      }
   }
   return PLUGIN_HANDLED
}
   
public Set_Upgrade(id, value)
{
   if(PlayerPoints[id] > 0)
   {
      switch(value)
      {
         case 0:
         {
            g_HealthLevel[id] += 1
            add_health(id, Health_PerLevel)
            client_print(id, print_chat, "+%d Health", g_HealthLevel[id] * Health_PerLevel)
         }
         case 1:
         {
            g_ArmorLevel[id]  += 1
            add_armor(id, Armor_PerLevel)
            client_print(id, print_chat, "+%d Armor", g_ArmorLevel[id] * Armor_PerLevel)
         }
         case 2:
         {
            g_SpeedLevel[id]  += 1
            new Float:fSpeed = 240.0 + (g_SpeedLevel[id] * Speed_PerLevel)
            
            if(ftimeover) {
               set_user_maxspeed(id, fSpeed)
            }
            client_print(id, print_chat, "+%d Speed",  g_SpeedLevel[id] * Speed_PerLevel)
         }
         case 3:
         {
            g_GravityLevel[id]  += 1
            new Float: fGravity = g_GravityLevel[id] * Gravity_PerLevel
            set_gravity(id, fGravity)
            client_print(id, print_chat, "-%d Gravity", g_GravityLevel[id] * floatround((Gravity_PerLevel * 100)))
         }
         case 4:
         {
            g_StealthLevel[id]  += 1
            set_stealth(id, Stealth_PerLevel)
            client_print(id, print_chat, "+%d Stealth", g_StealthLevel[id] * Stealth_PerLevel)
         }
      }
      
      PlayerPoints[id] -= 1
      client_cmd(id, "spk %s", UpgradedSound)
      
      if(PlayerPoints[id] > 0) {
         display_PassiveUpgrades(id)
      }
   } else {
      client_cmd(id, "spk %s", DeniedSound)
   }
}

public register_umitem(item_index, item_name[], item_desc[], item_cost)
{
   if(g_numberofitems == MAX_ITEMS) {
      return -2
   }
   
   g_numberofitems++
   g_itemindex[g_numberofitems] = item_index
   format(g_itemname[g_numberofitems], MAX_ITEM_NAME_SIZE, item_name)
   format(g_itemdesc[g_numberofitems], MAX_ITEM_DESC_SIZE, item_desc)
   g_itemcost[g_numberofitems] = item_cost
   
   return g_numberofitems
}

add_experience(id, value)
{
   if(PlayerLevel[id] <= Max_Level-1) {
      PlayerXp[id] += value
   }
}

add_armor(id, value)
{
   new CsArmorType:ArmorType
         new iArmor = cs_get_user_armor(id, ArmorType)
   cs_set_user_armor(id, iArmor + value, ArmorType)
}

add_health(id, value)
{
   new iHealth = get_user_health(id)
   set_user_health(id, iHealth + value)
}

set_stealth(id, value)
{
   new iMax_Stealth = 20 + (MaxLevel_Stealth * Stealth_PerLevel)
   set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, iMax_Stealth  - value)
}

set_gravity(id, Float:value) {
   set_user_gravity(id, 1.00 - value)
}

SaveData(id)
{
   new authid[32]
   get_user_authid(id, authid, 31)
   new vaultkey[64], vaultdata[64]
   
   format(vaultkey, 63, "Account-%s-Level", authid)
   format(vaultdata, 63, "%d", PlayerLevel[id])
   set_vaultdata(vaultkey, vaultdata)
   
   format(vaultkey, 63, "Account-%s-Xp", authid)
   format(vaultdata, 63, "%d", PlayerXp[id])
   set_vaultdata(vaultkey, vaultdata)

   format(vaultkey, 63, "Account-%s-Points", authid)
   format(vaultdata, 63, "%d", PlayerLevel[id])
   set_vaultdata(vaultkey, vaultdata)
}

LoadData(id)
{
   new authid[32]
   get_user_authid(id,authid,31)
   new vaultkey[64], vaultdata[64]

   format(vaultkey, 63, "Account-%s-Level", authid)
       get_vaultdata(vaultkey, vaultdata, 63)
       PlayerLevel[id] = str_to_num(vaultdata)
   
   format(vaultkey, 63, "Account-%s-Xp", authid)
       get_vaultdata(vaultkey, vaultdata, 63)
       PlayerXp[id] = str_to_num(vaultdata)

       format(vaultkey, 63, "Account-%s-Points", authid)
       get_vaultdata(vaultkey, vaultdata, 63)
       PlayerPoints[id] = str_to_num(vaultdata)
}

public Pickup_Items(ptr, ptd)
{
   if(is_user_alive(ptd) && is_valid_ent(ptr))
   {
      new item_id = entity_get_int(ptr, EV_INT_iuser4)
      new plugin_id = g_itemindex[item_id]
      new func = get_func_id("Enable_Item", plugin_id)
      if(!g_iPlayerItem[ptd][item_id])
      {
         if(g_PlayerNumItems[ptd] < Max_PlayerItems)
         {
            callfunc_begin_i(func, plugin_id)
            callfunc_push_int(ptd)
            callfunc_end()
                  
            g_PlayerNumItems[ptd] += 1
            g_iPlayerItem[ptd][item_id] = true
            client_cmd(ptd, "spk %s", PickUpItemSound)
            client_print(ptd, print_chat, "Item Picked: %s", g_itemname[item_id])
               
            remove_entity(ptr)
         }
      }
   }
}

Drop_Items(id)
{
   for(new item_id = 1; item_id <= MAX_ITEMS ; item_id++)
   {
      if(g_iPlayerItem[id][item_id])
      {
         new Float:fVelocity[3], Float:fOrigin[3], Float:fGlowColors[3] = {100.0, 100.0, 100.0}
         entity_get_vector(id, EV_VEC_origin, fOrigin)
         fOrigin[2] += 75
   
         VelocityByAim(id, 130, fVelocity)
         
         new item_ent = create_entity("info_target")
         if(is_valid_ent(item_ent))
         {
            entity_set_string(item_ent, EV_SZ_classname, "UmItem")
            
            entity_set_int(item_ent, EV_INT_solid, SOLID_TRIGGER)
            entity_set_int(item_ent, EV_ENT_owner, 0)
            entity_set_int(item_ent, EV_INT_movetype, 6)
            entity_set_int(item_ent, EV_INT_iuser4, item_id)
            entity_set_int(item_ent, EV_INT_renderfx, kRenderFxGlowShell)

            entity_set_vector(item_ent, EV_VEC_origin, fOrigin)
            entity_set_vector(item_ent, EV_VEC_velocity, fVelocity)
            entity_set_vector(item_ent, EV_VEC_rendercolor, fGlowColors)
            
            entity_set_model(item_ent, ItemModel)
            entity_set_size(item_ent, Float:{-2.5, -2.5, -1.5}, Float:{2.5, 2.5, 1.5})
            
            new plugin_id = g_itemindex[item_id]
            new func = get_func_id("Disable_Item", plugin_id)

            callfunc_begin_i(func, plugin_id)
            callfunc_push_int(id)
            callfunc_end()
            
            g_iPlayerItem[id][item_id] = false
            g_PlayerNumItems[id] = 0
         }
      }
   }
   return PLUGIN_CONTINUE
}

Save_Origin(CurMap[], Origin[3])
{
   new MapFile[64], Text[64]
   format(MapFile, 63, "%s/%s.cfg", g_ItemOriginDir, CurMap)
   if(!file_exists(MapFile))
   {
      new Comments[64]
      format(Comments, 63, "; Map item origins for %s", CurMap)
      write_file(MapFile, Comments, -1)
   }
   
   format(Text, 64, "%i %i %i", Origin[0], Origin[1], Origin[2])
   write_file(MapFile, Text, -1)
}

Load_Origins(CurMap[])
{
   new MapFile[64]
   format(MapFile, 63, "%s/%s.cfg", g_ItemOriginDir, CurMap)
   if(!file_exists(MapFile)) {
      return PLUGIN_CONTINUE
   }

   g_MapItemNum = 0
   for(new i = 1; i <= MAX_MAPITEMS; ++i)
   {
      g_MapItemOrgins[i][0] = 0
      g_MapItemOrgins[i][1] = 0
      g_MapItemOrgins[i][2] = 0
   }
   
   new Text[64], Line = 0, Len = 0
   while(read_file(MapFile, Line++, Text, 63, Len))
   {
      if((Text[0]==';') || !Len) {
          continue
      }
      
      if(g_MapItemNum >= MAX_MAPITEMS)
      {
         log_amx("Max map items reached, please increase MAX_MAPITEMS")
         break
      }
      
      new iOrigin[3][16]
      parse(Text, iOrigin[0], 15, iOrigin[1], 15, iOrigin[2], 15)
      
      g_MapItemNum++
      g_MapItemOrgins[g_MapItemNum][0] = str_to_num(iOrigin[0])
      g_MapItemOrgins[g_MapItemNum][1] = str_to_num(iOrigin[1])
      g_MapItemOrgins[g_MapItemNum][2] = str_to_num(iOrigin[2])
   }
   return PLUGIN_CONTINUE
}

public Spawn_Items()
{
   for(new i = 1; i <= MAX_MAPITEMS; ++i)
   {
      if((g_MapItemOrgins[i][0] == 0)
      && (g_MapItemOrgins[i][1] == 0)
      && g_MapItemOrgins[i][2] == 0) {
            continue
      }
      Create_Items(g_MapItemOrgins[i])
   }
}

RemoveMapItems()
{
   new MapFile[64], CurMap[32]
   get_mapname(CurMap, 31)
   format(MapFile, 63, "%s/%s.cfg", g_ItemOriginDir, CurMap)
   if(file_exists(MapFile)) {
      delete_file(MapFile)
   }

   g_MapItemNum = 0
   for(new i = 1; i <= MAX_MAPITEMS; ++i)
   {
      g_MapItemOrgins[i][0] = 0
      g_MapItemOrgins[i][1] = 0
      g_MapItemOrgins[i][2] = 0
   }
}

Create_Items(Origin[3])
{
   new Float:flOrigin[3]
   IVecFVec(Origin, flOrigin)
   
   new Float:fGlowColors[3] = {0.0, 100.0, 0.0}
   new item_ent = create_entity("info_target")
   new item_id = random_num(1, g_numberofitems)
   if(is_valid_ent(item_ent))
   {
      entity_set_string(item_ent, EV_SZ_classname, "UmItem")
            
      entity_set_int(item_ent, EV_INT_solid, SOLID_TRIGGER)
      entity_set_int(item_ent, EV_ENT_owner, 0)
      entity_set_int(item_ent, EV_INT_movetype, 6)
      entity_set_int(item_ent, EV_INT_iuser4, item_id)
      entity_set_int(item_ent, EV_INT_renderfx, kRenderFxGlowShell)

      entity_set_vector(item_ent, EV_VEC_origin, flOrigin)
      entity_set_vector(item_ent, EV_VEC_rendercolor, fGlowColors)
      
      drop_to_floor(item_ent)
      entity_set_model(item_ent, ItemModel)
      entity_set_size(item_ent, Float:{-2.5, -2.5, -1.5}, Float:{2.5, 2.5, 1.5})

   }
   return PLUGIN_CONTINUE
}

public plugin_precache()
{
   precache_model(ItemModel)
   precache_sound(DeniedSound)
   precache_sound(LevelUpSound)
   precache_sound(UpgradedSound)
   precache_sound(PickUpItemSound)
   precache_sound(BoughtItemSound)
}


Hozzászólás jelentése
Vissza a tetejére
   
HozzászólásElküldve:2012.04.11. 21:24 
Offline
Lelkes

Csatlakozott:2011.12.17. 21:56
Hozzászólások:15
köszönöm fear_ezmegmi


Hozzászólás jelentése
Vissza a tetejére
   
HozzászólásElküldve:2012.04.11. 21:31 
Offline
Tiszteletbeli

Csatlakozott:2010.02.04. 19:12
Hozzászólások:3528
Megköszönt másnak: 26 alkalommal
Megköszönték neki: 180 alkalommal
fixed
Kód:
new PLUGIN_VERSION[]    = "1.0.2"

// Based experience ; this are times by the players level 
#define Kill_Experience      50   
#define Hos_Experience      20
#define Obj_Experience      35
#define MIN_PLAYERS      1 //Minimum players that are connected to get objective xp

#define Max_Level      61
// Max level for each passive upgrades
#define MaxLevel_Health      12
#define MaxLevel_Armor      12
#define MaxLevel_Speed      12
#define MaxLevel_Gravity   12
#define MaxLevel_Stealth   12

// How much you get per level
#define Health_PerLevel      15
#define Armor_PerLevel      20
#define Speed_PerLevel      30      
#define Gravity_PerLevel   0.1 // 10%
#define Stealth_PerLevel   60

// Max items players can carry
#define Max_PlayerItems      3

#define Item_Money      1 // 0 = Experience; 1 = dollars   
#define Item_Death      1 // Player lose item on death

// Item plugins configs
#define MAX_ITEMS      100
#define MAX_MAPITEMS      100
#define MAX_ITEM_NAME_SIZE   64
#define MAX_ITEM_DESC_SIZE   128


new LevelUpSound[]    = { "events/task_complete.wav" }
new 
DeniedSound[]    = { "buttons/blip1.wav"}
new 
UpgradedSound[]    = { "items/tr_kevlar.wav" }
new 
BoughtItemSound[]    = { "items/ammopickup1.wav" }
new 
PickUpItemSound[]    = { "items/ammopickup2.wav" }
new 
DropItemSound[]   = { "events/enemy_died.wav" }
new 
ItemModel[]    = { "models/w_gaussammo.mdl" }

new 
LEVELS[Max_Level] =

   
5,    //0
   
10,    //1
   
20,   //2
   
40,   //3
   
80,   //4
   
160,   //5
   
320,   //6
   
640,   //7
   
1000,   //8
   
2000,   //9
   
3000,   //10
   
4000,   //11
   
5000,   //12
   
6000,   //13
   
8000,   //14
   
10000,   //15
   
20000,    //16
   
30000,    //17
   
40000,   //18
   
50000,   //19
   
60000,   //20
   
70000,   //21
   
80000,   //22
   
90000,   //23
   
100000,   //24
   
110000,   //25
   
120000,   //26
   
130000,   //27
   
140000,   //28
   
150000,   //29
   
160000,   //30
   
170000,   //31
   
180000,   //32
   
190000,   //33
   
200000,   //34
   
220000,   //35
   
240000,   //36
   
250000,   //37
   
260000,   //38
   
280000,   //39
   
300000,   //40
   
330000,   //41
   
350000,   //42
   
360000,   //43
   
390000,   //44
   
400000,   //45
   
440000,   //46
   
450000,   //47
   
490000,   //48
   
500000,   //49
   
550000,   //50
   
600000,   //51
   
700000,   //52
   
800000,   //53
   
900000,   //54
   
1000000//55
   
1200000//56
   
1400000//57
   
1600000//58
   
1800000//59
   
2000000 //60
}

/* DO NOT EDIT BEYOND THIS LINE UNLESS YOU KNOW WHAT YOU ARE DOING */

#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <engine>
#include <vault>
#include <fun>

new g_HealthLevel[33]
new 
g_ArmorLevel[33]
new 
g_SpeedLevel[33]
new 
g_GravityLevel[33]
new 
g_StealthLevel[33]
new 
bool:g_PlayerReseted[33]

new 
PlayerXp[33
new 
PlayerLevel[33]
new 
PlayerPoints[33]

new 
g_MapItemNum
new bool:ftimeover
new bool:g_DirExist
new g_ConfigsDir[64]
new 
g_ItemOriginDir[64]
new 
g_MapItemOrgins[MAX_MAPITEMS+1][3]

new 
g_numberofitems
new g_menuPosition[33]
new 
g_itemindex[MAX_ITEMS+1]
new 
g_itemcost[MAX_ITEMS+1]
new 
g_itemname[MAX_ITEMS+1][MAX_ITEM_NAME_SIZE+1]
new 
g_itemdesc[MAX_ITEMS+1][MAX_ITEM_DESC_SIZE+1]
new 
bool:g_iPlayerItem[33][MAX_ITEMS+1]
new 
g_PlayerNumItems[33]



new 
PLUGIN_NAME[]    = "Upgrades Mod 2.0"
new PLUGIN_AUTHOR[]    = "Cheap_Suit"

public plugin_init() 
{
   
register_plugin(PLUGIN_NAMEPLUGIN_VERSIONPLUGIN_AUTHOR)
   
register_cvar("um_enable""1"
   
register_cvar("um_autosavexp""1")
   
register_cvar("um_itemsremoved""1")
   
   if(
get_cvar_num("um_enable"))
   {
      
register_clcmd("um_addxp""cmd_AddXP"ADMIN_IMMUNITY"<@all/t/ct>/<name><xp> - give users xp eg. um_addxp cheap_suit 100")
      
register_clcmd("um_setlevel""cmd_SetLevel"ADMIN_IMMUNITY"<name><level> - give users xp eg. um_setlevel cheap_suit 5")
      
register_clcmd("um_mapitems""Open_MapItemConfig"ADMIN_IMMUNITY"- Open's Map item configs")
      
register_clcmd("say /ummenu",    "open_MainMenu")
      
register_clcmd("say /upgrade",    "open_PassiveUpgrades")
      
register_clcmd("say /itemshop""open_ItemUpgrades")
      
register_clcmd("say /itemlist""display_itemlist")
      
register_clcmd("say /umhelp",    "display_help")
      
register_clcmd("say /myitems",    "display_myitems")
      
register_clcmd("say /dropitems","cmd_DropItems")
      
register_concmd("ummenu",    "open_MainMenu")
      
register_concmd("upgrade",    "open_PassiveUpgrades")
      
register_concmd("itemshop",    "open_ItemUpgrades")
      
register_concmd("itemlist",    "display_itemlist")
      
register_concmd("umhelp",    "display_help")
      
register_concmd("myitems",    "display_myitems")
      
register_concmd("dropitems",    "cmd_DropItems")
      
      
register_touch("UmItem""player""Pickup_Items")
      
register_directory()
      
      
register_event("DeathMsg""Event_DeathMsg""a")
      
register_event("ResetHUD""Event_ResetHUD""be")
      
register_event("CurWeapon""Event_CurWeapon""be""1=1")
      
register_event("Damage""Event_Damage""bd""2>0")
      
register_event("StatusValue""Event_StatusValue""bd""1=2")
   
      
register_event("TextMsg""Event_GameRestart""a""2=#Game_will_restart_in""2&#Game_C"
      
register_event("SendAudio""Event_RoundEnd""a""2=%!MRAD_terwin""2=%!MRAD_ctwin""2=%!MRAD_rounddraw")    
   
      
register_logevent("LogEvent_Objectives"3"1=triggered")
      
register_logevent("LogEvent_RoundStart"2"0=World triggered""1=Round_Start")
      
      
register_menucmd(register_menuid("Main Upgrades Menu"), 1023"Action_MainMenu")
      
register_menucmd(register_menuid("Passive Upgrades"), 1023"Action_PassiveUpgrades")
      
register_menucmd(register_menuid("MI Config Menu"), 1023"Action_MapItemConfig")
      
register_menucmd(register_menuid("Item Shop"), 1023"Action_ItemUpgrades")
      
   
      
//Advertise the command to the dead people
      
set_task(random_float(50.090.0), "display_Advertisements"___"b")
      
set_task(0.1"client_experience"12__"b")
   }
   
set_task(0.1"check_cvar"34__"b")
}

public 
check_cvar()
{
   if(!
get_cvar_num("um_enable"))
   {
      
remove_items()
      
remove_task(12)
      
remove_task(34)
      
      for(new 
1<= get_maxplayers(); ++i) if(is_user_connected(i)) 
      {
         
message_begin(MSG_ONEget_user_msgid("StatusText"), {000}, i
         
write_byte(0
         
write_string("")
         
message_end()
      }
      
      for(new 
0get_pluginsnum(); ++i)
      {
         new 
temp[2], name[64]
         
get_plugin(iname63temp1temp1temp1temp1)
         if(
equali(name"Item_"5)) {
            
server_cmd("amxx pause %s"name)
         }
      }

      
server_cmd("amxx pause %s"PLUGIN_NAME)
      
server_print("If enabled again, restart server for upgrades mod to work properly")
   }
}

register_directory()
{
   
get_configsdir(g_ConfigsDir63)
   
format(g_ItemOriginDir63"%s/itemorigin"g_ConfigsDir)
   
   if(!
dir_exists(g_ItemOriginDir)) 
   {
      
log_amx("itemorigin directory does not exist")
      
g_DirExist false
   

   else 
   {
      
g_DirExist true
      
      
new CurMap[32]
      
get_mapname(CurMap31)
      
Load_Origins(CurMap)
   }
   
}

public 
client_authorized(id)
{
   
g_HealthLevel[id] = 0
   g_ArmorLevel
[id] = 0
   g_SpeedLevel
[id] = 0
   g_GravityLevel
[id] = 0
   g_StealthLevel
[id] = 0
      
   PlayerXp
[id] = 
   PlayerLevel
[id] = 0
   PlayerPoints
[id] = 0
      
   g_PlayerNumItems
[id] = 0
   
for(new 1<= MAX_ITEMS; ++i) {
      
g_iPlayerItem[id][MAX_ITEMS] = false
   
}
   
LoadData(id)
}

public 
client_disconnect(id
{
   if(
get_cvar_num("um_autosavexp")) {
      
SaveData(id)
   }
}

public 
client_experience()
{   
   new 
Players[32], iNum
   get_players
(PlayersiNum)
   
   for(new 
0iNum; ++i)
   {
      new 
id Players[i]
      if(
is_user_alive(id)) 
      {
         new 
InfoMsg[255
         
format(InfoMsg254"Level: %d/%d    XP: %d/%d    Points: %d    Items: %d/%d"PlayerLevel[id], Max_Level-1PlayerXp[id], LEVELS[PlayerLevel[id]], PlayerPoints[id], g_PlayerNumItems[id], Max_PlayerItems)
                   
         
message_begin(MSG_ONEget_user_msgid("StatusText"), {000}, id
         
write_byte(0
         
write_string(InfoMsg)
         
message_end()
      }
   
      if(
PlayerXp[id] >= LEVELS[Max_Level-1] || PlayerLevel[id] >= Max_Level-1
      {
         
PlayerLevel[id] = Max_Level-1
         PlayerXp
[id] = LEVELS[Max_Level-1]
         return 
PLUGIN_CONTINUE
      
}
      
      if(
PlayerXp[id] >= LEVELS[PlayerLevel[id]])
      {
         
PlayerLevel[id] += 1
         PlayerPoints
[id] += 1
         display_PassiveUpgrades
(id)
         
client_cmd(id"spk %s"LevelUpSound)
      }
   }
   return 
PLUGIN_CONTINUE
}

public 
LogEvent_RoundStart() 
{
   
ftimeover true
   set_task
(0.6"Spawn_Items")
}

public 
Event_RoundEnd()
{
   
ftimeover false
   
if(get_cvar_num("um_itemsremoved")) {
      
set_task(2.5"remove_items")
   }
}

public 
remove_items()
{
   new 
items find_ent_by_class(-1"UmItem")
   while(
items
   {
      
remove_entity(items)
      
items find_ent_by_class(items"UmItem")
   }
}

public 
Event_GameRestart()
{
   new 
Float:fRestartCvar get_cvar_float("sv_restart")
   
set_task((fRestartCvar 0.2), "Event_RoundEnd")
}

get_connectedplayers()
{
   new 
cpl
   
for(new 1<= get_maxplayers(); ++i) if(is_user_connected(i)) {
      
cpl += 1
   
}
   return 
cpl
}

public 
Event_StatusValue(id)
{
   new 
target read_data(2)
     if(
target != id && target != 0)
     {
      new 
sName[32], szMenuBody[512]
      
get_user_name(targetsName31)

      new 
len format(szMenuBody511"Name: %s^n"sName)
      
len += format(szMenuBody[len], 511-len"Level: %d^n"PlayerLevel[target])
      
len += format(szMenuBody[len], 511-len"Items: %d^n"g_PlayerNumItems[target])
      for(new 
1<= g_numberofitems; ++i) if(g_iPlayerItem[target][i]) {
         
len += format(szMenuBody[len], 511-len"%s^n"g_itemname[i])
      }
      
set_hudmessage(2552552550.6, -1.000.06.00.00.01)
      
show_hudmessage(idszMenuBody)
   }
}

public 
LogEvent_Objectives()
{
   if(
get_connectedplayers() < MIN_PLAYERS) {
      return 
PLUGIN_CONTINUE
   
}
   
   new 
sArg[64], sAction[64]
   
read_logargv(0sArg64
   
read_logargv(2sAction64
   
   new 
sName[1], iUserIdiExperienceGain
   parse_loguser
(sArgsName0iUserId)
   new 
id find_player("k"iUserId)

   if(
equal(sAction,"Planted_The_Bomb") || equal(sAction"Defused_The_Bomb") || equal(sAction"Escaped_As_VIP")) 
   { 
      if(
PlayerLevel[id] < 1) {
         
iExperienceGain Obj_Experience
      
} else {
         
iExperienceGain Obj_Experience PlayerLevel[id]
      }
      
      
add_experience(idiExperienceGain)
      
client_print(idprint_chat"+%d objective xp"iExperienceGain)
      
client_print(idprint_console"*** +%d objective xp ***"iExperienceGain)
   }
   else if(
equal(sAction"Rescued_A_Hostage"))
   {
      if(
PlayerLevel[id] < 1) {
         
iExperienceGain Hos_Experience
      
} else {
         
iExperienceGain Hos_Experience PlayerLevel[id]
      }   
      
      
add_experience(idiExperienceGain)
      
client_print(idprint_chat"+%d objective xp"iExperienceGain)
      
client_print(idprint_console"*** +%d objective xp ***"iExperienceGain)
   }
   return 
PLUGIN_CONTINUE
}

public 
Event_HostagesRescued()
{
   if(
get_connectedplayers() < MIN_PLAYERS) {
      return 
PLUGIN_CONTINUE
   
}
   
   new 
iPlayers[32], iNumi
   get_players
(iPlayersiNum"ae""CT")
   for(
0<= iNumi++)
   {
      new 
id iPlayers[i]
      
      new 
iExperienceGain
      
if(PlayerLevel[id] < 1) {
         
iExperienceGain Obj_Experience
      
} else {
         
iExperienceGain Obj_Experience PlayerLevel[id]
      }
      
      
add_experience(idiExperienceGain)
      
client_print(idprint_chat"+%d objective xp"iExperienceGain)
      
client_print(idprint_console"*** +%d objective xp ***"iExperienceGain)
   }
   return 
PLUGIN_CONTINUE
}

public 
Event_DeathMsg() 

   new 
attacker read_data(1)
   new 
victim read_data(2)

   if(!
is_user_connected(attacker) || !is_user_connected(victim)) {
      return 
PLUGIN_CONTINUE
   
}
   
   
#if(Item_Death)
      
Drop_Items(victim)
   
#endif
   
if(get_user_team(attacker) == get_user_team(victim)) {
      return 
PLUGIN_CONTINUE
   
}

   if(
attacker != victim)
   {
      new 
iExperienceGain 
      
if(PlayerLevel[attacker] < 1) {
         
iExperienceGain Kill_Experience
      
} else {
         
iExperienceGain Kill_Experience PlayerLevel[attacker]
      }      
         
      
add_experience(attackeriExperienceGain)
      
client_print(attackerprint_center"+%d kill xp"iExperienceGain)
      
client_print(attackerprint_console"*** +%d kill xp ***"iExperienceGain)
   }
   return 
PLUGIN_CONTINUE
}

public 
Event_Damage(id)
{
   if(!
is_user_connected(id)) {
      return 
PLUGIN_CONTINUE
   
}
   
#if(Item_Death)
      
Drop_Items(id)
   
#endif
   
return PLUGIN_CONTINUE
}

public 
Event_ResetHUD(id)
{
   if(!
is_user_alive(id)) {
      return 
PLUGIN_CONTINUE
   
}

   if(
g_HealthLevel[id] > 0
   {
      
set_user_health(id100)
      
add_health(idg_HealthLevel[id] * Health_PerLevel)
   }
   
   if(
g_ArmorLevel[id] > 0
   {
      
cs_set_user_armor(id100CS_ARMOR_KEVLAR
      
add_armor(idg_ArmorLevel[id] * Armor_PerLevel)
   }
   
   if(
PlayerPoints[id] > 0) {
      
display_PassiveUpgrades(id)
   }
   
   if(
g_PlayerReseted[id])
   {
      new 
iPoints =  g_HealthLevel[id] + g_ArmorLevel[id] + g_SpeedLevel[id] + g_GravityLevel[id] + g_StealthLevel[id]
      
PlayerPoints[id] += iPoints
      g_HealthLevel
[id] = 0
      g_ArmorLevel
[id] = 0
      g_SpeedLevel
[id] = 0
      g_GravityLevel
[id] = 0
      g_StealthLevel
[id] = 0
      client_print
(idprint_chat"Your Points has been reseted")
      
g_PlayerReseted[id] = false
   
}
   if(
get_cvar_num("um_autosavexp")) {
      
SaveData(id)
   }
   return 
PLUGIN_CONTINUE
}

public 
Event_CurWeapon(id)
{
   new 
Weapon_ID read_data(2)
   
//new Weapon_Clip = read_data(3)
   
   
new FloatfGravity g_GravityLevel[id] * Gravity_PerLevel
   
if(get_user_gravity(id) != fGravity) {
      
set_gravity(idfGravity)
   }

   new 
Float:fSpeed 240.0 + (g_SpeedLevel[id] * Speed_PerLevel)
   if(
get_user_maxspeed(id) != fSpeed && ftimeover) {
      
set_user_maxspeed(idfSpeed)
   }
   
   if(
g_StealthLevel[id] > 0)
   {
      new 
iStealth g_StealthLevel[id] * MaxLevel_Stealth
      
new iKnifeStealth iStealth 10
      
switch(Weapon_ID)
      {
         case 
CSW_KNIFEset_stealth(idiStealth)
         default:
set_stealth(idiKnifeStealth)
      }
   } else if(
g_StealthLevel[id] < 1) {
      
set_user_rendering(idkRenderFxNonekRenderNormal)
   }
   return 
PLUGIN_CONTINUE
}

public 
cmd_AddXP(idlevelcid
{
   if(!
cmd_access(idlevelcid3)) {
      return 
PLUGIN_HANDLED
   
}
   
   new 
Arg1[64], Target
   read_argv
(1Arg163)
   
   new 
iAddExp[32], Value
   read_argv
(2iAddExp31)
   if(
iAddExp[0] == '-'
   {
      
console_print(id"You cant have a - in the value")
      return 
PLUGIN_HANDLED
   
}
   
Value str_to_num(iAddExp)
   
   new 
AdminName[32]
   
get_user_name(idAdminName31)
   
   new 
TargetTeam
   
new Players[32], iNum
   
if(Arg1[0] == '@'
   {
      if(
equali(Arg1[1], "all")) 
      {
         
TargetTeam 0
         get_players
(PlayersiNum)
      } 
      else if(
equali(Arg1[1], "t")) 
      {
         
TargetTeam 1
         get_players
(PlayersiNum"e" "terrorist")
      
      } 
      else if(
equali(Arg1[1], "ct")) 
      {
         
TargetTeam 2
         get_players
(PlayersiNum"e" "ct")
      }
      
      for(new 
0iNum; ++i)
      {
         
Target Players[i]
         
add_experience(TargetValue)
      }
      
      switch(
TargetTeam)
      {
         case 
0:
         {
            
console_print(id"You have given %d xp to all"Value)
            
client_print(0print_chat"Admin: %s has given %d xp to all"AdminNameValue)
         }
         case 
1:
         {
            
console_print(id"You have given %d xp to the terrorist team"Value)
            
client_print(0print_chat"Admin: %s has given %d xp to the terrorist team"AdminNameValue)
         }
         case 
2:
         {
            
console_print(id"You have given %d xp to the terrorist team"Value)
            
client_print(0print_chat"Admin: %s has given %d xp to the ct team"AdminNameValue)
         }   
      }
   }
   else
   {
      
Target cmd_target(idArg10)
      if(!
is_user_connected(Target)) {
         return 
PLUGIN_HANDLED
      
}
      
      new 
TargetName[32]
      
get_user_name(TargetTargetName31)
      
      
add_experience(TargetValue)
      
      
console_print(id"You have given %d xp to %s"ValueTargetName)
      
client_print(Targetprint_chat"Admin: %s has given you %d xp"AdminNameValue)
   }
   return 
PLUGIN_HANDLED
}

public 
cmd_SetLevel(idlevelcid
{
   if(!
cmd_access(idlevelcid3)) {
      return 
PLUGIN_HANDLED
   
}
   
   new 
Arg1[64], Target
   read_argv
(1Arg163)
   
Target cmd_target(idArg10)
   
   new 
iLevel[32], Value
   read_argv
(2iLevel31)
   
Value str_to_num(iLevel)
   
   if(!
is_user_connected(Target)) {
      return 
PLUGIN_HANDLED
   
}
   
   if(
Value Max_Level-1)
   {
      
console_print(id"You cant have a more than %d"Max_Level-1)
      return 
PLUGIN_HANDLED
   
}
   
   new 
AdminName[32]
   
get_user_name(idAdminName31)
      
   new 
TargetName[32]
   
get_user_name(TargetTargetName31)
   
   
PlayerLevel[Target] = Value
   PlayerXp
[Target] = LEVELS[PlayerLevel[Target]]

   
g_HealthLevel[Target] = 0
   g_ArmorLevel
[Target] = 0
   g_SpeedLevel
[Target] = 0
   g_GravityLevel
[Target] = 0
   g_StealthLevel
[Target] = 0
   PlayerPoints
[Target] = PlayerLevel[Target]
   
   
client_cmd(id"spk %s"LevelUpSound)
   
   
console_print(id"You have set %s level to %d"TargetNameValue)
   
client_print(Targetprint_chat"Admin: %s has set your level to %d"AdminNameValue)

   return 
PLUGIN_HANDLED
}
   
public 
display_Advertisements() 
{
   new 
Players[32], iNum
   get_players
(PlayersiNum"b")
   
   for(new 
0iNum; ++i)
   {
      new 
id Players[i]
      
client_print(idprint_chat"This server is running %s Version: %s"PLUGIN_NAMEPLUGIN_VERSION)
      
client_print(idprint_chat"Main Commands: say /umhelp  |  say /ummenu")
   }
}
   
public 
display_myitems(id)
{
   new 
szMenuBody[512]
   new 
len format(szMenuBody511"Items: %d^n"g_PlayerNumItems[id])
   for(new 
1<= g_numberofitems; ++i) if(g_iPlayerItem[id][i]) {
      
len += format(szMenuBody[len], 511-len"%s^n"g_itemname[i])
   }
   
set_hudmessage(2552552550.6, -1.000.010.00.00.04)
   
show_hudmessage(idszMenuBody)
   
   return 
PLUGIN_HANDLED
}

public 
open_ItemUpgrades(id)
{
   
display_ItemUpgrades(idg_menuPosition[id] = 0)
   return 
PLUGIN_HANDLED
}

public 
open_PassiveUpgrades(id)
{
   
display_PassiveUpgrades(id)
   return 
PLUGIN_HANDLED
}

public 
display_help(id)
{
   new 
szMotd[2048], szTitle[64], iPos 0
   format
(szTitle63"%s Version: %s"PLUGIN_NAMEPLUGIN_VERSION)
   
iPos += format(szMotd[iPos], 2047-iPos"<html><head><style type=^"text/css^">pre{color:#FFB000;}body{background:#000000;margin-left:8px;margin-top:0px;}</style></head><pre><body>")
   
iPos += format(szMotd[iPos], 2047-iPos"^n^n<b>%s</b>^n^n"szTitle)
   
iPos += format(szMotd[iPos], 2047-iPos"Client Commands:^n")
   
iPos += format(szMotd[iPos], 2047-iPos"say /ummenu - Main menu^n")
   
iPos += format(szMotd[iPos], 2047-iPos"say /upgrade - Passive upgrades menu^n")
   
iPos += format(szMotd[iPos], 2047-iPos"say /itemshop - Item shop menu^n")
   
iPos += format(szMotd[iPos], 2047-iPos"say /myitem - Displays your items^n")
   
iPos += format(szMotd[iPos], 2047-iPos"say /dropitems - Drop all your items^n")
   
iPos += format(szMotd[iPos], 2047-iPos"say /itemlist - Displays all items with description^n")
   
iPos += format(szMotd[iPos], 2047-iPos"say /umhelp - Displays help^n")
   
iPos += format(szMotd[iPos], 2047-iPos"Can also type in the console without '/'^n")
   
iPos += format(szMotd[iPos], 2047-iPos"Bind example: bind home ummenu^n^n")
   
iPos += format(szMotd[iPos], 2047-iPos"Passive Upgrades:^n")
   
iPos += format(szMotd[iPos], 2047-iPos"Health - Increase Health; HP per level: %d^n"Health_PerLevel)
   
iPos += format(szMotd[iPos], 2047-iPos"Armor - Increase Armor; AP per level: %d^n"Armor_PerLevel)
   
iPos += format(szMotd[iPos], 2047-iPos"Speed - Increases Speed; Speed per level: %d^n"Speed_PerLevel)
   
iPos += format(szMotd[iPos], 2047-iPos"Gravity - Decreases your gravity; -Gravity per level %d^n"floatround((Gravity_PerLevel 100)))
   
iPos += format(szMotd[iPos], 2047-iPos"Stealth - Descreses Visability; Stealth per level: %d^n"Stealth_PerLevel)
   
   
show_motd(idszMotdszTitle)
   return 
PLUGIN_HANDLED
}

public 
display_itemlist(id)
{
   new 
szMotd[2048], szTitle[64], iPos 0
   format
(szTitle63"Item List")
   
iPos += format(szMotd[iPos], 2047-iPos"<html><head><style type=^"text/css^">pre{color:#FFB000;}body{background:#000000;margin-left:8px;margin-top:0px;}</style></head><pre><body>")
   
iPos += format(szMotd[iPos], 2047-iPos"^n^n<b>%s</b>^n^n"szTitle)
   
iPos += format(szMotd[iPos], 2047-iPos"# Item Name | Item Description | Item Cost^n")
   
   for(new 
1<= g_numberofitems; ++i) {
      
iPos += format(szMotd[iPos], 2047-iPos"(%d)%s   %s   %d^n"ig_itemname[i], g_itemdesc[i], g_itemcost[i])
   }
   
show_motd(idszMotdszTitle)
   return 
PLUGIN_HANDLED
}

public 
open_MainMenu(id)
{
   new 
szMenuBody[512]
   new 
len format(szMenuBody511"Main Upgrades Menu^n")
   
len += format(szMenuBody[len], 511-len"^n1. Passive Upgrades")
   
len += format(szMenuBody[len], 511-len"^n2  Item Shop")
   
len += format(szMenuBody[len], 511-len"^n3. Item List")
   
len += format(szMenuBody[len], 511-len"^n4. Upgrades Help")
   
len += format(szMenuBody[len], 511-len"^n^n^n8. Save Experience")
   
len += format(szMenuBody[len], 511-len"^n9. Plugin Info")
   
len += format(szMenuBody[len], 511-len"^n0. Cancel")

   new 
keys = (1<<0|1<<1|1<<2|1<<3|1<<7|1<<8|1<<9)
   
show_menu(idkeysszMenuBody, -1"Main Upgrades Menu")      
}

public 
Action_MainMenu(idkey)
{
   switch(
key
   {
      case 
0:   open_PassiveUpgrades(id)
      case 
1open_ItemUpgrades(id)
      case 
2display_itemlist(id)
      case 
3display_help(id)
      case 
7:
      {
         
SaveData(id)
         
client_print(idprint_chat"Saved experience")
      }
      case 
8client_print(idprint_chat"%s by %s  Version: %s"PLUGIN_NAMEPLUGIN_AUTHORPLUGIN_VERSION)
   }
   return 
PLUGIN_HANDLED
}

public 
cmd_DropItems(id)
{
   if(!
is_user_alive(id)) {
      return 
PLUGIN_HANDLED
   
}
   
   if(
g_PlayerNumItems[id] < 1
   {
      
client_print(idprint_chat"You dont have any items")
      return 
PLUGIN_HANDLED
   
}
   
Drop_Items(id)
   
client_cmd(id"spk %s"DropItemSound)
   return 
PLUGIN_HANDLED
}

public 
Open_MapItemConfig(idlevelcid)
{
   if(!
cmd_access(idlevelcid1)) {
      return 
PLUGIN_HANDLED
   
}
   
   if(!
g_DirExist
   {
      
console_print(id"itemconfig directory does not exist")
      return 
PLUGIN_HANDLED
   
}
   
display_MapItemConfig(id)
   return 
PLUGIN_HANDLED
}

display_MapItemConfig(id)
{
   new 
MenuBody[512]
   new 
len format(MenuBody511"Map Item Menu^n")
   
len += format(MenuBody[len], 511-len"^n1. Create Spawn Points")
   
len += format(MenuBody[len], 511-len"^n2  Remove All Spawn Points")
   
len += format(MenuBody[len], 511-len"^n^n0. Cancel")

   new 
keys = (1<<0|1<<1|1<<9)
   
show_menu(idkeysMenuBody, -1"MI Config Menu")   
}

public 
Action_MapItemConfig(idkey)
{
   switch(
key
   {
      case 
0:   
      {
         if(
g_MapItemNum >= MAX_MAPITEMS)
         {
            
client_print(idprint_chat"Max map items reached")
            return 
PLUGIN_HANDLED
         
}
         
         new 
Origin[3]
         
get_user_origin(idOrigin0)
         
         new 
MapName[33]
         
get_mapname(MapName32)
         
Save_Origin(MapNameOrigin)
         
         
Load_Origins(MapName)
         
display_MapItemConfig(id)
         
client_print(idprint_chat"item spawn point created")
      }         
      case 
1
      {
         
RemoveMapItems()
         
client_print(idprint_chat"All spawn points removed")
      }
   }
   return 
PLUGIN_HANDLED
}

display_ItemUpgrades(idpos)
{
   if(
pos 0) {
      return
   }
   
   new 
start pos 8
     
if(start >= g_numberofitems) {
          
start pos g_menuPosition[id]
   }

   new 
menuBody[512]
     new 
len format(menuBody511"Item Shop^n^n")
   
     new 
end start 8
     
new keys MENU_KEY_0

   
if(end g_numberofitems) {
          
end g_numberofitems
   
}
   
   new 
0
     
for(new startend; ++a
   {
      new 
1
      keys 
|= (1<<b)
      new 
money
      
#if(Item_Money)      
         
money cs_get_user_money(id)
      
#else
         
money PlayerXp[id]
      
#endif
      
if(g_iPlayerItem[id][i] ||(money g_itemcost[i]) || g_PlayerNumItems[id] >= Max_PlayerItems) {
         
len += format(menuBody[len], 511-len,"\r%d. %s (%d)\w^n", ++bg_itemname[i], g_itemcost[i])
      } else {
         
len += format(menuBody[len], 511-len,"%d. %s (%d)^n", ++bg_itemname[i], g_itemcost[i])
      }
     }

     if(
end != g_numberofitems)
   {
          
format(menuBody[len], 511-len"^n9. %L...^n0. %L"id"MORE"idpos "BACK" "EXIT")
          
keys |= MENU_KEY_9
     
}
     else
   {
      
format(menuBody[len], 511-len"^n0. %L"idpos "BACK" "EXIT")
   }
     
show_menu(idkeysmenuBody, -1"Item Shop")
}

public 
Action_ItemUpgrades(idkey)
{
   switch(
key
   {
          case 
8display_ItemUpgrades(id, ++g_menuPosition[id])
      case 
9display_ItemUpgrades(id, --g_menuPosition[id])
          default:
      {
         if(!
is_user_alive(id)) {
            return 
PLUGIN_HANDLED
         
}
         
         ++
key
         
new money
         
new plugin_id g_itemindex[g_menuPosition[id] * key]
         new 
item_id g_menuPosition[id] * key
         
new func get_func_id("Enable_Item"plugin_id)
         
#if(Item_Money)
            
money cs_get_user_money(id)
         
#else
            
money PlayerXp[id]
         
#endif
         
new cost g_itemcost[item_id]
         if(
g_PlayerNumItems[id] >= Max_PlayerItems
         {
            
client_print(idprint_chat"Only %d items"Max_PlayerItems)
            
client_cmd(id"spk %s"DeniedSound)
            
display_ItemUpgrades(idg_menuPosition[id])
            return 
PLUGIN_HANDLED
         
}
      
         if(
g_iPlayerItem[id][item_id])
         {
            
client_print(idprint_chat"You already have %s"g_itemname[item_id])
            
client_cmd(id"spk %s"DeniedSound)
            
display_ItemUpgrades(idg_menuPosition[id])
            return 
PLUGIN_HANDLED
         
}
         
         if(
money >= cost)
         {
            
callfunc_begin_i(funcplugin_id)
            
callfunc_push_int(id)
            
callfunc_end()

            
g_PlayerNumItems[id] += 1
            g_iPlayerItem
[id][item_id] = true
            
#if(Item_Money)
               
cs_set_user_money(idmoney cost1)
            
#else
               
PlayerXp[id] = money cost
            
#endif
            
client_cmd(id"spk %s"BoughtItemSound)
            
client_print(idprint_chat"Item Bought: %s"g_itemname[item_id])
            
client_print(idprint_chat"Item Description: %s"g_itemdesc[item_id])
         
            if(
g_PlayerNumItems[id] < Max_PlayerItems) {
               
display_ItemUpgrades(idg_menuPosition[id])
            }
         }
         else
         {
            
#if(Item_Money)
               
client_print(idprint_chat"You need $%d to buy %s"g_itemcost[item_id], g_itemname[item_id])
            
#else
               
client_print(idprint_chat"You need %d xp to buy %s"g_itemcost[item_id], g_itemname[item_id])
            
#endif
            
display_ItemUpgrades(idg_menuPosition[id])
            
client_cmd(id"spk %s"DeniedSound)
         }
      }
   }
   return 
PLUGIN_HANDLED
}

display_PassiveUpgrades(id)
{
   new 
szMenuBody[512]
   new 
len format(szMenuBody511"Passive Upgrades^n")
   
len += format(szMenuBody[len], 511-len"^n1. Health (%d/%d)",    g_HealthLevel[id],   MaxLevel_Health)
   
len += format(szMenuBody[len], 511-len"^n2. Armor (%d/%d)",    g_ArmorLevel[id],   MaxLevel_Armor)
   
len += format(szMenuBody[len], 511-len"^n3. Speed (%d/%d)",   g_SpeedLevel[id],    MaxLevel_Speed)
   
len += format(szMenuBody[len], 511-len"^n4. Gravity (%d/%d)",   g_GravityLevel[id],    MaxLevel_Gravity)
   
len += format(szMenuBody[len], 511-len"^n5. Stealth (%d/%d)",   g_StealthLevel[id],   MaxLevel_Stealth)
   
len += format(szMenuBody[len], 511-len"^n^n9. Reset")
   
len += format(szMenuBody[len], 511-len"^n0. Cancel")

   new 
keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<8|1<<9
   
show_menu(idkeysszMenuBody, -1"Passive Upgrades")
}

public 
Action_PassiveUpgrades(idkey
{
   switch(
key
   {
      case 
0
      {
         if(
g_HealthLevel[id] >= MaxLevel_Health) {
            return 
PLUGIN_HANDLED
         
} else if(!is_user_alive(id)) {
            return 
PLUGIN_HANDLED
         
} else {
            
Set_Upgrade(id0)
         }
      }
      case 
1
      {
         if(
g_ArmorLevel[id] >= MaxLevel_Armor) {
            return 
PLUGIN_HANDLED
         
} else if(!is_user_alive(id)) {
            return 
PLUGIN_HANDLED
         
} else {
            
Set_Upgrade(id1)
         }
      }
      case 
2
      {
         if(
g_SpeedLevel[id] >= MaxLevel_Speed) {
            return 
PLUGIN_HANDLED
         
} else if(!is_user_alive(id)) {
            return 
PLUGIN_HANDLED
         
} else {
            
Set_Upgrade(id2)
         }
      }
      case 
3
      {
         if(
g_GravityLevel[id] >= MaxLevel_Gravity) {
            return 
PLUGIN_HANDLED
         
} else if(!is_user_alive(id)) {
            return 
PLUGIN_HANDLED
         
} else {
            
Set_Upgrade(id3)
         }
      }
      case 
4
      {
         if(
g_StealthLevel[id] >= MaxLevel_Stealth) {
            return 
PLUGIN_HANDLED
         
} else if(!is_user_alive(id)) {
            return 
PLUGIN_HANDLED
         
} else {
            
Set_Upgrade(id4)
         }
      }
      case 
8
      {
         
g_PlayerReseted[id] = true
         client_print
(idprint_chat"Your points will be reseted next time you spawn")
      }
   }
   return 
PLUGIN_HANDLED
}
   
public 
Set_Upgrade(idvalue)
{
   if(
PlayerPoints[id] > 0)
   {
      switch(
value)
      {
         case 
0:
         {
            
g_HealthLevel[id] += 1
            add_health
(idHealth_PerLevel)
            
client_print(idprint_chat"+%d Health"g_HealthLevel[id] * Health_PerLevel)
         }
         case 
1:
         {
            
g_ArmorLevel[id]  += 1
            add_armor
(idArmor_PerLevel)
            
client_print(idprint_chat"+%d Armor"g_ArmorLevel[id] * Armor_PerLevel)
         }
         case 
2:
         {
            
g_SpeedLevel[id]  += 1
            
new Float:fSpeed 240.0 + (g_SpeedLevel[id] * Speed_PerLevel)
            
            if(
ftimeover) {
               
set_user_maxspeed(idfSpeed)
            }
            
client_print(idprint_chat"+%d Speed",  g_SpeedLevel[id] * Speed_PerLevel)
         }
         case 
3:
         {
            
g_GravityLevel[id]  += 1
            
new FloatfGravity g_GravityLevel[id] * Gravity_PerLevel
            set_gravity
(idfGravity)
            
client_print(idprint_chat"-%d Gravity"g_GravityLevel[id] * floatround((Gravity_PerLevel 100)))
         }
         case 
4:
         {
            
g_StealthLevel[id]  += 1
            set_stealth
(idStealth_PerLevel)
            
client_print(idprint_chat"+%d Stealth"g_StealthLevel[id] * Stealth_PerLevel)
         }
      }
      
      
PlayerPoints[id] -= 1
      client_cmd
(id"spk %s"UpgradedSound)
      
      if(
PlayerPoints[id] > 0) {
         
display_PassiveUpgrades(id)
      }
   } else { 
      
client_cmd(id"spk %s"DeniedSound)
   }
}

public 
register_umitem(item_indexitem_name[], item_desc[], item_cost)
{
   if(
g_numberofitems == MAX_ITEMS) {
      return -
2
   
}
   
   
g_numberofitems++
   
g_itemindex[g_numberofitems] = item_index
   format
(g_itemname[g_numberofitems], MAX_ITEM_NAME_SIZEitem_name)
   
format(g_itemdesc[g_numberofitems], MAX_ITEM_DESC_SIZEitem_desc)
   
g_itemcost[g_numberofitems] = item_cost
   
   
return g_numberofitems
}

add_experience(idvalue)
{
   if(
PlayerLevel[id] <= Max_Level-1) {
      
PlayerXp[id] += value
   
}
}

add_armor(idvalue
{
   new 
CsArmorType:ArmorType 
         
new iArmor cs_get_user_armor(idArmorType)
   
cs_set_user_armor(idiArmor valueArmorType)
}

add_health(idvalue
{
   new 
iHealth get_user_health(id)
   
set_user_health(idiHealth value)
}

set_stealth(idvalue)
{
   new 
iMax_Stealth 20 + (MaxLevel_Stealth Stealth_PerLevel)
   
set_user_rendering(idkRenderFxGlowShell000kRenderTransAlphaiMax_Stealth  value)
}

set_gravity(idFloat:value) {
   
set_user_gravity(id1.00 value)
}

SaveData(id)

   new 
authid[32]
   
get_user_authid(idauthid31)
   new 
vaultkey[64], vaultdata[64]
   
   
format(vaultkey63"Account-%s-Level"authid)
   
format(vaultdata63"%d"PlayerLevel[id])
   
set_vaultdata(vaultkeyvaultdata)
   
   
format(vaultkey63"Account-%s-Xp"authid)
   
format(vaultdata63"%d"PlayerXp[id])
   
set_vaultdata(vaultkeyvaultdata)

   
format(vaultkey63"Account-%s-Points"authid)
   
format(vaultdata63"%d"PlayerLevel[id])
   
set_vaultdata(vaultkeyvaultdata)
}

LoadData(id

   new 
authid[32
   
get_user_authid(id,authid,31)
   new 
vaultkey[64], vaultdata[64]

   
format(vaultkey63"Account-%s-Level"authid
       
get_vaultdata(vaultkeyvaultdata63)
       
PlayerLevel[id] = str_to_num(vaultdata)
   
   
format(vaultkey63"Account-%s-Xp"authid)
       
get_vaultdata(vaultkeyvaultdata63)
       
PlayerXp[id] = str_to_num(vaultdata)

       
format(vaultkey63"Account-%s-Points"authid)
       
get_vaultdata(vaultkeyvaultdata63)
       
PlayerPoints[id] = str_to_num(vaultdata)
}

public 
Pickup_Items(ptrptd)
{
   if(
is_user_alive(ptd) && is_valid_ent(ptr)) 
   { 
      new 
item_id entity_get_int(ptrEV_INT_iuser4)
      new 
plugin_id g_itemindex[item_id]
      new 
func get_func_id("Enable_Item"plugin_id)
      if(!
g_iPlayerItem[ptd][item_id])
      {
         if(
g_PlayerNumItems[ptd] < Max_PlayerItems)
         {
            
callfunc_begin_i(funcplugin_id)
            
callfunc_push_int(ptd)
            
callfunc_end()
                  
            
g_PlayerNumItems[ptd] += 1
            g_iPlayerItem
[ptd][item_id] = true
            client_cmd
(ptd"spk %s"PickUpItemSound)
            
client_print(ptdprint_chat"Item Picked: %s"g_itemname[item_id])
               
            
remove_entity(ptr)
         }
      }
   }
}

Drop_Items(id)
{
   for(new 
item_id 1item_id <= MAX_ITEMS item_id++) 
   {
      if(
g_iPlayerItem[id][item_id])
      {
         new 
Float:fVelocity[3], Float:fOrigin[3], Float:fGlowColors[3] = {100.0100.0100.0}
         
entity_get_vector(idEV_VEC_originfOrigin)
         
fOrigin[2] += 75
   
         VelocityByAim
(id130fVelocity)
         
         new 
item_ent create_entity("info_target")
         if(
is_valid_ent(item_ent))
         {
            
entity_set_string(item_entEV_SZ_classname"UmItem")
            
            
entity_set_int(item_entEV_INT_solidSOLID_TRIGGER)
            
entity_set_int(item_entEV_ENT_owner0)
            
entity_set_int(item_entEV_INT_movetype6)
            
entity_set_int(item_entEV_INT_iuser4item_id)
            
entity_set_int(item_entEV_INT_renderfxkRenderFxGlowShell)

            
entity_set_vector(item_entEV_VEC_originfOrigin)
            
entity_set_vector(item_entEV_VEC_velocityfVelocity)
            
entity_set_vector(item_entEV_VEC_rendercolorfGlowColors)
            
            
entity_set_model(item_entItemModel)
            
entity_set_size(item_entFloat:{-2.5, -2.5, -1.5}, Float:{2.52.51.5})
            
            new 
plugin_id g_itemindex[item_id]
            new 
func get_func_id("Disable_Item"plugin_id)

            
callfunc_begin_i(funcplugin_id)
            
callfunc_push_int(id)
            
callfunc_end()
            
            
g_iPlayerItem[id][item_id] = false
            g_PlayerNumItems
[id] = 0
         
}
      }
   }
   return 
PLUGIN_CONTINUE
}

Save_Origin(CurMap[], Origin[3])
{
   new 
MapFile[64], Text[64]
   
format(MapFile63"%s/%s.cfg"g_ItemOriginDirCurMap)
   if(!
file_exists(MapFile)) 
   {
      new 
Comments[64]
      
format(Comments63"; Map item origins for %s"CurMap)
      
write_file(MapFileComments, -1)
   }
   
   
format(Text64"%i %i %i"Origin[0], Origin[1], Origin[2])
   
write_file(MapFileText, -1)
}

Load_Origins(CurMap[])
{
   new 
MapFile[64]
   
format(MapFile63"%s/%s.cfg"g_ItemOriginDirCurMap)
   if(!
file_exists(MapFile)) {
      return 
PLUGIN_CONTINUE
   
}

   
g_MapItemNum 0
   
for(new 1<= MAX_MAPITEMS; ++i
   {
      
g_MapItemOrgins[i][0] = 0
      g_MapItemOrgins
[i][1] = 0
      g_MapItemOrgins
[i][2] = 0
   
}
   
   new 
Text[64], Line 0Len 0
   
while(read_file(MapFileLine++, Text63Len))
   {
      if((
Text[0]==';') || !Len) {
          continue
      }
      
      if(
g_MapItemNum >= MAX_MAPITEMS
      {
         
log_amx("Max map items reached, please increase MAX_MAPITEMS")
         break
      }
      
      new 
iOrigin[3][16]
      
parse(TextiOrigin[0], 15iOrigin[1], 15iOrigin[2], 15)
      
      
g_MapItemNum++
      
g_MapItemOrgins[g_MapItemNum][0] = str_to_num(iOrigin[0])
      
g_MapItemOrgins[g_MapItemNum][1] = str_to_num(iOrigin[1])
      
g_MapItemOrgins[g_MapItemNum][2] = str_to_num(iOrigin[2])
   }
   return 
PLUGIN_CONTINUE
}

public 
Spawn_Items()
{
   for(new 
1<= MAX_MAPITEMS; ++i)
   {
      if((
g_MapItemOrgins[i][0] == 0
      && (
g_MapItemOrgins[i][1] == 0
      && 
g_MapItemOrgins[i][2] == 0) { 
            continue
      }
      
Create_Items(g_MapItemOrgins[i])
   }
}

RemoveMapItems()
{
   new 
MapFile[64], CurMap[32]
   
get_mapname(CurMap31)
   
format(MapFile63"%s/%s.cfg"g_ItemOriginDirCurMap)
   if(
file_exists(MapFile)) {
      
delete_file(MapFile)
   }

   
g_MapItemNum 0
   
for(new 1<= MAX_MAPITEMS; ++i
   {
      
g_MapItemOrgins[i][0] = 0
      g_MapItemOrgins
[i][1] = 0
      g_MapItemOrgins
[i][2] = 0
   
}
}

Create_Items(Origin[3])
{
   new 
Float:flOrigin[3]
   
IVecFVec(OriginflOrigin)
   
   new 
Float:fGlowColors[3] = {0.0100.00.0}
   new 
item_ent create_entity("info_target")
   new 
item_id random_num(1g_numberofitems)
   if(
is_valid_ent(item_ent))
   {
      
entity_set_string(item_entEV_SZ_classname"UmItem")
            
      
entity_set_int(item_entEV_INT_solidSOLID_TRIGGER)
      
entity_set_int(item_entEV_ENT_owner0)
      
entity_set_int(item_entEV_INT_movetype6)
      
entity_set_int(item_entEV_INT_iuser4item_id)
      
entity_set_int(item_entEV_INT_renderfxkRenderFxGlowShell)

      
entity_set_vector(item_entEV_VEC_originflOrigin)
      
entity_set_vector(item_entEV_VEC_rendercolorfGlowColors)
      
      
drop_to_floor(item_ent)
      
entity_set_model(item_entItemModel)
      
entity_set_size(item_entFloat:{-2.5, -2.5, -1.5}, Float:{2.52.51.5})

   }
   return 
PLUGIN_CONTINUE
}

public 
plugin_precache() 
{
   
precache_model(ItemModel)
   
precache_sound(DeniedSound)
   
precache_sound(LevelUpSound)
   
precache_sound(UpgradedSound)
   
precache_sound(PickUpItemSound)
   
precache_sound(BoughtItemSound)

_________________
http://www.ebateam.eu/


Hozzászólás jelentése
Vissza a tetejére
   
HozzászólásElküldve:2012.04.11. 21:42 
Offline
Lelkes

Csatlakozott:2011.12.17. 21:56
Hozzászólások:15
köszönöm szépen a segítséget!!:D


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése: Rendezés 
Új téma nyitása Hozzászólás a témához  [16 hozzászólás ]  OldalElőző12


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 8 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole