Русскоязычный форум поклонников игры «Они» от Bungie
Эта лента - дополнение к Михиному справочнику: Oni Scripts: FAQ-пособие
Здесь вы можете по очереди задавать вопросы о BSL, желательно конкретные и серьёзные.
Мы - Миха, я, и другие - будем считать своей задачей исчерпывающе отвечать на вопросы.
За бестолковые вопросы больно бить не будем - но можем немножко изменить суть вопроса.
Что-то подобное было на старом Централе: http://konokoffin.bungie.org/forums/ind ... threadid=5
В этом сообщении будут прямые ссылки на самые важные вопросы, рассмотренные в этой теме.
Постепенно рассмотренные вопросы и ответы будут мигрировать в тот же справочник и на вики.
Оффлайн
Отвечаю на вопрос Smith, касающийся нестабильного поведения ИИ.
Интелект
Интелект
Базовая идея у Smith такая: на первой сохранке главы 2 добавить в команду Коноки ещё одного бойца, с пулемётом. Чтоб исход битвы был пооднозначнее. Вот как это выглядит (добавки Smith - с двойной индентацией).
if (save_point eq 1) { my_save_point=1; particle vent03 start ai2_spawn patrol_striker_3 ai2_spawn partner_cop_1 ai2_spawn partner_cop_2 ai2_spawn ambush_striker_1 ai2_spawn ambush_striker_2 ai2_spawn ambush_striker_3 chr_location 1 156.666428 -1.000000 -39.771038 chr_giveweapon patrol_striker_3 w2_sap chr_givepowerup patrol_striker_3 ammo chr_changeteam patrol_striker_3 TCTF chr_set_health patrol_striker_3 80 chr_set_class 1 TCTF_lite_1 chr_delete Recep door_lock 1 door_lock 4 restore_game ai2_attack partner_cop_1 ambush_striker_1 ai2_attack partner_cop_2 ambush_striker_3 music_script_start(); sleep 30 set_objective_1 }
Тупо и банально, но, во-первых - похвально, что освоена адресация челов по индексу. Действительно, тех челов, к которым придётся обращаться по индексу, имеет смысл споунить до того, как заполнение ячеек персами станет неоднозначным, т.е. как можно ближе к загрузке уровня.
(Однако важно помнить, что хоть ты ему и дал 80 хелсов, в конечном счёте у него останется не больше 69, а если играть на малом уровне сложности, то и того меньше.)
Во-вторых, дальше возникает интересный момент и собственно вопрос. После драки скрипт обыкновенно вызывает функцию all_music_counters, чтобы остановить музыку. Выглядит она так (добавки Smith - с двойной индентацией) :
func void all_music_counters(void) { dprint ELVIS_HAS_LEFT_THE_BUILDING fork three sound_music_stop mus_ambgrv1b sound_music_stop mus_fiteb_hd sound_music_stop atm_low_perc1 sound_music_stop atm_cl12 sound_music_stop atm_cl11 sound_music_stop mus_sv }
Заметим, что после победы над Страйкерами двое обыкновенных TCTF-овцев (partner_cop_1 и partner_cop_2) отправляются патрулировать первый этаж - поперёк холла, в комнату с рабочими и консолью, потом назад и так далее. Делают это они независимо от скриптов - просто у них такая работа (job), и прописана она в ихнем CHAR. Работа номер 3, т.е. "patrol", патрули (PATR) "partner_1" и "partner_1", номера 4 и 5, можете проверить.
Так вот, надо бы и нашему третьему бойцу (переодетому Страйкеру patrol_striker_3) придумать какое-нибудь полезное дело. Например, он может занять наблюдательскую позицию на галерее, которая идёт поперёк того же холла этажом выше. Smith так и решил - пусть он после битвы бежит к флагу 29, и остаётся там. Эти инструкции содержатся в отдельной функции с гордым названием three, которую целиком написал Smith:
func void three(void) { sleep 600 ai2_movetoflag patrol_striker_3 0029 ai2_setmovementmode patrol_striker_3 run }
На первый взгляд всё нормально, да и на второй тоже, разве что номер флага 29 с нулями впереди странно смотрится. И довольно часто этот скрипт срабатывает. Но иногда - тоже довольно часто - переодетый Страйкер после битвы не слушается команды ai2_movetoflag, прописанной в этой функции three. Он как бы в неком ступоре - или остаётся стоять, где стоял в конце битвы, или перемещается к координатам (156.666428,-1.000000,-39.771038). После этого можно ему дать повторный приказ переместиться к флагу 29, и тогда он слушается, но первый приказ почему-то игнорирует. Иногда.
В чём состоит причина облома? Главным образом в том, что мы имеем дело с переодетым Страйкером, задача которого по сюжету - не холл сторожить, а патрулировать (PATR "patrol_3", номер 19) с плазменной винтовкой на другом конце карты, и между прочим первый флаг его патруля, номер 54, находится за запертой дверью номер 23. Это обломно, почему? Потому, что после битвы этот Страйкер сразу вспоминает о своей (невыполнимой) задаче и впадает в депрессию, ещё до того, как мы посылаем его на флаг 29. Депрессия проходит, например, если к нему настойчиво обращаться и снова послать куда следует. Или наоборот от него отвлечься - тоже может повезти. Но рано или поздно он всё равно вспомнит о своей работе по ту сторону запертой двери 23 - и закручинится. То есть ситуация так или иначе нештатная, и удивляться глюкам не следует. Надо ситуацию починить. Как?
Можно для проверки использовать вместо чела patrol_striker_3, например, чела nookleft_thug_1, у которого патруль в соседнем закуточке, дверь не заперта. Главной работой у него пусть по-прежнему будет медитация перед компьютерами в закуточке, и поскольку она осуществима, в депрессию наш чел никогда не впадёт, и сторожить холл с верхней галереи тоже согласится - на какое-то время, ведь в итоге он вспомнит про свои компьютеры и пойдёт медитировать дальше.
Можно - тоже для проверки - использовать того же patrol_striker_3, но отпереть дверь 23. Тогда депрессия нашему герою поначалу не грозит, и он беспрекословно согласится бежать к флагу 29 и немного там подежурит. Однако в конце концов он вспомнит про свою работу и смотается на другой конец карты, к флагу 54, и уже там впадёт в ступор, потому что остальные флаги его патруля, 52 и 55, в свою очередь находятся за запертыми дверями, 22 и 6 соответственно.
А теперь самый настоящий фикс. То есть не самый - самым настоящим было бы создание новых контейнеров PATR и CHAR для нашего героя, чтоб всё было по правилам. Скажем так - самый мудрый фикс в рамках данного урока.
Мы сделаем следующее - мы будем использовать всё того же patrol_striker_3, но дадим ему новую работу (job), причём выполнимую, без всяких патрулей за запертыми дверями, чтобы он не сомневался в смысле жизни и не впадал в депрессию.
Эта замечательная безмятежная деятельность называется "idle" (номер 1), её мы форсируем командой ai2_idle(patrol_striker_3) и сразу же назначаем её ему в качестве работы, командой ai2_setjobstate(patrol_striker_3). Сделать это надо пораньше, например ещё до того, как чела телепортировать из патрулируемой им зоны, но можно и попозже, уже в холле, сразу перед битвой - главное, чтобы до ступора успеть. Что мы имеем в результате? чела, который ничего патрулировать не собирается, и будет только рад бежать по первому зову к флагу 29.
Smith, я понятно объяснил?
P.S. Похожую проблему я решил 4 года назад, вот здесь:
http://konokoffin.bungie.org/forums/ind ... #post_1124
http://konokoffin.bungie.org/forums/ind ... #post_1392
Оффлайн
Да! Исчерпывающий ответ Спасибо много узнал. Но не прочитав статью, днём раньше... я решил проблему, довольно тупым способом - просто прописал ему команду бежать к флагу, раз 20 наверное. При чём если напишешь 10 раз он тока половины пути пройдёт. Вот так! Короче я прописал флагов наверное 5, и в разное время в зависимости от условий заставляю бота бегать. Надо будет по умному попробовать.
Кстати, а анимации (бега, ходьбы , полуприседа, вскрикивание при виде врага) - на уровне BINA или чего там делаются??? Или скриптом можно заставить бота выполнять.
Просто эти анимации - человечность придают боту, а то встанет как статуя не оч. смотрится
Туговато у мя пока получается разобратся с BiNA, Char, пока вообще не врубаюсь, и ангилийский пока не тот, чтобы на ходу всё читать. А в каких файлах Они, хранятся персонажи (боты). Например в level3_Final.dat ???
Оффлайн
Да ответ исчерпавующий вот тогда мои вопросы, я челу даю команду чтоб он бегал за мной, а он не бегает, чё дела?
Потом какой камандойможно узнать лакацию где ты находишся?
И последнее какой камандой можно зделать чтоб штатские не боялись пративников, а били их,и какой командойможно зделать чтоб штатские играли и за тебя и против тебя какими командами это можно зделать!
Оффлайн
vitya написал(а):
Потом какой камандойможно узнать лакацию где ты находишся?
where в консоле
Добавлено спустя 47 секунд:
vitya написал(а):
И последнее какой камандой можно зделать чтоб штатские не боялись пративников, а били их,и какой командойможно зделать чтоб штатские играли и за тебя и против тебя какими командами это можно зделать!
Нууу командой на постановку команды персонажу
Добавлено спустя 3 минуты 32 секунды:
а мой вопрос:какими командами гейсер сделал так,чтоб при определенном убийстве противников(как в ОТА)срабатывала следующая функция,скажем(как в ОТА) набрал я 20 фрагов,и win,и т.д.Думаю многим интересно,лень самому искать в скриптах,не зря же тему создали
Оффлайн
Я не помню но что-то вроде этого-
func who_win(void) { if(fragse eq 20);fork fwin if(fragsf eq 20);fork ewin }
Оффлайн
И ещо мой вопрос.В скрипте есть функции-
func void simple_powerup(string x) { chr_teleport(x,14) chr_set_health(x,80) chr_givepowerup(x,shield,40) chr_givepowerup(x,ammo,1) } и func void spawn_outside_1 { ai2_spawn tech_thug_1 ai2_spawn cruel_commguy_1 ai2_spawn brain_commguy_2 simple_powerup tech_thug_1 simple_powerup cruel_commguy_1 simple_powerup brain_commguy_2 }
Вызов spawn_outside_1 есть,проверял.
Однако никаких поверупов НЕТ!Спавны есть,поверупов нет...
Отредактировал(а) doktordulit (19-07-2009 10:20:28)
Оффлайн
с раздачей предметов и оружии часто замечаю такую фигню,у меня кстати у персов некоторые пушки идут(допустим плазма)а если ЕМУ же ставлю ртутник то оружие не появляется...
Оффлайн
doktordulit, во-первых, в чём смысл таких функций? spawn_outside_1 имеет параметр, но никак его не использует. не логичнее ли будет, например, вынести спавн к поверапу и вызывать его по имени спавнуемого? или, если этот поверуп не одноразовый, spawn_outside должен просто перенаправлять своё "x" поверапу, а вызываться несколько раз.
во-вторых, я бы ставил точки с запятой после скобочных вызовов (хотя с наличием переносов это несущественно), и как раз вызовы simple_powerup оформил со скобками. если там будет перенаправление по аргументу, то тем более. мелочи...
что касается самих поверапов - есть разница, нету только щита и обоймы, или нету и ровно 80 хелсов, или нету и телепорта куда надо. на всякий случай можно проставить между строк dprint
/dmsg
и проверить, не стопорится ли выполнение на каком-то месте. если выполнение проходит, но функция не работает - перепроверяй консолью, в чём проблемы с данными чарами в данной ситуации.
не видя остального скрипта и контекста вызова этой функции (ну, может, эти чары умирали где-то, или с force спавнились, или какой-нибудь ещё катаклизм пережили), больше ничего сказать не могу. -_- сами по себе функции в таком виде прекрасно работают, и чары и щиты есть на месте.
Оффлайн
Ребята, сразу говорю - по одному вопросу с человека за раз, и желательно по очереди.
Надо исходить из принципа, что каждый ответ должен быть выверен экспертом-гуру.
Так что половину из ваших сообщений я может быть даже удалю, а то порядка мало.
Оффлайн
Предупреждение всем тем, кто игнорировал очередь и сыпал вопросы в кучу - так у нас с вами дело не пойдёт.
Вообще-то исторически первым должен был быть vitya, потому что один из своих вопросов он мне задал в личку:
vitya написал(а):
я челу даю команду чтоб он бегал за мной, а он не бегает, чё дела?
Но поскольку этот вопрос задан крайне бестолково, vitya пропускает ход, и я перехожу к новому вопросу Smith:
анимации (бега, ходьбы , полуприседа, вскрикивание при виде врага) - на уровне BINA или чего там делаются??? Или скриптом можно заставить бота выполнять.
Есть команда chr_animate для "анимации на заказ", например chr_animate(chelovek, KONCOMsuper_kick) заставляет чела с именем chelovek сделать Колесо Дьявола.
"Бег" и "ходьба" обычно задаются челам не как анимации, а как способ передвижения, через команду ai2_setmovementmode. Ты ведь вроде сам её использовал и должен знать, с чем её едят: сначала ai2_setmovementmode(chelovek, run) или ai2_setmovementmode(chelovek, walk), а потом, например, ai2_movetoflag(chelovek, 42). Или ты чего-то другого хочешь? тогда объясни так, чтоб я понял
Что такое полуприсед, я не понял совсем. А вскрикивание при виде врага - это поведение происходит автоматически, и зачем тебе делать так, чтобы он шарахался "просто так"?
Manticore, предупреждение за гору вопросов вне очереди... doktordulit, предупреждение за ложную информацию про индексы...
Дайте экспертам время проверить ответы, ведь не факт, что они исчерпывающие и вообще верные... Я завтра по всему пройдусь.
Оффлайн
geyser написал(а):
doktordulit, предупреждение за ложную информацию про индексы
Нормально.Я думал что пишу все правильно а мне предупреждение что СПЕЦИАЛЬНО писал неправильно"
P.C.А что собсно неправильно?
EDIT (geyser): Я и не говорил, что ты "СПЕЦИАЛЬНО" дезинформировал Manticore, но имело смысл чуть-чуть поискать, подумать, проверить, или по прайней мере не выдавать ответ так авторитетно, как будто ты в нём на 100% уверен,
и после твоих слов вопрос можно считать закрытым. См. ниже.
Отредактировал(а) geyser (20-07-2009 14:41:44)
Оффлайн
Есть команда chr_animate для "анимации на заказ", например chr_animate(chelovek, KONCOMsuper_kick) заставляет чела с именем chelovek сделать Колесо Дьявола.
Попробовал очень забавно. А есть список анимаций? Ударов коноки, синдикатов, TCTF...?
"Что такое полуприсед, я не совсем понял. А вскрикивание при виде врага - это поведение происходит автоматически, и зачем тебе делать так, чтобы он шарахался "просто так"? "
Я неправильно выразился... Как заставить бота сесть или идти полуприсев, или выкинуть фразу типа (Может стоит попытаться), а вскрикивание например для роликов нужно, так как в этом режиме боты пассивны и автомитически они не чё не сделают.
Отредактировал(а) Smith (21-07-2009 15:24:03)
Оффлайн
Значит так, хотя это было и вне очереди, разбираюсь с вопросом Manticore об индексах и ответом doktordulit.
Manticore написал(а):
2) Существует список абсолютно всех функций и команд, существующих в Oni? Спасибо!
doktordulit написал(а):
Есть ещё соответствующие разделы на вики, от перечня переменных http://wiki.oni2.net/BSL:Variables до детального объяснения функций (например, http://wiki.oni2.net/BSL:Frustum_and_fog ), но если нужен более-менее полный справочник на одной странице - тогда да, пожалуй, на вики ещё нет аналога страницы с OniStuff. Можете поспособствовать, ведь вики-справочники - это очень важное и нужное дело.
Заодно скажу, что в данный момент буржуи добавляют в BSL много новых команд, так что некоторые ограничения, к которым мы привыкли, в скором времени могут исчезнуть: http://wiki.oni2.net/Daodan_DLL/Beta
Manticore написал(а):
1) "Каждый персонаж в игре имеет свой индекс (номер)" - где список этих номеров? Здесь его нет http://ssg.oni2.net/subfold/charas/charas.htm !
doktordulit написал(а):
1)- Он определяется по ходу игры.К примеру,на уровне есть:чел1,чел2,чел3,коноко.
Коноко спавнится ВСЕГДА первой,у неё индекс 0.
спавним чела1,у него индекс 1.
спавним чела2,у него индекс 2.
спавним чела3,у него индекс 3.
Дальше!Убиваем чела1,и его индекс становится свободным,но на мгновение,ибо его занимает чел2!
И щас расклад такой-коноко 0,чел2 1,чел3 2.Убиваем чела3,его индекс освобождается,и его никто не занимает ибо больше никого с большим индексом нет!И так далее...понял?
doktordulit прав в том, что индексы раздаются в порядке появления персонажей в уровне, а порядок этот меняется в зависимости от сохранки и нелинейного прохождения. Именно поэтому, Manticore, этих индексов не может быть ни в каких постоянных таблицах. В остальном doktordulit заблуждается: индексы персонажей ПОСТОЯННЫ. В твоём примере, doktordulit, после того как умер человек с индексом 1 (и окончательно превратился в труп - это важно! ), память его освобождается, но ни в коем случае не занимается ни одним из живых челов. Поэтому в памяти образуется пустая ячейка между Конокой и вторым челом, и если в уровень добавить ЧЕТВЁРТОГО чела, то у НЕГО будет индекс 1, а у второго с третьим индексы НЕ изменятся.
То есть важно понимать три момента: во-первых, индекс чела забит - ПОСТОЯНЕН - с того самого момента, как чела добавили в уровень. Это номер ячейки в памяти, в которую он угодил, и никуда он из неё не денется, разве что умрёт и исчезнет из памяти вообще. То есть если вы заспоунили кучу челов, и один из них оказался седьмым, то он и ОСТАНЕТСЯ седьмым, пока не помрёт. А то, что сказал doktordulit - неправда.
Второе - свежедобавленный чел кладётся в ПЕРВУЮ СВОБОДНУЮ ячейку памяти. Если было занято семь ячеек (плюс Конокина - нулевая), и из них ни одна не опустела, то новый чел будет челом номер 8. Если же к тому времени, как его добавляют, опустела ячейка номер 3, то этот новый чел станет номером 3, а не 8. Такая вот перетасовка.
Третье - при каких обстоятельствах освобождаются индексы (ячейки)? Во-первых, индекс освобождается сразу, если чела грубо удалить через chr_delete. Во-вторых, индекс освобождается если чел умер - но НЕ СРАЗУ, а после того, как он благополучно стал ТРУПОМ - а это происходит, как правило, после того, как мёртвый чел "надолго" пропадает из поля зрения камеры (в случае камеры игрока - отвернуться мало, иногда приходится удалиться и/или попрыгать).
Чему нас это учит? тому, что если у нас было много челов, и мы кое-кого поубивали, то состояние памяти - и значение первого свободного индекса, который будет назначен новому челу - вещи весьма неопределённые. Всё зависит от того, смотрим ли мы на "ещё тёпленьких" поверженных челов или нет, а если не смотрим, то как далеко мы от этих ещё-не-трупов отошли, и прыгали ли мы при этом. Вот такая в этом деле тонкость, и я о ней неоднократно на этом форуме распостранялся во всех деталях, причём последний раз был буквально совершенно недавно, вот здесь: Интелект
Вот. Для полноты картины отвечаю ещё и на дополнительный вопрос Manticore.
Manticore написал(а):
Код:
func void level_start(string ai_name) { dprint func_void_start if (my_save_point eq 1) { dprint restore_game_1 set_objective_1 ai2_spawn Barabus chr_location Barabus 10 200 0"chr_location Barabus 10 200 0" - вместо индекса я написал имя, но так не работает! Почему? Можно имя вписывать, а не индекс?
Говорят же тебе, что chr_location работает с индексом, а не с именем. Значит, имя не покатит, как бы ты этого не хотел. Тут всё очень строго, уж извини.
Manticore написал(а):
А если мне надо спавнить 20-ого страйкера и переместить его в точку x, мне что, отсчитывать какой у него номер?
Да, индекс надо угадывать, причём (см. выше) он будет зависеть от всей предыстории споунов и смертей (точнее, окончательных превращений в трупы), и за всем этим надо следить. Это довольно сложно. Гораздо проще - принять меры, чтобы индекс челов был известен заранее: например, можно предотвратить превращение чела в труп командой chr_death_lock(chelovek, 1), а потом в некий удобный момент сделать ему chr_full_health(chelovek) и сразу chr_delete(chelovek). Таким образом ты сам выбираешь, когда именно челы исчезают из памяти, и какие именно ячейки они освобождают для новых споунов.
Manticore написал(а):
Я посмотрел список команд и как я понял, нельзя назначить персу конкретный стиль боя, то есть указать "бить только руками или все время активировать дрожь земли" и т.д. Это действительно нельзя? Жаль...
А вот с этим, Manticore, ты пропускаешь ход. Сам видишь, сколько в этой ленте накопилось вопросов без ответа, или по крайней мере без ответа, выверенного авторитетом.
Ещё раз скажу. Чтобу эту ленту было удобно читать как справочник, сообщения в ней должны быть по возможности строгие и сердитые. То есть никаких "вообще" и "допустим" и "я не помню но что-то вроде" и "часто замечаю такую фигню". Все должны приложить усилие к тому, чтобы обмен репликами был наиболее эффективным. Так что вопросы должны быть обдуманными и обоснованными, и ответы - разумеется - тоже. И спрашивающим, и отвечающим, рекомендуется использовать поиск и существующие справочники, а также проводить некоторое количество экспериментов, чтобы сказанное не было чистой теорией и/или словоблудием.
Оффлайн
Smith, извини, я потом до-отвечу на твои вопросы, а пока могу сказать только следующее. Анимации хранятся под кодом "Трям! здравствуйте" ( http://wiki.oni2.net/TRAM ), поэтому их довольно легко опознать после распаковки через ОниСплит, или например взять Эдишнский level0_Animations.dat, открыть его для просмотра как бинарный текст, и искать в нём строку "TRAM" - таким образом узнаешь имена всех-всех анимаций, даже тех, которые нельзя использовать с вызовом (оверлейные и прицельные вообще). Кроме того, база данных всех боевых приёмов есть тут: http://wiki.oni2.net/Gameplay/Combat_moves Имя колонки - это приставка, а полное имя анимации состоит из приставки и того хвоста, который фигурирует в клетках таблицы.
Информацию про полуприсед я добавлю в предыдущий пост, а с остальным тебе придётся подождать. Советую тебе чуть-чуть подумать и внести некоторую ясность в своё сообщение (можешь прямо его и редактировать): что такое "выкинуть фразу типа (Может стоит попытаться)", например? "Выкинуть" - это значит что её надо отменить и выкинуть из игры, или наоборот, изловчиться вызвать вне очереди? Кстати, "может, мне стоит попытаться" - это до ужаса кривой перевод фразы "maybe I should start trying", которая дословно означает "наверно, мне пора бы рвение прикласть". Смысл в том, что он якобы дерётся в полсилы, и дразнится, что вот-вот развяжет себе руки и размажет противника по стенке. Ну а русский перевод, ессессна, мимо, аж стыдно как.
AWP_Mega написал(а):
мой вопрос:какими командами гейсер сделал так,чтоб при определенном убийстве противников(как в ОТА)срабатывала следующая функция,скажем(как в ОТА) набрал я 20 фрагов,и win,и т.д.Думаю многим интересно,лень самому искать в скриптах,не зря же тему создали
"Думаю многим интересно,лень самому искать в скриптах,не зря же тему создали"
Ну уж нет, тему я создавал для кого угодно, только не для ленивых. А совесть?
Я буду "сенсеем" только в меру того, что вы сами будете - хорошими учениками.
В OTA я функцию win не вызываю никогда: переход на следующую арену из цикла происходит непрерывно, без выхода из игры вообще.
Там по сути есть одна сложная функция Death, которая вызывается из циклов RespawnPlayer, каждый раз, когда какой-либо чел умирает:
func void Death(string ai_team, string ai_name, string ai_nick) { dmsg(" "); dmsg(ai_nick); RandDead(); chr_pain(ai_name, death); if(ai_team ne Konoko and ai_team ne Syndicate) { dmsg(" "); dmsg("WHO CARES?"); } if(ai_team eq Syndicate) { cinematic_stop(BOSS1talking, 16, 30) friend_sc= friend_sc + 1 friend_lt= friend_lt - 1; if(friend_lt eq 0) dmsg " " friend_xl= friend_xl + 1; enemy_xl= 0 friend_ld= enemy_lt - friend_lt dmsg "[b.FISH]" if(friend_lt < 6 and enemy_lt > friend_lt) LeftMess(Konoko, friend_lt) else if(friend_ld eq 0 or friend_ld eq 1) LeadMess(Konoko, friend_ld) else ExcelMess(Konoko, friend_xl) } if(ai_team eq Konoko) { cinematic_stop(KONtransform, 15, 30) enemy_sc= enemy_sc + 1 enemy_lt= enemy_lt - 1; if(enemy_lt eq 0) dmsg " " enemy_xl= enemy_xl + 1; friend_xl= 0 enemy_ld= friend_lt - enemy_lt dmsg "[y.FISH EATERS]" if(enemy_lt < 6 and friend_lt > enemy_lt) LeftMess(Syndicate, enemy_lt) else if(enemy_ld eq 0 or enemy_ld eq 1) LeadMess(Syndicate, enemy_ld) else ExcelMess(Syndicate, enemy_xl) } if(chr_is_player(ai_name)) { dmsg " " dmsg "[b.FISH] :" PrintScore(friend_sc) dmsg "[y.FISH EATERS] :" PrintScore(enemy_sc) } ArenaWeaponModerator(enemy_sc + friend_sc); }
из которой всё должно быть ясно. Неясно? тогда спрашивайте, но только чур строго и сердито, по существу.
doktordulit написал(а):
Я не помню но что-то вроде этого-
Код:
func who_win(void) { if(fragse eq 20);fork fwin if(fragsf eq 20);fork ewin }
Не обижайся, doktordulit, но ведь это полная лажа. Во-первых, почему ты поставил точку с запятой между if и fork? и во-вторых, какой смысл имеет функция who_win? кто её вызывает и по какому поводу?
Оффлайн
И так, вопросики:
1. Как сделать так, чтобы команда "ai2_movetoflag" при каких-то внешних факторов не отменялась а откладывалась (например бежит гриффин к флагу, увидел синдиката... прикончил его, и дальше побежал к флагу) а то я пропишу "ai2_movetoflag" и любой даже шум сбивает перса. ( например от выстрелов шум).
2. Программой OniUnPacker, я из 19 уровня вытащил файлы TRAM, и сохранил в отдельную папку, как глобализировать эти файлы или засунуть их например в 2 уровень???
3. В той же программе OniUnPacker я открыл ресурсы 19 уровня ONCC как я понял в ресурсах собрана инфармация о каждом персонаже. Вот например открыл код файла "TCTF_swat_blackops_1.ONCC". На сайте "http://wiki.oni2.net/ONCC" посмотрел какая строчка за что отвечает.
И мя интересует вот что! возьмём строчку: "0xC50:"
Отдельно в этой строке рассмотрим значение: "C8 00 00 00" - это значение отвечает за здоровье персонажа в конкретном случае оно равняется 200 единиц. (Базовая жизнь коноки). "C8" это 200, например FF получается должно быть наибольшим здоровьем, так если я меняю другие числа (соседние нули) то показатель жизни устанавливается повторно но жизнь не добавляется. Вопрос! за что они отвечают??? Больше 255 единиц мне неудаётся установить, так как жизнь устанавливается по паре чисел.
Как поставить например 600 ед. жизни??? На уровне кода ессна!
И кстати в описании персонажей у гриффина указано 200 ед. жизни. А в коде ONCC написано 100 ед. Почему так?
4. Я хочу изменить характеристики Blackops SWAT, а именно такие:
A) например увеличить скорость выполнения комбы "comb_p_p_p" так, чтобы например фурия немогла эту комбу прервать! (аналогично и с comb_k_k_k)
B) Ещё чтобы AI чёрного TCTF сооброжал побыстрее, например Blackops_swat начинает делать комбу ногой, а фурия уже увернулась от этой атаки, а балбес Blackops_swat, продолжает комбу. Нужно чтобы он прерывал в нужный момент атаку.
После каждой атаки он тормозит, 1 - 1,5 сек. стоит. Нужно повысить реакцию на происходящие события в битве !!
Где эти параметры, я ищу но конкретно немогу найти, могбы Гейсер подсказать пожалуйста! Скорректировать меня так-сказать.
5. Каким образом открыть ресурсы "MELE", просто на страничке увидел описание - "http://wiki.oni2.net/OBD:BINA/OBJC/MELE" где эти ресурсы находятся????
6. В ONCC можно изменять характеристики моделей например: "TCTF_swat_blackops_1", "elite_hard_1", "thug_wh_1", "striker_hard_2" - а где менять характеристики конкретных персонажей????
Отредактировал(а) Smith (22-07-2009 15:32:19)
Оффлайн
0a. По-моему, Smith, до тебя очередь по второму кругу ещё не дошла.
0b. Надо, например, с doktordulit разобраться: что там у него такого в скриптах, что присвоение оружия и боеприпасов не работает.
0c. Ну и чуть-чуть развить те вопросы, которые задал vitya.
1. С простой командой "идти к флагу 42" это сделать нельзя. Можно сделать только с консолями или патрулями. Делаешь, например, самый простой патруль, из одного флага 29, без цикла вообще. Называешь этот патруль "flag_29".
<?xml version="1.0" encoding="utf-8"?> <Oni Version="0.9.30.0"> <ObjectCollection> <Object Id="8283" Type="PATR"> <Header> <Flags>0</Flags> <Position>-408.598755 60.1162872 -1402.20361</Position> <Rotation>0 0 0</Rotation> </Header> <OSD> <Name>goto_flag_29</Name> <PatrolId>42</PatrolId> <ReturnToNearest>0</ReturnToNearest> <Points> <MoveToFlag FlagId="29" /> <ScriptId ScriptId="42" /> </Points> </OSD> </Object> </ObjectCollection> </Oni>
Сохраняешь это в файл GdePopalo\BINACJBOPatrol Path.xml , потом делаешь onisplit -create GdePopalo GdePopalo\BINACJBOPatrol Path.xml и onisplit -import:nosep GdePopalo GdePopalo\level2_OBJC.dat
Кладёшь level2_OBJC.dat и level2_OBJC.raw в рабочую папку GameDataFolder(например, в Oni\Edition\GameDataFolder), а в скриптах Oni\Edition\GameDataFolder\IGMD\manplant пишешь следующее:
func main { ai2_spawn nookleft_thug_1 ai2_dopath nookleft_thug_1 goto_flag_29 ai2_setjobstate nookleft_thug_1 } func patrolscript0042 { dmsg "What now?" }
Кажется, что эта хреновина может сработать несколько раз, т.е. если чела отвлечь (или по пути, или после того, как он придёт к флагу 29 и спросит "What now?"), а потом уступить в бою или исчезнуть - то он в итоге снова направится к флагу 29 и снова спросит "What now?". Устойчивости этого поведения я не гарантирую, но на один раз должно хватить. Также замечу, что "movement mode" чела как правило меняется с форсированного бега на by-alert-level, а это значит, что если он вдруг успокоился (победил или потерял противника, например), то патруль он продолжит вразвалочку, а не бегом. Единственный способ это изменить - прописать ему в CHAR, чтобы он всегда суетился (либо он должен иметь привычку бегать, даже если не встревожен; либо его минимальный уровень встревоженности должен быть повышен).
1b. Бег к консоли ещё сложнее, т.к. для этого надо править CMBT. Я с этим совсем не экспериментировал, и о надёжности сказать ничего не могу. По идее эти настройки совсем не влияют на патрули и на бег к флагам, так что поле применения довольно ограничено. Однако рано или поздно надо продокументировать эту возможность и воспользоваться ей, например, в OTA.
2a. ПРИ ЧЁМ ТУТ СКРИПТЫ?
2b. OUP выдирает данные в довольно-таки немодулярном формате, поэтому вставить эти TRAM ты практически никуда не сможешь. Используй OniSplit. Сначала -export, потом -move, потом -import.
3a. ПРИ ЧЁМ ТУТ СКРИПТЫ?
3b. По адресу 0x12C хранится максимальная скорость вращения ИИ вокруг оси (его скорость мышки, так сказать). Наугад такие вещи менять нельзя, тем более, что это не целое число а "ай-яй-яй": http://ru.wikipedia.org/wiki/%D0%A7%D0% ... 1%82%D0%B8
В хексе менять значение таких вещей - противопоказано. Если уж на то пошло, OUP позволяет менять значение чисел через диалог "Value viewer", а вообще-то давно пора пересесть на OniSplit: -extract:xml для экспорта в текстовый формат XML, -create для импорта обратно в .oni
Я не понял, что такое "сделать TCTF очень быстрым (по анимации и AI) или тупым и очень медленным". Зато я понял, что к скриптам это вряд ли имеет какое-то отношение. Так что можешь не уточнять.
Оффлайн
Smith, имей совесть и пропусти пару ходов, а то такое впечатление, что до чужих вопросов дело не дойдёт никогда...
И зачем ты так радикально поменял суть вопроса 3? Придётся мне теперь отвечать заодно и на новый вопрос номер 3.
НИ ОДИН ИЗ ЭТИХ ВОПРОСОВ НЕ ИМЕЕТ ОТНОШЕНИЯ К СКРИПТАМ!!! Smith, очередное и почти последнее предупреждение
3a. Что такое "показатель жизни устанавливается повторно"? Не люблю, когда человек говорит что-то значимое, но так говорит, что понятно только ему одному.
Если бы ты послушался меня и пересел на OniSplit и XML, то у тебя бы этих проблем вообще не было: в XML вообще нет хекса, и любые числа можно править в явном виде.
Кроме того, в OUP есть диалог Value Viewer, где опять-таки можно явно вбивать новые значения чисел. Заодно поймёшь, как целые числа выглядят в хексе (Little Endian).
600 = 512 + 88 = 256 x 2 + 64 + 16 + 8
Нижний байт имеет значение 88=0x58, а во втором разряде по 256 (т.е. во втором байте снизу) имеем- 0x02. В Little Endian нижний байт идёт первым, итого: 58 02 00 00
3b & 6. В ресурсе BINACJBOCharacter указаны дополнительные хелсы конкретных персонажей, они добавляются к тем, что прописаны в ONCC. Кроме того, хелсы зависят от уровня сложности и настроек в ONGS.
4. Это не ко мне и вообще не сюда. Поставь Эдишн, там уже много таких изменений (пока что только в TRAM и ONCC, но есть еще специальный MELE-мод "Brutal Striker"). Изучи всё это (желательно в XML, а не в хексе), а потом поговорим.
5. "BINACJBOMelee Profile" в уровне 0, советую изучать в XML, т.е. через OniSplit, а не через OUP.
Оффлайн
geyser написал(а):
Бег к консоли ещё сложнее, т.к. для этого надо править CMBT.
это в плане?.. вроде бы по ai2_doalarm name number
чар бежит, пока не умрёт или не нажмёт, минуя все преграды. А нажав, ещё и вызывает соответствующую функцию, которая ещё и будет знать его имя. Или нужно было наоборот, научить чара отбиваться? +_+
Оффлайн
А через что запускать онисплит??? Как пользоваться есть где описание??
И кстати где можно задавать вопросы о ресурсах игры (BINA, ONCC...)?
Отредактировал(а) Smith (22-07-2009 17:45:42)
Оффлайн
Smith, выделенной ленты про ресурсы пока нет (или уже нет, вроде бы когда-то она была, но канула в Лету и/или была зафлужена). С другой стороны, многие ресурсы существуют неотделимо от скриптов, например поуровневые коллекции OBJC. Так что вопросы про CHAR, например, можешь смело задавать прямо здесь.
OniSplit удобнее всего запускать через командное окно (хотя многие избалованные пользователи с этим не согласны). Инструкция есть здесь: http://wiki.oni2.net/OniSplit Она сама неполная, и на русский целиком не переведена (тем более, что функциональность постоянно меняется, так что "целиком" - это непонятно что такое). Однако, используй Поиск, и ты найдёшь на этом форуме кучу лент, где обсуждается функциональность ОниСплита. Ищи, например, "OniSplit", "ОниСплит", "Oni Split" или "Они Сплит".
Мih@ написал(а):
geyser написал(а):
Бег к консоли ещё сложнее, т.к. для этого надо править CMBT.
это в плане?.. вроде бы по
ai2_doalarm namae number
чар бежит, пока не умрёт или не нажмёт, минуя все преграды. А нажав, ещё и вызывает соответствующую функцию, которая ещё и будет знать его имя. Или нужно было наоборот, научить чара отбиваться? +_+
"Или нужно было наоборот, научить чара отбиваться?" Да. Движок "отбивание" поддерживает, но настройки существующих CMBT эту функциональность не используют, см. вики. Ну а мы это в Эдишн тоже включать не торопимся, потому как всё это надо тестировать, а рук мало.
vitya написал(а):
я челу даю команду чтоб он бегал за мной, а он не бегает, чё дела?
Потом какой камандойможно узнать лакацию где ты находишся?
И последнее какой камандой можно зделать чтоб штатские не боялись пративников, а били их, и какой командойможно зделать чтоб штатские играли и за тебя и против тебя какими командами это можно зделать!
vitya, в следующий раз напишешь с таким количеством ошибок - пропустишь сразу два хода.
1. Есть как минимум два ответа, не считая тривиального "ответа вопросом на вопрос": какого хрена ты не предъявил вместе с вопросом ту команду, которую ты ему даёшь, "чтоб он бегал за мной"?
1a. Первый способ - регулярно говорить челу ai2_comehere(chelovek) или ai2_followme(chelovek). "Регулярно" - например, через рекурсивный цикл, повторяющийся раз в две секунды:
func FollowMe(string name) { ai2_comehere(name); sleep 120; fork FollowMe(name); }
1b. Второй способ - изучить параметры профиля NEUT, и настроить его так, чтобы чел за тобой бегал сколь угодно далеко, но не разговаривал. Если такой профиль существует и называется, скажем, PerfectSidekick, то ты можешь его присвоить из скриптов, вот так: ai2_neutralbehavior(chelovek, PerfectSidekick)
2.
Можно включить окошко с информацией в правом верхнем углу, вот так: chr_debug_characters=1
А можно вбить с консоли команду where или who, и посмотреть, что она напечатает.
3. У тебя почему-то два вопроса в одном, и не совсем ясно, что такое "и за тебя и против тебя". Во-первых, учёные женского пола дерутся так же, как Шинатама (то есть никак). А в Эдишне ещё хуже - штатские женщины (вообще все, а не только учёные) не умеют драться (это ошибка, и мы её исправим, а ты пока не удивляйся). В остальном ответ простой - команда ai2_noncombatant(chelovek, 0) отменяет панику, а команда ai2_neutralbehavior(chelovek, none) отменяет у чела профиль NEUT (разговоры и подарки). Ну и конечно, команда у штатского должна быть подобающая, т.е. chr_changeteam(chelovek, Neutral). После этого штатский будет гасить сапогами всех тех, кто до него докопается.
Оффлайн
У меня такой вопрос!
Я в финальной битве размножил муро, как зделать чтоб как токо всех мурзил замочиш будет мультик?
Взарание спасибо!
Оффлайн
doktordulit, ты разобрался с присвоением оружия и боеприпасов? chr_giveweapon и chr_givepowerup должны срабатывать безотказно, если ты не использовал ai2spawn(chelovek, force), конечно. Если у тебя несколько челов с одним именем, тогда эти команды будут применяться к первому челу с этим именем. Для раздачи оружия и припасов по индексу используй функции chr_weapon и give_powerup.
Новый вопрос от vitya: в последней битве и Муро, и Мурзилла, при смерти вызывают функцию . В этой функции прописана концовка с даодановым экстазом, но хочет отсрочить концовку до того, как будут убиты все до одного Мурзиллы и Муры.
vitya написал(а):
мне имено чтоб всех муренэско замочиш и мульт пойдёт мне так нужно пока у меня только это http://www.youtube.com/watch?v=kHcYx_MyG8g
Посмотри сам поймёш зачем мне это!
Mih@ написал(а):
vitya, обратный отсчёт. выставляешь переменной значение, равное количеству муров. в функции про смерть муры сначала отнимаешь из этой переменной единичку, а затем проверяешь, равна ли она нулю. если равна, значит, все муры убиты и можно делать то что надо делать.
Миха прав, но я думаю, придётся объяснить понагляднее. Допустим, у тебя 42 босса, и ты хочешь, чтобы концовка началась только тогда, когда они все умрут. Все они вызывают при смерти функцию outro().
Во-первых, находишь func void Outro (void) в файле compound_cutscene.bsl и переименовываешь её, например в func outro или func konec.
Потом где-нибудь в начале файла, например, compound.bsl заводишь целочисленную переменную too_many_bosses и кладёшь туда 42. Это делается вот такой строчкой: var int too_many_bosses=42;
Наконец, пишешь новую функцию Outro, которая будет вызываться после смерти каждого босса (вместо концовки) и уменьшать счётчик на единицу, а по достижении нуля - вызывать переименованную концовку outro.
func Outro { too_many_bosses = too_many_bosses - 1 if(too_many_bosses eq 0) outro }
Вот. И ещё, vitya, очередное замечание за ошибки, пунктуацию, злоупотребление смайлами и бестолковость. Имей совесть излагать свои мысли складно. Иначе нам влом с тобой разговаривать, неужели непонятно?
Оффлайн
Вот. И ещё, vitya, очередное замечание за ошибки, пунктуацию, злоупотребление смайлами и бестолковость. Имей совесть излагать свои мысли складно. Иначе нам влом с тобой разговаривать, неужели непонятно?
Предупреждение принето, но извините меня за грамотность она у меня очень страдает и не бесталковый ещё раз извините буду работать!
Отредактировал(а) vitya (25-07-2009 07:11:48)
Оффлайн
TESLA
Можно зделать заминив в ресурсах обычную музыку на свою и дав каманду в скриптах!
Оффлайн
@TESLA: Гм, это не совсем в тему, но советую прочитать вот эту ленту:
Насчёт своей музыки в Они (гм, не так уж она тебе поможет, пожалуй)
Была другая лента, где demos_kratos выложил свой результат (.dat).
Но эту ленту я сейчас не нахожу. Наверно, её удалила Злая Собака.
Оффлайн
Люди пожалуйста напишите мне скрипт на то чтобы в последнем уровне на битве с Муро было по 2 вида всех противников и союзников. То есть 2 сватовца, 2 элитных ниндзя, 2 фурии и тд. Если конечно это можно сделать. Я пока просто полный нубас в скриптовании и сам не умею ((
Оффлайн
TESLA написал(а):
Люди пожалуйста напишите мне скрипт на то чтобы в последнем уровне на битве с Муро было по 2 вида всех противников и союзников. То есть 2 сватовца, 2 элитных ниндзя, 2 фурии и тд. Если конечно это можно сделать. Я пока просто полный нубас в скриптовании и сам не умею ((
Можно,если срочно надо пиши в асю(или иди в учебник)сделаем,а если время не важно-можешь подождать кого еще..
Оффлайн
Мih@ написал(а):
интересно, что вообще эти вопросы делали в теме, где раскрыты первым постом. =\
Ну ивиняйте,А ВОТ еще не понял работу lock_keys,часто команда вообще не работает,ввожу я допустим lock_keys keys_jump(надеюсь хоть это правильно)причем более чем на 100% уверен,что должна работать и что я ее прописал "там где надо",и нифига...
Оффлайн
Продолжу короче тут
Я так и не понял,че за фигня с лок кей,причем всегда.Ввожу я допустим ПРОСТО lock_keys,и все отлично,клавиши заблокированы,но стоит мне дописать любой тип(keys_walk, keys_inventory, keys_action, keys_pause, keys_attack и т.д.)как команда вообще не выполняется
Оффлайн
Как мне сделать так, чтобы бот атаковал только меня (konoko)??. Например в последнем уровне!
"ai2_attack" - не помогает!
И как увеличить радиус обзора у бота??
Отредактировал(а) Smith (30-07-2009 12:31:54)
Оффлайн
AWP_Mega написал(а):
Я так и не понял,че за фигня с лок кей
контекст где? например, такой ряд: lock_keys
lock_keys keys_attack
lock_keys keys_jump
блокирует всё, кроме keys_attack (удары руками и ногами, стрельба, fire3) и keys_jump (прыжок); учитывая отсутствие keys_movement, это всё делается на месте.
если нужно разблокировать что-нибудь ещё (например, keys_crouch), дописывается соответствующая разблокировка: lock_keys keys_crouch
если же надо заблокировать что-то из имеющегося (например, keys_jump), пишется всё вместе и заново: lock_keys
lock_keys keys_attack
lock_keys keys_crouch
для блокировки только F1 (keys_pause), например, примерно такое: lock_keys
lock_keys keys_movement
lock_keys keys_jump
lock_keys keys_crouch
lock_keys keys_walk
lock_keys keys_inventory
lock_keys keys_reload
lock_keys keys_attack
lock_keys keys_hypo
lock_keys keys_action
но есть проблемка - специфичные вещи типа поворотов на месте (клавиатурой), lookmode, записи фильмов и проигрывания в них анимаций особых наименований не имеют и включаются только с keys_all.
Оффлайн
Так,значит для заблокирования всего одной клавиши надо ввести дофига типов?
Мдо не айс, и не дано было придумать типа такого:
lock_keys f1 или lock_keys jump
А в учебнике смотрю,введите lock_keys и какой-нить тип,и заблокируется,я так и понял
Вообщем то ответ именно на то,что мне нужно было, спасибо
Ну и:ai2_comehere persona}!{
ai2_followme persona}!{
Вообще рабочая?Кстати не разу не встречал этой команды в игре
З.Ы Чего по катсценам раздел не создашь?Не все же только в logic и main копаются
Отредактировал(а) AWP_Mega (30-07-2009 14:17:31)
Оффлайн
AWP_Mega написал(а):
А в учебнике смотрю,введите lock_keys и какой-нить тип,и заблокируется,я так и понял
Мih@ написал(а):
lock_keys [клавиши]
Блокирует/разблокирует определённые клавиши, используемые игроком. Блокирует при отсутствии аргументов, разблокирует следующие типы: keys_reload, keys_hypo, keys_walk, keys_inventory, keys_action, keys_pause, keys_attack, keys_crouch, keys_jump, keys_movement. Для разблокирования всего сразу - keys_all.
имхо ясно. блок без аргументов, разблок поэлементно. уж как есть, зато всё в одной функции с 1 аргументом, а не в lock/unlock или 0/1. есть предложения, как это переформулировать, если неочевидно?
AWP_Mega написал(а):
Ну и:ai2_comehere persona}!{
ai2_followme persona}!{
"}!{" - это буква такая? ну дубль три:
Мih@ написал(а):
ai2_comehere [персонаж]
ai2_followme [персонаж]
Посылают персонажа идти к точке, где стоял игрок на момент вызова этой функции. ai2_followme должна была бы регулярно уточнять текущее расположение игрока, но не делает этого из-за небольшой скосяченности. Для не самых замороченных случаев можно воспользоваться аналогом типа:
var bool follow;
func followme(string ai_name, int step)
{
ai2_comehere(ai_name);
sleep(step);
if(follow) fork followme(ai_name,step);
}
Где follow=1; followme [персонаж] [период обновления координат] позволяет включить следование, а follow=0; - выключить.
работают идентично и только когда вызвали.
AWP_Mega написал(а):
Кстати не разу не встречал этой команды в игре
в оригинальных скриптах много чего не используется. особенно команды, предназначавшиеся для консольного дебага. )
AWP_Mega написал(а):
З.Ы Чего по катсценам раздел не создашь?Не все же только в logic и main копаются
тематически - что такое "по катсценам"? оригинальные _cutscene файлы (как и другие) ввиду ни разу не имеются и по этому принципу разделения никогда не будет. сам вызов катсцен и практически все составляющие begin_cutscene есть. содержимое оригинальных катсценовых скриптов в большинстве своём состоит из очень локализованных вещей (проигрыш фильмов, пути камер, комбинации частиц, которые мало применимы без предварительного создания новых сцен на уровне ресурсов). то же самое касается и _particle_scripts. дополнения в пособия ведутся в порядке надобности и практической применимости, и я сразу писал, чтобы темы, требующие раскрытия там, назывались сразу. что было проигнорировано. поэтому добавления и шли в том порядке, который хорош в моём представлении. -_- следующими по планам были партикли и ещё пара мелочей.
Оффлайн
Тааааааак...
Люди пожалуйста напишите мне скрипт на то чтобы в последнем уровне на битве с Муро было по 2 вида всех противников и союзников. То есть 2 сватовца, 2 элитных ниндзя, 2 фурии и тд.
Да времени примерно неделя.
Люди так что там с моей просьбой? Неделя уже прошла... Даж больше....
Вообще-то я, когда создавал тему, как-то не рассчитывал на то, что мне, Михе, и другим гуру придётся выполнять чужие заказы.
Мы готовы научить тебя скриптить, но требовать от нас "продукта" - это немного не то. И потом, что такое "и тд"? Я не врубаюсь.
Если бы ты имел некоторое уважение к своим учителям, то ты бы за эту неделю хотя бы подумал о своей "просьбе" и сформулировал её почётче. В последней битве с Муро участвуют 2 сватовца, 2 фурии и 2 элитных страйкера. Плюс одна Майка, один Муро, один Гриффин, и один нинзя. Так кого ты хочешь продублировать?
Оффлайн
TESLA написал(а):
Всех и многократно. А за скриптами у меня времени нету сидеть. Работа еще есть кроме компа...
А у других что, есть время??
Добавлено спустя 4 минуты 3 секунды:
Я знаю команду "ai2_makeignoreplayer" - игнорирует игрока (коноко)! Какая команда есть, чтобы бот игнорировал другого бота??
И как насчёт моего предыдущего вопроса??
Оффлайн
2Smith
2) поменяй другому боту "Team"
chr_changeteam [ai_name:string | script_id:int] team_name:string имена "Team"ов: Konoko, TCTF, Syndicate, Neutral, SecurityGuard, RogueKonoko, Switzlerland, SyndicateAccessory
1) (а)
ai2_attack escho_odna_svoloch 0
сие должно работать если "Team" бота escho_odna_svoloch враждебна твоей. (если не менял свою "Team", то Syndicate - вполне универсальное решение.)
(б)
ты с напарниками, и ты хочешь чтобы бот атаковал только тебя и напарники его не трогали?
где-нибудь в начале файла:
func restoration { chr_wait_health escho_odna_svoloch 0 chr_changeteam naparnik1 Konoko chr_changeteam naparnik2 Konoko }
и, собственно в месте, где должна происходить драка
...... ai2_spawn escho_odna_svoloch chr_changeteam naparnik1 Neutral chr_changeteam naparnik2 Neutral ai2_attack escho_odna_svoloch 0 fork restoration ......
должно работать, если я тебя правильно понял.
Отредактировал(а) demos_kratos (09-08-2009 12:29:16)
Оффлайн
Это не совсем то что нужно, но всё равно спс! Синдикат в последн. битве должен атаковать только меня! Этого он не делает, как не прописываю.
Менять теам не вариант, получтся что и ТСТF меня колбасить будет!
Оффлайн
demos_kratos написал(а):
сие должно работать если "Team" бота escho_odna_svoloch враждебна твоей.
ai2_attack не зависит от принадлежности чаров к командам. просто будет атака без коллизий (только броски). другое дело, что поведение бота может измениться по ситуации.
Smith написал(а):
Менять теам не вариант, получтся что и ТСТF меня колбасить будет!
а если ещё раз вспомнить про ai2_makeignoreplayer?
Оффлайн
2Smith
а если убрать их нахек, TCTF'фовцев?
Оффлайн
Мih@ написал(а):
demos_kratos написал(а):
сие должно работать если "Team" бота escho_odna_svoloch враждебна твоей.
ai2_attack не зависит от принадлежности чаров к командам. просто будет атака без коллизий (только броски). другое дело, что поведение бота может измениться по ситуации.
Smith написал(а):
Менять теам не вариант, получтся что и ТСТF меня колбасить будет!
а если ещё раз вспомнить про ai2_makeignoreplayer?
Тогда фурий перестанут бить TCTF !! Так как заставить конкретно бота атаковать только коноку, не кого не удаляя и неменяя теам, а то каша получится! например при режиме ai2_passive ... команды тоже не работают хотя всех игнор. и т. д.
Я изменил ситуацию в свою пользу, изменив функцию:
func void wait_to_help(void)
{
chr_wait_health Muro 500
..............................................
Синдикат меня атакует, 2 Swat мочат фурии!) Правда гриффин всёравно не слушается) Желает набить морду Муро!
Но всё же хотелось сделать по нормальному, прописав для одного бота нужные команды!
Оффлайн
Smith, посмотри, какая каша получилась из ленты только из-за того что ты неточно поставил задачу. Верх твоих мечтаний - чтобы TCTF-овцы метелили Синдикатовцев, а синдикатовцы всё это терпели? То есть чтобы враги сосредотачивались на тебе, в то время, как их лупят твои напарники? Так ведь?
В чём смысл? Я вижу некое искусственное разделение обязанностей, но не понимаю, что это меняет. Принципиально ли тебе, чтобы эта диковатая логика работала, как часы? Что она тебе вообще даёт? Почему врагам надо отсекать самозащиту? Допустим, это тебе чуть-чуть усложняет задачу, но не так, как если бы ты убрал TCTF-овцев "нахек"... То есть ты имеешь задачу промежуточной сложности и повышенной тупости (ведь враги, игнорируя твоих напарников, подвергаются броскам, подсечкам, добиваниям, и прочим гнусностям).
Я бы на твоём месте (да и на месте Михи и демоса_кратоса) разобрался со спецификой финальной битвы.
И вообще, по скольку я выбираю, как и на что отвечать, я именно эту тему и разовью, с вашего позволения.
Давайте разберёмся в том, как работает система выбора противников в финальной битве. Это поучительно.
Есть две фазы: сначала здоровье Муро вьше 200; потом оно становится меньше или равно 200 (wait_to_help).
Что имеем в первой фазе? В первой фазе включен многозначительный движковый флажок ai2_boss_battle.
А это значит три вещи.
Во-первых, боссы (челы с соответствующим флажком в CHAR, в данном случае - Муро) сосредоточены на игроке.
Во-вторых остальные враги, т.е. не-боссы (без флажка в CHAR), наоборот, игрока игнорируют - если имеют выбор.
Т.е. если ai2_boss_battle так и останется true, то Муро будет лупить только Коноку, а TCTFовцам - ноль внимания.
А Муркина свита переключится на Коноку только тогда, когда не сможет выбрать себе противников из сватовцев.
Таким образом, пока флажок включен, не имеет смысла давать им приказ атаковать Коноку: приказ проигнорируют.
В третьих, нормальные персонажи игнорируют боссов (т.е. в данном случае Гриффин и сватовцы игнорируют Муро).
Поэтому в этой, первой фазе, бессмысленно давать Гриффину приказ атаковать Муро - приказ будет проигнорирован.
С другой стороны, что мы имеем во второй фазе? Флажок убирается, и все персонажи выбирают противников свободно.
Точнее, не совсем. Муро во второй фазе свободен драться с Гриффином или сватовцами, на что бывает забавно смотреть.
Но напарники Муро - если они живы - сразу после обретения полной свободы выбора получают приказ атаковать Коноку.
func void wait_to_help(void) { chr_wait_health Muro 200 dprint MURO_IN_DANGER ai2_boss_battle = 0; muro_in_danger = 1; ai2_attack GrifElite01 char_0 ai2_attack GrifElite02 char_0 ai2_attack GrifElite03 char_0 ai2_attack GrifElite04 char_0 ai2_attack GrifElite05 char_0 ai2_attack GrifElite06 char_0 }
Таким образом напрашивается два решения твоей проблемы, Smith. Ведь вторая фаза - это то, что тебе надо, разве не так?
Первое решение. Дать приказ всем врагам атаковать игрока. Приказ можно для верности повторять через несколько секунд.
Главное, чтобы на момент этих приказов к атаке был выключен флажок ai2_boss_battle, иначе он аннулирует приказы.
Второе решение. Использовать, наоборот, первую фазу, т.е., включить ai2_boss_battle. Но - сделать всех врагов боссами.
Правда гриффин всёравно не слушается) Желает набить морду Муро!
А вот насчёт Гриффина - первый раз слышу... Чего тебе от него надобно? Чтобы он игнорировал Муро? а почему это важно?
Твоя интуиция насчёт func wait_to_help, в общем, правильная. Но я надеюсь, что я не зря вдался в подробности про боссов.
Ты хочешь, чтобы все враги лупили только тебя и игнориривали твоих напарников. Это-то сделать довольно просто.
Но нет простого способа сделать так, чтобы при этом твои напарники игнорировали Муро, а остальных врагов били.
Почему? Потому, что игнорирование боссов - это часть режима "boss battle", который либо включен, либо выключен.
И включение режима подразумевает, что босс дерётся с тобой один на один а все остальные челы вас игнорируют.
Вот, я тебе объяснил, как оно работает и почему, а уж если тебе это не нравится и хочется чего-то левого - удачи.
Оффлайн
Но - сделать всех врагов боссами - как это сделать???
1. И напарников мне трогать не нужно! Я телепортировал синдиката на крышу к муро, и хочу чтобы он атаковал только меня, так как у TCTF и без того фурии!
Спасибо, как всегда за подробное, полное обяснение, гейсер!
2. И ещё, как всётаки повысить дальнозоркость ботам а то, в последней битве TCTF и Синдикаты за 30 шагов не видят друг друга, напрягает! В каких ресурсах копаться, чтобы отрыть код отвечающий за это характеристику (дальнозоркость)??! Ну или каким-нибуть другим путём пойти, ну незнаю, например: если бот (TCTF) неактивен, то заставить его атаковать всех синдикатов, которые есть на данной локации! Или что-то в этом роде)
3. А вот ещё: что нужно удалить чтобы игра после смерти муро не заканчивалась???
Пробовал удалить :
func void you_win(int char_index)
{
outro
win
}
не помогло...
Отредактировал(а) Smith (10-08-2009 20:01:20)
Оффлайн
сделать всех врагов боссами - как это сделать?
Пока что только через редактирование ресурса BINACJBOCharacter. В скором времени боссовый флажок можно будет менять из скриптов.
Спасибо, как всегда за подробное, полное обяснение, гейсер!
Гм, а ты-то когда научишься задавать вопросы так, чтобы мне не приходилось переспрашивать?
И напарников мне трогать не нужно! Я телепортировал синдиката на крышу к муро, и хочу чтобы он атаковал только меня, так как у TCTF и без того фурии!
Как ты считаешь, этот поток сознания кому-нибудь может быть понятен, кроме тебя самого? Не знаю кому как, а мне влом сушить моги над тем, что ты мог бы иметь в виду. Изволь сформулировать, на языке предельной ясности, кто у тебя где находится, что делает и зачем.
В каких ресурсах копаться, чтобы отрыть код отвечающий за это характеристику (дальнозоркость)?
ONCC. Как правило челы видят не дальше 47,5 метров, боковым зрением - не дальше 15. Исключение - снайпер (видит до 120 метров). Плюс близорукие цивилы, охранники, и те TCTFовцы, которые не сватовцы: все эти классы видят не дальше 25 метров. В твоём случае вроде бы только сватовцы, так что поле зрение должно быть 47,5 метров, боковое - 15, как обычно.
Если хочешь, чтобы челы после битвы с большой вероятностью находили новых противников, надо позаботиться не только о их зрении, а ещё об их поведении по умолчанию. Надо, чтобы после победы над врагом они не успокаивались и не стояли как дундуки (уставившись, возможно, в ту сторону, где врагов нет и не будет), а оставались в боевой готовности и соответственно крутились вокруг осей, высматривая врагов. Все эти настройки хранятся опять же в ресурсе BINACJBOCharacter. Я в некотором смысле развил эту тему, когда отвечал тебе же, насчёт третьего напарника (переодетого Страйкера) во второй главе.
если бот (TCTF) неактивен, то заставить его атаковать всех синдикатов, которые есть на данной локации
"Атаковать всех" нельзя, но можно периодически напоминать челу о врагах, через команду ai2_makeaware. Детектировать "неактивность" - сложно, но можно - опять же через BINACJBOCharacter. Можно дать челу в качестве "работы" патруль, состоящий всего лишь из вызова скриптовой функции patrolscript0042. Таким образом, как только челу будет нечего делать, ты об этом сразу узнаешь.
что нужно удалить чтобы игра после смерти муро не заканчивалась?
Невнимательно относишься к чужим просьбам, а ведь лента не такая ещё и длинная. Аналогичный вопрос задал vitya, и получил исчерпывающий ответ: Задачник по скриптированию: вопросы и ответы.
Оффлайн
А про "patrolscript0042" можно чуть по-подробнее?! 0042 это что? индекс скрипта? И как прописывать, и как он будет патрулировать, на чём опираясь, на каких флагах??
Так что даёт - "ai2_makeaware GrifOps03 GrifElite04" ?? Ничего не произошло! Вот написал:
func void opsi(void)
{
chr_wait_health GrifElite03 0
sleep 150
ai2_makeaware GrifOps03 GrifElite04
sleep 25
ai2_makeaware GrifOps02 GrifElite04
sleep 12
ai2_makeaware Griffin GrifElite04
}
Так, что конкретно команда даёт??!
"ai2_noncombatant" - что эта за команда??
"ai2_takecontrol" - а что это команда означает??
Отредактировал(а) Smith (11-08-2009 16:04:37)
Оффлайн
хорошо сдружившись с английским (или на худой конец воспользовавшись гугл.транслейтом) за командами сюда - http://ssg.oni2.net/commands.htm
Оффлайн
demos_kratos написал(а):
хорошо сдружившись с английским (или на худой конец воспользовавшись гугл.транслейтом) за командами сюда - http://ssg.oni2.net/commands.htm
Транслейт корявый, а по сдвум словам, смысл команды не оч. понятен! Есть команды в которых дословный смысл, и при переводи уже ясно например: follow me и.т.д. я конкретно спрашиваю!)
Оффлайн
ai2_takecontrol вообще то тоже понятно что игра берет под контроль игрока,например используется в катсценах
Оффлайн
Smith, имей совесть, юзай Поиск. ai2_noncombatant уже неоднократно освещалась на форуме, в том числе в данной ленте:
Задачник по скриптированию: вопросы и ответы.
Вопросы по написанию игровых скриптов
ai2_takecontrol кое-как освещён в Михином пособии, давно пора привыкнуть туда заглядывать:
Oni Scripts: FAQ-пособие
ai2_makeaware chelovek1 chelovek2 сообщает челу chelovek1 о том, что есть такой chelovek2, и где он находится.
Не факт, что после этого чел 1 побежит бить морду челу 2. Если враг далеко либо за углом, то враг может быть забыт.
Но вообще-то твоя функция opsi должна работать (если ты не забыл её вызвать, конечно - этот факт надо проверить).
Если "ничего не произошло", то у меня нет достаточной информации о проблеме. Важен контекст и ожидаемый эффект.
С GrifElite03 кто дерётся? по идее GrifOps02. На момент смерти GrifElite03 Гриффин и GrifOps03 могут быть слишком заняты с GrifElite02, чтобы переключаться на GrifElite04. И даже GrifOps02, если GrifElite02 ещё жива, может побежать к ней, а не к GrifElite04 - просто потому, что она ближе.
В любом случае, после того, как GrifOps02 победил GrifElite03, он какое-то минимальное время будет над ней стоять (типа чтобы удостовериться, что она не встанет). Возможно, это время можно как-нибудь отрегулировать, но я этим вопросом пока не интересовался.
про "patrolscript0042" можно чуть по-подробнее?! 0042 это что? индекс скрипта? И как прописывать, и как он будет патрулировать, на чём опираясь, на каких флагах?
Патруль может быть и без флагов, например он может состоять из одного-единственного "уэйпойнта" - вызова скриптовой функции patrolscript0343. Для этого уэйпойнт должен быть типа 21, с параметром 343. Далее, если индекс этого патруля есть, например, 49, то и в CHAR челу тоже надо поставить номер патруля 49, и заодно сделать так, чтобы типом "работы" чела (после победы над очередным врагом, например) был "patrol", т.е. 3.
http://wiki.oni2.net/PATR
http://wiki.oni2.net/OBD_talk:BINA/OBJC/PATR
http://wiki.oni2.net/CHAR
http://wiki.oni2.net/OBD_talk:BINA/OBJC/CHAR
Оффлайн
1. Неподскажете как называется анимация отвечающая за кувырки (вперёд, назад, влево, вправо...)
Прыжки (обычные, и с ударом) а то найти немогу, например у GrifOps????
2. И как правильно набирать команду "ai2_panic" - а то я набрал так, что из игры вылетел!
3. И как сделать так чтобы бот к флагам бегал последовательно!, тоесть когда добежит до первого флага, останавливался и бежал к другому флагу, а то когда пропишешь флаги он одновременно всё выполняет, ставить паузы sleep тоже не вариант, как поступить??!
4. И как сделать так, чтобы один бот бегал за другим типо follow me только применимо для бота?
5. Как заставить бота повернуться на определённый угол?? Скажем смотрит он вперёд, и заставить его развернуться на 90 градусов?! (Что б бот в ту или иную сторону бот посмотрел)
Отредактировал(а) Smith (18-08-2009 11:24:10)
Оффлайн
Smith написал(а):
1. Неподскажете как называется анимация отвечающая за кувырки (вперёд, назад, влево, вправо...)
Прыжки (обычные, и с ударом) а то найти немогу, например у GrifOps????
Тебе нужно расширение анимации или ее точное название?TRAC спасет мир
Smith написал(а):
Как заставить бота повернуться на определённый угол?? Скажем смотрит он вперёд, и заставить его развернуться на 90 градусов?! (Что б бот в ту или иную сторону бот посмотрел)
chr_facetoflag [кто] [на какой флаг смотрит] команда поворачивающая бота или игрока к определенному флагу,или заспавни тело и скомандуй ai2_lookatchar [кто смотрит] [на кого],главное не забудь тело телепортировать и удалить
Smith написал(а):
4. И как сделать так, чтобы один бот бегал за другим типо follow me только применимо для бота?
follow me типа не для бота???Если хочешь чтобы 0 шел за кем то,то пусти по ближлежащим флагам обоих персов
Smith написал(а):
3. И как сделать так чтобы бот к флагам бегал последовательно!, тоесть когда добежит до первого флага, останавливался и бежал к другому флагу, а то когда пропишешь флаги он одновременно всё выполняет, ставить паузы sleep тоже не вариант, как поступить??!
Чем собственно слип не устраивает?Как мне известно только он и спасает,можно вилочки пристроить
Отредактировал(а) AWP_Mega (18-08-2009 12:13:07)
Оффлайн
Спасибо! Но вот я ещё столкнулся с такой проблемой. Я написал скрипт, и вот какой должен быть сценарий:
После смерти Муро (левл 19) в комнате появляется GrifOps01 (незадействованный персонах в игре), соответственно он выбегает из комнаты и бежит к флагу! Впринципе всё! (Ну ещё пару нюансов).
Но я его телепортирую не на флаг, а по осям x,z,y (так как в комнате флага нет). Поятому приходится пользоватся командой chr_location index (X Z Y). Вот в "телепорте" и проблема, так как телепортируешь не конкретного персонажа а его номер!! А номер то меняется в зависимости от остальных персонажей, если до появления GrifOps01 было 3 чела, то индекс 4 будет у GrifOps01, если 1 чел, то соответственно 2-ой индекс и. т. д. В конкретном случае, можно рассмотреть три случая:
Первый: Griffin + GrifOps02 + GrifOps03 - живы!! (То есть все)
Второй: Griffin + GrifOps02 - живы!! (мертв только один TCTF)
Третий: Griffin - жив!! (два мертвых TCTF)
Мне нужно связать все три случая, что бы индекс телепортируемого персонажа менялся в зависимости от выживших и не выживших ботов!!!
Как это сделать????!
Оффлайн
Муро ведь полюбому сдохнет,да?
Так сделай его индекс 1,чтоб когда он умер,ты спавниш Опса,и его индекс будет 1.Все
Оффлайн
doktordulit написал(а):
Муро ведь полюбому сдохнет,да?
Так сделай его индекс 1,чтоб когда он умер,ты спавниш Опса,и его индекс будет 1.Все
Неполучится, его место занимают живые челы - гриффин, опсы другие...
И кстати почему у мя не работает вот этот скрипт??
на первый телепорт смотрит а на второй нет(((
ai2_spawn C_Sb75
chr_location 2 -297.720428 1485.000000 -2700.470215
ai2_lookatchar GrifOps03 C_Sb75
chr_delete C_Sb75
sleep 80
ai2_spawn C_Sb75
chr_location 2 -302.004272 1485.000000 -2647.752441
ai2_lookatchar GrifOps03 C_Sb75
chr_delete C_Sb75
Отредактировал(а) Smith (18-08-2009 16:02:19)
Оффлайн
попробуй форсануть C_Sb75 при втором вызове.
Отредактировал(а) demos_kratos (18-08-2009 16:25:18)
Оффлайн
попробуй перед каждой строчкой второго этапа поставить конструкцию вида
dprint WTF1 sleep 300
для следующей строки WTF2 и т. д. соответсвенно. при выполнении скрипта смотри на консольный вывод. после какого либо из WTF-ов вылетит блам. после какого именно запостишь сюда.
как альтернативный вариант - можешь расковырять OniSplit'ом BINACJBOCharacters.oni и допихать туда дополнительных "Dummy" ботов.
Отредактировал(а) demos_kratos (18-08-2009 16:48:07)
Оффлайн
demos_kratos написал(а):
попробуй перед каждой строчкой второго этапа поставить конструкцию вида
Код:
dprint WTF1 sleep 300для следующей строки WTF2 и т. д. соответсвенно. при выполнении скрипта смотри на консольный вывод. после какого либо из WTF-ов вылетит блам. после какого именно запостишь сюда.
как альтернативный вариант - можешь расковырять OniSplit'ом BINACJBOCharacters.oni и допихать туда дополнительных "Dummy" ботов.
Странно я всё логично и правильно прописал, почему не срабатывает?? А главное только первый телепорт срабатывает почемуто, индекс пробовал менять, персонажей, бестолку...
Но в BINACJBOCharacters.oni не хочу слишком простая процедура, что б вдаваться в ресурсы они)...
Отредактировал(а) Smith (18-08-2009 17:07:29)
Оффлайн
так после какой команды вылетает? ты пробовал других ботов вместо C_Sb75 пихать?
Оффлайн
demos_kratos написал(а):
так после какой команды вылетает? ты пробовал других ботов вместо C_Sb75 пихать?
Короче странно как-то я телепортнул просто 2 ботов, в два разных места, всё норм.
Решил процедуру эту сделать тока с добавлением каманды ai2_lookatchar .
Бот вообще как то разворачивается вокруг своей оси и потом смотрит вниз!!
Непонятно! Попробовал телепортир. на флаги, та же фигня:
ai2_spawn C_Sb75
sleep 80
chr_teleport C_Sb75 0560
ai2_lookatchar GrifOps03 C_Sb75
chr_delete C_Sb75
sleep 80
ai2_spawn C_Sb26
chr_teleport C_Sb26 0517
ai2_lookatchar GrifOps03 C_Sb26
chr_delete C_Sb26
Отредактировал(а) Smith (18-08-2009 17:50:01)
Оффлайн
а chr_facetoflag пробовал? она работает с именами ботов. (chr_facetoflacg C_Sb26 0517)
Оффлайн
Smith написал(а):
ai2_panic
"паникующий" характер задаётся персонажу в ресурсах (.BINA). анимация задаётся анимацией. или какой эффект нужен?
AWP_Mega написал(а):
chr_facetoflag [кто] [на какой флаг смотрит] команда поворачивающая бота или игрока к определенному флагу
не поворачивает к флагу, а ориентирует сонаправленно данному флагу.
Smith написал(а):
Вот в "телепорте" и проблема, так как телепортируешь не конкретного персонажа а его номер!!
в зависимости от ситуации. можно заспавнить персонажа заранее и засунуть его куда-нибудь подальше. можно использовать chr_death_lock для могущих умереть до его спавна персонажей. можно сделать переменные, контролирующие, какие персонажи живы/мертвы, количество живых в данный момент, или даже отражающие текущую занятость индексов. ну, или ждать chr_name. -_-
Smith написал(а):
Неполучится, его место занимают живые челы - гриффин, опсы другие...
да ну.
Smith написал(а):
И кстати почему у мя не работает вот этот скрипт??
когда выполнение нужного куска кода проходит, а эффекта не видно - смотрим в консоль. и видим там bad parameters on chr_location. возникающее, когда в chr_location кидается несуществующий индекс. а всё потому, что для удаления использовано только chr_delete, и игра не обрабатывает смерть персонажа (ставим перед удалением ai2_kill и всё хорошо) как таковую, в т.ч. освобождая индекс для возрождённого чара. а на индексе 2 уже никого нету.
Smith написал(а):
Непонятно! Попробовал телепортир. на флаги, та же фигня:
что такое "та же фигня"? для поворота это то же самое что: ai2_spawn C_Sb75
chr_teleport C_Sb75 560
ai2_spawn C_Sb26
chr_teleport C_Sb26 517
sleep 80
ai2_lookatchar GrifOps03 C_Sb75
sleep 80
ai2_lookatchar GrifOps03 C_Sb26
так тоже "та же фигня"?
demos_kratos написал(а):
а chr_facetoflag пробовал?
нужен ведь поворот персонажа к флагу (т.е. для разных местоположений GrifOps03 это разные углы поворота).
Оффлайн
Хорошо но как удалить трупы??? Вот скрипт:
func void partin(void)
{
sleep 80
ai2_spawn C_Sb75
chr_location 2 -297.720428 1485.000000 -2700.470215
ai2_lookatchar GrifOps03 C_Sb75
ai2_kill C_Sb75
chr_delete C_Sb75
sleep 120
ai2_spawn C_Sb26
chr_location 3 -302.004272 1485.000000 -2647.752442
ai2_lookatchar GrifOps03 C_Sb26
ai2_kill C_Sb26
chr_delete C_Sb26
}
Я думал перс совсем исчезает, но нефига((( Мне не нужны трупы, боты должы после смерти моментально исчезнуть, команда chr_delete C_Sb26 не работает((
Добавлено спустя 4 минуты 15 секунд:
ai2_panic эффект?? А какие эффекты есть? я просто не очень понимаю...
Где мне их найти? Именно? Насчёт эффектов - что бы бегал покругу и стрелял во все стороны)))
Кстати как заставить бота просто стрелять, так сказать нажать спусковой крючок! Ну стоит бот с оружием смотрит дулом в стену, и просто так начал в неё стрелять, просто туда куда направленно оружие??
Оффлайн
Smith написал(а):
Хорошо но как удалить трупы???
залежавшиеся трупы - corpse_reset
. в данном случае удалить следует сразу чара, оставив за ним индекс. ai2_spawn C_Sb75
chr_death_lock C_Sb75 1
chr_location 2 -297 1485 -2700
ai2_lookatchar GrifOps03 C_Sb75
chr_delete C_Sb75
sleep 120
ai2_spawn C_Sb26
chr_death_lock C_Sb26 1
chr_location 3 -302 1485 -2647
ai2_lookatchar GrifOps03 C_Sb26
chr_delete C_Sb26
Smith написал(а):
ai2_panic эффект?? А какие эффекты есть? я просто не очень понимаю...
у ai2_panic на кого попало должен быть ожидаемый (например, после прочтения о нём на Oni Galore) эффект в виде блама. если нужен был он, то цель достигнута.
Smith написал(а):
Насчёт эффектов - что бы бегал покругу и стрелял во все стороны=))))
понятно...
Smith написал(а):
Кстати как заставить бота просто стрелять, так сказать нажать спусковой крючок!
это уже давным-давно обсуждалось. точно также, как это делали, например, блекопс, убивший Керра, и Гриффин, застреливший Шинатаму. через соответствующий playback. в .FILM есть аж int64 битсет, отвечающий за "нажатые клавиши", среди которых и стрельба, и всё что угодно. однако угол обзора (в обеих плоскостях) и даже начальное местоположение (в отличие от записываемых во время игры фильмов) задаётся там же.
Оффлайн
Мне нужно, чтобы запуск одного скрипта, осуществлялся только после того, когда бот бодойдёт к флагу! Как это сделать?? Веди есть такие команды как "chr_wait_animstate" , "chr_wait_health" - а для флагов есть что нитть подобное??
Оффлайн
Вы конечно извините, влазию без очериди, но ответти пожалуйста на вопросы после того как разберётесь с другими!
Короче я уже задовал этот вопрос, а как тогда зделать чтобы катсцена начиналась после того как убьёшь просто челов?
Извиняюсь за настарность, но всётки как зделать чтоб штатские дрались и твои играли против тебя?
И помогите плизз, набираю команду для определение кординат (where), всёбы было ок, но только кординаты не где не показываются, такаеже фигня с классами игроков тоже не отображаются, но честно меня больше волнует, то что кординаты не отображаются!
Ещё раз извиняюсь и пожалуйста помогите посаветуйте что делать, взарания всем спасибо!
Оффлайн
1. перед вызовом функции катсцены поставь условие, проверяющее счётчик на ноль. сам счётчик должен уменьшаться на один как только один враг помер (делается с помощью описания сторонней функции). изначально счётчик должен быть равен количеству врагов.
2. поменяй себе Team
3. поставь английкий движок и C-Daodan. на русском консольного вывода нет вообще.
и, собственно, мораль. ТЕЛЕПАТЫ В ОТПУСКЕ! уточняй что именно ты хочешь. я ни хрена не понял, что именно ты имел ввиду и привёл самые вероятные результаты. на будущее - всегда правильно и полностью описывай, что тебе надо.
Отредактировал(а) demos_kratos (20-08-2009 18:51:50)
Оффлайн
А,вопрос возник,как сделать,чтобы при смене скина персонажи относились а игроку со стороны его текущего скина(напр солдат страйкер-его боятся цивилы и не любят ТСТФ,но свои не нападают, или в уровне с Рег управлением скин охранника поставить и охранники не прыгают на тебя)?
Оффлайн
Оффлайн
2Шнайдер
а никак. только вручную менять команду вместе со сменой класса.
2vitya
http://daodan.rossy.oni2.net
Отредактировал(а) demos_kratos (20-08-2009 18:58:24)
Оффлайн
Вот у меня вопрос появился! Когда в игре мы нажимаем "F1", то у нас игровой процесс преостанавливается (всё замирает). Вопрос такой:
Как зделать так, чтобы при этой паузе игрок (т.е. конока) мог передвигатся в пространстве безпрепятственно!????
Отредактировал(а) Smith (11-09-2009 13:45:21)
Оффлайн
2Smith
Загнул Интересная идея. Но увы нереальная. Поищи в теме про девмоду описывалась функция передвижения камеры при полной паузе игры. Но чтоб игрок в этой паузе двигался - это увы неисполнимо.
Оффлайн
demos_kratos написал(а):
2Smith
Загнул Интересная идея. Но увы нереальная. Поищи в теме про девмоду описывалась функция передвижения камеры при полной паузе игры. Но чтоб игрок в этой паузе двигался - это увы неисполнимо.
Как не исполнимо??( Я всего лишь хочу что б я мог бегать при этой паузе? Может быть на уровне кода можно изменить, или глубже капнуть?? Потому как клёвый эффект был бы!)
И почему невозможно? Откуда такая уверенность??
Оффлайн
если Была такая возможность, я Бы рассказал, как ее осуществить. С времени релиза игры прошло почти 9 лет. С времени появления каммьюнити на год меньше. За 7 лет все возможности движка раскрыты. Отсюда и такая уверенность. Ты можешь задать подобный вопрос на ОЦФ, но я думаю ты получишь идентичный ответ. И потом, если бы такая вкусная функция была, то черта с два я о ней бы не знал
Оффлайн
Smith
Попробуй установить новейший денничёк, там все ресурсы глобализованы!!!!!!!!!
Оффлайн
не надо никаких нонешних денёчков. если стоит последний Edition, то качаем файл globalize.bat, кидаем его в папку Oni\Edition и запускаем, через минуту в папке Oni\Edition\GlobalDataFolder будут лежать все глобализационные файлы игры.
Отредактировал(а) demos_kratos (13-09-2009 18:22:04)
Оффлайн
demos_kratos написал(а):
не надо никаких нонешних денёчков. если стоит последний Edition, то качаем файл globalize.bat, кидаем его в папку Oni\Edition и запускаем, через минуту в папке Oni\Edition\GlobalDataFolder будут лежать все глобализационные файлы игры.
Хорошо! А как файлы oni. запихнуть в dat. ??
Оффлайн
Используй мой GUI.
Оффлайн
да, она самая.
Оффлайн
Люди помогите как сделать такие штуки
Отредактировал(а) NiKiT@ (17-09-2009 13:17:25)
Оффлайн
Это не скриптирование, а редактирование ресурсов.
коноко мутант - у geyser'а. достать не представляется возможным.
2-е - ты имел ввиду прыжок с пушкой барабаса или смену текстур?
3-е - что именно хотелось бы увидеть? смену геометрии тела? (модели тела) или опять же ретекстурирование?
Оффлайн
2-е-Я имел ввиду прыжок с пушкой барабаса,бег с пушкой барабаса и смену текстур
3-е я имел ввиду всё!!!
Отредактировал(а) NiKiT@ (17-09-2009 17:24:22)
Оффлайн
прыжки с пушкой барабаса - поставь Aniversary Edition, там будет специальная пушка-копия.
смена текстур - просто поменяй ссылку на TRMA в ONCC. или создай свои ONCC и TRMA. так даже удобнее. как это сделать? спрашивай в личку или намного лучше в Yahoo Mesenger. там пошагово объясню.
смена геометрий - дело посложнее. тебе придётся скачать XSI Mod Tools, перевести 2 модели с одинаковым скелетом (коноко и фурия) в формат Collada DAE, запихнуть их обе в XSI, там уже удалить голову фурии и тело коноки, запарентовать шею фурии с головой Коноко, переместить голову на место, поставить модель по центру, сохранить в формате Collada DAE через Crosswalk, далее создать ONCC и TRMA для персонажа, запихнуть всё это в package для AEInstaller и установить. хотя всё намного, повторяю, намного легче чем это кажется.
Оффлайн
Люди потом когда очеридь дойдёт до меня, скажите мне пожалуйста как зделать в скриптах чтоб игра начиналась за другого игрока, потом как приминить анимации к другим игрокам и как вобще узнать названия анимаций+как зделоть чтоб муро или ещё ктонибудь быле как в ступоре, ну тоесть как на сортире сидели и как запритить определённые анимации!!!!!!!! Скажите пожалуйста!
Извиняюсь что всё время только спрашиваю просто решил некоторые вещи поподробней изучить!!!!!
Оффлайн
NiKiT@ написал(а):
а где находится ONCC???
я тебе что сказал, на счёт того, как это сделать?
demos_kratos написал(а):
как это сделать? спрашивай в личку или намного лучше в Yahoo Mesenger. там пошагово объясню.
Отредактировал(а) demos_kratos (18-09-2009 14:53:49)
Оффлайн
Vitya.Чтобы начинать игру за другого игрока напиши в файле bsl с суффиксом level_logic вот это:
chr_set_class 0 и после нуля класс игрока за которого хочешь играть.Классы игроков можешь взять с http://ssg.oni2.net/subfold/charas/charas.htm
Это должно выглядеть примерно так:if (save_point eq 1)
{
my_save_point=1;
particle vent03 start
ai2_spawn partner_cop_1
ai2_spawn partner_cop_2
ai2_spawn ambush_striker_1
ai2_spawn ambush_striker_2
ai2_spawn ambush_striker_3
chr_delete Recep
door_lock 1
door_lock 4
restore_game
ai2_attack partner_cop_1 ambush_striker_1
ai2_attack partner_cop_2 ambush_striker_3
music_script_start();
sleep 30
set_objective_1
chr_set_class 0 6
}
Отредактировал(а) NiKiT@ (18-09-2009 17:59:05)
Оффлайн
NiKiT@ написал(а):
Vitya.Чтобы начинать игру за другого игрока напиши в файле bsl с суффиксом level_logic вот это:
chr_set_class 0 и после нуля класс игрока за которого хочешь играть.Классы игроков можешь взять с http://ssg.oni2.net/subfold/charas/charas.htm
Это должно выглядеть примерно так:if (save_point eq 1)
{
my_save_point=1;
particle vent03 start
ai2_spawn partner_cop_1
ai2_spawn partner_cop_2
ai2_spawn ambush_striker_1
ai2_spawn ambush_striker_2
ai2_spawn ambush_striker_3
chr_delete Recep
door_lock 1
door_lock 4
restore_game
ai2_attack partner_cop_1 ambush_striker_1
ai2_attack partner_cop_2 ambush_striker_3
music_script_start();
sleep 30
set_objective_1
chr_set_class 0 6
}
Спасибо выручил!
Оффлайн
NiKiT@ написал(а):
Так ты мне поможешь???Как Научить Май бегать с пухой Барабаса ?????
Скачай последний эдишн.Там есть такая пушка.
Оффлайн
NiKiT@ написал(а):
Дайте мне ссылку ПЛИЗ!!!!И напишите как установить!!!!
http://mods.oni2.net/system/files/Edition-PC.zip
Установить очень легко,скачай, расскажу
Отредактировал(а) Шнайдер (18-09-2009 18:21:31)
Оффлайн
Anniversary Edition - новый релиз, с графическим интерфейсом установки
Вот.Там все(инструкции) есть.
Оффлайн
NiKiT@ написал(а):
СПАСИБАААААААААААААААААА!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!))))))))))))))))))))
Э, не кричи так сильно, сначала установи без косяков
Оффлайн
NiKiT@ написал(а):
СПАСИБАААААААААААААААААА!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!))))))))))))))))))))
Все большие спасибы создателям эдишна.
Оффлайн
NiKiT@ написал(а):
БЛИИИИИН РЕБЯТ!!!!!НИ ЧЁ НЕ ПОЛУЧАЕТСЯ!!!!!А ВЫ МОЖЕТЕ ДАТЬ ГОТОВЫЙ ФАЙЛ?????
ЧТо за проблема? в чем именно она выражается
Оффлайн
NiKiT@ написал(а):
НИ ЧЁ НЕ ПОЛУЧАЕТСЯ!!!!!
Для начала - действуй без CapsLock. Некрасиво это.
И далее - распиши подробно, по пунктам свои действия, начиная от того, как ты зашёл по ссылке, до собственно, самой проблемы.
Только тогда мы, может быть, и поймём, в чём твой промах.
Оффлайн
ДА БЛИН Я ВАЩЕ НИ ЧЁ НЕ ПОНИМАЮ!!!!
ВОТ ПЕРЕВЁЛ,НО ВСЁРАВНО НИ ЧЁ НЕ ПОЛУЧАЕТСЯ!!!!
Седьмой Anniversary Edition
Релиз июля 2009 года
О А.Е.
Седьмой Anniversary Edition ( "Edition" или "AE" для краткости) представляет собой моддинг рамки и набор модов для игры Они действий, выпущенный в 2001 году. Вам необходимо розничной версии Они играть Edition (пока еще). Полный комплект документации для данной версии можно найти на http://wiki.oni2.net/AE.
Вам также понадобится. NET установлен, если вы используете Windows, или моно установлен, если вы используете Mac, для того, чтобы установка А.Е. к работе. Нажмите здесь, если вам нужно. NET, или здесь (OS X 10.4) или здесь (OS X 10.3) Если Вам нужна моно.
Установка
Издание не заменить существующую установку игры. Чтобы установить, просто место "издание" папки внутри папки "Они", а затем запустите программу установки. Вам придется глобализации перед установкой модов в первый раз, что может занять до получаса. Примечание: На данном этапе, А. Е. Они не воспроизводиться. Вы должны установить хотя бы один моделирование прежде чем вы сможете сыграть копия Они внутри "Edition". Просто установите флажки из моды вы хотите, и нажать кнопку "Установить". Этот процесс может занять до 5 минут, но будет работать быстрее на большинстве компьютеров.
Для воспроизведения А.Е., вы открываете приложение Они внутри "издание" папки и играть в "Ваниль" (unmodded) Они, вы открываете первоначальной заявке Они в папке "Они" *. Если вы не видите Изменения Главное меню, который говорит: "Anniversary Edition", вы не играете Edition. Удачи! Для получения поддержки посетите http://oni.bungie.org/community/forum.
* Вот как это работает и для пользователей Windows. Примечание для пользователей Mac: применение Они помнят последнюю активную установку Они. Это означает, что открытие Oni.app в одном месте может загрузить установку Они в другую папку. Установщик автоматически изменяет предпочтений Они на использование Edition установки при глобализации. Это означает, что открытие Oni.app в ванили установки, будет также загрузить Edition. Для переключения между активным установок, просто изменить название GameDataFolder в активную установку Они и запускать любые копии Oni.app. Он будет просить для розничной установке Они, после чего вы переходите к установке Они по своему выбору (в папку, содержащую GameDataFolder) и нажмите кнопку "OK". Не забудьте посмотреть на модифицированный экран главного меню скажите ли вы играете или оригинальные Они Они А.Е.. Инструмент должен быть скоро сделать этот процесс легче!
Кредиты Anniversary Edition
EDT: BGI войска, дополнительно ONIrules оружия: Дополнительное оружие
Гейзер: создатель Издания Парадокс: Документирование Они
Gumby: инсталлятор и Рамочная RossyMiles: Daodan DLL порта C
Iritscen: Installer (Mac) SFeLi: Оригинал Daodan DLL
Проигравший: улучшена анимация и А. И. SSG: Документирование Они
Нео: OniSplit, документирование Они, техническая поддержка
И благодаря Bungie для принятия Они!
Оффлайн
Только не здесь, а в теме помогите (((
Оффлайн
"Сказать 'не работает' значит ничего не сказать" ?Сергей Geyser Мешков.
Назови симптомы. Что именно ты делал прежде чем придти к выводу, что "НИ ЧЁ НЕ ПОЛУЧАЕТСЯ!!!!!"?
Скинь файлы %Oni%\Edition\install\install.log и %Oni%\Edition\startup.txt.
Делаю замечание, сделанное мной когда-то Вите. Я понимаю, что ты трепетен к игре. Но не надо из-за этого наполнять форум лишними знаками препинания. Не стоит кидать экскременты на вентилятор. (не в обиду сказано, просто прими к сведению)
EDIT: вот это бум =\
EDIT2: надмозгом пользоваться не стоит
Отредактировал(а) demos_kratos (18-09-2009 18:49:57)
Оффлайн
Приходи на тему Помогите и там ВСЕ напиши подробно, у нас есть опыт помощи(хотя б в проблеме разберемся)
Оффлайн
У меня появился вопрос, которому позавидует даже Капитан Очевидность: Куда?
Оффлайн
NiKiT@ написал(а):
в папку с игрой
Геноссе, на форум скинуть надо
Оффлайн
Smith написал(а):
Народ пожалуйста подскажите:
1. Как создать свой уровень? Т.е. скажем взять 2-ой уровень и включить его в список уровней как новый (другой), скажем например levle20. Чтоб после 19 уровня загрузился 2-ой уровень, названный 20-ым
2. У каждого персонажа есть в уровнях свои имена и их можно телепортировать в разные места, а с объектами такое можно делать? Скажем взять тачку из штаба TCTF и перетащить её на улицу и.т.д.
3. Создал коноку (бот) с АИ в 3-ем уровне все норм.... Бегает, стреляет, лупит всех... Создал по такому-же принципу в 19-уровне коноку; но бот стоит и ничего не делает, как-будто АИ обделён.... В чём проблема или что мне нужно прописать в характеристиках при создании бота??
Всё всё всё есть на форуме! А с этими задачами надо повозиться... Здесь и скрипты и пакер... Короче исследуй форум в поиске ответов!
Оффлайн
Smith
1. Подобные вещи еще не во власти простых смертных, как вы. Не заморачивайся, это слишком много сложной и нудной работы.
2. Нет нельзя. По крайней мере в процессе игры это невозможно.
3. Здесь все очевидно. У тебя скорее всего по какой-то причине профиль ИИ, который ты выбрал для бота не глобализован. В 14 главе движок не видит ИИ и прописывает боту болезнь Альцгеймера. Глобализуй ресурсы и будет тебе счастие.
Оффлайн
demos_kratos написал(а):
Smith
1. Подобные вещи еще не во власти простых смертных, как вы. Не заморачивайся, это слишком много сложной и нудной работы.
2. Нет нельзя. По крайней мере в процессе игры это невозможно.
3. Здесь все очевидно. У тебя скорее всего по какой-то причине профиль ИИ, который ты выбрал для бота не глобализован. В 14 главе движок не видит ИИ и прописывает боту болезнь Альцгеймера. Глобализуй ресурсы и будет тебе счастие.
Спасобо за ответы! Вот ещё, в ресурсах BINACJBOFurniture прописаны объекты, как я понял (компы, мебель, декорации...) как ими панипулировать, как добавить или удалить эти объекты??
не во власти простых смертных
а ты простой смертный или же избранный?))
P.S. Кстати демонс, ты не знаешь где Гейсер тусит? Что-то он на форуме не появляется...
Отредактировал(а) Smith (09-10-2010 08:45:09)
Оффлайн
Smith написал(а):
как ими панипулировать, как добавить или удалить эти объекты??
Файлы FURN - это архаизмы, остатки разработки. Все объекты впаяны в AKEV файл, который является моделью уровня, а его редактировать - это не для смертных, как я уже говорил.
Smith написал(а):
а ты простой смертный или же избранный?))
Да я вообще богоравный
Отредактировал(а) demos_kratos (09-10-2010 21:20:27)
Оффлайн
demos_kratos написал(а):
Smith написал(а):
как ими панипулировать, как добавить или удалить эти объекты??
Файлы FURN - это архаизмы, остатки разработки. Все объекты впаяны в AKEV файл, который является моделью уровня, а его редактировать - это не для смертных, как я уже говорил.
Smith написал(а):
а ты простой смертный или же избранный?))
Да я вообще богоравный
Ооо)) Я FURN вообще не понял как и чё) Зато всё просто в файлах ONLV*.oni
Оффлайн
Здрасте)) У меня вопрос: Как победить Муро? Он уже превратился в монстра.
И ещё один вопрос: Какой самый последний уровень?
Оффлайн
Как победить муро????????)))))))))))))
Хах, ждешь пока исчезнет его поле и бьешь... что ещё сказать...
А самый последний эт 14-ый.
Добавлено спустя 50 секунд:
И помоему это не совсем скриптовый вопрос...
Оффлайн
Не подскажите, как сделать, что бы девушка Recep в начале 2-го уровня не садилась наколени и тряслась от страха, а при назначении ей команды синдиката все-таки дралась?
Оффлайн
Поменяй в ее файле BINA/OBJC/CHAR MeleeID, CombatID, NeutralID и Team на желаемые.
Оффлайн
Попробую, но у меня получилось это обойти)
Оффлайн
Гордон Фриман написал(а):
Попробую, но у меня получилось это обойти)
Ну тогда если чё сделай скр коммандами -
ai2_noncombatant(Recep, 0); ai2_changeteam(Recep,Konoko);
Оффлайн
Ещё вопрос: вот в 5 главе в самом начале выбегает страйкер. Я присвоил ему другой класс, и по правильной номерации все остальным. Но поскольку он и остальные спавнятся не одновременно, то класс меняется только у него. Как сделать что бы все его изменили?
Оффлайн
Сделал это командой ai2_spawnall
Оффлайн
Добрый день
все наверняка помнят забавное видео, где бойцы TCTF устраивают для Гриффина рождественский танец.
(на всякий случай http://www.youtube.com/watch?v=XoE3cBDOAhQ)
автор утверждает, что демонстрирует "pure scripting". меня интересует их последнее движение. чтобы заставить таких персонажей выполнять анимацию BARABpowerup (это же она, я не ошибаюсь?), мне пришлось сменить им CombatID на 9 и в ONCC переписать название TRAC на Барабаса . Это входит в понятие "pure scripting" или есть какое-то простое решение, до которого я не могу додуматься ?
Оффлайн
MrConnery написал(а):
есть какое-то простое решение
chr_animate [ai_name:string | script_id:int] anim_name:string [num_frames:int | ] [interp_frames:int | ]
для анимаций, скажем так, состояний (переменного времени) нужно прямо указывать длительность. например,chr_animate Griffin BARABpowerup 600
Оффлайн
MrConnery написал(а):
п.с. хороший у Вас учебник.
ога, как раз сейчас вот этот нюанс с chr_animate туда вписал. +) если б не катастрофическое количество неточностей, неполнот и просто белых пятен, было бы лучше, почаще б такие актуальные вопросы возникали.
Оффлайн