HS

ハウジングスクリプトのサンプルをメモするページ

挨拶

-- 訪問客ごとに執事に別の挨拶をさせることができます。
-- 下記のテーブルにキャラクター名と、その方が訪問した際の挨拶を入力してください。

helloTable = {
                   ["キャラクター名1"] = {"こんにちは",    H.Percussion.fx2 },
                   ["キャラクター名2"] = {"ども",    H.Percussion.fx11 },
                   ["キャラクター名3"] = {"いらっしゃい",  H.Percussion.fx6 },
                 };

function GetHelloString(desc)
    if (helloTable[desc] == nil) then
        return desc.." さん、こんにちは。";
    end
        return helloTable[desc][1];
end

function GetHelloSound(desc)
    if (helloTable[desc] == nil) then
        return H.Percussion.fx9;
    end
        return helloTable[desc][2];
end

-- スクリプトが初期化されると呼び出されます。
function OnInit()

    -- SetSensorは執事がユーザーを認識する距離を設定します。
    -- 最初の変数の内側に入ると執事が認識し、
    -- 二番目の変数の外側に出ると執事が認識しません。
    -- 下記のように設定すると、3m内に入って来た場合認識し、
    -- 30m内から外に出ると認識しません。
    H.SetSensor(3, 30);

end

--  執事が認識する距離にユーザーが近付くと呼び出されます。
function OnUserEntered(desc)

    -- PlaySoundは音楽を演奏したりlabelを設定します。
    -- 最初の変数はチャンネルで、二番目の変数は楽譜です。
    -- 下記のように設定すると、0番チャンネルに二つのlabelを設定します。
    H.PlaySound(0, "r[1]r[2]");

    -- 訪ねてきた人ごとに効果音を演奏します。
    if (GetHelloSound(desc) ~= nil) then
        -- SetPercussionは音を設定します。
        H.SetPercussion(1, GetHelloSound(desc));
        -- "x"はSetPercussionで設定した音を演奏します。
        H.PlaySound(1, "x");
    end

    -- 執事がアニメーションを始めます。
    -- 最初の変数0は執事を示しています。
    -- 二番目の変数1は上のPlaySoundの[1]番labelです。
    -- 三番目の変数は手を振るモーションです。
    H.StartAnimation(0, 1, H.Emotion.wave);

    -- 執事が噴き出しと共に話します。
    -- 最初の変数2は上のPlaySoundの[2]番labelです。
    -- 二番目の変数には執事がしゃべる言葉を入れます。
    H.Say(2, GetHelloString(desc));
end

-- 設定可能なモーション:
--    point, sleep, angry, blush, dance, clap, comfort, drink, eat, laugh, kneel, no,
--    otl, pat, plead, ready, sad, slap, surprise, taunt, thanks, thunder,
--    useup, victory, yes, wave, boo, charge, dislike, panic, salute, smile,
--    sorry, think, blueflag, twoflag, whiteflag, sing, jump



青旗白旗ゲーム


-- 以下の命令分列を変えながらゲームができます。
g_flagTable = {
  { "青旗あげて",  H.Emotion.blueflag  },
  { "白旗あげないで青旗あげて", H.Emotion.blueflag  },
  { "白旗あげて",  H.Emotion.whiteflag },
  { "青旗あげないで白旗あげて", H.Emotion.whiteflag  },
  { "両方あげて",  H.Emotion.twoflag   },
  { "青旗あげないで両方あげて", H.Emotion.twoflag  },
};

-- スクリプトが初期化される時に呼び出されます。
g_playerName = "";
function OnInit()
    H.SetSensor(20, 30);

    -- OnSoundPlay 関数を活性化します。
    H.EnableSoundCallback(1);

g_playerName = H.GetPlayerName();
end

g_userTable       = {};
g_failTable       = {};
g_curFlagCount    = 0;
g_curFlagMotion   = "";
g_inGame          = 0;
g_hostGame        = 0;

function StartGame()
    g_inGame = 1;
    for k,v in pairs(g_userTable) do g_userTable[k] = 0 end;
    for k,v in pairs(g_failTable) do g_userTable[k] = 0 end;
    g_failTable    = {};
    g_curFlagCount = 0;
    g_curFlagMotion= "";
    math.randomseed(H.GetGameTime());
H.Say(1, "青旗白旗準備!");
    H.PlaySound(1, "r[1]rrrrr x[2]rrrrr x[3]rrrrr x[4]rrrrr x[5]rrrrr x[6]rrrrr x[7]");
    if (g_hostGame == 1) then
      H.Broadcast("Ready", 0, 0);
    end
end

function AddUser(desc)
    g_userTable[desc] = 0;
end

function OnBroadcasted(fromUser, msg, param1, param2)
    -- ゲーム参加を確認
    if (msg == "Ready") then
   if (g_hostGame == 0 and g_playerName ~= fromUser) then
     H.Broadcast("Join", 0, 0);
   end
 elseif (msg == "Join") then
   if (g_hostGame == 1 and g_playerName ~= fromUser) then
     AddUser(fromUser);
   end

    -- 成功、失敗出力、及び効果音  
 elseif (string.find(msg, "success")) then
   H.SayNoBalloon(1, msg.sub(msg, 8, -1) .. " 様成功!");
   if (string.find(msg, g_playerName)) then
     H.SetPercussion(5, H.Percussion.fx7);
     H.PlaySound(5, "x");
   end
 elseif (string.find(msg, "failure")) then
      H.SayNoBalloon(1, msg.sub(msg, 8, -1) .. " 様脱落!");
   if (string.find(msg, g_playerName)) then
     H.SetPercussion(5, H.Percussion.fx4);
     H.PlaySound(5, "x");
      end
 end
