Exemple #1
0
        def on_position_update(self):
            if not self.local:
                return connection.on_position_update(self)
            pos = self.world_object.position

            if self.protocol.game_mode == CTF_MODE:
                other_flag = self.team.other.flag
                if vector_collision(pos, self.team.base):
                    if other_flag.player is self:
                        self.capture_flag()
                if not other_flag.player and vector_collision(pos, other_flag):
                    self.take_flag()
                    # go home and ignore enemies
                    self.go_to(self.team.base.get())
                    self.acquire_targets = False
                    if self.grenade_call and self.grenade_call.active():
                        self.grenade_call.cancel()
                    self.grenade_call = None
            elif self.protocol.game_mode == TC_MODE:
                for entity in self.protocol.entities:
                    collides = vector_collision(entity,
                                                self.world_object.position,
                                                TC_CAPTURE_DISTANCE)
                    if self in entity.players:
                        if not collides:
                            entity.remove_player(self)
                    else:
                        if collides:
                            entity.add_player(self)
            return connection.on_position_update(self)
Exemple #2
0
 def on_position_update(self, player):
     target_flag = self.get_target_flag(player)
     if vector_collision(player.world_object.position, player.team.base):
         if target_flag.player is self:
             player.capture_flag()
         player.check_refill()
     if target_flag.player is None and vector_collision(
             player.position, target_flag):
         player.take_flag()
Exemple #3
0
 def on_position_update(self, connection):
     for entity in self.protocol.entities:
         collides = vector_collision(
             entity, connection.world_object.position, TC_CAPTURE_DISTANCE)
         if self in entity.players:
             if not collides:
                 entity.remove_player(self)
         else:
             if collides:
                 entity.add_player(self)
         if collides and vector_collision(entity,
                                          connection.world_object.position):
             connection.check_refill()
Exemple #4
0
 def on_position_update_recieved(self, contained):
     if not self.hp:
         return
     current_time = reactor.seconds()
     last_update = self.last_position_update
     self.last_position_update = current_time
     if last_update is not None:
         dt = current_time - last_update
         if dt < MAX_POSITION_RATE:
             self.set_location()
             return
     x, y, z = contained.x, contained.y, contained.z
     if check_nan(x, y, z):
         self.on_hack_attempt(
             'Invalid position data received')
         return
     if not self.is_valid_position(x, y, z):
         # vanilla behaviour
         self.set_location()
         return
     if not self.freeze_animation:
         self.world_object.set_position(x, y, z)
         self.on_position_update()
     if self.filter_visibility_data:
         return
     game_mode = self.protocol.game_mode
     if game_mode == CTF_MODE:
         other_flag = self.team.other.flag
         if vector_collision(self.world_object.position,
                             self.team.base):
             if other_flag.player is self:
                 self.capture_flag()
             self.check_refill()
         if other_flag.player is None and vector_collision(
                 self.world_object.position, other_flag):
             self.take_flag()
     elif game_mode == TC_MODE:
         for entity in self.protocol.entities:
             collides = vector_collision(
                 entity, self.world_object.position, TC_CAPTURE_DISTANCE)
             if self in entity.players:
                 if not collides:
                     entity.remove_player(self)
             else:
                 if collides:
                     entity.add_player(self)
             if collides and vector_collision(entity,
                                              self.world_object.position):
                 self.check_refill()
Exemple #5
0
 def on_position_update(self):
     if self.protocol.reverse_one_ctf:
         if vector_collision(self.world_object.position, self.team.other.base):
             other_flag = self.team.other.flag
             if other_flag.player is self:
                 connection.capture_flag(self)
     return connection.on_position_update(self)
Exemple #6
0
 def on_position_update(self):
     if self.protocol.reverse_one_ctf:
         if vector_collision(self.world_object.position, self.team.other.base):
             other_flag = self.team.other.flag
             if other_flag.player is self:
                 connection.capture_flag(self)
     return connection.on_position_update(self)
 def on_position_update(self):
     flag = self.team.flag
     if vector_collision(self.world_object.position, flag):
         if not flag.at_start_pos:
             flag.set(*flag.start_pos)
             flag.update()
             flag.at_start_pos = True
             self.protocol.send_chat('%s intel was returned to the initial position by %s!' % (self.team.name, self.name))
     return connection.on_position_update(self)
Exemple #8
0
 def on_position_update(self):
     flag = self.team.flag
     if flag.player is None and flag.out:
         if vector_collision(self.world_object.position, flag):
             flag.out = False
             flag.set(*flag.start)
             flag.update()
             self.protocol.send_chat('%s intel was returned by %s!' %
                                     (self.team.name, self.name),
                                     global_message=None)
     return connection.on_position_update(self)
        def think(self):
            obj = self.world_object
            pos = obj.position

            # find nearby foes
            if self.acquire_targets:
                for player in self.team.other.get_players():
                    if vector_collision(pos, player.world_object.position,
                                        32.0):
                        self.aim_at = player
                        break

            # replicate player functionality
            if self.protocol.game_mode == CTF_MODE:
                other_flag = self.team.other.flag
                if vector_collision(pos, self.team.base):
                    if other_flag.player is self:
                        self.capture_flag()
                    self.check_refill()
                if not other_flag.player and vector_collision(pos, other_flag):
                    self.take_flag()
Exemple #10
0
        def wield_spade(self):
            for player in self.protocol.players.values():
                if player.hp <= 0:
                    continue
                position1 = self.world_object.position
                position2 = player.world_object.position
                if not vector_collision(position1, position2, MELEE_DISTANCE):
                    continue
                valid_hit = self.world_object.validate_hit(
                    player.world_object, MELEE, HIT_TOLERANCE)
                if not valid_hit:
                    continue
                if player.team is not self.team:
                    speed = self.world_object.velocity.length()
                    hit_amount = 20 * speed + 15
                    type = MELEE_KILL
                    returned = self.on_hit(hit_amount, player, type, None)
                    if returned == False:
                        continue
                    elif returned is not None:
                        hit_amount = returned
                    player.hit(hit_amount, self, type)
                return

            loc = self.world_object.cast_ray(6)  # 6 = MAX_DIG_DISTANCE
            if loc:
                map = self.protocol.map
                x, y, z = loc
                if z >= 62:
                    return
                if not map.get_solid(x, y, z):
                    return
                pos = position1
                if not collision_3d(pos.x, pos.y, pos.z, x, y, z, 6):
                    return
                value = DESTROY_BLOCK
                if self.on_block_destroy(x, y, z, value) == False:
                    return
                if map.destroy_point(x, y, z):
                    self.on_block_removed(x, y, z)
                block_action.x = x
                block_action.y = y
                block_action.z = z
                block_action.value = value
                block_action.player_id = self.player_id
                self.protocol.send_contained(block_action, save=True)
                self.protocol.update_entities()
Exemple #11
0
 def on_hit_recieved(self, contained):
     if not self.hp:
         return
     world_object = self.world_object
     value = contained.value
     is_melee = value == MELEE
     if not is_melee and self.weapon_object.is_empty():
         return
     try:
         player = self.protocol.players[contained.player_id]
     except KeyError:
         return
     valid_hit = world_object.validate_hit(player.world_object,
                                           value, HIT_TOLERANCE)
     if not valid_hit:
         return
     position1 = world_object.position
     position2 = player.world_object.position
     if is_melee:
         if not vector_collision(position1, position2,
                                 MELEE_DISTANCE):
             return
         hit_amount = self.protocol.melee_damage
     else:
         hit_amount = self.weapon_object.get_damage(
             value, position1, position2)
     if is_melee:
         kill_type = MELEE_KILL
     elif contained.value == HEAD:
         kill_type = HEADSHOT_KILL
     else:
         kill_type = WEAPON_KILL
     returned = self.on_hit(hit_amount, player, kill_type, None)
     if returned == False:
         return
     elif returned is not None:
         hit_amount = returned
     player.hit(hit_amount, self, kill_type)
Exemple #12
0
        def think(self):
            obj = self.world_object
            pos = obj.position
            found = ()
                
            # find nearby foes
            if self.acquire_targets:
                for player in self.team.other.get_players():
                    if vector_collision(pos, player.world_object.position, 108.0):
                        if not self.aim_at:
                            if obj.can_see(*player.world_object.position.get()): 
                                self.aim_at = player
                        else:
                            if point_distance2(self, player) < point_distance2(self, self.aim_at):
                                if obj.can_see(*player.world_object.position.get()) and self.aim_at is not player:
                                    self.aim_at = player
                       
            if self.aim_at:
                
                self.acquire_targets = False
                dist = point_distance2(self, self.aim_at )

                if self.target_orientation.z < -0.25:

                    cont = block_line
                    cont.player_id = self.player_id
                    cont.x1 = (pos.x)
                    cont.y1 = (pos.y)
                    cont.z1 = (pos.z)
                    cont.x2 = (pos.x)
                    cont.y2 = (pos.y)
                    cont.z2 = (pos.z+2)

                    self.input.add("secondary_fire")

            if random.random() > 0.95 or self.aim_at is None:
                if self.team.other.flag.player is not self:
                    self.acquire_targets = True
                
            if self.aim_at and not obj.can_see(*self.aim_at.world_object.position.get()) and not self.terminator:
                self.aim_at = None
                
            # replicate player functionality
            if self.protocol.game_mode == CTF_MODE:
                
                other_flag = self.team.other.flag
                our_flag = self.team.flag
                if self.aim_at is None and our_flag.player and other_flag.player is not self:
                    self.aim_at = our_flag.player

                if self.aim_at is None and other_flag.player is self: 
                    self.aim.set_vector( self.team.base )
                    self.aim -= pos
                    distance_to_aim = self.aim.normalize() # don't move this line
                    self.target_orientation.set_vector(self.aim )
                    self.input.add("up")
                    
                elif other_flag.player is not self:
                    self.aim.set_vector( other_flag )
                    self.aim -= pos
                    distance_to_aim = self.aim.normalize() # don't move this line
                    self.target_orientation.set_vector(self.aim )
                    self.input.add("up")
                    
                if vector_collision(pos, self.team.base):
                    if other_flag.player is self:
                        self.capture_flag()
                    self.check_refill()
                    
                if not other_flag.player and vector_collision(pos, other_flag):
                    self.take_flag()

                    
            if self.hp < 30 and self.hp > 0 and self.terminator:
                if self.suicide_call is None:
                    self.set_tool( GRENADE_TOOL )
                    self.suicide_call = callLater(.2, self.suicide_grenade,
                        1.0)

            if random.random() >=0.15:
                self.input.add("secondary_fire")

                 
            if random.random() >=0.92 or self.target_orientation.z < -0.25:
                self.input.add("jump")
                if random.random() >=0.995:
                    self.on_block_destroy( pos.x, pos.y, pos.z, DESTROY_BLOCK )
                    
            player = self
            location = player.world_object.cast_ray( 3 )
            
            if location:
                px, py, pz = player.get_location()
                x, y, z = location
                map = player.protocol.map
                            
 
                if not collision_3d(px, py, pz, x, y, z, 3):
                    return
                self.input.add("primary_fire")
                if player.on_block_destroy(x, y, z, DESTROY_BLOCK) == False:
                    return
                if z > 62 or not destroy_block(player.protocol, x, y, z):
                    return
                if map.get_solid(x, y, z):
                    map.remove_point(x, y, z)
                    map.check_node(x, y, z, True)
                player.on_block_removed(x, y, z)
 def on_position_update(self):
     if vector_collision(self.world_object.position, self.team.other.base):
         self.refill()
     return connection.on_position_update(self)
"""
Exemple #15
0
"""