X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fbot%2Fdefault%2Fbot.qc;h=1905b7c2728e4a389669b373873c1cb9a482438f;hp=ed9070f9cdd60821538da821afdceab6a2405cab;hb=aaa298baa3cffa029d5f1c03a834549861fe31b1;hpb=0f6c4bee8db75b0aded48382af1c2693b19624de;ds=sidebyside diff --git a/qcsrc/server/bot/default/bot.qc b/qcsrc/server/bot/default/bot.qc index ed9070f9c..1905b7c27 100644 --- a/qcsrc/server/bot/default/bot.qc +++ b/qcsrc/server/bot/default/bot.qc @@ -46,6 +46,7 @@ entity bot_spawn() entity bot = spawnclient(); if (bot) { + setItemGroupCount(); currentbots = currentbots + 1; bot_setnameandstuff(bot); ClientConnect(bot); @@ -63,7 +64,8 @@ void bot_think(entity this) if(autocvar_bot_god) this.flags |= FL_GODMODE; - this.bot_nextthink = this.bot_nextthink + autocvar_bot_ai_thinkinterval * pow(0.5, this.bot_aiskill); + this.bot_nextthink = max(time, this.bot_nextthink) + max(0.01, autocvar_bot_ai_thinkinterval * (0.5 ** this.bot_aiskill) * min(14 / (skill + 14), 1)); + //if (this.bot_painintensity > 0) // this.bot_painintensity = this.bot_painintensity - (skill + 1) * 40 * frametime; @@ -206,7 +208,13 @@ void bot_setnameandstuff(entity this) prio = 6; - #define READSKILL(f,w,r) if(argv(prio) != "") this.f = stof(argv(prio)) * (w); else this.f = (!autocvar_g_campaign) * (2 * random() - 1) * (r) * (w); ++prio + #define READSKILL(f, w, r) MACRO_BEGIN { \ + if(argv(prio) != "") \ + this.f = stof(argv(prio)) * w; \ + else \ + this.f = (!autocvar_g_campaign) * (2 * random() - 1) * r * w; \ + prio++; \ + } MACRO_END //print(bot_name, ": ping=", argv(9), "\n"); READSKILL(havocbot_keyboardskill, 0.5, 0.5); // keyboard skill @@ -366,14 +374,13 @@ void bot_relinkplayerlist() if(prevbot) prevbot.nextbot = it; else - { bot_list = it; - bot_list.nextbot = NULL; - } prevbot = it; ++currentbots; } }); + if(prevbot) + prevbot.nextbot = NULL; LOG_TRACE("relink: ", ftos(currentbots), " bots seen."); bot_strategytoken = bot_list; bot_strategytoken_taken = true; @@ -526,18 +533,18 @@ void autoskill(float factor) bestbot = max(bestbot, it.totalfrags - it.totalfrags_lastcheck); )); - LOG_TRACE("autoskill: best player got ", ftos(bestplayer), ", "); - LOG_TRACE("best bot got ", ftos(bestbot), "; "); + LOG_DEBUG("autoskill: best player got ", ftos(bestplayer), ", "); + LOG_DEBUG("best bot got ", ftos(bestbot), "; "); if(bestbot < 0 || bestplayer < 0) { - LOG_TRACE("not doing anything"); + LOG_DEBUG("not doing anything"); // don't return, let it reset all counters below } else if(bestbot <= bestplayer * factor - 2) { if(autocvar_skill < 17) { - LOG_TRACE("2 frags difference, increasing skill"); + LOG_DEBUG("2 frags difference, increasing skill"); cvar_set("skill", ftos(autocvar_skill + 1)); bprint("^2SKILL UP!^7 Now at level ", ftos(autocvar_skill), "\n"); } @@ -546,14 +553,14 @@ void autoskill(float factor) { if(autocvar_skill > 0) { - LOG_TRACE("2 frags difference, decreasing skill"); + LOG_DEBUG("2 frags difference, decreasing skill"); cvar_set("skill", ftos(autocvar_skill - 1)); bprint("^1SKILL DOWN!^7 Now at level ", ftos(autocvar_skill), "\n"); } } else { - LOG_TRACE("not doing anything"); + LOG_DEBUG("not doing anything"); return; // don't reset counters, wait for them to accumulate } @@ -564,9 +571,8 @@ void autoskill(float factor) void bot_calculate_stepheightvec() { stepheightvec = autocvar_sv_stepheight * '0 0 1'; - jumpstepheightvec = stepheightvec + - ((autocvar_sv_jumpvelocity * autocvar_sv_jumpvelocity) / (2 * autocvar_sv_gravity)) * '0 0 0.85'; - // 0.75 factor is for safety to make the jumps easy + jumpheight_vec = (autocvar_sv_jumpvelocity ** 2) / (2 * autocvar_sv_gravity) * '0 0 1'; + jumpstepheightvec = stepheightvec + jumpheight_vec * 0.85; // reduce it a bit to make the jumps easy } float bot_fixcount() @@ -666,7 +672,7 @@ void bot_clear(entity this) void bot_serverframe() { - if (gameover) + if (game_stopped) return; if (time < 2) @@ -721,7 +727,7 @@ void bot_serverframe() botframe_spawnedwaypoints = true; waypoint_loadall(); if(!waypoint_load_links()) - waypoint_schedulerelinkall(); + waypoint_schedulerelinkall(); // link all the autogenerated waypoints (teleporters) } if (bot_list)