using RichCreator.Utility;
using RichCreator.Utility.Captures;
using RichCreator.Utility.CV;
using RichCreator.Utility.InputControl;
using RichCreator.Utility.Structs;
using RichCreator.Utility.Utilitys;
using Emgu.CV;
using Emgu.CV.Structure;
using RichCreator.Jobs;
using RichCreator.Jobs.StateMachines;
using System;
using System.Collections.Generic;
using System.Threading;
using static RichCreator.Utility.CV.GroupCVHelper;
using RichCreator.StateMachines;
using RichCreator.Utility.Maps;
using RichCreator.Dnf;
namespace RichCreator.Maps.Test
{
///
/// 测试地图
///
public class TestMap : MapInfo
{
public TestMap(ZTRectangle gameRect, CancellationToken cancelToken) :base(MapType.Test, gameRect, cancelToken)
{
}
private const bool isCreateGroup = true;
public override ZTResult Start(Int32 runningStep)
{WindowUtils.SetDnfToTop();
string groupName = "aabbccddee";
if (isCreateGroup)
{
//创建队伍
if (!CreateGroup(groupName))
{
G.Instance.InfoWriter("创建队伍失败");
return ZTResult.Failed;
}
}
else
{
//加入队伍
if (!JoinGroup(groupName))
{
G.Instance.InfoWriter("加入队伍失败");
return ZTResult.Failed;
}
}
//沉默一段时间
Thread.Sleep(50000000);
CloseAllAlertWindow(this.CancelToken, this.GameRect);
return ZTResult.Success;
}
///
/// 创建队伍
///
///
private bool CreateGroup(string groupName)
{
ZTRectangle mygroupButtonRect = ZTRectangle.Empty;
//打开队伍信息窗口
ZTRectangle groupWindowTextRect = ZTRectangle.Empty;
ZTRectangle searchButtonRect = ZTRectangle.Empty;
ZTRectangle createGroupButtonRect = ZTRectangle.Empty;
bool hasGroup = false;
if (!OpenGroupWindow(out groupWindowTextRect,out searchButtonRect,out createGroupButtonRect,out hasGroup))
{
G.Instance.InfoWriter("打开组队信息窗口失败");
return false;
}
if (hasGroup)
{
return true;
}
//打开创建队伍窗口
ZTRectangle createGroupWindowTextRect = ZTRectangle.Empty, okButtonRect = ZTRectangle.Empty;
if (!OpenCreateGroupWindow(out createGroupWindowTextRect,out okButtonRect ,createGroupButtonRect))
{
return false;
}
Utility.Structs.ZTPoint windowCenter = createGroupWindowTextRect.GetCenterPoint();
G.Instance.InputControl.MoveToAndClick(new Utility.Structs.ZTPoint(windowCenter.X + 50, windowCenter.Y + 80));
//清空文字
for (int i = 0; i < 15; i++)
{
G.Instance.InputControl.PressKey(false, false, false, false, false, false, false, false, HIDCode.Backspace);
}
//输入队伍名
G.Instance.InputControl.InputString(groupName);
//点击创建
G.Instance.InputControl.MoveToAndClick(okButtonRect.GetCenterPoint());
bool result = FuncUtils.TimeoutCancelableWrap(5000, this.CancelToken, () => {
//识别是否有我的队伍按钮
return GroupCVHelper.ExistsMyGroupButton(out mygroupButtonRect, this.GameRect);
});
if (result)
{
G.Instance.InfoWriter("create group ok");
//点击组队“确定”按钮
result = FuncUtils.TimeoutCancelableWrap(15 * 60 * 1000,this.CancelToken, () => {
Utility.Structs.ZTPoint yes = Utility.Structs.ZTPoint.Empty;
Utility.Structs.ZTPoint no = Utility.Structs.ZTPoint.Empty;
bool retFind = GroupCVHelper.FindYaoqingZuduiWindow(out yes, out no, this.GameRect);
if (retFind)
{
G.Instance.InputControl.MoveToAndClick(yes);
G.Instance.InfoWriter("other join group ok:"+ yes);
}
return retFind;
});
return result;
}
return false;
}
///
/// 加入队伍
///
///
private bool JoinGroup(string groupName)
{
ZTRectangle mygroupButtonRect = ZTRectangle.Empty;
//打开队伍信息窗口
ZTRectangle groupWindowTextRect = ZTRectangle.Empty;
ZTRectangle searchButtonRect = ZTRectangle.Empty;
ZTRectangle createGroupButtonRect = ZTRectangle.Empty;
bool hasGroup = false;
if (!OpenGroupWindow(out groupWindowTextRect,out searchButtonRect, out createGroupButtonRect, out hasGroup))
{
G.Instance.InfoWriter("打开组队信息窗口失败");
return false;
}
if (hasGroup)
{
return true;
}
ZTPoint searchButtonCenerPoint = searchButtonRect.GetCenterPoint();
//输入组名
G.Instance.InputControl.MoveToAndClick(new Utility.Structs.ZTPoint (searchButtonCenerPoint.X-80, searchButtonCenerPoint.Y));
DeleteAllChar(groupName.Length + 3);
G.Instance.InputControl.InputString(groupName);
//点搜索
G.Instance.InputControl.MoveToAndClick(searchButtonCenerPoint);
//查找组项
ZTRectangle groupItemRect = ZTRectangle.Empty;
bool result = FuncUtils.TimeoutCancelableWrap(5000, this.CancelToken, () => {
//识别组项
return GroupCVHelper.FindGroupItem(out groupItemRect, this.GameRect);
});
if (!result)
{
G.Instance.InfoWriter("group item not finded");
return true;
}
//点组名打开窗口
G.Instance.InputControl.MoveToAndClick(groupItemRect.GetCenterPoint());
//查找是否打开成员列表窗
ZTRectangle joinButtonRect = ZTRectangle.Empty;
result = FuncUtils.TimeoutCancelableWrap(5000, this.CancelToken, () => {
//识别是否打开成员列表窗
return GroupCVHelper.FindGroupMemberWindow(out joinButtonRect, this.GameRect);
});
if (!result)
{
G.Instance.InfoWriter("group member window not finded");
return true;
}
//点击加入队伍
G.Instance.InputControl.MoveToAndClick(joinButtonRect.GetCenterPoint());
//查找是否已经组队成功,30秒
result = FuncUtils.TimeoutCancelableWrap(30000, this.CancelToken, () => {
//识别是否有我的队伍按钮
return GroupCVHelper.ExistsMyGroupButton(out mygroupButtonRect, this.GameRect);
});
if (result)
{
G.Instance.InfoWriter("group ok");
return true;
}
return false;
}
///
/// 打开组队窗
///
///
///
///
///
///
private bool OpenGroupWindow(out ZTRectangle groupWindowTextRect,out ZTRectangle searchButtonRect, out ZTRectangle createGroupButton,out bool hasGroup)
{
hasGroup = false;
createGroupButton = ZTRectangle.Empty;
groupWindowTextRect = ZTRectangle.Empty;
searchButtonRect = ZTRectangle.Empty;
bool innerHasGroup = false;
ZTRectangle innerGroupWindowTextRect = ZTRectangle.Empty, innerSearchButtonRect = ZTRectangle.Empty, innerCreateGroupButton = ZTRectangle.Empty;
for (int i = 0; i < 2; i++)
{
CloseAllAlertWindow(this.CancelToken, this.GameRect);
G.Instance.InputControl.PressKey(RandomUtils.KeyPressDuration, HIDCode.RightSquarebrackets);
bool result = FuncUtils.TimeoutCancelableWrap(5000, this.CancelToken, () => {
//识别队伍窗
return GroupCVHelper.FindGroupWindow(out innerGroupWindowTextRect, out innerSearchButtonRect, out innerCreateGroupButton,out innerHasGroup, this.GameRect);
});
if (result)
{
groupWindowTextRect = innerGroupWindowTextRect;
searchButtonRect = innerSearchButtonRect;
createGroupButton = innerCreateGroupButton;
hasGroup = innerHasGroup;
return true;
}
}
G.Instance.InfoWriter("打开队伍信息对话框失败");
return false;
}
///
/// 删除左右指定数量的字符
///
///
private void DeleteAllChar(int count)
{
for (int i = 0; i < count; i++)
{
G.Instance.InputControl.PressKey(false, false, false, false, false, false, false, false, HIDCode.Delete);
G.Instance.InputControl.PressKey(false, false, false, false, false, false, false, false, HIDCode.Backspace);
}
}
///
/// 打开创建队伍窗口
///
///
///
private bool OpenCreateGroupWindow(out ZTRectangle createGroupWindowTextRect,out ZTRectangle okButtonRect,ZTRectangle createGroupButtonRect)
{
createGroupWindowTextRect = ZTRectangle.Empty;
okButtonRect = ZTRectangle.Empty;
ZTRectangle innerCreateGroupWindowTextRect = ZTRectangle.Empty, innerOkButtonRect = ZTRectangle.Empty;
for (int i = 0; i < 2; i++)
{
//点击创建队伍
G.Instance.InputControl.MoveToAndClick(createGroupButtonRect.GetCenterPoint());
bool result = FuncUtils.TimeoutCancelableWrap(5000, this.CancelToken, () => {
//识别创建队伍窗
return GroupCVHelper.FindCreateGroupWindow(out innerCreateGroupWindowTextRect, out innerOkButtonRect, this.GameRect);
});
if (result)
{
createGroupWindowTextRect = innerCreateGroupWindowTextRect;
okButtonRect = innerOkButtonRect;
return true;
}
}
G.Instance.InfoWriter("打开创建队伍信息对话框失败");
return false;
}
///
/// 关闭所有弹出窗
///
///
///
///
private void CloseAllAlertWindow(CancellationToken cancelToken, ZTRectangle gameRect)
{
while (!cancelToken.IsCancellationRequested)
{
//G.Instance.InputControl.MoveTo(gameRect.Start.X,gameRect.Start.Y, false, false, false);
//Thread.Sleep(10);
//截图
Image image = ScreenCapture.Instance.CaptureScreenReturnImage();
ZTRectangle closeButtonRect = ZTRectangle.Empty;
if (!DnfCVHelper.GetAlertWindow(out closeButtonRect, image, gameRect))
{
return;
}
G.Instance.InputControl.MoveToAndClick(closeButtonRect.GetCenterPoint());
Thread.Sleep(500);
}
}
}
}