Pour utiliser l'emplacement avancée en phase de préparation d'un combat, activez l'option :
Au moment de l'emplacement, la fonction fight_placement() dans votre script sera appelée, et devra retourner la cellule où votre personnage doit se placer :
Voici le prototype de cette fonction :
possiblePositions est une liste qui contient toutes les cellules possibles (vides + occupés).
availablePositions est une liste qui contient toutes les cellules possibles vides.
La fonction doit retourner la cellule où votre personnage doit se placer.
Si la cellule retournée est -1, le personnage restera sur sa propre cellule.
Si la cellule retournée est occupée, le personnage demandera un échange de position.
Vous pouvez utiliser les méthodes des combattants et des cellules pour construire votre logique et retourner une cellule.
Placer toute la team avec le chef
Configuration des mules :
Désactiver le placement automatique (OFF).
Désactiver le prêt automatique.
Configuration du chef :
Activer le placement automatique par l'IA avancée
Désactiver le prêt automatique.
Dans le script suivant, le chef va s'occuper de placer vos personnages dans des cellules précises, et à la fin du placement il ordonne à toute la team de mettre prêt.
Vous n'avez qu'à modifier la table PLACEMENT pour l'adapter à vos besoins.
function fight_placement(possiblePositions, availablePositions)
return CELL
end
-- MAP_ID => CHARACTER_ID => CELL_ID
PLACEMENT = {
["192419850"] = {
["885830123"] = 246,
["885830189"] = 261,
["885830254"] = 275,
["885830320"] = 290,
["885830385"] = 287,
["885830451"] = 300,
["885830517"] = 314,
["885830582"] = 327,
}
}
-- Attendre les autres combattants
function wait_for_fighters()
console.print("En attente des autres combattants ...")
for i = 1, 50 do
local fighters = fight.fighters()
local count = 0
for _, fighter in ipairs(fighters) do
if PLACEMENT[tostring(map.currentMapId())] ~= nil and PLACEMENT[tostring(map.currentMapId())][tostring(fighter.id)] ~= nil then
count = count + 1
end
end
for k, v in pairs(PLACEMENT[tostring(map.currentMapId())]) do
count = count - 1
end
if PLACEMENT[tostring(map.currentMapId())] ~= nil and count == 0 then
console.success("Tous les combattants sont là, début du positionnement ...")
return
end
global.delay(100)
end
console.error("Fail ...")
end
-- ...
function get_fighter_index_by_id(fighters, id)
for index, fighter in ipairs(fighters) do
if fighter.id == id then
return index
end
end
return -1
end
function get_ally_index_by_cellId(fighters, cellId, team)
for index, fighter in ipairs(fighters) do
if fighter.cellId == cellId and fighter.team == team then
return index
end
end
return -1
end
-- ...
function go_to_position(fighters, cellId)
local me_index = get_fighter_index_by_id(fighters, character.id())
if fighters[me_index].cellId == cellId then
return fighters
end
local target_index = get_ally_index_by_cellId(fighters, cellId, fighters[me_index].team)
if target_index == -1 then
fighters[me_index].cellId = cellId
else
local backup = fighters[me_index].cellId
fighters[me_index].cellId = cellId
fighters[target_index].cellId = backup
end
fight.setPosition(cellId)
return fighters
end
-- Ne pas modifier
FIGHT_PLACEMENT_ASYNCHRONOUS = true
-- Placement par IA
function fight_placement(possiblePositions, availablePositions)
-- Attendre les autres combattants
wait_for_fighters()
-- Commencer le positionnement
local fighters = fight.fighters()
for id, cellId in pairs(PLACEMENT[tostring(map.currentMapId())]) do
if tonumber(id) ~= character.id() then
local fighter = fighters[get_fighter_index_by_id(fighters, tonumber(id))]
if fighter.cellId ~= cellId then
console.print("Placement du combattant ["..tonumber(id).."] "..fighter.name.." dans la cellule "..cellId.." en cours ...")
fighters = go_to_position(fighters, cellId)
fighters = go_to_position(fighters, fighter.cellId)
console.success("Placement du combattant "..fighter.id.." terminé !")
end
end
end
-- Moi
fighters = go_to_position(fighters, PLACEMENT[tostring(map.currentMapId())][tostring(character.id())])
-- Ready
for i = 2, global.teamCount() do
ipc.post(window.getByTeamData(global.teamNumber(), i), "fight.setReady()")
end
fight.setReady()
-- Return
return -1
end