※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。


scriptで頻出する関数や、実際に使った関数などの仕様を適当にメモ

わりと嘘書いてることもあるかもしれない



ネタ元

ttp://www.gsc-game.com/index.php?t=community&s=forums&s_game_type=xr3&thm_page=14&thm_id=3380&page=1&sort=ASC&sec_id=18

actor:iterate_inventory()

仕様がイマイチ読みきれてないが、インベントリの中にあるアイテムの数を確認したり、特定のアイテムを削除したりする際に使えるらしい。
AMKNSでの使用例・・・を、ちょっと書き直したもの:
  local vCount = 0
  db.actor:iterate_inventory(function (dummy, vItem)
     if vItem:section() == "bandage" then
        vCount = vCount + 1 
     end 
  end, nil)
iterate_inventoryの1つ目の引数(function~最後のendまで)は、こうやってitemを渡される関数を渡す必要がある。
ここで、用意した変数vCountが、渡されたitemのsectionが"bandage"だった時だけ+1される。
最終的に、vCountはインベントリ内の包帯の個数となっているはずである。
この関数で、itemにインベントリ内のアイテムが1つづつ渡される。複数個持っていたらおそらくその数だけ渡される。

db.actor:inventory_for_each()なんてのもあるらしい。arenaでの手持ちアイテム全部箱にぶっこむ所で使われていた。
iterate_inventoryの方はクエストアイテムも含むらしいので、その点で使い分けてもいいかも知れない。

アイテムの移動・受け渡しに使う関数

NPC1:transfer_item(NPC1:object(section), NPC2)
NPC1の持つアイテム(sectionで指定)を、NPC2に渡す。
基本的には、NPC1もしくはNPC2がdb.actorになると思われる。

alife():create(section,db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())
アイテム(sectionで指定)を、actorのインベントリに出現させる。
2つ目以降は出現させる座標等を示すもので、インベントリ以外にも、NPCを沸かせたり、足元に落としたりも出来る。

上記2つはdialogs.relocate_item_sectionで使われているが、細かい操作をするなら直にこれらを使ったほうがいいかもしれない。

インベントリからアイテムを無くす場合は、alife():release()を使えばいいはず。
alife():release(alife():object(db.actor:object("アイテムID"):id()), true)
書式は合ってると思うけど、動作するかどうかまだ確認していない。

db.actor:give_money(num)
actorにnumRUの金を与える。負の値にすればちゃんと所持金が減る。
NPC1:transfer_money(num, NPC2)
NPC2にNPC1からnumRUの金を与える。transfer_itemのmoney版。
dialogs.relocate_money(db.actor, num, "in"もしくは"out")
dialogs.scriptにある関数。"in"で金の取得、"out"で減少。

アイテム移動関数・補足

上記の関数でアイテムや金銭の移動は行われるが、アイテムを移動したメッセージを表示させるために、以下の関数を使用する。
news_manager.relocate_item(db.actor,"in"もしくは"out","item_section")
actorに対して、"in"ならば"item_section"で指定したアイテムの入手、"out"ならアイテムを失うメッセージを出す。
実際のアイテム移動は行われないので、あくまでメッセージの表示のみであることを忘れないように。

また、moneyに関してはdialogs.relocate_money()を使っておけばおk。