Source code for entities.engines.csgo.csgo
# ../entities/engines/csgo/csgo.py
"""Provides CS:GO game specific Entity based functionality."""
# =============================================================================
# >> IMPORTS
# =============================================================================
# Source.Python
# Entities
from . import Entity as _Entity
from entities import BaseEntityGenerator
from entities.helpers import pointer_from_inthandle
# Weapons
from weapons.manager import weapon_manager
# =============================================================================
# >> GLOBAL VARIABLES
# =============================================================================
_weapon_names_for_definition = {
weapon_manager[weapon].name: values.get('item_definition_index')
for weapon, values in weapon_manager.ini.get('weapons', {}).items()
if values.get('item_definition_index')
}
_weapon_parents = {
weapon_manager[weapon].name: values.get('parent_class')
for weapon, values in weapon_manager.ini.get('weapons', {}).items()
if values.get('parent_class')
}
_parent_weapons = set(_weapon_parents.values())
# =============================================================================
# >> CLASSES
# =============================================================================
[docs]class Entity(_Entity):
"""Class used to interact directly with entities."""
# Instances of this class will be cached by default
caching = True
@classmethod
[docs] def create(cls, classname):
index = _weapon_names_for_definition.get(classname)
if index is not None:
parent_class = _weapon_parents.get(classname)
entity = super().create(parent_class or classname)
entity.item_definition_index = index
else:
entity = super().create(classname)
return entity
@classmethod
[docs] def find(cls, classname):
index = _weapon_names_for_definition.get(classname)
if classname in _weapon_parents and index is not None:
parent_classname = _weapon_parents[classname]
for entity in BaseEntityGenerator(parent_classname, True):
if not entity.is_networked():
continue
if entity.get_network_property_int(
'm_AttributeManager.m_Item.m_iItemDefinitionIndex'
) == index:
return cls(entity.index)
elif classname in _parent_weapons:
for entity in BaseEntityGenerator(classname, True):
if not entity.is_networked():
continue
if entity.get_network_property_int(
'm_AttributeManager.m_Item.m_iItemDefinitionIndex'
) in (index, 0):
return cls(entity.index)
return super().find(classname)
thrower = property(
lambda self: self.__getattr__('thrower'),
lambda self, inthandle: self.set_attacker(pointer_from_inthandle(inthandle))
)