end

function EndGame()
    for k,v in pairs(g_userTable) do
      H.SayAllNoBalloon(1, "青旗白旗ゲーム成功: "..k);
    end
    for k,v in pairs(g_failTable) do
      H.SayAllNoBalloon(1, "青旗白旗ゲーム失敗: "..k);
    end
    H.PlaySound(4, "r[1]");
    g_hostGame     = 0;
    g_inGame       = 0;
end

function FailUser(desc)
  H.Broadcast("failure" .. desc, 0, 0);
  g_failTable[desc] = 1;
end

function OutFailedUsers()
  for k, v in pairs(g_failTable) do
    g_userTable[k] = nil;
  end
end

function CheckPlayerFlag()
  for k, v in pairs(g_userTable) do
    if (v ~= g_curFlagCount) then
      FailUser(k);
    end
  end
  OutFailedUsers();
end

-- 使用者が感情表現をすると呼び出されます。
function OnUserEmotion(motion, desc)
  if (motion == H.Emotion.blueflag or motion == H.Emotion.whiteflag or motion == H.Emotion.twoflag) then
 if (g_hostGame == 1) then
     if (g_userTable[desc] ~= nil) then
       if (motion == g_curFlagMotion) then
            H.Broadcast("success" .. desc, 0, 0);
         g_userTable[desc] = g_curFlagCount;
       else
         FailUser(desc);
         OutFailedUsers();
       end
     end
 end
 H.PlaySound(2, "r[1]");
end
end

