On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 69
Рейтинг: 5
ссылка на сообщение  Отправлено: 24.01.08 16:33. Заголовок: Несколько вопросов по скриптам


1. Есть ли аналог сишного #include?
блонкнот сам по себе - не самая лучшая IDE, а после сотой строки так и просто смерть
2. Можно ли сервису вручную влепить танк (и наоборот)?
допустим делаем actor("tank", вся фигня), после чего хотим ему нагрузить сервис. можно?
3. Можно ли убить сервис оставив на поле безхозный танк?
если я скажем хочу пересадить игрока в другой танк так, чтобы старый остался на месте? вообще насколько прочна связь сервис-танк?
4. есть ли ссылка на себя (аналог this)?
скажем, сработало событие on_damage, и надо вызвать функцию user.myOnDamage(this). можно ли это сделать как-нибудь так унифицированно, или надо каждый раз пихать свое имя явным образом?
5. предусмотрено ли динамическое высвобождение памяти?
если скажем я заведу массив о тысяче элементов, а потом решу его убить, это можно? или вообще не запариваться о памяти априори решив что "на наш век хватит"?
6. не столько по скриптам сколько по движку: возможно прикинуть, сколько АИ-сервисов потянет среднестатистическая машина?
если я в скрипте создам, скажем, сто сервисов - это как?
7. pushcmd опять же. сколько команд реально пихнуть в очередь?
скажем, с тысячи он не сдохнет? как быстро происходит обработка команд типа actor и kill? сильно ли увеличится время поиска объекта, если их (обектов) сотни? скажем сто сервисов и сто танков на них, у всех уникальные имена, а нам надо отловить один - сколько это времени займет?

Я тут только что сдал последний экзамен, и у меня есть желание сделать кампанию (на этот раз игручую). Если все получится, то по традиции будет много новых нестандартных скриптов, и максимальная интерактивность, но сначала хочется узнать насколько мои наполеоновские планы реальны - будет обидно если то, что я задумал, пойдет только на каких-нибудь глубоких голубых гигантах кремниевой мысли...

Спасибо: 0 
Профиль Цитата Ответить
Ответов - 22 , стр: 1 2 All [только новые]


постоянный участник




Пост N: 48
Рейтинг: 3
ссылка на сообщение  Отправлено: 24.01.08 19:10. Заголовок: блонкнот сам по себе..



 цитата:
блонкнот сам по себе - не самая лучшая IDE, а после сотой строки так и просто смерть


Юзай Notepad++ или любой другой текстовый редактор с подсветкой синтаксиса.

Спасибо: 0 
Профиль Цитата Ответить
постоянный участник




Пост N: 70
Рейтинг: 6
ссылка на сообщение  Отправлено: 24.01.08 19:41. Заголовок: по крайней мере на п..


по крайней мере на первый вопрос я сам себе ответил!! (ставлю себе +1))))
Если кому интересно:
первым делом заменяем строку package.path - сейчас ее значение равно "scripts//?.lua" что означает что скрипты прога будет искать только в папки скриптов. заменяем значение:

package.path="scripts//?.lua;campaign//?.lua"

после этого импорт проводится простой командой require("<имя файла без '.lua'>")
скажем файл следующего содержания

package.path="scripts//?.lua;campaign//?.lua"
require("Demo")

запустит демо кампанию

Спасибо: 0 
Профиль Цитата Ответить
Создатель




Пост N: 376
Рейтинг: 16
ссылка на сообщение  Отправлено: 24.01.08 22:23. Заголовок: Morse пишет: 1. Ест..


Morse пишет:

 цитата:
1. Есть ли аналог сишного #include?

Точного аналога нет, ибо в луа нет встроенного препроцессора. Зато есть функция dofile("имя файла"), которая выполняет указанный скрипт. На первый вопрос ты частично ответил правильно. package и requie придуманы как раз для того, чтобы хранить в них библиотеки функций. А вот запускать кампании таким образом не стоит, поскольку require выполняет скрипт только один раз. Это сделано для того чтобы библиотека функций, включенная в разные файлы, инициализировалась только один раз.

Morse пишет:

 цитата:
2. Можно ли сервису вручную влепить танк (и наоборот)?
допустим делаем actor("tank", вся фигня), после чего хотим ему нагрузить сервис. можно?
3. Можно ли убить сервис оставив на поле безхозный танк?
если я скажем хочу пересадить игрока в другой танк так, чтобы старый остался на месте? вообще насколько прочна связь сервис-танк?


Нет нельзя. Сервис и танк связаны жестко. Если убить танк, то сервис через 2 секунды родит себе новый. Если убить сервис, то он заодно грохнет свой танк. Я уже думал на тему переключение сервисов на танке. Там есть кой-какие сложности, но задача в принципе решаемая.

