diff --git a/assets/translations/gui.csv b/assets/translations/gui.csv index e8c5af3..3f1a17c 100644 --- a/assets/translations/gui.csv +++ b/assets/translations/gui.csv @@ -41,3 +41,6 @@ version_update_desc,"На сервере обнаружена новая (или Install it?", video,Видео,Video, win_rounds,Раундов до победы,Rounds to win, +toggle_walk,Переключение ходьбы,Toggle walking, +toggle_crouch,Переключение приседания,Toggle crouching, +toggle_scope,Переключение прицеливания,Toggle scoping, diff --git a/assets/translations/gui.en.translation b/assets/translations/gui.en.translation index 890c98a..46eb83e 100644 Binary files a/assets/translations/gui.en.translation and b/assets/translations/gui.en.translation differ diff --git a/assets/translations/gui.ikg.translation b/assets/translations/gui.ikg.translation index 66b89b0..4ce8ddc 100644 Binary files a/assets/translations/gui.ikg.translation and b/assets/translations/gui.ikg.translation differ diff --git a/assets/translations/gui.ru.translation b/assets/translations/gui.ru.translation index 06b4b31..f38c70c 100644 Binary files a/assets/translations/gui.ru.translation and b/assets/translations/gui.ru.translation differ diff --git a/assets/translations/info.csv b/assets/translations/info.csv index 95cd18b..d906198 100644 --- a/assets/translations/info.csv +++ b/assets/translations/info.csv @@ -1,7 +1,7 @@ key,ru,en,ikg au_loading,Подгружаем данные с сервера…,Loading data from server…, -au_err_load,Ошибка загрузки данных: ,Error while loading data: , -au_err_install,Ошибка загрузки новой версии: ,Error while downloading new version: , +au_err_load,[color=red]Ошибка загрузки данных: {error}[/color] ,[color=red]Error while loading data: {error}[/color], +au_err_install,[color=red]Ошибка загрузки новой версии: {error}[/color],[color=red]Error while downloading new version: {error}[/color], au_new_version,Доступна новая версия!,New version available!, -au_current_version,У вас самая актуальная версия игры!,Your version is the current version!, +au_current_version,[color=green]У вас самая актуальная версия игры! [/color],[color=green]Your version is the current version! [/color], vr_version,Текущая версия игры: ,Game version: , diff --git a/assets/translations/info.en.translation b/assets/translations/info.en.translation index 2cc9f92..3902be3 100644 Binary files a/assets/translations/info.en.translation and b/assets/translations/info.en.translation differ diff --git a/assets/translations/info.ru.translation b/assets/translations/info.ru.translation index 5b75108..2fbcd65 100644 Binary files a/assets/translations/info.ru.translation and b/assets/translations/info.ru.translation differ diff --git a/gui/client_settings/client_settings.tscn b/gui/client_settings/client_settings.tscn index 04cdd62..f070c68 100644 --- a/gui/client_settings/client_settings.tscn +++ b/gui/client_settings/client_settings.tscn @@ -21,7 +21,7 @@ layout_mode = 2 custom_minimum_size = Vector2(512, 256) layout_mode = 2 tab_alignment = 1 -current_tab = 3 +current_tab = 2 [node name="gameplay" type="VBoxContainer" parent="CenterContainer/VBoxContainer/PanelContainer"] visible = false @@ -38,7 +38,6 @@ layout_mode = 2 text = "fullscreen" [node name="controls" type="VBoxContainer" parent="CenterContainer/VBoxContainer/PanelContainer"] -visible = false layout_mode = 2 metadata/_tab_index = 2 @@ -54,6 +53,7 @@ unique_name_in_owner = true custom_minimum_size = Vector2(256, 0) layout_mode = 2 size_flags_horizontal = 3 +size_flags_vertical = 1 min_value = 0.001 max_value = 0.02 step = 0.001 @@ -68,7 +68,23 @@ value = 0.02 allow_greater = true allow_lesser = true +[node name="ToggleCrouch" type="CheckButton" parent="CenterContainer/VBoxContainer/PanelContainer/controls"] +unique_name_in_owner = true +layout_mode = 2 +text = "toggle_crouch" + +[node name="ToggleScope" type="CheckButton" parent="CenterContainer/VBoxContainer/PanelContainer/controls"] +unique_name_in_owner = true +layout_mode = 2 +text = "toggle_scope" + +[node name="ToggleWalk" type="CheckButton" parent="CenterContainer/VBoxContainer/PanelContainer/controls"] +unique_name_in_owner = true +layout_mode = 2 +text = "toggle_walk" + [node name="audio" type="VBoxContainer" parent="CenterContainer/VBoxContainer/PanelContainer"] +visible = false layout_mode = 2 metadata/_tab_index = 3 @@ -83,6 +99,7 @@ text = "audio_gameplay" unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 +size_flags_vertical = 1 max_value = 1.0 step = 0.01 value = 1.0 @@ -102,6 +119,9 @@ text = "Покинуть сессию" [connection signal="toggled" from="CenterContainer/VBoxContainer/PanelContainer/video/FullscreenButton" to="CenterContainer" method="_on_fullscreen_button_toggled"] [connection signal="value_changed" from="CenterContainer/VBoxContainer/PanelContainer/controls/Sensitivity/SensitivitySlider" to="CenterContainer" method="_on_sensitivity_slider_value_changed"] [connection signal="value_changed" from="CenterContainer/VBoxContainer/PanelContainer/controls/Sensitivity/SensitivityBox" to="CenterContainer" method="_on_sensitivity_box_value_changed"] +[connection signal="toggled" from="CenterContainer/VBoxContainer/PanelContainer/controls/ToggleCrouch" to="CenterContainer" method="_on_toggle_crouch_toggled"] +[connection signal="toggled" from="CenterContainer/VBoxContainer/PanelContainer/controls/ToggleScope" to="CenterContainer" method="_on_toggle_scope_toggled"] +[connection signal="toggled" from="CenterContainer/VBoxContainer/PanelContainer/controls/ToggleWalk" to="CenterContainer" method="_on_toggle_walk_toggled"] [connection signal="value_changed" from="CenterContainer/VBoxContainer/PanelContainer/audio/GameplayMainAudio/GameplayMainSlider" to="CenterContainer" method="_on_gameplay_main_slider_value_changed"] [connection signal="pressed" from="CenterContainer/VBoxContainer/StopSession" to="CenterContainer" method="_on_stop_session_pressed"] [connection signal="pressed" from="CenterContainer/VBoxContainer/LeaveButton" to="CenterContainer" method="_on_leave_button_pressed"] diff --git a/gui/client_settings/client_settings_menu.gd b/gui/client_settings/client_settings_menu.gd index ffb5328..9e5750d 100644 --- a/gui/client_settings/client_settings_menu.gd +++ b/gui/client_settings/client_settings_menu.gd @@ -9,6 +9,9 @@ func _ready() -> void: Lobby.lobby_closed.connect(%StopSession.hide) %SensitivitySlider.set_value_no_signal(ClientSettings.SENSITIVITY) %SensitivityBox.set_value_no_signal(ClientSettings.SENSITIVITY) + %ToggleCrouch.set_pressed_no_signal(ClientSettings.TOGGLE_CROUCH) + %ToggleScope.set_pressed_no_signal(ClientSettings.TOGGLE_SCOPE) + %ToggleWalk.set_pressed_no_signal(ClientSettings.TOGGLE_WALK) func _input(event: InputEvent) -> void: if event.is_action_pressed("menu_settings"): @@ -39,3 +42,15 @@ func _on_leave_button_pressed() -> void: func _on_stop_session_pressed() -> void: if multiplayer.is_server(): Session.end_session() + + +func _on_toggle_crouch_toggled(toggled_on: bool) -> void: + ClientSettings.TOGGLE_CROUCH = toggled_on + + +func _on_toggle_scope_toggled(toggled_on: bool) -> void: + ClientSettings.TOGGLE_SCOPE = toggled_on + + +func _on_toggle_walk_toggled(toggled_on: bool) -> void: + ClientSettings.TOGGLE_WALK = toggled_on diff --git a/gui/main_menu/version_label.gd b/gui/main_menu/version_label.gd index ff3e82d..5ff674d 100644 --- a/gui/main_menu/version_label.gd +++ b/gui/main_menu/version_label.gd @@ -1,10 +1,18 @@ extends RichTextLabel +var status: StringName = "au_loading" +var error: int func _ready() -> void: AutoUpdate.update_version_text.connect(update_version) - update_version(tr("au_loading")) + update_version("au_loading") -func update_version(version: StringName): - text = tr("vr_version") + preload("res://version.tres").version + "\n" + version +func update_version(version: StringName, new_error = -1): + status = version + error = new_error + text = tr("vr_version") + preload("res://version.tres").version + "\n" + tr(version).format({"error":error}) + +func _notification(what: int) -> void: + if what == NOTIFICATION_TRANSLATION_CHANGED: + text = tr("vr_version") + preload("res://version.tres").version + "\n" + tr(status).format({"error":error}) diff --git a/players/molikman.tscn b/players/molikman.tscn index 20b4220..210fd7e 100644 --- a/players/molikman.tscn +++ b/players/molikman.tscn @@ -12472,7 +12472,7 @@ properties/1/path = NodePath("PlayerInput:compressed_states") properties/1/spawn = true properties/1/replication_mode = 1 -[node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("weapon_models") groups=["Player"]] +[node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("weapon_models")] collision_layer = 2 collision_mask = 3 script = ExtResource("1_l07l8") @@ -13675,7 +13675,6 @@ offset_top = -0.2800293 offset_right = -0.32000732 grow_vertical = 0 mouse_filter = 2 -theme_type_variation = &"HPBar" step = 1.0 value = 100.0 fill_mode = 3 diff --git a/players/player/player_input.gd b/players/player/player_input.gd index 386c33b..16c4ed2 100644 --- a/players/player/player_input.gd +++ b/players/player/player_input.gd @@ -14,8 +14,8 @@ const WALK: int = 0b100 signal jumped signal drop signal switch_weapon(to_slot: StringName) -signal fire_begin(timestamp: float) -signal fire_end(timestamp: float) +signal fire_begin +signal fire_end signal alternate_state signal switch_firemode signal reload @@ -53,9 +53,9 @@ func _unhandled_input(event: InputEvent) -> void: switch_on_server.rpc_id(1,"knife") if event.is_action_pressed("plr_fire"): - fire_on_server.rpc_id(1,false,Rewind.timestamp) + fire_on_server.rpc_id(1,false) if event.is_action_released("plr_fire"): - fire_on_server.rpc_id(1,true,Rewind.timestamp) + fire_on_server.rpc_id(1,true) if event.is_action_pressed("plr_scope"): alternate_state_on_server.rpc_id(1) if event.is_action_pressed("plr_firemode"): @@ -126,12 +126,12 @@ func drop_on_server() -> void: drop.emit() @rpc("authority","call_local","reliable") -func fire_on_server(end: bool, timestamp: float) -> void: +func fire_on_server(end: bool) -> void: if not multiplayer.is_server(): return if end: - fire_end.emit(timestamp) + fire_end.emit() else: - fire_begin.emit(timestamp) + fire_begin.emit() @rpc("authority","call_local","reliable") func alternate_state_on_server() -> void: diff --git a/project.godot b/project.godot index e06ca20..0b5e30b 100644 --- a/project.godot +++ b/project.godot @@ -29,7 +29,6 @@ Registry="*res://systems/registry.gd" Shop="*res://gui/buy_menu/shop.gd" MouseConfiner="*res://gui/mouse_confiner.gd" AutoUpdate="*res://systems/auto_update.gd" -Rewind="*res://systems/rewind.gd" [debug] diff --git a/systems/auto_update.gd b/systems/auto_update.gd index b684782..e0eb7a4 100644 --- a/systems/auto_update.gd +++ b/systems/auto_update.gd @@ -5,7 +5,7 @@ var popup_scene: PackedScene = preload("uid://5goo8fyxkv33") var new_version_avaiable: bool var popup: ConfirmationDialog -signal update_version_text(to: StringName) +signal update_version_text(to: StringName,error: int) func _ready() -> void: request_completed.connect(on_request_completed) @@ -18,22 +18,22 @@ func _ready() -> void: patch_request.download_file = exec_dir.path_join("chelimbalo.pck") patch_request.request_completed.connect(patch_downloaded) - update_version_text.emit(tr("au_loading")) + update_version_text.emit("au_loading") request("https://2ndbeam.ru/durenije/chelimbalo/release/deploy_data") func on_request_completed(result: int, _response_code: int, _headers: PackedStringArray, body: PackedByteArray): if result != OK: - update_version_text.emit("[color=red]" + tr("au_err_load") + str(result) +"[/color]") + update_version_text.emit("au_err_load",result) return var ver_hash = body.get_string_from_ascii().split("\n")[1] if ver_hash != load("res://version.tres").version: - update_version_text.emit(tr("au_new_version")) + update_version_text.emit("au_new_version") popup.popup_centered() else: - update_version_text.emit("[color=green]"+tr("au_current_version")+"[/color]") + update_version_text.emit("au_current_version") func download_button_pressed() -> void: popup.get_node("HTTPRequest").request("https://2ndbeam.ru/durenije/chelimbalo/release/chelimbalo.pck") @@ -43,4 +43,4 @@ func patch_downloaded(result: int, _response_code: int, _headers: PackedStringAr OS.create_process(OS.get_executable_path(),OS.get_cmdline_args()) get_tree().quit() else: - update_version_text.emit("[color=red]" + tr("au_err_install") + str(result) +"[/color]") + update_version_text.emit("au_err_install",result) diff --git a/systems/rewind.gd b/systems/rewind.gd deleted file mode 100644 index a5d29ef..0000000 --- a/systems/rewind.gd +++ /dev/null @@ -1,17 +0,0 @@ -extends Node - -const timestamp_range:float = 200.0 #MSEC -const timestamps_amount: int = 200 - -var timestamp: float = 0 - -func _process(delta: float) -> void: - if not is_multiplayer_authority(): - return - if Session.session_started_flag: - timestamp += delta - sync_time.rpc(timestamp) - -@rpc -func sync_time(new_timestamp: float) -> void: - timestamp = new_timestamp diff --git a/systems/rewind.gd.uid b/systems/rewind.gd.uid deleted file mode 100644 index 3d6a572..0000000 --- a/systems/rewind.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://bafcih3g8gi2q diff --git a/systems/weapon_system/weapon_state.gd b/systems/weapon_system/weapon_state.gd index fed1121..ce25367 100644 --- a/systems/weapon_system/weapon_state.gd +++ b/systems/weapon_system/weapon_state.gd @@ -8,23 +8,23 @@ signal return_to_previous var machine: WeaponSubStateMachine -func _use_begin(timestamp: float) -> void: +func _use_begin() -> void: pass @rpc("authority","call_remote","reliable") -func use_begin(timestamp: float) -> void: - _use_begin(timestamp) +func use_begin() -> void: + _use_begin() if is_multiplayer_authority(): - use_begin.rpc(timestamp) + use_begin.rpc() -func _use_end(timestamp: float): +func _use_end(): pass @rpc("authority","call_remote","reliable") -func use_end(timestamp: float) -> void: - _use_end(timestamp) +func use_end() -> void: + _use_end() if is_multiplayer_authority(): - use_end.rpc(timestamp) + use_end.rpc() func _alternate_state() -> void: pass diff --git a/systems/weapon_system/weapon_substate_machine.gd b/systems/weapon_system/weapon_substate_machine.gd index fc75ecc..02ae1f4 100644 --- a/systems/weapon_system/weapon_substate_machine.gd +++ b/systems/weapon_system/weapon_substate_machine.gd @@ -70,12 +70,12 @@ func _enter() -> void: func _exit() -> void: super() -func use_begin(timestamp: float) -> void: +func use_begin() -> void: if current_state != null: - current_state.use_begin(timestamp) -func use_end(timestamp: float) -> void: + current_state.use_begin() +func use_end() -> void: if current_state != null: - current_state.use_end(timestamp) + current_state.use_end() func alternate_state() -> void: if current_state != null: current_state.alternate_state() diff --git a/systems/weapon_system/weapon_system.gd b/systems/weapon_system/weapon_system.gd index 101344c..a99b2e2 100644 --- a/systems/weapon_system/weapon_system.gd +++ b/systems/weapon_system/weapon_system.gd @@ -218,17 +218,17 @@ func _physics_process(delta: float) -> void: return current_state.physics_update(delta) -func use_begin(timestamp: float) -> void: +func use_begin() -> void: if not multiplayer.is_server() or Session.round_state == Session.ROUND_STATES.BUY or disabled: return if current_state != null: - current_state.use_begin(timestamp) + current_state.use_begin() -func use_end(timestamp: float) -> void: +func use_end() -> void: if not multiplayer.is_server() or Session.round_state == Session.ROUND_STATES.BUY or disabled: return if current_state != null: - current_state.use_end(timestamp) + current_state.use_end() func alternate_state() -> void: if not multiplayer.is_server() or Session.round_state == Session.ROUND_STATES.BUY or disabled: diff --git a/weapons/bomb/bomb_idle_state.gd b/weapons/bomb/bomb_idle_state.gd index b3a099e..514d0e1 100644 --- a/weapons/bomb/bomb_idle_state.gd +++ b/weapons/bomb/bomb_idle_state.gd @@ -7,6 +7,6 @@ func _enter() -> void: func _exit() -> void: pass -func _use_begin(_timestamp: float) -> void: +func _use_begin() -> void: if Session.is_on_site(machine.player.player_id): transition.emit("Plant") diff --git a/weapons/bomb/bomb_main_state.gd b/weapons/bomb/bomb_main_state.gd index 80d90f6..610b9d0 100644 --- a/weapons/bomb/bomb_main_state.gd +++ b/weapons/bomb/bomb_main_state.gd @@ -26,7 +26,7 @@ func on_animation_finished(animation: StringName): machine.ammo -= 1 return_to_previous.emit() -func use_end(_timestamp: float) -> void: +func use_end() -> void: if is_multiplayer_authority() == false: return transition.emit("Idle") diff --git a/weapons/gun/bullet_hole.tscn b/weapons/gun/bullet_hole.tscn index 7d3dcda..a4c2cfa 100644 --- a/weapons/gun/bullet_hole.tscn +++ b/weapons/gun/bullet_hole.tscn @@ -25,4 +25,11 @@ ignore_time_scale = true [node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."] replication_config = SubResource("SceneReplicationConfig_wpexx") +[node name="Timer2" type="Timer" parent="."] +wait_time = 0.06 +one_shot = true +autostart = true +ignore_time_scale = true + [connection signal="timeout" from="Timer" to="." method="queue_free"] +[connection signal="timeout" from="Timer2" to="MultiplayerSynchronizer" method="queue_free"] diff --git a/weapons/gun/idle_state.gd b/weapons/gun/idle_state.gd index ad35586..e865b05 100644 --- a/weapons/gun/idle_state.gd +++ b/weapons/gun/idle_state.gd @@ -11,7 +11,7 @@ func _exit() -> void: if is_multiplayer_authority(): machine.player.get_node("PlayerInput").reload.disconnect(init_reload) -func _use_begin(timestamp: float) -> void: +func _use_begin() -> void: if machine.ammo > 0: transition.emit("Shoot") diff --git a/weapons/gun/semi_pellet_shoot_state.gd b/weapons/gun/semi_pellet_shoot_state.gd index 08d37f5..80d89dd 100644 --- a/weapons/gun/semi_pellet_shoot_state.gd +++ b/weapons/gun/semi_pellet_shoot_state.gd @@ -14,7 +14,6 @@ extends WeaponState @export var fire_timer: Timer var bullets_shot: int = 0 -var cached_timestamp: float = 0 func _enter() -> void: fire() @@ -28,10 +27,9 @@ func on_animation_finished(animation): if animation == machine.animation_prefix + with_morphems("shoot"): transition.emit("Idle") -func _use_begin(timestamp: float) -> void: +func _use_begin() -> void: if fire_timer.time_left > 0: return - cached_timestamp = timestamp fire() func fire() -> void: diff --git a/weapons/gun/semi_shoot_state.gd b/weapons/gun/semi_shoot_state.gd index da7dfae..b0783d9 100644 --- a/weapons/gun/semi_shoot_state.gd +++ b/weapons/gun/semi_shoot_state.gd @@ -26,7 +26,7 @@ func on_animation_finished(animation): if animation == machine.animation_prefix + with_morphems("shoot"): transition.emit("Idle") -func _use_begin(timestamp: float) -> void: +func _use_begin() -> void: if fire_timer.time_left > 0: return fire() diff --git a/weapons/knife/knife_attack.gd b/weapons/knife/knife_attack.gd index 18ebee4..091c750 100644 --- a/weapons/knife/knife_attack.gd +++ b/weapons/knife/knife_attack.gd @@ -24,8 +24,8 @@ func on_animation_finished(animation): attack() machine.animation_player.play(machine.animation_prefix + "attack") -func _use_begin(_timestamp: float) -> void: +func _use_begin() -> void: end_it = false -func _use_end(_timestamp: float) -> void: +func _use_end() -> void: end_it = true diff --git a/weapons/knife/knife_idle.gd b/weapons/knife/knife_idle.gd index 6aa71b2..ce038c7 100644 --- a/weapons/knife/knife_idle.gd +++ b/weapons/knife/knife_idle.gd @@ -6,7 +6,7 @@ func _enter() -> void: func _exit() -> void: pass -func _use_begin(_timestamp: float) -> void: +func _use_begin() -> void: transition.emit("Attack") func _alternate_state() -> void: diff --git a/weapons/molikman/molik/idle_state.gd b/weapons/molikman/molik/idle_state.gd index 8d31a91..77780f2 100644 --- a/weapons/molikman/molik/idle_state.gd +++ b/weapons/molikman/molik/idle_state.gd @@ -6,6 +6,6 @@ func _enter() -> void: func _exit() -> void: pass -func _use_begin(timestamp: float) -> void: +func _use_begin() -> void: if machine.ammo > 0: transition.emit("Throw")