IQDDD 5 Опубликовано 27 Мая 2009 Kirag а разве он сам не переводится при приближении актора к нему ближе, чем на радиус онлайна? Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 14 Июня 2009 (изменено) Vergas, local hud = get_hud() hud:HideActorMenu() Не уверен, но может помочь. И вот второй вариант: level.disable_input() level.hide_indicators_safe() local hud = get_hud() hud:HideActorMenu() hud:HidePdaMenu() level.enable_input() level.show_indicators() Добавлено через 22 мин.: Monnoroch, на ум приходит: actor:give_game_news("", "", [заранее сделанная текстура с чёрным шрифтом], 1000,20000) Изменено 14 Июня 2009 пользователем IQDDD Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 14 Июня 2009 (изменено) Gonarh, а вот такой вопрос: 1. Как в Lua писать данные в файл, как читать данные из файла? 2. Что такое NET пакеты и зачем они нужны? (это случай не что-то по типу winAPI) 3. Что за Frect():set(0,658,83,47)? 4. В стандартном news_manager: actor:give_game_news(news_caption, news_text, texture, timeout*1000, showtime) У вас на месте таймаута стоит Frect():set(0,658,83,47)? 5. Расскажите о методах GetHolder() и start_stop_menu(self,true). (Как я понимаю, start_stop_menu (self,true) открывает или закрывает элемент self, в нашем случае инвентарь.) Изменено 14 Июня 2009 пользователем IQDDD Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 15 Июня 2009 (изменено) malandrinus, Gonarh, в faction commander для ЧН как-то сделали запись в файл и чтение из него. Вот кусок кода: class "Setting" function Setting:__init() self.settingFileName = "gamedata\\faction_commander_setting.txt" self.settingTable = { command = { value = "", pattern = ".+", defaultValue = "default" }, magnitude = { value = "", pattern = "%d+", defaultValue = "0" }, ai = { value = "", pattern = "%a+", defaultValue = "disable" }, commission = { value = "", pattern = "%a+", defaultValue = "commission_off" }, } local file = io.open( self.settingFileName, "r" ) if file ~= nil then for name, info in pairs( self.settingTable ) do info.value = file:read( "*line" ) or "" end file:close() end for name, setting in pairs( self.settingTable ) do self:_checkIntegrity( name ) end end function Setting:__finalize() local file = io.open( self.settingFileName, "w" ) if file ~= nil then for name, setting in pairs( self.settingTable ) do file:write( setting.value, "\n" ) end file:close() end end function Setting:getValue( name ) return self.settingTable[ name ].value end function Setting:setValue( name, value ) self.settingTable[ name ].value = value self:_checkIntegrity( name ) end Изменено 22 Июня 2009 пользователем Pxan Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 16 Июня 2009 я сделал так: packet = net_packet() obj = db.actor obj:STATE_Write(packet) direction = packet:r_vector() у меня ругается на то, что метод STATE_Write () неизвестен. Что делать? Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 16 Июня 2009 я создал свой файл скриптов: MyScripts.script там написал функцию: BlaBlaBla(oneparam,twoparam) ... end вызвал её из другого скрипта вот так: MyScripts.BlaBlaBla (oneargument,towargument) у меня вылазит: [error]Arguments : LUA error: .... - чистое небо\gamedata\scripts\ui_main_menu.script:117: attempt to index global 'MyScripts' (a nil value) Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 16 Июня 2009 Borsalino, так вы all.spawn смогли разобрать? Или нет? Добавлено через 1 мин.: Явно не объявленная переменная будет глобальной по всей игре? Добавлено через 61 мин.: Ага... Уже ясно, что глобальной переменная является не во всех скриптах,а только в каком-то классе или вообще только в каком-то файле. Бум дальше тестить. Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 16 Июня 2009 Вот кусок кода: ObjSpawn = alife():create(section,pos,db.actor:level_vertex_id(),db.actor:game_vertex_id()) if NumObjectsFramedThroughTitles == nil or NumObjectsFramedThroughTitles == 0 then NumObjectsFramedThroughTitles = 1 else NumObjectsFramedThroughTitles = NumObjectsFramedThroughTitles + 1 end ObjectsFramedThroughTitles = {} ObjectsFramedThroughTitles[NumObjectsFramedThroughTitles] = ObjSpawn news_manager.RealLog("NPC №"..ObjSpawn:id().." enable") if not has_alife_info ("enabled_timer") then StartMinutes = tonumber(level.get_time_minutes()) db.actor:give_info_portion("enabled_timer") news_manager.RealLog("Start time "..tostring(StartMinutes)) end Как видим, сначала мы спавним чувака. Потом запоминаем его в таблицу ObjectsFramedThroughTitles под индекс 1. При попытке получить ID объекты происходит вылет, что метод не найден!!!! Чё делать? Чё за косяк? Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 17 Июня 2009 Ура!!!! Всё сделал: непись появляется и дохнет через три минуты: function main_menu:OnButton_credits_clicked() local ObjSpawn local long = 1 local section = "sim_default_duty_"..math.random(0,4) local prob = 101 if math.random (1,100) < prob then local ArLong = { [0] = 2.5, [1] = 3.5, [2] = 4.5, [3] = 9 } local obj = db.actor local dir = vector() local pos = vector() pos = obj:position() dir = obj:direction() pos.x = pos.x - dir.x * ArLong[long] pos.z = pos.z - dir.z * ArLong[long] ObjSpawn = alife():create(section,pos,db.actor:level_vertex_id(),db.actor:game_vertex_id()) if kill_object_id then number_obj_kill = number_obj_kill + 1 kill_object_id[number_obj_kill] = ObjSpawn.id else kill_object_id = {} number_obj_kill = 1 kill_object_id[number_obj_kill] = ObjSpawn.id end db.actor:give_info_portion ("enabled_timer") StartMinutes = tonumber(level.get_time_minutes()) end end function timer1() --проверка неписей if has_alife_info ("enabled_timer") then if StartMinutes == tonumber(level.get_time_minutes()) - 3 then RealLog("Disabled info") db.actor:disable_info_portion ("enabled_timer") local i local obj RealLog (number_obj_kill) for i = 1, number_obj_kill do obj = level.object_by_id(kill_object_id[i]) RealLog(kill_object_id[i]) RealLog(obj:id()) RealLog(obj:character_community()) obj:kill(obj) number_obj_kill = 0 end kill_object_id = nil end end end Но вот вопросы: 1. Насчёт метода kill(). В параметрах метода указывается игровой объект. Зачем, если метод применяется к объекту? Что за объект указывается в скобках? Мб, убийца? 2. При вызове метода kill() непись убивается: её здоровье снижается до нуля. Как скриптом нанести неписю урон в голову (ногу, руку, пах...)? Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 17 Июня 2009 И как написать? Мб, так: local a = vector () a = db.actor:direction() a.x = -a.x a.z = -a.z obj:hit(a,nil[что такое draftsman?],400,0.5,2[это, как я понимаю, константа типа урона пулей. Правильно?]):bone("bip01_head") Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 18 Июня 2009 А вот в скриптах постоянно встречается self? Что это за self? Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 18 Июня 2009 (изменено) Kirag, не знаю точно, но это помочь может. 1) А может вот так: gulag_members[gulag] = {} table.insert(gulag_members[gulag],v:id()) И проверьте gulag, вдруг nil. (в скрипте сверху gulag - это типа "гулаг", а ниже - уже типа "number". 2) Наверно, просто элемент таблицы нужно объявить как таблицу, т.е.: local table = {} local i for i = 1, 5 do table = {} end. В результате получаем таблицу с пятью столбцами и бесконечным числом строк, больше ничего не надо: навыки программирования помогут. Изменено 18 Июня 2009 пользователем IQDDD Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 18 Июня 2009 Kirag, вы попробовали элемент таблицы объявить как таблицу? см. мой пост выше. local table = {} table[1] = {} table.indert (table[1],db.actor:id()) 1 Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 18 Июня 2009 Storyteller, инфопоршень можно получить всего тремя путями: 1. Через диалог. <give_info_portion></give_info_portion> 2. Через логику. + 3. Через скрипты. db.actor:give_info_portion() Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 18 Июня 2009 (изменено) Storyteller, это способ через скрипты. думаю, вам ответ либо товарищ Gonarh, либо мастер malandrinus. Мне кажется, что надо делать так: сделать у пушки собственный sid. В actor_binder:on_item_take(obj), что находится в bind_stalker написать: local sid = [заготовленный sid] if obj:story_id() == sid then db.actor:give_info_portion("info_take_item_art_1") end malandrinus, так? Изменено 18 Июня 2009 пользователем IQDDD Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 20 Июня 2009 Какой параметр в net_packet'е (сталкер) отвечает за: 1. Здоровье. 2. Модель (визуал). 3. Чемодан (инвентарь) Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 21 Июня 2009 Два вопроса по скриптам: 1. Как поймать непися, который попал по ГГ? 2. Как поймать непися, по которому попал ГГ? 3. Как узнать хит, который получил ГГ в результате попадания по нему непися? 4. Как узнать хит, который был нанесён неписю ГГ? 5. При стрельбе из РПГ вылетает ракета? Это game_object? Если да, то как поймать? Если нет, то как получить место взрыва этой ракеты? Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 24 Июня 2009 (изменено) wolkolak, game_object:condition([значение сюда]) [=или сюда, точно не знаю] Добавлено через 31 мин.: malandrinus, сделал так, как вы сказали в спойлере "Тестирование скриптов без обрушения и перезапуска игры". В консоли сообщение, что "test.lua" типа не найден. (мб, в ЧН исходной директорией является не bin? но как-то маловероятным это кажется) Изменено 24 Июня 2009 пользователем IQDDD Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 27 Июня 2009 malandrinus, как я понимаю, в аргументах функции может быть функция. но как это реализовать? ведь если напишем: file1.function1(10,15,nil,...,file1.function2) то в аргументы передастся не сама функция, а её результат, т.е. то, что вернёт функция file1.function2. Или я ошибаюсь? Добавлено через 2 мин.: Storyteller, по-моему, однозначно стоит заглянуть на вики. Там всё есть по квестам. Поделиться этим сообщением Ссылка на сообщение