Smith » 12-07-2009 12:29:38 |
Я где-то видел тему насчёт AI персов! Как можно редактировать интелект персонажей. Сделать тупее или умнее! Или вовсе не убиваемых по мастерству боя??? И кстати как увеличить хп аппонентам так, что бы индикатор жизни изменялся последовательно... Заранее спасибо Или укажите ссылку где об этом ранее подробно обсуждалось!
|
Manticore » 12-07-2009 13:08:12 |
nick9 написал(а):Ты ёбанный по русски говори, а мне твоя иностранщина не нужна!!!
Это что значит? Некультурно здесь так общаться!
|
Шинатама » 12-07-2009 13:14:45 |
nick9 - за такие слова админы очень строго наказывают.
|
nick9 » 12-07-2009 13:18:36 |
За каие слова???
|
Шинатама » 12-07-2009 13:20:01 |
нормально. сначала облил грязью человека, а потом и удалил их же. так не делается.
|
nick9 » 12-07-2009 13:25:06 |
Вы про что вообще толкуете?Я не врубаюсь!!
|
Smith » 12-07-2009 15:24:06 |
nick9 написал(а):Вы про что вообще толкуете?Я не врубаюсь!!
Он просто сам не понял что ляпнул Ну так мне кто-нить ответит...
|
doktordulit » 12-07-2009 17:07:07 |
Первый твой вопрос это не вопрос,а утверждение. А по второму могу сказать что есть куча тем,про то что тебе надо, к примеру вот тут и тут.
|
geyser » 12-07-2009 17:45:24 |
Smith, "как увеличить хп аппонентам так, что бы индикатор жизни изменялся последовательно" ? Объясни, что имеешь в виду. Ты хочешь изменить не только текущее количество хелсов, а заодно и максимальное/полное количество? чтобы крутые хелсы не убывали? Это скриптами сделать нельзя, только в ресурсах ONCC и CHAR.
|
Шинатама » 12-07-2009 18:55:25 |
nick9 написал(а):Вы про что вообще толкуете?Я не врубаюсь!!
между прочем Manticore процитировал твои слова, так что нефиг отмазываться. тебе стоит извиниться за свое выражение, а если есть какие-то претензии к кому-то, то пиши в личку, а не обсирать (упс, сорри за выражение) людей публично
|
Smith » 12-07-2009 19:18:13 |
Так-с, ну лано я просто имел виду "цвет жизни", что бы изменялся плавно, а не ярко зелённый а потом вдруг жёлтый... Кто нить знает номера флагов в последнем уровне, на самом верху (где дуэль с Муро) а то ищу и никак не попаду на них, может кто знает... И ещё, глобализовать какой-нить уровень без програм моно? что-б попроще А то onisplit я не дорубаюсь как делать! Вроде всё норм. описано, но я просто нууб)
|
Мih@ » 12-07-2009 19:38:12 |
Smith написал(а):Так-с, ну лано я просто имел виду "цвет жизни", что бы изменялся плавно, а не ярко зелённый а потом вдруг жёлтый...
В ONGS меняешь байты с 0x1C и далее... 4 байта на количество долей, по 4 на процент здоровья, с которых доля начинается, по 4 на цвет доли (rgba). если лимита на количество там нет, можно хоть с точностью до 1 хп указать. )
Smith написал(а):Кто нить знает номера флагов в последнем уровне, на самом верху (где дуэль с Муро) а то ищу и никак не попаду на них, может кто знает...
~520 вроде кучка флагов есть. плюс-минус.
Smith написал(а):И ещё, глобализовать какой-нить уровень без програм моно? что-б попроще А то onisplit я не дорубаюсь как делать! Вроде всё норм. описано, но я просто нууб)
без программ - ну попробуй гипнотизировать ресурсы. -_- глобализация глобальна, она на то и глобализация, что все ресурсы в одно глобальное место складирует, а не отдельные уровни трогает. попроще - АЕ.
|
Smith » 12-07-2009 19:46:31 |
В ONGS я вообще не разбираюсь может найду время посежу )... Я вижу ты очень хорошо разбираешся, я уже не надеялся увидеть таких людей)) (таких подкованных в Они) Спасибо за инфу! Я слышал бота нельзя заставить бежать к заданным координатам, а только к флагам, это так? И флаг опять же делать в ONGS??
|
geyser » 12-07-2009 20:31:05 |
флаг опять же делать в ONGS?
Нет, флаг это FLAG: http://wiki.oni2.net/FLAG http://wiki.oni2.net/OBD_talk:BINA/OBJC/FLAG
|
Smith » 13-07-2009 19:05:59 |
(У меня все файлы расшарены (Global), но почему то я немогу перемещать ботов из одного уровня в другой - недоступны, хотя их модели заменять можно на другие. Что делать???
|
doktordulit » 13-07-2009 19:08:26 |
Для начало,как ты это делаешь?
|
Smith » 13-07-2009 19:24:17 |
Что именно делаю??
|
Мih@ » 13-07-2009 20:39:30 |
Smith, "боты" в понимании "персонаж с именем, набором свойств типа класс, место спавна, вещи, оружие, вызываемая при смерти функция и т.д." перечисляются в .BINA (CHAR) и глобализации не подлежат. то есть можно, конечно, сделать большую BINA со всеми чарами, но лучше не стоит: тут и коллизии повторяющихся имён, и непонять куда ссылающееся местоположение при создании... лучше и логичнее либо создавать новых чаров в соответствующем уровне, либо на уровне скриптов сделать из постороннего чара то, что нужно. класс, место, команда, хелсы, вооружение, поведение - всё приводимо к нужному виду, кроме имени. и кроме, разве что, особых флажков типа superammo. учитывая, что количество чаров (рисуемых, активных, соображающих) ограничено, обычно и стандартного набора должно хватать.
|
Smith » 14-07-2009 09:45:27 |
Мih@ написал(а):Smith, "боты" в понимании "персонаж с именем, набором свойств типа класс, место спавна, вещи, оружие, вызываемая при смерти функция и т.д." перечисляются в .BINA (CHAR) и глобализации не подлежат. то есть можно, конечно, сделать большую BINA со всеми чарами, но лучше не стоит: тут и коллизии повторяющихся имён, и непонять куда ссылающееся местоположение при создании... лучше и логичнее либо создавать новых чаров в соответствующем уровне, либо на уровне скриптов сделать из постороннего чара то, что нужно. класс, место, команда, хелсы, вооружение, поведение - всё приводимо к нужному виду, кроме имени. и кроме, разве что, особых флажков типа superammo. учитывая, что количество чаров (рисуемых, активных, соображающих) ограничено, обычно и стандартного набора должно хватать.
Вообщем я так понял, создать нового бота сложно, и тем более не в скриптах Чтобы создать бота нужно прописать в BINA новые данные (модель, имя, анимация...)? А потом просто бота прописать в скрипты?) Есть ли инструкция по созданию ботов?) И ещё вопросик! мне нужна команда, которая бы любые процессы выполняла последовательна. (Ну типа я открыл дверь, и бот после этого бежал бы на флаг или вытащил оружие, что-то вроде этого...)
|
geyser » 14-07-2009 10:55:09 |
"Чтобы создать бота нужно прописать в 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-пособие
|
Smith » 14-07-2009 14:41:28 |
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 ??? &&
|
Мih@ » 14-07-2009 15:49:00 |
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 » 14-07-2009 17:18:31 |
Я написал функцию а она не прокатила: (( func void TCTF(void) { chr_wait_health Griffin 0 ai2_spawn ParkStriker chr_location 1 -27.501019 1445.000000 -2914.32613
}
|
Мih@ » 14-07-2009 17:28:48 |
Smith, а вызов-то этой функции есть? ) и кто именно имеется ввиду под номером "1" в chr_location?
|
Smith » 14-07-2009 18:24:20 |
Мih@ написал(а):Smith, а вызов-то этой функции есть? ) - всмысле?)) Как её запустить? и кто именно имеется ввиду под номером "1" в chr_location?
- ПРОВЕРЯЛ ВСЁ ПРАВИЛЬНО!
|
Мih@ » 14-07-2009 18:57:45 |
Smith написал(а):всмысле?)) Как её запустить?
вилкой... из какого-нибудь исполняемого места. смотри пресловутое wait_to_help.
fork MyFunction кстати, функцию лучше не называть таким общим словом, имхо. и суть неясна, и пересечение с командой...
|
vitya » 14-07-2009 19:21:44 |
Люди вы nick9 извинити онмойдруг просто когдая книму домойзаходил вмести с другом, мы с nick9 пошли пить а его и мой дружок оказывается написал это мы токо понилиэто по цитате чёон там наколякал извините что я за него отмазываюсь,ноэто правда!!!!!!!!!!!
|
Smith » 14-07-2009 19:38:12 |
Мih@ написал(а):Smith написал(а):всмысле?)) Как её запустить?
вилкой... из какого-нибудь исполняемого места. смотри пресловутое wait_to_help.
fork MyFunction кстати, функцию лучше не называть таким общим словом, имхо. и суть неясна, и пересечение с командой...
Я эту команду "TCTF" вставил в другую функцию, "fork TCTF" - не сработало(
|
doktordulit » 14-07-2009 19:59:46 |
vitya написал(а):Люди вы nick9 извинити онмойдруг просто когдая книму домойзаходил вмести с другом, мы с nick9 пошли пить а его и мой дружок оказывается написал это мы токо понилиэто по цитате чёон там наколякал извините что я за него отмазываюсь,ноэто правда!!!!!!!!!!!
А чё он отрицал что это написал?
Smith написал(а):Я эту команду "TCTF" вставил в другую функцию, "fork TCTF" - не сработало(
Ты не понял Миху. Функцию делай TCTF,а в скрипте на нужном месте пиши fork TCTF.
|
Мih@ » 14-07-2009 20:02:16 |
Smith, ну скрипт в студию... а вообще, на то и есть dprint и dmsg , чтобы такие дела отлаживать.
|
geyser » 15-07-2009 00:11:17 |
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 (с консоли). Чтобы увидеть информацию, надо пользоваться английским движком, а не русским, так что советую поставить недавно опубликованный гуёвый Эдишн, в котором содержится английский движок вместе с новым Даоданом, который позволяет играть в русскую версию, имея при этом все преимущества английского движка.
|
Smith » 15-07-2009 07:49:18 |
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сохранение, за последнюю битву?? Но в какую??
|
Мih@ » 15-07-2009 08:05:02 |
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 и спавнится (а не заранее). когда она вызовется и вызовется ли вообще - неизвестно. особенно если скрипт будет не из последовательного "убил энного врага, заспавнился энплюспервый", а с динамичным месивом.
|
Smith » 15-07-2009 08:32:33 |
М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
}
ДА и ещё Муро не атакует
|
vitya » 15-07-2009 08:45:29 |
А чё он отрицал что это написал?
Говорё же написал не он, а стёр он! У него такая реакция!
|
Мih@ » 15-07-2009 09:10:21 |
Smith написал(а):ai2_movetoflag 0516 C_Sr19
дословно "флаг 0516, иди к персонажу". +)) первый аргумент - персонаж, а второй - флаг.
Smith написал(а):ai2_attack C_Sr19 Muro
да это вообще весьма условная штука... точно не уверен, но вроде это функция просто выставляет персонажу приоритет для атаки. например, в оригинале финальной битвы - Муро всегда атакует игрока, до достижения им 200 хелсов остальные синдикатовцы заняты лишь TCTF. когда же muro_in_danger eq 1, все начинают фокусить игрока. никакой мощной низкоуровневой привязки нет.
|
Smith » 15-07-2009 09:18:12 |
Мih@ написал(а):Smith написал(а):ai2_movetoflag 0516 C_Sr19
дословно "флаг 0516, иди к персонажу". +)) первый аргумент - персонаж, а второй - флаг.
Smith написал(а):ai2_attack C_Sr19 Muro
да это вообще весьма условная штука... точно не уверен, но вроде это функция просто выставляет персонажу приоритет для атаки. например, в оригинале финальной битвы - Муро всегда атакует игрока, до достижения им 200 хелсов остальные синдикатовцы заняты лишь TCTF. когда же muro_in_danger eq 1, все начинают фокусить игрока. никакой мощной низкоуровневой привязки нет.
А вот я хочу что бы при смерти гриффина опять появлялся вертолёт, ну и поновой 2 TCTF (можно без гриффина)! функцию сделал камеры удалил, невышло(( Как правильно оформить процедуру??
|
Мih@ » 15-07-2009 10:34:50 |
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.
|
Smith » 15-07-2009 11:31:46 |
Спасибо Mih@ сработало)) Ещё проблемка, я пару синдикатов телепортировал на крышу (в финальную битву) Битва началась... всё замечатель, но радиус обзора челов мелковат( Ближе к середины битвы 2 TCTF в одном углу ,пару синдикатов по центру... И друг друга не видят... Короче как сделать радиус обзора больше? Скриптом можно обойтись?
|
Мih@ » 15-07-2009 12:04:25 |
Smith, скриптом... смотря по ситуации... самое простое - периодическое обновление рекурсивной функцией... всё те же ai2_attack между нужными чарами, ai2_movetoflag для сбора народа в кучку, и т.п.
|
Smith » 15-07-2009 12:23:04 |
М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 а бот идти к нему не хочет (
|
Мih@ » 15-07-2009 12:42:46 |
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
пыщъ.
|
Smith » 15-07-2009 13:48:04 |
Получилось! Но вот например в 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 страйкеров он побежал к флагу... (Препятствий к флагу нет)
|
Мih@ » 15-07-2009 14:04:22 |
Smith, дебугай... консоль ведь есть, всё есть... dprint /dmsg в каждом сомнительном и не очень месте, проверка с 1 страйкером, проверка зависимости от порядка убивания (когда 3 умирает первым и становится хладным трупом, и chr_wait_health уже проходит мимо)...
|
Smith » 15-07-2009 15:13:51 |
Вот функция:
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 чаров, так почему ничё не работает??
|
Мih@ » 15-07-2009 15:31:10 |
о_О не бежит при вызове all_music_counters() с консоли?
|
Smith » 15-07-2009 15:34:02 |
Мih@ написал(а):о_О не бежит при вызове all_music_counters() с консоли?
НЕт стоит как истукан!)
|
Мih@ » 15-07-2009 15:37:28 |
Smith написал(а):НЕт стоит как истукан!)
значит, или ему явно не хватает сабжа, или у него какие-то проблемы с моветофлагом. если напрямую вбитое в консоль ai2_movetoflag patrol_striker_3 29 , значит, что-то ему всё-таки мешает...
|
Smith » 15-07-2009 15:46:48 |
Мih@ написал(а):Smith написал(а):НЕт стоит как истукан!)
значит, или ему явно не хватает сабжа, или у него какие-то проблемы с моветофлагом. если напрямую вбитое в консоль ai2_movetoflag patrol_striker_3 29 , значит, что-то ему всё-таки мешает...
Я раз 10 позапускал 1 сохран., из 10 раз он все 2 раза бегал к флагу... НЕпонимаю от чего зависит... Странно Иногда он ещё подбигает к тому месту где был телепортирован!
|
Мih@ » 15-07-2009 16:12:03 |
dprint после каждого chr_wait_health в помощь... смотри, какие из них дожидаются... в зависимости от порядка и скорости смерти тех троих...
|
Smith » 15-07-2009 16:15:44 |
Мih@ написал(а):dprint после каждого chr_wait_health в помощь... смотри, какие из них дожидаются... в зависимости от порядка и скорости смерти тех троих...
А этот способ?? Почему он не прокатил? Всё логично же сделано Может дело в персонаже??
|
Smith » 15-07-2009 16:28:53 |
Smith написал(а):Мih@ написал(а):dprint после каждого chr_wait_health в помощь... смотри, какие из них дожидаются... в зависимости от порядка и скорости смерти тех троих...
А этот способ?? Почему он не прокатил? Всё логично же сделано Может дело в персонаже??
НЕ чё не выходит Наверное что-то не то делаю((
|
Мih@ » 15-07-2009 17:15:48 |
не выходит дпринт написать?
|
geyser » 15-07-2009 18:18:19 |
Smith, не знаю, как Михе, а мне влом гадать на кофейной гуще. У меня есть подозрения, но я не вижу смысла о них распостраняться, не имея представления о том, что собственно происходит. Если хочешь, чтобы я разобрался - выложи скрипт целиком, но при этом попробуй урезать его до минимальной версии, где проблема налицо.
|
Smith » 15-07-2009 19:26:46 |
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 » 15-07-2009 20:48:01 |
Я сказал Выложи Скрипт Целиком, могу ещё раз повторить. Убрать из скрипта всё лишнее я тебя уже не прошу - шли так. Главное - поподробнее опиши, что ты ожидаешь от скрипта...
|
Smith » 16-07-2009 06:54:10 |
geyser написал(а):Я сказал Выложи Скрипт Целиком, могу ещё раз повторить. Убрать из скрипта всё лишнее я тебя уже не прошу - шли так. Главное - поподробнее опиши, что ты ожидаешь от скрипта...
Я ожидаю, только того, чтобы бот пошёл на флаг после смерти троих страйкеров, и всё)
|
Мih@ » 16-07-2009 07:54:45 |
manplant_level_logic.bsl написал(а):dprint fork three
мдя...
Notepad написал(а):Cannot find "three"
мдя...
|
vitya » 16-07-2009 08:06:53 |
Smith http://translate.google.com/translate?j ... ry_state0= Вот раскопал по теме!
|
Smith » 16-07-2009 09:11:52 |
Мih@ написал(а):manplant_level_logic.bsl написал(а):dprint fork three
мдя...
Notepad написал(а):Cannot find "three"
мдя...
dprint fork three не это я удалил "bprint". Всё равно не работает, это я написал от отчаяния vitya спасибо) Интересно)
|
Мih@ » 16-07-2009 09:37:35 |
неудивительно, что не работает, когда функции three вообще нет...
|
Smith » 16-07-2009 09:57:01 |
Мih@ написал(а):неудивительно, что не работает, когда функции three вообще нет...
фУНКЦИЮ three я прописал в файле "manplant_main" Я проверял функция работает исправна а вот команда мувиТуФЛАГ - НЕт!!)
|
geyser » 16-07-2009 11:30:09 |
Smith, последний раз говорю - выдай свой скрипт ЦЕЛИКОМ. Это значит - выдать ВСЕ файлы *.bsl из папки compound.
|
Smith » 16-07-2009 11:47:45 |
geyser написал(а):Smith, последний раз говорю - выдай свой скрипт ЦЕЛИКОМ. Это значит - выдать ВСЕ файлы *.bsl из папки compound.
Ок.
Остальные файлы не менял...
|
geyser » 16-07-2009 12:47:32 |
А теперь ещё раз попрошу - ОБЪЯСНИ, пожалуйста, ПОТОЧНЕЕ, в чём состоит ожидаемый эффект. Из скрипта не всегда понятно, что именно имелось в виду. А тебе надо упражняться в толковости. Попробуй на словах объяснить идею скрипта - не на уровне "потока сознания", а более ВНЯТНО.
|
Smith » 16-07-2009 13:01:05 |
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 » 18-07-2009 18:47:17 |
Кто-нибуть, обясните! Как удалить у бота оружие?? (Если изначально оно у него присутствует) Прописывал команду chr_forceholster не помогло(
|
geyser » 19-07-2009 04:59:35 |
Smith, chr_forceholster(chelovek, 1) должно работать, но это не для удаления, а для запихивания в трусы. Для удаления инвентаря скорее подходит вот это: chr_inv_reset(chelovek)
На твой предыдущий вопрос я ответил в новой теме: Задачник по скриптированию: вопросы и ответы. Извини за задежку и спасибо за участие в процессе.
|