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
|
||||
int present = 0;
|
||||
int targethuman = 0;
|
||||
int buttons_old;
|
||||
int flags_old;
|
||||
bool client_stuck_g[MAXPLAYERS + 1];
|
||||
bool round_start_stuck = false;
|
||||
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))
|
||||
{
|
||||
char keyinput[generic_length * 5];
|
||||
if (buttons & IN_JUMP)
|
||||
Format(keyinput, sizeof(keyinput), "+jump; wait 5; ", keyinput);
|
||||
if (buttons & IN_DUCK)
|
||||
Format(keyinput, sizeof(keyinput), "%s +duck; wait 5; ", keyinput);
|
||||
if (buttons & IN_JUMP || buttons & IN_DUCK)
|
||||
Format(keyinput, sizeof(keyinput), "+jump; wait 5; +duck; wait 5; ", keyinput);
|
||||
if (strlen(keyinput) > 0)
|
||||
{
|
||||
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)
|
||||
@ -201,7 +214,6 @@ public Action recursive_pressing(Handle timer, any data)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//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);
|
||||
float min_distance_target_human = 0.2;
|
||||
//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;
|
||||
face_call(target_enemy);
|
||||
if (dist_target > 0 && dist_target < min_distance_target_human && enemy_distance > min_enemy_distance)
|
||||
{
|
||||
chasing_enemy = true;
|
||||
face_call(target_enemy);
|
||||
}
|
||||
else if (!IsValidClient(targethuman))
|
||||
{
|
||||
chasing_enemy = true;
|
||||
face_call(target_enemy);
|
||||
}
|
||||
}
|
||||
//zombie aiming for human
|
||||
if (0 < enemy_distance <= dist_target)
|
||||
int zm_multiplier = 2;
|
||||
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;
|
||||
//zombie aiming for human
|
||||
if (targeteam == 2 && min_enemy_distance * min_distance_mult > enemy_distance && enemy_distance > 0)
|
||||
{
|
||||
chasing_enemy = true;
|
||||
@ -257,8 +280,6 @@ public Action recursive_pressing(Handle timer, any data)
|
||||
if (round_start_stuck)
|
||||
bot_stuck = is_bot_stuck();
|
||||
}
|
||||
//TODO detect gaps and jump perfectly over them
|
||||
|
||||
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);
|
||||
else
|
||||
|
Loading…
Reference in New Issue
Block a user