Форум » Вопросы и ответы » Вопросы по скриптам » Ответить

Вопросы по скриптам

Киллер: Задавайте вопросы по скриптовому языку ЗОД и ждите скорейшего ответа на них!

Ответов - 285, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All

vlad0dalv: жаль

Morse: vlad0dalv пишет: А как тогда сделать так чтобы сервис выполнял последовательно разные ai действия с самого появления? как ты себе это представляешь? допустим ты выдал сервису последовательность команд - как он должен определить что данная команда выполнена и можно приступать к следующей? ну предположим с маршем и подбором еще можно - бот добирается до определенной точки и это можно считать завершением. а атака? до первого попадания? до уничтожения? до обращения в бегство? ведь самостоятельно все это проделать очень просто: сказал боту ехать туда-то, и шмяк туда триггер, в on_enter которого следующую команду. сказал подобрать предмет, а в on_pickup ему новую дерективу. сказал боту "убить", а в on_destroy убиенного - продолжение. А вообще конечно боты кривовастенькие. Округление пути B-сплайнами это конечно сурово, но при этом следует признать что к нынешней версии они уже устарели. Что ж, ничто не идеально, надо выбирать ориентироваться ли на игру с людьми (сеть) или с компом (боты). Думаю большинство предпочтет сеть.

vlad0dalv: как ты себе это представляешь? допустим ты выдал сервису последовательность команд - как он должен определить что данная команда выполнена и можно приступать к следующей? ну предположим с маршем и подбором еще можно - бот добирается до определенной точки и это можно считать завершением. а атака? до первого попадания? до уничтожения? до обращения в бегство? ведь самостоятельно все это проделать очень просто: сказал боту ехать туда-то, и шмяк туда триггер, в on_enter которого следующую команду. сказал подобрать предмет, а в on_pickup ему новую дерективу. сказал боту "убить", а в on_destroy убиенного - продолжение. Morse ДЕЛО В ТОМ, ЧТО Я ЭТО И ДЕЛАЛ ТАК ЖЕ НО НЕ ПОЛУЧАЛОСЬ, ПОЭТОМУ Я СЮДА И ПРИШЁЛ. Попробуй сам так сделать и проверь.


Morse: вот даже специально попробовал [pre] reset() conf.sv_timelimit = 0 conf.sv_fraglimit = 0 conf.sv_nightmode = false loadmap("campaign/Demo/maps/part1.map") actor("respawn_point", 100, 100, {team=1}) user.ai_obj=service("ai", {nick="Subj", team=1, active=0}) actor("trigger",100,100,{on_enter="ai_march(user.ai_obj,500,100)"}) actor("trigger",500,100,{on_enter="ai_march(user.ai_obj,500,500)"}) actor("trigger",500,500,{on_enter="ai_march(user.ai_obj,100,500)"}) actor("trigger",100,500,{on_enter="ai_march(user.ai_obj,100,100)"}) [/pre]создай файл <имя твоей любимой девушки>.lua в папке campaign и скопируй туда этот текст, и запусти как кампанию. убедишься что все работает. кстати баг: боты не оставляют следов от гусениц.

vlad0dalv: А почему у меня не получилось?, ведь тоже самое!

vlad0dalv: Ладно скажи в чём я ошибся: В ИГРЕ [pre] on_enter= actor("respawn_point", 100, 100, {team=0}) я on_enter= user.ai_obj=service("ai", {name="helper", team=0, active=0}) я on_enter= ai_pickup(user.ai_obj,"gun") бот on_pickup= ai_march(user.ai_obj,200,200) бот on_enter= ai_attack(user.ai_obj,"enemy") бот on_destroy= ai_march(...)[/pre] и т. д. пишет: object or name expected to, got nil и самое смешное, что они начинают ездить, но оружие по команде не берут (и вообще не берут; передвигаются хаотично или обычно от стационарных пушек)

Morse: Да без понятия я где ты там ошибся. Одно могу сказать наверняка: где-то - точно ошибся. Пример #2 [pre] reset() conf.sv_timelimit = 0 conf.sv_fraglimit = 0 conf.sv_nightmode = false loadmap("campaign/Demo/maps/part1.map") actor("respawn_point", 100, 100, {team=1}) user.ai_obj=service("ai", {nick="Subj", team=1,active=0,on_respawn="ai_march(user.ai_obj,500,100)"}) user.weapon=actor("weap_autocannon",500,500,{on_pickup="ai_attack(user.ai_obj,user.stat)"}) user.stat=actor("turret_cannon",100,500) actor("trigger",500,100,{on_enter="ai_pickup(user.ai_obj,user.weapon)"}) [/pre] Рецепт тот же самый

