HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include <amxmodx>
  2.  
  3. /* Ami előtt // van az le van tiltva, ami előtt nincs, az aktív. Itt tudsz mindent módosítani. */
  4.  
  5. #define PREFIXEK // Alap prefixek engedélyezése.
  6. #if defined PREFIXEK
  7. //#define EGYEDI_PREFIXEK // Egyedi prefixek engedélyezése "addons/amxmodx/configs/egyedi_prefixek.ini"
  8. #endif
  9. //#define STEAM_PREFIX // Steam prefix engedélyezése.
  10. #define ZOLD_IRAS // Zöld írás az Adminoknak és a VIP-nek.
  11. #define TULAJ_JOG ADMIN_RCON // Tulaj jog a Tulaj prefixhez. (alap: "l")
  12. #define ADMIN_JOG ADMIN_BAN // Admin jog az Admin prefixhez. (alap: "d")
  13. #define VIP_JOG ADMIN_LEVEL_H // VIP jog a VIP prefixhez. (alap: "t")
  14. //#define ANTI_FLOOD // Anti-flood bekapcsolása (ki kell törölni a plugins.ini-ből az alap "antiflood.amxx"-et.)
  15. #define IDOKOZ 0.75 // Flood időköz
  16. #define ADMIN_LAT // Az Admin látja az élő és a halott, és a két csapat írását egyaránt.
  17. //#define ALAP_CHAT // Élő nem látja a halott írását, kivéve az Admin,ha az ADMIN_LAT aktív. (alap: mindenki látja a halottat is.)
  18.  
  19. #if defined STEAM_PREFIX
  20. new bool:steames[33];
  21. #endif
  22. #if defined EGYEDI_PREFIXEK
  23. enum _:ADATOK
  24. {
  25. TIPUS[2],
  26. ELLENORZES[32],
  27. PREFIX[64]
  28. };
  29. new Array:adat, jatekosadat[ADATOK];
  30. new prefix[33][64];
  31. #endif
  32.  
  33. #define GetBit(%1,%2) (%1 & (1 << (%2 & 31)))
  34. #define SetBit(%1,%2) %1 |= (1 << (%2 & 31))
  35. #define ResetBit(%1,%2) %1 &= ~(1 << (%2 & 31))
  36. #if defined ADMIN_LAT
  37. new bitadmin;
  38. #endif
  39. new bitelo;
  40.  
  41. public plugin_init()
  42. {
  43. #define AUTHOR "neygomon, mforce"
  44. register_plugin("Lite Chat", "1.0", AUTHOR);
  45. register_cvar("lite_chat", AUTHOR, FCVAR_SERVER | FCVAR_SPONLY);
  46.  
  47. register_clcmd("say", "HandlerSay");
  48. register_clcmd("say_team", "HandlerSayTeam");
  49.  
  50. register_event("ResetHUD", "eResetHUD", "be");
  51. register_event("DeathMsg", "eDeathMsg", "a", "1>0");
  52. }
  53.  
  54. #if defined EGYEDI_PREFIXEK
  55. public plugin_cfg()
  56. {
  57. adat = ArrayCreate(ADATOK);
  58.  
  59. new betolt[256], fp = fopen("addons/amxmodx/configs/egyedi_prefixek.ini", "rt");
  60. if(!fp) return set_fail_state("A fajlt ^"addons/amxmodx/configs/egyedi_prefixek.ini^" nem talaltuk");
  61.  
  62. while(!feof(fp))
  63. {
  64. fgets(fp, betolt, charsmax(betolt));
  65. if(betolt[0] && betolt[0] != ';' && parse(betolt, jatekosadat[TIPUS], charsmax(jatekosadat[TIPUS]), jatekosadat[ELLENORZES], charsmax(jatekosadat[ELLENORZES]), jatekosadat[PREFIX], charsmax(jatekosadat[PREFIX])))
  66. ArrayPushArray(adat, jatekosadat);
  67. }
  68. return fclose(fp);
  69. }
  70. #endif
  71. public client_putinserver(id)
  72. {
  73. #if defined EGYEDI_PREFIXEK
  74. kereses(id);
  75. #endif
  76. #if defined STEAM_PREFIX
  77. steames[id] = is_user_steam(id) ? true : false;
  78. #endif
  79. #if defined ADMIN_LAT
  80. if(get_user_flags(id) & ADMIN_CHAT) SetBit(bitadmin, id);
  81. else ResetBit(bitadmin, id);
  82. #endif
  83. }
  84.  
  85. public client_disconnect(id) ResetBit(bitelo, id);
  86. public eResetHUD(id) SetBit(bitelo, id);
  87. public eDeathMsg() ResetBit(bitelo, read_data(2));
  88.  
  89. public HandlerSay(id) return uzenetformazas(id, false);
  90. public HandlerSayTeam(id) return uzenetformazas(id, true);
  91.  
  92. uzenetformazas(id, bool:csapat)
  93. {
  94. #define MAX_BIT 180
  95. static uzenet[MAX_BIT], stringkonvertalas[charsmax(uzenet) * 2 + 1];
  96. read_args(uzenet, charsmax(uzenet));
  97. remove_quotes(uzenet);
  98.  
  99. if(uzenet[0] == EOS || uzenet[0] == '/' || equal(uzenet, " "))
  100. return PLUGIN_HANDLED_MAIN;
  101. #if defined ANTI_FLOOD
  102. static Float:floodido[33], Float:jatekido, figyelmeztetes[33];
  103.  
  104. if(floodido[id] > (jatekido = get_gametime()))
  105. {
  106. if(++figyelmeztetes[id] > 2)
  107. {
  108. client_print(id, print_chat, "NE FLOODOLJ!");
  109. floodido[id] = jatekido + IDOKOZ + 3.0;
  110. return PLUGIN_HANDLED;
  111. }
  112. }
  113. else if(figyelmeztetes[id]) figyelmeztetes[id]--;
  114. floodido[id] = jatekido + IDOKOZ;
  115. #endif
  116. static fullos, tagek[MAX_BIT], team_lekeres, sTeam[16];
  117. team_lekeres = get_user_team(id, sTeam, charsmax(sTeam));
  118.  
  119. switch(team_lekeres)
  120. {
  121. case 1: fullos = formatex(tagek, charsmax(tagek), "%s%s", GetBit(bitelo, id) ? "^1" : "^1*Halott* ", csapat ? "^1[T] " : "");
  122. case 2: fullos = formatex(tagek, charsmax(tagek), "%s%s", GetBit(bitelo, id) ? "^1" : "^1*Halott* ", csapat ? "^1[CT] " : "");
  123. default:fullos = formatex(tagek, charsmax(tagek), "^1*Spec* ");
  124. }
  125. #if defined ZOLD_IRAS || (defined PREFIXEK && !defined EGYEDI_PREFIXEK)
  126. static hozzaferes; hozzaferes = jogellenorzes(id);
  127. #endif
  128. #if defined STEAM_PREFIX
  129. if(steames[id])
  130. fullos += formatex(tagek[fullos], charsmax(tagek) - fullos, "^1[^4Steam^1] ");
  131. #endif
  132. #if defined PREFIXEK
  133. #if defined EGYEDI_PREFIXEK
  134. if(prefix[id][0])
  135. {
  136. replace_all(prefix[id], charsmax(prefix[]), "!n", "^1");
  137. replace_all(prefix[id], charsmax(prefix[]), "!t", "^3");
  138. replace_all(prefix[id], charsmax(prefix[]), "!g", "^4");
  139. fullos += formatex(tagek[fullos], charsmax(tagek) - fullos, "%s ", prefix[id]);
  140. }
  141. #else
  142. static const adminprefixek[][] = { "", "^4[Tulaj] ", "^4[Admin] ", "^4[VIP] " };
  143. fullos += formatex(tagek[fullos], charsmax(tagek) - fullos, "%s", adminprefixek[hozzaferes]);
  144. #endif
  145. #endif
  146. #if defined ZOLD_IRAS
  147. switch(hozzaferes)
  148. {
  149. case 0: fullos += formatex(tagek[fullos], charsmax(tagek) - fullos, "^3%%s1^1 : %%s2");
  150. default:fullos += formatex(tagek[fullos], charsmax(tagek) - fullos, "^3%%s1^1 : ^4%%s2");
  151. }
  152. #else
  153. fullos += formatex(tagek[fullos], charsmax(tagek) - fullos, "^3%%s1^1 : %%s2");
  154. #endif
  155. stringkonvertalas = uzenet;
  156. replace_all( stringkonvertalas, charsmax( stringkonvertalas ), "", " " );
  157. replace_all( stringkonvertalas, charsmax( stringkonvertalas ), "", " " );
  158.  
  159. static bitlimit; bitlimit = MAX_BIT;
  160. while(fullos + strlen(stringkonvertalas) > MAX_BIT) stringkonvertalas[bitlimit -= 10] = 0;
  161.  
  162. static players[32], pcount; get_players(players, pcount, "c");
  163. switch(csapat)
  164. {
  165. case true:
  166. {
  167. for(new i; i < pcount; i++)
  168. {
  169. #if defined ADMIN_LAT
  170. if(GetBit(bitadmin, players[i]) || (GetBit(bitelo, id) == GetBit(bitelo, players[i]) && team_lekeres == get_user_team(players[i])))
  171. #else
  172. if(GetBit(bitelo, id) == GetBit(bitelo, players[i]) && team_lekeres == get_user_team(players[i]))
  173. #endif
  174. PrintChat(players[i], id, tagek, stringkonvertalas);
  175. }
  176. }
  177. case false:
  178. {
  179. for(new i; i < pcount; i++)
  180. #if defined ALAP_CHAT
  181. #if defined ADMIN_LAT
  182. if(GetBit(bitadmin, players[i]) || GetBit(bitelo, id) == GetBit(bitelo, players[i]))
  183. #else
  184. if(GetBit(bitelo, id) == GetBit(bitelo, players[i]))
  185. #endif
  186. PrintChat(players[i], id, tagek, stringkonvertalas);
  187. #else
  188. PrintChat(players[i], id, tagek, stringkonvertalas);
  189. #endif
  190. }
  191. }
  192. static sAuthId[25], sName[32];
  193. get_user_name(id, sName, charsmax(sName));
  194. get_user_authid(id, sAuthId, charsmax(sAuthId));
  195. log_message("^"%s<%d><%s><%s>^" %s ^"%s^"", sName, get_user_userid(id), sAuthId, sTeam, csapat ? "say_team" : "say" , stringkonvertalas);
  196. return PLUGIN_HANDLED;
  197. }
  198.  
  199. PrintChat(iReceiver, iSender, const tagek[], const uzenet[])
  200. {
  201. message_begin(MSG_ONE, 76, .player=iReceiver);
  202. write_byte(iSender);
  203. write_string(tagek);
  204. write_string("");
  205. write_string(uzenet);
  206. message_end();
  207. }
  208.  
  209. stock kereses(const id)
  210. {
  211. for(new i; i < ArraySize(adat); i++)
  212. {
  213. ArrayGetArray(adat, i, jatekosadat);
  214. switch(jatekosadat[TIPUS])
  215. {
  216. case 'j':
  217. {
  218. if(get_user_flags(id) & read_flags(jatekosadat[ELLENORZES]))
  219. return copy(prefix[id], charsmax(prefix[]), jatekosadat[PREFIX]);
  220. }
  221. case 'i':
  222. {
  223. static sIP[16]; get_user_ip(id, sIP, charsmax(sIP), 1);
  224. if(!strcmp(jatekosadat[ELLENORZES], sIP))
  225. return copy(prefix[id], charsmax(prefix[]), jatekosadat[PREFIX]);
  226. }
  227. case 's':
  228. {
  229. static sAuthid[25]; get_user_authid(id, sAuthid, charsmax(sAuthid));
  230. if(!strcmp(jatekosadat[ELLENORZES], sAuthid))
  231. return copy(prefix[id], charsmax(prefix[]), jatekosadat[PREFIX]);
  232. }
  233. }
  234. }
  235. return prefix[id][0] = 0;
  236. }
  237.  
  238. stock jogellenorzes(id)
  239. {
  240. static flagek; flagek = get_user_flags(id);
  241. if(flagek & TULAJ_JOG) return 1;
  242. else if(flagek & ADMIN_JOG) return 2;
  243. else if(flagek & VIP_JOG) return 3;
  244. return 0;
  245. }
  246.  
  247. stock bool:is_user_steam(id)
  248. {
  249. static dp_pointer;
  250. if(dp_pointer || (dp_pointer = get_cvar_pointer("dp_r_id_provider")))
  251. {
  252. server_cmd("dp_clientinfo %d", id);
  253. server_exec();
  254. return (get_pcvar_num(dp_pointer) == 2) ? true : false;
  255. }
  256. return false;
  257. }