[Cerere Plugin] Shop Builder

Categoria cu cereri de pluginuri si nu numai.

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Forum rules
Accesează link-ul pentru a putea vedea regulile forumului

Daca doriti sa vi se modifice un plugin, va rugam postati aici .
User avatar
goeslegendary
Membru, skill +1
Membru, skill +1
Posts: 107
Joined: 14 Sep 2018, 23:35
Detinator Steam: Da
CS Status: Sniper & Rifler
Fond eXtream: 0
Location: Timisoara
Has thanked: 4 times

24 Mar 2020, 01:35

scuze pentru DP

l-am fixat eu, ai pus sa ia pretul de la meniul de zm, l-am pus eu la ct
merge, Mersi mult!!! +rep
Last edited by levin on 24 Mar 2020, 13:36, edited 1 time in total.
Reason: plg externe gen fn le configurezi
maybe there are no goodbyes..
RoyalServer
User avatar
goeslegendary
Membru, skill +1
Membru, skill +1
Posts: 107
Joined: 14 Sep 2018, 23:35
Detinator Steam: Da
CS Status: Sniper & Rifler
Fond eXtream: 0
Location: Timisoara
Has thanked: 4 times

27 Mar 2020, 20:17

LEVIN, e o problema, cand cumpar no recoil, nu da damage..

Code: Select all

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <xs>
#include <fun>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>
#include <basebuilder>

new const SHOP_TITLE[]="Base Builder Shop^n"
new const ITEMS_LEFT[]="Items Left\w:"
const MAXIM_INCERCARI = 2
const HP_SHOP_HM = 100
const HP_SHOP_ZM = 1000
const HP_SHOP_ZM2 = 2000
const SPEED_SHOP = 320
const UC_LIMIT = 20
new incercari[33]

new Ham:Ham_Player_ResetMaxSpeed = Ham_Item_PreFrame;

#define nume_plg_frost "frostnades.amxx"
#define public_frost "buy_frostnade"

new meniu,callback

enum datas_ {
	str[35],
	cant,
	cost
};

new const data_meniuHM[][datas_] = {  
	// nume				// cantitate	// cost
	{ "#hh HP",			HP_SHOP_HM,	8000},
	{ "Frost Nade",			-1,		2000},
	{ "No Recoil",			-1,		7000},
	{ "Unlimited Clip(#u sec)",	-1,		5500},
	{ "#s Maximum Speed",		SPEED_SHOP,	3500}
};

new const data_meniuZM[][datas_] = {  
	// nume				// cantitate	// cost
	{ "#hz HP",			HP_SHOP_ZM,	8000},
	{ "2000 HP",			HP_SHOP_ZM2,	10000},
	{ "#s Maximum Speed",		SPEED_SHOP,	3500}
};

new bool:viteza[33]

// weapons offsets
#define OFFSET_CLIPAMMO        51
#define OFFSET_LINUX_WEAPONS    4
#define fm_cs_set_weapon_ammo(%1,%2)    set_pdata_int(%1, OFFSET_CLIPAMMO, %2, OFFSET_LINUX_WEAPONS)
// players offsets
#define m_pActiveItem 373
const NOCLIP_WPN_BS    = ((1<<CSW_HEGRENADE)|(1<<CSW_SMOKEGRENADE)|(1<<CSW_FLASHBANG)|(1<<CSW_KNIFE)|(1<<CSW_C4))
new const g_MaxClipAmmo[] = {
	0,
	13, //CSW_P228
	0,
	10, //CSW_SCOUT
	0,  //CSW_HEGRENADE
	7,  //CSW_XM1014
	0,  //CSW_C4
	30,//CSW_MAC10
	30, //CSW_AUG
	0,  //CSW_SMOKEGRENADE
	15,//CSW_ELITE
	20,//CSW_FIVESEVEN
	25,//CSW_UMP45
	30, //CSW_SG550
	35, //CSW_GALIL
	25, //CSW_FAMAS
	12,//CSW_USP
	20,//CSW_GLOCK18
	10, //CSW_AWP
	30,//CSW_MP5NAVY
	100,//CSW_M249
	8,  //CSW_M3
	30, //CSW_M4A1
	30,//CSW_TMP
	20, //CSW_G3SG1
	0,  //CSW_FLASHBANG
	7,  //CSW_DEAGLE
	30, //CSW_SG552
	30, //CSW_AK47
	0,  //CSW_KNIFE
	50//CSW_P90
}
new bool:uc[33]

