Прошу прощения если написал не в тот раздел. Вопрос вот в чём, давненько создал карту... но никак не могу исправить вылеты. Т.е игра идёт нормально если играть скажем 2 на 2 или даже 3 на 3 но при игре 6 на 6 (с ботами) игра вроде не тормозит, но с примерно в 50% случаев заканчивается банальным вылетом без ошибок. Большая часть кода написана на jass (использую jngp). Я не силён в jass, поэтому может что-то не так в коде. Очень хотелось бы понять ошибку и исправить. Грешу на функцию (смысл её в том чтобы боты кастовали заклинания на ближайших вражеских героев в радиусе 1000 ед.) так как вылеты происходят во время боя между героями (как я замечал). Вот код функции которую использую с промежутком в 1 секунду.
function filtgAI takes nothing returns boolean
return IsUnitAliveBJ(GetFilterUnit())==true and IsUnitType(GetFilterUnit(), UNIT_TYPE_STRUCTURE)==false and GetUnitAbilityLevel(GetFilterUnit(),'Aloc')==0 and IsUnitType(GetFilterUnit(), UNIT_TYPE_HERO)==true
endfunction
function NewAI2_system takes real distance returns nothing
local group g=CreateGroup()
local unit u=null
local unit AI=null
local real x = 0.
local real y = 0.
local real x2 = 0.
local real y2 = 0.
local integer A = 1
local integer B = 12
loop
exitwhen A>B
if IsUnitAliveBJ(udg_hero[A])==true and GetPlayerController(GetOwningPlayer(udg_hero[A]))==MAP_CONTROL_COMPUTER then
set AI = udg_hero[A]
set x = GetUnitX(AI)
set y = GetUnitY(AI)
call GroupEnumUnitsInRange(g,x,y,distance,Condition(function filtgAI))
set u=FirstOfGroup(g)
loop
exitwhen u==null
if IsUnitEnemy(u,GetOwningPlayer(AI)) == true and IsUnitAliveBJ(AI)==true and IsUnitVisible(u,GetOwningPlayer(AI)) then
set x2 = GetUnitX(u)
set y2 = GetUnitY(u)
call IssueTargetOrder(AI,"thunderbolt",u)
call IssueTargetOrder(AI,"creepthunderbolt",u)
call IssueTargetOrder(AI,"banish",u)
call IssueTargetOrder(AI,"frostnova",u)
call IssueTargetOrder(AI,"sleep", u)
call IssueTargetOrder(AI,"shadowstrike",u)
call IssueTargetOrder(AI,"chainlightning",u)
call IssueTargetOrder(AI,"drunkenhaze",u)
call IssueTargetOrder(AI,"acidbomb",u)
call IssueTargetOrder(AI,"soulburn",u)
call IssueTargetOrder(AI,"hex",u)
call IssueTargetOrder(AI,"manaburn",u)
call IssueTargetOrder(AI,"slow",u)
call IssueTargetOrder(AI,"cripple",u)
call IssueTargetOrder(AI,"forkedlighting",u)
call IssueTargetOrder(AI,"antimagicshell",u)
call IssueTargetOrder(AI,"entanglingroots",u)
call IssueTargetOrder(AI,"purge",u)
call IssueTargetOrder(AI,"ensnare",u)
// --------C указанием точки--------
call IssuePointOrder(AI,"flamestrike",x2,y2)
call IssuePointOrder(AI,"inferno",x2,y2)
call IssuePointOrder(AI,"shockwave",x2,y2)
call IssuePointOrder(AI,"clusterrockets",x2,y2)
call IssuePointOrder(AI,"impale",x2,y2)
call IssuePointOrder(AI,"rainoffire",x2,y2)
call IssuePointOrder(AI,"blink",x2,y2)
call IssuePointOrder(AI,"silence",x2,y2)
call IssuePointOrder(AI,"breathoffire",x2,y2)
call IssuePointOrder(AI,"stasistrap",x2,y2)
call IssuePointOrder(AI,"blizzard",x2,y2)
// --------Без цели--------
call IssueImmediateOrder(AI,"waterelemental" )
call IssueImmediateOrder(AI,"windwalk" )
call IssueImmediateOrder(AI,"thunderclap" )
call IssueImmediateOrder(AI,"creepthunderclap" )
call IssueImmediateOrder(AI,"spiritwolf" )
call IssueImmediateOrder(AI,"Locustswarm" )
call IssueImmediateOrder(AI,"Summongrizzly" )
call IssueImmediateOrder(AI,"stomp" )
call IssueImmediateOrder(AI,"Serpentward" )
call IssueImmediateOrder(AI,"metamorphosis" )
call IssueImmediateOrder(AI,"whirlwind" )
call IssueImmediateOrder(AI,"fanofknives" )
call IssueImmediateOrder(AI,"immolation" )
call IssueImmediateOrder(AI,"berserk" )
call IssueImmediateOrder(AI,"roar" )
call IssueImmediateOrder(AI,"manashield" )
call IssueImmediateOrder(AI,"robogoblin" )
call IssueImmediateOrder(AI,"battleroar" )
call RemoveLocation(Location(x2,y2))
set x2 = 0.
set y2 = 0.
call GroupRemoveUnit(g,u)
set u=FirstOfGroup(g)
else
call GroupRemoveUnit(g,u)
set u=FirstOfGroup(g)
endif
endloop
endif
set A = A +1
endloop
call DestroyGroup(g)
set g=null
set u=null
set AI=null
set x = 0.0
set y = 0.0
set x2 = 0.0
set y2 = 0.0
set A = 0
set B = 0
endfunction
Может быть проблема в нём? Так-же выкладываю открытую карту. (если кому интересно посмотреть код детальнее)
Принятый ответ
низнаю какой спел у героя перезаряжается, на какой хватает маны, какие спелы у героя вообще есть, и в прочем на основе каких спелов они сделаны
да здравствует бд
FenikS1991:
FenikS1991:
Я знаю что это координаты умник.. пустые придирки не прокатят
я не только про координаты, я про всё
короче судя по всему ты пытаешься написать прогу которая бы думала вместо тебя
и это очень пичально
поэтому я просто оставлю это здесь
короче судя по всему ты пытаешься написать прогу которая бы думала вместо тебя
и это очень пичально
поэтому я просто оставлю это здесь
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Ред. FenikS1991
Ред. FenikS1991
Господи уже голова не варит.
nvc123: Я знаю что это координаты умник.. пустые придирки не прокатят
FenikS1991:
короче судя по всему ты пытаешься написать прогу которая бы думала вместо тебя
и это очень пичально
поэтому я просто оставлю это здесь