Morse пишет:

 цитата:
4. есть ли ссылка на себя (аналог this)?
скажем, сработало событие on_damage, и надо вызвать функцию user.myOnDamage(this). можно ли это сделать как-нибудь так унифицированно, или надо каждый раз пихать свое имя явным образом?


Нужно каждый раз пихать... Вообще, в луа принято писать self, но у меня такое не поддерживается. Пока не поддерживается.

Morse пишет:

 цитата:
5. предусмотрено ли динамическое высвобождение памяти?
если скажем я заведу массив о тысяче элементов, а потом решу его убить, это можно? или вообще не запариваться о памяти априори решив что "на наш век хватит"?


В луа управление памятью полностью автоматическое, можно не париться. Однако сама по себе память - ограниченный ресурс и распоряжаться ей надо экономно. Чтобы освободить массив, достаточно записать в переменную значение nil.

Morse пишет:

 цитата:
7. pushcmd опять же. сколько команд реально пихнуть в очередь?
скажем, с тысячи он не сдохнет? как быстро происходит обработка команд типа actor и kill? сильно ли увеличится время поиска объекта, если их (обектов) сотни? скажем сто сервисов и сто танков на них, у всех уникальные имена, а нам надо отловить один - сколько это времени займет?


В очередь надо стараться пихать поменьше. Даже если команда просто лежит в очереди, она отъедает какое-то время. Вот сейчас померил на моем проце core2 e6300 очередь из 10000 команд требует где-то 1 миллисекунду на обработку каждый кадр. Наверно не очень много... Но я бы все равно не советовал класть в очередь больше тысячи заданий. Поиск объекта по имени происходит очень быстро. Можно не париться.


ЗЫ
на тему IDE посетите страничку http://lua-users.org/wiki/LuaAddons

ЗЗЫ
я сам пользуюсь редактором TextPad с подсветкой синтаксиса луа. И еще у меня стоит [VS Lua Language Pack] - подсветка синтаксиса прямо в вижуал студио.


Спасибо: 0 
Профиль Цитата Ответить
постоянный участник




Пост N: 77
Рейтинг: 7
ссылка на сообщение  Отправлено: 27.01.08 00:49. Заголовок: И еще один вопрос: е..


И еще один вопрос: есть ли какой-нибудь аналог wait(), или как вообще заставить скрипт приостановиться?

Спасибо: 0 
Профиль Цитата Ответить
постоянный участник




Пост N: 49
Рейтинг: 3
ссылка на сообщение  Отправлено: 27.01.08 08:43. Заголовок: Насколько я знаю, ес..


Насколько я знаю, есть команда pause(true) и pause(false)

Спасибо: 0 
Профиль Цитата Ответить
постоянный участник




Пост N: 78
Рейтинг: 7
ссылка на сообщение  Отправлено: 27.01.08 13:31. Заголовок: Уж не знаю что делае..


Уж не знаю что делает pause, но точно не тормозит скрипты.
К тому же вряд ли скрипты будут тормозится таким манером, ведь после постановки в паузу снять будет крайне проблематично - паузнутый скрипт не сможет сам себе подать команду pause(false), и скрипт просто войдет в дедлок.

Спасибо: 0 
Профиль Цитата Ответить
постоянный участник




Пост N: 134
Рейтинг: 3
ссылка на сообщение  Отправлено: 27.01.08 14:00. Заголовок: Morse http://ru.zod...

Пешеход всегда прав... пока жив
Последняя версия моего мода
Спасибо: 0 
Профиль Цитата Ответить
постоянный участник




Пост N: 79
Рейтинг: 7
ссылка на сообщение  Отправлено: 27.01.08 14:30. Заголовок: Установка/снятие пау..



 цитата:
Установка/снятие паузы. Так же останавливается выполнение заданий из очереди (pushqueue)



не очень понятная формулировка. одно могу сказать точно: делаем простейший скрипт

pause(true)
message("YOYO")

и убеждаемся что pause - это не то

кстати в вики похоже ошибка - не pushqueue а pushcmd наверное...

Спасибо: 0 
Профиль Цитата Ответить
Создатель




Пост N: 380
Рейтинг: 16
ссылка на сообщение  Отправлено: 28.01.08 12:22. Заголовок: Morse Пауза останавл..


Morse Пауза останавливает игру, но не скрипты. Чтобы приостановить выполнение скрипта, можно поступить например так

 
function user.part1()
-- делаем что-то полезное
-- затем ставим в очередь продолжение скрипта через 3 секунды
pushcmd(user.part2, 3)
end

function user.part2()
-- ляля
end

-----
user.part1()


Спасибо: 0 
Профиль Цитата Ответить
Создатель




Пост N: 381
Рейтинг: 16
ссылка на сообщение  Отправлено: 28.01.08 12:24. Заголовок: ошибку исправил, ага..


