Automate Updating a Token Property/ja: Difference between revisions

From RPTools Wiki
Jump to navigation Jump to search
m (Conversion script moved page Automate Updating a Token Property/ja to automate Updating a Token Property/ja: Converting page titles to lowercase)
m (Text replacement - "source>" to "syntaxhighlight>")
Line 20: Line 20:
<source lang="mtmacro" line>
<source lang="mtmacro" line>
[ damage = AmountOfDamage ]
[ damage = AmountOfDamage ]
</source>
</syntaxhighlight>


<div style="color:gray">Notice the extra variable name and the equals sign?  That tells MapTool to calculate whatever is on the right of the equals sign and store the result into the variable on the left.  In this case, there's no formula, so this becomes simply a copy -- from the variable {{code|AmountOfDamage}} to {{code|damage}}.  But when MapTool tries to read the value of the variable and it doesn't exist, the popup will automatically appear!  That's perfect for what we want!</div>
<div style="color:gray">Notice the extra variable name and the equals sign?  That tells MapTool to calculate whatever is on the right of the equals sign and store the result into the variable on the left.  In this case, there's no formula, so this becomes simply a copy -- from the variable {{code|AmountOfDamage}} to {{code|damage}}.  But when MapTool tries to read the value of the variable and it doesn't exist, the popup will automatically appear!  That's perfect for what we want!</div>
Line 33: Line 33:
[ damage = AmountOfDamage ]
[ damage = AmountOfDamage ]
[ HP = HP - damage ]
[ HP = HP - damage ]
</source>
</syntaxhighlight>


<div style="color:gray">This time the second line calculates the formula on the right ({{code|HP - damage}}) and stores the result into ... {{code|HP}}?  Isn't that going to screw up our {{code|HP}} value?</div>
<div style="color:gray">This time the second line calculates the formula on the right ({{code|HP - damage}}) and stores the result into ... {{code|HP}}?  Isn't that going to screw up our {{code|HP}} value?</div>
Line 59: Line 59:
<source lang="mtmacro" line>
<source lang="mtmacro" line>
[ HP = HPmax ]
[ HP = HPmax ]
</source>
</syntaxhighlight>


<div style="color:gray">Simple, right?  But for the sake of argument, let's expand on this a bit.  Instead of restoring all of the hit points to the creature, we will prompt the user for the number of hours that the creature will be resting.  For my demonstration, I'm assuming that there's a property named {{code|Level}}.  If it rests for less than 24 hours, it gets back {{code|Level*2}} hit points.  If it rests for 24 hours or more, it gets back {{code|Level*6}}.</div>
<div style="color:gray">Simple, right?  But for the sake of argument, let's expand on this a bit.  Instead of restoring all of the hit points to the creature, we will prompt the user for the number of hours that the creature will be resting.  For my demonstration, I'm assuming that there's a property named {{code|Level}}.  If it rests for less than 24 hours, it gets back {{code|Level*2}} hit points.  If it rests for 24 hours or more, it gets back {{code|Level*6}}.</div>
Line 67: Line 67:
[ healing = if(hours < 24, Level * 2, Level * 6) ]
[ healing = if(hours < 24, Level * 2, Level * 6) ]
[ HP = HP + healing ]
[ HP = HP + healing ]
</source>
</syntaxhighlight>


<div style="color:gray">You may notice the {{func|if}} function on the second line.  One word of warning when using the {{func|if}} function:  both the true and the false sections are executed!  For that reason, you may want the {{roll|if}} roll option instead.  Note that the syntax is slightly different between the two, so be careful about which one you choose.</div>
<div style="color:gray">You may notice the {{func|if}} function on the second line.  One word of warning when using the {{func|if}} function:  both the true and the false sections are executed!  For that reason, you may want the {{roll|if}} roll option instead.  Note that the syntax is slightly different between the two, so be careful about which one you choose.</div>
Line 91: Line 91:
                 "GainTempHP | 0 | Temporary Hit Points") ]
                 "GainTempHP | 0 | Temporary Hit Points") ]
[ abort(cancel) ]
[ abort(cancel) ]
</source>
</syntaxhighlight>


