> 神唱K歌 > 【脚本学习】分歧解决终端机——掷色子

【脚本学习】分歧解决终端机——掷色子

注意,不是葛优的“分歧终端机”,多了两个字“分歧解决终端机”。用途呢,就是在两个人(或者很多人)存在分歧的时候,比如今天晚上谁洗碗来着,用这个来公平的决定胜负。机器面前,绝对人人平等。

MyTable =
{
EntryInfo = {ONLOADED, "state1"};
StateList = {"state1"};
state1 =
{
Timer = -1,
TimeOut = -1,
NextState = "nil",
EventList = {ONCLIENTINPUT};
MyEventList = {"1,string1,掷色子","2,string2,设定最小值","3,string3,设定最大值"};--自定义左键菜单
};
}

function MyTable.state1.OnEnter(args)
uRandomseed(os["time"]());--设置随机种子
min=1;--掷色子的最小值,初始为1.
max=100;--掷色子的最大值,初始为100.
end

function MyTable.state1.string1(args) --点击左键菜单中“掷色子”时,执行此函数。
local id=uGetToucherId();--获得点击者的id
name=uGetPlayerName(id);--获得点击者的姓名
x=uRandom(min,max);--在范围内取随机值,并赋值x
a=min+(max-min)/10;
b=min+(max-min)/2;
c=max-(max-min)/10;
if x<=a then
uSayChannel(name.."掷得"..x..",这色子掷得真让人绝望啊~");--在聊天频道输出“”内容
uSendMsgBoxNine(id,"你掷得"..x..",要坚强~");--屏幕中间向点击者输出“”内容
elseif x>a and x<=b then
uSayChannel(name.."掷得"..x..",差强人意,看来霉神还没有离开啊。");--在聊天频道输出“”内容
uSendMsgBoxNine(id,"你掷得"..x..",努力啊!");--屏幕中间向点击者输出“”内容
elseif x>b and x<=c then
uSayChannel(name.."掷得"..x..",还行。分不在高,能赢就行。");--在聊天频道输出“”内容
uSendMsgBoxNine(id,"你掷得"..x..",继续努力!");--屏幕中间向点击者输出“”内容
elseif x>c and x<max then
uSayChannel(name.."掷得"..x..",哇!这么高!");--在聊天频道输出“”内容
uSendMsgBoxNine(id,"你掷得"..x..",牛人啊!");--屏幕中间向点击者输出“”内容
elseif x==max then
uSayChannel(name.."掷得"..x..",哇哦!赌神附体,快都来吸点仙气~");--在聊天频道输出“”内容
uSendMsgBoxNine(id,"你掷得"..x..",赌神!"); --屏幕中间向点击者输出“”内容
end
end

function MyTable.state1.string2(args) --点击左键菜单中“设定最小值”时,执行此函数。
local id=uGetToucherId();
uSendMsgBoxOne(id,"输入框","请输入取值范围的最小值","要小于最大值哦。");--向用户弹出输入框。
flog=1;
end

function MyTable.state1.string3(args) --点击左键菜单中“设定最大值”时,执行此函数。
local id=uGetToucherId();
uSendMsgBoxOne(id,"输入框","请输入取值范围的最大值","要大于最小值哦。");--向用户弹出输入框。
flog=2;
end

function MyTable.state1.OnClientInput(args)--用户输入成功后执行此函数
if args.m_nOptType==1 and flog==1 then --当输入最小值成功时,
min=uTonumber(args.text);--将用户输入的值赋给min
uSayChannel("设定成功,当前取值范围最小值为"..min);
elseif args.m_nOptType==1 and flog==2 then --当输入最大值成功时,
max=uTonumber(args.text);--将用户输入的值赋给max
uSayChannel("设定成功,当前取值范围最大值为"..max);
end
end

function MyTable.state1.OnExit(args)
end

注意:输入最小值时,若数字反而大于最大值,掷色子将导致脚本出错。同样,最大值也不能小于最小值。否则,就只有重新加载脚本了。(为了避免脚本太过复杂,这里没有加入自动判断机制)
流程如下:
由我世界神唱3dktv