> 神唱K歌 > 【脚本学习】吃西瓜——30秒后再吃第二次!

【脚本学习】吃西瓜——30秒后再吃第二次!

有同学在问包房西瓜盘如何控制时间,时间不到不让人吃第二次。下面就是脚本,不过需要说明的是:
1.包房里面的西瓜模型是一个复杂的组合物品,配合复杂的脚本才能实现越吃越少的视觉效果。这里就不解说了,有兴趣的同学可以联系我。
2.场景中吃西瓜加体力,实际上是用存钱罐支付体力实现的,和我们使用包裹中的食物是两个完全不同的机制。所以想要实现点击加体力的功能,必须绑定存钱罐,方法见
如何使用存钱罐

MyTable =
{
EntryInfo= {ONLOADED,"state1"};
StateList = {"state1"};
state1 =
{
Timer = 1000, --每秒钟执行一次function MyTable.state1.OnTimer(args)函数。
TimeOut = -1,
NextState = "nil",
EventList= {ONTOUCH};
};
}
function MyTable.state1.OnEnter(args)
data={} --建立数组,储存所有吃过的人的id。
counter={} --建立数组,给吃过的人计数,以便时间到后给他们解除限制。
end

function MyTable.state1.OnExit(args)
end

function MyTable.state1.OnTouch(args) --点击触发此函数。
id=uGetToucherId(); --获得点击的人的id。
a=uMaxn(data);--获得数组data中字符串的个数。
datavalue=uConcat(data,"#"); --将数组data中的所有元素用#连接起来,并赋值给datavalue。
local g,h = uGsub(datavalue,id,id); --用id替换datavalue中的id部分,将替换次数赋值给h,详细见帮助。这里是用来判断datavalue中是否有id部分。
if h==0 then
uCreditCardPayHP(50,id); --给点击的人增加50体力值,可以根据情况进行修改。此API在绑定存钱罐后才能使用。
data[a+1]=id;
counter[a+1]=1;
else
uSendMsgBoxNine(id,"刚吃过,还是给别人留点吧~"); --屏幕中间给人显示语言,紫色部分可自己修改。
end
end

function MyTable.state1.OnTimer(args) --每1秒执行一次此函数。
b=uMaxn(data);
n=1
while data[n] do --利用while循环进行计数,让同一人在30秒内无法再次获得体力值。
counter[n]=counter[n]+1;
if counter[n]==30 then --计数控制何时可以再吃,此处设定30秒。可自己修改。
uRemove(counter,n);
uRemove(data,n);
n=n-1;
end
n=n+1
end
end

这个脚本逻辑很简单,这里详细介绍一下脚本中的存钱罐操作API:
函数:
CreditCardPayHP(hp,playerId);
参数:
(1)hp:整型数,大于零的整数,体力值。
(2)playerId:字符串,指定用户的Id。

返回值:
详见附录返回值类型。
备注:
(1)如果账户内钱不足则被付费者会弹出相应提示信息。
(2)每获得8点体力值将扣除脚本绑定的存钱罐1U。

Eg:
(1)uCreditCardPayHP(50,uGetToucherId())
--脚本所有者付给操作脚本的用户50体力。