View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0002106 | FSSCP | multiplayer | public | 2010-01-28 22:42 | 2010-02-12 06:44 |
Reporter | sausage | Assigned To | karajorma | ||
Priority | normal | Severity | crash | Reproducibility | always |
Status | resolved | Resolution | fixed | ||
Product Version | 3.6.10 | ||||
Fixed in Version | 3.6.11 | ||||
Summary | 0002106: set-object-position crashes in multiplayer | ||||
Description | When using the set-object-position SEXP in dogfight multiplayer, when the event occurs, the FreeSpace application crashes. The co-ordinates chosen does not matter: 0,0,0 9999,9999,9999 32000,32000,32000 all will crash. Tried it on two machines, one being nVidia based and one being Intel 965 based. Both crash. Also tried it using a 3.6.11 nightly windows build. Same crash. | ||||
Additional Information | See the attached example mission. Only one player in multiplayer map. If the Alpha 1 gets within 50 metres of the enemy object, the SEXP triggers and the windows application crashes. | ||||
Tags | No tags attached. | ||||
2010-01-28 22:42
|
|
|
Confirmed. Quick looks it seems as if it assumes the first 12 ships are player ships instead of checking to see if they are player ships. So it's trying to move a player object that isn't a player object. Also that test mission was a bit buggy (and I found another code bug in testing it). Attaching working version. Call stack: > fs2_open_3_6_11d_INF_SSE2.exe!multi_oo_send_changed_object(object * changedobj=0x010066b8) Line 1524 + 0x12 bytes C++ fs2_open_3_6_11d_INF_SSE2.exe!sexp_set_object_position(int n=-1) Line 5818 + 0x9 bytes C++ fs2_open_3_6_11d_INF_SSE2.exe!eval_sexp(int cur_node=10, int referenced_node=-1) Line 17328 + 0x9 bytes C++ fs2_open_3_6_11d_INF_SSE2.exe!eval_when(int n=9, int use_arguments=0) Line 7153 + 0xb bytes C++ fs2_open_3_6_11d_INF_SSE2.exe!eval_sexp(int cur_node=2, int referenced_node=-1) Line 16761 + 0x16 bytes C++ fs2_open_3_6_11d_INF_SSE2.exe!mission_process_event(int event=0) Line 913 + 0xb bytes C++ fs2_open_3_6_11d_INF_SSE2.exe!mission_eval_goals() Line 1062 + 0x9 bytes C++ fs2_open_3_6_11d_INF_SSE2.exe!game_simulation_frame() Line 4309 C++ fs2_open_3_6_11d_INF_SSE2.exe!game_frame(int paused=0) Line 4748 C++ fs2_open_3_6_11d_INF_SSE2.exe!game_do_frame() Line 5179 + 0x7 bytes C++ fs2_open_3_6_11d_INF_SSE2.exe!game_do_state(int state=2) Line 6947 C++ fs2_open_3_6_11d_INF_SSE2.exe!gameseq_process_events() Line 405 + 0x14 bytes C++ fs2_open_3_6_11d_INF_SSE2.exe!game_main(char * cmdline=0x00151f14) Line 7517 + 0x5 bytes C++ fs2_open_3_6_11d_INF_SSE2.exe!WinMain(HINSTANCE__ * hInst=0x00400000, HINSTANCE__ * hPrev=0x00000000, char * szCmdLine=0x00151f14, int nCmdShow=1) Line 7597 + 0x9 bytes C++ fs2_open_3_6_11d_INF_SSE2.exe!__tmainCRTStartup() Line 263 + 0x2c bytes C fs2_open_3_6_11d_INF_SSE2.exe!WinMainCRTStartup() Line 182 C kernel32.dll!7c817077() [Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll] Autos: - Net_players 0x02224238 struct net_player * Net_players {m_player=0x014add00 player_id=0 tracker_player_id=47732 ...} net_player [12] + [0] {m_player=0x014add00 player_id=0 tracker_player_id=47732 ...} net_player + [1] {m_player=0x00000000 player_id=0 tracker_player_id=0 ...} net_player + [2] {m_player=0x00000000 player_id=0 tracker_player_id=0 ...} net_player + [3] {m_player=0x00000000 player_id=0 tracker_player_id=0 ...} net_player + [4] {m_player=0x00000000 player_id=0 tracker_player_id=0 ...} net_player + [5] {m_player=0x00000000 player_id=0 tracker_player_id=0 ...} net_player + [6] {m_player=0x00000000 player_id=0 tracker_player_id=0 ...} net_player + [7] {m_player=0x00000000 player_id=0 tracker_player_id=0 ...} net_player + [8] {m_player=0x00000000 player_id=0 tracker_player_id=0 ...} net_player + [9] {m_player=0x00000000 player_id=0 tracker_player_id=0 ...} net_player + [10] {m_player=0x00000000 player_id=0 tracker_player_id=0 ...} net_player + [11] {m_player=0x00000000 player_id=0 tracker_player_id=0 ...} net_player - Net_players[idx] {m_player=0x00000000 player_id=0 tracker_player_id=0 ...} net_player + m_player 0x00000000 {callsign=0x00000000 <Bad Ptr> short_callsign=0x0000001d <Bad Ptr> short_callsign_width=??? ...} player * player_id 0 short tracker_player_id 0 int flags 0 int state 0 int reliable_socket 4294967295 unsigned int client_cinfo_seq 0 unsigned short client_server_seq 0 unsigned short last_heard_time 0 long + s_info {ping={...} wing_index_backup=0 wing_index=0 ...} net_player_server_info + p_info {p_objp=0x00000000 team=0 ship_index=0 ...} net_player_info sv_bytes_sent 0 int sv_last_pl 0 int cl_bytes_recvd 0 int cl_last_pl 0 int - Net_players[idx].m_player 0x00000000 {callsign=0x00000000 <Bad Ptr> short_callsign=0x0000001d <Bad Ptr> short_callsign_width=??? ...} player * + callsign 0x00000000 <Bad Ptr> char [29] + short_callsign 0x0000001d <Bad Ptr> char [29] short_callsign_width CXX0030: Error: expression cannot be evaluated + image_filename 0x00000040 <Bad Ptr> char [32] + squad_filename 0x00000060 <Bad Ptr> char [32] + squad_name 0x00000080 <Bad Ptr> char [33] num_campaigns CXX0030: Error: expression cannot be evaluated + current_campaign 0x000000a8 <Bad Ptr> char [32] campaigns CXX0017: Error: symbol "" not found readyroom_listing_mode CXX0030: Error: expression cannot be evaluated main_hall CXX0030: Error: expression cannot be evaluated flags CXX0030: Error: expression cannot be evaluated save_flags CXX0030: Error: expression cannot be evaluated + keyed_targets 0x000000dc {next=??? prev=??? how_added=??? ...} htarget_list [8] current_hotkey_set CXX0030: Error: expression cannot be evaluated + lead_target_pos {xyz={...} a1d=0x00000160 } vec3d lead_target_cheat CXX0030: Error: expression cannot be evaluated lead_indicator_active CXX0030: Error: expression cannot be evaluated lock_indicator_x CXX0030: Error: expression cannot be evaluated lock_indicator_y CXX0030: Error: expression cannot be evaluated lock_indicator_start_x CXX0030: Error: expression cannot be evaluated lock_indicator_start_y CXX0030: Error: expression cannot be evaluated lock_indicator_visible CXX0030: Error: expression cannot be evaluated lock_time_to_target CXX0030: Error: expression cannot be evaluated lock_dist_to_target CXX0030: Error: expression cannot be evaluated last_ship_flown_si_index CXX0030: Error: expression cannot be evaluated objnum CXX0030: Error: expression cannot be evaluated + bi {status=0x00000198 } button_info + ci {pitch=??? vertical=??? heading=??? ...} control_info + stats {flags=??? score=??? rank=??? ...} scoring_struct friendly_hits CXX0030: Error: expression cannot be evaluated friendly_damage CXX0030: Error: expression cannot be evaluated friendly_last_hit_time CXX0030: Error: expression cannot be evaluated last_warning_message_time CXX0030: Error: expression cannot be evaluated control_mode CXX0030: Error: expression cannot be evaluated saved_viewer_mode CXX0030: Error: expression cannot be evaluated check_warn_timestamp CXX0030: Error: expression cannot be evaluated distance_warning_count CXX0030: Error: expression cannot be evaluated distance_warning_time CXX0030: Error: expression cannot be evaluated allow_warn_timestamp CXX0030: Error: expression cannot be evaluated warn_count CXX0030: Error: expression cannot be evaluated damage_this_burst CXX0030: Error: expression cannot be evaluated repair_sound_loop CXX0030: Error: expression cannot be evaluated cargo_scan_loop CXX0030: Error: expression cannot be evaluated praise_count CXX0030: Error: expression cannot be evaluated allow_praise_timestamp CXX0030: Error: expression cannot be evaluated praise_delay_timestamp CXX0030: Error: expression cannot be evaluated ask_help_count CXX0030: Error: expression cannot be evaluated allow_ask_help_timestamp CXX0030: Error: expression cannot be evaluated scream_count CXX0030: Error: expression cannot be evaluated allow_scream_timestamp CXX0030: Error: expression cannot be evaluated low_ammo_complaint_count CXX0030: Error: expression cannot be evaluated allow_ammo_timestamp CXX0030: Error: expression cannot be evaluated subsys_in_view CXX0030: Error: expression cannot be evaluated request_repair_timestamp CXX0030: Error: expression cannot be evaluated cargo_inspect_time CXX0030: Error: expression cannot be evaluated target_is_dying CXX0030: Error: expression cannot be evaluated current_target_sx CXX0030: Error: expression cannot be evaluated current_target_sy CXX0030: Error: expression cannot be evaluated target_in_lock_cone CXX0030: Error: expression cannot be evaluated locking_subsys CXX0017: Error: symbol "" not found locking_subsys_parent CXX0030: Error: expression cannot be evaluated locking_on_center CXX0030: Error: expression cannot be evaluated killer_objtype CXX0030: Error: expression cannot be evaluated killer_species CXX0030: Error: expression cannot be evaluated killer_weapon_index CXX0030: Error: expression cannot be evaluated + killer_parent_name 0x00000f1c <Bad Ptr> char [32] check_for_all_alone_msg CXX0030: Error: expression cannot be evaluated update_dumbfire_time CXX0030: Error: expression cannot be evaluated update_lock_time CXX0030: Error: expression cannot be evaluated threat_flags CXX0030: Error: expression cannot be evaluated auto_advance CXX0030: Error: expression cannot be evaluated + m_local_options {flags=??? obj_update_level=??? } multi_local_options + m_server_options {squad_set=??? endgame_set=??? flags=??? ...} multi_server_options insignia_texture CXX0030: Error: expression cannot be evaluated tips CXX0030: Error: expression cannot be evaluated shield_penalty_stamp CXX0030: Error: expression cannot be evaluated failures_this_session CXX0030: Error: expression cannot be evaluated show_skip_popup CXX0030: Error: expression cannot be evaluated num_variables CXX0030: Error: expression cannot be evaluated + player_variables 0x00000f90 {type=??? text=0x00000f94 <Bad Ptr> variable_name=0x00000fb4 <Bad Ptr> } sexp_variable [100] + death_message 0x00002a20 <Bad Ptr> char [256] + lua_ci {pitch=??? vertical=??? heading=??? ...} control_info + lua_bi {status=0x00002b54 } button_info + lua_bi_full {status=0x00002b64 } button_info Objects 0x010066b8 struct object * Objects {next=0x010068ec prev=0x00ffc2d0 signature=1 ...} object [0] - changedobj 0x010066b8 struct object * Objects {next=0x010068ec prev=0x00ffc2d0 signature=1 ...} object * + next 0x010068ec {next=0x01007ef4 prev=0x010066b8 signature=2 ...} object * + prev 0x00ffc2d0 struct object obj_used_list {next=0x010066b8 prev=0x0100c10c signature=0 ...} object * signature 1 int type 1 '' char parent -1 int parent_sig 1 int parent_type 1 '' char instance 0 int flags 1031 unsigned int + pos {xyz={...} a1d=0x010066dc } vec3d + orient {vec={...} a2d=0x010066e8 a1d=0x010066e8 } matrix radius 14.109023 float + last_pos {xyz={...} a1d=0x01006710 } vec3d + last_orient {vec={...} a2d=0x0100671c a1d=0x0100671c } matrix + phys_info {flags=2 mass=302.46011 center_of_mass={...} ...} physics_info + shield_quadrant 0x0100687c float [4] hull_strength 250.00000 float sim_hull_strength 0.00000000 float + objsnd_num 0x01006894 short [32] net_signature 2 unsigned short num_pairs 3 int + jnp 0x00000000 {m_name=0x0000000c <Bad Ptr> m_modelnum=??? m_objnum=??? ...} jump_node * + dock_list 0x00000000 {next=??? dockpoint_used=??? docked_objp=??? } dock_instance * + dead_dock_list 0x00000000 {next=??? dockpoint_used=??? docked_objp=??? } dock_instance * collision_group_id 0 int idx 1 int |
2010-01-28 23:52
|
|
|
OK I misread that it's just sending the packet to 12 ships. Bad piece of code there as it should be using the global variable instead of a hard coded 12. Anyway it assumes any ship or waypoint is a player object and tries to move it. Looking at that code it seems quite a few things could go wrong. For instance I don't see any updates for moving a team or wing if the player is part of it. This is all in sexp.cpp function sexp_set_object_position() |
|
That should fix it. It will also stop the server sending itself a packet to tell itself to update the ship position to the position it's already at. :p |
Date Modified | Username | Field | Change |
---|---|---|---|
2010-01-28 22:42 | sausage | New Issue | |
2010-01-28 22:42 | sausage | File Added: testteleport.fs2 | |
2010-01-28 23:50 | FUBAR-BDHR | Note Added: 0011598 | |
2010-01-28 23:52 | FUBAR-BDHR | File Added: testteleport2.fs2 | |
2010-01-29 00:06 | FUBAR-BDHR | Note Added: 0011599 | |
2010-02-06 11:06 | karajorma | Status | new => assigned |
2010-02-06 11:06 | karajorma | Assigned To | => karajorma |
2010-02-12 06:44 | karajorma | Note Added: 0011652 | |
2010-02-12 06:44 | karajorma | Status | assigned => resolved |
2010-02-12 06:44 | karajorma | Fixed in Version | => 3.6.11 |
2010-02-12 06:44 | karajorma | Resolution | open => fixed |