SirNukes Hotkey Collection - Fleet control commands hotkey help

The place to discuss scripting and game modifications for X4: Foundations.

Moderators: Moderators for English X Forum, Scripting / Modding Moderators

Post Reply
KamikazeDuck
Posts: 2
Joined: Tue, 17. Nov 20, 07:38
x4

SirNukes Hotkey Collection - Fleet control commands hotkey help

Post by KamikazeDuck » Tue, 17. Nov 20, 08:50

Hey guys I'm going to try to be as brief as possible, but I want to give a little background as well.

I'm new to this forum, relatively new to X games, and I have never written a video game mod or script before. I have dabbled in small edits to existing mods for games before, but that's the most.

That being said, my programming and troubleshooting knowledge is quite good since I deal with reading and troubleshooting code for my job, and it interests me--so I should understand what your saying and can usually work through code fairly well.

I am using SirNukes Mod Support APIs, and his Hotkey Collection as a starting point, with the python pipe server.

The intent of my hotkeys is fairly simple (at least I thought) for now--I want to make at least two hotkeys. One which triggers a fleet attack command on my target,

Some possibly useful information:
  • I am running X4 on Steam
  • I could not get anything to work when I was editing the steam 01.dat file, so I pulled the source code from git and am editting the SN_Hotkeys.xml file
  • All other hotkeys work
Here is the cue which I created for this. It shows up properly in the hotkeys menu and the dubug line is run when I press the assigned hotkey at the very least.

Code: Select all

    <cue name="Attack_Target" instantiate="true" namespace="this">
      <conditions>
        <event_cue_signalled/>
        <!-- Verify the player has a target selected. -->
        <check_value value="player.target"/>
        <!-- Verify the player is piloting a ship.-->
        <!-- TODO: check this in hotkey api instead (space/flying context).-->
        <check_value value="player.occupiedship"/>
      </conditions>
      <actions>
        <!-- Debug message. -->
        <raise_lua_event name="'directChatMessageReceived'" param="'KeyCapture;Starting event_attack_started'"/>
        <debug_text text="'KeyCapture Triggered order.player.attack'" filter="general"/>

        <run_script name="'order.player.attack'">
          <param name="primarytarget" value="player.target " />
          <param name="allowothertargets" value="false" />
          <param name="squad_attack" value="true" />
        </run_script>
      </actions>
    </cue>
I have also tried the following since I saw this syntax pop up quite often in the 08.dat file without success.

Code: Select all

        
        <start_attack object="player.occupiedship" target="player.target " />
          <run_script name="'order.fight.attack.object'">
            <param name="primarytarget" value="player.target " />
            <param name="allowothertargets" value="false" />
            <param name="squad_attack" value="true" />
          </run_script>
        <stop_attack object="player.occupiedship" target="player.target " />
Here is the full hotkey xml file.

Code: Select all

<?xml version="1.0" encoding="utf-8" ?>
<mdscript name="SN_Hotkey_Collection" 
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <!--
  Create some extra key-press activated commands.
  Acts as an example of using the hotkey api, as well as hopefully
  being useful.
  
  Ideas:
  disable_collisions_between : turn on/off collision with player and target
  zoom: zoom in using fov adjustment (needs care to avoid fov getting stuck)
  -->

  <cues>

    <!-- Register the main lua file. -->
    <cue name="Load_Lua_Files" instantiate="true">
      <conditions>
        <event_ui_triggered screen="'Lua_Loader'" control="'Ready'" />
      </conditions>
      <actions>
        <raise_lua_event name="'Lua_Loader.Load'"
                         param="'extensions.sn_hotkey_collection.lua.Hotkeys'"/>
      </actions>
    </cue>


    <!--
      Text storage cue, for easier lookup in general.
      Members are descriptive names of the text strings, prefixed with $.
    -->
    <cue name="Text"/>
    <library name="Load_Text">
      <actions>

        <set_value exact="{68537, 4000}" name="Text.$kc_target_follow_name" />
        <set_value exact="{68537, 4001}" name="Text.$kc_target_follow_mouseover" />
        <set_value exact="{68537, 4002}" name="Text.$kc_eject_illegals_name" />
        <set_value exact="{68537, 4003}" name="Text.$kc_eject_illegals_mouseover" />

        <set_value exact="{68537, 4004}" name="Text.$kc_toggle_seta_name" />
        <set_value exact="{68537, 4005}" name="Text.$kc_toggle_seta_mouseover" />

        <set_value exact="{68537, 4006}" name="Text.$kc_zoom_in_name" />
        <set_value exact="{68537, 4007}" name="Text.$kc_zoom_in_mouseover" />

        <set_value exact="{68537, 4008}" name="Text.$kc_attack_target_name" />
        <set_value exact="{68537, 4009}" name="Text.$kc_attack_target_mouseover" />

        <set_value exact="{68537, 4100}" name="Text.$kc_tracker_mine_name" />
        <set_value exact="{68537, 4101}" name="Text.$kc_mine_name" />
        <set_value exact="{68537, 4102}" name="Text.$kc_launch_satellite_name" />
        <set_value exact="{68537, 4103}" name="Text.$kc_launch_adv_satellite_name" />
        <set_value exact="{68537, 4104}" name="Text.$kc_laser_tower_mk1_name" />
        <set_value exact="{68537, 4105}" name="Text.$kc_laser_tower_mk2_name" />
        <set_value exact="{68537, 4106}" name="Text.$kc_resource_probe_name" />
        <set_value exact="{68537, 4107}" name="Text.$kc_nav_beacon_name" />
        <set_value exact="{68537, 4108}" name="Text.$kc_friend_foe_mine_name" />
        <set_value exact="{68537, 4109}" name="Text.$kc_cluster_mine_name" />
        
        <set_value exact="{68537, 4120}" name="Text.$kc_launch_consumable_mouseover" />
        <set_value exact="{68537, 4121}" name="Text.$notification_launch_success" />
        <set_value exact="{68537, 4122}" name="Text.$notification_launch_failure" />

      </actions>
    </library>
    
    
    <!-- Register keys with the hotkey api. -->
    <cue name="Register_Keys" instantiate="true">
      <conditions>
        <event_cue_signalled cue="md.Hotkey_API.Reloaded" />
      </conditions>
      <actions>

        <!--Load any text.-->
        <include_actions ref="Load_Text"/>

        <!-- Register actions. -->
        <signal_cue_instantly cue="md.Hotkey_API.Register_Action" param="table[
          $id          = 'kc_target_follow', 
          $onPress     = Target_Follow,
          $name        = Text.$kc_target_follow_name, 
          $description = Text.$kc_target_follow_mouseover, 
          $contexts    = ['flying'],
          ]"/>

        <signal_cue_instantly cue="md.Hotkey_API.Register_Action" param="table[
          $id          = 'kc_attack_target', 
          $onPress     = Attack_Target,
          $name        = Text.$kc_attack_target_name, 
          $description = Text.$kc_attack_target_mouseover, 
          $contexts    = ['flying'],
          ]"/>

        <signal_cue_instantly cue="md.Hotkey_API.Register_Action" param="table[
          $id          = 'kc_eject_illegals', 
          $onPress     = Eject_Illegals,
          $name        = Text.$kc_eject_illegals_name, 
          $description = Text.$kc_eject_illegals_mouseover, 
          $contexts    = ['flying'],
          ]"/>

        <!-- Doesnt work when not in pilot seat.-->
        <signal_cue_instantly cue="md.Hotkey_API.Register_Action" param="table[
          $id          = 'kc_toggle_seta', 
          $onPress     = Toggle_Seta,
          $name        = Text.$kc_toggle_seta_name, 
          $description = Text.$kc_toggle_seta_mouseover, 
          $contexts    = ['flying','menus'],
          ]"/>


        <!--
          Object launching hotkeys; all reuse Launch_Consumable.
          Echo holds the macro, and an int for the object type.
          TODO: maybe allow onRepeat with a manual timer to limit frequency.
          (Could even put this repeat rate in the options.)
        -->
        <signal_cue_instantly cue="md.Hotkey_API.Register_Action" param="table[
          $id          = 'kc_launch_satellite', 
          $onPress     = Launch_Consumable,
          $name        = Text.$kc_launch_satellite_name, 
          $description = Text.$kc_launch_consumable_mouseover,
          $contexts    = ['flying'],
          $echo        = [macro.eq_arg_satellite_01_macro, 0],
          ]"/>

        <signal_cue_instantly cue="md.Hotkey_API.Register_Action" param="table[
          $id          = 'kc_launch_adv_satellite', 
          $onPress     = Launch_Consumable,
          $name        = Text.$kc_launch_adv_satellite_name, 
          $description = Text.$kc_launch_consumable_mouseover,
          $contexts    = ['flying'],
          $echo        = [macro.eq_arg_satellite_02_macro, 0],
          ]"/>

        <signal_cue_instantly cue="md.Hotkey_API.Register_Action" param="table[
          $id          = 'kc_launch_nav_beacon', 
          $onPress     = Launch_Consumable,
          $name        = Text.$kc_nav_beacon_name, 
          $description = Text.$kc_launch_consumable_mouseover,
          $contexts    = ['flying'],
          $echo        = [macro.env_deco_nav_beacon_t1_macro, 4],
          ]"/>

        <signal_cue_instantly cue="md.Hotkey_API.Register_Action" param="table[
          $id          = 'kc_launch_resource_probe', 
          $onPress     = Launch_Consumable,
          $name        = Text.$kc_resource_probe_name, 
          $description = Text.$kc_launch_consumable_mouseover,
          $contexts    = ['flying'],
          $echo        = [macro.eq_arg_resourceprobe_01_macro, 3],
          ]"/>

        <signal_cue_instantly cue="md.Hotkey_API.Register_Action" param="table[
          $id          = 'kc_launch_laser_tower_mk1', 
          $onPress     = Launch_Consumable,
          $name        = Text.$kc_laser_tower_mk1_name, 
          $description = Text.$kc_launch_consumable_mouseover,
          $contexts    = ['flying'],
          $echo        = [macro.ship_gen_xs_lasertower_01_a_macro, 2],
          ]"/>

        <signal_cue_instantly cue="md.Hotkey_API.Register_Action" param="table[
          $id          = 'kc_launch_laser_tower_mk2', 
          $onPress     = Launch_Consumable,
          $name        = Text.$kc_laser_tower_mk2_name, 
          $description = Text.$kc_launch_consumable_mouseover,
          $contexts    = ['flying'],
          $echo        = [macro.ship_gen_s_lasertower_01_a_macro, 2],
          ]"/>

        <signal_cue_instantly cue="md.Hotkey_API.Register_Action" param="table[
          $id          = 'kc_launch_mine', 
          $onPress     = Launch_Consumable,
          $name        = Text.$kc_mine_name, 
          $description = Text.$kc_launch_consumable_mouseover,
          $contexts    = ['flying'],
          $echo        = [macro.weapon_gen_mine_01_macro, 1],
          ]"/>

        <signal_cue_instantly cue="md.Hotkey_API.Register_Action" param="table[
          $id          = 'kc_launch_tracker_mine', 
          $onPress     = Launch_Consumable,
          $name        = Text.$kc_tracker_mine_name, 
          $description = Text.$kc_launch_consumable_mouseover,
          $contexts    = ['flying'],
          $echo        = [macro.weapon_gen_mine_02_a_macro, 1],
          ]"/>

        <signal_cue_instantly cue="md.Hotkey_API.Register_Action" param="table[
          $id          = 'kc_launch_friend_foe_mine', 
          $onPress     = Launch_Consumable,
          $name        = Text.$kc_friend_foe_mine_name, 
          $description = Text.$kc_launch_consumable_mouseover,
          $contexts    = ['flying'],
          $echo        = [macro.weapon_gen_mine_03_macro, 1],
          ]"/>

        <signal_cue_instantly cue="md.Hotkey_API.Register_Action" param="table[
          $id          = 'kc_zoom_in', 
          $onPress     = Zoom_In,
          $onRepeat    = Zoom_In,
          $onRelease   = Zoom_In,
          $name        = Text.$kc_zoom_in_name, 
          $description = Text.$kc_zoom_in_mouseover,
          $contexts    = ['flying'],
          ]"/>


        <!--Debug keys. TODO: move elsewhere.
        <signal_cue_instantly cue="md.Hotkey_API.Register_Action" param="table[
          $id = 'kc_print_combined_skill', 
          $onPress = Print_Combined_Skill,
          $name = 'Print Combined Skill', 
          $category = 'Debug',
          $description = 'Prints the combined skill of the current target',
          $contexts = ['flying','walking'],
          ]"/>-->
      </actions>
    </cue>
    
    <!-- Auto-follow target ship. -->
    <cue name="Target_Follow" instantiate="true" namespace="this">
      <conditions>
        <event_cue_signalled/>
        <!-- Verify the player has a target selected. -->
        <check_value value="player.target"/>
        <!-- Verify the player is piloting a ship.-->
        <!-- TODO: check this in hotkey api instead (space/flying context).-->
        <check_value value="player.occupiedship"/>
      </conditions>
      <actions>
        <!-- Debug message. -->
        <!--<raise_lua_event name="'directChatMessageReceived'" param="'KeyCapture;Starting Target_Follow'"/>-->
        <!--<debug_text text="'KeyCapture Triggered Target_Follow'" filter="general"/>-->
                
        <!-- Cancel autopilot if the target is already the current dest.-->
        <do_if value="player.target == player.autopilottarget">
          <stop_player_autopilot />
          <show_notification text="{10002, 921}" comment="Autopilot Disengaged"/>
        </do_if>
        <!-- Start autopiloting to target. Should continuously follow. -->
        <do_else>
          <start_player_autopilot destination="player.target"/>
          <!-- This already puts up a notification on its own. -->
        </do_else>
      </actions>
    </cue>

    <!-- Auto-follow target ship. -->
    <cue name="Attack_Target" instantiate="true" namespace="this">
      <conditions>
        <event_cue_signalled/>
        <!-- Verify the player has a target selected. -->
        <check_value value="player.target"/>
        <!-- Verify the player is piloting a ship.-->
        <!-- TODO: check this in hotkey api instead (space/flying context).-->
        <check_value value="player.occupiedship"/>
      </conditions>
      <actions>
        <!-- Debug message. -->
        <raise_lua_event name="'directChatMessageReceived'" param="'KeyCapture;Starting event_attack_started'"/>
        <debug_text text="'KeyCapture Triggered order.player.attack'" filter="general"/>

        <run_script name="'order.player.attack'">
          <param name="primarytarget" value="player.target " />
          <param name="allowothertargets" value="false" />
          <param name="squad_attack" value="true" />
        </run_script>
      </actions>
    </cue>

    <!-- Drop illegal wares. -->
    <cue name="Eject_Illegals" instantiate="true" namespace="this">
      <conditions>
        <event_cue_signalled/>
        <!-- Verify the player is piloting a ship.-->
        <check_value value="player.occupiedship"/>
      </conditions>
      <actions>
        <!-- Debug message. -->
        <!--<raise_lua_event name="'directChatMessageReceived'" param="'KeyCapture;Ejecting_Illegals'"/>-->
        <!--<debug_text text="'KeyCapture Triggered Ejecting_Illegals'" filter="general"/>-->

        <set_value name="$faction" exact="player.zone.policefaction"/>
        <drop_illegal_cargo groupname="$boxes" object="player.occupiedship" faction="$faction"/>
        <drop_illegal_inventory groupname="$boxes" object="player.entity" faction="$faction"/>
        <do_if value="$boxes.count != 0">
          <show_notification text="'Ejected Illegal Wares'"/>
        </do_if>
        <do_else>
          <show_notification text="'No Illegal Wares'"/>          
        </do_else>
        
      </actions>
    </cue>
    
    
    <cue name="Launch_Consumable" instantiate="true" namespace="this">
      <conditions>
        <event_cue_signalled/>
        <!-- Verify the player is piloting a ship.-->
        <check_value value="player.occupiedship"/>
      </conditions>
      <actions>
        <!--Consumable macro is in echo.-->
        <set_value name="$macro" exact="event.param.$echo.{1}"/>
        <set_value name="$type"  exact="event.param.$echo.{2}"/>
        <do_if value="player.occupiedship.ammostorage.{$macro}.count gt 0">
          
          <!--Need to select a command based on macro type.-->
          <do_if     value="$type == 0">
            <launch_satellite object="player.occupiedship" macro="$macro"/>            
          </do_if>
          <do_elseif value="$type == 1">
            <launch_mine object="player.occupiedship" macro="$macro"/>
          </do_elseif>
          <do_elseif value="$type == 2">
            <launch_lasertower object="player.occupiedship" macro="$macro"/>
          </do_elseif>
          <do_elseif value="$type == 3">
            <launch_resourceprobe object="player.occupiedship" macro="$macro"/>
          </do_elseif>
          <do_elseif value="$type == 4">
            <launch_navbeacon object="player.occupiedship" macro="$macro"/>
          </do_elseif>

          <show_notification text="Text.$notification_launch_success.[$macro.name]"/>
        </do_if>
        <do_else>
          <show_notification text="Text.$notification_launch_failure.[$macro.name]"/>
        </do_else>
      </actions>
    </cue>

    <!--For the current target, return the combined skill value.-->
    <cue name="Print_Combined_Skill" instantiate="true" namespace="this">
      <conditions>
        <event_cue_signalled/>
        <!-- Verify the player has a target selected. -->
        <check_value value="player.target"/>
      </conditions>
      <actions>
        <show_notification text="'Skill: '+player.target.combinedskill"/>
      </actions>
    </cue>

    <cue name="Toggle_Seta" instantiate="true" namespace="this">
      <conditions>
        <event_cue_signalled/>
      </conditions>
      <actions>
        <toggle_timewarp/>
      </actions>
    </cue>

    <!--
      Zoom logic will be handled mostly by lua.
      This will pass over the event data.
    -->
    <cue name="Zoom_In" instantiate="true" namespace="this">
      <conditions>
        <event_cue_signalled/>
      </conditions>
      <actions>    
        <raise_lua_event name="'SN_Hotkeys.zoom_in'" param="event.param.$event"/>
      </actions>
    </cue>
    


  </cues>