ошибку исправил, ага

Спасибо: 0 
Профиль Цитата Ответить
постоянный участник




Пост N: 99
Рейтинг: 7
ссылка на сообщение  Отправлено: 03.02.08 02:14. Заголовок: я так понимаю что ма..


я так понимаю что массив (который почему-то называется таблицей) задается так
user.array={ident1=1,ident2=2...итд}
а как задать подобную радость в цикле? ident1 - не строка чтоб легко и просто собрать по кускам, а наглое обращение user.array["ident1"]=1 не встречает понимания.

Спасибо: 0 
Профиль Цитата Ответить
Создатель




Пост N: 391
Рейтинг: 16
ссылка на сообщение  Отправлено: 03.02.08 22:45. Заголовок: user.array={} -- соз..


user.array={} -- создали пустой массив
user.array["ident1"]=1 -- теперь все нормально

Спасибо: 0 
Профиль Цитата Ответить





Пост N: 4
Рейтинг: 0
ссылка на сообщение  Отправлено: 07.02.08 21:14. Заголовок: Insert Я хочу спрос..


Insert
Я хочу спросить я делаю компанию и у меня такая задумка мене надо чтоб после каждого убитого танка выпадала лечебка. Как это осуществить скриптами?
И еще мона задать определеный машрут для ботов???

Ник мой зарегистрирован на сайте Niks - Rus
Вот мой ID: 10210
Ник: Dezman
Спасибо: 0 
Профиль Цитата Ответить
Создатель




Пост N: 394
Рейтинг: 16
ссылка на сообщение  Отправлено: 07.02.08 23:00. Заголовок: Dezman к сожалению н..


Dezman к сожалению ни того ни другого сделать нельзя

Спасибо: 0 
Профиль Цитата Ответить





Пост N: 5
Рейтинг: 0
ссылка на сообщение  Отправлено: 07.02.08 23:35. Заголовок: Insert Жалко, но на..


Insert
Жалко, но надеюсь вы прикрутите это потом. Но вот как сделать вот сначала 2 танка когда один умрет появится другой???

Ник мой зарегистрирован на сайте Niks - Rus
Вот мой ID: 10210
Ник: Dezman
Спасибо: 0 
Профиль Цитата Ответить
постоянный участник




Пост N: 101
Рейтинг: 7
ссылка на сообщение  Отправлено: 08.02.08 03:10. Заголовок: все что связано со с..


все что связано со смертью танка вешается в свойство on_die сервиса. можно допустим сделать так:

service("ai",{name="bot1",on_die="kill(\"bot1\");user.nextbot()"})

function user.nextbot()
--а тут уже можно создавать аптечки, или там создавать других ботов, или там еще что-нибудь создавать
end


если дашь более подробное описание задачи смогу подсказать конкретный код.

единственное чего делать НЕЛЬЗЯ, это нельзя получить координаты танка и управлять ботами.
и то как известно если нельзя но очень хочется....
скажем, если карта небольшая можно в цикле нагенерить триггеров по всей поверхности карты, которые бы на on_enter в переменные user.tankX user.tankY (к примеру) заносили бы свои координаты. таким образом мы получим координаты танка с известной степенью точности.

Спасибо: 0 
Профиль Цитата Ответить





Пост N: 6
Рейтинг: 0
ссылка на сообщение  Отправлено: 08.02.08 09:03. Заголовок: Morse Короче смотри ..


Morse Короче смотри у меня такая штука 4 танка ездят. Если один умирает то после него появляется аптечка. Или там другое оружие. Просто у меня такая кампания.
А можна так сделать в массив засунь ну например: автоматическая пушка, пулемет, аптечка. И генерировать их ну чтоб они каждый раз что то другое выпадало.

Ник мой зарегистрирован на сайте Niks - Rus
Вот мой ID: 10210
Ник: Dezman
Спасибо: 0 
Профиль Цитата Ответить
постоянный участник




Пост N: 102
Рейтинг: 7
ссылка на сообщение  Отправлено: 08.02.08 15:46. Заголовок: не очень понятно опи..


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

Спасибо: 0 
Профиль Цитата Ответить





Пост N: 103
Рейтинг: 1
ссылка на сообщение  Отправлено: 09.05.08 21:01. Заголовок: а может ли скрипт со..


а может ли скрипт создания танка (servise("ai"......)) создавать отдельный класс танка (в обычной карте)?

Спасибо: 0 
Профиль Цитата Ответить
постоянный участник




Пост N: 154
Рейтинг: 3
ссылка на сообщение  Отправлено: 09.05.08 22:52. Заголовок: В смысле создать кла..


В смысле создать класс, которого нет в vehicles?

Спасибо: 0 
Профиль Цитата Ответить
Ответов - 22 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 1
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет