Shadowless

FAKE Bots by OvidiuS & Desikac

Oct 9th, 2019 (edited)
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.90 KB | None | 0 0
  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/fakeplayer.cfg"
  48.  
  49. public plugin_init()
  50. {
  51. register_plugin("FAKE Bots", "2.3", "OvidiuS & Desikac")
  52. register_cvar("fakebots", "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(10.0, "Task_AddBot")
  63. set_task(15.0, "Task_AddBot")
  64. set_task(300.0, "isit")
  65. }
  66.  
  67. public isit() {
  68. if(get_pcvar_num(cvar_pointer[norounds]))
  69. set_task(30.0, "CheckConditions",0,"",0,"b")
  70. }
  71.  
  72. public plugin_precache()
  73. {
  74. if(!file_exists(g_ConfigFile))
  75. {
  76. write_file(g_ConfigFile, "FAKE Bots - Podesavanja^n")
  77. write_file(g_ConfigFile, "amx_botname ^"Fake Player^" //Ime prvog bota")
  78. write_file(g_ConfigFile, "amx_botname2 ^"Spectator Bot^" //Ime drugog bota")
  79. write_file(g_ConfigFile, "amx_minplayers ^"27^" //Botovi ce biti ubaceni samo ako je broj igraca manji od ove vrednosti.")
  80. write_file(g_ConfigFile, "amx_starttime ^"0^" //Od koliko sati da botovi budu na serveru?")
  81. write_file(g_ConfigFile, "amx_endtime ^"24^" //Do koliko sati da botovi budu na serveru?")
  82. write_file(g_ConfigFile, "amx_onecon ^"0^" //Da li treba da bude ispunjen samo jedan uslov da bi se dodali botovi?")
  83. write_file(g_ConfigFile, "amx_onebot ^"0^" //Da li da plugin ubacuje samo jednog bota?")
  84. write_file(g_ConfigFile, "amx_norounds ^"0^" //Da li se na ovom serveru ne zavrsava runda?")
  85. }
  86. }
  87.  
  88. public Event_RoundEnd()
  89. {
  90. if (!g_isFirstRound)
  91. return;
  92.  
  93. g_isFirstRound = false;
  94. }
  95.  
  96. public Event_NewRound()
  97. {
  98. if(g_isFirstRound)
  99. return;
  100.  
  101. CheckConditions();
  102. }
  103.  
  104. public CheckConditions()
  105. {
  106. static iHours, m, s
  107. time(iHours, m, s)
  108.  
  109. new iMin = get_pcvar_num(cvar_pointer[ starttime ]);
  110. new iMax = get_pcvar_num(cvar_pointer[ endtime ]);
  111.  
  112. if(iMin == iMax)
  113. g_isTime = true;
  114. else if(iMin > iMax)
  115. {
  116. switch(iHours)
  117. {
  118. case 0..11:
  119. {
  120. if(iMin >= iHours && iMax > iHours)
  121. g_isTime = true;
  122. }
  123. case 12..23:
  124. {
  125. if(iMin <= iHours && iMax < iHours)
  126. g_isTime = true;
  127. }
  128. }
  129. }
  130. else if(iMin <= iHours && iMax > iHours)
  131. g_isTime = true;
  132. else
  133. g_isTime = false;
  134.  
  135. new iNum, iPlayers[32];
  136. get_players(iPlayers, iNum, "c");
  137.  
  138. if(iNum <= get_pcvar_num(cvar_pointer[minplayers]))
  139. g_ePlayers = true;
  140. else
  141. g_ePlayers = false;
  142.  
  143. if(g_maxplayers - iNum < 2)
  144. g_ePlayers = false;
  145.  
  146. if(get_pcvar_num(cvar_pointer[minplayers]) == 0)
  147. g_ePlayers = true
  148.  
  149. new iCondition = get_pcvar_num(cvar_pointer[ onecon ]);
  150. if( (!g_ePlayers && g_isTime || !g_isTime && g_ePlayers) && iCondition)
  151. {
  152. g_isTime = true;
  153. g_ePlayers = true;
  154. }
  155.  
  156.  
  157.  
  158. if((g_isTime && g_ePlayers) && !g_BotNum)
  159. {
  160. if(!get_pcvar_num(cvar_pointer[onebot]))
  161. set_task(1.5, "Task_AddBot")
  162. set_task(2.8, "Task_AddBot")
  163. }
  164. else if((!g_isTime || !g_ePlayers) && 0 < g_BotNum <= 2 )
  165. {
  166. g_BotNum = 0;
  167. server_cmd("kick #%d", g_bID1)
  168. server_cmd("kick #%d", g_bID2)
  169. }
  170. }
  171.  
  172. public Task_AddBot()
  173. {
  174. static iBot;
  175. new iBotName[35];
  176.  
  177. switch(g_BotNum)
  178. {
  179. case 0: get_pcvar_string(cvar_pointer[ botname1 ], iBotName, charsmax( iBotName ));
  180. case 1: get_pcvar_string(cvar_pointer[ botname2 ], iBotName, charsmax( iBotName ));
  181. case 2: return;
  182. }
  183.  
  184. iBot = engfunc( EngFunc_CreateFakeClient, iBotName );
  185.  
  186. if(!iBot)
  187. return;
  188.  
  189. dllfunc( MetaFunc_CallGameEntity, "player", iBot );
  190. set_pev( iBot, pev_flags, FL_FAKECLIENT );
  191.  
  192. set_pev( iBot, pev_model, "" );
  193. set_pev( iBot, pev_viewmodel2, "" );
  194. set_pev( iBot, pev_modelindex, 0 );
  195.  
  196. set_pev( iBot, pev_renderfx, kRenderFxNone );
  197. set_pev( iBot, pev_rendermode, kRenderTransAlpha );
  198. set_pev( iBot, pev_renderamt, 0.0 );
  199.  
  200. set_pdata_int( iBot, 114, 3 );
  201. cs_set_user_team( iBot, CS_TEAM_UNASSIGNED );
  202.  
  203. switch(g_BotNum)
  204. {
  205. case 0: g_bID1 = get_user_userid(iBot);
  206. case 1: g_bID2 = get_user_userid(iBot);
  207. }
  208. g_BotNum++;
  209. }
  210. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  211. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
  212. */
Advertisement
Add Comment
Please, Sign In to add comment