pretty simple solution to jump over gaps and some slight changes to targeting
This commit is contained in:
parent
7e03b2cf8b
commit
b137b526e7
@ -13,6 +13,8 @@
|
|||||||
//#pragma newdecls required
|
//#pragma newdecls required
|
||||||
int present = 0;
|
int present = 0;
|
||||||
int targethuman = 0;
|
int targethuman = 0;
|
||||||
|
int buttons_old;
|
||||||
|
int flags_old;
|
||||||
bool client_stuck_g[MAXPLAYERS + 1];
|
bool client_stuck_g[MAXPLAYERS + 1];
|
||||||
bool round_start_stuck = false;
|
bool round_start_stuck = false;
|
||||||
float bot_old_coords[3];
|
float bot_old_coords[3];
|
||||||
@ -140,10 +142,8 @@ public void OnPlayerRunCmdPost(int client, int buttons, int impulse, const float
|
|||||||
if (client == targethuman && round_start_stuck && IsValidClient(present))
|
if (client == targethuman && round_start_stuck && IsValidClient(present))
|
||||||
{
|
{
|
||||||
char keyinput[generic_length * 5];
|
char keyinput[generic_length * 5];
|
||||||
if (buttons & IN_JUMP)
|
if (buttons & IN_JUMP || buttons & IN_DUCK)
|
||||||
Format(keyinput, sizeof(keyinput), "+jump; wait 5; ", keyinput);
|
Format(keyinput, sizeof(keyinput), "+jump; wait 5; +duck; wait 5; ", keyinput);
|
||||||
if (buttons & IN_DUCK)
|
|
||||||
Format(keyinput, sizeof(keyinput), "%s +duck; wait 5; ", keyinput);
|
|
||||||
if (strlen(keyinput) > 0)
|
if (strlen(keyinput) > 0)
|
||||||
{
|
{
|
||||||
float pos[3];
|
float pos[3];
|
||||||
@ -157,6 +157,19 @@ public void OnPlayerRunCmdPost(int client, int buttons, int impulse, const float
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (client == present)
|
||||||
|
{
|
||||||
|
int flags = GetEntityFlags(client);
|
||||||
|
if (!(flags & FL_ONGROUND) && (flags_old & FL_ONGROUND) && !(buttons_old & IN_JUMP))
|
||||||
|
{
|
||||||
|
float Vel[3];
|
||||||
|
GetEntPropVector(client, Prop_Data, "m_vecVelocity", Vel);
|
||||||
|
Vel[2] = 300.0;
|
||||||
|
TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, Vel);
|
||||||
|
}
|
||||||
|
buttons_old = buttons;
|
||||||
|
flags_old = flags;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Action recursive_pressing(Handle timer, any data)
|
public Action recursive_pressing(Handle timer, any data)
|
||||||
@ -201,7 +214,6 @@ public Action recursive_pressing(Handle timer, any data)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//check ladder = 0, water = 1, in air(surfing) = 2, downhill = 3
|
//check ladder = 0, water = 1, in air(surfing) = 2, downhill = 3
|
||||||
@ -238,14 +250,25 @@ public Action recursive_pressing(Handle timer, any data)
|
|||||||
enemy_distance = get_power_distance(present, pos);
|
enemy_distance = get_power_distance(present, pos);
|
||||||
float min_distance_target_human = 0.2;
|
float min_distance_target_human = 0.2;
|
||||||
//human aiming for zombie
|
//human aiming for zombie
|
||||||
if (targeteam == 3 && dist_target > 0 && dist_target < min_distance_target_human && enemy_distance > min_enemy_distance)
|
if (targeteam == 3)
|
||||||
{
|
{
|
||||||
chasing_enemy = true;
|
if (dist_target > 0 && dist_target < min_distance_target_human && enemy_distance > min_enemy_distance)
|
||||||
face_call(target_enemy);
|
{
|
||||||
|
chasing_enemy = true;
|
||||||
|
face_call(target_enemy);
|
||||||
|
}
|
||||||
|
else if (!IsValidClient(targethuman))
|
||||||
|
{
|
||||||
|
chasing_enemy = true;
|
||||||
|
face_call(target_enemy);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//zombie aiming for human
|
int zm_multiplier = 2;
|
||||||
if (0 < enemy_distance <= dist_target)
|
if (dist_target < min_enemy_distance)
|
||||||
|
zm_multiplier = min_distance_mult;
|
||||||
|
if (0 < enemy_distance <= dist_target * zm_multiplier)
|
||||||
min_enemy_distance = min_enemy_distance * min_distance_mult;
|
min_enemy_distance = min_enemy_distance * min_distance_mult;
|
||||||
|
//zombie aiming for human
|
||||||
if (targeteam == 2 && min_enemy_distance * min_distance_mult > enemy_distance && enemy_distance > 0)
|
if (targeteam == 2 && min_enemy_distance * min_distance_mult > enemy_distance && enemy_distance > 0)
|
||||||
{
|
{
|
||||||
chasing_enemy = true;
|
chasing_enemy = true;
|
||||||
@ -257,8 +280,6 @@ public Action recursive_pressing(Handle timer, any data)
|
|||||||
if (round_start_stuck)
|
if (round_start_stuck)
|
||||||
bot_stuck = is_bot_stuck();
|
bot_stuck = is_bot_stuck();
|
||||||
}
|
}
|
||||||
//TODO detect gaps and jump perfectly over them
|
|
||||||
|
|
||||||
if (IsValidClient(targethuman))
|
if (IsValidClient(targethuman))
|
||||||
Format(message, sizeof(message), "dist_target: %f targethuman: %N bot_on_type: %i enemy_distance: %f bot_stuck: %i targeteam: %i", dist_target, targethuman, bot_on_type, enemy_distance, bot_stuck, targeteam);
|
Format(message, sizeof(message), "dist_target: %f targethuman: %N bot_on_type: %i enemy_distance: %f bot_stuck: %i targeteam: %i", dist_target, targethuman, bot_on_type, enemy_distance, bot_stuck, targeteam);
|
||||||
else
|
else
|
||||||
|
Loading…
Reference in New Issue
Block a user