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 uialb7bo6as dodana przez Fili:P, 15.12.2012 18:09
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.
#include <amxmodx>
#include <hamsandwich>
#include <nvault>
#include <ColorChat>
 
#define PLUGIN "Achievements"
#define VERSION "1.0"
#define AUTHOR "Fili:P"
 
#define MAX 32
#define PREFIX "[Achievements]"
 
// achievement
new AchValue;
new Array:AchStance[ MAX+1 ];
new Array:AchStatus[ MAX+1 ];
new Array:AchTarget;
new Array:AchName;
new Array:AchDesc;
 
// forwardy
new g_Forward[ 5 ];
 
// cvary
new g_cvar_display;
 
public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR);
 
	register_clcmd("say /ach", "AchMenu");
	register_clcmd("say_team /ach", "AchMenu");
 
	RegisterHam(Ham_Killed, "player", "HamCheck", 0);
	RegisterHam(Ham_Spawn, "player", "HamSpawn", 1);
 
	g_cvar_display = get_pcvar_num( register_cvar("ach_display_gz", "1") ); // czy wyswietlac gratulacje zdobyles %s ?
 
	AchTarget = ArrayCreate(1, 1);
	AchName = ArrayCreate(32, 1);
	AchDesc = ArrayCreate(256, 1);
 
	g_Forward[ 0 ] = CreateMultiForward("ach_give_reward", ET_CONTINUE, FP_CELL, FP_CELL);
	g_Forward[ 1 ] = CreateMultiForward("ach_load_post", ET_CONTINUE, FP_CELL);
	g_Forward[ 2 ] = CreateMultiForward("ach_save_pre", ET_CONTINUE, FP_CELL, FP_CELL);
	g_Forward[ 3 ] = CreateMultiForward("ach_save_post", ET_CONTINUE, FP_CELL, FP_CELL);
	g_Forward[ 4 ] = CreateMultiForward("ach_menu_display", ET_CONTINUE, FP_CELL, FP_ARRAY);
	AchValue = nvault_open("Achievements");
 
	if (AchValue == INVALID_HANDLE)
                set_fail_state( "Nie moge otworzyc pliku!");
}
public plugin_natives()
{
	register_library("achievements");
 
	register_native("ach_get_index", "_ach_get_index");
	register_native("ach_get_stance", "_ach_get_stance"); // pobiera czy ach zaliczony czy nie
	register_native("ach_get_status", "_ach_get_status"); // pobiera postep w achu
	register_native("ach_get_desc", "_ach_get_desc"); // pobiera do talibyc opis acha o konkretnym id
	register_native("ach_get_name", "_ach_get_name"); // pobiera do tablicy nazwe acha o konkretnym id
	register_native("ach_get_target", "_ach_get_target"); // pobiera wymagana ilosc do zakonczenia acha
	register_native("ach_get_max", "_ach_get_max"); // pobiera ilosc achievementow (ACH_NUM)
	register_native("ach_set_stance", "_ach_set_stance"); // ustawia czy gracz ukonczyl acha
	register_native("ach_set_status", "_ach_set_status"); // ustawia postep w achu
	register_native("ach_add", "_ach_add"); // tworzy nowy ach
	register_native("ach_reset_status", "_ach_reset_status"); // ustawia AchStatus[id][aid] na 0
	register_native("ach_add_status", "_ach_add_status"); // dodaje postep w achu
}
public plugin_end() 
{
	nvault_close(AchValue);
}
public client_authorized(id)
{
	AchStance[id]=ArrayCreate(1,1);
	AchStatus[id]=ArrayCreate(1,1);
 
	for(new i=0; i<ArraySize(AchTarget); i++)
	{
		ArrayPushCell(AchStance[id], 0);
		ArrayPushCell(AchStatus[id], 0);
		load_nvault(id, i);
	}
	new iRet;
	ExecuteForward(g_Forward[ 1 ], iRet, id);
}
public client_disconnect(id)
{
	new iRet;
	ExecuteForward(g_Forward[ 2 ], iRet, id, 1);
	for(new i=0; i<ArraySize(AchTarget); i++)
		save_nvault(id, i)
	ArrayDestroy(AchStatus[id]);
	ArrayDestroy(AchStance[id]);
}
public AchMenu(id)
{
	new AchM = menu_create("Osiagniecia", "AchMenuHandle");
 
	for(new i=0; i<ArraySize(AchTarget); i++)
	{
		if(is_user_connected(id))
		{
			new message[128];
			new iAchName[64];
			new data[ 2 ];
			data[ 0 ] = ArrayGetCell(AchTarget, i);
			data[ 1 ] = ArrayGetCell(AchStatus[id], i);
			new iRet
			ExecuteForward(g_Forward[ 4 ], iRet, id, PrepareArray(data, 2, 1));
			new iAchStance = ArrayGetCell(AchStance[id], i);
			new iAchStatus = data[ 1 ];
			new iTarget = data[ 0 ];
			ArrayGetString(AchName, i, iAchName, 63);
 
			if(!iAchStance)
				format(message, 127, "w%s ty%d/%d", iAchName, iAchStatus, iTarget)
			if(iAchStance)
				format(message, 127, "w%s tyZaliczone!", iAchName)
			menu_additem(AchM, message);
		}
	}
	menu_display(id, AchM, 0);
	return PLUGIN_HANDLED;
}
public AchMenuHandle(id, menu, item)
{
	if(item == MENU_EXIT)
	{
		menu_destroy(menu);
		return PLUGIN_HANDLED
	}
	else if(is_user_connected(id) && item && item < ArraySize(AchTarget))
	{
		new iAchDesc[256];
		ArrayGetString(AchDesc, item, iAchDesc, 255);	
		if(!ArrayGetCell(AchStance[id], item))
			ColorChat(id, YELLOW, "^x04[Achievements] ^x01%s ^x04%d/%d", iAchDesc, ArrayGetCell(AchStatus[id], item), ArrayGetCell(AchTarget, item))
		else
			ColorChat(id, YELLOW, "^x04[Achievements] ^x01%s ^x04Zaliczone!", iAchDesc)
 
		menu_display(id, menu, 0);
	}
        return PLUGIN_HANDLED;
}
// ham
public HamSpawn(id)
{
	if(is_user_connected(id))
	{
		for(new i=0; i<ArraySize(AchTarget); i++)
		{
			load_nvault(id, i);
		}
	}
}
public HamCheck(id)
{	
	if(is_user_connected(id))
	{
		check_all_ach(id);
		new iRet;
		ExecuteForward(g_Forward[ 2 ], iRet, id, 2);
		for(new i=0; i<ArraySize(AchTarget); i++)
			save_nvault(id, i);
		new iRet2;
		ExecuteForward(g_Forward[ 3 ], iRet2, id, 2);
	}
}
//natywy
public _ach_get_index(plugin, params)
{
	//if(params != 1)
		//return 0;
	new szAchName[32];
	new zwroc;
	get_string(1, szAchName, 31);
	for(new i=0; i<ArraySize(AchTarget); i++)
	{
		new szAchName2[31];
		ArrayGetString(AchName, i, szAchName2, 31);
		if(equal(szAchName2, szAchName))
			zwroc = i;
	}
	return zwroc;
}
public _ach_get_max(plugin, params)
	return ArraySize(AchTarget);