</mdscript>
What would help me?
  • Am I using going about this correctly, and it's just not working?
  • Tips on debugging
  • Any knowledge on how to trigger an attack properly
  • Is there anyway to see the members/variables of player from the code?
Let me know if you need any other information from me.

kuertee
EGOSOFT
EGOSOFT
Posts: 789
Joined: Sun, 14. Dec 03, 13:05
x4

Re: SirNukes Hotkey Collection - Fleet control commands hotkey help

Post by kuertee » Tue, 17. Nov 20, 11:33

KamikazeDuck wrote:
Tue, 17. Nov 20, 08:50
Hey guys I'm going to try to be as brief as possible, but I want to give a little background as well....
Firstly: I had a quick look at order.player.attack, which is at: aiscripts\order.player.attack.xml file.
This is what is executed at <run_script name="'order.player.attack'">.
The parameters that you're sending to it needs to match what it is expecting.

I.e: Order.player.attack script doesn't have the primarytarget parameter.
Instead, it is called target as is shown in its code here:
Spoiler
Show

Code: Select all

<order id="PlayerAttack" name="{1041, 241}" description="{1041, 242}" category="internal">
    <params>
      <param name="target" required="true" type="object" text="{1041, 10126}" comment="Target"/>
      <param name="secondarytargets" default="null" type="list" text="{1041, 10149}" advanced="true" comment="Secondary targets. The secondary targets to fight after $target (Optional)">
        <input_param name="type" value="'object'"/>
      </param>
      <param name="escort" type="object" default="null" text="{1041, 10038}" advanced="true" comment="Escort. Object to escort - stay at 'pursuedistance' and shoot enemies attacking this" />
      <param name="squad_attack" type="bool" default="false" text="{1041, 10118}" advanced="true" comment="Squad attack. Command everyone in the squadron to attack"/>
      <param name="allowothertargets" type="bool" default="false" text="{1041, 10010}" comment="Attack all enemies. Attack all hostiles close to the designated target"/>
      <param name="checkrelation" type="bool" default="this.object.mayattack.{$target}" text="{1041, 10081}" advanced="true" comment="Only engage hostiles. Check may attack (faction enemy relation). Default: true"/>
      <param name="debugchance" type="bool" default="0" advanced="true" text="{1041, 10086}" comment="Print debug output">
        <input_param name="truevalue" value="100"/>
      </param>
    </params>
    <requires>
      <match shiptype="shiptype.lasertower" negate="true"/>
    </requires>
    <location object="$target" />
  </order>
Secondly, I'm not exactly sure what you mean by: "... I was editing the steam 01.dat file ..." and "... and am editting the SN_Hotkeys.xml ..."
If they mean that you are literally editing those files, I suggest that you don't.
I suggest that you extend the code with the use of a separate mod folder. I suggest that you download some mods and investigate their folder structure.
Then read-up on the Mission Director guidelines here: https://www.egosoft.com:8444/confluence ... ctor+Guide
Then on the tools and resources listed here: viewtopic.php?t=402382

That may sound a lot. But X4 modding is quite rewarding. I find its modding framework heaps better than other games I've modded.
I only started modding X4 in March this year. And I already modded the systems that I don't find enjoyable in my games.
These systems are usually systems that also exist in other games that I also don't find enjoyable, so I tweaked them with my mods.
E.g. Alternatives to Death X4 mod, which has a version for Oblivion and Skyrim
Spoiler
Show
EDIT: Oh, and jump on X4 modding Discord: Unitrader and SirNuke helped me heaps in that channel: https://discord.com/channels/3370982909 ... 0877228042
But I prefer this forum for actual tips and guides - so that others can see them.
And its easier to access information on here than on Discord.
But Discord is great if you need a quick help.
Mods: RPG: Reputations and Professions, Social Standings and Citizenships, Crime has Consequences, Alternatives to Death. Missions/NPCs: Emergent Missions, NPC Reactions, Mod Parts Trader, High-sec Rooms are Locked, Hacking Outcomes, More Generic Missions, Waypoint Fields for Deployment. Others: Auto-cam, Friendly Fire Tweaks, Teleport From Transporter Room, Wear and Tear. QoL: Trade Analytics, Loot Mining, Ship Scanner, Signal Leak Hunter, Station Scanner, Surface Element Targeting, etc.

