739 lines
33 KiB
Plaintext
739 lines
33 KiB
Plaintext
|
|
DB <- null
|
|||
|
|
BoxStetu <- 0 //????????
|
|||
|
|
Box_Redom_Model <- 0 //?????<3F><>???
|
|||
|
|
Box_Open_Stetu <- 0 //?????????
|
|||
|
|
|
|||
|
|
class DargonBoxButton // obj -- 按钮名称 -- 鼠标对象 -- X坐标 -- Y坐标 -- 宽度 -- 高度 -- Ani调用路径 -- Ani宽度 -- Ani高度 -- AniRGB --
|
|||
|
|
{
|
|||
|
|
obj = null;
|
|||
|
|
buttonName = null;
|
|||
|
|
IMouse = null;
|
|||
|
|
x = null;
|
|||
|
|
y = null;
|
|||
|
|
width = null;
|
|||
|
|
length = null;
|
|||
|
|
aniFileName = null;
|
|||
|
|
BoxStetu = null;
|
|||
|
|
|
|||
|
|
constructor(gObj, gButtonName, gIMouse, gX, gY, gWidth, gLength, ganiFileName) {
|
|||
|
|
obj = gObj;
|
|||
|
|
buttonName = gButtonName;
|
|||
|
|
IMouse = gIMouse;
|
|||
|
|
x = gX;
|
|||
|
|
y = gY;
|
|||
|
|
width = gWidth;
|
|||
|
|
length = gLength;
|
|||
|
|
aniFileName = ganiFileName;
|
|||
|
|
BoxStetu = BoxStetu;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function drawButtonImage() {
|
|||
|
|
if (isDown())
|
|||
|
|
y++;
|
|||
|
|
|
|||
|
|
if (isInRect()) {
|
|||
|
|
local buttonAniEff = obj.getVar().GetAnimationMap(buttonName + "rect", aniFileName.tostring() + "_2.ani");
|
|||
|
|
sq_AnimationProc(buttonAniEff);
|
|||
|
|
sq_drawCurrentFrame(buttonAniEff, x, y, true);
|
|||
|
|
}
|
|||
|
|
if (!isInRect()) {
|
|||
|
|
local buttonAni = obj.getVar().GetAnimationMap(buttonName, aniFileName.tostring() + "_1.ani");
|
|||
|
|
sq_AnimationProc(buttonAni);
|
|||
|
|
sq_drawCurrentFrame(buttonAni, x, y, true);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function isInRect() {
|
|||
|
|
local mouseX = IMouse.GetXPos();
|
|||
|
|
local mouseY = IMouse.GetYPos();
|
|||
|
|
if (sq_IsIntersectRect(mouseX, mouseY, 5, 5, x, y, width, length))
|
|||
|
|
return true;
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function isDown() {
|
|||
|
|
if (isInRect() && IMouse.IsLBDown()) {
|
|||
|
|
obj.getVar(buttonName).setBool(0, true);
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function isActive() {
|
|||
|
|
if (isInRect() && IMouse.IsLBUp() && obj.getVar(buttonName).getBool(0)) {
|
|||
|
|
obj.getVar(buttonName).setBool(0, false);
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
class DarBox {
|
|||
|
|
DragonboxJson = null; //龙盒Json对象
|
|||
|
|
op = null; //回调包活动状态
|
|||
|
|
Rest = 0; //重置值
|
|||
|
|
Box_Index = null; //盒子的编号
|
|||
|
|
BoxDoselect = null; //抽奖次数
|
|||
|
|
|
|||
|
|
thisname = null; //对象名称
|
|||
|
|
State = 0; //龙盒状态
|
|||
|
|
err = 0; //错误信息
|
|||
|
|
lucky_value = 0; //幸运值
|
|||
|
|
box_num = 0; //盒子数量
|
|||
|
|
|
|||
|
|
GradeAni = null; //开盒子的Ani
|
|||
|
|
BoxEffAni = null; //开盒子的背景Ani
|
|||
|
|
OneBoxAni = null; //单抽 盒子 Ani
|
|||
|
|
OneBoxAniEff = null; //单抽 Eff
|
|||
|
|
OneBoxSound = 0; //单抽盒子音效
|
|||
|
|
OneBoxEffSound = 0; //单抽盒子音效
|
|||
|
|
OneSyncPack = 0; //单抽同步状态
|
|||
|
|
|
|||
|
|
|
|||
|
|
TenGradeAni = [];
|
|||
|
|
TenBoxEffAni = [];
|
|||
|
|
TenBoxAniArr = []; //十连抽盒子Ani数组
|
|||
|
|
TenBoxAniEffArr = []; //十连抽 Eff 数组
|
|||
|
|
TenBoxSound = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; //十连抽盒子音效
|
|||
|
|
TenBoxEffSound = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; //十连抽盒子音效
|
|||
|
|
TenSyncPack = 0;
|
|||
|
|
|
|||
|
|
ItemIndexArr = []; //定义物品编号数组
|
|||
|
|
ItemNumArr = []; //定义物品数量数组
|
|||
|
|
ItenGradeArr = []; //定义物品品级数组
|
|||
|
|
ItenName = []; //定义物品名称
|
|||
|
|
|
|||
|
|
//构造对象 对象名称 并且获取一次Model
|
|||
|
|
constructor(G_thisname) {
|
|||
|
|
thisname = G_thisname;
|
|||
|
|
DragonboxJson = Json_STL("DragonBox"); //初始化龙盒Json对象
|
|||
|
|
op = DragonboxJson.Get("op");
|
|||
|
|
|
|||
|
|
TenGradeAni.resize(10); //初始化
|
|||
|
|
TenBoxEffAni.resize(10); //初始化
|
|||
|
|
TenBoxAniArr.resize(10); //初始化
|
|||
|
|
TenBoxAniEffArr.resize(10); //初始化
|
|||
|
|
|
|||
|
|
ItemIndexArr.resize(10); //初始化
|
|||
|
|
ItemNumArr.resize(10); //初始化
|
|||
|
|
ItenGradeArr.resize(10); //初始化
|
|||
|
|
ItenName.resize(10); //初始化
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//还原对象
|
|||
|
|
function reset() {
|
|||
|
|
sq_Rewind(OneBoxAni); //还原单抽Ani
|
|||
|
|
sq_Rewind(OneBoxAniEff); //还原单抽Ani
|
|||
|
|
|
|||
|
|
for (local i = 0; i < 10; ++i) //还原十连抽Ani
|
|||
|
|
{
|
|||
|
|
sq_Rewind(TenBoxAniArr[i]);
|
|||
|
|
sq_Rewind(TenBoxAniEffArr[i]);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
op = null; //龙盒模式
|
|||
|
|
lucky_value = 0; //幸运值
|
|||
|
|
box_num = 0; //盒子数量
|
|||
|
|
|
|||
|
|
GradeAni = null; //开盒子的Ani
|
|||
|
|
BoxEffAni = null; //开盒子的背景Ani
|
|||
|
|
OneBoxAni = null; //单抽 盒子 Ani
|
|||
|
|
OneBoxAniEff = null; //单抽 Eff
|
|||
|
|
OneSyncPack = 0; //单抽同步状态
|
|||
|
|
TenGradeAni = [];
|
|||
|
|
TenBoxEffAni = [];
|
|||
|
|
TenBoxAniArr = []; //十连抽盒子Ani数组
|
|||
|
|
TenBoxAniEffArr = []; //十连抽 Eff 数组
|
|||
|
|
TenSyncPack = 0;
|
|||
|
|
|
|||
|
|
ItemIndexArr = []; //定义物品编号数组
|
|||
|
|
ItemNumArr = []; //定义物品数量数组
|
|||
|
|
ItenGradeArr = []; //定义物品品级数组
|
|||
|
|
ItenName = []; //定义物品名称数组
|
|||
|
|
|
|||
|
|
TenGradeAni.resize(10); //初始化
|
|||
|
|
TenBoxEffAni.resize(10); //初始化
|
|||
|
|
TenBoxAniArr.resize(10); //初始化
|
|||
|
|
TenBoxAniEffArr.resize(10); //初始化
|
|||
|
|
|
|||
|
|
ItemIndexArr.resize(10); //初始化
|
|||
|
|
ItemNumArr.resize(10); //初始化
|
|||
|
|
ItenGradeArr.resize(10); //初始化
|
|||
|
|
ItenName.resize(10); //初始化
|
|||
|
|
|
|||
|
|
|
|||
|
|
BoxStetu = 0;
|
|||
|
|
Box_Redom_Model = 0; //盒子切换模式
|
|||
|
|
Box_Open_Stetu = 0; //开盒子的状态
|
|||
|
|
}
|
|||
|
|
//获取 Model 是否开盒子状态
|
|||
|
|
function GetModel() {
|
|||
|
|
op = DragonboxJson.Get("op");
|
|||
|
|
err = DragonboxJson.Get("err");
|
|||
|
|
BoxDoselect = DragonboxJson.Get("doselect");
|
|||
|
|
}
|
|||
|
|
//初始化 还原 龙盒Model
|
|||
|
|
function Model_Init() {
|
|||
|
|
Rest = 0; //还原重置值
|
|||
|
|
box_num = DragonboxJson.Get("boxnum");
|
|||
|
|
lucky_value = DragonboxJson.Get("lucky_value");
|
|||
|
|
Box_Index = DragonboxJson.Get("itemindex");
|
|||
|
|
}
|
|||
|
|
//绘制数字
|
|||
|
|
function DrawNumberAni(obj, xPos, yPos, num, str, Interval, OneDeviation) {
|
|||
|
|
local len = (num.tostring()).len();
|
|||
|
|
for (local i = 0; i < len; i++) {
|
|||
|
|
local one = 0;
|
|||
|
|
local DrawNum = (num.tostring()).slice(i, i + 1);
|
|||
|
|
if (i != (len - 1)) one += OneDeviation * abs(i - (len - 1));
|
|||
|
|
local ani = obj.getVar().GetAnimationMap("db" + DrawNum + str, str + DrawNum + ".ani");
|
|||
|
|
sq_AnimationProc(ani);
|
|||
|
|
sq_drawCurrentFrame(ani, xPos + (i * Interval) + one, yPos, true);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//绘制幸运值
|
|||
|
|
function DrawLucky(obj, x, y, type) {
|
|||
|
|
switch (type) {
|
|||
|
|
case 0:
|
|||
|
|
local ani = obj.getVar().GetAnimationMap("DrawLucky", "common/dargonbox/animation/db_newani_bd.ani");
|
|||
|
|
sq_AnimationProc(ani);
|
|||
|
|
sq_DrawSpecificFrame(ani, x, y, false, lucky_value, false, 1.0);
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
DrawAni(obj, "common/dargonbox/animation/gauge_normal.ani", x - 33, y - 42);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
DrawNumberAni(obj, x + 54, y + 68, lucky_value, "common/dargonbox/lucky/db_bdnum_", 10, -2);
|
|||
|
|
local Offset;
|
|||
|
|
if (lucky_value < 10) Offset = 0;
|
|||
|
|
if (lucky_value >= 10 && lucky_value < 100) Offset = 10;
|
|||
|
|
if (lucky_value == 100) Offset = 20;
|
|||
|
|
DrawAni(obj, "common/dargonbox/lucky/db_bdnum_%.ani", x + 65 + Offset, y + 67);
|
|||
|
|
}
|
|||
|
|
//绘制图像
|
|||
|
|
function DrawAni(obj, aniFileName, x, y) {
|
|||
|
|
local ani = obj.getVar().GetAnimationMap("aniname" + aniFileName, aniFileName);
|
|||
|
|
sq_AnimationProc(ani);
|
|||
|
|
sq_drawCurrentFrame(ani, x, y, true);
|
|||
|
|
return ani;
|
|||
|
|
}
|
|||
|
|
//绘制盒子图像
|
|||
|
|
function DrawBoxAni(obj, aniname, aniFileName, x, y) {
|
|||
|
|
local ani = obj.getVar().GetAnimationMap(aniname, aniFileName);
|
|||
|
|
sq_AnimationProc(ani);
|
|||
|
|
sq_drawCurrentFrame(ani, x, y, true);
|
|||
|
|
return ani;
|
|||
|
|
}
|
|||
|
|
//绘制动态可选是否循环Ani
|
|||
|
|
function DatgonBoxDrawDynamicAni(obj, aniFileName, x, y, Loop) {
|
|||
|
|
local ani = DrawAni(obj, aniFileName, x, y);
|
|||
|
|
if (sq_IsEnd(ani) && Loop) {
|
|||
|
|
sq_Rewind(ani);
|
|||
|
|
}
|
|||
|
|
return ani;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//绘制打开盖子动画
|
|||
|
|
function DargonBoxOpenAni(obj, aniFileName, x, y) {
|
|||
|
|
local ani = DrawAni(obj, aniFileName, x, y);
|
|||
|
|
if (sq_GetAnimationFrameIndex(ani) == 1) {
|
|||
|
|
obj.sq_PlaySound("ANCIENTBOX_WHEEL");
|
|||
|
|
}
|
|||
|
|
if (sq_IsEnd(ani)) {
|
|||
|
|
Box_Redom_Model = 2; //盒子切换模式 变为2 可以抽奖状态
|
|||
|
|
sq_Rewind(ani);
|
|||
|
|
}
|
|||
|
|
return ani;
|
|||
|
|
}
|
|||
|
|
//绘制关闭盖子动画
|
|||
|
|
function DargonBoxCloseAni(obj, aniFileName, x, y) {
|
|||
|
|
local ani = DrawAni(obj, aniFileName, x, y);
|
|||
|
|
|
|||
|
|
if (sq_IsEnd(ani)) {
|
|||
|
|
Box_Redom_Model = 1; //关闭盖子以后吧 模式切换为1 播放打开盖子
|
|||
|
|
sq_Rewind(ani);
|
|||
|
|
}
|
|||
|
|
return ani;
|
|||
|
|
}
|
|||
|
|
//设置龙盒 切换模式
|
|||
|
|
function SelectRedomModel() {
|
|||
|
|
if (Box_Redom_Model == 0)
|
|||
|
|
Box_Redom_Model = 1;
|
|||
|
|
else if (Box_Redom_Model == 2)
|
|||
|
|
Box_Redom_Model = 3;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//判断 并还原单抽Ani
|
|||
|
|
function RewindOpenDargonBox(obj) {
|
|||
|
|
if (OneBoxAni == null || OneBoxAniEff == null) return true;
|
|||
|
|
//如果 Ani播放完了可以重置 或者是 都没有播放也可以重置
|
|||
|
|
if ((sq_IsEnd(OneBoxAni) && sq_IsEnd(OneBoxAniEff))) {
|
|||
|
|
sq_Rewind(OneBoxAni);
|
|||
|
|
OneBoxSound = 0; //还原音效判断
|
|||
|
|
sq_Rewind(OneBoxAniEff);
|
|||
|
|
OneBoxEffSound = 0;
|
|||
|
|
}
|
|||
|
|
if ((sq_GetAnimationFrameIndex(OneBoxAni) == -1 && sq_GetAnimationFrameIndex(OneBoxAniEff) == -1)) {
|
|||
|
|
OneSyncPack = 0;
|
|||
|
|
return true;
|
|||
|
|
} else return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//判断 并还原十连抽Ani
|
|||
|
|
function RewindTenOpenDargonBox(obj) {
|
|||
|
|
local num = 0;
|
|||
|
|
for (local i = 0; i < 10; ++i) {
|
|||
|
|
if (TenBoxAniArr[i] == null || TenBoxAniEffArr[i] == null) return true;
|
|||
|
|
//如果 Ani播放完了可以重置 或者是 都没有播放也可以重置
|
|||
|
|
if ((sq_IsEnd(TenBoxAniArr[i]) && sq_IsEnd(TenBoxAniArr[i]))) {
|
|||
|
|
num++;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (num != 10) return false;
|
|||
|
|
|
|||
|
|
for (local i = 0; i < 10; ++i) {
|
|||
|
|
sq_Rewind(TenBoxAniArr[i]);
|
|||
|
|
TenBoxSound[i] = 0;
|
|||
|
|
sq_Rewind(TenBoxAniEffArr[i]);
|
|||
|
|
TenBoxEffSound[i] = 0;
|
|||
|
|
}
|
|||
|
|
TenSyncPack = 0;
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//绘制 单抽 动画 和奖励
|
|||
|
|
function OneOpenDargonBox(obj, X_Pos, Y_Pos) {
|
|||
|
|
GetModel();
|
|||
|
|
if (op != 4 || BoxDoselect != 1) return; //不是单抽就返回
|
|||
|
|
local ItemIndex = DragonboxJson.Get("result->0->item");
|
|||
|
|
local ItemNum = DragonboxJson.Get("result->0->num");
|
|||
|
|
local ItemGrade = DragonboxJson.Get("result->0->grade");
|
|||
|
|
local ItemName = DragonboxJson.Get("result->0->itemname");
|
|||
|
|
lucky_value = DragonboxJson.Get("lucky_value");
|
|||
|
|
box_num = DragonboxJson.Get("boxnum");
|
|||
|
|
switch (OneSyncPack) {
|
|||
|
|
case 0:
|
|||
|
|
OneSyncPack = 1;
|
|||
|
|
return; //返回 下一次进来继续判断 是否已经同步了最新的包
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
switch (ItemGrade) //判断品级给随机渲染动画
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
GradeAni = "box_b";
|
|||
|
|
BoxEffAni = "b";
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
GradeAni = "box_a";
|
|||
|
|
BoxEffAni = "a";
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
switch (sq_getRandom(0, 2)) {
|
|||
|
|
case 0:
|
|||
|
|
GradeAni = "box_b_s";
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
GradeAni = "box_a_s";
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
GradeAni = "box_s";
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
BoxEffAni = "s";
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
switch (sq_getRandom(0, 3)) {
|
|||
|
|
case 0:
|
|||
|
|
GradeAni = "box_b_ss";
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
GradeAni = "box_a_ss";
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
GradeAni = "box_s_ss";
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
GradeAni = "box_ss";
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
BoxEffAni = "ss";
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
OneSyncPack = 2; //设定一次渲染值以后就写到2号同步状态 即只绘制 不在 设定
|
|||
|
|
break;
|
|||
|
|
case 2: //可以开始绘制
|
|||
|
|
X_Pos += 222; //增加盒子和特效的偏移
|
|||
|
|
Y_Pos += 42;
|
|||
|
|
OneBoxAni = DrawBoxAni(obj, "OneBoxAni" + GradeAni, "common/dargonbox/animation/" + GradeAni + ".ani", X_Pos + 14, Y_Pos + 35); //盒子Ani
|
|||
|
|
if (sq_GetAnimationFrameIndex(OneBoxAni) == 1 && OneBoxSound == 0) {
|
|||
|
|
local str = GradeAni;
|
|||
|
|
local len = str.len();
|
|||
|
|
str = str.slice(4, len);
|
|||
|
|
str = "ANCIENTBOX_OPEN_" + str;
|
|||
|
|
obj.sq_PlaySound(str);
|
|||
|
|
OneBoxSound = 1;
|
|||
|
|
}
|
|||
|
|
local Item_Offset_X = 56; //增加物品特效的偏移
|
|||
|
|
local Item_Offset_Y = 123;
|
|||
|
|
if (sq_GetCurrentTime(OneBoxAni) > (OneBoxAni.getDelaySum(false) * 0.9).tointeger()) //盒子动画在超过百分之90的时候绘制物品特效
|
|||
|
|
{
|
|||
|
|
DatgonBoxDrawDynamicAni(obj, "common/dargonbox/animation/item_" + BoxEffAni + "_loop.ani", X_Pos + 14 + Item_Offset_X, Y_Pos + 35 + Item_Offset_Y, true); //LoopEffAni
|
|||
|
|
//DrawBoxAni(obj, "Item" + ItemIndex, "common/dargonbox/item/db_item_" + ItemIndex + ".ani", X_Pos + 25 + Item_Offset_X, Y_Pos + 47 + Item_Offset_Y); //物品Ani
|
|||
|
|
//DrawNumberAni(obj, X_Pos + 30 + Item_Offset_X, Y_Pos + 67 + Item_Offset_Y, ItemNum, "common/dargonbox/num/db_num_", 6, 0); //物品数量
|
|||
|
|
|
|||
|
|
L_Sq_DrawItem(X_Pos + 28 + Item_Offset_X, Y_Pos + 47 + Item_Offset_Y + 3, ItemIndex, ItemNum, 0, 0, 0);
|
|||
|
|
local CodeColor;
|
|||
|
|
switch (ItemGrade) {
|
|||
|
|
case 0:
|
|||
|
|
CodeColor = 0xFFEDD568;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
CodeColor = 0xFFFF6BB3;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
CodeColor = 0xFFF000FF;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
CodeColor = 0xFF00B1FF;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
L_sq_DrawCode(ItemName, X_Pos + 28 + Item_Offset_X + 71, Y_Pos + 47 + Item_Offset_Y + 11, CodeColor, 0, 1);
|
|||
|
|
OneBoxAniEff = DrawBoxAni(obj, "OneBoxAniEff" + BoxEffAni, "common/dargonbox/animation/item_" + BoxEffAni + "_start.ani", X_Pos + 14 + Item_Offset_X, Y_Pos + 35 + Item_Offset_Y); //EffAni
|
|||
|
|
if (sq_GetAnimationFrameIndex(OneBoxAniEff) == 1 && OneBoxEffSound == 0) {
|
|||
|
|
local str = GradeAni;
|
|||
|
|
local len = str.len();
|
|||
|
|
str = str.slice(4, len);
|
|||
|
|
str = "ANCIENTBOX_RESULT_" + str;
|
|||
|
|
obj.sq_PlaySound(str);
|
|||
|
|
OneBoxEffSound = 1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//绘制 十连抽 动画 和奖励
|
|||
|
|
function TenOpenDargonBox(obj, X_Pos, Y_Pos) {
|
|||
|
|
GetModel();
|
|||
|
|
if (op != 4 || BoxDoselect != 10) return; //不是十连抽就返回
|
|||
|
|
switch (TenSyncPack) {
|
|||
|
|
case 0:
|
|||
|
|
TenSyncPack = 1;
|
|||
|
|
lucky_value = DragonboxJson.Get("lucky_value");
|
|||
|
|
box_num = DragonboxJson.Get("boxnum");
|
|||
|
|
return; //返回 下一次进来继续判断 是否已经同步了最新的包
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
for (local i = 0; i < 10; ++i) {
|
|||
|
|
ItemIndexArr[i] = DragonboxJson.Get("result->" + i + "->item");
|
|||
|
|
ItemNumArr[i] = DragonboxJson.Get("result->" + i + "->num");
|
|||
|
|
ItenGradeArr[i] = DragonboxJson.Get("result->" + i + "->grade");
|
|||
|
|
ItenName[i] = DragonboxJson.Get("result->" + i + "->itemname");
|
|||
|
|
switch (ItenGradeArr[i]) {
|
|||
|
|
case 0:
|
|||
|
|
TenGradeAni[i] = "box_b";
|
|||
|
|
TenBoxEffAni[i] = "b";
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
TenGradeAni[i] = "box_a";
|
|||
|
|
TenBoxEffAni[i] = "a";
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
switch (sq_getRandom(0, 2)) {
|
|||
|
|
case 0:
|
|||
|
|
TenGradeAni[i] = "box_b_s";
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
TenGradeAni[i] = "box_a_s";
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
TenGradeAni[i] = "box_s";
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
TenBoxEffAni[i] = "s";
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
switch (sq_getRandom(0, 3)) {
|
|||
|
|
case 0:
|
|||
|
|
TenGradeAni[i] = "box_b_ss";
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
TenGradeAni[i] = "box_a_ss";
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
TenGradeAni[i] = "box_s_ss";
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
TenGradeAni[i] = "box_ss";
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
TenBoxEffAni[i] = "ss";
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
TenSyncPack = 2; //设定一次渲染值以后就写到2号同步状态 即只绘制 不在 设定
|
|||
|
|
break;
|
|||
|
|
case 2: //可以开始绘制
|
|||
|
|
//X_Pos += 222; //增加盒子和特效的偏移
|
|||
|
|
//Y_Pos += 42;
|
|||
|
|
local Item_Offset_X = 10; //增加物品特效的偏移
|
|||
|
|
local Item_Offset_Y = 110;
|
|||
|
|
for (local i = 0; i < 10; ++i) {
|
|||
|
|
TenBoxAniArr[i] = DrawBoxAni(obj, "TenBoxAni" + TenGradeAni[i], "common/dargonbox/animation/mini_" + TenGradeAni[i] + ".ani", X_Pos - 12 + (150 * (i % 5)), Y_Pos + 70 + (128 * (i / 5))); //盒子Ani
|
|||
|
|
if (sq_GetAnimationFrameIndex(TenBoxAniArr[i]) == 1 && TenBoxSound[i] == 0) {
|
|||
|
|
local str = TenGradeAni[i];
|
|||
|
|
local len = str.len();
|
|||
|
|
str = str.slice(4, len);
|
|||
|
|
str = "ANCIENTBOX_OPEN_" + str;
|
|||
|
|
obj.sq_PlaySound(str);
|
|||
|
|
TenBoxSound[i] = 1;
|
|||
|
|
}
|
|||
|
|
if (sq_GetCurrentTime(TenBoxAniArr[i]) > (TenBoxAniArr[i].getDelaySum(false) * 0.9).tointeger()) //盒子动画在超过百分之90的时候绘制物品特效
|
|||
|
|
{
|
|||
|
|
DatgonBoxDrawDynamicAni(obj, "common/dargonbox/animation/item_mini_" + TenBoxEffAni[i] + "_loop.ani", X_Pos + 14 + Item_Offset_X + (150 * (i % 5)), Y_Pos + 35 + Item_Offset_Y + (128 * (i / 5)), true); //LoopEffAni
|
|||
|
|
//DrawBoxAni(obj, "Ten" + "Item" + ItemIndexArr[i], "common/dargonbox/item/db_item_" + ItemIndexArr[i] + ".ani", X_Pos + 14 + Item_Offset_X + (150 * (i % 5)), Y_Pos + 35 + Item_Offset_Y + (128 * (i / 5))); //物品Ani
|
|||
|
|
//DrawNumberAni(obj, X_Pos + 19 + Item_Offset_X + (150 * (i % 5)), Y_Pos + 55 + Item_Offset_Y + (128 * (i / 5)), ItemNumArr[i], "common/dargonbox/num/db_num_", 6, 0); //物品数量
|
|||
|
|
L_Sq_DrawItem(X_Pos + 17 + Item_Offset_X + (150 * (i % 5)), Y_Pos + 38 + Item_Offset_Y + (128 * (i / 5)), ItemIndexArr[i], ItemNumArr[i], 0, 0, 0);
|
|||
|
|
local CodeColor;
|
|||
|
|
switch (ItenGradeArr[i]) {
|
|||
|
|
case 0:
|
|||
|
|
CodeColor = 0xFFEDD568;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
CodeColor = 0xFFFF6BB3;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
CodeColor = 0xFFF000FF;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
CodeColor = 0xFF00B1FF;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
L_sq_DrawCode(ItenName[i], X_Pos + 17 + Item_Offset_X + (150 * (i % 5)) + 41, 9 + Y_Pos + 38 + Item_Offset_Y + (128 * (i / 5)), CodeColor, 0, 1);
|
|||
|
|
TenBoxAniEffArr[i] = DrawBoxAni(obj, "TenBoxAniEff" + TenBoxEffAni[i], "common/dargonbox/animation/item_mini_" + TenBoxEffAni[i] + "_start.ani", X_Pos + 39 + Item_Offset_X + (150 * (i % 5)), Y_Pos + 40 + Item_Offset_Y + (128 * (i / 5))); //EffAni
|
|||
|
|
if (sq_GetAnimationFrameIndex(TenBoxAniEffArr[i]) == 1 && TenBoxEffSound[i] == 0) {
|
|||
|
|
local str = TenGradeAni[i];
|
|||
|
|
local len = str.len();
|
|||
|
|
str = str.slice(4, len);
|
|||
|
|
str = "ANCIENTBOX_RESULT_" + str;
|
|||
|
|
obj.sq_PlaySound(str);
|
|||
|
|
TenBoxEffSound[i] = 1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//运行函数
|
|||
|
|
function Run(obj) {
|
|||
|
|
local C_Main_X_Pos = 0; //龙盒 基准 X 坐标
|
|||
|
|
local C_Main_Y_Pos = 0; //龙盒 基准 Y 坐标
|
|||
|
|
|
|||
|
|
//未打开龙盒状态
|
|||
|
|
if (!sq_GetPopupWindowMainCotrol(267)) { //窗口关闭
|
|||
|
|
if (Rest == 0) //关闭后重置一次
|
|||
|
|
{
|
|||
|
|
reset(); { //恢复小地图
|
|||
|
|
local mapbox = sq_GetPopupWindowMainCotrol(176);
|
|||
|
|
if (mapbox) {
|
|||
|
|
mapbox.SetEnable(true);
|
|||
|
|
mapbox.SetVisible(true);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
State = 0; //龙盒状态写入关闭窗口状态
|
|||
|
|
Rest = 1;
|
|||
|
|
}
|
|||
|
|
//龙盒收包状态处理
|
|||
|
|
op = DragonboxJson.Get("op"); //得到op
|
|||
|
|
if (op == 2 && State == 0) {
|
|||
|
|
L_NewWindows("Lenheart", 267, 0x65535); //打开龙盒窗口
|
|||
|
|
State = 1;
|
|||
|
|
Model_Init(); //初始化龙盒幸运值 盒子数量 还原标志状态
|
|||
|
|
DragonboxJson.Delete(); //销毁当前Json包
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//龙盒打开状态
|
|||
|
|
else if (sq_GetPopupWindowMainCotrol(267) && State == 1) {
|
|||
|
|
{ //关闭小地图
|
|||
|
|
if (sq_IsPopupWindowOpened(176)) {
|
|||
|
|
local mapbox = sq_GetPopupWindowMainCotrol(176);
|
|||
|
|
mapbox.SetEnable(false);
|
|||
|
|
mapbox.SetVisible(false);
|
|||
|
|
}
|
|||
|
|
} { //绘制主窗口
|
|||
|
|
//判断幸运值 来绘制主窗口
|
|||
|
|
if (lucky_value < 100)
|
|||
|
|
DatgonBoxDrawDynamicAni(obj, "common/dargonbox/animation/db_newani_text1.ani", C_Main_X_Pos + 9, C_Main_Y_Pos + 9, true); //Main底
|
|||
|
|
if (lucky_value == 100)
|
|||
|
|
DatgonBoxDrawDynamicAni(obj, "common/dargonbox/animation/db_newani_text2.ani", C_Main_X_Pos + 9, C_Main_Y_Pos + 9, true); //Main底
|
|||
|
|
|
|||
|
|
DatgonBoxDrawDynamicAni(obj, "common/dargonbox/animation/db_newani_item.ani", C_Main_X_Pos + 386, C_Main_Y_Pos + 404, true); //Main底
|
|||
|
|
|
|||
|
|
if (lucky_value < 100) DrawLucky(obj, C_Main_X_Pos + 359, C_Main_Y_Pos + 377, 0); //幸运值
|
|||
|
|
else DrawLucky(obj, C_Main_X_Pos + 359, C_Main_Y_Pos + 377, 1);
|
|||
|
|
|
|||
|
|
DrawNumberAni(obj, C_Main_X_Pos + 388, C_Main_Y_Pos + 422, box_num, "common/dargonbox/num/db_num_", 6, 0); //盒子数量
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
{ //抽奖模式
|
|||
|
|
//单抽按钮
|
|||
|
|
local OneButton = DargonBoxButton(obj, "OneButton", IMouse, C_Main_X_Pos + 217, C_Main_Y_Pos + 436, 14, 15, "common/dargonbox/animation/db_newani_sel");
|
|||
|
|
OneButton.drawButtonImage();
|
|||
|
|
if (OneButton.isActive()) //单抽按钮按下
|
|||
|
|
{
|
|||
|
|
local OpenStatu = RewindOpenDargonBox(obj); //还原抽奖Ani状态 返回值 是否已经播放完并且重置了
|
|||
|
|
if (!OpenStatu) return; //如果未重置 则不允许切换模式
|
|||
|
|
|
|||
|
|
if (Box_Redom_Model != 2 && Box_Redom_Model != 0) return; //如果不在 未打开盖子 或者 可抽奖状态 直接返回
|
|||
|
|
BoxStetu = 0; //Box抽奖模式 单抽
|
|||
|
|
SelectRedomModel(); //播放切换模式状态
|
|||
|
|
Box_Open_Stetu = 0; //盒子打开的状态写回0 即未打开
|
|||
|
|
}
|
|||
|
|
//十连抽按钮
|
|||
|
|
local TenButton = DargonBoxButton(obj, "TenButton", IMouse, C_Main_X_Pos + 217 + 263, C_Main_Y_Pos + 436, 14, 15, "common/dargonbox/animation/db_newani_sel");
|
|||
|
|
TenButton.drawButtonImage();
|
|||
|
|
if (TenButton.isActive()) //十连抽按钮按下
|
|||
|
|
{
|
|||
|
|
local OpenStatu = RewindOpenDargonBox(obj); //还原抽奖Ani状态 返回值 是否已经播放完并且重置了
|
|||
|
|
if (!OpenStatu) return; //如果未重置 则不允许切换模式
|
|||
|
|
|
|||
|
|
if (Box_Redom_Model != 2 && Box_Redom_Model != 0) return; //如果不在 未打开盖子 或者 可抽奖状态 直接返回
|
|||
|
|
BoxStetu = 1; //Box抽奖模式 十连抽
|
|||
|
|
SelectRedomModel(); //播放切换模式状态
|
|||
|
|
Box_Open_Stetu = 0; //盒子打开的状态写回0 即未打开
|
|||
|
|
}
|
|||
|
|
//绘制选择好了的圆点
|
|||
|
|
local Box_Statu_Button_Offset = 0;
|
|||
|
|
if (BoxStetu != 0) Box_Statu_Button_Offset = 263;
|
|||
|
|
DatgonBoxDrawDynamicAni(obj, "common/dargonbox/animation/db_newani_sel_3.ani", C_Main_X_Pos + 217 + Box_Statu_Button_Offset, C_Main_Y_Pos + 436, true);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//切换选择模式盖子状态
|
|||
|
|
switch (Box_Redom_Model) {
|
|||
|
|
case 0: //初始进来盖着盖子的状态
|
|||
|
|
if (Box_Index == 2022110703) {
|
|||
|
|
DatgonBoxDrawDynamicAni(obj, "common/dargonbox/animation/009.ani", C_Main_X_Pos + 14, 35, true); //Main盖
|
|||
|
|
L_Sq_DrawItem(215, 144, 2021033111, 1, 0, 0, 0);
|
|||
|
|
L_sq_DrawCode("巅峰的主宰", 185, 184, 0xFFF000FF, 0, 1);
|
|||
|
|
L_sq_DrawCode("稀有光环", 205, 200, 0xFFF000FF, 0, 1);
|
|||
|
|
L_Sq_DrawItem(386, 144, 400990654, 1, 0, 0, 0);
|
|||
|
|
L_sq_DrawCode("特殊宠物", 185 + 198, 184, 0xFFF000FF, 0, 1);
|
|||
|
|
L_sq_DrawCode("<超越时空宠物>", 185 + 176, 200, 0xFFF000FF, 0, 1);
|
|||
|
|
L_Sq_DrawItem(557, 144, 2019188, 1, 0, 0, 0);
|
|||
|
|
L_sq_DrawCode("云中剑风", 185 + 364, 184, 0xFFF000FF, 0, 1);
|
|||
|
|
L_sq_DrawCode("<一期专属称号>", 185 + 344, 200, 0xFFF000FF, 0, 1);
|
|||
|
|
} else if (Box_Index == 2022110702) {
|
|||
|
|
DatgonBoxDrawDynamicAni(obj, "common/dargonbox/animation/009.ani", C_Main_X_Pos + 14, 35, true); //Main盖
|
|||
|
|
L_Sq_DrawItem(215, 144, 8386, 1, 0, 0, 0);
|
|||
|
|
L_sq_DrawCode("全职业稀有克隆", 185, 184, 0xFFF000FF, 0, 1);
|
|||
|
|
L_sq_DrawCode("装扮礼盒", 205, 200, 0xFFF000FF, 0, 1);
|
|||
|
|
L_Sq_DrawItem(386, 144, 400990653, 1, 0, 0, 0);
|
|||
|
|
L_sq_DrawCode("特殊宠物", 185 + 198, 184, 0xFFF000FF, 0, 1);
|
|||
|
|
L_sq_DrawCode("<时空系列宠物>", 185 + 176, 200, 0xFFF000FF, 0, 1);
|
|||
|
|
L_Sq_DrawItem(557, 144, 500000016, 1, 0, 0, 0);
|
|||
|
|
L_sq_DrawCode("镜花水月", 185 + 364, 184, 0xFFF000FF, 0, 1);
|
|||
|
|
L_sq_DrawCode("<一期冷却光环>", 185 + 344, 200, 0xFFF000FF, 0, 1);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case 1: //单次拉开盖子的状态
|
|||
|
|
DargonBoxOpenAni(obj, "common/dargonbox/animation/intro.ani", C_Main_X_Pos + 14, 35); //Main盖
|
|||
|
|
break;
|
|||
|
|
case 2: //可以抽奖的状态
|
|||
|
|
switch (Box_Open_Stetu) //盒子打开的状态
|
|||
|
|
{
|
|||
|
|
case 0: //无状态
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
OneOpenDargonBox(obj, C_Main_X_Pos, C_Main_Y_Pos); //进行抽奖中
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
TenOpenDargonBox(obj, C_Main_X_Pos, C_Main_Y_Pos); //进行抽奖中
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case 3: //先关闭在拉开盖子的状态
|
|||
|
|
DargonBoxCloseAni(obj, "common/dargonbox/animation/outro.ani", C_Main_X_Pos + 14, 35); //Main盖
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
{ //抽奖按钮
|
|||
|
|
local RedomButton = ButtonPro(obj, "RedomButton", C_Main_X_Pos + 342, C_Main_Y_Pos + 510, "common/dargonbox/animation/button.ani", 120, 20);
|
|||
|
|
RedomButton.SetRectEnble(true, "RedomButtonr", C_Main_X_Pos + 342, C_Main_Y_Pos + 510, "common/dargonbox/animation/button.ani", 1); //设置悬停效果
|
|||
|
|
RedomButton.SetCustomClickEnble(true, "RedomButtonr", C_Main_X_Pos + 342, C_Main_Y_Pos + 510 + 1, "common/dargonbox/animation/button.ani", 1); //设置点击效果
|
|||
|
|
RedomButton.Show();
|
|||
|
|
if (RedomButton.isLBActive()) //按下抽奖按钮
|
|||
|
|
{
|
|||
|
|
switch (Box_Redom_Model) {
|
|||
|
|
case 0: //如果盖子没打开 就打开盖子
|
|||
|
|
SelectRedomModel();
|
|||
|
|
break;
|
|||
|
|
case 2: //可抽奖的状态
|
|||
|
|
switch (BoxStetu) {
|
|||
|
|
case 0:
|
|||
|
|
local OpenStatu = RewindOpenDargonBox(obj); //还原Ani状态 返回值 是否已经播放完并且重置了
|
|||
|
|
if (OpenStatu == false) break;
|
|||
|
|
DragonboxJson.Delete();
|
|||
|
|
local One = Json_STL("DraboxOneS");
|
|||
|
|
One.Put("op", 3);
|
|||
|
|
One.Put("itemindex", Box_Index);
|
|||
|
|
One.Put("doselect", 1);
|
|||
|
|
local str = One.GetString();
|
|||
|
|
L_sq_SendPackType(130);
|
|||
|
|
L_sq_SendPackWChar(str);
|
|||
|
|
L_sq_SendPack();
|
|||
|
|
One.Delete();
|
|||
|
|
|
|||
|
|
Box_Open_Stetu = 1; //开启单抽渲染
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
local OpenStatu = RewindTenOpenDargonBox(obj); //还原Ani状态 返回值 是否已经播放完并且重置了
|
|||
|
|
if (OpenStatu == false) break;
|
|||
|
|
DragonboxJson.Delete();
|
|||
|
|
local Ten = Json_STL("DraboxTenS");
|
|||
|
|
Ten.Put("op", 3);
|
|||
|
|
Ten.Put("itemindex", Box_Index);
|
|||
|
|
Ten.Put("doselect", 10);
|
|||
|
|
local str = Ten.GetString();
|
|||
|
|
L_sq_SendPackType(130);
|
|||
|
|
L_sq_SendPackWChar(str);
|
|||
|
|
L_sq_SendPack();
|
|||
|
|
Ten.Delete();
|
|||
|
|
|
|||
|
|
Box_Open_Stetu = 2; //开启十连抽渲染
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
default: //在其他动画中直接返回
|
|||
|
|
return;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//初始化龙盒对象
|
|||
|
|
function DargonBox(obj) {
|
|||
|
|
if (DB == null) DB = DarBox("Init");
|
|||
|
|
DB.Run(obj);
|
|||
|
|
}
|