from gsi_handlers.gameplay_archiver import GameplayArchiver
from sims4.gsi.schema import GsiGridSchema
from sims4.log import generate_message_with_callstack
import services
gsi_dump_schema = GsiGridSchema(label='GSI Dump Log')
gsi_dump_schema.add_field('game_time', label='Game Time')
gsi_dump_schema.add_field('gsi_filename', label='Filename')
gsi_dump_schema.add_field('error_log_or_exception', label='Error', width=4)
gsi_dump_schema.add_field('callstack', label='Callstack', width=4)
gsi_dump_archiver = GameplayArchiver('gsi_dump_log', gsi_dump_schema, add_to_archive_enable_functions=True)

def archive_gsi_dump(filename_str, error_str):
    callstack = generate_message_with_callstack('GSI Dump')
    archive_data = {'game_time': str(services.time_service().sim_now), 'gsi_filename': filename_str, 'error_log_or_exception': error_str, 'callstack': callstack}
    gsi_dump_archiver.archive(data=archive_data)
Exemple #2
0
from gsi_handlers.sim_handlers import _get_sim_info_by_id
from sims4.gsi.dispatcher import GsiHandler
from sims4.gsi.schema import GsiGridSchema

familiar_schema = GsiGridSchema(label='Familiars', sim_specific=True)
familiar_schema.add_field('familiar_name', label='Name')
familiar_schema.add_field('familiar_type', label='Type')
familiar_schema.add_field('familiar_active', label='Active')


@GsiHandler('familiar_view', familiar_schema)
def generate_sim_skill_view_data(sim_id: int = None):
    familiar_data = []
    cur_sim_info = _get_sim_info_by_id(sim_id)
    if cur_sim_info is not None:
        familiar_tracker = cur_sim_info.familiar_tracker
        if familiar_tracker is not None:
            active_familiar_id = familiar_tracker.active_familiar_id
            for familiar_info in familiar_tracker:
                if active_familiar_id is None:
                    familiar_active = False
                else:
                    familiar_active = familiar_info.uid == active_familiar_id
                entry = {
                    'familiar_name': familiar_info.raw_name,
                    'familiar_type': str(familiar_info.familiar_type),
                    'familiar_active': str(familiar_active)
                }
                familiar_data.append(entry)
    return familiar_data
from gsi_handlers.gameplay_archiver import GameplayArchiver
from gsi_handlers.gsi_utils import format_enum_name
from performance.performance_commands import get_sim_info_creation_sources
from sims4.gsi.schema import GsiGridSchema, GsiFieldVisualizers
import services
sim_info_lifetime_archive_schema = GsiGridSchema(
    label='Sim Info Lifetime Archive', sim_specific=False)
sim_info_lifetime_archive_schema.add_field('game_time',
                                           label='Game/Sim Time',
                                           type=GsiFieldVisualizers.TIME)
sim_info_lifetime_archive_schema.add_field('total_sim_info_count',
                                           label='Total Sim Infos',
                                           type=GsiFieldVisualizers.INT)
sim_info_lifetime_archive_schema.add_field('event_type',
                                           label='Event Type',
                                           type=GsiFieldVisualizers.STRING)
sim_info_lifetime_archive_schema.add_field('sim_id',
                                           label='Sim ID',
                                           type=GsiFieldVisualizers.INT)
sim_info_lifetime_archive_schema.add_field('sim_name',
                                           label='Sim Name',
                                           type=GsiFieldVisualizers.STRING)
sim_info_lifetime_archive_schema.add_field('creation_source',
                                           label='Creation Source',
                                           type=GsiFieldVisualizers.STRING)
sim_info_lifetime_archive_schema.add_field('situations',
                                           label='Situations',
                                           type=GsiFieldVisualizers.STRING)
sim_info_lifetime_archive_schema.add_field('household_id',
                                           label='Household Id',
                                           type=GsiFieldVisualizers.INT)
Exemple #4
0
from gsi_handlers.gameplay_archiver import GameplayArchiver
from sims4.gsi.dispatcher import GsiHandler
from sims4.gsi.schema import GsiGridSchema, GsiFieldVisualizers
import objects.components.types
import services
game_component_schema = GsiGridSchema(label='Game Component Info')
game_component_schema.add_field('current_game',
                                label='Current Game',
                                type=GsiFieldVisualizers.STRING)
game_component_schema.add_field('target_object',
                                label='Target Object',
                                type=GsiFieldVisualizers.STRING)
game_component_schema.add_field('number_of_players',
                                label='Number Of Players',
                                type=GsiFieldVisualizers.INT)
game_component_schema.add_field('winning_sims',
                                label='Winners',
                                type=GsiFieldVisualizers.STRING)
game_component_schema.add_field('joinable',
                                label='Joinable',
                                type=GsiFieldVisualizers.STRING)
game_component_schema.add_field('requires_setup',
                                label='Requires Setup',
                                type=GsiFieldVisualizers.STRING)
game_component_schema.add_field('game_over',
                                label='Game Over',
                                type=GsiFieldVisualizers.STRING)
game_component_schema.add_field('high_score',
                                label='High Score',
                                type=GsiFieldVisualizers.FLOAT)
