Tips18

Last-modified: 2011-08-25 (木) 12:30:24

BeginAction,EndAction,同じアイテムを連続で使用できなくする(特定の動作を起こしていることをMobileに記憶する)

  • カテゴリー: スクリプト
  • 重要性: 普通
  • 投稿日: 2005-08-03 (水) 00:05:44

ヒールポーションやボーラなどのアイテムは一度使用したら一定時間使用できません。これはそのアイテムを使用中であることをMobileに記録している為です。それに使用されているのがBeginActionというメソッドです。

public bool BeginAction( object toLock )

toLockのobjectが実行中でなければ実行しtrueを返す。実行中ならばfalseを返す。

public bool CanBeginAction( object toLock )

toLockのobjectが実行中でなければ実行せずにtrueを返す。実行中ならばfalseを返す。主に実行中かを調べるために使用する。

public void EndAction( object toLock )

toLockのobjectを終了する。一般的にtypeof演算子を使用します。

例としてScripts\Items\Skill Items\Magical\Potions\Heal Potions\BaseHealPotion.cs、ヒールポーションのスクリプトの動作について解説します。

Scripts\Items\Skill Items\Magical\Potions\Heal Potions\BaseHealPotion.cs

if ( from.BeginAction( typeof( BaseHealPotion ) ) )//BaseHealPotionというTypeが実行できるならば、つまりヒールポーションが飲んでいないならば
{
DoHeal( from );

BasePotion.PlayDrinkEffect( from );

this.Delete();

Timer.DelayCall( TimeSpan.FromSeconds( Delay ), new TimerStateCallback( ReleaseHealLock ), from );//これはDelayの秒数が経ったならばReleaseHealLockを実行するという書き方
}
else
{
from.LocalOverheadMessage( MessageType.Regular, 0x22, 500235 ); // You must wait 10 seconds before using another healing potion.

BeginActionはobjectを変えることにより幾つでも使用できる。例えばヒールポーションだけではなく、キュア、ナイトサイト、リフレッシュ、etcそれぞれ個別に時間制限を設けることも可能である。特定の動作を実行しているかをチェックする場合はCanBeginActionを使用する。応用することでキュアを飲んでいる最中にリフレッシュを飲むと腹をこわす、といったことも可能になる。