Русскоязычный форум поклонников игры «Они» от Bungie
Я где-то видел тему насчёт AI персов! Как можно редактировать интелект персонажей. Сделать тупее или умнее! Или вовсе не убиваемых по мастерству боя??? И кстати как увеличить хп аппонентам так, что бы индикатор жизни изменялся последовательно... Заранее спасибо Или укажите ссылку где об этом ранее подробно обсуждалось!
Оффлайн
Первый твой вопрос это не вопрос,а утверждение.
А по второму могу сказать что есть куча тем,про то что тебе надо, к примеру вот тут и тут.
Отредактировал(а) doktordulit (12-07-2009 17:48:28)
Оффлайн
Smith, "как увеличить хп аппонентам так, что бы индикатор жизни изменялся последовательно" ? Объясни, что имеешь в виду. Ты хочешь изменить не только текущее количество хелсов, а заодно и максимальное/полное количество? чтобы крутые хелсы не убывали? Это скриптами сделать нельзя, только в ресурсах ONCC и CHAR.
Оффлайн
nick9 написал(а):
Вы про что вообще толкуете?Я не врубаюсь!!
между прочем Manticore процитировал твои слова, так что нефиг отмазываться. тебе стоит извиниться за свое выражение, а если есть какие-то претензии к кому-то, то пиши в личку, а не обсирать (упс, сорри за выражение) людей публично
Оффлайн
Так-с, ну лано я просто имел виду "цвет жизни", что бы изменялся плавно, а не ярко зелённый а потом вдруг жёлтый...
Кто нить знает номера флагов в последнем уровне, на самом верху (где дуэль с Муро) а то ищу и никак не попаду на них, может кто знает...
И ещё, глобализовать какой-нить уровень без програм моно? что-б попроще А то onisplit я не дорубаюсь как делать! Вроде всё норм. описано, но я просто нууб)
Оффлайн
Smith написал(а):
Так-с, ну лано я просто имел виду "цвет жизни", что бы изменялся плавно, а не ярко зелённый а потом вдруг жёлтый...
В ONGS меняешь байты с 0x1C и далее... 4 байта на количество долей, по 4 на процент здоровья, с которых доля начинается, по 4 на цвет доли (rgba). если лимита на количество там нет, можно хоть с точностью до 1 хп указать. )
Smith написал(а):
Кто нить знает номера флагов в последнем уровне, на самом верху (где дуэль с Муро) а то ищу и никак не попаду на них, может кто знает...
~520 вроде кучка флагов есть. плюс-минус.
Smith написал(а):
И ещё, глобализовать какой-нить уровень без програм моно? что-б попроще А то onisplit я не дорубаюсь как делать! Вроде всё норм. описано, но я просто нууб)
без программ - ну попробуй гипнотизировать ресурсы. -_- глобализация глобальна, она на то и глобализация, что все ресурсы в одно глобальное место складирует, а не отдельные уровни трогает. попроще - АЕ.
Оффлайн
В ONGS я вообще не разбираюсь может найду время посежу )... Я вижу ты очень хорошо разбираешся, я уже не надеялся увидеть таких людей)) (таких подкованных в Они) Спасибо за инфу!
Я слышал бота нельзя заставить бежать к заданным координатам, а только к флагам, это так? И флаг опять же делать в ONGS??
Оффлайн
флаг опять же делать в ONGS?
Нет, флаг это FLAG: http://wiki.oni2.net/FLAG http://wiki.oni2.net/OBD_talk:BINA/OBJC/FLAG
Оффлайн
Для начало,как ты это делаешь?
Оффлайн
Smith, "боты" в понимании "персонаж с именем, набором свойств типа класс, место спавна, вещи, оружие, вызываемая при смерти функция и т.д." перечисляются в .BINA (CHAR) и глобализации не подлежат. то есть можно, конечно, сделать большую BINA со всеми чарами, но лучше не стоит: тут и коллизии повторяющихся имён, и непонять куда ссылающееся местоположение при создании... лучше и логичнее либо создавать новых чаров в соответствующем уровне, либо на уровне скриптов сделать из постороннего чара то, что нужно. класс, место, команда, хелсы, вооружение, поведение - всё приводимо к нужному виду, кроме имени. и кроме, разве что, особых флажков типа superammo. учитывая, что количество чаров (рисуемых, активных, соображающих) ограничено, обычно и стандартного набора должно хватать.
Оффлайн
Мih@ написал(а):
Smith, "боты" в понимании "персонаж с именем, набором свойств типа класс, место спавна, вещи, оружие, вызываемая при смерти функция и т.д." перечисляются в .BINA (CHAR) и глобализации не подлежат. то есть можно, конечно, сделать большую BINA со всеми чарами, но лучше не стоит: тут и коллизии повторяющихся имён, и непонять куда ссылающееся местоположение при создании... лучше и логичнее либо создавать новых чаров в соответствующем уровне, либо на уровне скриптов сделать из постороннего чара то, что нужно. класс, место, команда, хелсы, вооружение, поведение - всё приводимо к нужному виду, кроме имени. и кроме, разве что, особых флажков типа superammo. учитывая, что количество чаров (рисуемых, активных, соображающих) ограничено, обычно и стандартного набора должно хватать.
Вообщем я так понял, создать нового бота сложно, и тем более не в скриптах Чтобы создать бота нужно прописать в BINA новые данные (модель, имя, анимация...)? А потом просто бота прописать в скрипты?) Есть ли инструкция по созданию ботов?)
И ещё вопросик! мне нужна команда, которая бы любые процессы выполняла последовательна. (Ну типа я открыл дверь, и бот после этого бежал бы на флаг или вытащил оружие, что-то вроде этого...)
Оффлайн
"Чтобы создать бота нужно прописать в BINA новые данные (модель, имя, анимация...)?" Смотря, что такое 'создать'. ai2_spawn - создание? Анимации прописаны в ONCC, а не в CHAR.
"А потом просто бота прописать в скрипты?" Смотря, что такое 'просто'... Вообще-то доводка уровня - это процесс итеративный: поскриптил, скривился, поправил BINA, поскриптил ещё...
"Есть ли инструкция по созданию ботов?" Т.е. по добавлению в BINACharacter? http://wiki.oni2.net/AE:Adding_spawnable_characters http://wiki.oni2.net/OBD_talk:BINA/OBJC/CHAR#XML
"мне нужна команда, которая бы любые процессы выполняла последовательно" Смотря что такое 'любые', но для начала посмотри сюда: Oni Scripts: FAQ-пособие
Оффлайн
geyser написал(а):
"Чтобы создать бота нужно прописать в BINA новые данные (модель, имя, анимация...)?" Смотря, что такое 'создать'. ai2_spawn - создание? Анимации прописаны в ONCC, а не в CHAR.
"А потом просто бота прописать в скрипты?" Смотря, что такое 'просто'... Вообще-то доводка уровня - это процесс итеративный: поскриптил, скривился, поправил BINA, поскриптил ещё...
"Есть ли инструкция по созданию ботов?" Т.е. по добавлению в BINACharacter? http://wiki.oni2.net/AE:Adding_spawnable_characters http://wiki.oni2.net/OBD_talk:BINA/OBJC/CHAR#XML
"мне нужна команда, которая бы любые процессы выполняла последовательно" Смотря что такое 'любые', но для начала посмотри сюда: Oni Scripts: FAQ-пособие
Спасибо гейсер посмотрел!) Начинаю понимать... С BINACharacter мне пока рано! А вот насчёт команды:
func void wait_to_help(void) - "wait_to_help" это просто название функции и не несёт смысловой нагрузки.
chr_wait_health Muro 200 - "chr_wait" команда ждать. А например, если нужно сделать покруче событие, что-бы ждать приходилось не наличие 200 хп , а окончание жуткого замеса между 10 TCTF и 10 Синдикатов )... Нужно создавать отдельную функцию и уже делать привязку к chr_wait ???
Или ждать пока откроется дверь, то команда выглядеть будет вот так: chr_wait_door_open 21 ???
&&
Оффлайн
Smith, не путай... "wait_to_help
"(void) - функция, прописанная уже в скриптах. "смысловой нагрузки" в имени этой функции ровно столько же, как у любой другой. "chr_wait_health
"(ai_name,hp) - функция, прописанная глубже. принципиальная разница только в размещении и вроде ещё паре нюансов. никакого "chr_wait" здесь нет вообще. есть только функции с таким префиксом: chr_wait_health
, chr_wait_animation
, chr_wait_animtype
, chr_wait_animstate
. их объединяет только схожесть названий (ну, и примерно аналогичная суть: остановить дальнейшее выполнение до события).
тем более, "chr_wait_door_open" - чушь ещё и потому, что chr_ относится в чарам, а у дверей свой собственный префикс door_. ) но к названию никогда не надо цепляться и тем более делить его на что-то. это лишь для удобства.
Smith написал(а):
А например, если нужно сделать покруче событие, что-бы ждать приходилось не наличие 200 хп , а окончание жуткого замеса между 10 TCTF и 10 Синдикатов )
20 организаций? или 20 человек? +)chr_wait_health Suwestvo 0
повторить для всех существ...
хотя традиционно разработчиками использовались функции, вызываемые смертями персонажей (т.е. на самом деле они всей группой ссылались на одну-единственную функцию), чтобы декрементить счётчик и при достижении нуля делать все дела.
для того, чтобы что-то произошло по событию, необходим какой-то триггер. или мы имеем скриптовую вилку с ожиданием события (то есть не так уж и много всего... пересечение некоторого значения здоровья, исполнение некой анимации... возможна периодическая проверка значения переменной через рекурсивную функцию), или прописанное в ресурсах событие, вызывающее определённую функцию в игре. можно спрятать от игры все скрипты и побегать по уровням со включенной девмодой - консоль будет периодически заявлять, что "нет такой-то функции, запрошенной движком". тут тебе и лазеры, и открытие определённых дверей, и прохождение/пролетание по определённой области, и указанные в BINA смерть и разговор с персонажем.
если триггера в нужном месте нет - создавай... насколько я понимаю, здесь опять следует обратиться к BINA - TRIG, DOOR. если оно того стоит.
Оффлайн
Smith написал(а):
всмысле?)) Как её запустить?
вилкой... из какого-нибудь исполняемого места. смотри пресловутое wait_to_help. fork MyFunction
кстати, функцию лучше не называть таким общим словом, имхо. и суть неясна, и пересечение с командой...
Оффлайн
Люди вы nick9 извинити онмойдруг просто когдая книму домойзаходил вмести с другом, мы с nick9 пошли пить а его и мой дружок оказывается написал это мы токо понилиэто по цитате чёон там наколякал извините что я за него отмазываюсь,ноэто правда!!!!!!!!!!!
Оффлайн
Мih@ написал(а):
Smith написал(а):
всмысле?)) Как её запустить?
вилкой... из какого-нибудь исполняемого места. смотри пресловутое wait_to_help.
fork MyFunction
кстати, функцию лучше не называть таким общим словом, имхо. и суть неясна, и пересечение с командой...
Я эту команду "TCTF" вставил в другую функцию, "fork TCTF" - не сработало(
Оффлайн
vitya написал(а):
Люди вы nick9 извинити онмойдруг просто когдая книму домойзаходил вмести с другом, мы с nick9 пошли пить а его и мой дружок оказывается написал это мы токо понилиэто по цитате чёон там наколякал извините что я за него отмазываюсь,ноэто правда!!!!!!!!!!!
А чё он отрицал что это написал?
Smith написал(а):
Я эту команду "TCTF" вставил в другую функцию, "fork TCTF" - не сработало(
Ты не понял Миху.
Функцию делай TCTF,а в скрипте на нужном месте пиши fork TCTF.
Оффлайн
Smith, слушай сюда. Есть определённая тонкость с chr_location и вообще с любыми функциями, которые обращаются к челам через индекс (char ID). Этот индекс уникален, в каждый данный момент он соответствует максимум одному челу. Выдаётся этот индекс в момент появления чела в памяти (он соответствует номеру первой пустой ячейки, куда игра "кладёт" нового чела). Поэтому - и это главное - этот индекс сильно зависит от состояния памяти на момент вызова ai2_spawn, т.е. от предыстории. Этот индекс важно не путать с так называемым "скриптовым индексом" (script ID), который бывает у безмозглых челов и игроков. У Коноки, например, скриптовый индекс есть, и как правило 0, но он не имеет ничего общего с индексом Коноки как чела, т.е. с индексом её ячейки в памяти, который как правило тоже 0 (ибо Коноко появляется в уровне в первую очередь).
Рассмотрим твой скрипт. Целиком ты нам его не показываешь, но допустим, что кроме Коноки в уровне был только Гриффин, соответственно у Коноки был индекс 0, а у Гриффина - 1. Гриффин не освободит индекс 1, пока не станет трупом, а трупом он не станет, пока ты от него не отвернёшься и не попрыгаешь, например. Дело в том, что игра не спешит удалять мёртвых челов из памяти и заменять их на трупы, и предпочитает это делать, когда игрок на труп не смотрит. Поэтому ты не можешь заранее знать, какой индекс окажется у ParkStriker, скорее всего - 2, но в других ситуациях может оказаться и 1, если ты дашь Гриффину время и возможность стать трупом, до того как вызывать ai2_spawn(ParkStriker). Решить неоднозначность можно несколькими способами. Во-первых, можно найти подходящий FLAG и использовать chr_telerport. Во-вторых, статус Гриффина можно заморозить, чтобы он ни в коем случае не становился трупом, вот так: chr_death_lock(Griffin,1). В последних, Гриффина можно, наоборот, явно удалить из игры, не дожидаясь его превращения в труп: например, делаешь ему chr_death_lock, а потом чуть-чуть лечишь и chr_delete(Griffin).
Полную информацию о челах, существующих в памяти на данный момент, даёт девмодовая команда chr_who (с консоли). Чтобы увидеть информацию, надо пользоваться английским движком, а не русским, так что советую поставить недавно опубликованный гуёвый Эдишн, в котором содержится английский движок вместе с новым Даоданом, который позволяет играть в русскую версию, имея при этом все преимущества английского движка.
Оффлайн
geyser написал(а):
Smith, слушай сюда. Есть определённая тонкость с chr_location и вообще с любыми функциями, которые обращаются к челам через индекс (char ID). Этот индекс уникален, в каждый данный момент он соответствует максимум одному челу. Выдаётся этот индекс в момент появления чела в памяти (он соответствует номеру первой пустой ячейки, куда игра "кладёт" нового чела). Поэтому - и это главное - этот индекс сильно зависит от состояния памяти на момент вызова ai2_spawn, т.е. от предыстории. Этот индекс важно не путать с так называемым "скриптовым индексом" (script ID), который бывает у безмозглых челов и игроков. У Коноки, например, скриптовый индекс есть, и как правило 0, но он не имеет ничего общего с индексом Коноки как чела, т.е. с индексом её ячейки в памяти, который как правило тоже 0 (ибо Коноко появляется в уровне в первую очередь).
Рассмотрим твой скрипт. Целиком ты нам его не показываешь, но допустим, что кроме Коноки в уровне был только Гриффин, соответственно у Коноки был индекс 0, а у Гриффина - 1. Гриффин не освободит индекс 1, пока не станет трупом, а трупом он не станет, пока ты от него не отвернёшься и не попрыгаешь, например. Дело в том, что игра не спешит удалять мёртвых челов из памяти и заменять их на трупы, и предпочитает это делать, когда игрок на труп не смотрит. Поэтому ты не можешь заранее знать, какой индекс окажется у ParkStriker, скорее всего - 2, но в других ситуациях может оказаться и 1, если ты дашь Гриффину время и возможность стать трупом, до того как вызывать ai2_spawn(ParkStriker). Решить неоднозначность можно несколькими способами. Во-первых, можно найти подходящий FLAG и использовать chr_telerport. Во-вторых, статус Гриффина можно заморозить, чтобы он ни в коем случае не становился трупом, вот так: chr_death_lock(Griffin,1). В последних, Гриффина можно, наоборот, явно удалить из игры, не дожидаясь его превращения в труп: например, делаешь ему chr_death_lock, а потом чуть-чуть лечишь и chr_delete(Griffin).
Полную информацию о челах, существующих в памяти на данный момент, даёт девмодовая команда chr_who (с консоли). Чтобы увидеть информацию, надо пользоваться английским движком, а не русским, так что советую поставить недавно опубликованный гуёвый Эдишн, в котором содержится английский движок вместе с новым Даоданом, который позволяет играть в русскую версию, имея при этом все преимущества английского движка.
Спасибо! Но дело в том что телепортировать челов я могу. Я прописываю по порядку ai2_spawn (имя)
И и телепортирую их соответственно в том порядке котором стоят, если первый в скрипте написал ai2_spawn Sr_9 то он и будет телепор. под номером 1. Это срабатывает. И где это нужное место (тем более тстф была функцией)?? Получается нужно команду fork TCTF вписать в ту фукцию, которая отвечает именно за 4сохранение, за последнюю битву?? Но в какую??
Оффлайн
Smith написал(а):
И где это нужное место (тем более тстф была функцией)?? Получается нужно команду fork TCTF вписать в ту фукцию, которая отвечает именно за 4сохранение, за последнюю битву?? Но в какую??
ну смотри последовательно. начинается исполнение всегда из одного места - функции main
. в последнем уровне, она ссылается на функцию start
. в которой, в свою очередь, есть ряд ифов, среди которых находим: if (my_save_point eq 4)
{
а ещё глубже - вариации в зависимости от того, жив ли Гриффин: if (did_kill_griffen() eq #)
{
в его присутствии - вилка для ожидания 200 хелсов у Муро, на которую и следовало бы ориентироваться (хотя это ни разу не принципиально): fork wait_to_help
собственно, если ориентироваться на оригинальное течение скрипта (а не написание его с нуля), где-то тут вилке самое место. то бишь, мыслим логически - функция "ожидает" событие, и её вилочный вызов нужно ставить там, где начинается это "ожидание".
Smith написал(а):
И и телепортирую их соответственно в том порядке котором стоят, если первый в скрипте написал ai2_spawn Sr_9 то он и будет телепор. под номером 1. Это срабатывает.
да неправда это... у тебя совершенно посторонняя функция, в которой ParkStriker и спавнится (а не заранее). когда она вызовется и вызовется ли вообще - неизвестно. особенно если скрипт будет не из последовательного "убил энного врага, заспавнился энплюспервый", а с динамичным месивом.
Оффлайн
Мih@ написал(а):
Smith написал(а):
И где это нужное место (тем более тстф была функцией)?? Получается нужно команду fork TCTF вписать в ту фукцию, которая отвечает именно за 4сохранение, за последнюю битву?? Но в какую??
ну смотри последовательно. начинается исполнение всегда из одного места - функции
main
. в последнем уровне, она ссылается на функциюstart
. в которой, в свою очередь, есть ряд ифов, среди которых находим:if (my_save_point eq 4)
{
а ещё глубже - вариации в зависимости от того, жив ли Гриффин:if (did_kill_griffen() eq #)
{
в его присутствии - вилка для ожидания 200 хелсов у Муро, на которую и следовало бы ориентироваться (хотя это ни разу не принципиально):fork wait_to_help
собственно, если ориентироваться на оригинальное течение скрипта (а не написание его с нуля), где-то тут вилке самое место. то бишь, мыслим логически - функция "ожидает" событие, и её вилочный вызов нужно ставить там, где начинается это "ожидание".
О получилось Спасибо что обяснил! Всё BlackSwat делает кроме того, что он не идёт к флагу, вот моя ф-ция:
func void arbalet(void)
{
chr_wait_health Griffin 0
chr_location 5 -395.204987 1445.000000 -2941.419941
chr_set_class 5 TCTF_swat_blackops_1
chr_changeteam C_Sr19 TCTF
chr_set_health C_Sr19 210
chr_giveweapon C_Sr19 w3_phr
ai2_attack C_Sr19 Muro
ai2_movetoflag 0516 C_Sr19
ai2_setmovementmode C_Sr19 run
}
ДА и ещё Муро не атакует
Отредактировал(а) Smith (15-07-2009 08:34:06)
Оффлайн
А чё он отрицал что это написал?
Говорё же написал не он, а стёр он!
У него такая реакция!
Оффлайн
Smith написал(а):
ai2_movetoflag 0516 C_Sr19
дословно "флаг 0516, иди к персонажу". +)) первый аргумент - персонаж, а второй - флаг.
Smith написал(а):
ai2_attack C_Sr19 Muro
да это вообще весьма условная штука... точно не уверен, но вроде это функция просто выставляет персонажу приоритет для атаки. например, в оригинале финальной битвы - Муро всегда атакует игрока, до достижения им 200 хелсов остальные синдикатовцы заняты лишь TCTF. когда же muro_in_danger eq 1, все начинают фокусить игрока. никакой мощной низкоуровневой привязки нет.
Оффлайн
Мih@ написал(а):
Smith написал(а):
ai2_movetoflag 0516 C_Sr19
дословно "флаг 0516, иди к персонажу". +)) первый аргумент - персонаж, а второй - флаг.
Smith написал(а):
ai2_attack C_Sr19 Muro
да это вообще весьма условная штука... точно не уверен, но вроде это функция просто выставляет персонажу приоритет для атаки. например, в оригинале финальной битвы - Муро всегда атакует игрока, до достижения им 200 хелсов остальные синдикатовцы заняты лишь TCTF. когда же muro_in_danger eq 1, все начинают фокусить игрока. никакой мощной низкоуровневой привязки нет.
А вот я хочу что бы при смерти гриффина опять появлялся вертолёт, ну и поновой 2 TCTF (можно без гриффина)! функцию сделал камеры удалил, невышло(( Как правильно оформить процедуру??
Оффлайн
Smith, не бывает "не вышло". бывает "вышло не то, что ожидалось, потому что написано не то, что нужно".
появление вертолёта - не очень удобная штука... катсцена с ним постоянно меняет обзор, что позволяет делать некоторые махинации "за кадром", поэтому, во-первых, спрыгивание с вертолёта и бег к центру не согласованы (как вариант, бег вообще убираем и назначаем движение к флагу или атаку на врага), а во-вторых, вертолёт не умеет красиво исчезать. или в некоторый момент он удаляется начисто (лично я в таких случаях использую быстрые fade_out
и fade_in
, но они бросаются в глаза ещё больше, чем ВНЕЗАПНОЕ исчезновение вертолёта), или, если эта операция выполняется единожды, висит до самого конца.
ну, например, я поглядел в таком виде:func void tround_z(void)
{
obj_create 901 906
env_anim 901 906
ai2_spawn Griffin force
ai2_spawn GrifOps02 force
ai2_spawn GrifOps03 force
chr_envanim Griffin GrifGrifBox01
chr_envanim GrifOps02 GrifOps01Box01
chr_envanim GrifOps03 GrifOps03Box01
chr_animate Griffin COMGUYlev7_helistand 500
chr_animate GrifOps01 STRIKEcrouch_idle 400
chr_animate GrifOps02 STRIKEcrouch_idle 400
chr_animate GrifOps03 STRIKEcrouch_idle 400
sleep f290
env_setanim 901 heli_doors_rt08
env_setanim 902 heli_doors_lt08
env_setanim 903 heli_rotorblades08
env_setanim 904 heli_body08
env_setanim 905 heli_canopy08
env_setanim 906 heli_interior08
chr_envanim Griffin GrifGrifBox02 norotation
chr_envanim GrifOps02 GrifOps01Box02 norotation
chr_envanim GrifOps03 GrifOps03Box02 norotation
chr_animate Griffin COMGUYlev7_Grif
chr_animate GrifOps02 STRIKElev7_Ops01
chr_animate GrifOps03 STRIKElev7_Ops03
sleep f240
playback Griffin GrifGrifRunAlt
playback GrifOps02 GrifOps01Run
sleep f10
playback GrifOps03 GrifOps03Run
}
всё работает безо всяких проблем... разве что дурацкое ai2_spawn GrifOps0# force
желательно поменять на полноценного персонажа и убрать force.
Оффлайн
Спасибо Mih@ сработало)) Ещё проблемка, я пару синдикатов телепортировал на крышу (в финальную битву)
Битва началась... всё замечатель, но радиус обзора челов мелковат( Ближе к середины битвы 2 TCTF в одном углу ,пару синдикатов по центру... И друг друга не видят... Короче как сделать радиус обзора больше? Скриптом можно обойтись?
Оффлайн
Мih@ написал(а):
Smith, скриптом... смотря по ситуации... самое простое - периодическое обновление рекурсивной функцией... всё те же
ai2_attack
между нужными чарами,ai2_movetoflag
для сбора народа в кучку, и т.п.
С флагами не получается, я прописываю:
func void arbalet(void)
{
chr_wait_health Griffin 0
chr_location 1 -395.204987 1445.000000 -2941.419941
chr_set_class 5 TCTF_swat_blackops_1
chr_changeteam C_Sr19 TCTF
chr_set_health C_Sr19 210
chr_giveweapon C_Sr19 w3_phr
ai2_movetoflag C_Sr19 516
ai2_setmovementmode C_Sr19 run
}
бробовал и так: ai2_movetoflag 516 C_Sr19
а бот идти к нему не хочет (
Оффлайн
Smith написал(а):
С флагами не получается
"не получается"... ну во-первых, что эта функция творит? почему в chr_location номер 1, а в chr_set_class номер 5? почему сначала устанавливается chr_location, а потом всё остальное (то бишь, уже "в поле зрения")?
с движением к флагу проблема очень простая. ты просто не даёшь ему очухаться. =) нужно хотя бы:
... chr_giveweapon C_Sr19 w3_phr
ai2_setmovementmode C_Sr19 run
sleep 15
ai2_movetoflag C_Sr19 516
}
Smith написал(а):
ai2_movetoflag 516 C_Sr19
пыщъ.
Оффлайн
Получилось! Но вот например в 2 уровне написал функцию:
func void three(void)
{
chr_wait_health ambush_striker_1 0
chr_wait_health ambush_striker_2 0
chr_wait_health ambush_striker_3 0
sleep 60
ai2_movetoflag patrol_striker_3 0029
ai2_setmovementmode patrol_striker_3 run
}
Включил её (fork three) всё сделал как обычно!
Бот Не побежал Мне нужно чтобы после смерти 3 страйкеров он побежал к флагу... (Препятствий к флагу нет)
Оффлайн
Smith, дебугай... консоль ведь есть, всё есть... dprint
/dmsg
в каждом сомнительном и не очень месте, проверка с 1 страйкером, проверка зависимости от порядка убивания (когда 3 умирает первым и становится хладным трупом, и chr_wait_health уже проходит мимо)...
Оффлайн
Вот функция:
func void three(void)
{
sleep 60
ai2_movetoflag patrol_striker_3 0029
ai2_setmovementmode patrol_striker_3 run
}
эту функцию я запускаю в тот момент когда умирают все троя синдиката:
unc 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
dprint ELVIS_HAS_LEFT_THE_BUILDING - является началом новой программы после смерти 3 чаров, так почему ничё не работает??
Оффлайн
Smith написал(а):
НЕт стоит как истукан!)
значит, или ему явно не хватает сабжа, или у него какие-то проблемы с моветофлагом. если напрямую вбитое в консоль ai2_movetoflag patrol_striker_3 29
, значит, что-то ему всё-таки мешает...
Оффлайн
Мih@ написал(а):
Smith написал(а):
НЕт стоит как истукан!)
значит, или ему явно не хватает сабжа, или у него какие-то проблемы с моветофлагом. если напрямую вбитое в консоль
ai2_movetoflag patrol_striker_3 29
, значит, что-то ему всё-таки мешает...
Я раз 10 позапускал 1 сохран., из 10 раз он все 2 раза бегал к флагу... НЕпонимаю от чего зависит... Странно
Иногда он ещё подбигает к тому месту где был телепортирован!
Отредактировал(а) Smith (15-07-2009 15:51:12)
Оффлайн
Мih@ написал(а):
dprint
после каждогоchr_wait_health
в помощь... смотри, какие из них дожидаются... в зависимости от порядка и скорости смерти тех троих...
А этот способ?? Почему он не прокатил? Всё логично же сделано Может дело в персонаже??
Оффлайн
Smith написал(а):
Мih@ написал(а):
dprint
после каждогоchr_wait_health
в помощь... смотри, какие из них дожидаются... в зависимости от порядка и скорости смерти тех троих...А этот способ?? Почему он не прокатил? Всё логично же сделано Может дело в персонаже??
НЕ чё не выходит Наверное что-то не то делаю((
Оффлайн
Smith, не знаю, как Михе, а мне влом гадать на кофейной гуще. У меня есть подозрения, но я не вижу смысла о них распостраняться, не имея представления о том, что собственно происходит. Если хочешь, чтобы я разобрался - выложи скрипт целиком, но при этом попробуй урезать его до минимальной версии, где проблема налицо.
Оффлайн
geyser написал(а):
Smith, не знаю, как Михе, а мне влом гадать на кофейной гуще. У меня есть подозрения, но я не вижу смысла о них распостраняться, не имея представления о том, что собственно происходит. Если хочешь, чтобы я разобрался - выложи скрипт целиком, но при этом попробуй урезать его до минимальной версии, где проблема налицо.
Я же уже расписал... Создал функцию и поставил её сюда:
unc 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
}
Сама функция:
func void three(void)
{
sleep 60
ai2_movetoflag patrol_striker_3 7009
ai2_setmovementmode patrol_striker_3 run
}
Должна была сработать((
В другие места писал и не помогло.
Оффлайн
Я сказал Выложи Скрипт Целиком, могу ещё раз повторить.
Убрать из скрипта всё лишнее я тебя уже не прошу - шли так.
Главное - поподробнее опиши, что ты ожидаешь от скрипта...
Оффлайн
geyser написал(а):
Я сказал Выложи Скрипт Целиком, могу ещё раз повторить.
Убрать из скрипта всё лишнее я тебя уже не прошу - шли так.
Главное - поподробнее опиши, что ты ожидаешь от скрипта...
Я ожидаю, только того, чтобы бот пошёл на флаг после смерти троих страйкеров, и всё)
Оффлайн
Smith
http://translate.google.com/translate?j ... ry_state0=
Вот раскопал по теме!
Оффлайн
Мih@ написал(а):
manplant_level_logic.bsl написал(а):
dprint fork three
мдя...
Notepad написал(а):
Cannot find "three"
мдя...
dprint fork three
не это я удалил "bprint". Всё равно не работает, это я написал от отчаяния
vitya спасибо) Интересно)
Оффлайн
geyser написал(а):
Smith, последний раз говорю - выдай свой скрипт ЦЕЛИКОМ. Это значит - выдать ВСЕ файлы *.bsl из папки compound.
Ок.
Остальные файлы не менял...
Отредактировал(а) Smith (16-07-2009 12:07:59)
Оффлайн
А теперь ещё раз попрошу - ОБЪЯСНИ, пожалуйста, ПОТОЧНЕЕ, в чём состоит ожидаемый эффект.
Из скрипта не всегда понятно, что именно имелось в виду. А тебе надо упражняться в толковости.
Попробуй на словах объяснить идею скрипта - не на уровне "потока сознания", а более ВНЯТНО.
Оффлайн
geyser написал(а):
А теперь ещё раз попрошу - ОБЪЯСНИ, пожалуйста, ПОТОЧНЕЕ, в чём состоит ожидаемый эффект.
Из скрипта не всегда понятно, что именно имелось в виду. А тебе надо упражняться в толковости.
Попробуй на словах объяснить идею скрипта - не на уровне "потока сознания", а более ВНЯТНО.
Я просто хочу, чтобы "patrol_striker_3" - в нужный момент подбегал к флагам... в моём скрипте задуманно, чтобы бот (patrol_striker_3) побежал на флаг, после того, как: сдохнут три страйкера и закончится музыка.
Это происходит в функц. - "func void all_music_counters(void)" - stop music.
Туда я вставил написанною мною функцию "three" чтобы она параллельно активизировалась с той функ.
Функция "three" работает нормально, за исключением команды, написанной в ней:
sleep 600
ai2_movetoflag patrol_striker_3 0029
ai2_setmovementmode patrol_striker_3 run
Написав любую другую команду, например "chr_teleport konoko 0029" исполняет нормально! (Вовремя...)
Оффлайн
Smith, chr_forceholster(chelovek, 1) должно работать, но это не для удаления, а для запихивания в трусы.
Для удаления инвентаря скорее подходит вот это: chr_inv_reset(chelovek)
На твой предыдущий вопрос я ответил в новой теме:
Задачник по скриптированию: вопросы и ответы.
Извини за задежку и спасибо за участие в процессе.
Оффлайн