Bonjour la communauté 
Je reviens aujourd'hui pour vous mettre à disposition une fonction assez avancée.
Celle-ci permet de vous retourner l'identifiant de cellule à partir de laquelle un sort de zone touchera le plus de monstres. (Exemple : Flèche Explosive)
Cette fonction a été crée et testée par mes soins d'une part :
- Avec des données de test
- et de l'autre, directement en jeu
Le code n'est pas commenté mais j'ai au moins eu le courage de créer un entête de fonction.
Et surtout, happy botting !
Si vous avez des questions ou des remarques, comme d'habitude, n'hésitez pas à apposer une réponse sur ce sujet.

Je reviens aujourd'hui pour vous mettre à disposition une fonction assez avancée.
Celle-ci permet de vous retourner l'identifiant de cellule à partir de laquelle un sort de zone touchera le plus de monstres. (Exemple : Flèche Explosive)
Attention : la fonction FindBestCircleSpellZone fonctionne uniquement avec les sorts disposant d'une zone d'effet de type "cercle". Néanmoins, les sorts "croix" d'une case comme la zone d'effet du sort Tumulte (Iop) fonctionnent avec cette fonction.
Cette fonction a été crée et testée par mes soins d'une part :
- Avec des données de test
- et de l'autre, directement en jeu
Le code n'est pas commenté mais j'ai au moins eu le courage de créer un entête de fonction.
Code:
-- @author: Dampen59
-- @name : FindBestCircleSpellZone
-- @params: - prmRadius (The spell effect radius, example : Fleche explosive is radius 3)
-- @return: The best CellID to attack, containing the most mobs in the spell area
-- -1 in case of wrong or missing prmRadius
function FindBestCircleSpellZone(prmRadius)
if (prmRadius == nil or prmRadius < 1) then
return -1
end
local bestCellId = 0
local numberOfMobsInZone = 0
local numberOfMobsInZoneTemp = 0
local entitiesList = fight:getAllEntities()
local entitiesCount = fight:getEntitiesCount()
local cellIdAroundCellTable = {}
local cellIdAroundCellTableIndex = 1
local cellIdsToCheckTable = {}
local cellIdsToCheckTableIndex = 1
for i = 0, entitiesCount - 1 do
if (entitiesList[i].Team ~= 0) then
cellIdsToCheckTable[cellIdsToCheckTableIndex] = entitiesList[i].CellId
cellIdsToCheckTableIndex = cellIdsToCheckTableIndex + 1
end
end
for j,cell in ipairs(cellIdsToCheckTable) do
numberOfMobsInZoneTemp = 0
local r = prmRadius
for x = -r, r do
for y = -r, r do
if math.abs(x) + math.abs(y) <= r then
local new_cell = cell + 29 * math.floor(x / 2) - 27 * math.floor(y / 2) + (x + y) % 2 * (math.floor(cell / 14) % 2 + 14 * (x % 2 - y % 2)) + x * (x + y + 1) % 2
cellIdAroundCellTable[cellIdAroundCellTableIndex] = new_cell
cellIdAroundCellTableIndex = cellIdAroundCellTableIndex + 1
end
end
end
for k = 0, entitiesCount - 1 do
for j,v in ipairs(cellIdAroundCellTable) do
if (entitiesList[k].CellId == v and entitiesList[k].Team ~= 0) then
numberOfMobsInZoneTemp = numberOfMobsInZoneTemp + 1
end
end
end
if (numberOfMobsInZoneTemp > numberOfMobsInZone) then
numberOfMobsInZone = numberOfMobsInZoneTemp
bestCellId = cell
end
end
return bestCellId
end
Et surtout, happy botting !
Si vous avez des questions ou des remarques, comme d'habitude, n'hésitez pas à apposer une réponse sur ce sujet.
Last edited: