forked from aparoski/WhiteoutSurvivalBot
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMaster_Scheduler.py
More file actions
238 lines (141 loc) · 5.78 KB
/
Master_Scheduler.py
File metadata and controls
238 lines (141 loc) · 5.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
import pandas as pd
import numpy as np
import time
import Window_Finder
import Reader
import Image_Rec
import Data
import Map_Interact
#temp for testing
import pyautogui as p
import Helper_Funcs as HF
#Initialize Blue Stacks Windows.
Tootie = "BlueStacks App Player"
Tootin = "BlueStacks App Player 1"
Tootily = "BlueStacks App Player 3"
Leg = "BlueStacks App Player 4"
schedule = Data.Window_Dataframe()
polar_rally = "Polar_Rally"
beast_hunt = "Beast_Hunt"
Troop_Training = "Troop_Training" + "Troop_Type"
reaper = "reaper"
App = Window_Finder.BlueStack_Window(Tootie)
App1 = Window_Finder.BlueStack_Window(Tootin)
App3 = Window_Finder.BlueStack_Window(Tootily)
App4 = Window_Finder.BlueStack_Window(Leg)
#develop account config in the future which will contain these values
account_polar_level_dict = {Tootie : 7, Tootin : 5, Tootily : 4, Leg : 4}
account_beast_level_dict = {Tootie : 30, Tootin : 24, Tootily : 20, Leg : 20}
#in beginning we will need to instantiate the schedule
schedule = Data.Window_Dataframe()
#polar Rally
#start with first function to iterate over each viewable window and send a rally march out
def send_march(accounts, type = "Polar") -> None:
"""iterates over Bluestack windows. sends a polar rally for each and
assigns march time to teach window"""
for app in accounts:
x1, y1, x2, y2 = app.rectangle
W, L = app.W_L
#maybe have function to check for stamina?
if type == "Polar":
app.march_time = Map_Interact.polar_sender(x1, y1, W, L, account_polar_level_dict[app.name]) * 2
#maybe keep?
app.polar_count += 1
print(app.name, app.polar_count)
app.rally_out = False
elif type == "Beast":
app.window_to_foreground()
app.march_time = Map_Interact.Beast_Search(x1, y1, W, L, account_beast_level_dict[app.name]) * 2
app.beast_count += 1
print(app.name, app.beast_count)
schedule.add(app.name, app.hwnd, beast_hunt, app.march_time, "s")
elif type == "Reaper":
#reducing delay slightly by amount of time it takes to
#navigate through events interface (may need to make this value a variable...)
app.march_time = Map_Interact.Reaper_Sender(x1, y1, W, L) * 2 - 18
app.reaper_count += 1
app.rally_out = False
#second function scans each window to determine when the rally has departed
#then adds the march time to the schedule
def check_all_rallies(accounts, type) -> None:
for app in accounts:
x1, y1, x2, y2 = app.rectangle
W, L = app.W_L
Rally_left = Map_Interact.check_rally_arrival(x1, y1, W, L)
if type == "Polar":
label = polar_rally
if type == "Reaper":
label = reaper
if Rally_left and not app.rally_out:
app.rally_out = True
schedule.add(app.name, app.hwnd, label, app.march_time, "s")
#third function scans schedule for latest event and triggers related function
#this function will need to be expanded to deal with multiple event types
def schedule_check(accounts) -> None:
latest_event = schedule.latest_event(True)
if latest_event.shape[0] > 0:
print(latest_event)
#clear out the event so it does not trigger the check again
schedule.df = schedule.df.drop(latest_event.index, axis = 0)
for app in accounts:
if latest_event["Window_Name"].iloc[0] == app.name:
#polar rally logic
if latest_event["Activity"].iloc[0] == polar_rally:
#there is likely a better way by throwing the class
#itself into the dataframe? will mess around with that
send_march([app], type = "Polar")
if latest_event["Activity"].iloc[0] == beast_hunt:
send_march([app], type = "Beast")
if latest_event["Activity"].iloc[0] == reaper:
send_march([app], type = "Reaper")
#set the beast and polar counts
def Polar_Scheduler(accounts, limit = None, rally_type = "Polar") -> None:
#testing the polar scheduler
send_march(accounts, type = rally_type)
time.sleep(0.5)
error_int = 0
#note failes to navigate to map when started within city
while error_int < 5000:
#maybe keep to add limit to polar rallies?
if limit is None:
pass
elif len(accounts) > 0:
if rally_type == "Polar":
accounts = [app for app in accounts if app.polar_count < limit]
elif rally_type == "Reaper":
accounts = [app for app in accounts if app.reaper_count < limit]
if len(accounts) == 0:
break
else:
break
error_int += 1
check_all_rallies(accounts, rally_type)
schedule_check(accounts)
time.sleep(1)
if error_int % 15 == 0:
print(schedule.df)
def Beast_Scheduler(accounts, limit = None):
error_int = 0
send_march(accounts, "Beast")
#note failes to navigate to map when started within city
while error_int < 5000:
if limit is None:
pass
elif len(accounts) > 0:
accounts = [app for app in accounts if app.beast_count < limit]
if len(accounts) == 0:
break
else:
break
error_int += 1
schedule_check(accounts)
time.sleep(1)
if error_int % 15 == 0:
print(schedule.df)
if __name__ == '__main__':
active_windows = [App1, App4]
polar = True
if polar == True:
Polar_Scheduler(active_windows, 27)
else:
Beast_Scheduler(active_windows, 22)