#define MAX_CLIENTS 32
new g_normal_trace[MAX_CLIENTS + 1]
new bool:g_fix_punchangle[MAX_CLIENTS + 1]
new g_fwid
new g_max_clients
new const g_guns_events[][] = {
	"events/awp.sc",
	"events/g3sg1.sc",
	"events/ak47.sc",
	"events/scout.sc",
	"events/m249.sc",
	"events/m4a1.sc",
	"events/sg552.sc",
	"events/aug.sc",
	"events/sg550.sc",
	"events/m3.sc",
	"events/xm1014.sc",
	"events/usp.sc",
	"events/mac10.sc",
	"events/ump45.sc",
	"events/fiveseven.sc",
	"events/p90.sc",
	"events/deagle.sc",
	"events/p228.sc",
	"events/glock18.sc",
	"events/mp5n.sc",
	"events/tmp.sc",
	"events/elite_left.sc",
	"events/elite_right.sc",
	"events/galil.sc",
	"events/famas.sc"
}
new g_guns_eventids_bitsum
new bool:hnr[33]

public plugin_precache()	g_fwid = register_forward(FM_PrecacheEvent, "fwPrecacheEvent", 1)

public fwPrecacheEvent(type, const name[]) {
	for (new i = 0; i < sizeof g_guns_events; ++i) {
		if (equal(g_guns_events[i], name)) {
			g_guns_eventids_bitsum |= (1<<get_orig_retval())
			return FMRES_HANDLED
		}
	}
	return FMRES_IGNORED
}

public plugin_init() {
	RegisterHam(Ham_Player_ResetMaxSpeed, "player", "fw_ResetMaxSpeedPost", true);
	
	register_event("HLTV", "event_newround", "a", "1=0", "2=0");
	register_event("CurWeapon" , "Event_CurWeapon" , "be" , "1=1" );
	
	register_clcmd("say /shop","BBS")
	register_clcmd("say_team /shop","BBS")
	
	unregister_forward(FM_PrecacheEvent, g_fwid, 1)
	register_forward(FM_PlaybackEvent, "fwPlaybackEvent")
	register_forward(FM_PlayerPostThink, "fwPlayerPostThink", 1)
	register_forward(FM_TraceLine, "fwTraceLine")
	g_max_clients = global_get(glb_maxClients)
	
	register_plugin("[BB] Shop Manager", "1.0", "nutu.")
}

public fw_ResetMaxSpeedPost(id)
{
	if(is_user_alive(id)&&viteza[id])
	{
		engfunc(EngFunc_SetClientMaxspeed, id, float(SPEED_SHOP));
		set_pev(id, pev_maxspeed, float(SPEED_SHOP));
	}
	return HAM_IGNORED;
}

public fwPlaybackEvent(flags, invoker, eventid) {
	if (!(g_guns_eventids_bitsum & (1<<eventid)) || !(1 <= invoker <= g_max_clients)||!hnr[invoker])	return FMRES_IGNORED
	g_fix_punchangle[invoker] = true
	return FMRES_HANDLED
}
public fwPlayerPostThink(id) {
	if (g_fix_punchangle[id]) {
		g_fix_punchangle[id] = false
		set_pev(id, pev_punchangle, Float:{0.0, 0.0, 0.0})
		return FMRES_HANDLED
	}
	return FMRES_IGNORED
}
public fwTraceLine(const Float:start[3], const Float:dest[3], ignore_monsters, id, pentru) {
	if (!(1 <= id <= g_max_clients)||!hnr[id])	return FMRES_IGNORED
	
	if (!g_normal_trace[id]) {
		g_normal_trace[id] = pentru
		return FMRES_HANDLED
	}
	
	static dummy
	if (pentru == g_normal_trace[id] || ignore_monsters != DONT_IGNORE_MONSTERS || !is_user_alive(id) || get_user_weapon(id, dummy, dummy) == CSW_KNIFE)	return FMRES_IGNORED
	fix_recoil_trace(id, start, pentru)
	return FMRES_SUPERCEDE
}

