userscript
python3
Pyspades
Ace_of_Spades

【Ace of Spades】ダンジョン探索スクリプトを作る(第一回)【script】

ダンジョン探索スクリプト(案)

初期状態でマップは真っ黒で、自分が移動した箇所だけマップが表示される。
ローグライクゲームとかであるようなマップシステムをAoSにも導入できないだろうかと思って開発に着手した。

開発記録1日目、今回は個々の技術的な検証を行っていきたい。

1、プレイヤーごとにマップ情報を分ける

あるプレイヤーが探索したマップ情報が他のプレイヤーのマップに表示されないように、マップ情報をプレイヤーごとに分ける

on_block_destroy(self,x,y,z,mode)
#ブロックの設置・破壊情報を作成
block_action = BlockAction()
block_action.player_id = self.player_id
block_action.value = mode
block_action.x = x
block_action.y = y
block_action.z = z


#単ブロック破壊の場合
if mode == DESTROY_BLOCK:
    #ブロックがなくなった状態を自分にのみ適用
    self.send_contained(block_action)

#スペード掘りとグレ爆破の場合
else:
    #ブロックがなくなったことを他プレイヤーにも共有
    self.protocol.send_contained(block_action)

self.protocol.map.remove_point(x, y, z) 

return False

色々実験してみて分かったこと

self.send_contained(block_action) はグラフィック上のブロックを取り除くだけで、self.protocol.map.remove_point(x, y, z) をしないと、ブロックを破壊した本人にだけ『見えないけど当たり判定だけあって、通過できない』タイプのバグブロックが出来上がってしまう。

ちなみに、 self.protocol.send_contained(block_action) で情報を受け取った他のプレイヤーは当たり判定も取り除かれるらしい。

また、self.send_contained(block_action) や self.protocol.map.remove_point(x, y, z) をしないで self.protocol.send_contained(block_action) だけをすると、『見た目上そこにあるけど、当たり判定がない(体当たりするとすり抜ける・壊せない)』タイプのバグブロックが出来上がる

send_contained⇒ブロックのグラフィック操作
remove_point⇒ブロックの当たり判定操作

と思ってよさそうだ