game_component_schema.add_field('high_score_sim_ids',
from sims4.gsi.dispatcher import GsiHandler
from sims4.gsi.schema import GsiGridSchema, GsiFieldVisualizers
import services
import sims4.resources
sim_whim_schema = GsiGridSchema(label='Whims/Whims Current', sim_specific=True)
sim_whim_schema.add_field('sim_id', label='Sim ID', hidden=True)
sim_whim_schema.add_field('whim', label='Whim', unique_field=True, width=3)
sim_whim_schema.add_field('instance', label='Instance', width=3)
sim_whim_schema.add_field('whimset', label='Whimset', width=3)
sim_whim_schema.add_field('target', label='Target', width=2)
sim_whim_schema.add_field('value', label='Value', width=1, type=GsiFieldVisualizers.INT)

@GsiHandler('sim_whim_view', sim_whim_schema)
def generate_sim_whim_view_data(sim_id:int=None):
    whim_view_data = []
    sim_info_manager = services.sim_info_manager()
    if sim_info_manager is not None:
        for sim_info in sim_info_manager.objects:
            if sim_info.sim_id == sim_id:
                whim_tracker = sim_info._whim_tracker
                if whim_tracker is None:
                    continue
                for (whim, source_whimset) in whim_tracker.whims_and_parents_gen():
                    whim_data = {'sim_id': str(sim_info.sim_id), 'whim': whim.get_gsi_name(), 'instance': whim.__class__.__name__, 'whimset': source_whimset.__name__, 'target': str(whim_tracker.get_whimset_target(source_whimset)), 'value': whim.score}
                    whim_view_data.append(whim_data)
    return whim_view_data

sim_activeset_schema = GsiGridSchema(label='Whims/Whimsets Active', sim_specific=True)
sim_activeset_schema.add_field('sim_id', label='Sim ID', hidden=True)
sim_activeset_schema.add_field('whimset', label='Whimset', unique_field=True, width=3)
sim_activeset_schema.add_field('priority', label='Priority', width=1, type=GsiFieldVisualizers.INT)
Exemple #6
0
from gsi_handlers.gameplay_archiver import GameplayArchiver
from sims4.gsi.schema import GsiGridSchema, GsiFieldVisualizers

balloon_archive_schema = GsiGridSchema(label='Balloons', sim_specific=True)
balloon_archive_schema.add_field('sim', label='Sim', width=2)
balloon_archive_schema.add_field('interaction', label='Interaction', width=2)
balloon_archive_schema.add_field('balloon_type', label='Type', width=2)
balloon_archive_schema.add_field('icon', label='Icon', width=2)
balloon_archive_schema.add_field('balloon_category', label='Category', width=2)
balloon_archive_schema.add_field('weight',
                                 label='Weight',
                                 type=GsiFieldVisualizers.INT,
                                 width=1)
balloon_archive_schema.add_field('total_weight',
                                 label='Total Weight',
                                 type=GsiFieldVisualizers.INT,
                                 width=1)
with balloon_archive_schema.add_has_many('Considered',
                                         GsiGridSchema) as sub_schema:
    sub_schema.add_field('test_result', label='Test Result', width=2)
    sub_schema.add_field('balloon_type', label='Type', width=2)
    sub_schema.add_field('icon', label='Icon', width=2)
    sub_schema.add_field('weight',
                         label='Weight',
                         type=GsiFieldVisualizers.INT,
                         width=1)
    sub_schema.add_field('balloon_category', label='Category', width=2)
archiver = GameplayArchiver('balloon', balloon_archive_schema)


def archive_balloon_data(sim, interaction, result, icon, entries):
    schema.add_field('size', label='Size', width=0.5)
    schema.add_field('manager', label='Manager', width=1)
    schema.add_field('mask', label='Mask Override', width=1)
    schema.add_field('blockers', label='Blockers(Mgr:Obj:Mask)', width=2.5)
    schema.add_field('tags', label='Barriers(Tag:Mask)', width=1.75)
    schema.add_field('details', label='Message Details', width=5)
    schema.add_view_cheat('distributor.gsi.toggle_op_details',
                          label='Toggle Details')
    with schema.add_view_cheat('distributor.gsi.hide_op',
                               label='Hide Selected Type') as cheat:
        cheat.add_token_param('type')
    schema.add_view_cheat('distributor.gsi.show_all_ops',
                          label='Show All Types')


distributor_archive_schema = GsiGridSchema(label='Distributor Log')
_configure_distributor_schema(distributor_archive_schema)
archiver = GameplayArchiver('Distributor',
                            distributor_archive_schema,
                            max_records=250)
sim_distributor_archive_schema = GsiGridSchema(label='Distributor Log Sim',
                                               sim_specific=True)
_configure_distributor_schema(sim_distributor_archive_schema)
sim_archiver = GameplayArchiver('SimDistributor',
                                sim_distributor_archive_schema,
                                max_records=150)
with sims4.reload.protected(globals()):
    LOG_OP_DETAILS = False
    EXCLUDE_OP_TYPES = {
        DistributorOps_pb2.Operation.HEARTBEAT,
        DistributorOps_pb2.Operation.SET_GAME_TIME
from aspirations.aspiration_tuning import Aspiration
from sims4.gsi.dispatcher import GsiHandler
from sims4.gsi.schema import GsiGridSchema
import aspirations.aspirations
import services
import sims4.resources
from gsi_handlers.gameplay_archiver import GameplayArchiver
aspiration_schema = GsiGridSchema(label='Aspirations', sim_specific=True)
aspiration_schema.add_field('aspiration_uid', label='UId', unique_field=True)
aspiration_schema.add_field('aspiration', label='Aspiration', width=3)
aspiration_schema.add_field('aspiration_complete', label='Done')
aspiration_schema.add_field('display_name', label='DisplayStr', hidden=True)
aspiration_schema.add_field('description', label='DescStr', hidden=True)
aspiration_schema.add_field('auto_select', label='Auto Select', hidden=True)
aspiration_schema.add_field('simId', label='SimId', hidden=True)
with aspiration_schema.add_view_cheat('aspirations.complete_aspiration', label='Complete') as cheat:
    cheat.add_token_param('aspiration_uid')
    cheat.add_token_param('simId')
with aspiration_schema.add_has_many('objectives', GsiGridSchema, label='Objectives') as sub_schema:
    sub_schema.add_field('objective', label='Objective')
    sub_schema.add_field('objective_complete', label='Done')

@GsiHandler('aspiration_view', aspiration_schema)
def generate_aspiration_view_data(sim_id:int=None):
    sim_info = services.sim_info_manager().get(sim_id)
    aspiration_manager = services.get_instance_manager(sims4.resources.Types.ASPIRATION)
    all_aspirations = []
    for aspiration_id in aspiration_manager.types:
        aspiration = aspiration_manager.get(aspiration_id)
        aspiration_data = {}
        aspiration_data['aspiration'] = str(aspiration)
        self.path_cost = 0
        self.dest_spec = None
        self.all_goals = []
        self.path_progress = 0
        self.path_cost_log = []
        self.path_goal_costs = []
        self.possible_constraints = []
        self.possible_path_destinations = {}
        self.all_handles = []
        self.sources_and_destinations = []
        self.transition_templates = []
        self.cur_posture_interaction = None
        self.all_possible_paths = []
        self.all_goal_costs = []

trans_path_archive_schema = GsiGridSchema(label='Transition Log', sim_specific=True)
trans_path_archive_schema.add_field('id', label='ID', hidden=True)
trans_path_archive_schema.add_field('sim_name', label='Sim Name', width=150, hidden=True)
trans_path_archive_schema.add_field('interaction', label='Interaction', width=150)
trans_path_archive_schema.add_field('path_success', label='Success', width=65)
trans_path_archive_schema.add_field('path_progress', label='Progress', width=65)
trans_path_archive_schema.add_field('path', label='Chosen Path', width=450)
trans_path_archive_schema.add_field('destSpec', label='Dest Spec', width=350)
trans_path_archive_schema.add_field('pathCost', label='Cost')
trans_path_archive_schema.add_field('posture_state', label='Posture State', hidden=True)
with trans_path_archive_schema.add_has_many('all_constraints', GsiGridSchema) as sub_schema:
    sub_schema.add_field('build_pass', label='Pass', width=0.15)
    sub_schema.add_field('cur_constraint', label='Constraint')
    sub_schema.add_field('constraint_type', label='Type', width=0.15)
    sub_schema.add_field('constraint_geometry', label='Geometry')
with trans_path_archive_schema.add_has_many('templates', GsiGridSchema) as sub_schema:
from gsi_handlers.gameplay_archiver import GameplayArchiver
from sims4.gsi.schema import GsiGridSchema
ambient_archive_schema = GsiGridSchema(label='Ambient Log')
ambient_archive_schema.add_field('sources', label='Sources')
archiver = GameplayArchiver('ambient', ambient_archive_schema)

def archive_ambient_data(description):
    entry = {}
    entry['sources'] = description
    archiver.archive(data=entry)

from sims4.gsi.dispatcher import GsiHandler
from sims4.gsi.schema import GsiGridSchema, GsiFieldVisualizers
import date_and_time
import services
situation_sim_schema = GsiGridSchema(label='Situation Manager')
situation_sim_schema.add_field('situation_id', label='Situation Id', width=1, unique_field=True)
situation_sim_schema.add_field('situation', label='Situation Name', width=3)
situation_sim_schema.add_field('state', label='State', width=1.5)
situation_sim_schema.add_field('time_left', label='Time Left')
situation_sim_schema.add_field('sim_count', label='Number of Sims', type=GsiFieldVisualizers.INT, width=0.5)
situation_sim_schema.add_field('score', label='Score', type=GsiFieldVisualizers.FLOAT, width=0.5)
situation_sim_schema.add_field('level', label='Level', width=1)
with situation_sim_schema.add_has_many('Sims', GsiGridSchema) as sub_schema:
    sub_schema.add_field('sim_name', label='Sim')
    sub_schema.add_field('sim_score', label='Score', type=GsiFieldVisualizers.FLOAT)
    sub_schema.add_field('sim_job', label='Job')
    sub_schema.add_field('sim_role', label='Role')
    sub_schema.add_field('sim_emotion', label='Emotion')
    sub_schema.add_field('sim_on_active_lot', label='On Active Lot')
with situation_sim_schema.add_has_many('Goals', GsiGridSchema) as sub_schema:
    sub_schema.add_field('goal', label='Goal')
    sub_schema.add_field('goal_set', label='Goal Set')
    sub_schema.add_field('time_created', label='Time Created')
    sub_schema.add_field('time_completed', label='Time Completed')
    sub_schema.add_field('score', label='Score', type=GsiFieldVisualizers.INT, width=1)
with situation_sim_schema.add_has_many('Churn', GsiGridSchema) as sub_schema:
    sub_schema.add_field('sim_job', label='Job')
    sub_schema.add_field('min', label='Min', type=GsiFieldVisualizers.INT, width=1)
    sub_schema.add_field('max', label='Max', type=GsiFieldVisualizers.INT, width=1)
    sub_schema.add_field('here', label='Sims Here', type=GsiFieldVisualizers.INT, width=1)
    sub_schema.add_field('coming', label='Sims Coming', type=GsiFieldVisualizers.INT, width=1)
from gsi_handlers.gameplay_archiver import GameplayArchiver
from sims4.gsi.dispatcher import GsiHandler
from sims4.gsi.schema import GsiGridSchema, GsiFieldVisualizers
import objects.components.types
import services
game_component_schema = GsiGridSchema(label='Game Component Info')
game_component_schema.add_field('current_game', label='Current Game', type=GsiFieldVisualizers.STRING)
game_component_schema.add_field('target_object', label='Target Object', type=GsiFieldVisualizers.STRING)
game_component_schema.add_field('active_sims', label='Active Sims', type=GsiFieldVisualizers.STRING)
game_component_schema.add_field('number_of_players', label='Number Of Players', type=GsiFieldVisualizers.INT)
game_component_schema.add_field('winning_sims', label='Winners', type=GsiFieldVisualizers.STRING)
game_component_schema.add_field('joinable', label='Joinable', type=GsiFieldVisualizers.STRING)
game_component_schema.add_field('requires_setup', label='Requires Setup', type=GsiFieldVisualizers.STRING)
game_component_schema.add_field('game_over', label='Game Over', type=GsiFieldVisualizers.STRING)

@GsiHandler('game_info', game_component_schema)
def generate_game_info_data():
    game_info = []
    for obj in services.object_manager().get_all_objects_with_component_gen(objects.components.types.GAME_COMPONENT):
        if obj.game_component.current_game is None:
            pass
        game = obj.game_component
        if game.active_sims:
            active_sims = ','.join([str(sim) for sim in game.active_sims])
        else:
            active_sims = 'None'
        if game.winning_team is not None:
            winning_sims = ','.join([str(sim) for sim in game.winning_team])
        else:
            winning_sims = 'None'
        entry = {'current_game': str(game.current_game), 'target_object': str(game.target_object), 'active_sims': active_sims, 'number_of_players': str(game.number_of_players), 'winning_sims': winning_sims, 'joinable': str(game.is_joinable()), 'requires_setup': str(game.requires_setup), 'game_over': str(game.game_has_ended)}
from sims4.gsi.dispatcher import GsiHandler
from sims4.gsi.schema import GsiGridSchema, GsiFieldVisualizers
from sims4.resources import Types
import services

def generate_all_careers():
    return [cls.__name__ for cls in services.get_instance_manager(Types.CAREER).types.values()]

sim_career_schema = GsiGridSchema(label='Careers')
sim_career_schema.add_field('sim', label='Sim', width=2, unique_field=True)
sim_career_schema.add_field('sim_id', label='Sim ID', hidden=True)
sim_career_schema.add_field('career_uid', label='UID', hidden=True)
sim_career_schema.add_field('name', label='Name', width=2)
sim_career_schema.add_field('level', label='Level')
sim_career_schema.add_field('time_to_work', label='Time To Work')
sim_career_schema.add_field('current_work_time', label='Current Work')
sim_career_schema.add_field('next_work_time', label='Next Work')
sim_career_schema.add_field('is_work_time', label='Is Work Time')
sim_career_schema.add_field('currently_at_work', label='Currently At Work')
sim_career_schema.add_field('attended_work', label='Attended Work')
sim_career_schema.add_field('work_performance', label='Performance', type=GsiFieldVisualizers.INT)
sim_career_schema.add_field('active_situation_id', label='Situation ID', type=GsiFieldVisualizers.INT)
with sim_career_schema.add_has_many('career_levels', GsiGridSchema, label='Levels') as sub_schema:
    sub_schema.add_field('name', label='Name')
    sub_schema.add_field('simoleons', label='Simoleons/Hr')
    sub_schema.add_field('fired_lvl', label='Fire Lvl')
    sub_schema.add_field('demotion_lvl', label='Demotion Lvl')
    sub_schema.add_field('promote_lvl', label='Promote Lvl')
with sim_career_schema.add_has_many('objectives', GsiGridSchema, label='Current Objectives') as sub_schema:
    sub_schema.add_field('objective', label='Objective')
    sub_schema.add_field('is_complete', label='Complete?')
import itertools
from build_buy import get_object_slotset, get_object_decosize
from interactions import ParticipantType
from interactions.constraints import GLOBAL_STUB_ACTOR, GLOBAL_STUB_TARGET
from interactions.utils.animation import InteractionAsmType
from interactions.utils.animation_reference import get_animation_reference_usage
from objects.components.slot_component import SlotComponent
from objects.slots import get_slot_type_set_from_key, DecorativeSlotTuning
from sims4.gsi.dispatcher import GsiHandler
from sims4.gsi.schema import GsiGridSchema, GsiFieldVisualizers
from sims4.repr_utils import callable_repr
import native.animation
import services
import sims4.resources
slot_type_schema = GsiGridSchema(label='Tuning/Slot Types')
slot_type_schema.add_field('slot_type_name', label='Name', unique_field=True)
slot_type_schema.add_field('slot_type_name_hash', label='Hash', type=GsiFieldVisualizers.INT)
slot_type_schema.add_field('slot_type_name_hashx', label='Hex Hash')
slot_type_schema.add_field('bone_name', label='Bone Name')
slot_type_schema.add_field('bone_name_hash', label='Bone Name Hash', type=GsiFieldVisualizers.INT)
slot_type_schema.add_field('bone_name_hashx', label='Bone Name Hex Hash')
with slot_type_schema.add_has_many('objects', GsiGridSchema, label='Objects that go in this type of slot') as sub_schema:
    sub_schema.add_field('id', label='Definition ID', unique_field=True)
    sub_schema.add_field('name', label='Definition Tuning')
    sub_schema.add_field('object_name', label='Object Tuning')
with slot_type_schema.add_has_many('slot_type_sets', GsiGridSchema, label='Part of these slot type sets') as sub_schema:
    sub_schema.add_field('name', label='Name', unique_field=True)
with slot_type_schema.add_has_many('object_slots', GsiGridSchema, label='Objects with this type of slot') as sub_schema:
    sub_schema.add_field('id', label='Catalog ID', width=0.25, unique_field=True)
    sub_schema.add_field('tuning_id', label='Tuning ID')
    sub_schema.add_field('object_name', label='Object Tuning')
Exemple #15
0
import traceback
from gsi_handlers.gameplay_archiver import GameplayArchiver
from sims4.gsi.schema import GsiGridSchema, GsiFieldVisualizers
import routing
planner_archive_schema = GsiGridSchema(label='Path Planner Log')
planner_archive_schema.add_field('result', label='Result', width=2)
planner_archive_schema.add_field('planner_name', label='Source', width=2)
planner_archive_schema.add_field('planner_id', label='Planner ID', width=2, hidden=True)
planner_archive_schema.add_field('x', label='Start X', type=GsiFieldVisualizers.FLOAT, width=2)
planner_archive_schema.add_field('y', label='Start Y', type=GsiFieldVisualizers.FLOAT, width=2, hidden=True)
planner_archive_schema.add_field('z', label='Start Z', type=GsiFieldVisualizers.FLOAT, width=2)
planner_archive_schema.add_field('qx', label='Start QX', type=GsiFieldVisualizers.FLOAT, width=2, hidden=True)
planner_archive_schema.add_field('qy', label='Start QY', type=GsiFieldVisualizers.FLOAT, width=2, hidden=True)
planner_archive_schema.add_field('qz', label='Start QZ', type=GsiFieldVisualizers.FLOAT, width=2, hidden=True)
planner_archive_schema.add_field('qw', label='Start QW', type=GsiFieldVisualizers.FLOAT, width=2, hidden=True)
planner_archive_schema.add_field('level', label='Start Level', type=GsiFieldVisualizers.INT, width=2)
planner_archive_schema.add_field('ticks', label='Sleep Count', type=GsiFieldVisualizers.INT, width=2)
planner_archive_schema.add_field('time', label='Sleep Time ms', type=GsiFieldVisualizers.FLOAT, width=2)
planner_archive_schema.add_field('plan_time', label='Plan Time ms', type=GsiFieldVisualizers.FLOAT, width=2)
planner_archive_schema.add_field('dist', label='Distance', type=GsiFieldVisualizers.FLOAT, width=2)
planner_archive_schema.add_field('num_goals', label='Num Goals', type=GsiFieldVisualizers.INT, width=2)
planner_archive_schema.add_field('num_starts', label='Num Starts', type=GsiFieldVisualizers.INT, width=2)
planner_archive_schema.add_view_cheat('routing.serialize_pathplanner_data', label='Serialize Path Planner Data')
with planner_archive_schema.add_has_many('Goals', GsiGridSchema) as sub_schema:
    sub_schema.add_field('index', label='Index', type=GsiFieldVisualizers.INT, width=2)
    sub_schema.add_field('x', label='X', type=GsiFieldVisualizers.FLOAT, width=2)
    sub_schema.add_field('z', label='Z', type=GsiFieldVisualizers.FLOAT, width=2)
    sub_schema.add_field('level', label='Level', type=GsiFieldVisualizers.INT, width=2)
    sub_schema.add_field('cost', label='Cost', type=GsiFieldVisualizers.FLOAT, width=2)
    sub_schema.add_field('final_cost', label='Final Cost (lower==better)', type=GsiFieldVisualizers.FLOAT, width=2)
    sub_schema.add_field('result', label='Result', width=2)
import itertools
import re
from gsi_handlers.gameplay_archiver import GameplayArchiver
from objects.game_object import GameObject
from sims4.gsi.dispatcher import GsiHandler, add_cheat_schema
from sims4.gsi.schema import GsiGridSchema, GSIGlobalCheatSchema, GsiFieldVisualizers
import gsi_handlers.gsi_utils
import services
import sims4
global_object_cheats_schema = GSIGlobalCheatSchema()
global_object_cheats_schema.add_cheat('objects.clear_lot', label='Clear Lot')
add_cheat_schema('global_object_cheats', global_object_cheats_schema)
object_manager_schema = GsiGridSchema(label='Object Manager')
object_manager_schema.add_field('mgr', label='Manager', width=1, hidden=True)
object_manager_schema.add_field('objId', label='Object Id', width=3, unique_field=True)
object_manager_schema.add_field('classStr', label='Class', width=3)
object_manager_schema.add_field('modelStr', label='Model', width=3)
object_manager_schema.add_field('locX', label='X', width=1)
object_manager_schema.add_field('locY', label='Y', width=1)
object_manager_schema.add_field('locZ', label='Z', width=1)
object_manager_schema.add_field('on_active_lot', label='On Active Lot', width=1, hidden=True)
object_manager_schema.add_field('current_value', label='Value', width=1)
object_manager_schema.add_field('isSurface', label='Surface', width=1)
object_manager_schema.add_field('parent', label='Parent', width=2)
object_manager_schema.add_field('inUseBy', label='In Use By', width=2)
object_manager_schema.add_field('lockouts', label='Lockouts', width=2)
object_manager_schema.add_field('transient', label='Transient', width=1, hidden=True)
object_manager_schema.add_field('is_interactable', label='Interactable', width=1, hidden=True)
object_manager_schema.add_field('footprint', label='Footprint', width=1, hidden=True)
object_manager_schema.add_field('inventory_owner_id', label='inventory owner id', width=2, hidden=True)
object_manager_schema.add_filter('on_active_lot')
Exemple #17
0
from gsi_handlers.gameplay_archiver import GameplayArchiver
from sims4.gsi.dispatcher import GsiHandler
from sims4.gsi.schema import GsiGridSchema, GsiFieldVisualizers
import objects.components.types
import services
game_component_schema = GsiGridSchema(label='Game Component Info')
game_component_schema.add_field('current_game',
                                label='Current Game',
                                type=GsiFieldVisualizers.STRING)
game_component_schema.add_field('target_object',
                                label='Target Object',
                                type=GsiFieldVisualizers.STRING)
game_component_schema.add_field('active_sims',
                                label='Active Sims',
                                type=GsiFieldVisualizers.STRING)
game_component_schema.add_field('number_of_players',
                                label='Number Of Players',
                                type=GsiFieldVisualizers.INT)
game_component_schema.add_field('winning_sims',
                                label='Winners',
                                type=GsiFieldVisualizers.STRING)
game_component_schema.add_field('joinable',
                                label='Joinable',
                                type=GsiFieldVisualizers.STRING)
game_component_schema.add_field('requires_setup',
                                label='Requires Setup',
                                type=GsiFieldVisualizers.STRING)
game_component_schema.add_field('game_over',
                                label='Game Over',
                                type=GsiFieldVisualizers.STRING)
from gsi_handlers.gameplay_archiver import GameplayArchiver
from sims4.gsi.schema import GsiGridSchema
speed_change_schema = GsiGridSchema(label='Speed Change Request Log')
speed_change_schema.add_field('sim', label='Sim')
speed_change_schema.add_field('interaction', label='Interaction', width=3)
speed_change_schema.add_field('request_type', label='Request Type')
speed_change_schema.add_field('requested_speed', label='Requested Speed')
speed_change_schema.add_field('is_request', label='Is Request')
speed_change_archiver = GameplayArchiver('speed_change_log', speed_change_schema)

def archive_speed_change(interaction, request_type, requested_speed, is_request):
    archive_data = {'sim': str(interaction.sim), 'interaction': str(interaction), 'request_type': str(request_type), 'requested_speed': str(requested_speed), 'is_request': is_request}
    speed_change_archiver.archive(data=archive_data)

Exemple #19
0
from gsi_handlers.commodity_tracker_gsi_util import generate_data_from_commodity_tracker, create_schema_for_commodity_tracker
from sims4.gsi.dispatcher import GsiHandler
from sims4.gsi.schema import GsiGridSchema, GsiFieldVisualizers
import services
import sims4
import build_buy
lot_info_schema = GsiGridSchema(label='Lot Info', auto_refresh=False)
lot_info_schema.add_field('neighborhood',
                          label='Neighborhood',
                          unique_field=True)
lot_info_schema.add_field('cur_lot', label='Current Lot', width=0.4)
lot_info_schema.add_field('region_id',
                          label='Region ID',
                          type=GsiFieldVisualizers.INT,
                          width=0.5)
lot_info_schema.add_field('lot_desc_id',
                          label='Description ID',
                          type=GsiFieldVisualizers.INT,
                          width=0.5)
lot_info_schema.add_field('zone_id', label='Zone ID')
lot_info_schema.add_field('venue', label='Venue')
lot_info_schema.add_field('lot_name', label='Lot Name')
with lot_info_schema.add_has_many(
        'statistics', GsiGridSchema,
        label='Statistics (Current Lot Only)') as sub_schema:
    sub_schema.add_field('statistic', label='Statistic')
    sub_schema.add_field('value',
                         label='Statistic Value',
                         type=GsiFieldVisualizers.FLOAT,
                         width=0.5)
from gsi_handlers.gameplay_archiver import GameplayArchiver
from sims4.gsi.dispatcher import GsiHandler
from sims4.gsi.schema import GsiFieldVisualizers, GsiGridSchema
import autonomy.autonomy_modes
import services
autonomy_archive_schema = GsiGridSchema(label='Autonomy Log', sim_specific=True)
autonomy_archive_schema.add_field('sim_name', label='Sim Name', width=2)
autonomy_archive_schema.add_field('result', label='Result', width=5)
autonomy_archive_schema.add_field('type', label='Type', width=2)
with autonomy_archive_schema.add_has_many('Affordances', GsiGridSchema) as sub_schema:
    sub_schema.add_field('affordance', label='Affordance', width=3)
    sub_schema.add_field('target', label='Target', width=2)
    sub_schema.add_field('affordance_status', label='Status', width=5)
    sub_schema.add_field('autonomy_stage', label='Stage', width=2)
    sub_schema.add_field('affordance_score', label='Score', type=GsiFieldVisualizers.FLOAT, width=1)
    sub_schema.add_field('multitask_percentage', label='Multitask %', type=GsiFieldVisualizers.FLOAT, width=1)
    sub_schema.add_field('scoring_priority', label='Scoring Priority', width=2)
    sub_schema.add_field('affordance_relevant_desires', label='Relevant Desires', width=4)
    sub_schema.add_field('affordance_details', label='Details', width=6)
with autonomy_archive_schema.add_has_many('Probability', GsiGridSchema) as sub_schema:
    sub_schema.add_field('affordance', label='Affordance', width=3)
    sub_schema.add_field('target', label='Target', width=2)
    sub_schema.add_field('affordance_score', label='Score', type=GsiFieldVisualizers.FLOAT, width=1)
    sub_schema.add_field('multitask_roll', label='Multitask Roll', type=GsiFieldVisualizers.FLOAT, width=1)
    sub_schema.add_field('probability', label='Probability', type=GsiFieldVisualizers.FLOAT, width=1)
    sub_schema.add_field('probability_type', label='Probability Type', width=4)
with autonomy_archive_schema.add_has_many('Objects', GsiGridSchema) as sub_schema:
    sub_schema.add_field('object', label='Object', width=2)
    sub_schema.add_field('object_relevant_desires', label='Relevant Desires', width=4)
    sub_schema.add_field('object_status', label='Status', width=5)
with autonomy_archive_schema.add_has_many('Commodities', GsiGridSchema) as sub_schema:
def _get_sim_instance_by_id(sim_id):
    sim_info_manager = services.sim_info_manager()
    if sim_info_manager is not None:
        for sim_info in sim_info_manager.objects:
            while sim_id == sim_info.sim_id:
                return sim_info.get_sim_instance(allow_hidden_flags=ALL_HIDDEN_REASONS)

def _get_sim_info_by_id(sim_id):
    sim_info_manager = services.sim_info_manager()
    sim_info = None
    if sim_info_manager is not None:
        sim_info = sim_info_manager.get(sim_id)
    return sim_info

static_commodity = GsiGridSchema(label='Statistics/Static Commodities', sim_specific=True)
static_commodity.add_field('name', label='Name')

@GsiHandler('static_commodity_view', static_commodity)
def generate_sim_static_commodity_view_data(sim_id:int=None):
    stat_data = []
    cur_sim_info = _get_sim_info_by_id(sim_id)
    if cur_sim_info is not None:
        for stat in list(cur_sim_info.static_commodity_tracker):
            stat_data.append({'name': type(stat).__name__})
    return stat_data

def generate_all_commodities():
    return [cls.__name__ for cls in services.get_instance_manager(Types.STATISTIC).types.values() if issubclass(cls, statistics.commodity.Commodity)]

commodity_view_schema = GsiBarChartSchema(label='Statistics/Commodities', sim_specific=True)
from gsi_handlers.gameplay_archiver import GameplayArchiver
from sims4.gsi.schema import GsiFieldVisualizers, GsiGridSchema
from sims4.log import generate_message_with_callstack
import gsi_handlers
import services
skill_change_log_archive_schema = GsiGridSchema(label='Skill Change Log', sim_specific=True)
skill_change_log_archive_schema.add_field('skill_name', label='Skill Name', width=3)
skill_change_log_archive_schema.add_field('current_game_time', label='Game Time', width=1.5)
skill_change_log_archive_schema.add_field('old_skill_value', label='Old Value', type=GsiFieldVisualizers.FLOAT)
skill_change_log_archive_schema.add_field('new_skill_value', label='New Value', type=GsiFieldVisualizers.FLOAT)
skill_change_log_archive_schema.add_field('new_level', label='New Level', type=GsiFieldVisualizers.INT)
skill_change_log_archive_schema.add_field('time_delta', label='Time Change', type=GsiFieldVisualizers.INT)
skill_change_log_archive_schema.add_field('skill_delta', label='Skill Per Min', type=GsiFieldVisualizers.INT)
skill_change_archiver = GameplayArchiver('skill_change_log', skill_change_log_archive_schema)

def archive_skill_change(sim, skill, time_delta, old_skill_value, new_skill_value, new_level, last_update):
    if time_delta != 0:
        skill_per_time = (new_skill_value - old_skill_value)/time_delta
    else:
        skill_per_time = 0
    archive_data = {'skill_name': skill.skill_type.__name__, 'current_game_time': str(services.time_service().sim_now), 'old_skill_value': old_skill_value, 'new_skill_value': new_skill_value, 'new_level': new_level, 'time_delta': str(time_delta), 'skill_delta': skill_per_time}
    skill_change_archiver.archive(data=archive_data, object_id=sim.id)

environment_score_archive_schema = GsiGridSchema(label='Environment Score Log', sim_specific=True)
environment_score_archive_schema.add_field('primary_mood', label='Primary Mood')
environment_score_archive_schema.add_field('score', label='Total Mood Score', type=GsiFieldVisualizers.FLOAT)
environment_score_archive_schema.add_field('mood_commodity', label='Mood Commodity')
environment_score_archive_schema.add_field('negative_score', label='Total Negative Score', type=GsiFieldVisualizers.FLOAT)
environment_score_archive_schema.add_field('negative_commodity', label='Negative Commodity')
environment_score_archive_schema.add_field('positive_score', label='Total Positive Score', type=GsiFieldVisualizers.FLOAT)
environment_score_archive_schema.add_field('positive_commodity', label='Positive Commodity')
Exemple #23
0
from clubs.club_enums import ClubHangoutSetting
from sims4.gsi.dispatcher import GsiHandler
from sims4.gsi.schema import GsiGridSchema, GsiFieldVisualizers
import services
import sims4.resources
club_schema = GsiGridSchema(label='Club Info')
club_schema.add_field('name', label='Name', type=GsiFieldVisualizers.STRING)
club_schema.add_field('club_id',
                      label='Club ID',
                      type=GsiFieldVisualizers.STRING,
                      unique_field=True)
club_schema.add_field('hangout',
                      label='Hangout Location',
                      type=GsiFieldVisualizers.STRING)
club_schema.add_field('associated_color',
                      label='Associated Color',
                      type=GsiFieldVisualizers.STRING)
club_schema.add_field('uniform_male_child',
                      label='Male Child Uniform',
                      type=GsiFieldVisualizers.STRING)
club_schema.add_field('uniform_female_child',
                      label='Female Child Uniform',
                      type=GsiFieldVisualizers.STRING)
club_schema.add_field('uniform_male_adult',
                      label='Male Adult Uniform',
                      type=GsiFieldVisualizers.STRING)
club_schema.add_field('uniform_female_adult',
                      label='Female Child Uniform',
                      type=GsiFieldVisualizers.STRING)

Exemple #24
0
import telemetry_helper
logger = sims4.log.Logger('InteractionLog')
TELEMETRY_GROUP_INTERACTION = 'INTR'
TELEMETRY_HOOK_SI_BEGIN = 'SIBE'
TELEMETRY_HOOK_SI_END = 'SIEN'
TELEMETRY_HOOK_MIXER_BEGIN = 'MIBE'
TELEMETRY_HOOK_MIXER_END = 'MIEN'
TELEMETRY_FIELD_INTERACTION_ID = 'idix'
TELEMETRY_FIELD_TARGET_ID = 'idtx'
TELEMETRY_FIELD_TARGET_TYPE = 'tptx'
TELEMETRY_FIELD_SOURCE = 'sorc'
TELEMETRY_FIELD_OUTCOME = 'outc'
TELEMETRY_FIELD_GROUP_ID = 'idgr'
TELEMETRY_HOOK_MAPPING = {('Process_SI', True): TELEMETRY_HOOK_SI_BEGIN, ('Running', False): TELEMETRY_HOOK_MIXER_BEGIN, ('Remove_SI', True): TELEMETRY_HOOK_SI_END, ('Done', False): TELEMETRY_HOOK_MIXER_END}
writer = sims4.telemetry.TelemetryWriter(TELEMETRY_GROUP_INTERACTION)
interactions_archive_schema = GsiGridSchema(label='Interaction Log', sim_specific=True)
interactions_archive_schema.add_field('affordance', label='Affordance')
interactions_archive_schema.add_field('phase', label='Phase')
interactions_archive_schema.add_field('target', label='Target')
interactions_archive_schema.add_field('context', label='Context')
interactions_archive_schema.add_field('progress', label='Progress')
interactions_archive_schema.add_field('message', label='Message')
archiver = GameplayArchiver('interactions', interactions_archive_schema, enable_archive_by_default=True, max_records=200)
_INTERACTION_LOG_FORMAT = '{sim:>24}, {phase:>16}, {name:>32}, {target:>32}, {progress:>8}, {context}, {msg}'
_POSTURE_LOG_FORMAT = '{sim:>24}, {phase:>16}, {name:>32}, {target:>32},         , {msg}'

def _get_csv_friendly_string(s):
    if s is not None:
        s = s.replace('"', "'")
        if ',' in s:
            s = '"{}"'.format(s)
Exemple #25
0
from gsi_handlers.gameplay_archiver import GameplayArchiver
from sims4.gsi.schema import GsiGridSchema

outfit_change_archive_schema = GsiGridSchema(label='Outfit Change Archive',
                                             sim_specific=True)
outfit_change_archive_schema.add_field('change_from', label='Change From')
outfit_change_archive_schema.add_field('change_to', label='Change To')
outfit_change_archive_schema.add_field('change_reason', label='Change Reason')
archiver = GameplayArchiver('OutfitChanges',
                            outfit_change_archive_schema,
                            add_to_archive_enable_functions=True)


def log_outfit_change(sim_info, change_to, change_reason):
    if sim_info is None:
        return
    entry = {
        'change_from': repr(sim_info._current_outfit),
        'change_to': repr(change_to),
        'change_reason': repr(change_reason)
    }
    archiver.archive(data=entry, object_id=sim_info.id)
import itertools
from sims4.gsi.dispatcher import GsiHandler
from sims4.gsi.schema import GsiGridSchema, GsiFieldVisualizers
import services
group_schema = GsiGridSchema(label='Social Groups')
group_schema.add_field('type', label='Group Type', width=1, unique_field=True)
group_schema.add_field('count', label='Count', type=GsiFieldVisualizers.INT, width=0.5)
group_schema.add_field('anchor', label='Anchor', width=1)
group_schema.add_field('shutting_down', label='Shutting Down', width=0.4)
with group_schema.add_has_many('states', GsiGridSchema, label='States') as sub_schema:
    sub_schema.add_field('state', label='State', width=1)
    sub_schema.add_field('value', label='Value', width=1)
with group_schema.add_has_many('group_members', GsiGridSchema, label='Members') as sub_schema:
    sub_schema.add_field('sim_id', label='Sim ID', width=0.35)
    sub_schema.add_field('sim_name', label='Sim Name', width=0.4)
    sub_schema.add_field('registered_si', label='Registered SIs')
    sub_schema.add_field('social_context', label='Social Context')

@GsiHandler('social_groups', group_schema)
def generate_group_data():
    group_data = []
    for group in services.social_group_manager().values():
        entry = {'type': repr(group), 'count': len(group), 'shutting_down': 'x' if group.has_been_shutdown else '', 'anchor': str(getattr(group, '_anchor', None))}
        state_info = []
        entry['states'] = state_info
        if group.State is not None:
            for (state, value) in group.State.items():
                state_entry = {'state': str(state), 'value': str(value)}
                state_info.append(state_entry)
        members_info = []
        entry['group_members'] = members_info
from gsi_handlers.gameplay_archiver import GameplayArchiver
from sims4.gsi.schema import GsiGridSchema
from sims4.log import generate_message_with_callstack
import services
gsi_dump_schema = GsiGridSchema(label='GSI Dump Log')
gsi_dump_schema.add_field('game_time', label='Game Time')
gsi_dump_schema.add_field('gsi_filename', label='Filename')
gsi_dump_schema.add_field('error_log_or_exception', label='Error', width=4)
gsi_dump_schema.add_field('callstack', label='Callstack', width=4)
gsi_dump_archiver = GameplayArchiver('gsi_dump_log', gsi_dump_schema)

def archive_gsi_dump(filename_str, error_str):
    callstack = generate_message_with_callstack('GSI Dump')
    archive_data = {'game_time': str(services.game_clock_service().now()), 'gsi_filename': filename_str, 'error_log_or_exception': error_str, 'callstack': callstack}
    gsi_dump_archiver.archive(data=archive_data)

from builtins import isinstance
from alarms import AlarmElement
from scheduling import ElementHandle
from sims4.gsi.dispatcher import GsiHandler
from sims4.gsi.schema import GsiGridSchema
import services
timeline_schema = GsiGridSchema(label='Elements')
timeline_schema.add_field('line', label='Element')

class _Node:
    __qualname__ = '_Node'

    def __init__(self, element_handle):
        self.element_handle = element_handle
        self.level = 0

    @property
    def index(self):
        return self.element_handle.ix

    def __repr__(self):
        indent = '.'*self.level
        if self.index is None:
            return '{}{}'.format(indent, self.element_handle.element.tracing_repr())
        return '{}{}:{}'.format(indent, self.element_handle.element.tracing_repr(), self.index)

@GsiHandler('sim_timeline_elements', timeline_schema)
def create_sim_timeline_data(zone_id:int=None):
    time_service = services.time_service()
    if time_service is None:
        return
            self.now = 'Unavailable'
        self.route_events = {}


def get_path_route_events_log(path, clear=False):
    if path.sim is not None:
        all_path_logs = setdefault_callable(path_events_archive, path.sim.id,
                                            dict)
        path_log = setdefault_callable(all_path_logs, id(path),
                                       PathRouteEventsArchiveGSILog)
        if clear:
            del path_events_archive[path.sim.id][id(path)]
        return path_log


route_event_archive_schema = GsiGridSchema(label='Route Event Archive',
                                           sim_specific=True)
route_event_archive_schema.add_field('game_time',
                                     label='GameTime',
                                     hidden=True)
route_event_archive_schema.add_field('path_type', label='Path Type', width=1)
route_event_archive_schema.add_field('duration',
                                     label='Duration',
                                     type=GsiFieldVisualizers.FLOAT,
                                     width=2)
route_event_archive_schema.add_field('path_id',
                                     label='Path Id',
                                     type=GsiFieldVisualizers.INT,
                                     width=2)
route_event_archive_schema.add_field('master_sim', label='Master Sim', width=2)
with route_event_archive_schema.add_has_many('Route Events',
                                             GsiGridSchema) as sub_schema:
    __qualname__ = 'InteractionArchiveGSILog'

    def __init__(self):
        self.clear_log()

    def clear_log(self):
        self.status = None
        self.exit_reason = None
        self.asms_and_actors = collections.defaultdict(dict)
        self.participants = []
        self.animation_data = []
        self.constraints = []
        self.exit_reasons = []
        self.cancel_callstack = []

interaction_archive_schema = GsiGridSchema(label='Interaction Archive (SI)', sim_specific=True)
interaction_archive_schema.add_field('game_time', label='GameTime', hidden=True)
interaction_archive_schema.add_field('id', label='ID', hidden=True)
interaction_archive_schema.add_field('interaction_id', label='interaction ID', hidden=True)
interaction_archive_schema.add_field('sim_name', label='Sim Name', width=150, hidden=True)
interaction_archive_schema.add_field('interaction', label='Interaction', width=75)
interaction_archive_schema.add_field('target', label='Target', width=30)
interaction_archive_schema.add_field('initiator', label='Initiator', width=30)
interaction_archive_schema.add_field('duration', label='Duration(Sim Game Time Minutes)', hidden=True)
interaction_archive_schema.add_field('status', label='Status', width=65)
with interaction_archive_schema.add_has_many('participants', GsiGridSchema) as sub_schema:
    sub_schema.add_field('ptype', label='PType')
    sub_schema.add_field('actor', label='Actor')
with interaction_archive_schema.add_has_many('asms_and_actors', GsiGridSchema) as sub_schema:
    sub_schema.add_field('asm', label='ASM')
    sub_schema.add_field('actor', label='Actor')
from gsi_handlers import gsi_utils
from gsi_handlers.gameplay_archiver import GameplayArchiver
from sims4.gsi.schema import GsiGridSchema, GsiFieldVisualizers
from uid import UniqueIdGenerator
import services
import sims4.reload
live_drag_schema = GsiGridSchema(label='Live Drag')
live_drag_schema.add_field('live_drag_id', label='ID', type=GsiFieldVisualizers.INT, width=0.5)
live_drag_schema.add_field('live_drag_operation', label='Operation', width=1)
live_drag_schema.add_field('live_drag_message_type', label='Message Type', width=1)
live_drag_schema.add_field('live_drag_from_where', label='From', width=2)
live_drag_schema.add_field('live_drag_to_where', label='To', width=2)
live_drag_schema.add_field('live_drag_object', label='Object', width=2)
live_drag_schema.add_field('live_drag_object_id', label='Object ID', type=GsiFieldVisualizers.INT, hidden=True)
live_drag_schema.add_field('live_drag_definition_id', label='Definition ID', type=GsiFieldVisualizers.INT, hidden=True)
live_drag_schema.add_field('live_drag_status', label='Can Live Drag', type=GsiFieldVisualizers.STRING, width=1)
live_drag_schema.add_field('live_drag_target', label='Drop Target', width=1)
live_drag_schema.add_field('live_drag_stack_id', label='Stack ID', type=GsiFieldVisualizers.INT, width=1, hidden=True)
live_drag_schema.add_field('live_drag_stack_count', label='Stack Count', type=GsiFieldVisualizers.INT, width=1)
live_drag_schema.add_field('live_drag_object_inventory', label='Inventory', width=1)
live_drag_archiver = GameplayArchiver('live_drag', live_drag_schema)
with sims4.reload.protected(globals()):
    _live_drag_index = UniqueIdGenerator()

def archive_live_drag(op_or_command, message_type, location_from, location_to, live_drag_object=None, live_drag_object_id:int=0, live_drag_target=None):
    definition_id = 0
    stack_id = 0
    stack_count = 1
    can_live_drag = False
    current_inventory = None
    if live_drag_object is None:
from sims4.gsi.dispatcher import GsiHandler
from sims4.gsi.schema import GsiGridSchema
import services
test_event_schema = GsiGridSchema(label='Event Testing')
test_event_schema.add_field('event_enum', label='Enum', unique_field=True, width=1)
test_event_schema.add_field('event_name', label='Event Name', width=12)
test_event_schema.add_field('custom_key', label='Custom Key', width=15)
test_event_schema.add_field('register_count', label='Registered', width=2)
test_event_schema.add_field('called_count', label='Called', width=2)
test_event_schema.add_field('cost', label='Cost', width=2)
test_event_schema.add_field('handlers', label='Handlers', width=20)
with test_event_schema.add_has_many('handles', GsiGridSchema, label='Objectives') as sub_schema:
    sub_schema.add_field('handle', label='Handle')

@GsiHandler('test_event_view', test_event_schema)
def generate_test_event_view_data(*args, zone_id:int=None, **kwargs):
    event_mgr = services.get_event_manager()
    all_events = []
    for (key, handlers) in event_mgr._test_event_callback_map.items():
        (event_enum, custom_key) = key
        event_data = {}
        registered = len(handlers)
        called = '?'
        cost = '?'
        event_data['event_enum'] = int(event_enum)
        event_data['event_name'] = str(event_enum)
        event_data['custom_key'] = str(custom_key)
        event_data['register_count'] = registered
        event_data['called_count'] = called
        event_data['cost'] = cost
        event_data['handlers'] = str(handlers)
Exemple #33
0
import itertools
from objects.game_object import GameObject
from sims4.gsi.dispatcher import GsiHandler, add_cheat_schema
from sims4.gsi.schema import GsiGridSchema, GSIGlobalCheatSchema, GsiFieldVisualizers
import gsi_handlers.gsi_utils
import services
import sims4
import build_buy
lot_info_schema = GsiGridSchema(label='Lot Info', auto_refresh=False)
lot_info_schema.add_field('neighborhood', label='Neighborhood', unique_field=True)
lot_info_schema.add_field('cur_lot', label='Current Lot', width=0.4)
lot_info_schema.add_field('region_id', label='Region ID', type=GsiFieldVisualizers.INT, width=0.5)
lot_info_schema.add_field('lot_desc_id', label='Description ID', type=GsiFieldVisualizers.INT, width=0.5)
lot_info_schema.add_field('zone_id', label='Zone ID', type=GsiFieldVisualizers.INT)
lot_info_schema.add_field('venue_type', label='Venue Type')
lot_info_schema.add_field('lot_name', label='Lot Name')

@GsiHandler('lot_info', lot_info_schema)
def generate_lot_info_data(*args, zone_id:int=None, filter=None, **kwargs):
    lot_infos = []
    current_zone = services.current_zone()
    lot = current_zone.lot
    neighborhood_id = current_zone.neighborhood_id
    lot_description_id = services.get_lot_description_id(lot.lot_id)
    world_description_id = services.get_world_description_id(current_zone.world_id)
    neighborhood_description_id = services.get_persistence_service().get_neighborhood_proto_buff(neighborhood_id).region_id
    venue_manager = services.get_instance_manager(sims4.resources.Types.VENUE)
    for neighborhood_proto in services.get_persistence_service().get_neighborhoods_proto_buf_gen():
        for lot_owner_info in neighborhood_proto.lots:
            zone_id = lot_owner_info.zone_instance_id
            while zone_id is not None:
from sims4.gsi.schema import GsiGridSchema
from gsi_handlers.gameplay_archiver import GameplayArchiver
mc_archive_schema = GsiGridSchema(label='Master Controller Log')
mc_archive_schema.add_field('sims_with_active_work', label='Sims With Active Work Start', width=2)
mc_archive_schema.add_field('sims_with_active_work_after', label='Sims With Work After', width=2)
mc_archive_schema.add_field('last_time_stamp', label='Time Stamp At Start', width=2)
mc_archive_schema.add_field('last_time_stamp_end', label='Time Stamp At End', width=2)
with mc_archive_schema.add_has_many('Log', GsiGridSchema) as sub_schema:
    sub_schema.add_field('tag', label='Tag', width=0.25)
    sub_schema.add_field('sim', label='Sim', width=0.15)
    sub_schema.add_field('log', label='log')
with mc_archive_schema.add_has_many('active_work_start', GsiGridSchema) as sub_schema:
    sub_schema.add_field('sim', label='ID', width=0.2)
    sub_schema.add_field('work_entry', label='Work')
with mc_archive_schema.add_has_many('active_work_end', GsiGridSchema) as sub_schema:
    sub_schema.add_field('sim', label='ID', width=0.2)
    sub_schema.add_field('work_entry', label='Work')
archiver = GameplayArchiver('master_controller', mc_archive_schema, add_to_archive_enable_functions=False)

def archive_master_controller_entry(entry):
    archiver.archive(data=entry)

from display_snippet_tuning import Organization
from organizations.organization_enums import OrganizationStatusEnum
from sims4.gsi.dispatcher import GsiHandler
from sims4.gsi.schema import GsiGridSchema
import services
organization_schema = GsiGridSchema(label='Organizations', auto_refresh=False)
organization_schema.add_field('organization', label='Organization')
with organization_schema.add_has_many('active_members', GsiGridSchema, label='Active Members') as sub_schema:
    sub_schema.add_field('sim', label='Sim')
    sub_schema.add_field('progress', label='Progress')
    sub_schema.add_field('rank', label='Rank')
with organization_schema.add_has_many('inactive_members', GsiGridSchema, label='Inactive Members') as sub_schema:
    sub_schema.add_field('sim', label='Sim')
    sub_schema.add_field('progress', label='Progress')
    sub_schema.add_field('rank', label='Rank')

def get_organization_members(org_id, status_enum):
    organization_member_data = []
    organization_service = services.organization_service()
    if organization_service is None:
        return organization_member_data
    sim_info_manager = services.sim_info_manager()
    if sim_info_manager is None:
        return
    snippet_manager = services.snippet_manager()
    if snippet_manager is None:
        return
    progress_stat_type = snippet_manager.get(org_id).progress_statistic
    members_list = organization_service.get_organization_members(org_id)
    for member_id in members_list:
        sim_info = sim_info_manager.get(member_id)
from gsi_handlers.gameplay_archiver import GameplayArchiver
from sims4.gsi.schema import GsiGridSchema, GsiFieldVisualizers
import services
from protocolbuffers import Sims_pb2
sim_buff_log_schema = GsiGridSchema(label='Buffs Log', sim_specific=True)
sim_buff_log_schema.add_field('buff_id', label='Buff ID', type=GsiFieldVisualizers.INT, width=0.5)
sim_buff_log_schema.add_field('buff_name', label='Name', width=2)
sim_buff_log_schema.add_field('equipped', label='Equip', width=1)
sim_buff_log_schema.add_field('buff_reason', label='Reason', width=1)
sim_buff_log_schema.add_field('timeout', label='Timeout', width=2)
sim_buff_log_schema.add_field('rate', label='Rate', width=2)
sim_buff_log_schema.add_field('is_mood_buff', label='Is Mood Buff', width=2)
sim_buff_log_schema.add_field('progress_arrow', label='Progress Arrow', width=2)
sim_buff_log_schema.add_field('commodity_guid', label='Commodity Guid', type=GsiFieldVisualizers.INT, hidden=True)
sim_buff_log_schema.add_field('transition_into_buff_id', label='Next Buff ID', type=GsiFieldVisualizers.INT, hidden=True)
sim_buff_log_archiver = GameplayArchiver('sim_buff_log', sim_buff_log_schema)

def archive_buff_message(buff_msg, shows_timeout, change_rate):
    buff_reason = hex(buff_msg.reason.hash) if buff_msg.HasField('reason') else None
    entry = {'buff_id': buff_msg.buff_id, 'equipped': buff_msg.equipped, 'buff_reason': buff_reason, 'is_mood_buff': buff_msg.is_mood_buff, 'commodity_guid': buff_msg.commodity_guid, 'transition_into_buff_id': buff_msg.transition_into_buff_id}
    manager = services.buff_manager()
    if manager:
        buff_cls = manager.get(buff_msg.buff_id)
        entry['buff_name'] = buff_cls.__name__
    if buff_msg.timeout:
        entry['timeout'] = buff_msg.timeout
        entry['rate'] = buff_msg.rate_multiplier
    if buff_msg.equipped and shows_timeout and change_rate is not None:
        if buff_msg.buff_progress == Sims_pb2.BUFF_PROGRESS_NONE:
            entry['progress_arrow'] = 'No Arrow'
        elif buff_msg.buff_progress == Sims_pb2.BUFF_PROGRESS_UP:
from sims.bills_enums import UtilityEndOfBillAction
from sims4.gsi.dispatcher import GsiHandler
from sims4.gsi.schema import GsiGridSchema, GsiFieldVisualizers
from sims4.resources import Types
from event_testing.resolver import SingleSimResolver
from gsi_handlers.gsi_utils import format_enum_name
from sims.bills import Bills
from sims.household_utilities.utility_types import Utilities
import services
import world.street
household_archive_schema = GsiGridSchema(label='Household Archive', sim_specific=False)
household_archive_schema.add_field('name', label='Name', type=GsiFieldVisualizers.STRING)
household_archive_schema.add_field('hidden', label='Hidden', type=GsiFieldVisualizers.STRING)
household_archive_schema.add_field('player', label='Player', type=GsiFieldVisualizers.STRING)
household_archive_schema.add_field('played', label='Played', type=GsiFieldVisualizers.STRING)
household_archive_schema.add_field('num_sims', label='Sim Count', type=GsiFieldVisualizers.INT)
household_archive_schema.add_field('region', label='World', type=GsiFieldVisualizers.STRING)
household_archive_schema.add_field('street', label='Street', type=GsiFieldVisualizers.STRING)
household_archive_schema.add_field('zone_name', label='Lot', type=GsiFieldVisualizers.STRING)
household_archive_schema.add_field('funds', label='Funds', type=GsiFieldVisualizers.INT)
household_archive_schema.add_field('net_worth', label='Net Worth', type=GsiFieldVisualizers.INT)
household_archive_schema.add_field('region_id', label='Region ID', type=GsiFieldVisualizers.INT)
household_archive_schema.add_field('home_zone_id', label='Home Zone ID', type=GsiFieldVisualizers.STRING)
household_archive_schema.add_field('household_id', label='Household ID', type=GsiFieldVisualizers.STRING, unique_field=True)
household_archive_schema.add_field('premade_household_id', label='Premade Household ID', type=GsiFieldVisualizers.STRING)
household_archive_schema.add_field('move_in_time', label='Home Zone Move In Time', type=GsiFieldVisualizers.STRING)
with household_archive_schema.add_has_many('sim_infos', GsiGridSchema) as sub_schema:
    sub_schema.add_field('sim_id', label='Sim_Id', type=GsiFieldVisualizers.INT)
    sub_schema.add_field('sim_name', label='Name', type=GsiFieldVisualizers.STRING)
    sub_schema.add_field('species', label='Species', type=GsiFieldVisualizers.STRING)
    sub_schema.add_field('gender', label='Gender', type=GsiFieldVisualizers.STRING)
from gsi_handlers.gameplay_archiver import GameplayArchiver
from sims4.gsi.schema import GsiGridSchema, GsiFieldVisualizers
content_set_archive_schema = GsiGridSchema(label='Content Set Generation', sim_specific=True)
content_set_archive_schema.add_field('sim', label='Sim', width=2)
content_set_archive_schema.add_field('super_interaction', label='Super Interaction', width=2)
content_set_archive_schema.add_field('considered_count', label='Considered', type=GsiFieldVisualizers.INT, width=1)
content_set_archive_schema.add_field('result_count', label='Results', width=1)
content_set_archive_schema.add_field('topics', label='Topics', width=1)
with content_set_archive_schema.add_has_many('Considered', GsiGridSchema) as sub_schema:
    sub_schema.add_field('selected', label='Selected', width=1)
    sub_schema.add_field('eligible', label='Eligible', width=2)
    sub_schema.add_field('affordance', label='Affordance', width=3)
    sub_schema.add_field('target', label='Target', width=3)
    sub_schema.add_field('test', label='Test Result', width=2)
    sub_schema.add_field('base_score', label='Base Score', type=GsiFieldVisualizers.INT, width=1)
    sub_schema.add_field('buff_score_adjustment', label='Buff Score', type=GsiFieldVisualizers.INT, width=1)
    sub_schema.add_field('topic_score', label='Topic Score', type=GsiFieldVisualizers.INT, width=1)
    sub_schema.add_field('score_modifier', label='Score Modifier', type=GsiFieldVisualizers.INT, width=1)
    sub_schema.add_field('total_score', label='Total Score', type=GsiFieldVisualizers.INT, width=1)
with content_set_archive_schema.add_has_many('Results', GsiGridSchema) as sub_schema:
    sub_schema.add_field('result_affordance', label='Affordance', width=3)
    sub_schema.add_field('result_target', label='Target', width=3)
    sub_schema.add_field('result_loc_key', label='Localization Key', width=3)
    sub_schema.add_field('result_target_loc_key', label='Target Loc Key', width=3)
archiver = GameplayArchiver('content_set', content_set_archive_schema)

def archive_content_set(sim, si, considered, results, topics):
    entry = {}
    entry['sim'] = str(sim)
    entry['super_interaction'] = str(si)
    entry['considered_count'] = len(considered)
from gsi_handlers.gameplay_archiver import GameplayArchiver
from sims4.gsi.dispatcher import GsiHandler
from sims4.gsi.schema import GsiFieldVisualizers, GsiGridSchema
import autonomy.autonomy_modes
import services
autonomy_archive_schema = GsiGridSchema(label='Autonomy Log',
                                        sim_specific=True)
autonomy_archive_schema.add_field('sim_name', label='Sim Name', width=2)
autonomy_archive_schema.add_field('result', label='Result', width=5)
autonomy_archive_schema.add_field('type', label='Type', width=2)
with autonomy_archive_schema.add_has_many('Affordances',
                                          GsiGridSchema) as sub_schema:
    sub_schema.add_field('affordance', label='Affordance', width=3)
    sub_schema.add_field('target', label='Target', width=2)
    sub_schema.add_field('affordance_status', label='Status', width=5)
    sub_schema.add_field('autonomy_stage', label='Stage', width=2)
    sub_schema.add_field('affordance_score',
                         label='Score',
                         type=GsiFieldVisualizers.FLOAT,
                         width=1)
    sub_schema.add_field('multitask_percentage',
                         label='Multitask %',
                         type=GsiFieldVisualizers.FLOAT,
                         width=1)
    sub_schema.add_field('scoring_priority', label='Scoring Priority', width=2)
    sub_schema.add_field('affordance_relevant_desires',
                         label='Relevant Desires',
                         width=4)
    sub_schema.add_field('affordance_details', label='Details', width=6)
with autonomy_archive_schema.add_has_many('Probability',
                                          GsiGridSchema) as sub_schema:
from sims4.gsi.dispatcher import GsiHandler
from sims4.gsi.schema import GsiGridSchema, GsiFieldVisualizers
import alarms
alarm_schema = GsiGridSchema(label='Alarms')
alarm_schema.add_field('time', label='Absolute Time', width=2)
alarm_schema.add_field('time_left', label='Time Left', width=1)
alarm_schema.add_field('ticks', label='Ticks Left', type=GsiFieldVisualizers.INT)
alarm_schema.add_field('handle', label='Handle', width=1, unique_field=True, hidden=True)
alarm_schema.add_field('owner', label='Owner', width=3)
alarm_schema.add_field('callback', label='Callback', width=3)

@GsiHandler('alarms', alarm_schema)
def generate_alarm_data(*args, zone_id:int=None, **kwargs):
    return alarms.get_alarm_data_for_gsi()

Exemple #41
0
from sims4.gsi.dispatcher import GsiHandler
from sims4.gsi.schema import GsiGridSchema
import services
global_policy_archive_schema = GsiGridSchema(label='Global Policy Log',
                                             auto_refresh=True)
global_policy_archive_schema.add_field('policy', label='Global Policy')
global_policy_archive_schema.add_field('progress_value',
                                       label='Progress Value')
global_policy_archive_schema.add_field('decay_days', label='Decay Days')
global_policy_archive_schema.add_field('progress_state',
                                       label='Progress State')


@GsiHandler('global_policy_log', global_policy_archive_schema)
def generate_global_policy_data():
    policy_data = []
    for policy in services.global_policy_service().get_global_policies():
        entry = {
            'policy':
            repr(policy).split('sims4.tuning.instances.',
                               1)[1].split('object', 1)[0],
            'progress_value':
            str(policy.progress_value) + '/' + str(policy.progress_max_value),
            'decay_days':
            0 if policy.decay_handler is None
            or policy.decay_handler.when is None else
            str(policy.decay_handler.when - services.time_service().sim_now),
            'progress_state':
            str(policy.progress_state)
        }
        policy_data.append(entry)
Exemple #42
0
    'oddjob'
]


def drama_node_string_matches_filters(drama_node_string, filter_list):
    if filter_list is None:
        return True
    drama_node_string = drama_node_string.lower()
    if NONPICKERDRAMANODES_DRAMA_NODES_FILTER in filter_list and PICKER_DRAMA_NODE_SUBSTRING not in drama_node_string:
        return True
    elif any(a_filter in drama_node_string for a_filter in filter_list):
        return True
    return False


drama_schema = GsiGridSchema(label='Drama Nodes/Drama Scheduler')
drama_schema.add_field('drama_node_id',
                       label='Drama Node Id',
                       unique_field=True)
drama_schema.add_field('drama_node', label='Drama Node', width=3)
drama_schema.add_field('status', label='Status', width=3)
drama_schema.add_field('time_left', label='Time Left')
drama_schema.add_field('receiver_sim', label='Receiver Sim')
drama_schema.add_field('sender_sim', label='Sender Sim')
for filter_string in FILTER_STRINGS:
    drama_schema.add_filter(filter_string)


@GsiHandler('drama', drama_schema)
def generate_drama_scheduler_data(zone_id: int = None, filter=None):
    all_nodes = []
Exemple #43
0
class SimFilterGSILoggingData:
    def __init__(self, request_type, sim_filter_type, gsi_source_fn):
        self.request_type = request_type
        self.sim_filter_type = sim_filter_type
        if gsi_source_fn is None:
            logger.warn(
                '{} filter request for {} did not specify a gsi_source_fn. Please make sure the filter request is provided with this argument.',
                request_type, sim_filter_type)
        self.gsi_source_fn = gsi_source_fn
        self.filters = {}

    def add_filter(self, filter_term, score):
        self.filters[filter_term] = score


sim_filter_archive_schema = GsiGridSchema(label='Sim Filter Archive',
                                          sim_specific=True)
sim_filter_archive_schema.add_field('sim_id',
                                    label='simID',
                                    type=GsiFieldVisualizers.INT,
                                    hidden=True)
sim_filter_archive_schema.add_field('source', label='Source', width=3)
sim_filter_archive_schema.add_field('request_type', label='Request Type')
sim_filter_archive_schema.add_field('filter_type',
                                    label='Filter Type',
                                    width=2.5)
sim_filter_archive_schema.add_field('rejected', label='Is Rejected', width=1)
sim_filter_archive_schema.add_field('reason', label='Reason', width=1)
with sim_filter_archive_schema.add_has_many('Filter Breakdown',
                                            GsiGridSchema) as sub_schema:
    sub_schema.add_field('filter', label='Filter', width=1)
    sub_schema.add_field('score', label='Score', width=1)
Exemple #44
0
from gsi_handlers.gameplay_archiver import GameplayArchiver
from sims4.gsi.schema import GsiGridSchema
import gsi_handlers
state_trigger_schema = GsiGridSchema(label='State Triggers/State Trigger Log')
state_trigger_schema.add_field('objId', label='Object Id', unique_field=True, width=1.2)
state_trigger_schema.add_field('def', label='Definition', width=2)
state_trigger_schema.add_field('parent', label='Parent', width=1.5)
state_trigger_schema.add_field('state', label='Trigger State', width=1.5)
state_trigger_schema.add_field('state_value', label='Trigger State Value', width=2)
state_trigger_schema.add_field('at_state', label='Triggered At State', width=2.5)
state_trigger_schema.add_field('at_states', label='At States', width=2.5)
state_trigger_schema.add_field('src', label='Source', width=1.3)
state_trigger_archiver = GameplayArchiver('StateTriggerLog', state_trigger_schema)

def archive_state_trigger(obj, triggered_state, at_state, at_states, source=''):
    archive_data = {'objId': hex(obj.id), 'def': obj.definition.name, 'state': str(triggered_state.state), 'state_value': str(triggered_state), 'at_state': str(at_state), 'at_states': str(at_states), 'src': source}
    if obj.parent is not None:
        archive_data['parent'] = gsi_handlers.gsi_utils.format_object_name(obj.parent)
    state_trigger_archiver.archive(data=archive_data)

timed_state_trigger_schema = GsiGridSchema(label='State Triggers/Timed State Trigger Log')
timed_state_trigger_schema.add_field('objId', label='Object Id', unique_field=True)
timed_state_trigger_schema.add_field('def', label='Definition', width=2)
timed_state_trigger_schema.add_field('state', label='Trigger State', width=2)
timed_state_trigger_schema.add_field('state_value', label='Trigger State Value', width=2)
timed_state_trigger_schema.add_field('at_state', label='At State', width=2)
timed_state_trigger_schema.add_field('trigger_time', label='Trigger Time')
timed_state_trigger_archiver = GameplayArchiver('TimedStateTriggerLog', timed_state_trigger_schema)

def archive_timed_state_trigger(obj, triggered_state, at_state, trigger_time):
    archive_data = {'objId': hex(obj.id), 'def': obj.definition.name, 'state': str(triggered_state.state), 'state_value': str(triggered_state), 'at_state': str(at_state), 'trigger_time': trigger_time}
from collections import namedtuple
from gsi_handlers.gameplay_archiver import GameplayArchiver
from sims4.gsi.schema import GsiGridSchema, GsiFieldVisualizers
import services

relationship_culling_archive_schema = GsiGridSchema(
    label='Relationship Culling Archive', sim_specific=False)
relationship_culling_archive_schema.add_field('game_time',
                                              label='Game/Sim Time',
                                              type=GsiFieldVisualizers.TIME)
relationship_culling_archive_schema.add_field('relationships_culled',
                                              label='Relationships Culled',
                                              type=GsiFieldVisualizers.INT)
with relationship_culling_archive_schema.add_has_many(
        'all_relationships', GsiGridSchema) as sub_schema:
    sub_schema.add_field('culled_status', label='Culled Status')
    sub_schema.add_field('culled_reason', label='Culled Reason')
    sub_schema.add_field('sim_info', label='Sim A')
    sub_schema.add_field('target_sim_info', label='Sim B')
    sub_schema.add_field('total_depth',
                         label='Total Depth',
                         type=GsiFieldVisualizers.INT,
                         width=0.2)
    sub_schema.add_field('rel_bits', label='Relationship Bits')
with relationship_culling_archive_schema.add_has_many(
        'not_culled_relationships', GsiGridSchema) as sub_schema:
    sub_schema.add_field('culled_status', label='Culled Status')
    sub_schema.add_field('culled_reason', label='Culled Reason')
    sub_schema.add_field('sim_info', label='Sim A')
    sub_schema.add_field('target_sim_info', label='Sim B')
    sub_schema.add_field('total_depth',
from performance.object_leak_tracker import NodeStatus
from sims4.gsi.dispatcher import GsiHandler
from sims4.gsi.schema import GsiGridSchema
import services
schema = GsiGridSchema(label='Object Leaks')
schema.add_field('status', label='Status')
schema.add_field('pid', label='Python Id', unique_field=True)
schema.add_field('pid_hex', label='Python Id (hex)')
schema.add_field('type', label='Type')
schema.add_field('old_manager', label='Old Manager')
schema.add_field('old_obj_id', label='Old Object Id')
with schema.add_has_many('history', GsiGridSchema) as sub_schema:
    sub_schema.add_field('status', label='Status')
    sub_schema.add_field('gc_pass', label='GC Pass')
    sub_schema.add_field('time', label='Time')
schema.add_view_cheat('mem.gc.collect', label='|mem.gc.collect')
with schema.add_view_cheat(
        'object_leak_tracker.dump_pid',
        label='|object_leak_tracker.dump_pid <python id>') as cheat:
    cheat.add_token_param('pid')


@GsiHandler('leaked_objects', schema)
def generate_data(*args, **kwargs):
    data = []
    tracker = services.get_object_leak_tracker()
    if tracker is None:
        return data
    for status in NodeStatus:
        for node in tracker.buckets[status]:
            node_data = {}
from sims4.gsi.dispatcher import GsiHandler
from sims4.gsi.schema import GsiGridSchema, GsiFieldVisualizers
from tag import Tag
import services
schema = GsiGridSchema(label='Spawn Points')
schema.add_field('id',
                 label='id',
                 unique_field=True,
                 width=2,
                 type=GsiFieldVisualizers.STRING)
schema.add_field('name',
                 label='name',
                 type=GsiFieldVisualizers.STRING,
                 width=3)
schema.add_field('x', label='x', type=GsiFieldVisualizers.FLOAT, width=2)
schema.add_field('y', label='y', type=GsiFieldVisualizers.FLOAT, width=2)
schema.add_field('z', label='z', type=GsiFieldVisualizers.FLOAT, width=2)
schema.add_field('lot_id',
                 label='lot_id',
                 type=GsiFieldVisualizers.INT,
                 width=3)
schema.add_field('tags',
                 label='tags',
                 type=GsiFieldVisualizers.STRING,
                 width=4)
schema.add_view_cheat('debugvis.spawn_points.start',
                      label='Start Visualization')
schema.add_view_cheat('debugvis.spawn_points.stop', label='Stop Visualization')
with schema.add_cheat('camera.focus_on_position',
                      label='Focus',
                      dbl_click=True) as cheat:
Exemple #48
0
            'filter_term': str(filter_term)
        })

    def add_metadata(self, num_sims, allow_instanced_sims, club,
                     blacklist_sims, optional):
        if len(blacklist_sims):
            blacklist_sims = str(blacklist_sims)
        else:
            blacklist_sims = None
        self.metadata = [
            num_sims, allow_instanced_sims,
            str(club), blacklist_sims, optional
        ]


sim_filter_service_archive_schema = GsiGridSchema(
    label='Sim Filter Service Archive')
sim_filter_service_archive_schema.add_field('game_time',
                                            label='Game Time',
                                            type=GsiFieldVisualizers.TIME)
sim_filter_service_archive_schema.add_field('source', label='Source', width=3)
sim_filter_service_archive_schema.add_field('request_type',
                                            label='Request Type')
sim_filter_service_archive_schema.add_field('yielding', label='Yielding')
sim_filter_service_archive_schema.add_field('matching_results',
                                            label='Num Matching',
                                            type=GsiFieldVisualizers.INT)
sim_filter_service_archive_schema.add_field('created_sims',
                                            label='Num Created',
                                            type=GsiFieldVisualizers.INT)
sim_filter_service_archive_schema.add_field('filter_type',
                                            label='Filter Type',
class InteractionArchiveGSILog:
    def __init__(self):
        self.clear_log()

    def clear_log(self):
        self.status = None
        self.exit_reason = None
        self.asms_and_actors = collections.defaultdict(dict)
        self.participants = []
        self.animation_data = []
        self.constraints = []
        self.exit_reasons = []
        self.cancel_callstack = []


interaction_archive_schema = GsiGridSchema(label='Interaction Archive (SI)',
                                           sim_specific=True)
interaction_archive_schema.add_field('game_time',
                                     label='GameTime',
                                     hidden=True)
interaction_archive_schema.add_field('archive_id', label='ID', hidden=True)
interaction_archive_schema.add_field('interaction_id',
                                     label='interaction ID',
                                     hidden=True)
interaction_archive_schema.add_field('sim_name',
                                     label='Sim Name',
                                     width=150,
                                     hidden=True)
interaction_archive_schema.add_field('interaction',
                                     label='Interaction',
                                     width=75)
interaction_archive_schema.add_field('target', label='Target', width=30)
from gsi_handlers.gameplay_archiver import GameplayArchiver
from sims4.gsi.schema import GsiGridSchema, GsiFieldVisualizers
balloon_archive_schema = GsiGridSchema(label='Balloons', sim_specific=True)
balloon_archive_schema.add_field('sim', label='Sim', width=2)
balloon_archive_schema.add_field('interaction', label='Interaction', width=2)
balloon_archive_schema.add_field('balloon_type', label='Type', width=2)
balloon_archive_schema.add_field('icon', label='Icon', width=2)
balloon_archive_schema.add_field('balloon_category', label='Category', width=2)
balloon_archive_schema.add_field('weight', label='Weight', type=GsiFieldVisualizers.INT, width=1)
balloon_archive_schema.add_field('total_weight', label='Total Weight', type=GsiFieldVisualizers.INT, width=1)
with balloon_archive_schema.add_has_many('Considered', GsiGridSchema) as sub_schema:
    sub_schema.add_field('test_result', label='Test Result', width=2)
    sub_schema.add_field('balloon_type', label='Type', width=2)
    sub_schema.add_field('icon', label='Icon', width=2)
    sub_schema.add_field('weight', label='Weight', type=GsiFieldVisualizers.INT, width=1)
    sub_schema.add_field('balloon_category', label='Category', width=2)
archiver = GameplayArchiver('balloon', balloon_archive_schema)

def archive_balloon_data(sim, interaction, result, icon, entries):
    if result is not None:
        weight = result.weight
        balloon_type = str(result.balloon_type)
        gsi_category = result.gsi_category
    else:
        weight = 0
        balloon_type = 'None'
        gsi_category = 'None'
    entry = {}
    entry['sim'] = str(sim)
    entry['interaction'] = str(interaction)
    entry['weight'] = weight
from gsi_handlers.gameplay_archiver import GameplayArchiver
from sims4.gsi.schema import GsiFieldVisualizers, GsiGridSchema
import gsi_handlers
import services
skill_change_log_archive_schema = GsiGridSchema(label='Skill Change Log', sim_specific=True)
skill_change_log_archive_schema.add_field('skill_name', label='Skill Name', width=3)
skill_change_log_archive_schema.add_field('current_game_time', label='Game Time', width=1.5)
skill_change_log_archive_schema.add_field('old_skill_value', label='Old Value', type=GsiFieldVisualizers.FLOAT)
skill_change_log_archive_schema.add_field('new_skill_value', label='New Value', type=GsiFieldVisualizers.FLOAT)
skill_change_log_archive_schema.add_field('new_level', label='New Level', type=GsiFieldVisualizers.INT)
skill_change_log_archive_schema.add_field('time_delta', label='Time Change', type=GsiFieldVisualizers.INT)
skill_change_log_archive_schema.add_field('skill_delta', label='Skill Per Min', type=GsiFieldVisualizers.INT)
skill_change_archiver = GameplayArchiver('skill_change_log', skill_change_log_archive_schema, add_to_archive_enable_functions=True)

def archive_skill_change(sim, skill, time_delta, old_skill_value, new_skill_value, new_level, last_update):
    if time_delta != 0:
        skill_per_time = (new_skill_value - old_skill_value)/time_delta
    else:
        skill_per_time = 0
    archive_data = {'skill_name': skill.skill_type.__name__, 'current_game_time': str(services.time_service().sim_now), 'old_skill_value': old_skill_value, 'new_skill_value': new_skill_value, 'new_level': new_level, 'time_delta': str(time_delta), 'skill_delta': skill_per_time}
    skill_change_archiver.archive(data=archive_data, object_id=sim.id)

environment_score_archive_schema = GsiGridSchema(label='Environment Score Log', sim_specific=True)
environment_score_archive_schema.add_field('primary_mood', label='Primary Mood')
environment_score_archive_schema.add_field('score', label='Total Mood Score', type=GsiFieldVisualizers.FLOAT)
environment_score_archive_schema.add_field('mood_commodity', label='Mood Commodity')
environment_score_archive_schema.add_field('negative_score', label='Total Negative Score', type=GsiFieldVisualizers.FLOAT)
environment_score_archive_schema.add_field('negative_commodity', label='Negative Commodity')
environment_score_archive_schema.add_field('positive_score', label='Total Positive Score', type=GsiFieldVisualizers.FLOAT)
environment_score_archive_schema.add_field('positive_commodity', label='Positive Commodity')
with environment_score_archive_schema.add_has_many('contributing_objects', GsiGridSchema, label='Contributing Objects') as sub_schema:
Exemple #52
0
from gsi_handlers.gameplay_archiver import GameplayArchiver
from sims4.gsi.schema import GsiGridSchema
import services
from services import venue_service
zone_director_schema = GsiGridSchema(label='Zone Director')
zone_director_schema.add_field('zone_director_type',
                               label='Zone Director Type')
zone_director_schema.add_field('zone_id', label='Zone Id')
zone_director_schema.add_field('op', label='Op')
zone_director_schema.add_field('neighborhood', label='Neighborhood')
zone_director_schema.add_field('lot_id', label='Lot Id')
zone_director_schema.add_field('active_venue', label='Venue')
zone_director_schema.add_field('source_venue', label='Source Venue')
with zone_director_schema.add_has_many('lot preparations',
                                       GsiGridSchema) as sub_schema:
    sub_schema.add_field('action', label='Action')
    sub_schema.add_field('description', label='Description')
with zone_director_schema.add_has_many('spawn objects',
                                       GsiGridSchema) as sub_schema:
    sub_schema.add_field('obj_id', label='Obj Id')
    sub_schema.add_field('obj_def', label='Obj Def')
    sub_schema.add_field('parent_id', label='Parent Id')
    sub_schema.add_field('position', label='Position')
    sub_schema.add_field('states', label='States')
with zone_director_schema.add_has_many('civic_policies',
                                       GsiGridSchema,
                                       label='Civic Policies') as sub_schema:
    sub_schema.add_field('civic_policy', label='Civic Policy')
    sub_schema.add_field('enacted', label='Enacted')
    sub_schema.add_field('votes', label='Votes')
archiver = GameplayArchiver('zone_director',
from gsi_handlers import gsi_utils
from gsi_handlers.gameplay_archiver import GameplayArchiver
from sims4.gsi.schema import GsiGridSchema, GsiFieldVisualizers
from uid import UniqueIdGenerator
import services
import sims4.reload
live_drag_schema = GsiGridSchema(label='Live Drag')
live_drag_schema.add_field('live_drag_id',
                           label='ID',
                           type=GsiFieldVisualizers.INT,
                           width=0.5)
live_drag_schema.add_field('live_drag_operation', label='Operation', width=1)
live_drag_schema.add_field('live_drag_message_type',
                           label='Message Type',
                           width=1)
live_drag_schema.add_field('live_drag_from_where', label='From', width=2)
live_drag_schema.add_field('live_drag_to_where', label='To', width=2)
live_drag_schema.add_field('live_drag_object', label='Object', width=2)
live_drag_schema.add_field('live_drag_object_id',
                           label='Object ID',
                           type=GsiFieldVisualizers.INT,
                           hidden=True)
live_drag_schema.add_field('live_drag_definition_id',
                           label='Definition ID',
                           type=GsiFieldVisualizers.INT,
                           hidden=True)
live_drag_schema.add_field('live_drag_status',
                           label='Can Live Drag',
                           type=GsiFieldVisualizers.STRING,
                           width=1)
live_drag_schema.add_field('live_drag_target', label='Drop Target', width=1)
from gsi_handlers.gameplay_archiver import GameplayArchiver
from sims4.gsi.dispatcher import GsiHandler
from sims4.gsi.schema import GsiGridSchema
import gsi_handlers
import services
import sims4.resources
achievement_schema = GsiGridSchema(label='Achievements', sim_specific=True)
achievement_schema.add_field('achievement_uid', label='UId', unique_field=True)
achievement_schema.add_field('achievement', label='Achievement', width=3)
achievement_schema.add_field('category', label='Category', width=2)
achievement_schema.add_field('points', label='Points')
achievement_schema.add_field('achievement_complete', label='Done')
achievement_schema.add_field('display_name', label='DisplayStr', hidden=True)
achievement_schema.add_field('description', label='DescStr', hidden=True)
achievement_schema.add_field('simId', label='SimId', hidden=True)
with achievement_schema.add_view_cheat('achievements.complete_achievement', label='Complete') as cheat:
    cheat.add_token_param('achievement_uid')
    cheat.add_token_param('simId')
with achievement_schema.add_has_many('objectives', GsiGridSchema, label='Objectives') as sub_schema:
    sub_schema.add_field('objective', label='Objective')
    sub_schema.add_field('objective_complete', label='Done')

@GsiHandler('achievement_view', achievement_schema)
def generate_achievement_view_data(sim_id:int=None):
    sim_info = services.sim_info_manager().get(sim_id)
    achievement_manager = services.get_instance_manager(sims4.resources.Types.ACHIEVEMENT)
    all_achievements = []
    for achievement_id in achievement_manager.types:
        achievement = achievement_manager.get(achievement_id)
        achievement_data = {}
        achievement_data['achievement'] = str(achievement)