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); | |||
|  | } |