def useableAmmo(): total = 0 currentPlayer = readData.getPlayerDetails() hasWeapon = [True] + currentPlayer[6] for i in range(1, 7): if (hasWeapon[i]): total += currentPlayer[5][mapWeaponToAmmoType(i)] return total
def findFurthestHealth(): plrId = readData.getPlayerDetails()[0] objList = readData.getObjectsDetails(plrId) healthObj = [] for obj in objList: if ("health" in obj[1].lower()): healthObj.append(obj) return findFurthestObject(healthObj)
def turnAbsAngle(_angle): angle = readData.getPlayerDetails()[2] turn = _angle - angle if (abs(_angle - angle) > 180): if (turn > 0): #if positive left = False else: left = True else: #turn the right way if (turn > 0): left = True else: left = False while (abs(_angle - angle) >= 5): angle = readData.getPlayerDetails()[2] if (left): actions.turnLeft(3) else: actions.turnRight(3)
def faceObject(objectID): objectDetails = readData.getObjectDetails(objectID) playerDetails = readData.getPlayerDetails() if (objectDetails != []): dx = objectDetails[2][0] - playerDetails[3][0] #get Xs dy = objectDetails[2][1] - playerDetails[3][1] #get Ys absRadAngle = math.atan2(dy, dx) absDegAngle = math.degrees(absRadAngle) if (absDegAngle < 0): absDegAngle += 360 turnAbsAngle(absDegAngle)
def findClosestNonEnemy(): objects = [] plrID = readData.getPlayerDetails()[0] objList = readData.getObjectsDetails(plrID) for obj in objList: if (not ("player" in obj[1].lower()) and not ("dead" in obj[1].lower())): objects.append(obj) return findClosestObject(objects)
def listSeenEnemies(): seenEnemyList = [] currentPlayerID = readData.getPlayerDetails()[0] objs = readData.getEnemyDetails(currentPlayerID) if (objs != []): for enemies in objs: print(enemies) if readData.LOS(currentPlayerID, enemies[0]): seenEnemyList.append(enemies) return seenEnemyList
def findFurhtestAmmo(): currentPlayer = readData.getPlayerDetails() plrId = currentPlayer[0] objList = readData.getObjectsDetails(plrId) AmmoObj = [] for obj in objList: if (("shells" in obj[1].lower() and currentPlayer[5][1]) or ("clips" in obj[1].lower() and currentPlayer[5][0]) or ("rockets" in obj[1].lower() and currentPlayer[5][3])): AmmoObj.append(obj) return findFurthestObject(AmmoObj)
def findLowestHPEnemy(_range): enemyList = readData.getEnemyDetails(readData.getPlayerDetails()[0]) lowestHP = 9999 lowestEnemy = -1 #negative means no enemies in range for enemy in enemyList: dist = readData.getObjectDetails(enemy[0])[3] if (dist <= _range and enemy[1] < lowestHP): lowestEnemy = enemy[0] lowestHP = enemy[1] return lowestEnemy
def switchAndShoot(a): currentPlayer = readData.getPlayerDetails() print(currentPlayer[4]) if ( currentAmmo() == 0 or currentPlayer[4] == 0 or currentPlayer[4] == 7 ): # if no ammo in held gun or fists are equipped, switch to somethin else hasWeapon = [True] + currentPlayer[6] actions.switchWeapon(1) # hasWeapon=[True]+readData.getWeaponsStatus(plrDetails[0],plrDetails) #add [True] for fists for i in range( 6, -1, -1 ): #start checking from back (6) and end on fists (0) if no ammo hasAmmo = currentPlayer[5][mapWeaponToAmmoType(i)] > 0 #print(i,"hasAmmo",hasAmmo,hasWeapon[i]) if (hasAmmo and hasWeapon[i]): actions.switchWeapon(i) #switch to a weapon with ammo time.sleep(1) break actions.shoot(a)
import utilityActions import actions import readData import offensiveAction import defensiveAction import sys import random currentPlayerID = readData.getPlayerDetails()[0] #state = HEALTH_SEARCH | AMMO_SEARCH | FIGHT | ENEMY_SEARCH FIGHT = 0 HEALTH_SEARCH = 1 AMMO_SEARCH = 2 ENEMY_SEARCH = 3 state = FIGHT enoughHP = True enoughAmmo = True previousZigZagDirection = None #INIT position woth los utilityActions.turnAbsAngle(90) actions.forward(150) count = 0 while (True): #main loop #for not shooting everytime count += 1
def currentAmmo(): ammoType = mapWeaponToAmmoType(readData.getPlayerDetails()[4]) if (ammoType >= 0): return readData.getPlayerDetails()[5][ammoType] else: return 9999 #fists or chainsaw dont require ammo