function Myrw_init(view)
if view.IsInit then
view.add(new.bmpbutton("change","chajian_btn.bmp"));
view.add(new.bmpbutton("await.change","chajian_btn.bmp"));
return;
end
-- 非异步回调方式调用服务端函数
local object = view.find("change");
object.enable = 1;
object.xpos = 130;
object.ypos = 60;
object.event = function(object,event)
if event == Cevent.click then
unsafe.sayhello({"早安,熊弟弟"})
-- 使用回调函数接收返回数据 任然无法避免回调地狱
unsafe.changeMetamo({104870},function (ret)
Cli.SysMessage(tostring(ret[1]),4,3);
end
)
end
end
-- 异步回调方式调用服务端函数
local object = view.find("await.change");
object.enable = 1;
object.xpos = 130;
object.ypos = 60;
object.event = function(object,event)
if event == Cevent.click then
unsafe.sayhello({"早安,熊弟弟"})
-- 当执行到unsafe.changeMetamo这里时 线程会被挂起等待ret返回
-- 这个过程是异步的 不会卡游戏线程
-- 等待返回后 会自动恢复当时上下线程 这个步骤是自动的 无需关心的
local ret = unsafe.changeMetamo({104870});
Cli.SysMessage(tostring(ret[1]),4,3);
end
end
end
服务端代码:
      
function unsafe.sayhello(player,tbl)
NLG.SystemMessage(player,tostring(tbl[1]))
end
function unsafe.changeMetamo(player,tbl)
local metamoid = tonumber(tbl[1])
Char.SetData(player,%对象_形象%,metamoid);
Char.SetData(player,%对象_原形%,metamoid);
Char.SetData(player,%对象_原始图档%,metamoid);
NLG.UpChar(player);
return {'已经变身成['..metamoid.."] 真漂亮,快给大家看看吧!!"}
end