vlad0dalv: А зачем писать user.ai_obj, если можно просто имя (У меня с именем работает, но только один раз с момента появления)

Morse: во-первых так грамотнее с точки зрения теории программирования - в качестве параметра ты передаешь в функцию объект, а не какую-то бессмысленную строку. во-вторых объекты - вещь знакомая, всегда очевидно чего он может и как его можно использовать. ну и наконец в-третьих - чтобы не эскейпить кавычки. текст из-за них в такую мешанину превращается...

инс: vlad0dalv затем еще, чтобы не выдумывать уникальных имен для всех объектов, чтобы по-простому работать с массивами объектов, чтобы иметь возможность обращаться к безымянным объектам, чтобы удобнее обращаться к свойствам объектов через точку, а не через pset/pget, чтобы при отладке скрипта в консоли получать подсказку по свойствам (пишешь user.ai_obj. потом жмешь Tab и сразу видишь, какие у объекта есть свойства). Наконец, это быстрее в плане производительности - ссылка напрямую связана с конкретным объектом, а по имени нужно каждый раз искать нужный объект среди кучи других.

VIRUS: Morse пишет: --создает объект "лес", который повреждает все находящиеся рядом танки со скоростью dam*60 hp в секунду --сам объект движется по фигуре лиссажу с центром в stx sty радиусами rx ry частотами ax ay начальной фазой t --и скоростью 1/sp. nameo - имя, должно быть непустым и уникальным. например запуск с параметрами --user.moveRadiation(10,10,7,3,1,1,0,500,10,"test") создаст объкт движущийся по эллипсу с центром в 10 10 и радиусами --7 по горизонтали и 3 по вертикали с малой скоростью и сильным дамагом (танк выносится за один проход) function user.moveRadiation(stx,sty,rx,ry,ax,ay,t,sp,dam,nameo) for i=1,60 do local coordx = stx*32+rx*32*math.cos(ax*(i+t)*2*3.1415/sp) local coordy = sty*32+ry*32*math.sin(ay*(i+t)*2*3.1415/sp) pushcmd(function() if exists(nameo.."wo") then kill(nameo.."wo") end if exists(nameo.."tr") then kill(nameo.."tr") end actor("wood",coordx,coordy,{name=nameo.."wo"}) actor("trigger",coordx,coordy,{name=nameo.."tr",radius=2,on_enter="damage("..dam..",who)"}) end,i/60) end t=t+60 if t>=sp then t=t-sp end pushcmd(function() user.moveRadiation(stx,sty,rx,ry,ax,ay,t,sp,dam,nameo) end, 1) end наконецто это понял :) но не могу понять что значят эти знаки: (если я хочу создать несколько ящиков которые движутся по линии) Morse пишет: stx sty Morse пишет: rx ry Morse пишет: t Morse пишет: ax ay

Morse: эти знаки значат названия переменных. что эти переменные делают вроде бы описано весьма четко. линия впринципе тоже являет собой фигуру лиссажу, просто одна из частот должна быть равной нулю, или частоты должны быть равны.

VIRUS: Morse я не понимаю что такое частоты...

VIRUS: Morse мой мозг понял всё, единствинный вопрос - обьект создаеться или создан?

VIRUS: А как сделать взрыв по неизвесным координатам, которые узнаються с помошью Positon

инс: [pre2]damage(10, actor("user_object", position(obj), {health=1,max_health=1})) -- obj - это имя ссылка на объект, от которого нам нужны координаты[/pre2]

VIRUS: инс большое спасибо

Артур: инс пишет: damage(10, actor("user_object", position(obj), {health=1,max_health=1})) В точности так? =) И в дополнение к VIRUS - что надо добавить чтоб взрыв был например с перерывом в х секунд, но постоянно на протяжении всей карты??? И еще, куда скрипт выше писать в редакторе КАРТ (не кампании)?

VIRUS: Артур пишет: И в дополнение к VIRUS - что надо добавить чтоб взрыв был например с перерывом в х секунд, но постоянно на протяжении всей карты??? http://zod.borda.ru/?1-4-0-00000033-000-0-0#012 почитай! Артур пишет: И еще, куда скрипт выше писать в редакторе КАРТ (не кампании)? Перефразируй

Артур: VIRUS пишет: Перефразируй ну в обычном редакторе карт это куда писать??? (Можно в триггер с радиусом 999999999?)



полная версия страницы