<div style="color:gray">This will prompt you for all possible variations detailed above, in a single input screen. ((image needed)) Then, you can use some {{func|if}} functions or {{roll|if}} roll options to update all the properties involved. This example assumes that you're using the token properties {{code|HP}}, {{code|TempHP}}, {{code|SurgeRemain}} and {{code|SurgeValue}}:</div>
<div style="color:gray">This will prompt you for all possible variations detailed above, in a single input screen. ((image needed)) Then, you can use some {{func|if}} functions or {{roll|if}} roll options to update all the properties involved. This example assumes that you're using the token properties {{code|HP}}, {{code|TempHP}}, {{code|SurgeRemain}} and {{code|SurgeValue}}:</div>
Line 105: Line 105:
[ HP = HP + ExtraHeal ]
[ HP = HP + ExtraHeal ]
[ TempHP = max(TempHP, GainTempHP) ]
[ TempHP = max(TempHP, GainTempHP) ]
</source>
</syntaxhighlight>


<div style="color:gray">Notice that the {{func|abort}} function was used after the {{func|input}} function to make sure that, in case the user clicked "Cancel" in the input window, the properties wouldn't be updated.</div>
<div style="color:gray">Notice that the {{func|abort}} function was used after the {{func|input}} function to make sure that, in case the user clicked "Cancel" in the input window, the properties wouldn't be updated.</div>
[[Category:How To]]
[[Category:How To]]
{{Languages|Automate Updating a Token Property}}
{{Languages|Automate Updating a Token Property}}

Revision as of 17:08, 14 March 2023

Languages:  English  • 日本語


This section expects that you are already familiar with how to add macro buttons to the MapTool user interface.

Example: Updating Hit Points

Let's say you have a property to represent hit points. We'll call our property HP. Now we want some easy way to update HP, so we're going to create a macro button that executes a macro.

ヒットポイントを表すプロパティがあるとします。プロパティをHPと呼びます。HPを簡単に更新する方法が必要なので、マクロを実行するマクロボタンを作成します。