public Event_CurWeapon( id )
{
	if(!is_user_alive(id)||!uc[id]||bb_is_user_zombie(id))	return
	new iWeapon = read_data(2)
	if( !( NOCLIP_WPN_BS & (1<<iWeapon) ) )	fm_cs_set_weapon_ammo( get_pdata_cbase(id, m_pActiveItem) , g_MaxClipAmmo[ iWeapon ] )
}

public client_putinserver(id)
{
	if(!is_user_connected(id)||is_user_bot(id)||is_user_hltv(id))	return
	viteza[id]=false
	incercari[id]=MAXIM_INCERCARI
	uc[id]=false
	hnr[id]=false
	g_normal_trace[id] = 0
}
public client_disconnect(id)
{
	viteza[id]=false
	incercari[id]=0
	uc[id]=false
	hnr[id]=false
	g_normal_trace[id] = 0
}

public event_newround()
{
	arrayset(incercari,MAXIM_INCERCARI,charsmax(incercari))
	arrayset(viteza,false,charsmax(viteza))
	arrayset(uc,false,charsmax(uc))
	arrayset(hnr,false,charsmax(hnr))
}

public BBS(id)
{
	if(!is_user_alive(id))	return
	
	switch(bb_is_user_zombie(id))
	{
		case true:	ZMS(id)
			case false:	HMS(id)
		}
}
public ZMS(id)
{
	if(!is_user_alive(id)||!bb_is_user_zombie(id))	return
	
	static text[128], tasta[2], str_to_rpl[5], i,title[120]
	formatex(title, charsmax(title), "%s%s\r %d",SHOP_TITLE,ITEMS_LEFT, incercari[id]);
	meniu = menu_create(title, "shop_handlerZ");
	callback = menu_makecallback("hook_shopZ");
	
	for(i = 0; i < sizeof data_meniuZM; i++)
	{
		num_to_str(HP_SHOP_ZM,str_to_rpl,charsmax(str_to_rpl))
		replace(data_meniuZM[i], charsmax(data_meniuZM[]), "#hz", str_to_rpl);
		num_to_str(HP_SHOP_ZM2,str_to_rpl,charsmax(str_to_rpl))
		replace(data_meniuZM[i], charsmax(data_meniuZM[]), "#kk#", str_to_rpl);
		num_to_str(SPEED_SHOP,str_to_rpl,charsmax(str_to_rpl))
		replace_all(data_meniuZM[i], charsmax(data_meniuZM[]), "#s", str_to_rpl);
		
		if(data_meniuZM[i][cant] != -1)	formatex(text, charsmax(text), "%s -\r [\y%d $\r]", data_meniuZM[i][str], data_meniuZM[i][cost]);
		
		tasta[0] = i;
		tasta[1] = 0;
		menu_additem(meniu, text, tasta, _, callback);
	}
	menu_setprop(meniu, MPROP_EXIT, MEXIT_ALL);
	menu_display(id, meniu);
}
public hook_shopZ(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	if(!is_user_alive(id))	return ITEM_DISABLED;
	if(!bb_is_user_zombie(id))	return ITEM_DISABLED;
	if(incercari[id]<=0)	return ITEM_DISABLED;
	if(cs_get_user_money(id) < data_meniuZM[item][cost])	return ITEM_DISABLED;
	
	return ITEM_ENABLED;
}
public shop_handlerZ(id, menu, item)
{
	if(item == MENU_EXIT||item<0)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	switch(item)
	{
		case 0:	set_user_health(id,get_user_health(id)+HP_SHOP_ZM)
			case 1:	set_user_health(id,get_user_health(id)+HP_SHOP_ZM2)
			case 2:
		{
			if(viteza[id])	return PLUGIN_HANDLED
			set_user_maxspeed(id,float(SPEED_SHOP))
			viteza[id]=true
		}
	}
	
	cs_set_user_money(id,cs_get_user_money(id)-data_meniuZM[item][cost],1)
	incercari[id]--
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public HMS(id)
{
	if(!is_user_alive(id)||bb_is_user_zombie(id))	return
	
	static text[128], tasta[2], i,title[120],str_to_rpl[5]
	formatex(title, charsmax(title), "%s%s\r %d",SHOP_TITLE,ITEMS_LEFT, incercari[id]);
	meniu = menu_create(title, "shop_handlerH");
	callback = menu_makecallback("hook_shopH");
	
	for(i = 0; i < sizeof data_meniuHM; i++)
	{
		num_to_str(HP_SHOP_HM,str_to_rpl,charsmax(str_to_rpl))
		replace_all(data_meniuHM[i][str], charsmax(data_meniuHM[]), "#hh", str_to_rpl)
		num_to_str(UC_LIMIT,str_to_rpl,charsmax(str_to_rpl))
		replace_all(data_meniuHM[i][str], charsmax(data_meniuHM[]), "#u", str_to_rpl);
		num_to_str(SPEED_SHOP,str_to_rpl,charsmax(str_to_rpl))
		replace_all(data_meniuHM[i][str], charsmax(data_meniuHM[]), "#s", str_to_rpl);
		
		if(data_meniuHM[i][cant] != -1)	formatex(text, charsmax(text), "%s -\r [\y%d $\r]", data_meniuHM[i][str], data_meniuHM[i][cost]);
		else	formatex(text, charsmax(text), "%s -\r [\y%d $\r]", data_meniuHM[i][str], data_meniuHM[i][cost]);
		
		tasta[0] = i;
		tasta[1] = 0;
		menu_additem(meniu, text, tasta, _, callback);
	}
	menu_setprop(meniu, MPROP_EXIT, MEXIT_ALL);
	menu_display(id, meniu);
}
public hook_shopH(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	if(!is_user_alive(id))	return ITEM_DISABLED;
	if(bb_is_user_zombie(id))	return ITEM_DISABLED;
	if(incercari[id]<=0)	return ITEM_DISABLED;
	if(cs_get_user_money(id) < data_meniuHM[item][cost])	return ITEM_DISABLED;
	
	return ITEM_ENABLED;
}
public shop_handlerH(id, menu, item)
{
	if(item == MENU_EXIT||item<0)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED;
	}
	
	switch(item)
	{
		case 0:	set_user_health(id,get_user_health(id)+HP_SHOP_HM)
			case 1:	evo_callfunc(id,public_frost,nume_plg_frost)
			case 2:
		{
			if(hnr[id])	return PLUGIN_HANDLED;
			hnr[id]=true
		}
		case 3:
		{
			if(uc[id])	return PLUGIN_HANDLED;
			uc[id]=true
			set_task(float(UC_LIMIT),"UCR",id)
		}
		case 4:
		{
			if(viteza[id])	return PLUGIN_HANDLED
			set_user_maxspeed(id,float(SPEED_SHOP))
			viteza[id]=true
		}
	}
	
	cs_set_user_money(id,cs_get_user_money(id)-data_meniuHM[item][cost],1)
	incercari[id]--
	menu_destroy(menu);
	return PLUGIN_HANDLED;
}