SirNukes
Posts: 546
Joined: Sat, 31. Mar 07, 23:44
x4

Re: SirNukes Hotkey Collection - Fleet control commands hotkey help

Post by SirNukes » Tue, 17. Nov 20, 18:05

As far as the hotkey part of it goes, it looks fine and sounds like it is working. I don't have much experience with giving orders, so can't give advice on that part.

The reason directly editing the dat file doesn't work is because the cat file specifies the exact byte size of the subfiles stored in the dat, and the subfiles get jumbled up by the game if byte sizes don't match up. (The cat also has an md5 hash of each subfile for verification, though I don't know if that would stop loading on an error.)

Feel free to copy/paste and rename my hotkey collection to your own unique extension, and just delete my hotkeys and change the author/id/etc.

For debugging, if you haven't set up the debug log already, you can edit the X4 launch options (on steam) with something like "-logfile debuglog.txt -debug general" (and maybe add "-skipintro" while there). That would capture all debug_text for the "general" filter and various error messages to the debuglog file, which is located in your user folder near where the saves are. Sometimes helpful information will show up in the error messages.

KamikazeDuck
Posts: 2
Joined: Tue, 17. Nov 20, 07:38
x4

Re: SirNukes Hotkey Collection - Fleet control commands hotkey help

Post by KamikazeDuck » Fri, 20. Nov 20, 08:26

Thanks for the input, also yeah that wasn't brief haha. I wrote that at first and then just kept writing and forgot I started with that.
kuertee wrote:
Tue, 17. Nov 20, 11:33
Firstly: I had a quick look at order.player.attack, which is at: aiscripts\order.player.attack.xml file.
This is what is executed at <run_script name="'order.player.attack'">.
The parameters that you're sending to it needs to match what it is expecting.

I.e: Order.player.attack script doesn't have the primarytarget parameter.
Instead, it is called target as is shown in its code here:
Oof, thanks for noticing that. I initially had primarytarget as the parameter because I was using aiscripts/order.fight.attack.object.xml, but couldn't get that to work and found order.player.attack which was just a wrapper for it with the same parameters and thought that might work. Never noticed the name difference.

Unfortunately fixing that wasn't enough to get anything to happen. I'll keep trying.
SirNukes wrote:
Tue, 17. Nov 20, 18:05
As far as the hotkey part of it goes, it looks fine and sounds like it is working. I don't have much experience with giving orders, so can't give advice on that part.

The reason directly editing the dat file doesn't work is because the cat file specifies the exact byte size of the subfiles stored in the dat, and the subfiles get jumbled up by the game if byte sizes don't match up. (The cat also has an md5 hash of each subfile for verification, though I don't know if that would stop loading on an error.)

Feel free to copy/paste and rename my hotkey collection to your own unique extension, and just delete my hotkeys and change the author/id/etc.
Thanks for that information, appreciate it!
SirNukes wrote:
Tue, 17. Nov 20, 18:05
For debugging, if you haven't set up the debug log already, you can edit the X4 launch options (on steam) with something like "-logfile debuglog.txt -debug general" (and maybe add "-skipintro" while there). That would capture all debug_text for the "general" filter and various error messages to the debuglog file, which is located in your user folder near where the saves are. Sometimes helpful information will show up in the error messages.
This is also helpful, I probably should have found this already on my own... but it's always nice to get help when someone is willing to share. I've enabled it but haven't had time to really mess with it much right now. I'll post back if I find anything interesting or make progress.

Trajan von Olb
Posts: 545
Joined: Wed, 4. Feb 04, 21:39
x3tc

Re: SirNukes Hotkey Collection - Fleet control commands hotkey help

Post by Trajan von Olb » Mon, 15. Feb 21, 23:10

Hi KamikazeDuck,

did you get any further?Because I might want to start a bigger hotkey project (after years of unsuccessfully expressing wishes in the ego forums) if my time allows - and my knowledge, because I'm not actually a coder.
Part of it, besides an improved target switching, should be a rudimentary fleet control, as you have already tried to implement... In addition, the direct access to menu elements in relation to the selected object with hotkeys...
So, how does it look? Progress?

Thanks already.

Schmollo


Translated with www.DeepL.com/Translator (free version)
Mein Traum vom Glück ist der Traum von einer anderen Menschheit. (S. Lem)

Post Reply

Return to “X4: Foundations - Scripts and Modding”