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.
|
Guest Message by DevFuse
Wklejka uialb7bo6as dodana przez Fili:P, 15.12.2012 18:09
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: 15354
Powered By (Pav32) Pastebin © 2011


Dodatki SourceMod