First, consider how you want this to work. We want a window to popup on the screen and ask the user to enter a number. That number will be subtracted from HP, so the user can use a positive number to represent damage and a negative number to represent healing. (We'll show another approach later.)

まず、これをどのように機能させるかを検討します。画面にウィンドウがポップアップし、ユーザーに番号の入力を求めます。この数値はHPから差し引かれるため、ユーザーは正の数値を使用して損傷を表し、負の数値を使用して修復を表すことができます。(別のアプローチを後で示します。)

The first step will be to prompt for the number. MapTool has this ability built-in. All we need to do is use a variable name that doesn't exist yet and MapTool will popup the prompt! The name of the variable is part of the prompt, so we'll use a descriptive name. How about AmountOfDamage?

最初に、番号の入力を求めます。MapToolにはこの機能が組み込まれています。必要なことは、まだ存在しない変数名を使用することです。MapToolはプロンプトをポップアップ表示します。変数の名前はプロンプトの一部なので、わかりやすい名前を使用します。AmountOfDamageはどうでしょうか?

<source lang="mtmacro" line> [ damage = AmountOfDamage ] </syntaxhighlight>

Notice the extra variable name and the equals sign? That tells MapTool to calculate whatever is on the right of the equals sign and store the result into the variable on the left. In this case, there's no formula, so this becomes simply a copy -- from the variable AmountOfDamage to damage. But when MapTool tries to read the value of the variable and it doesn't exist, the popup will automatically appear! That's perfect for what we want!

余分な変数名と等号に注目してください。これにより、MapToolは等号の右側にあるものをすべて計算し、その結果を左側の変数に格納します。この場合、数式はないので、変数AmountOfDamageからdamageのコピーになります。しかし、MapToolが変数の値を読み取ろうとしたときにその変数が存在しない場合は、ポップアップが自動的に表示されます。それは私たちが欲しいものにぴったりです!

Now the next step is to subtract that from the HP property. Fortunately, what you learned in the last paragraph can be used again:

次のステップは、それをHPプロパティから差し引くことです。幸いなことに、前の段落で学んだことは、再び使うことができます。

<source lang="mtmacro" line> [ damage = AmountOfDamage ] [ HP = HP - damage ] </syntaxhighlight>

This time the second line calculates the formula on the right (HP - damage) and stores the result into ... HP? Isn't that going to screw up our HP value?

今度は、次の行で右の式(HP - damage)が計算され、結果が...HP? それではHPの価値が台無しになってしまうのではないでしょうか。

No, it doesn't screw it up, but it does replace that value with the result. And because HP is a property, the result is stored back into the token's property. If you were to right-click on the token and save it to an external file, the new value of HP is stored with it. When the token is later reloaded, that value will come with it.

いいえ、失敗することはありませんが、その値を結果に置き換えます。また、HPはプロパティであるため、結果はトークンのプロパティに格納されます。トークンを右クリックして外部ファイルに保存すると、HPの新しい値がそのトークンとともに保存されます。トークンを後で再ロードすると、その値がトークンに含まれます。

If you want to add to the hit points instead, you have two choices: either the user can enter a negative number, or you can change the - to a +. The first option is easy because it puts the burden on the user! The second option is really an option -- who wants to edit their macro every time they want to switch from damage to healing? Another choice not listed above would be to create a second macro. Then there could be one macro for adding damage and one for adding healing.

代わりにヒットポイントに追加する場合は、負の数値を入力するか、-+に変更します。最初の選択肢は、ユーザに負担をかけるので簡単です!2番目のオプションは、実際にはオプションです。損傷から修復に切り替えるたびにマクロを編集したいと思うでしょうか。上記以外の方法として、2つ目のマクロを作成することもできます。次に、損傷を追加するマクロと修復を追加するマクロがあります。

There's a few things still needed here to make this a little prettier, but those are future steps. Go ahead and try this out right now on a token that you create in MapTool. (The default property type, Basic, includes a property named HP.) And try adding the second macro as well, just for the practice. (Believe me, the more practice you get early in the process, the easier it will become later on.)

これをもっと美しくするためには、まだいくつか必要なことがありますが、それらは将来のステップです。MapToolで作成したトークンで今すぐ試してみてください。(既定のプロパティ形式 Basic には、HPという名前のプロパティが含まれています。)練習のために、二つ目のマクロも追加してみてください。(早い段階で練習すればするほど、後で練習しやすくなります。)

Example: Let's Rest for a Minute...

So let's say that you now have a macro button that prompts you to change the token's hit points through damage or healing as described above. How do we reset their hit points to their maximum when they rest?
We already know that we have a HP and HPmax properties, so when they are healed up we simply need to copy the value in HPmax into HP. That should give you what you need to create a simple one-line macro:

<source lang="mtmacro" line> [ HP = HPmax ] </syntaxhighlight>

Simple, right? But for the sake of argument, let's expand on this a bit. Instead of restoring all of the hit points to the creature, we will prompt the user for the number of hours that the creature will be resting. For my demonstration, I'm assuming that there's a property named Level. If it rests for less than 24 hours, it gets back Level*2 hit points. If it rests for 24 hours or more, it gets back Level*6.

<source lang="mtmacro" line> [ hours = NumberOfHours ] [ healing = if(hours < 24, Level * 2, Level * 6) ] [ HP = HP + healing ] </syntaxhighlight>

You may notice the if() function on the second line. One word of warning when using the if() function: both the true and the false sections are executed! For that reason, you may want the [if():] roll option instead. Note that the syntax is slightly different between the two, so be careful about which one you choose.

Example: One Macro to Rule Them All

Okay, so let's say you want to have one macro to handle all your healing needs. Using D&D 4th Edition, for example, you can:
  • spend a Healing Surge and regain HP
  • spend a Healing Surge without gaining HP
  • gain HP as if you spent a Healing Surge
  • gain a set number of HP (alone or in addition to a Healing Surge)
  • gain Temporary HP (alone or in addition to a Healing Surge, and temporary HPs don't stack)
Using the simple variable prompt explained above becomes clumsy, so let's use the input() function instead:

<source lang="mtmacro" line> [ cancel = input("SpendSurge | 1 | Spend Healing Surge? | CHECK",

                "GainSurge | 1 | Gain Surge HP? | CHECK",
                "ExtraHeal | 0 | Additional Healing",
                "GainTempHP | 0 | Temporary Hit Points") ]

[ abort(cancel) ] </syntaxhighlight>

This will prompt you for all possible variations detailed above, in a single input screen. ((image needed)) Then, you can use some if() functions or [if():] roll options to update all the properties involved. This example assumes that you're using the token properties HP, TempHP, SurgeRemain and SurgeValue:

<source lang="mtmacro" line> [ cancel = input("SpendSurge | 1 | Spend Healing Surge? | CHECK",

                "GainSurge | 1 | Gain Surge HP? | CHECK",
                "ExtraHeal | 0 | Additional Healing",
                "GainTempHP | 0 | Temporary Hit Points") ]

[ abort(cancel) ] [ if(SpendSurge): SurgeRemain = SurgeRemain - 1 ] [ if(GainSurge): HP = HP + SurgeValue ] [ HP = HP + ExtraHeal ] [ TempHP = max(TempHP, GainTempHP) ] </syntaxhighlight>

Notice that the abort() function was used after the input() function to make sure that, in case the user clicked "Cancel" in the input window, the properties wouldn't be updated.

Languages:  English  • 日本語