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 21104gpn40asc dodana przez Hiroshima, 24.02.2012 13:57
Typ:



test
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.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <cstrike>
#include <hamsandwich>
#include <sqlx>
#include <geoip>
#include <colorchat>
#include <dhudmessage>
 
#define PLUGIN "Deathrun Stats"
#define VERSION "0.6"
#define AUTHOR "R3X"
 
new gszChatPrefix[32];
new gszTop15Redirect[128];
 
new gszMotd[1024];
 
new gszMapname[64];
new gMid
 
 
#pragma unused giGames
new giGames; //Poki co nie uzywana zmienna
 
 
new gszQuery[512];
new Handle:gTuple;
 
new gbAuthorized[33];
new giPid[33];
 
new giPlayedTime[33];
new giBestTime[33];
new giPlayedGames[33];
new giDeaths[33];
new gszRecordTime[33][32];
new giBestTimeofMap;
 
new Float:gfLastInfo[33];
new Float:gfStartRun[33];
new giLastTime[33];
new bool:gbFinished[33];
 
new gEntFinish = 0;
new bool:gbEntityMoved = false;
 
new gcvarSave, gcvarTimer, gcvarTimerType, gcvarDrawFinish;
new gcvarPrintResult;
new gcvarRoundTime;
 
new Float:gfEndRoundTime;
new giMaxPlayers;
 
new gsprite;
 
getFormatedTime(iTime, szTime[], size){
	formatex(szTime, size, "%d:%02d.%03ds", iTime/60000, (iTime/1000)%60, iTime%1000);
}
 
#include "drstats/db.inl"
#include "drstats/sqlite.inl"
#include "drstats/mysql.inl"
 
#include "drstats/finish.inl"
#include "drstats/stats.inl"
 
public plugin_init() {
	state mysql;
 
	register_plugin(PLUGIN, VERSION, AUTHOR);
	register_dictionary("deathrun_stats.txt");
 
	register_cvar("amx_drstats_host", "localhost");
	register_cvar("amx_drstats_user", "root");
	register_cvar("amx_drstats_pass", "root");
	register_cvar("amx_drstats_db", "drstats");
 
	gcvarSave = register_cvar("amx_drstats_save", "1");
	gcvarTimer = register_cvar("amx_drstats_timer", "1");
	gcvarTimerType = register_cvar("amx_drstats_timer_type", "0");
	gcvarDrawFinish = register_cvar("amx_drstats_draw_finish", "1");
 
	gcvarPrintResult = register_cvar("amx_drstats_print_result", "1");
	//0-wcale
	//1-HUD+konsola
	//2-chat
 
	gcvarRoundTime = get_cvar_pointer("mp_roundtime");
 
	register_cvar("amx_drstats_chat_prefix", "[Speedrun]"); 
	register_cvar("amx_drstats_top15_page", "");
 
	register_logevent( "eventRoundEnd",2, "1=Round_End");
	register_logevent( "eventRoundStart",2, "1=Round_Start");
 
	register_forward(FM_PlayerPreThink, "fwPreThink", 1);
	RegisterHam(Ham_Spawn, "player", "fwSpawn", 1);
	register_touch(gszFinish, "player", "fwTouch");
	register_touch("player", gszFinish, "fwTouch2");
	register_think(gszFinish, "fwThink");
 
	register_clcmd("dr_finish", "cmdFinish", ADMIN_CFG, ": spawn finish round");
 
	register_fullclcmd("rank", "showRank");
	register_fullclcmd("top15", "showTop15");
 
	register_fullclcmd("last", "cmdLast");
	register_fullclcmd("best", "cmdBest");
 
	gfwCreateFinish = CreateMultiForward("fwFinishCreate", ET_STOP, FP_CELL, FP_ARRAY, FP_CELL);
	gfwFinished = CreateMultiForward("fwPlayerFinished", ET_IGNORE, FP_CELL, FP_CELL, FP_CELL);
	gfwStarted = CreateMultiForward("fwPlayerStarted", ET_IGNORE, FP_CELL);
 
	giMaxPlayers = get_maxplayers();
}
public plugin_precache(){
	gsprite = precache_model("sprites/white.spr");
}
 
public plugin_cfg(){
	DB_Init();
 
	get_cvar_string("amx_drstats_chat_prefix", gszChatPrefix, charsmax(gszChatPrefix));
	get_cvar_string("amx_drstats_top15_page", gszTop15Redirect, charsmax(gszTop15Redirect));
}
 