public _ach_get_stance(plugin, params)
{
	new id = get_param(1);
	return ArrayGetCell(AchStance[ id ], get_param(2));
}
public _ach_get_status(plugin, params)
{
	new id = get_param(1);
	if( !is_user_connected( id ) )
		return 0;
	return ArrayGetCell(AchStatus[ id ], get_param(2));
}
public _ach_get_target(plugin, params)
	return ArrayGetCell(AchTarget, get_param(1));
public _ach_get_name(plugin, params)
{
	new iAchName[64];
	ArrayGetString(AchName, get_param(1), iAchName, 63);
	set_string(2, iAchName, get_param(3));
}
public _ach_get_desc(plugin, params)
{
	new iAchDesc[64];
	ArrayGetString(AchDesc, get_param(1), iAchDesc, 63);
	set_string(2, iAchDesc, get_param(3));
}
public _ach_set_stance(plugin, params)
	ArraySetCell(AchStatus[ get_param(1) ],get_param(2), get_param(3));	
public _ach_set_status(plugin, params)
	ArraySetCell(AchStatus[ get_param(1) ], get_param(2), get_param(3));
public _ach_add(plugin, params)
{
	new szAchName[64];
	new szAchDesc[256];
	get_string(1, szAchName, 63);
	get_string(2, szAchDesc, 255);
	ArrayPushString(AchName, szAchName);
	ArrayPushString(AchDesc, szAchDesc);
	ArrayPushCell(AchTarget, get_param(3));
	return ArraySize(AchTarget)-1;
}
public _ach_reset_status(plugin, params)
	ArraySetCell(AchStatus[get_param(1)], get_param(2), 0);
public _ach_add_status(plugin, params)
	ArraySetCell(AchStatus[get_param(1)], get_param(2), ArrayGetCell(AchStatus[get_param(1)] , get_param(2)) + get_param(3));
 
// stocki
stock check_ach(pid, aid)
{
	if(ArrayGetCell(AchStatus[pid], aid) >= ArrayGetCell(AchTarget, aid) && !ArrayGetCell(AchStance[pid], aid) && is_user_connected(pid))
	{
		new name[33];
		get_user_name(pid, name, 32);
		ArraySetCell(AchStance[pid], aid, 1);
		new iAchName[64];
		ArrayGetString(AchName, aid, iAchName, 63);
		if(g_cvar_display)
			ColorChat(pid, YELLOW, "^x04%s ^x01Gratulacje ^x04%s^x01! Zdobyles osiagniecie ^x04^"%s^"^x01!", PREFIX, name, iAchName)
		new iRet;
		ExecuteForward(g_Forward[ 0 ], iRet, pid, aid);
	}
}
stock check_all_ach(pid)
	for(new i=0; i<ArraySize(AchTarget); i++)
		check_ach(pid, i);
stock load_nvault(index, ach_id)
{
	if(is_user_connected(index))
	{
		new name[35]
		get_user_name(index,name,34)
		new vaultkey[64],vaultdata[256]
		format(vaultkey,63,"%s-%d-ach",name, ach_id)
		format(vaultdata,255,"%d#%d#",ArrayGetCell(AchStatus[index], ach_id) , ArrayGetCell(AchStance[index], ach_id))
		nvault_get(AchValue,vaultkey,vaultdata,255) 
 
		replace_all(vaultdata, 255, "#", " ") 
 
		new ach_status[33], ach_stance[33];
		parse(vaultdata,ach_status,32,ach_stance,32) 
 
		ArraySetCell(AchStatus[index], ach_id, str_to_num(ach_status));
		ArraySetCell(AchStance[index], ach_id, str_to_num(ach_stance));
	}
}  
stock save_nvault(index, ach_id)
{
	if(is_user_connected(index))
	{
		new name[35]
		get_user_name(index,name,34)
		new vaultkey[64],vaultdata[256] 
		format(vaultkey,63,"%s-%d-ach",name, ach_id) 
		format(vaultdata,255,"%d#%d#", ArrayGetCell(AchStatus[index], ach_id), ArrayGetCell(AchStance[index], ach_id)) 
 
		nvault_set(AchValue,vaultkey,vaultdata)   
	}
}
 

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