public UCR(id)
{
	uc[id]=false
}

stock evo_callfunc( id, function[], plugin[] )
{
	if( callfunc_begin( function, plugin ) == 1 )
	{
		callfunc_push_int( id );
		callfunc_end( );
	}
}

fix_recoil_trace(id, const Float:start[], pentru) {
	static Float:dest[3]
	pev(id, pev_v_angle, dest)
	engfunc(EngFunc_MakeVectors, dest)
	global_get(glb_v_forward, dest)
	xs_vec_mul_scalar(dest, 9999.0, dest)
	xs_vec_add(start, dest, dest)
	engfunc(EngFunc_TraceLine, start, dest, DONT_IGNORE_MONSTERS, id, pentru)
}
maybe there are no goodbyes..
User avatar
levin
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 3844
Joined: 24 Aug 2011, 12:24
Detinator Steam: Da
CS Status:
Detinator server CS: ☯∴
SteamID: riseofevo
Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy
Location: ҳ̸Ҳ̸ҳ
Discord: devilclass
Has thanked: 36 times
Been thanked: 594 times
Contact:

27 Mar 2020, 21:03

cere i ajutor lu nutu, sau dacă tu ești el înseamnă că știi să rezolvi sal
Pentru ajutor, faceți cerere bine detaliată, completând și respectând modelul corespunzător.
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
Post Reply

Return to “Cereri”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 33 guests