RSSy MYGO.pl Opublikowano Luty 11, 2022 o 23:32 RSSy Udostępnij Opublikowano Luty 11, 2022 o 23:32 Hello I have this code that makes the grenades follow the enemy, I wanted to know if it is possible (and how) to make the player follow other players? Or if it is possible to create an entity that follows players, but the player in turn chases them through the entity? PHP Code: #define AMMOX_HEGRENADE 12 public plugin_init() { // FIND THROWN GRENADES register_event("AmmoX", "on_AmmoX", "b") } //---------------------------------------------------------------------------------------------- public on_AmmoX(id) { if ( !is_user_alive(id) ) return new iAmmoType = read_data(1) new iAmmoCount = read_data(2) if ( iAmmoType == AMMOX_HEGRENADE ) { if ( iAmmoCount == 0 ) { set_task(get_cvar_float("give_grenadetimer"), "give_weapons", id) new iGrenade = -1 while ( (iGrenade = find_ent_by_class(iGrenade, "grenade")) > 0 ) { // Set speed here since it gets called so much gNadeSpeed = get_cvar_float("henade_nadespeed") if ( gNadeSpeed <= 0.0 ) gNadeSpeed = 1.0 gPauseEntity[iGrenade] = true new parm[3] parm[0] = iGrenade parm[1] = id // If this changes so must nade_reset time or cooldown may not be set // The longer the nade_rest time the more chance for error with attacker identity set_task(1.0, "find_target", 0, parm, 3) // Set the fuse set_task(get_cvar_float("henade_fuse"), "unpause_nade", iGrenade, parm, 2) } } } else if ( iAmmoCount > 0 ) { // Got a new nade remove the timer remove_task(id) } } //---------------------------------------------------------------------------------------------- public find_target(parm[]) { new grenadeID = parm[0] new grenadeOwner = parm[1] if ( is_valid_ent(grenadeID) ) { new shortestDistance = 9999 new nearestPlayer = 0 new distance, team[33], rgb[3], players[SH_MAXSLOTS], pnum get_user_team(grenadeOwner, team, 32) // Find all alive enemies and set trail color if ( cs_get_user_team(grenadeOwner) == CS_TEAM_CT ) { get_players(players, pnum, "ae", "TERRORIST") rgb = {50, 50, 175} } else { get_players(players, pnum, "ae", "CT") rgb = {175, 50, 50} } // Find the closest enemy for (new i = 0; i < pnum; i++) { if ( !is_user_alive(players[i]) ) continue distance = get_entity_distance(players[i], grenadeID) if ( distance <= shortestDistance ) { shortestDistance = distance nearestPlayer = players[i] } } // Make the nade seek that enemy if one exists if ( nearestPlayer > 0 ) { // Trail on grenade message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(22) // TE_BEAMFOLLOW write_short(grenadeID) // entity:attachment to follow write_short(gSpriteTrail) // sprite index write_byte(10) // life in 0.1's write_byte(3) // line width in 0.1's write_byte(rgb[0]) // r write_byte(rgb[1]) // g write_byte(rgb[2]) // b switch(random_num(0,2)) { case 0:write_byte(64) // brightness case 1:write_byte(128) case 2:write_byte(192) } message_end() parm[2] = nearestPlayer set_task(0.1, "seek_target", grenadeID+1000, parm, 3, "b") } } } //---------------------------------------------------------------------------------------------- public seek_target(parm[]) { new grenade = parm[0] new target = parm[2] if ( !is_valid_ent(grenade) ) { remove_task(grenade+1000) return } if ( is_user_alive(target) ) { entity_set_follow(grenade, target) } else { // Remove the seek loop remove_task(grenade+1000) // Stop the Trail message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(99) //TE_KILLBEAM write_short(grenade) // entity message_end() // Find a new player to seek set_task(0.1, "find_target", 0, parm, 3) } } //---------------------------------------------------------------------------------------------- stock entity_set_follow(entity, target) { if ( !is_valid_ent(entity) || !is_user_alive(target) ) return 0 new Float:fl_Origin[3], Float:fl_EntOrigin[3] entity_get_vector(target, EV_VEC_origin, fl_Origin) entity_get_vector(entity, EV_VEC_origin, fl_EntOrigin) new Float:fl_InvTime = (gNadeSpeed / vector_distance(fl_Origin, fl_EntOrigin)) new Float:fl_Distance[3] fl_Distance[0] = fl_Origin[0] - fl_EntOrigin[0] fl_Distance[1] = fl_Origin[1] - fl_EntOrigin[1] fl_Distance[2] = fl_Origin[2] - fl_EntOrigin[2] new Float:fl_Velocity[3] fl_Velocity[0] = fl_Distance[0] * fl_InvTime fl_Velocity[1] = fl_Distance[1] * fl_InvTime fl_Velocity[2] = fl_Distance[2] * fl_InvTime entity_set_vector(entity, EV_VEC_velocity, fl_Velocity) new Float:fl_NewAngle[3] vector_to_angle(fl_Velocity, fl_NewAngle) entity_set_vector(entity, EV_VEC_angles, fl_NewAngle) return 1 } //---------------------------------------------------------------------------------------------- Przeczytaj cały wpis Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi