entity *create_new_pilot_entity (const char *name, entity_sides side, int rank, entity_sub_types sub_type, int unique_id, int difficulty) { entity *en, *force; ASSERT (get_comms_model () == COMMS_MODEL_SERVER); ASSERT (name); force = get_local_force_entity (side); ASSERT (force); en = create_client_server_entity ( ENTITY_TYPE_PILOT, ENTITY_INDEX_DONT_CARE, ENTITY_ATTR_PARENT (LIST_TYPE_PILOT, force), ENTITY_ATTR_STRING (STRING_TYPE_PILOTS_NAME, name), ENTITY_ATTR_INT_VALUE (INT_TYPE_ENTITY_SUB_TYPE, sub_type), ENTITY_ATTR_INT_VALUE (INT_TYPE_UNIQUE_ID, unique_id), ENTITY_ATTR_INT_VALUE (INT_TYPE_SIDE, side), ENTITY_ATTR_INT_VALUE (INT_TYPE_PILOT_RANK, rank), ENTITY_ATTR_INT_VALUE (INT_TYPE_DIFFICULTY_LEVEL, difficulty), ENTITY_ATTR_END ); send_pilot_joined_message (en); return en; }
entity *create_new_division (entity_sub_types type, entity_sides side, entity *parent, entity *hq, int local_only) { entity *new_entity; int id; ASSERT (get_comms_model () == COMMS_MODEL_SERVER); ASSERT (parent); id = get_next_free_division_id (side, type); if (local_only) { new_entity = create_local_entity ( ENTITY_TYPE_DIVISION, ENTITY_INDEX_DONT_CARE, ENTITY_ATTR_PARENT (LIST_TYPE_DIVISION, parent), ENTITY_ATTR_PARENT (LIST_TYPE_DIVISION_HEADQUARTERS, hq), ENTITY_ATTR_INT_VALUE (INT_TYPE_ENTITY_SUB_TYPE, type), ENTITY_ATTR_INT_VALUE (INT_TYPE_DIVISION_ID, id), ENTITY_ATTR_END ); } else { new_entity = create_client_server_entity ( ENTITY_TYPE_DIVISION, ENTITY_INDEX_DONT_CARE, ENTITY_ATTR_PARENT (LIST_TYPE_DIVISION, parent), ENTITY_ATTR_PARENT (LIST_TYPE_DIVISION_HEADQUARTERS, hq), ENTITY_ATTR_INT_VALUE (INT_TYPE_ENTITY_SUB_TYPE, type), ENTITY_ATTR_INT_VALUE (INT_TYPE_DIVISION_ID, id), ENTITY_ATTR_END ); } return new_entity; }
entity *create_client_server_entity_routed_vehicle (int index, entity_sub_types sub_type, entity *group, vec3d *position) { entity *new_entity; sound_sample_indices sample_index; ASSERT (get_comms_model() == COMMS_MODEL_SERVER); // // create routed entity // new_entity = create_client_server_entity ( ENTITY_TYPE_ROUTED_VEHICLE, index, ENTITY_ATTR_PARENT (LIST_TYPE_MEMBER, group), ENTITY_ATTR_INT_VALUE (INT_TYPE_ENTITY_SUB_TYPE, sub_type), ENTITY_ATTR_VEC3D (VEC3D_TYPE_POSITION, position->x, position->y, position->z), ENTITY_ATTR_END ); // // create and attach special effects // { // // dust trails // attach_routed_vehicle_meta_smoke_lists (new_entity); // // headlights // set_vehicle_headlight_state (new_entity, OFF); // // sound effects // sample_index = vehicle_database [sub_type].idle_sound_effect; if (sample_index != SOUND_SAMPLE_INDEX_NONE) { create_client_server_sound_effect_entity ( new_entity, ENTITY_SIDE_NEUTRAL, ENTITY_SUB_TYPE_EFFECT_SOUND_ENGINE_LOOPING1, SOUND_CHANNEL_SOUND_EFFECT, SOUND_LOCALITY_ALL, NULL, // position 1.0, // amplification TRUE, // valid sound effect TRUE, // looping 1, // sample count &sample_index // sample index list ); } sample_index = vehicle_database [sub_type].moving_sound_effect; if (sample_index != SOUND_SAMPLE_INDEX_NONE) { create_client_server_sound_effect_entity ( new_entity, ENTITY_SIDE_NEUTRAL, ENTITY_SUB_TYPE_EFFECT_SOUND_ENGINE_LOOPING2, SOUND_CHANNEL_SOUND_EFFECT, SOUND_LOCALITY_ALL, NULL, // position 1.0, // amplification FALSE, // valid sound effect TRUE, // looping 1, // sample count &sample_index // sample index list ); } } // // // return new_entity; }
entity *create_client_server_entity_fixed_wing (int index, entity_sub_types sub_type, entity *group, vec3d *position) { entity *new_entity; fixed_wing *raw; ASSERT (get_comms_model() == COMMS_MODEL_SERVER); // // create fixed wing entity // new_entity = create_client_server_entity ( ENTITY_TYPE_FIXED_WING, index, ENTITY_ATTR_PARENT (LIST_TYPE_MEMBER, group), ENTITY_ATTR_INT_VALUE (INT_TYPE_ENTITY_SUB_TYPE, sub_type), ENTITY_ATTR_VEC3D (VEC3D_TYPE_POSITION, position->x, position->y, position->z), ENTITY_ATTR_END ); // // create and attach special effects // { sound_sample_indices sound_sample_index; // // damage smoke // attach_fixed_wing_meta_smoke_lists (new_entity); // // sound effects // sound_sample_index = aircraft_database [sub_type].continuous_sound_effect_index; create_client_server_sound_effect_entity ( new_entity, ENTITY_SIDE_NEUTRAL, ENTITY_SUB_TYPE_EFFECT_SOUND_ENGINE_LOOPING1, SOUND_CHANNEL_SOUND_EFFECT, SOUND_LOCALITY_ALL, NULL, // position 1.0, // amplification FALSE, // valid sound effect TRUE, // looping 1, // sample count &sound_sample_index // sample index list ); sound_sample_index = SOUND_SAMPLE_INDEX_JET_AFTERBURNER; create_client_server_sound_effect_entity ( new_entity, ENTITY_SIDE_NEUTRAL, ENTITY_SUB_TYPE_EFFECT_SOUND_ENGINE_LOOPING2, SOUND_CHANNEL_SOUND_EFFECT, SOUND_LOCALITY_ALL, NULL, // position 1.0, // amplification FALSE, // valid sound effect TRUE, // looping 1, // sample count &sound_sample_index // sample index list ); } // // initialise terrain elevation cache // raw = get_local_entity_data (new_entity); get_3d_terrain_point_data (position->x, position->z, &raw->ac.terrain_info); return new_entity; }