Cant get it to work

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

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

wiwi56888
Posts: 2
Joined: Fri, 17. Mar 23, 17:01
x4

Cant get it to work

Post by wiwi56888 »

Code: Select all

<?xml version="1.0" encoding="utf-8"?>
<mdscript name="FleetPowerReputation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="md.xsd">
  
  <cues>
    <!-- 主要控制器 -->
    <cue name="FleetPowerReputation_Init" instantiate="static">
      <conditions>
        <event_game_loaded />
      </conditions>
      <actions>
        <debug_text text="'Fleet Power Reputation Mod (戰鬥船艦版): 已啟動'" chance="100" />
        <set_value name="$CheckInterval" exact="30s" />
        <set_value name="$TargetReputation" exact="-30" />
        <set_value name="$PlayerFaction" exact="faction.player" />
        <!-- 添加調試開關 -->
        <set_value name="$DebugMode" exact="true" />
      </actions>
      <cues>
        <!-- 定期檢查戰鬥船艦力量 -->
        <cue name="FleetPowerCheck" instantiate="static">
          <conditions>
            <event_cue_signalled />
          </conditions>
          <delay exact="$CheckInterval" />
          <actions>
            <do_if value="player.entity">
              <!-- 添加開始檢查的調試訊息 -->
              <do_if value="$DebugMode">
                <debug_text text="'=== 開始檢查戰鬥船艦力量 ==='" chance="100" />
              </do_if>
              <!-- 計算玩家戰鬥船艦力量 -->
              <set_value name="$PlayerFleetPower" exact="0" />
              
              <!-- XL戰鬥艦 = 1000點 -->
              <find_ship name="$PlayerXLShips" owner="faction.player" class="class.ship_xl" purpose="purpose.fight" multiple="true" />
              <set_value name="$XLCount" exact="$PlayerXLShips.count" />
              <set_value name="$PlayerFleetPower" exact="$PlayerFleetPower + ($XLCount * 1000)" />
              
              <!-- L戰鬥艦 = 100點 -->
              <find_ship name="$PlayerLShips" owner="faction.player" class="class.ship_l" purpose="purpose.fight" multiple="true" />
              <set_value name="$LCount" exact="$PlayerLShips.count" />
              <set_value name="$PlayerFleetPower" exact="$PlayerFleetPower + ($LCount * 100)" />
              
              <!-- M戰鬥艦 = 10點 -->
              <find_ship name="$PlayerMShips" owner="faction.player" class="class.ship_m" purpose="purpose.fight" multiple="true" />
              <set_value name="$MCount" exact="$PlayerMShips.count" />
              <set_value name="$PlayerFleetPower" exact="$PlayerFleetPower + ($MCount * 10)" />
              
              <!-- S戰鬥艦 = 1點 -->
              <find_ship name="$PlayerSShips" owner="faction.player" class="class.ship_s" purpose="purpose.fight" multiple="true" />
              <set_value name="$SCount" exact="$PlayerSShips.count" />
              <set_value name="$PlayerFleetPower" exact="$PlayerFleetPower + ($SCount * 1)" />
              
              <!-- 顯示玩家戰鬥船艦力量 -->
              <do_if value="$DebugMode">
                <debug_text text="'玩家戰鬥船艦數量: XL=' + $XLCount + ' L=' + $LCount + ' M=' + $MCount + ' S=' + $SCount + ' 總戰力=' + $PlayerFleetPower" chance="100" />
              </do_if>
              
              <!-- 檢查每個勢力的戰鬥船艦(只包含確實存在的勢力) -->
              <do_for_each name="$Faction" in="[faction.argon, faction.antigone, faction.holyorder, faction.paranid, faction.teladi, faction.ministry, faction.freefamilies, faction.zyarth, faction.terran, faction.pioneers, faction.boron]">
                <do_if value="$Faction and $Faction != $PlayerFaction">
                  <!-- 計算該勢力戰鬥船艦力量 -->
                  <set_value name="$FactionFleetPower" exact="0" />
                  
                  <!-- XL戰鬥艦 = 1000點 -->
                  <find_ship name="$FactionXLShips" owner="$Faction" class="class.ship_xl" purpose="purpose.fight" multiple="true" />
                  <set_value name="$FXLCount" exact="$FactionXLShips.count" />
                  <set_value name="$FactionFleetPower" exact="$FactionFleetPower + ($FXLCount * 1000)" />
                  
                  <!-- L戰鬥艦 = 100點 -->
                  <find_ship name="$FactionLShips" owner="$Faction" class="class.ship_l" purpose="purpose.fight" multiple="true" />
                  <set_value name="$FLCount" exact="$FactionLShips.count" />
                  <set_value name="$FactionFleetPower" exact="$FactionFleetPower + ($FLCount * 100)" />
                  
                  <!-- M戰鬥艦 = 10點 -->
                  <find_ship name="$FactionMShips" owner="$Faction" class="class.ship_m" purpose="purpose.fight" multiple="true" />
                  <set_value name="$FMCount" exact="$FactionMShips.count" />
                  <set_value name="$FactionFleetPower" exact="$FactionFleetPower + ($FMCount * 10)" />
                  
                  <!-- S戰鬥艦 = 1點 -->
                  <find_ship name="$FactionSShips" owner="$Faction" class="class.ship_s" purpose="purpose.fight" multiple="true" />
                  <set_value name="$FSCount" exact="$FactionSShips.count" />
                  <set_value name="$FactionFleetPower" exact="$FactionFleetPower + ($FSCount * 1)" />
                  
                  <!-- 顯示勢力戰鬥船艦力量和目前聲望 -->
                  <set_value name="$CurrentReputation" exact="$Faction.relationto.{faction.player}" />
                  <do_if value="$DebugMode">
                    <debug_text text="'勢力: ' + $Faction.name + ' 戰鬥船艦: XL=' + $FXLCount + ' L=' + $FLCount + ' M=' + $FMCount + ' S=' + $FSCount + ' 戰力=' + $FactionFleetPower + ' 聲望=' + $CurrentReputation" chance="100" />
                  </do_if>
                  
                  <!-- 比較戰鬥力量並調整聲望 -->
                  <do_if value="$PlayerFleetPower gt $FactionFleetPower">
                    <!-- 玩家戰鬥力量大於該勢力 -->
                    <do_if value="$CurrentReputation gt $TargetReputation">
                      <set_faction_relation faction="$Faction" otherfaction="$PlayerFaction" value="$TargetReputation" />
                      <debug_text text="'>>> 聲望調整: ' + $Faction.name + ' 從 ' + $CurrentReputation + ' 調整為 ' + $TargetReputation + ' (玩家戰鬥力較強)'" chance="100" />
                    </do_if>
                    <do_else>
                      <do_if value="$DebugMode">
                        <debug_text text="'聲望已經夠低: ' + $Faction.name + ' (' + $CurrentReputation + ')'" chance="100" />
                      </do_if>
                    </do_else>
                  </do_if>
                  <do_elseif value="$FactionFleetPower gt $PlayerFleetPower">
                    <!-- 勢力戰鬥力量大於玩家,但維持-30聲望 -->
                    <do_if value="$CurrentReputation gt $TargetReputation">
                      <set_faction_relation faction="$Faction" otherfaction="$PlayerFaction" value="$TargetReputation" />
                      <debug_text text="'>>> 聲望調整: ' + $Faction.name + ' 從 ' + $CurrentReputation + ' 調整為 ' + $TargetReputation + ' (勢力戰鬥力較強但維持敵對)'" chance="100" />
                    </do_if>
                    <do_else>
                      <do_if value="$DebugMode">
                        <debug_text text="'聲望已經夠低: ' + $Faction.name + ' (' + $CurrentReputation + ')'" chance="100" />
                      </do_if>
                    </do_else>
                  </do_elseif>
                  <do_else>
                    <!-- 戰鬥力量相等的情況 -->
                    <do_if value="$DebugMode">
                      <debug_text text="'戰鬥力量相等: ' + $Faction.name + ' (玩家: ' + $PlayerFleetPower + ' vs 勢力: ' + $FactionFleetPower + ')'" chance="100" />
                    </do_if>
                  </do_else>
                </do_if>
              </do_for_each>
            </do_if>
            
            <!-- 重新觸發檢查 -->
            <reset_cue cue="FleetPowerCheck" />
          </actions>
        </cue>
        
        <!-- 初始觸發 -->
        <cue name="InitialTrigger" instantiate="static">
          <conditions>
            <event_cue_signalled cue="md.Setup.Start" />
          </conditions>
          <delay exact="10s" />
          <actions>
            <debug_text text="'Fleet Power Reputation (戰鬥船艦版): 初始觸發開始'" chance="100" />
            <signal_cue cue="FleetPowerCheck" />
          </actions>
        </cue>
        
        <!-- 遊戲載入後的觸發 -->
        <cue name="GameLoadedTrigger" instantiate="static">
          <conditions>
            <event_game_loaded />
          </conditions>
          <delay exact="15s" />
          <actions>
            <debug_text text="'Fleet Power Reputation (戰鬥船艦版): 遊戲載入觸發'" chance="100" />
            <signal_cue cue="FleetPowerCheck" />
          </actions>
        </cue>
      </cues>
    </cue>
  </cues>
  
</mdscript>
Implementing a mod that checks player combat ship power
<find_ship name="$FactionMShips" owner="$Faction" class="class.ship_m" purpose="purpose.fight" multiple="true" />
but this keep counting all ships instead of only military just don't get it help
Mysterial
Posts: 668
Joined: Wed, 6. Nov 02, 20:31
x4

Re: Cant get it to work

Post by Mysterial »

Purpose isn't a parameter. It's primarypurpose.
wiwi56888
Posts: 2
Joined: Fri, 17. Mar 23, 17:01
x4

Re: Cant get it to work

Post by wiwi56888 »

Mysterial wrote: Sun, 24. Aug 25, 21:11 Purpose isn't a parameter. It's primarypurpose.
OMG it worked! thank you so so much.
How do I get those syntax BTW?
Mysterial
Posts: 668
Joined: Wed, 6. Nov 02, 20:31
x4

Re: Cant get it to work

Post by Mysterial »

If you have the files extracted, you can point the xsi:noNamespaceSchemaLocation="md.xsd" at the top to where the extracted md.xsd lives on your system (relative paths are ok). Then decent XML editors will be able to provide syntax for actions.

You can also try Visual Studio Code and this tool: viewtopic.php?t=471392

Return to “X4: Foundations - Scripts and Modding”