Tele dancing sorc nil (#282)

* Implement simple "tele-dancing" for sorc nil

* increase trav atk len
This commit is contained in:
aeon0
2021-12-13 19:13:53 +01:00
committed by GitHub
parent bf7ce99c5f
commit 857052c75d
3 changed files with 27 additions and 12 deletions

View File

@@ -29,7 +29,7 @@ casting_frames=11
stash_gold=1
gold_trav_only=0
use_merc=1
atk_len_trav=2.0
atk_len_trav=3.0
atk_len_pindle=3.0
atk_len_eldritch=3.0
atk_len_shenk=4.0

View File

@@ -6,11 +6,12 @@ from ui import UiManager
from pather import Pather
from logger import Logger
from screen import Screen
from utils.misc import wait
from utils.misc import wait, rotate_vec, unit_vector
import random
import time
from typing import Tuple
from pather import Location, Pather
import numpy as np
class Sorceress(IChar):
@@ -141,16 +142,21 @@ class Sorceress(IChar):
def kill_nihlatak(self, end_nodes: list[int]) -> bool:
# Find nilhlatak position
delay = [0.2, 0.3]
nihlatak_pos_abs = self._pather.find_abs_node_pos(end_nodes[-1], self._screen.grab())
if nihlatak_pos_abs is None:
return False
# Attack
cast_pos_abs = [nihlatak_pos_abs[0] * 0.9, nihlatak_pos_abs[1] * 0.9]
atk_sequences = int(self._char_config["atk_len_nihlatak"])
print(atk_sequences)
for _ in range(atk_sequences):
self._right_attack(cast_pos_abs, delay, 90)
self._left_attack(cast_pos_abs, delay, 90)
for i in range(atk_sequences):
nihlatak_pos_abs = self._pather.find_abs_node_pos(end_nodes[-1], self._screen.grab())
if nihlatak_pos_abs is not None:
cast_pos_abs = np.array([nihlatak_pos_abs[0] * 0.9, nihlatak_pos_abs[1] * 0.9])
atk_sequences = int(self._char_config["atk_len_nihlatak"])
self._right_attack(cast_pos_abs, delay, 90)
self._left_attack(cast_pos_abs, delay, 90)
# Do some tele "dancing" after each sequence
if i < atk_sequences - 1:
rot_deg = random.randint(-10, 10) if i % 2 == 0 else random.randint(170, 190)
tele_pos_abs = unit_vector(rotate_vec(cast_pos_abs, rot_deg)) * 100
pos_m = self._screen.convert_abs_to_monitor(tele_pos_abs)
self.pre_move()
self.move(pos_m)
# Move to items
self._pather.traverse_nodes(end_nodes, self, time_out=0.8)
return True
@@ -170,4 +176,4 @@ if __name__ == "__main__":
ui_manager = UiManager(screen, t_finder)
char = Sorceress(config.sorceress, config.char, screen, t_finder, ui_manager, pather)
#char.pre_buff()
char.kill_nihlatak([506])
char.kill_nihlatak([501])

View File

@@ -6,6 +6,7 @@ from logger import Logger
import cv2
from typing import List, Tuple
import os
from math import cos, sin, dist
def wait(min_seconds, max_seconds = None):
@@ -65,3 +66,11 @@ def list_files_in_folder(path: str):
for name in files:
r.append(os.path.join(root, name))
return r
def rotate_vec(vec: np.ndarray, deg: float) -> np.ndarray:
theta = np.deg2rad(deg)
rot_matrix = np.array([[cos(theta), -sin(theta)], [sin(theta), cos(theta)]])
return np.dot(rot_matrix, vec)
def unit_vector(vec: np.ndarray) -> np.ndarray:
return vec / dist(vec, (0, 0))