XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Vitamin

offline
Опыт: 430
Активность:
AI скрипт
Здравсвуйте пользователи только начал изучать Jass, есть небольшой опыт програмирования вообщем, но только в других играх
Перейду к делу есть код :
Код:
globals
    player AI_Attack = Player(0)
    constant integer ROCK_GOLEM = 'ngst'
    constant integer ROCK_GOLEM_IMPROVED = 'nggr'
    constant integer KOBOLD_EASY = 'nkot'
    constant integer KOBOLD_SNAIPER = 'nkog'
    constant integer WIZARD_PUPIL = 'nwiz'
    constant integer WIZARD_MAG = 'nwzr'
    constant integer WIZARD_MAG_IMPROVED = 'nwzg'
    constant integer WIZRARD_MAG_BLACK = 'nwzd'
    constant integer BANDIT = 'nban'
    constant integer BANDIT_SNAIPER = 'nbrg'
    constant integer BANDIT_IMPROVED = 'nrog'
    constant integer BANDIT_SNAIPER_IMPROVED = 'nass'
    constant integer BANDIT_IMPROVED_MEGA = 'nenf'
    constant integer BANDIT_BOSS = 'nbld'
endglobals

function main takes nothing return nothing
    call CampaignAI(HOUSE,null)
    call SetReplacementCount(99)
    loop
        call InitAssaultGroup()
        call CampaignAttackerEx(9,9,9,WIZARD_PUPIL)
        call CampaignAttackerEx(9,9,9,BANDIT) 
        call CampaignAttackerEx(8,8,8,BANDIT_SNAIPER)
        set AI_Attack = Player(GetRandomInt(1,8)) 
        call SuicideOnPlayerEx(M5,M5,M5,AI_Attack)
        call InitAssaultGroup()
        call CampaignAttackerEx(7,7,7,KOBOLD_EASY)
        call CampaignAttackerEx(7,7,7,KOBOLD_SNAIPER) 
        call CampaignAttackerEx(7,7,7,WIZARD_MAG)
        set AI_Attack = Player(GetRandomInt(1,8)) 
        call SuicideOnPlayerEx(M6,M6,M6,AI_Attack)
        call InitAssaultGroup()
        call CampaignAttackerEx(6,6,6,BANDIT_SNAIPER_IMPROVED)
        call CampaignAttackerEx(6,6,6,WIZARD_MAG_IMPROVED) 
        call CampaignAttackerEx(6,6,6,BANDIT_IMPROVED_MEGA)
        set AI_Attack = Player(GetRandomInt(1,8)) 
        call SuicideOnPlayerEx(M7,M7,M7,AI_Attack)
        call InitAssaultGroup()
        call CampaignAttackerEx(4,4,4,ROCK_GOLEM)
        call CampaignAttackerEx(3,3,3,BANDIT_BOSS) 
        call CampaignAttackerEx(2,2,2,WIZRARD_MAG_BLACK)
        set AI_Attack = Player(GetRandomInt(1,8))
        call SuicideOnPlayerEx(M8,M8,M8,AI_Attack)
        call InitAssaultGroup()
        call CampaignAttackerEx(3,3,3,ROCK_GOLEM_IMPROVED)
        set AI_Attack = Player(GetRandomInt(1,8))
        call SuicideOnPlayerEx(M10,M10,M10,AI_Attack)
    endloop
endfunction
Не могу понять почему не работает код.
Старый 08.03.2013, 14:49
DioD

offline
Опыт: 45,134
Активность:
попробуйте сделать точно также как в нативном АИ, учитывая все детали, случайных и не нужных там нет.
да, и где отладка?
Старый 08.03.2013, 15:01
Vitamin

offline
Опыт: 430
Активность:
Всмысле откадка какая native нужна для этого ?
Цитата:
попробуйте сделать точно также как в нативном АИ

Не понял .
Старый 08.03.2013, 17:00
Киря

offline
Опыт: 769
Активность:
Vitamin, быть может потому, что нет выхода из цикла.
Старый 08.03.2013, 17:25
Vitamin

offline
Опыт: 430
Активность:
FacePalm ?
Почитай на досуге -> http://xgm.guru/forum/showthread.php?t=8759
Старый 08.03.2013, 17:45
ScorpioT1000
Работаем
online
Опыт: отключен
Старый 08.03.2013, 17:47
DioD

offline
Опыт: 45,134
Активность:
я очень и очень настоятельно не рекомендую слепо верить статьям написанным ноунеймами, если ктото говорит что земля плоская и даже написал про это статью это не говорит о том что так оно и есть.
Старый 08.03.2013, 17:49
Vitamin

offline
Опыт: 430
Активность:
А причем тут цикл вообще цикл только под WAVE'Ы
Старый 08.03.2013, 17:58
ScorpioT1000
Работаем
online
Опыт: отключен
DioD:
да, и где отладка?
DioD:
я очень и очень настоятельно не рекомендую слепо верить статьям написанным ноунеймами, если ктото говорит что земля плоская и даже написал про это статью это не говорит о том что так оно и есть.
Старый 08.03.2013, 18:10
Киря

offline
Опыт: 769
Активность:
Vitamin, ну в ИИ я не очень, но когда я вызывал подобного рода циклы, у меня напрочь переставало все работать, включая функции из других триггеров.
Старый 08.03.2013, 18:17
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Vitamin, так для не особо продвинутых, в jass цикл не может быть бесконечным (да, а вы не знали что фатал так не вызвать...) в нем есть встроенный счетчик операций, это проверялось еще давным давно и результатом было около 4000 шагов цикла, чем сильнее набит цикл операциями, тем меньше он выполнит шагов....
Ну когда колво шагов превысит лимит, поток обрывается.... У тебя поток всего 1 в ИИ. Вот и результат.
quq_CCCP добавил:
Vitamin, пробуй поставить exitwhen true и поставь везде отладочные сообщения, что где откуда какие функциии выполняются а какие нет и проблема сама собой решится...
Старый 09.03.2013, 06:59
Vitamin

offline
Опыт: 430
Активность:
Еси посмотреть папку Scripts в архивав то там те же самые цикы есть и без выхода (exitwhen) в чем у меня проблема ....
Старый 09.03.2013, 15:08
DioD

offline
Опыт: 45,134
Активность:
а выложите ка рандомный скрипт ванильный сюда, мы вместе посмотрим где же отличия (самому не предлагать, варкрафт не у всех есть)
Старый 09.03.2013, 18:21
ScorpioT1000
Работаем
online
Опыт: отключен
так для не особо продвинутых, в jass цикл не может быть бесконечным (да, а вы не знали что фатал так не вызвать...) в нем есть встроенный счетчик операций, это проверялось еще давным давно и результатом было около 4000 шагов цикла, чем сильнее набит цикл операциями, тем меньше он выполнит шагов....
что за бред?))) сам придумал?
в жассе есть лимит операций, а не лимит итераций
Старый 09.03.2013, 18:28
Vitamin

offline
Опыт: 430
Активность:
Код:
//============================================================================
//  $Id: h01x05.ai,v 1.8 2003/04/29 00:26:32 rpardo Exp $
//============================================================================
globals
    player user = PlayerEx(1)
endglobals

//============================================================================
//  main
//============================================================================
function main takes nothing returns nothing
    call CampaignAI(ZIGGURAT_1,null)
    call SetReplacements(2,2,3)
    set campaign_wood_peons = 2

    call SetBuildUnitEx( 1, 1, 1, ACOLYTE           )
    call SetBuildUnitEx( 0, 0, 1, NECROPOLIS_1      )
    call SetBuildUnitEx( 0, 0, 1, CRYPT             )
    call SetBuildUnitEx( 0, 0, 5, ZIGGURAT_1        )
    call SetBuildUnitEx( 0, 0, 1, GRAVEYARD         )
    call SetBuildUnitEx( 0, 0, 1, UNDEAD_ALTAR      )
    call SetBuildUnitEx( 0, 0, 1, NECROPOLIS_2      )
    call SetBuildUnitEx( 0, 0, 1, DAMNED_TEMPLE     )
    call SetBuildUnitEx( 0, 0, 4, ZIGGURAT_2        )
    call SetBuildUnitEx( 2, 2, 2, UNDEAD_BARGE      )
    call SetBuildUnitEx( 5, 5, 5, ACOLYTE           )

    call CampaignDefenderEx( 1, 1, 1, GHOUL            )
    call CampaignDefenderEx( 1, 1, 1, BANSHEE        )
    call CampaignDefenderEx( 1, 1, 1, NECRO            )

    call SetBuildUpgrEx( 1,1,1, UPG_FIEND_WEB    )
    call SetBuildUpgrEx( 0,0,1, UPG_NECROS        )
    call SetBuildUpgrEx( 0,0,1, UPG_BANSHEE        )
    call SetBuildUpgrEx( 1,1,1, UPG_SKEL_LIFE    )

    call WaitForSignal()

    //*** WAVE 1 ***
    call InitAssaultGroup()
    call CampaignAttackerEx( 2,2,4,    GHOUL        )
    call CampaignAttackerEx( 2,2,4,    BANSHEE        )
    call SuicideOnPlayerEx(M3,M3,M2,user)

    call SetBuildUpgrEx( 0,0,1, UPG_UNHOLY_STR  )
    call SetBuildUpgrEx( 0,1,1, UPG_CR_ATTACK   )

    //*** WAVE 2 ***
    call InitAssaultGroup()
    call CampaignAttackerEx( 3,3,4,    CRYPT_FIEND    )
    call CampaignAttackerEx( 2,2,4,    NECRO        )
    call SuicideOnPlayerEx(M5,M5,M3,user)

    call SetBuildUpgrEx( 0,0,1, UPG_UNHOLY_ARMOR)
    call SetBuildUpgrEx( 0,0,1, UPG_CR_ARMOR    )
    call SetBuildUpgrEx( 1,1,1, UPG_NECROS        )
    call SetBuildUpgrEx( 1,1,1, UPG_BANSHEE        )

    //*** WAVE 3 ***
    call InitAssaultGroup()
    call CampaignAttackerEx( 3,3,5,    GHOUL        )
    call CampaignAttackerEx( 3,3,5,    BANSHEE        )
    call SuicideOnPlayerEx(M5,M5,M3,user)
    
    //*** WAVE 4 ***
    call InitAssaultGroup()
    call CampaignAttackerEx( 3,3,5,    GHOUL        )
    call CampaignAttackerEx( 2,2,4,    CRYPT_FIEND    )
    call CampaignAttackerEx( 1,1,2,    BANSHEE        )
    call SuicideOnPlayerEx(M5,M5,M3,user)

    call SetBuildUpgrEx( 1,1,2, UPG_UNHOLY_STR  )
    call SetBuildUpgrEx( 1,1,2, UPG_CR_ATTACK   )

    //*** WAVE 5 ***
    call InitAssaultGroup()
    call CampaignAttackerEx( 4,4,5,    GHOUL        )
    call CampaignAttackerEx( 1,1,2,    MEAT_WAGON    )
    call CampaignAttackerEx( 2,2,3,    NECRO        )
    call SuicideOnPlayerEx(M5,M5,M3,user)

    call SetBuildUpgrEx( 1,1,2, UPG_UNHOLY_ARMOR)
    call SetBuildUpgrEx( 1,1,2, UPG_CR_ARMOR    )

    //*** WAVE 6 ***
    call InitAssaultGroup()
    call CampaignAttackerEx( 5,5,7,    GHOUL        )
    call CampaignAttackerEx( 3,3,4,    BANSHEE        )
    call SuicideOnPlayerEx(M5,M5,M3,user)

    //*** WAVE 7+ ***
    loop
        call InitAssaultGroup()
        call CampaignAttackerEx( 3,3,5,    NECRO        )
        call CampaignAttackerEx( 3,3,4,    CRYPT_FIEND    )
        call CampaignAttackerEx( 1,1,2,    MEAT_WAGON    )
        call SuicideOnPlayerEx(M5,M5,M3,user)

        call InitAssaultGroup()
        call CampaignAttackerEx( 5,5,7,    GHOUL        )
        call CampaignAttackerEx( 3,3,4,    BANSHEE        )
        call SuicideOnPlayerEx(M5,M5,M3,user)

        call InitAssaultGroup()
        call InitAssaultGroup()
        call CampaignAttackerEx( 3,3,5,    GHOUL        )
        call CampaignAttackerEx( 2,2,4,    CRYPT_FIEND    )
        call CampaignAttackerEx( 2,2,3,    BANSHEE        )
        call CampaignAttackerEx( 1,1,2,    NECRO        )
        call SuicideOnPlayerEx(M5,M5,M3,user)
    endloop
endfunction
Старый 09.03.2013, 20:11
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
ScorpioT1000, Ссылку дать, где об этом давным давно писали, суть одна что количество операций в одном потоке ограничено, и самая явная причина обрыва потока там где стоит цикл это как раз Лимит операций или что там у тебя...
Старый 10.03.2013, 04:58
Vitamin

offline
Опыт: 430
Активность:
Так мне я так понял надо делать дебаг сообщение а не легче ли использовать мне native function DoAiScriptDebug ?
Старый 10.03.2013, 11:34
DioD

offline
Опыт: 45,134
Активность:
делай если легче я разрешаю.
Старый 10.03.2013, 15:52
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 15:26.