public plugin_natives(){
	register_library("DeathrunStats");
	register_native("playerFinished", "_playerFinished", 1);
}
public _playerFinished(id){
	fwFinished(id);
}
public plugin_end(){
	if(gbEntityMoved)
		saveFinishOrigin();
	SQL_FreeHandle(gTuple);
}
 
 
public client_putinserver(id){
	if(is_user_bot(id) || is_user_hltv(id))
		return;
 
	loadPlayerId(id);
}
public client_authorized_db(id, pid){
	giPid[id] = pid;
	gbAuthorized[id] = true;
 
	giPlayedTime[id] = 0;
	giBestTime[id] = 0;
	giPlayedGames[id] = 0;
	giDeaths[id] = 0;
 
	loadRunnerData(id);
}
public client_connect(id){
	gbAuthorized[id] = false;
	giPid[id] = 0;
	giLastTime[id] = 0;
}
 
 
public client_disconnect(id){
	saveRunnerData(id);
}
 
getPlayerDeaths(id){
	return giDeaths[id]+get_user_deaths(id);
}
 
getPlayedTime(id){
	return giPlayedTime[id] + get_user_time(id, 1);
}
 
getRunningTime(id){
	return floatround( (get_gametime()-gfStartRun[id])*1000, floatround_ceil);
}
 
 
public eventRoundStart(){
	new Float:fRoundTime = get_pcvar_float(gcvarRoundTime)*60;
	gfEndRoundTime = get_gametime()+fRoundTime;
}
public eventRoundEnd(){
	for(new i=1;i<33;i++)
		if(is_user_connected(i))
			saveRunnerData(i);
}
 
public fwSpawn(id){
	if(!is_user_alive(id) || !gbAuthorized[id])
		return HAM_IGNORED;
 
	if(!gEntFinish){
		client_print(id, print_chat, "%L", id, "FINISH_NOT_EXISTS");
		if(get_user_flags(id)&ADMIN_CFG)
			client_print(id, print_chat, "%L", id, "BUT_YOU_CAN_SPAWN_IT");
	}
	gbFinished[id] = false;
	gfStartRun[id] = -1.0;
 
	if(cs_get_user_team(id) == CS_TEAM_CT){
		gfStartRun[id] = get_gametime();
 
		new iRet;
		ExecuteForward(gfwStarted, iRet, id);
	}
 
	return HAM_IGNORED;
}
show_status(id, const szMsg[], any:...){
	new szStatus[128];
	vformat(szStatus, 127, szMsg, 3);
 
	static msgStatusText=0;
	if(!msgStatusText)
		msgStatusText = get_user_msgid("StatusText");
 
	message_begin(MSG_ONE_UNRELIABLE, msgStatusText, _, id);
	write_byte(0);
	write_string(szStatus);
	message_end();
}
Send_RoundTime(id, iTime){
	static msgRoundTime=0;
	if(!msgRoundTime)
		msgRoundTime = get_user_msgid("RoundTime");
 
	message_begin(MSG_ONE_UNRELIABLE, msgRoundTime, _, id);
	write_short(iTime);
	message_end();
}
hideTime(id){
	if(get_pcvar_num(gcvarTimerType)){
		Send_RoundTime(id, floatround(gfEndRoundTime - get_gametime()));
	}else{
		show_status(id, "");
	}
}
displayTime(id, iTime){
	if(get_pcvar_num(gcvarTimerType)){
		Send_RoundTime(id, iTime);
	}else{
		show_status(id, "%L: %d:%02ds", id, "WORD_TIME", iTime/60, iTime%60);
	}
}
public fwPreThink(id){
	if(!is_user_alive(id) || gfStartRun[id] <= 0.0)
		return FMRES_IGNORED;
 
	new iTimer = get_pcvar_num(gcvarTimer);
	if(!iTimer)
		return FMRES_IGNORED;
 
	if(iTimer == 2 && !(pev(id, pev_button) & IN_SCORE)){
		if(pev(id, pev_oldbuttons) & IN_SCORE)
			hideTime(id);
		return FMRES_IGNORED;
	}
 
	static Float:fNow;
 
	if(!gbFinished[id]){
		fNow = get_gametime();
 
		if((fNow-gfLastInfo[id]) <= 0.5) return FMRES_IGNORED;
 
		displayTime(id, getRunningTime(id) / 1000);
	}
	return FMRES_IGNORED;
}
 
public cmdBest(id){
	if(!gbAuthorized[id]){
		ColorChat(id, GREEN, "%s^x01 %L", gszChatPrefix, id, "NOT_AVAILABLE_NOW");
		return PLUGIN_CONTINUE;
	}
 
	if(giBestTime[id] == 0)
		ColorChat(id, GREEN, "%s^x01 %L", gszChatPrefix, id, "NEVER_REACH_FINISH");
	else{
		new szTime[32];
		getFormatedTime(giBestTime[id], szTime, charsmax(szTime));
		ColorChat(id, GREEN, "%s^x01 %L: ^x04 %s", gszChatPrefix, id, "YOUR_BEST_TIME", szTime);
	}
	return PLUGIN_CONTINUE;
}
 
public cmdLast(id){
	if(!gbAuthorized[id]){
		ColorChat(id, GREEN, "%s^x01 %L", gszChatPrefix, id, "NOT_AVAILABLE_NOW");
		return PLUGIN_CONTINUE;
	}
 
	if(giLastTime[id] == 0)
		ColorChat(id, GREEN, "%s^x01 %L", gszChatPrefix, id, "NEVER_REACH_FINISH");
	else{
		new szTime[32];
		getFormatedTime(giLastTime[id], szTime, charsmax(szTime));
		ColorChat(id, GREEN, "%s^x01 %L: ^x04 %s", gszChatPrefix, szTime, id, "YOUR_LAST_TIME", szTime);
	}
	return PLUGIN_CONTINUE;
}
 
printInfo(id, const szInfo[], ...){
	new printResult = get_pcvar_num(gcvarPrintResult);
	if(printResult == 0) return;
 
	new szMsg[64];
	vformat(szMsg, charsmax(szMsg), szInfo, 3);
 
	if(printResult == 1){
		show_dhudmessage(id, "%s", szMsg);
		client_print(id, print_console, "%s", szMsg);
	}
	else if(printResult == 2){
		ColorChat(id, GREEN, "%s^x01 %s", gszChatPrefix, szMsg);
	}
}
 
public fwFinished(id){
	if(!is_user_alive(id))
		return;
 
	new bool:record=false;
 
	new iTime = getRunningTime(id);
	giLastTime[id] = iTime;
	gbFinished[id] = true;
 
	new szTime[32];
	getFormatedTime(iTime, szTime, charsmax(szTime));
 
	set_dhudmessage(42, 43, 255, -1.0, 0.6, 1, 6.0, 5.0, 0.0, 0.0);
	printInfo(id, "%L: %s", id, "RUNNING_TIME", szTime);
 
	if(giBestTime[id] == 0){
		set_dhudmessage(255, 42, 255, -1.0, 0.7, 0, 6.0, 5.0, 0.0, 0.0);
		printInfo(id, "%L", id, "RUNNING_FIRST_FINISH");
 
		saveRunnerData(id, iTime);
	}
	else if(giBestTime[id] > iTime){
		getFormatedTime(giBestTime[id]-iTime, szTime, charsmax(szTime));
 
		set_dhudmessage(255, 42, 42, -1.0, 0.7, 0, 6.0, 5.0, 0.0, 0.0);
		printInfo(id, "%L: -%s!", id, "RUNNING_OWN_RECORD", szTime);
 
		saveRunnerData(id, iTime);
	}else if(giBestTime[id] < iTime){
		getFormatedTime(iTime-giBestTime[id], szTime, charsmax(szTime));
 
		set_dhudmessage(120, 120, 120, -1.0, 0.7, 0, 6.0, 5.0, 0.0, 0.0);
		printInfo(id, "%L: +%s", id, "RUNNING_OWN_RECORD", szTime);
	}else{
		set_dhudmessage(42, 255, 42, -1.0, 0.7, 0, 6.0, 5.0, 0.0, 0.0);
		printInfo(id, "%L", id, "RUNNING_OWN_RECORD_EQUAL");
	}
 
	if(giBestTimeofMap == 0 || giBestTimeofMap>iTime){
		giBestTimeofMap = iTime;
 
		new szName[32];
		get_user_name(id, szName, 31);
		set_dhudmessage(42, 255, 42, -1.0, 0.8, 2, 6.0, 5.0, 0.0, 0.0);
 
		for(new i=1;i<=giMaxPlayers;i++)
			if(is_user_connected(i))
				printInfo(i, "%L", i, "RUNNING_MAP_RECORD_BREAK", szName);
 
		record = true;
	}
	if(giBestTimeofMap != 0 && giBestTimeofMap<iTime){
		new szTime[32];
		getFormatedTime(iTime-giBestTimeofMap, szTime, 31);
		set_dhudmessage(120, 120, 120, -1.0, 0.8, 2, 6.0, 5.0, 0.0, 0.0);
 
		printInfo(id, "%L: +%s", id, "RUNNING_MAP_RECORD", szTime);
	}
	hideTime(id)
 
	new iRet;
	ExecuteForward(gfwFinished, iRet, id, iTime, record);
}

Dodanych wklejek: 4031
Powered By (Pav32) Pastebin © 2011