Originally Posted by M249-M4A1
(Post 567729)
Compiles but I cannot guarantee it will work because of the errors already in the plugin.
PHP Code:
// Max items players can carry
#define Max_PlayerItems 3
// Death Lose?
#define Item_Death 1 // Player lose item on death
// More defines
#define Item_Money 1
#define DeniedSound 1
// Item plugins configs
#define MAX_ITEMS 100
#define MAX_MAPITEMS 100
#define MAX_ITEM_NAME_SIZE 64
#define MAX_ITEM_DESC_SIZE 128
// ETC
new BoughtItemSound[] = { "items/ammopickup1.wav" }
new PickUpItemSound[] = { "items/ammopickup2.wav" }
new DropItemSound[] = { "events/enemy_died.wav" }
new ItemModel[] = { "models/w_gaussammo.mdl" }
// Includes
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <engine>
#include <vault>
#include <fun>
// New
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 PlayerLevel[33]
// Plugin Description
new PLUGIN_NAME[] = "NoobShop"
new PLUGIN_VERSION[] = "1.0"
new PLUGIN_AUTHOR[] = "TheNoobBox"
public plugin_init()
{
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
if(get_cvar_num("um_enable"))
{
register_clcmd("um_mapitems", "Open_MapItemConfig", ADMIN_IMMUNITY, "- Open's Map item configs")
register_clcmd("say /shop", "open_Shop")
register_concmd("shop", "open_Shop")
register_clcmd("say /dropitems","cmd_DropItems")
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("MI Config Menu"), 1023, "Action_MapItemConfig")
register_menucmd(register_menuid("Noob's Shop"), 1023, "Action_Shop")
}
}
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_PlayerNumItems[id] = 0
for(new i = 1; i <= MAX_ITEMS; ++i) {
g_iPlayerItem[id][MAX_ITEMS] = false
}
}
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^"", sName)
len += format(szMenuBody[len], 511-len, "Level: %d^"", PlayerLevel[target])
len += format(szMenuBody[len], 511-len, "Items: %d^"", g_PlayerNumItems[target])
for(new i = 1; i <= g_numberofitems; ++i) if(g_iPlayerItem[target][i]) {
len += format(szMenuBody[len], 511-len, "%s^"", 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 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
}
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 display_myitems(id)
{
new szMenuBody[512]
new len = format(szMenuBody, 511, "Items: %d^"", g_PlayerNumItems[id])
for(new i = 1; i <= g_numberofitems; ++i) if(g_iPlayerItem[id][i]) {
len += format(szMenuBody[len], 511-len, "%s^"", 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_Shop(id)
{
display_Shop(id, g_menuPosition[id] = 0)
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^"")
len += format(MenuBody[len], 511-len, "^"1. Create Spawn Points")
len += format(MenuBody[len], 511-len, "^"2 Remove All Spawn Points")
len += format(MenuBody[len], 511-len, "^"^"0. 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_Shop(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^"^"")
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)
#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^"", ++b, g_itemname[i], g_itemcost[i])
} else {
len += format(menuBody[len], 511-len,"%d. %s (%d)^"", ++b, g_itemname[i], g_itemcost[i])
}
}
if(end != g_numberofitems)
{
format(menuBody[len], 511-len, "^"9. %L...^"0. %L", id, "MORE", id, pos ? "BACK" : "EXIT")
keys |= MENU_KEY_9
}
else
{
format(menuBody[len], 511-len, "^"0. %L", id, pos ? "BACK" : "EXIT")
}
show_menu(id, keys, menuBody, -1, "Item Shop")
}
public Action_Shop(id, key)
{
switch(key)
{
case 8: display_Shop(id, ++g_menuPosition[id])
case 9: display_Shop(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)
#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_Shop(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_Shop(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)
#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_Shop(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_Shop(id, g_menuPosition[id])
client_cmd(id, "spk %s", DeniedSound)
}
}
}
return PLUGIN_HANDLED
}
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
}
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((equal(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(PickUpItemSound)
precache_sound(BoughtItemSound)
}
|