89 lines
3.1 KiB
GDScript
89 lines
3.1 KiB
GDScript
extends NpcScript
|
|
|
|
#
|
|
func OnStart():
|
|
var globalScript : TicTacToeGlobal = (npc.ownScript as TicTacToeGlobal)
|
|
match globalScript.startStep:
|
|
TicTacToeGlobal.State.NONE:
|
|
if steps.is_empty():
|
|
match randi_range(0, 2):
|
|
0: Mes("要玩井字棋吗?棋盘是我自己画的!")
|
|
1:
|
|
Mes("我画不出圆圆的圈,所以我用小方块代替。安迪总笑我,但方块也可以很厉害。")
|
|
Mes("要玩井字棋吗?")
|
|
2:
|
|
Mes("前几天我看到一伙海盗和守卫玩井字棋。守卫输了,但他们说那叫战略撤退。")
|
|
Mes("你也要玩吗?")
|
|
else:
|
|
Mes("要玩井字棋吗?")
|
|
Choice("和你玩", StartPvE)
|
|
Choice("找别人玩", StartPvP)
|
|
Choice("怎么玩?", ShowRules)
|
|
Choice("晚点再玩", Decline)
|
|
TicTacToeGlobal.State.X:
|
|
if globalScript.playerX != own:
|
|
Mes("嘿,已经有人在等对手了!你可以去挑战他们!")
|
|
Choice("我来和他们玩!", StartPvP)
|
|
Choice("怎么玩?", ShowRules)
|
|
Choice("晚点再玩", Decline)
|
|
else:
|
|
Mes("还没人来。你要继续等吗?")
|
|
Choice("再等一会儿", WaitPvP)
|
|
Choice("怎么玩?", ShowRules)
|
|
Choice("我得走了", CancelPvP)
|
|
TicTacToeGlobal.State.O:
|
|
var isPlaying : bool = globalScript.playerX == own or globalScript.playerO == own
|
|
if isPlaying:
|
|
Mes("嘿,不许偷看提示!快回去下你的棋!")
|
|
else:
|
|
Mes("嘘,他们正在下棋!你可以看,但不能乱指。")
|
|
Choice("好啦好啦", OnQuit)
|
|
Choice("怎么玩?", ShowRules)
|
|
if isPlaying:
|
|
Choice("我得走了", CancelPvP)
|
|
|
|
func ShowRules():
|
|
Mes("你选一个格子,放上自己的记号,然后换另一个人。")
|
|
Mes("横着、竖着、斜着,只要三个连成一条线就赢。")
|
|
Mes("如果九个格子都填满还没人连成线,就是平局。平局也不错,只是没有胜利时那么好跳起来。")
|
|
OnStart()
|
|
|
|
func Decline():
|
|
Chat("好吧,改变主意就来找我,棋盘不会跑掉。")
|
|
|
|
# Player vs 角色
|
|
func StartPvE():
|
|
var globalScript : TicTacToeGlobal = (npc.ownScript as TicTacToeGlobal)
|
|
if globalScript.startStep == TicTacToeGlobal.State.NONE and globalScript.StartPvE(own):
|
|
DisplayActions(["gp_target", "gp_untarget"])
|
|
Mes("你执叉号!选一个格子,快快快!")
|
|
else:
|
|
Mes("等一下,已经有人在玩了!要排队。")
|
|
|
|
# Player vs Player
|
|
func StartPvP():
|
|
var globalScript : TicTacToeGlobal = (npc.ownScript as TicTacToeGlobal)
|
|
match globalScript.StartPvP(own):
|
|
TicTacToeGlobal.State.X:
|
|
Mes("现在等另一个人来挑战你。")
|
|
return
|
|
TicTacToeGlobal.State.O:
|
|
DisplayActions(["gp_target", "gp_untarget"])
|
|
Mes("太好了,你们都到齐了!好好玩!")
|
|
return
|
|
TicTacToeGlobal.State.NONE:
|
|
Mes("不行不行,棋盘现在被占用了!")
|
|
|
|
func WaitPvP():
|
|
if (npc.ownScript as TicTacToeGlobal).playerX == own:
|
|
Chat("一定很快就有人来,大概吧!")
|
|
|
|
func CancelPvP():
|
|
var globalScript : TicTacToeGlobal = (npc.ownScript as TicTacToeGlobal)
|
|
if globalScript.playerX == own:
|
|
globalScript.LeaveQueue(own)
|
|
Chat("啊,这么快就不等了?好吧。")
|
|
|
|
func OnQuit():
|
|
Chat("嘘,别打扰他们下棋。")
|