Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Wklejka mw5no6sslw0c dodana przez speedkill, 04.12.2012 20:13
Typ:



1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
/*
Manager of Buttons
for DeathRun
 
Licence: GPL
Description:
Allow admin to define how many times every button could be used by Menu.
Add to game (cvar controlled) FreeRun mode - during round with FR traps can`t 
be used by defined teams (default Te).
 
*/
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta>
#include <colorchat>
 
#define PLUGIN "Use button once"
#define VERSION "1.32"
#define AUTHOR "R3X"
 
#define MAX_BUTTONS 100
#define KeysButtonsMenu (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9) // Keys: 137890
#define KeysOptionsMenu (1<<0)|(1<<1)|(1<<8) //129
#define KeysDelayMenu (1<<0)|(1<<1)|(1<<2)|(1<<8) //1239
 
#define ANNOUNCE_TASK 10000
 
#define m_flWait 44
 
//Main
 
new gEnt[MAX_BUTTONS];
new gUsed[MAX_BUTTONS];
new giPointer=0;
new gOnStart[MAX_BUTTONS];
new Float:gDefaultDelay[MAX_BUTTONS];
new Float:gDelay[MAX_BUTTONS];
 
new gInMenu[33];
 
new gszFile[128];
 
new giSprite;
 
new gcvarDefault, gcvarTeam, gcvarFreeRun;
new gcvarLimit, gcvarLimitMode, gcvarPrivilege;
new gcvarMessage, gcvarRestore;
new gcvarDelayOverwrite;
new gcvarAllowCtVote;
 
//VOTE
 
#define TASK_SHOWMENU 432
#define TASK_RES 123
 
#define MAX_ROUNDS 999
 
#define KeysFFVote (1<<0)|(1<<1) // Keys: 12
 
new gcvarFRVoteTime;
 
new giVoteStart, giVoteTime;
 
new bool:gbFreeRun=false;
new bool:gbVote=false;
 
#define VOTE_ON 0
#define VOTE_OFF 1
 
new giVotes[33][2];
 
new giRounds=MAX_ROUNDS, giTime=0;
 
public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR);
 
	register_dictionary("common.txt");
	register_dictionary("adminvote.txt");
	register_dictionary("use_button_once.txt");
 
	register_menucmd(register_menuid("FRVote"), KeysFFVote, "PressedFRVote");
	register_menucmd(register_menuid("ButtonsMenu"), KeysButtonsMenu, "PressedButtonsMenu");
	register_menucmd(register_menuid("OptionsMenu"), KeysOptionsMenu, "PressedOptionsMenu");
	register_menucmd(register_menuid("DelayMenu"), KeysDelayMenu, "PressedDelayMenu");
 
	register_clcmd("amx_buttons","cmd_amx_buttons",ADMIN_CFG,": Buttons Menu");
 
	//Default count of uses
	gcvarDefault=register_cvar("amx_buttons_default","1");
	//Who plugin analyze
	//0 - anyone(plugin disabled?)
	//1 - Te
	//2 - Ct
	//3 - Te+Ct
	gcvarTeam=register_cvar("amx_buttons_team","1");
	//Enabled FreeRun mode?
	gcvarFreeRun=register_cvar("amx_buttons_freerun","1");
	//Vote time
	gcvarFRVoteTime=register_cvar("amx_freerun_votetime","10");
 
	//Type of limit
	//0 - enabled after 'amx_freerun_limit' rounds
	//1 - enabled after 'amx_freerun_limit' minutes
	gcvarLimitMode=register_cvar("amx_freerun_limit_mode","0");
	//Size of Limit
	gcvarLimit=register_cvar("amx_freerun_limit","5");
 
	//Interval of message
	gcvarMessage=register_cvar("amx_freerun_info","120.0",0,120.0);
 
	//Terrorist`s privilege
	//if he use /free FreeRun will start without vote, can he?
	gcvarPrivilege=register_cvar("amx_freerun_tt_privilege","1");
 
	//restore buttons on new round
	gcvarRestore=register_cvar("amx_restore_buttons","1");
 
	//overwrite each button delay
	gcvarDelayOverwrite=register_cvar("amx_override_delay","-1.0",0,-1.0);
 
	gcvarAllowCtVote=register_cvar("amx_allow_ct_vote","1");
 
	register_clcmd("say /free","cmdVoteFreeRun");
	register_clcmd("say_team /free","cmdVoteFreeRun");
	register_clcmd("say free","cmdVoteFreeRun");
	register_clcmd("say_team free","cmdVoteFreeRun");
 
	register_clcmd("say /freerun","cmdVoteFreeRun");
	register_clcmd("say_team /freerun","cmdVoteFreeRun");
	register_clcmd("say freerun","cmdVoteFreeRun");
	register_clcmd("say_team freerun","cmdVoteFreeRun");
 
	register_clcmd("say /fr","cmdVoteFreeRun");
	register_clcmd("say_team /fr","cmdVoteFreeRun");
	register_clcmd("say fr","cmdVoteFreeRun");
	register_clcmd("say_team fr","cmdVoteFreeRun");
 
	if( engfunc(EngFunc_FindEntityByString,-1 ,"classname", "func_button"))
		RegisterHam(Ham_Use, "func_button", "fwButtonUsed");
 
	if(engfunc(EngFunc_FindEntityByString,-1 ,"classname","func_rot_button"))
		RegisterHam(Ham_Use, "func_rot_button", "fwButtonUsed");
 
	if(engfunc(EngFunc_FindEntityByString,-1 ,"classname", "button_target"))
		RegisterHam(Ham_Use, "button_target", "fwButtonUsed");
 
	register_logevent( "ResetButtons", 2, "0=World triggered", "1=Round_Start");
 
	fillButtons("func_button");
	fillButtons("func_rot_button");
	fillButtons("button_target");
 
}
public plugin_cfg(){
	setButtons();
 
	new iLen=0, iMax=charsmax(gszFile);
	iLen=get_configsdir(gszFile, iMax );
	iLen+=copy(gszFile[iLen], iMax-iLen, "/dr_buttons/");
 
	if(!dir_exists(gszFile)){
		set_fail_state("Not found dir: configs/dr_buttons");
		return;
	}
	new szMap[32];
	get_mapname(szMap, 31);
	formatex(gszFile[iLen], charsmax(gszFile)-iLen, "%s.ini", szMap);
	if(!file_exists(gszFile)){
		return;
	}
	new szLine[51];
	new szButton[4], szTimes[3], szDelay[5];
	new Float:fDelay;
	for(new i=0;read_file(gszFile, i, szLine, 50, iLen);i++){
		if(iLen==0) continue;
		trim(szLine);
		if(szLine[0]==';') continue;
 
		szButton[0]='^0';
		szTimes[0]='^0';
		szDelay[0]='^0';
 
		parse(szLine, szButton, 3, szTimes, 2, szDelay, 4);
		fDelay=szDelay[0]?str_to_float(szDelay):get_pcvar_float(gcvarDelayOverwrite);
		set_start_value(str_to_num(szButton), str_to_num(szTimes), fDelay);
		log_amx("%d %d %.1f",str_to_num(szButton), str_to_num(szTimes), fDelay);
	}
	new Float:fInterval=get_pcvar_float(gcvarMessage);
	if(fInterval > 0.0)
		set_task(120.0, "announceVote",ANNOUNCE_TASK,_,_,"b");
}
public plugin_precache(){
	giSprite=precache_model("sprites/flare1.spr");
 
}
public client_putinserver(id){
	if(!is_user_bot(id))
		eventInGame(id);
}
public client_connect(id){
	giVotes[id][VOTE_ON]=0;
	giVotes[id][VOTE_OFF]=0;
}
public announceVote(){
	if(get_pcvar_num(gcvarFreeRun))
		ColorChat(0,GREEN, "[FreeRun]^x01 %L",LANG_SERVER, "ANNOUNCE");
}
setButtons(){
	new iDef=get_pcvar_num(gcvarDefault);
	for(new i=0;i<giPointer;i++){
		gUsed[i]=iDef;
		gOnStart[i]=iDef;
		gDelay[i]=get_pcvar_float(gcvarDelayOverwrite);
		if(gDelay[i] == -1)
			gDelay[i]=get_pdata_float(gEnt[i],m_flWait);
		gDefaultDelay[i]=gDelay[i];
	}
}
fillButtons(const szClass[]){
	new ent = -1;
	while((ent = engfunc(EngFunc_FindEntityByString,ent ,"classname", szClass)) != 0){
		gEnt[giPointer++]=ent;
		set_pev(ent, pev_iuser4, giPointer);
	}
}
set_start_value(ent, times, Float:delay){
	new index=get_ent_index(ent);
	if(index!=-1){
		gOnStart[index]=times;
		if(delay>=0.0)
			gDelay[index]=delay;
	}
}
get_ent_index(ent){
	/*
	for(new i=0;i<giPointer;i++)
		if(gEnt[i]==ent) return i;
	return -1;
	*/
	return pev(ent, pev_iuser4)-1;
}
restoreButton(ent){
	if(pev(ent, pev_frame) > 0.0){
		new Float:Life;
		pev(ent, pev_nextthink, Life);
		set_pev(ent, pev_ltime, Life-0.01);
	}
}
public ResetButtons(){
	gbFreeRun=false;
	gbVote=false;
	new bool:bRestore=get_pcvar_num(gcvarRestore)!=0;
	for(new i=0;i<MAX_BUTTONS;i++){
		gUsed[i]=gOnStart[i];
		if(bRestore){
			restoreButton(gEnt[i]);
		}
	}
	giRounds++;
}
public fwButtonUsed(this, idcaller, idactivator, use_type, Float:value){
	if(idcaller!=idactivator) return HAM_IGNORED;
 
	if(pev(this, pev_frame) > 0.0)
		 return HAM_IGNORED;
	new index=get_ent_index(this);
	if(index==-1) 
		return HAM_IGNORED;
	if(get_user_team(idcaller)&get_pcvar_num(gcvarTeam)){
 
		if(gbFreeRun){
			ColorChat(idcaller,GREEN, "[FreeRun]^x01 %L",idcaller, "BUTTON_FREERUN");
			return HAM_SUPERCEDE;
		}
		else if(gUsed[index]<=0 && gOnStart[index]!=-1){
			ColorChat(idcaller,GREEN, "[Info]^x01 %L",idcaller,"BUTTON_NOMORE");
			return HAM_SUPERCEDE;
		}
		else{
			if(gUsed[index]>0)
				if(--gUsed[index]){
					ColorChat(idcaller, GREEN, "[Info]^x01 %L", idcaller, "BUTTON_LEFT", gUsed[index]);
				}else
					ColorChat(idcaller, GREEN, "[Info]^x01 %L", idcaller, "BUTTON_ENDOFLIMIT");
		}
	}
 
	set_task(0.1,"setDelay",this);
 
	return HAM_IGNORED;
}
public setDelay(this){
	new index=get_ent_index(this);
	if(gDelay[index] < 0.0)
		return;
 
	new Float:fLTime;
	pev(this, pev_ltime, fLTime);
	set_pev(this, pev_nextthink, fLTime+gDelay[index]+0.01);
}
 
//MENU--------------
public cmd_amx_buttons(id, level, cid){
	if(!cmd_access(id, level, cid, 1))
		return PLUGIN_HANDLED;
	if(giPointer==0)
		client_print(id, print_chat, "%L", id,"NO_BUTTONS");
	else
		ShowButtonsMenu(id);
	return PLUGIN_HANDLED;
}
ShowButtonsMenu(id, trace=1){
	if(!is_user_alive(id)){
		client_print(id, print_center, "%L",id, "MUST_B_ALIVE");
		return;
	}
	new iNow=gInMenu[id];
	new iKeys=(1<<0)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<9);
	new szMenu[196], iLen, iMax=(sizeof szMenu) - 1;
	new szNoLimit[32];
	formatex(szNoLimit,31,"(%L)",id,"NOLIMIT");
	iLen=copy(szMenu, iMax,"yButtons Menu^n");
	iLen+=formatex(szMenu[iLen], iMax-iLen,"wEnt#%d^n^n",gEnt[iNow]);
	iLen+=formatex(szMenu[iLen], iMax-iLen,"%L: %d %s^ny1w. %L ",id, "USAGE",gOnStart[iNow],(gOnStart[iNow]==-1)?szNoLimit:"", id, "MORE");
 
	if(gOnStart[iNow]>=0){
		iLen+=formatex(szMenu[iLen], iMax-iLen,"y2w. %L",id, "WORD_LESS");
		iKeys|=(1<<1);
	}else
	iLen+=formatex(szMenu[iLen], iMax-iLen,"d2. %Lw",id,"WORD_LESS");
	iLen+=formatex(szMenu[iLen], iMax-iLen,"^n^n3. %L^n^n4. %L^n^n",id, "DELAY_EDITOR",id,"OPTIONS");
 
	iLen+=formatex(szMenu[iLen], iMax-iLen,"5. %sNo Clipw^n",isNoClip(id)?"r":"");
	iLen+=formatex(szMenu[iLen], iMax-iLen,"6. %sGodModew^n",isGodMode(id)?"r":"");
 
	iLen+=formatex(szMenu[iLen], iMax-iLen,"^n7. r%L^nw",id, "WORD_SAVE");
 
	if(iNow>0){
		iLen+=formatex(szMenu[iLen], iMax-iLen,"^n8. %L",id, "BACK");
		iKeys|=(1<<7);
	}
	if(iNow<giPointer-1){
		iLen+=formatex(szMenu[iLen], iMax-iLen,"^n9. %L",id, "WORD_NEXT");
		iKeys|=(1<<8);
	}
	iLen+=formatex(szMenu[iLen], iMax-iLen,"^n0. %L", id, "EXIT");
	show_menu(id, iKeys, szMenu, -1, "ButtonsMenu");
	if(trace){
		new Float:fOrigin[3], Float:fOrigin2[3];
		fm_get_brush_entity_origin(gEnt[gInMenu[id]], fOrigin);
		pev(id, pev_origin, fOrigin2);
		Create_TE_BEAMPOINTS(fOrigin, fOrigin2, giSprite, 0, 10, 20, 5, 1, 255, 0, 0, 100, 50);
	}
}
bool:isNoClip(id)
return pev(id, pev_movetype)==MOVETYPE_NOCLIP;
 
bool:isGodMode(id)
return pev(id, pev_takedamage)==0.0;
 
public PressedButtonsMenu(id, key) {
	if(!is_user_alive(id)){
		client_print(id, print_center, "%L",id,"MUST_B_ALIVE");
		return;
	}