Merge pull request #113 from ineedbots/develop
Add BotRemoteAngles and BotAngles
This commit is contained in:
commit
4394864b99
@ -30,6 +30,8 @@ namespace Components
|
|||||||
std::uint16_t lastAltWeapon;
|
std::uint16_t lastAltWeapon;
|
||||||
std::uint8_t meleeDist;
|
std::uint8_t meleeDist;
|
||||||
float meleeYaw;
|
float meleeYaw;
|
||||||
|
std::int8_t remoteAngles[2];
|
||||||
|
float angles[3];
|
||||||
bool active;
|
bool active;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -54,10 +56,11 @@ namespace Components
|
|||||||
{ "sprint", Game::CMD_BUTTON_SPRINT },
|
{ "sprint", Game::CMD_BUTTON_SPRINT },
|
||||||
{ "leanleft", Game::CMD_BUTTON_LEAN_LEFT },
|
{ "leanleft", Game::CMD_BUTTON_LEAN_LEFT },
|
||||||
{ "leanright", Game::CMD_BUTTON_LEAN_RIGHT },
|
{ "leanright", Game::CMD_BUTTON_LEAN_RIGHT },
|
||||||
{ "ads", Game::CMD_BUTTON_ADS },
|
{ "ads", Game::CMD_BUTTON_ADS | Game::CMD_BUTTON_THROW },
|
||||||
{ "holdbreath", Game::CMD_BUTTON_BREATH },
|
{ "holdbreath", Game::CMD_BUTTON_BREATH },
|
||||||
{ "usereload", Game::CMD_BUTTON_USE_RELOAD },
|
{ "usereload", Game::CMD_BUTTON_USE_RELOAD },
|
||||||
{ "activate", Game::CMD_BUTTON_ACTIVATE },
|
{ "activate", Game::CMD_BUTTON_ACTIVATE },
|
||||||
|
{ "remote", Game::CMD_BUTTON_REMOTE },
|
||||||
};
|
};
|
||||||
|
|
||||||
void Bots::UpdateBotNames()
|
void Bots::UpdateBotNames()
|
||||||
@ -214,7 +217,10 @@ namespace Components
|
|||||||
}
|
}
|
||||||
|
|
||||||
ZeroMemory(&g_botai[entref.entnum], sizeof(BotMovementInfo));
|
ZeroMemory(&g_botai[entref.entnum], sizeof(BotMovementInfo));
|
||||||
g_botai[entref.entnum].weapon = 1;
|
g_botai[entref.entnum].weapon = static_cast<std::uint16_t>(ent->client->ps.weapCommon.weapon);
|
||||||
|
g_botai[entref.entnum].angles[0] = ent->client->ps.viewangles[0];
|
||||||
|
g_botai[entref.entnum].angles[1] = ent->client->ps.viewangles[1];
|
||||||
|
g_botai[entref.entnum].angles[2] = ent->client->ps.viewangles[2];
|
||||||
g_botai[entref.entnum].active = true;
|
g_botai[entref.entnum].active = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -311,6 +317,43 @@ namespace Components
|
|||||||
g_botai[entref.entnum].meleeDist = static_cast<int8_t>(dist);
|
g_botai[entref.entnum].meleeDist = static_cast<int8_t>(dist);
|
||||||
g_botai[entref.entnum].active = true;
|
g_botai[entref.entnum].active = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
GSC::Script::AddMethod("BotRemoteAngles", [](const Game::scr_entref_t entref) // Usage: <bot> BotRemoteAngles(<int>, <int>);
|
||||||
|
{
|
||||||
|
const auto* ent = GSC::Script::Scr_GetPlayerEntity(entref);
|
||||||
|
if (!Game::SV_IsTestClient(ent->s.number))
|
||||||
|
{
|
||||||
|
Game::Scr_Error("BotRemoteAngles: Can only call on a bot!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto pitch = std::clamp<int>(Game::Scr_GetInt(0), std::numeric_limits<char>::min(), std::numeric_limits<char>::max());
|
||||||
|
const auto yaw = std::clamp<int>(Game::Scr_GetInt(1), std::numeric_limits<char>::min(), std::numeric_limits<char>::max());
|
||||||
|
|
||||||
|
g_botai[entref.entnum].remoteAngles[0] = static_cast<int8_t>(pitch);
|
||||||
|
g_botai[entref.entnum].remoteAngles[1] = static_cast<int8_t>(yaw);
|
||||||
|
g_botai[entref.entnum].active = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
GSC::Script::AddMethod("BotAngles", [](const Game::scr_entref_t entref) // Usage: <bot> BotAngles(<float>, <float>, <float>);
|
||||||
|
{
|
||||||
|
const auto* ent = GSC::Script::Scr_GetPlayerEntity(entref);
|
||||||
|
if (!Game::SV_IsTestClient(ent->s.number))
|
||||||
|
{
|
||||||
|
Game::Scr_Error("BotAngles: Can only call on a bot!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto pitch = Game::Scr_GetFloat(0);
|
||||||
|
const auto yaw = Game::Scr_GetFloat(1);
|
||||||
|
const auto roll = Game::Scr_GetFloat(2);
|
||||||
|
|
||||||
|
g_botai[entref.entnum].angles[0] = pitch;
|
||||||
|
g_botai[entref.entnum].angles[1] = yaw;
|
||||||
|
g_botai[entref.entnum].angles[2] = roll;
|
||||||
|
|
||||||
|
g_botai[entref.entnum].active = true;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void Bots::BotAiAction(Game::client_s* cl)
|
void Bots::BotAiAction(Game::client_s* cl)
|
||||||
@ -341,10 +384,12 @@ namespace Components
|
|||||||
userCmd.primaryWeaponForAltMode = g_botai[clientNum].lastAltWeapon;
|
userCmd.primaryWeaponForAltMode = g_botai[clientNum].lastAltWeapon;
|
||||||
userCmd.meleeChargeYaw = g_botai[clientNum].meleeYaw;
|
userCmd.meleeChargeYaw = g_botai[clientNum].meleeYaw;
|
||||||
userCmd.meleeChargeDist = g_botai[clientNum].meleeDist;
|
userCmd.meleeChargeDist = g_botai[clientNum].meleeDist;
|
||||||
|
userCmd.remoteControlAngles[0] = g_botai[clientNum].remoteAngles[0];
|
||||||
|
userCmd.remoteControlAngles[1] = g_botai[clientNum].remoteAngles[1];
|
||||||
|
|
||||||
userCmd.angles[0] = ANGLE2SHORT((cl->gentity->client->ps.viewangles[0] - cl->gentity->client->ps.delta_angles[0]));
|
userCmd.angles[0] = ANGLE2SHORT(g_botai[clientNum].angles[0] - cl->gentity->client->ps.delta_angles[0]);
|
||||||
userCmd.angles[1] = ANGLE2SHORT((cl->gentity->client->ps.viewangles[1] - cl->gentity->client->ps.delta_angles[1]));
|
userCmd.angles[1] = ANGLE2SHORT(g_botai[clientNum].angles[1] - cl->gentity->client->ps.delta_angles[1]);
|
||||||
userCmd.angles[2] = ANGLE2SHORT((cl->gentity->client->ps.viewangles[2] - cl->gentity->client->ps.delta_angles[2]));
|
userCmd.angles[2] = ANGLE2SHORT(g_botai[clientNum].angles[2] - cl->gentity->client->ps.delta_angles[2]);
|
||||||
|
|
||||||
Game::SV_ClientThink(cl, &userCmd);
|
Game::SV_ClientThink(cl, &userCmd);
|
||||||
}
|
}
|
||||||
|
@ -1978,6 +1978,7 @@ namespace Game
|
|||||||
CMD_BUTTON_FRAG = 1 << 14,
|
CMD_BUTTON_FRAG = 1 << 14,
|
||||||
CMD_BUTTON_OFFHAND_SECONDARY = 1 << 15,
|
CMD_BUTTON_OFFHAND_SECONDARY = 1 << 15,
|
||||||
CMD_BUTTON_THROW = 1 << 19,
|
CMD_BUTTON_THROW = 1 << 19,
|
||||||
|
CMD_BUTTON_REMOTE = 1 << 20,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct usercmd_s
|
struct usercmd_s
|
||||||
|
Loading…
Reference in New Issue
Block a user