function SetRandomFlagType()
  randVal = math.random(#g_flagTable);
  g_curFlagMotion = g_flagTable[randVal][2];
  randFlagName    = g_flagTable[randVal][1];
  g_curFlagCount  = g_curFlagCount+1;

  H.AlertAll(1, randFlagName);
  H.PlaySound(3, "r[1]");
end

function GetUserCount()
  count = 0;
  for k,v in pairs(g_userTable) do count = count + 1; end
  return count;
end

-- 音楽が演奏される時呼び出されます。
function OnSoundPlay(channel, note, len, label)
  if (g_hostGame == 1) then
      if ((1 < label) and (label < 7)) then
        CheckPlayerFlag();
        if (GetUserCount() == 0) then
          EndGame();
        else
          SetRandomFlagType();
        end
      end
      if (label == 7) then
        CheckPlayerFlag();
        EndGame();
      end
  else
      if (label == 7) then
        g_inGame = 0;
      end
  end
end

function OnUserEntered(desc)
  AddUser(desc);
end

function OnUserSay(str, desc)
  if (string.find(str, "青旗白旗開始")) then
    if (g_inGame == 0) then
      if (desc == g_playerName) then
        g_hostGame = 1;
      end
      StartGame();
    end
  end
end



もぐらゲーム

constStageNum        = 10;
constMoleNum         = 6;
constMoleNumPerStage = 2;     -- constMoleNumの 1/3程度が適当

gsReady  = 0;
gsInGame = 1;

isHost      = false;
gameState   = gsReady;
outletState = {};
userScore   = {};

function OnInit()
  if (constMoleNum < 3) then constMoleNum = 3; end
  if (constMoleNum > 9) then constMoleNum = 9; end
  H.SetOutletCount(constMoleNum);
  H.EnableSoundCallback(true);
end

function OnPlayerSay(str)
  if (string.find(str, "もぐら開始")) then
    isHost = true;
    H.Broadcast("BeginGame", 0, 0);
  end
end

function BeginGameHost()
  if (gameState == gsReady) then
    gameState = gsInGame;
 
 --初期化
 for i = 1, constMoleNum do
   outletState[i] = 0;
 end

 math.randomseed(H.GetGameTime());

 --シンクを合わせるための string
 local str = "";
 for i = 1, constStageNum do
   str = str .. "r1r1[" .. i .. "]";
 end

 H.PlaySound(0, str);

 -- もぐら初期化
for i = 1, constMoleNum do
   H.Broadcast("SetOutletState", i, 0);
end

 -- スコア初期化
 userScore = {};

 -- スタート
 H.SayAll(-1, "もぐらゲームスタート ===========");
end
end

function EndGameHost()
  if (gameState == gsInGame) then
 H.SayAll(-1, "ゲームオーバー");
 H.SayAll(-1, "================");
 for k, v in pairs(userScore) do
   if (k) then
     H.SayAll(-1, k .. ": " .. (v or 0));
   end
 end
 H.SayAll(-1, "================");
 isHost = false;
 gameState = gsReady;
end
end

function BeginGameGuest()
  if (gameState == gsReady) then
    gameState = gsInGame;
 
 for i = 1, constMoleNum do
   outletState[i] = 0;
 end

 local str = "";
 for i = 1, constStageNum do
   str = str .. "r1r1"
 end
 str = str .. "r1[" .. constStageNum .. "]";    -- 余分時間を与える

 H.PlaySound(0, str);
end
end

function newStage()
-- 新しくもぐらを選択して出るようにする
local i = 1;
local count = 0;
repeat
 local newMole = math.random(constMoleNum);
 local state = outletState[newMole]
 if (state == nil or state == 0) then
   outletState[newMole] = 100;
   count = count + 1;
 end
 i = i + 1;
until count >= constMoleNumPerStage or i > 100;

-- 他のクライアントに知らせる
for i = 1, constMoleNum do
 if (outletState[i] == 1 or outletState[i] == 2) then
   H.Broadcast("SetOutletState", i, 0);
 elseif (outletState[i] == 100) then
   outletState[i] = 1;
   H.Broadcast("SetOutletState", i, 1);
 end
end
end

function OnSoundPlay(channel, note, len, label)
  if (isHost and channel == 0 and label > 0) then
    newStage();
  end

  if (label == constStageNum) then
    if (isHost) then
      H.Broadcast("EndGame", 0, 0);
    else
      gameState = gsReady;
    end
  end
end

function OnBroadcasted(fromUser, msg, outletIndex, state)
  if (msg == "SetOutletState") then
    -- 0: 初期化, 1: highlight, 2: 得点
    if (isHost and state == 2 and outletState[outletIndex] ~= 1) then
      return;
    end
   
 outletState[outletIndex] = state;
 if (state == 0 or state == 2) then
   H.GlowNow(outletIndex, -1, 0, 0, 0);
   H.SetPosNow(outletIndex, 0, 0, -0.3, 0.5);
 elseif (state == 1) then
   H.GlowNow(outletIndex, 100, 0, 0, 255);
   H.SetPosNow(outletIndex, 0, 0, 0, 0.5);
 end

 if (state == 2) then
-- hostの場合採点をする
if (isHost) then
 userScore[fromUser] = userScore[fromUser] and (userScore[fromUser]+1) or 1;
 H.SayAll(-1, "得点:".. fromUser);
end

-- 効果音
H.SetPercussion(1, H.Percussion.fx2);
H.PlaySound(1, "x");
    end

elseif (msg == "BeginGame") then
     if (isHost) then
    BeginGameHost();
     else
       BeginGameGuest();
     end
   
   elseif (msg == "EndGame") then
if (isHost) then
 EndGameHost();
else
 gameState = gsReady;
end

-- もぐらの位置へ
for i = 1, constMoleNum do
 H.SetPosNow(i, 0, 0, 0, 0.5);
 H.GlowNow(i, -1, 0, 0, 0);
end
end

end

function OnPlayerJumpEnd(outletIndex)
  if (outletState[outletIndex] == 1) then
    H.Broadcast("SetOutletState", outletIndex, 2);
    H.GlowNow(outletIndex, 1, 255, 0, 0);
  end
end


演奏する
-- スクリプトが初期化されると呼びだされます。
function OnInit()

    -- 執事の右クリックメニューを追加します。
    -- 最初の変数はメニューの名前です。
    -- 二番目の変数はメニューの固有IDです。
    -- この値はOnMenu() 関数として使われます。
    H.RegisterMenu("演奏する", 1);

end

-- 執事を右クリックしてメニューを選択すると呼び出されます。
-- menuNumはRegisterMenuで設定した固有IDです。
function OnMenu(menuNum)

    -- 固有IDが"演奏する"かどうか判断します。
    if (menuNum == 1) then

        H.SetInstrument(2, H.Instrument.accordion);  -- 楽器を設定します。
        H.PlaySound(2, "t250 o6 b2 b2 f# f# a2 a2 g2 e2 f# f# g2 f# f# f# f# c# c# d2 e2 f# f# o5 b2 b2 b2 a# a# a# a# b2 o6 c# c# f# e d a# b r o4 b");

        H.SetInstrument(1, H.Instrument.aguitar);
        H.PlaySound(1, "t250 o4 e b o5 e g e o4 b a# o5 c# e g e o4 a# a o5 e a e b e o4 g o5 d g f# e d o4 e b o5 e g e o4 b g b o5 g f# e o4 b f# o5 c# e f# e g# a# a# f# e d c# o4 b r o3 b");

        H.SetInstrument(0, H.Instrument.abass);
        H.PlaySound(0, "t250 o3 e2 e2 e2 a# a# a# a# a# a# a2 a2 a2 g2 g2 g2 e2 e2 e2 g2 g2 g2 f# f# f# f# f# f# a# a# o4 f# e d c# o3 b r b r");

        H.SetPercussion(3, H.Percussion.hihatclose);  -- 打楽器を設定します。
        H.PlaySound(3, "t250 x_ r x_ r r r r r x_ r x_ r x_ r x_ r r r r r x_ r r r x_ r x_ r r r r r x_ r x_ r x_ r x_ r r r r r x_ r r x_ ");

        H.SetPercussion(4, H.Percussion.tambourine);
        H.PlaySound(4, "t250 r r r r r r r r r r r r r r r r r r r r r r x_ r r r r r r r r r r r r r r r r r r r r r r r r r x_r");

        H.SetPercussion(5, H.Percussion.hihatopen);
        H.PlaySound(5, "t250 r r r r x_ r r r r r r r r r r r x_ r r r r r r r r r r r x_r r r r r r r r r r r x_r r r r r x_");

        H.SetPercussion(6, H.Percussion.triangle);
        H.PlaySound(6, "t250 r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r x_");

    end
end

-- 音階: ド(c), レ(d), ミ(e), ファ(f), ソ(g), ラ(a), シ(b)
-- 音符の長さ: 4分音符(4), 8分音符(8), 16分音符(16)
-- その他のコマンド: 休止符(r), オクターブ(o), ボリューム(v), テンポ(t)
-- 楽器: 
--        SetInstrument() で使われるもの: 基本値はピアノです。
--            H.Instrument.abass (アコースティック ベース), H.Instrument.ebass (エレクトリック ベース),
--            H.Instrument.aguitar (アコースティック ギター), H.Instrument.accordion (アコーディオン)
--        SetPercussion() で使われるもの: 基本値はタンバリンです。
--            H.Percussion.tambourine (タンバリン)  H.Percussion.triangle (トライアングル)
--            H.Percussion.cymbal (シンバル) H.Percussion.hihatclose (ハイハット クローズ)
--            H.Percussion.hihatopen (ハイハット オープン) H.Percussion.kick (キック)
--            H.Percussion.snare (スネア) H.Percussion.tomtom1 (トムトム1)
--            H.Percussion.tomtom2 (トムトム2) H.Percussion.tomtom3 (トムトム3)
--            H.Percussion.fx1 ~ H.Percussion.fx20 (効果音 1~20)


演奏する(効果音)
-- スクリプトが初期化されると呼びだされます。
function OnInit()

    -- 執事の右クリックメニューを追加します。
    -- 最初の変数はメニューの名前です。
    -- 二番目の変数はメニューの固有IDです。
    -- この値はOnMenu() 関数で使われます。
    H.RegisterMenu("演奏する(効果音)", 1);

end

-- 執事を右クリックしてメニューを選択すると呼び出されます。
-- menuNumはRegisterMenuで設定した固有IDです。
function OnMenu(menuNum)

    -- 固有IDが "演奏する"かどうか判断します。
    if (menuNum == 1) then

        H.SetInstrument(2, H.Instrument.accordion);  -- 楽器を設定します。
        H.PlaySound(2, "t250 o6 b2 b2 f# f# a2 a2 g2 e2 f# f# g2 f# f# f# f# c# c# d2 e2 f# f# o5 b2 b2 b2 a# a# a# a# b2 o6 c# c# f# e d a# b r o4 b");

        H.SetInstrument(1, H.Instrument.aguitar);
        H.PlaySound(1, "t250 o4 e b o5 e g e o4 b a# o5 c# e g e o4 a# a o5 e a e b e o4 g o5 d g f# e d o4 e b o5 e g e o4 b g b o5 g f# e o4 b f# o5 c# e f# e g# a# a# f# e d c# o4 b r o3 b");

        H.SetInstrument(0, H.Instrument.abass);
        H.PlaySound(0, "t250 o3 e2 e2 e2 a# a# a# a# a# a# a2 a2 a2 g2 g2 g2 e2 e2 e2 g2 g2 g2 f# f# f# f# f# f# a# a# o4 f# e d c# o3 b r b r");

        H.SetPercussion(3, H.Percussion.hihatclose);  -- 打楽器を設定します。
        H.PlaySound(3, "t250 x_ r x_ r r r r r x_ r x_ r x_ r x_ r r r r r x_ r r r x_ r x_ r r r r r x_ r x_ r x_ r x_ r r r r r x_ r r x_ ");

        H.SetPercussion(4, H.Percussion.fx2);
        H.PlaySound(4, "t250 r r r r r r r r r r r r r r r r r r r r r r x_ r r r r r r r r r r r r r r r r r r r r r r r r r x_r");

        H.SetPercussion(5, H.Percussion.fx9);
        H.PlaySound(5, "t250 r r r r x_ r r r r r r r r r r r x_ r r r r r r r r r r r x_r r r r r r r r r r r x_r r r r r x_");

        H.SetPercussion(6, H.Percussion.fx13);
        H.PlaySound(6, "t250 r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r r x_");

    end
end

-- 音階: ド(c), レ(d), ミ(e), ファ(f), ソ(g), ラ(a), シ(b)
-- 音符の長さ: 4分音符(4), 8分音符(8), 16分音符(16)
-- 楽器: 基本値はピアノです。
--        H.Instrument.abass (アコースティック ベース), H.Instrument.ebass (エレクトリック ベース),
--        H.Instrument.aguitar (アコースティック ギター), H.Instrument.accordion (アコーディオン)
-- その他コマンド: 休止符(r), オクターブ(o), ボリューム(v), テンポ(t)



ダンス
-- ハウススクリプトが初期化されると呼びだされます。
function OnInit()
end

-- ユーザーがエモーションを使うと呼び出されます。
function OnUserEmotion(motion)

  -- エモーションが "ダンス"かどうか確認します。
  if (motion == H.Emotion.dance) then

        -- 最初の0は執事を表します。
        -- 二番目の1はPlaySoundの[1]番labelを表します。
        -- 三番目の変数に執事のモーションを歌うに設定します。
        H.StartAnimation(0, 1, H.Emotion.sing);

        -- [1]番labelが演奏となる際に上のモーションが現れます。
        H.PlaySound(2, "t250 o5 a[1] g f r e r d r g1");

        H.SetInstrument(1, H.Instrument.accordion);
        H.PlaySound(1, "t250 o4 c o3 b a r g r f r e e e2 e2");

        H.SetInstrument(0, H.Instrument.abass);
        H.PlaySound(0, "t250 o4 c[1] c o2 a# r a r g r o3 c r o2 c2 c2");

        H.SetPercussion(3, H.Percussion.hihatclose);
        H.PlaySound(3, "t250 x_ r r r x_ r x_ r ");

        H.SetPercussion(4, H.Percussion.tambourine);
        H.PlaySound(4, "t250 r r x_");

        H.SetPercussion(5, H.Percussion.cymbal);
        H.PlaySound(5, "t250 r r r r r r r r x_");
  end
end


設置物を動かす
-- ハウススクリプトが初期化されると呼びだされます。
function OnInit()

    -- 執事の周囲4m以内に入ると作動します。
    H.SetSensor(4, 4);

    -- アウトレット個数を1個に設定します。
    -- アウトレットアイコンを右クリックするとアウトレットが選択できます。
    H.SetOutletCount(1);
end

-- ユーザーがチャットすると呼び出されます。
function OnUserSay(str)

  -- "移動"と入力するとアウトレット設置物が動きます。
  if (string.find(str, "移動")) then
  
    -- [1]. [2]と同じlabelを設定します。
    H.PlaySound(0, "r2[1] r2[2]");

    -- [1]番labelの場合、アウトレット設置物が上に動きます。
    H.SetPos(H.Outlet.outlet1, 1, 0, 0, 0.5, 1);

    -- [2]番labelの場合、アウトレット設置物がもっと上に動きます。
    H.SetPos(H.Outlet.outlet1, 2, 0, 0, 1, 1);
  end
end


設置物を光らせる
-- ハウススクリプトが初期化されると呼びだされます。
function OnInit()

    -- 執事の右クリックメニューを追加します。
    -- 最初の変数はメニューの名前です。
    -- 二番目の変数はメニューの固有IDです。
    -- この値はOnMenu() 関数で使われます。
    H.RegisterMenu("光らせる", 2);

    -- アウトレット個数を1個に設定します。
    H.SetOutletCount(1);
end

-- 執事を右クリックしてメニューを選択すると呼び出されます。
-- menuNumはRegisterMenuで設定した固有IDです。
function OnMenu(menuNum)

    -- メニューの固有IDが "光らせる"であるか判断します。
    if (menuNum ~= 2) then
      return;
    end

    -- 最初の変数は1番のアウトレットを意味します。
    -- 二番目の変数はPlaySoundの[1]番labelを意味します。
    -- 三番目の変数は1秒間光るということを意味します。
    -- 四番目の変数は赤 (R),
    -- 五番目の変数は緑 (G),
    -- 六番目の変数は青(B)値に色を設定します。
    -- 設置物の一部は色が変わりません。
    H.Glow( H.Outlet.outlet1, 1, 1, 255, 0, 0);

    -- [1]番labelを設定します。
    H.PlaySound(0, "r2[1]");
end


設置物がジャンプする
-- ハウススクリプトが初期化されると呼びだされます。
function OnInit()

    -- アウトレット個数を1個に設定します。
    -- アウトレット アイコンを右クリックすると、アウトレットが選択できます。
    H.SetOutletCount(1);
end

-- ユーザーがチャットすると呼び出されます。
function OnUserSay(str)

    -- "ジャンプ"と入力するとアウトレットに指定した家具がジャンプします。
    if (string.find(str, "ジャンプ")) then
        
        -- [1]番labelを設定します。
        H.PlaySound(0, "r2[1]");

        -- [1]番labelの場合、アウトレット設置物がジャンプします。
        -- 最初の変数は1番のアウトレットを意味します。
        -- 二番目の変数はPlaySoundの[1]番labelを意味します。
        -- 三番目の変数で高さを設定します。
        H.Jump(H.Outlet.outlet1, 1, 1);
    end
end


みつめる
-- ハウススクリプトが初期化されると呼びだされます。
function OnInit()
end

-- ユーザーがチャットすると呼び出されます。
-- 最初の因子はチャット内容、二番目の因子はユーザー名です。
function OnUserSay(str, username)

    -- "執事"と入力するとみつめます。
    if (string.find(str, "執事")) then

        -- 最初の変数はlabelです。
        -- 二番目の変数はターゲット名です。
        -- 三番目の変数はみつける時間です。
        -- 下記のようにすると、[1]番labelから2秒間
        -- descのような名前のターゲットをみつめます。
        -- PlaySoundが終わると、設定した時間に関係なく、元に戻ります。
        H.Target(1, username, 2); 

        -- [1]番labelを設定します。
        H.PlaySound(0, "r2[1] r2");

    end
end


青旗白旗
-- ハウススクリプトが初期化されると呼びだされます。
function OnInit()
end

-- ユーザーがチャットすると呼び出されます。
function OnUserSay(str)

    -- "白旗"と入力すると白旗を上げます。
    if (string.find(str, "白旗")) then

        -- 最初の変数0は執事を意味します。
        -- 二番目の変数1は[1]番labelです。
        -- 三番目の変数に白旗のモーションを設定します。
        H.StartAnimation(0, 1, H.Emotion.whiteflag);

        -- 0番のチャンネルに[1]番labelを設定します。
        H.PlaySound(0, "r[1]");

    -- "青旗"と入力すると青旗を上げます。
    elseif (string.find(str, "青旗")) then
        H.StartAnimation(0, 1, H.Emotion.blueflag);
        H.PlaySound(0, "r[1]");

    elseif (string.find(str, "両方")) then
        H.StartAnimation(0, 1, H.Emotion.twoflag);
        H.PlaySound(0, "r[1]");

    end     
end



パーティータイム
-- ハウススクリプトが初期化されると呼びだされます。
function OnInit()

    -- アウトレット個数を1個に設定します。
    -- アウトレット アイコンを右クリックすると、アウトレットが選択できます。
    H.SetOutletCount(5);
end

function PartyTime()

    -- 最初の0は執事を表します。
    -- 二番目の1はPlaySoundの[1]番labelを表します。
    -- 三番目の変数は執事のモーションを拍手に設定します。
    H.StartAnimation(0, 1, H.Emotion.clap);

    -- 最初の変数は1番のアウトレットを意味します。
    -- 二番目の変数はPlaySoundの[2]番labelを意味します。
    -- 三番目の変数は1秒間光るということを意味します。
    -- 四番目の変数は赤 (R),
    -- 五番目の変数は緑 (G),
    -- 六番目の変数は青(B)値に色を設定します。
    -- 設置物の一部は色が変わりません。
    H.Glow( H.Outlet.outlet1, 2, 1, 0, 0, 255);

    -- [3] 番labelで赤い光が放たれます。
    H.Glow( H.Outlet.outlet1, 3, 1, 255, 0, 0);

    H.Glow( H.Outlet.outlet2, 4, 1, 0, 0, 255);
    H.Glow( H.Outlet.outlet2, 5, 1, 255, 0, 0);
    H.Glow( H.Outlet.outlet3, 6, 1, 0, 0, 255);
    H.Glow( H.Outlet.outlet3, 7, 1, 255, 0, 0);
    H.Glow( H.Outlet.outlet4, 8, 1, 0, 0, 255);
    H.Glow( H.Outlet.outlet4, 9, 1, 255, 0, 0);
    H.Glow( H.Outlet.outlet5, 10, 1, 0, 0, 255);
    H.Glow( H.Outlet.outlet5, 11, 1, 255, 0, 0);

    H.SetPercussion(1, H.Percussion.kick);            -- 1番チャンネルをKick soundに設定します。
    H.SetPercussion(2, H.Percussion.snare);
    H.SetPercussion(3, H.Percussion.hihatclose);
    H.SetPercussion(4, H.Percussion.hihatopen);
    H.SetPercussion(5, H.Percussion.cymbal);
    H.SetPercussion(6, H.Percussion.tomtom1);
    H.SetPercussion(7, H.Percussion.tomtom2);
    H.SetPercussion(0, H.Percussion.tomtom3);

    -- 次は x と _, r にエンコードされた楽譜です。
    H.PlaySound(1, "r[1]r   r   r   x[2] _ r[3]   r   _ x x[4] r16 x[5] r16 x r r    x[6]_ r[7]  r _x  x[8] x x[9] x x[10] x x[11] x r r r r"); -- Kick
    H.PlaySound(2, "r   r   r   r   r   r   x _ r   r   r   x _ r        r  r  x_ r  r   r   x _ r                    r r r r"); -- Snare
    H.PlaySound(3, "r   r   r   r   x x x x x x x x x x x x x x _ x      x x x x x x x x x x x x x x x _      r r r r"); -- hit close
    H.PlaySound(4, "x _ x _ x _ x _ r   r   r   r   r   r   r   x _      r   r   r   r   r   r   r   _ x              r r r r"); -- hihatopen
    H.PlaySound(5, "r   r   r   r   x _ r   r   r   r   r   r   r        x _ r   r   r   r   r   r   r                 x_r r r");
    H.PlaySound(6, "r   r   _ x r   r   r   r   r   r   r   _ x r        r   r   r   r   r r x x x x                  r r r r");
    H.PlaySound(7, "r   r   r _ x   r   r   r   r   r   r   r _ x        r   r   r   r   r x x x x r                  r r r r");
    H.PlaySound(0, "r   r   r _ r16 x16 r r r   r   r   r   r _ r16 x16  r   r   r   r   x x x x r   r           r r r r");

end


-- ユーザーがエモーションを使うと呼び出されます。
function OnUserEmotion(motion)

  -- 感情表現が"勝利"なのか確認します。
  if (motion == H.Emotion.victory) then
    PartyTime()
  end
end


-- ユーザーがチャットすると呼び出されます。
function OnUserSay(str)

    -- "開始"と入力するとPartyTime()が呼び出されます。
    if (string.find(str, "開始")) then
       PartyTime()
    end
end

光の演奏
-- ハウススクリプトが初期化されると呼びだされます。
function OnInit()

    -- アウトレット個数を7個に設定します。
    -- アウトレット アイコンを右クリックすると、アウトレットが選択できます。
    H.SetOutletCount(7);
    
    -- OnSoundPlay 関数を活性化します。
    H.EnableSoundCallback(1)
end

function PlayNow()
    H.SetPercussion(1, H.Percussion.kick);
    H.SetPercussion(2, H.Percussion.snare);
    H.SetPercussion(3, H.Percussion.hihatclose);
    H.SetPercussion(4, H.Percussion.hihatopen);
    H.SetPercussion(5, H.Percussion.fx5);
    H.SetPercussion(6, H.Percussion.fx14);
    H.SetPercussion(7, H.Percussion.fx18);
    H.SetPercussion(0, H.Percussion.fx11);
    H.PlaySound(1, "t150 x_rrx_r_x_xrx_rrx_ r_x_xrx_rrrrx_rrx_rrrrx");
    H.PlaySound(2, "t150 rrx_r rrx_r rrx_r rrx_r rrx__x rrx_r rrx__x rrx_r ");
    H.PlaySound(3, "t150 x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x"); -- hit close
    H.PlaySound(4, "t150 rrrrrr_xr rrrr _xr_xr rrrr rrr_x");
    H.PlaySound(5, "t150 _xrrrrrr_x_xrrrrr_x_rxrrrrrrr_x");
    H.PlaySound(6, "t150 r_xrrrr_xrr_xrrrrr_xrrrrrrrrrx");
    H.PlaySound(7, "t150 rrr_x_xrrrrrr_x_xrrrrx_rrrrrrrrrr_x");
    H.PlaySound(0, "t150 rrrrrrrrrrrrrrrrx");
end

-- ユーザーがチャットすると呼び出されます。
function OnUserSay(str)

  -- "明かり"と入力するとPlayNow() を呼び出します。
  if (string.find(str, "明かり")) then
     PlayNow()
  end
end

-- 音楽が演奏されると呼びだされます。
function OnSoundPlay(channel, note, len, label)
    if (note == 'x') then
        H.GlowNow( H.Outlet.outlet0+channel, 0.1, 0, 0, 255);
    end
end


青旗白旗ダンス
-- ハウススクリプトが初期化されると呼びだされます。
function OnInit()

    -- アウトレット個数を3個に設定します。
    -- アウトレット アイコンを右クリックすると、アウトレットが選択できます。
    H.SetOutletCount(3);
    
    -- OnSoundPlay 関数を活性化します。
    H.EnableSoundCallback(1)
end

function PlayNow()
    H.SetPercussion(1, H.Percussion.kick);
    H.SetPercussion(2, H.Percussion.snare);
    H.SetPercussion(3, H.Percussion.hihatclose);
    H.SetPercussion(4, H.Percussion.hihatopen);
    H.SetPercussion(5, H.Percussion.fx5);
    H.SetPercussion(6, H.Percussion.fx14);
    H.SetPercussion(7, H.Percussion.fx18);
    H.SetPercussion(0, H.Percussion.fx11);
    H.PlaySound(1, "t150 x_rrx_r_x_xrx_rrx_ r_x_xrx_rrrrx_rrx_rrrrx");
    H.PlaySound(2, "t150 rrx_r rrx_r rrx_r rrx_r rrx__x rrx_r rrx__x rrx_r ");
    H.PlaySound(3, "t150 x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x_ x"); -- hit close
    H.PlaySound(4, "t150 rrrrrr_xr rrrr _xr_xr rrrr rrr_x");
    H.PlaySound(5, "t150 _xrrrrrr_x_xrrrrr_x_rxrrrrrrr_x");
    H.PlaySound(6, "t150 r_xrrrr_xrr_xrrrrr_xrrrrrrrrrx");
    H.PlaySound(7, "t150 rrr_x_xrrrrrr_x_xrrrrx_rrrrrrrrrr_x");
    H.PlaySound(0, "t150 rrrrrrrrrrrrrrrrx");
end

-- ユーザーがチャットすると呼び出されます。
function OnUserSay(str)

  -- "旗"と入力するとPlayNow()を呼び出します。
  if (string.find(str, "旗")) then
     PlayNow()
  end
end

-- 音楽が演奏されると呼びだされます。
function OnSoundPlay(channel, note, len, label)
    if (note == 'x') then
        if (channel == 1) then
           H.StartAnimationNow(H.Outlet.outlet1, H.Emotion.whiteflag);
        end
        if (channel == 2) then
           H.StartAnimationNow(H.Outlet.outlet1, H.Emotion.blueflag);
        end
        if (channel == 3) then
           H.StartAnimationNow(H.Outlet.outlet2, H.Emotion.whiteflag);
        end
        if (channel == 4) then
           H.StartAnimationNow(H.Outlet.outlet2, H.Emotion.blueflag);
        end
        if (channel == 5) then
           H.StartAnimationNow(H.Outlet.outlet3, H.Emotion.whiteflag);
        end
        if (channel == 6) then
           H.StartAnimationNow(H.Outlet.outlet3, H.Emotion.blueflag);
        end
    end
end



ライブ ボックス
-- ハウススクリプトが初期化されると呼びだされます。
function OnInit()

    -- 執事の右クリックメニューを追加します。
    -- 最初の変数はメニューの名前です。
    -- 二番目の変数はメニューの固有IDです。
    -- この値はOnMenu() 関数で使われます。
    H.RegisterMenu("ライブ ボックス", 1);

    -- アウトレット個数を14個に設定します。
    H.SetOutletCount(14);
end

-- 執事を右クリックしてメニューを選択すると呼び出されます。
-- menuNumはRegisterMenuで設定した固有IDです。
function OnMenu(menuNum)

    -- メニューの固有IDが "ライブ ボックス"であるか判断します。
    if (menuNum ~= 1) then
      return;
    end

    -- [1]番から[4]番までlabelを設定します。
    H.PlaySound(0, "t130 r2[1] r2 r2 r2[2] r2 r2 r2[3] r2 r2 r2[4]");    
    
    H.SetInstrument(1, H.Instrument.aguitar);
    H.PlaySound(1, "t130 o5 e f# g o6 c o5 d# e f# b e f# g o6 c o5 d# e f# b o5 g8 f8# g8 o4 b8 o5 e g a8 o4 a8 o5 g8 o4 b8 o5 d8# o4 b8 g8 d8# e");
    
    H.PlaySound(2, "t130 o6 c8 o5 g8 f8# e8 o6 c8 o5 g8 f8# e8 o6 c8 o5 b8 f8# d8# o6 c8 o5 b8 f8# d8# o6 c8 o5 g8 f8# e8 o6 c8 o5 g8 f8# e8 o6 c8 o5 b8 f8# d8# o6 c8 o5 b8 f8# d8# e8 f8# g8 b8 o6 e8 f8# g8 f8# d8# o5 a8 g8 d8# o4 b8 r8 d8# r8 e");

    H.SetInstrument(3, H.Instrument.accordion);
    H.PlaySound(3, "t130 v15 r r8 o4 g8 o5 c8 d8 e8 g8 b2 f2# r r8 o4 g8 o5 c8 d8 e8 g8 b2 d# f# b8 r8 b g8 r8 g o6 c8 r8 o5 a8 r8 d8# r8 o4 b8 r8 o5 e");

    H.PlaySound(4, "t130 x_ r x_ r x_ r x_ r x_ r x_ r x_ r x_ r     x_ x_ x_ r    x_ r x_ x_ x_ ");

    H.SetPercussion(5, H.Percussion.hihatopen);
    H.PlaySound(5, "t130 rrrr rrrx_ rrrr rrrx_ rrrx_ ");

    H.SetPercussion(6, H.Percussion.fx10);
    H.PlaySound(6, "t130 rrrr rrrr rrrr rrrr rrrr rrrr x");
    
    H.SetPercussion(7, H.Percussion.fx15);
    H.PlaySound(7, "t130 rrrr rrrr rrrr rrrr rrrr rx");

    -- 最初の変数はアウトレットです。
    -- 二番目の変数はPlaySoundの[1]番labelを意味します。
    -- 三番目の変数から五番目の変数はX, Y, Z が動きの大きさです。
    -- 六番目の変数は動く時間です。
    H.SetPos(H.Outlet.outlet1, 1, 0, 0, 0.5, 1);
    H.SetPos(H.Outlet.outlet2, 1, 0, 0, 0.5, 1);
    H.SetPos(H.Outlet.outlet3, 1, 0, 0, 0.5, 1);
    H.SetPos(H.Outlet.outlet4, 1, 0, 0, 0.5, 1);
    H.SetPos(H.Outlet.outlet5, 1, 0, 0, 0.5, 1);
    H.SetPos(H.Outlet.outlet6, 1, 0, 0, 0.5, 1);
    H.SetPos(H.Outlet.outlet7, 1, 0, 0, 0.5, 1);
    H.SetPos(H.Outlet.outlet8, 1, 0, 0, 0.5, 1);
    H.SetPos(H.Outlet.outlet9, 1, 0, 0, 0.5, 1);
    H.SetPos(H.Outlet.outlet10, 1, 0, 0, 0.5, 1);
    H.SetPos(H.Outlet.outlet11, 1, 0, 0, 0.5, 1);
    H.SetPos(H.Outlet.outlet12, 1, 0, 0, 0.5, 1);
    H.SetPos(H.Outlet.outlet13, 1, 0, 0, 0.5, 1);
    H.SetPos(H.Outlet.outlet14, 1, 0, 0, 0.5, 1);

    -- H.Outlet.outlet1の代わりに1を使用してよいです。
    H.SetPos(1, 2, 1, 0, 0.5, 1);
    H.SetPos(2, 2, 0, 1, 0.5, 1);
    H.SetPos(3, 2, 0, 0, 1.5, 1);
    H.SetPos(4, 2, 1, 0, 0.5, 1);
    H.SetPos(5, 2, 0, 1, 0.5, 1);
    H.SetPos(6, 2, 0, 0, 1.5, 1);
    H.SetPos(7, 2, 1, 0, 0.5, 1);
    H.SetPos(8, 2, 0, 1, 0.5, 1);
    H.SetPos(9, 2, 0, 0, 1.5, 1);
    H.SetPos(10, 2, 1, 0, 0.5, 1);
    H.SetPos(11, 2, 0, 1, 0.5, 1);
    H.SetPos(12, 2, 0, 0, 1.5, 1);
    H.SetPos(13, 2, 1, 0, 0.5, 1);
    H.SetPos(14, 2, 0, 1, 0.5, 1);

    H.SetPos(1, 3, 1, 1, 0.5, 1);
    H.SetPos(2, 3, 0, 1, 1.5, 1);
    H.SetPos(3, 3, 1, 0, 1.5, 1);
    H.SetPos(4, 3, 1, 1, 0.5, 1);
    H.SetPos(5, 3, 0, 1, 1.5, 1);
    H.SetPos(6, 3, 1, 0, 1.5, 1);
    H.SetPos(7, 3, 1, 1, 0.5, 1);
    H.SetPos(8, 3, 0, 1, 1.5, 1);
    H.SetPos(9, 3, 1, 0, 1.5, 1);
    H.SetPos(10, 3, 1, 1, 0.5, 1);
    H.SetPos(11, 3, 0, 1, 1.5, 1);
    H.SetPos(12, 3, 1, 0, 1.5, 1);
    H.SetPos(13, 3, 1, 1, 0.5, 1);
    H.SetPos(14, 3, 0, 1, 1.5, 1);

    H.SetPos(1, 4, 0, 0, 2, 1);
    H.SetPos(2, 4, 0, 0, 2, 1);
    H.SetPos(3, 4, 0, 0, 2, 1);
    H.SetPos(4, 4, 0, 0, 2, 1);
    H.SetPos(5, 4, 0, 0, 2, 1);
    H.SetPos(6, 4, 0, 0, 2, 1);
    H.SetPos(7, 4, 0, 0, 2, 1);
    H.SetPos(8, 4, 0, 0, 2, 1);
    H.SetPos(9, 4, 0, 0, 2, 1);
    H.SetPos(10, 4, 0, 0, 2, 1);
    H.SetPos(11, 4, 0, 0, 2, 1);
    H.SetPos(12, 4, 0, 0, 2, 1);
    H.SetPos(13, 4, 0, 0, 2, 1);
    H.SetPos(14, 4, 0, 0, 2, 1);
end

AIONとは無関係なメモ(使用可能なイベントハンドラを探索するためのゲーム用スクリプト)

0 件のコメント: