HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include < amxmodx >
  2. #include < cstrike >
  3. #include < fakemeta >
  4.  
  5. enum Cvars
  6. {
  7. botname1,
  8. botname2,
  9. minplayers,
  10. starttime,
  11. endtime,
  12. onecon,
  13. onebot,
  14. norounds
  15. };
  16.  
  17. new const cvar_names[ Cvars ][] =
  18. {
  19. "amx_botname",
  20. "amx_botname2",
  21. "amx_minplayers",
  22. "amx_starttime",
  23. "amx_endtime",
  24. "amx_onecon",
  25. "amx_onebot",
  26. "amx_norounds"
  27. };
  28.  
  29. new const cvar_defaults[ Cvars ][] =
  30. {
  31. "Bot",
  32. "Bot 2",
  33. "10",
  34. "00",
  35. "12",
  36. "0",
  37. "0",
  38. "0"
  39. };
  40.  
  41. new cvar_pointer[ Cvars ];
  42. new bool:g_isTime = false;
  43. new bool:g_ePlayers = false;
  44. new bool:g_isFirstRound = true;
  45. new g_BotNum = 0, g_maxplayers, g_bID1, g_bID2;
  46.  
  47. new const g_ConfigFile[] = "addons/amxmodx/configs/kgbbots.cfg"
  48.  
  49. public plugin_init()
  50. {
  51. register_plugin("KGB Bots", "2.3", "OvidiuS & Desikac")
  52. register_cvar("kgbbots", "1" , (FCVAR_SERVER|FCVAR_SPONLY))
  53.  
  54. register_logevent("Event_RoundEnd", 2, "1=Round_End");
  55. register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0");
  56.  
  57. for ( new Cvars:i = botname1 ; i < Cvars ; i++ )
  58. cvar_pointer[ i ] = register_cvar( cvar_names[ i ] , cvar_defaults[ i ] );
  59.  
  60. g_maxplayers = get_maxplayers();
  61. server_cmd("exec %s", g_ConfigFile)
  62. set_task(3.0, "isit")
  63. }
  64.  
  65. public isit() {
  66. if(get_pcvar_num(cvar_pointer[norounds]))
  67. set_task(30.0, "CheckConditions",0,"",0,"b")
  68. }
  69.  
  70. public plugin_precache()
  71. {
  72. if(!file_exists(g_ConfigFile))
  73. {
  74. write_file(g_ConfigFile, "KGB Bots - Beállítások^n")
  75. write_file(g_ConfigFile, "amx_botname ^"KGB Bot1^" //Első bot neve")
  76. write_file(g_ConfigFile, "amx_botname2 ^"KGB Bot2^" //Második bot neve")
  77. write_file(g_ConfigFile, "amx_minplayers ^"10^" //Ennyi játékostól dobja ki a szerver a botokat. Ha,kevesebb lesz a létszám akkor vissza jönnek!")
  78. write_file(g_ConfigFile, "amx_starttime ^"0^" //Hány órától legyenek fent a botok a szerón")
  79. write_file(g_ConfigFile, "amx_endtime ^"12^" //Hány órán át legyenek botok?")
  80. write_file(g_ConfigFile, "amx_onecon ^"0^" //A kezdési idő és minplayers létszám feltételeknek muszáj együttesen teljesülniük a botok berakásához[0 -nem, 1 -igen]")
  81. write_file(g_ConfigFile, "amx_onebot ^"0^" //Egy bot menjen csak fel a szerverre?[0 -nem, 1 -igen]")
  82. write_file(g_ConfigFile, "amx_norounds ^"0^" //Végtelen köridő (0-1) (ellenőrzés 30mp-enként)[0 -nem, 1 -igen]")
  83. }
  84. }
  85.  
  86. public Event_RoundEnd()
  87. {
  88. if (!g_isFirstRound)
  89. return;
  90.  
  91. g_isFirstRound = false;
  92. }
  93.  
  94. public Event_NewRound()
  95. {
  96. if(g_isFirstRound)
  97. return;
  98.  
  99. CheckConditions();
  100. }
  101.  
  102. public CheckConditions()
  103. {
  104. static iHours, m, s
  105. time(iHours, m, s)
  106.  
  107. new iMin = get_pcvar_num(cvar_pointer[ starttime ]);
  108. new iMax = get_pcvar_num(cvar_pointer[ endtime ]);
  109.  
  110. if(iMin == iMax)
  111. g_isTime = true;
  112. else if(iMin > iMax)
  113. {
  114. switch(iHours)
  115. {
  116. case 0..11:
  117. {
  118. if(iMin >= iHours && iMax > iHours)
  119. g_isTime = true;
  120. }
  121. case 12..23:
  122. {
  123. if(iMin <= iHours && iMax < iHours)
  124. g_isTime = true;
  125. }
  126. }
  127. }
  128. else if(iMin <= iHours && iMax > iHours)
  129. g_isTime = true;
  130. else
  131. g_isTime = false;
  132.  
  133. new iNum, iPlayers[32];
  134. get_players(iPlayers, iNum, "c");
  135.  
  136. if(iNum <= get_pcvar_num(cvar_pointer[minplayers]))
  137. g_ePlayers = true;
  138. else
  139. g_ePlayers = false;
  140.  
  141. if(g_maxplayers - iNum < 2)
  142. g_ePlayers = false;
  143.  
  144. if(get_pcvar_num(cvar_pointer[minplayers]) == 0)
  145. g_ePlayers = true
  146.  
  147. new iCondition = get_pcvar_num(cvar_pointer[ onecon ]);
  148. if( (!g_ePlayers && g_isTime || !g_isTime && g_ePlayers) && iCondition)
  149. {
  150. g_isTime = true;
  151. g_ePlayers = true;
  152. }
  153.  
  154.  
  155.  
  156. if((g_isTime && g_ePlayers) && !g_BotNum)
  157. {
  158. if(!get_pcvar_num(cvar_pointer[onebot]))
  159. set_task(1.5, "Task_AddBot")
  160. set_task(2.8, "Task_AddBot")
  161. }
  162. else if((!g_isTime || !g_ePlayers) && 0 < g_BotNum <= 2 )
  163. {
  164. g_BotNum = 0;
  165. server_cmd("kick #%d", g_bID1)
  166. server_cmd("kick #%d", g_bID2)
  167. }
  168. }
  169.  
  170. public Task_AddBot()
  171. {
  172. static iBot;
  173. new iBotName[35];
  174.  
  175. switch(g_BotNum)
  176. {
  177. case 0: get_pcvar_string(cvar_pointer[ botname1 ], iBotName, charsmax( iBotName ));
  178. case 1: get_pcvar_string(cvar_pointer[ botname2 ], iBotName, charsmax( iBotName ));
  179. case 2: return;
  180. }
  181.  
  182. iBot = engfunc( EngFunc_CreateFakeClient, iBotName );
  183.  
  184. if(!iBot)
  185. return;
  186.  
  187. dllfunc( MetaFunc_CallGameEntity, "player", iBot );
  188. set_pev( iBot, pev_flags, FL_FAKECLIENT );
  189.  
  190. set_pev( iBot, pev_model, "" );
  191. set_pev( iBot, pev_viewmodel2, "" );
  192. set_pev( iBot, pev_modelindex, 0 );
  193.  
  194. set_pev( iBot, pev_renderfx, kRenderFxNone );
  195. set_pev( iBot, pev_rendermode, kRenderTransAlpha );
  196. set_pev( iBot, pev_renderamt, 0.0 );
  197.  
  198. set_pdata_int( iBot, 114, 3 );
  199. cs_set_user_team( iBot, CS_TEAM_UNASSIGNED );
  200.  
  201. switch(g_BotNum)
  202. {
  203. case 0: g_bID1 = get_user_userid(iBot);
  204. case 1: g_bID2 = get_user_userid(iBot);
  205. }
  206. g_BotNum++;
  207. }