Это популярное сообщение. Dennis_Chikin 3 658 Опубликовано 16 Мая 2014 Это популярное сообщение. Поделиться Опубликовано 16 Мая 2014 Ковыряемся в файлах ТЧ Прежде чем писать в тему - внимательно читаем первый пост, и пользуемся поиском. Возможно, ответ на Ваш вопрос уже есть. Касательно телепатии: если Вы передаете Ваши файлы телепатическим путем - ответы будут передаваться тоже телепатически. Если Вы предлагаете угадать, отчего у Вас в подвале происходит странный стук - ответ будет передан стуком. 4 8 6 12 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Vano_Santuri 33 Опубликовано 23 Января 2010 Поделиться Опубликовано 23 Января 2010 Нет в разных, сначала стартует удаление и старт таймера на 5минут, после того, как сработает таймер идет спавн аномалий. Сейчас еще раз попробую. Что-то кончается, что-то начинается... Ссылка на комментарий
Monnoroch 6 Опубликовано 23 Января 2010 Поделиться Опубликовано 23 Января 2010 (изменено) Забей-забей,я тут понял,что не в этом причина. Перепиши код,как я посоветовал - тогда и разговор можно продолжить.А так его читать и в уме оптимизировать и думать еще - мне сложно. Добавлено через 4 мин.: Я тут подумал - это вообще все ацтой. Секунду... Добавлено через 4 мин.: local tbl = {} function zaton_anom() lv_new = math.random(1700000) pos_new = level.vertex_position(lv_new) local obj = create_anomalies("zone_mine_electric_dinamic",3,pos_new.x,pos_new.y,pos_new.z,lv_new,0), table.insert(tbl,obj:id()) end function destroi_anomalies() for i = 1,#tbl do alife():release(alife():object(tbl[i]), true) end end Вот и все.Я использую только create_anomalies из твоего. А работать удаление будет в 700-800 раз быстрее твоего. попробуй мой код А зачем усложнять? Изменено 23 Января 2010 пользователем Monnoroch Ссылка на комментарий
Vano_Santuri 33 Опубликовано 23 Января 2010 Поделиться Опубликовано 23 Января 2010 Вот переписал как и сказали ? function destroi_anomalies() for k=1, 65535 do local obj = level.object_by_id(k) if obj then if IsAnom(obj) then remove(obj) end end end end function IsAnom (obj) local s = obj:section() return string.find(s, "zone_mine_electric_dinamic") end function remove(obj) if obj then alife():release(alife():object(obj:id()), true) end return obj~=nil end Или может еще убрать что-нибудь? Добавлено через 2 мин.: Monnoroch, И так все просто? Что-то кончается, что-то начинается... Ссылка на комментарий
Monnoroch 6 Опубликовано 23 Января 2010 Поделиться Опубликовано 23 Января 2010 local obj = alife():create(section,pos,lv,gv) obj:kill(obj) Ссылка на комментарий
Vano_Santuri 33 Опубликовано 23 Января 2010 Поделиться Опубликовано 23 Января 2010 Monnoroch, Сработало, и вправду быстрее намного работает, даже не виснет ничего. А если взять несколько таких function zaton_anom1() lv_new = math.random(1700000) pos_new = level.vertex_position(lv_new) local obj = create_anomalies("zone_mine_electric_dinamic",3,pos_new.x,pos_new.y,pos_new.z,lv_new,0), table.insert(tbl,obj:id()) end Но с разными аномалиями "zone_mine_electric_dinamic" они будут заноситься в таблицу? И удаляться оттуда? Что-то кончается, что-то начинается... Ссылка на комментарий
Monnoroch 6 Опубликовано 23 Января 2010 Поделиться Опубликовано 23 Января 2010 (изменено) Vano_Santuri, local sect = "zone_mine_electric_dinamic" function zaton_anom_many(sect) for i=1,10 do zaton_anom1(sect..i) end end function zaton_anom1(sectt) lv_new = math.random(1700000) pos_new = level.vertex_position(lv_new) local obj = create_anomalies(sectt,3,pos_new.x,pos_new.y,pos_new.z,lv_new,0), table.insert(tbl,obj:id()) end Изменено 23 Января 2010 пользователем Monnoroch Ссылка на комментарий
Vano_Santuri 33 Опубликовано 23 Января 2010 Поделиться Опубликовано 23 Января 2010 Monnoroch, извини, но у тебя кое-где ошибки, возможно и не ошибки, но с ними у меня не работало 1) ........ew.z,lv_new,0), --- эта запятая не нужна, иначе вылет на глобальную obj , ведь с запятой функция неверная. .....table.insert(tbl,obj:id()) , неверный метод(ошибка ссылалась на metod id) нужно ставить так table.insert(tbl,obj.id) тогда все отлично работает. И еще вопрос, эта таблица постоянная или нет? т.е спавню аномалии, данные сохраняются, могу побегать по локам, и когда вернусь на эту и запущу функциию удаления, аномалии удалятся? Если запущу с другой локи, тоже удалятся?(будут ли ошибки)? И каков предел таблицы? сколько она может в себя вместить? Что-то кончается, что-то начинается... Ссылка на комментарий
Monnoroch 6 Опубликовано 23 Января 2010 Поделиться Опубликовано 23 Января 2010 (изменено) Vano_Santuri, нет.при выходе\загрузке игры таблица чистится. как восстанавливать - пиши на актора.как это делать - ууу,по пакетам читай,тут как раз обсуждение идет по ним... ну ошибся,что тут такого...я же не тестировал и писал то так,бегло. Вместить...ну....тысяч 100-200 наверное - цифер то.. Добавлено через 32 мин.: _Призрак_, спавнит нормального обычного НПС? Изменено 23 Января 2010 пользователем Monnoroch Ссылка на комментарий
Garry_Galler 7 Опубликовано 23 Января 2010 Поделиться Опубликовано 23 Января 2010 (изменено) _Призрак_ Насчет трупа - obj:kill(obj) сработает только если сделать паузу между креате и килл - я так делал - таймер на 1 секунду. И готово - труп есть. Но это слишком громоздко. Все проще. Есть специальный метод для этого - в общем дарю способ: local sobj = alife():create("stalker", position, level_vertex_id, game_vertex_id) sobj:on_death() Vano_Santuri для твоей таблицы - вот пример сохранения одномерной таблицы из моих скриптов - сохраняется таблица такого же вида как у тебя. --сохранение данных function morg_save(p) local i = 0 --подсчитаем кол-во ключей for k,v in pairs(morg) do i = i + 1 end --запишем кол-во p:w_u8(i) --сохраняет целые числа до 256 for k, v in pairs(morg) do p:w_u16(k) --сохраняет числа до 65536 --вообще сохранять здесь ключи необязательно так как они идут в математическом порядке p:w_u16(v) --достаточно только значения сохранить end end --загрузка данных function morg_load(r) --загрузим кол-во ключей local i = r:r_u8() --запустим цикл for k = 1, i do --присвоим значения local id = r:r_u16() --соотвественно это тоже лишнее, но пусть для примера останется - если ключи будут идти не математическом порядке - вот тогда надо их точно сохранять morg[id] = r:r_u16() --здесь заполняем таблицу ключ=значение end end обе функции нужно вписать в бинд сталкер в функции function actor_binder:save(packet) и function actor_binder:load(reader) - каждую вписывать в одно и тоже место - чтобы они располагались в одинаковых местах каждой функции. для спавна разных аномалий добавляешь в функцию - в тело оператора for do - эту строчку local section = #anom[math.random(#anom)] - а к ней пишешь табличку anom с именами секций аномалий типа так local anom ={'zone_gravi_zone','zone_mincer', 'zone_witches_galantine','zone_mosquito_bald', 'zone_monolith','zone_zhar','zone_radioactive', 'zone_emi','zone_no_gravity','zone_zharka_static'} в креате соотвественно вместо имени пишешь section - и получаешь рандомный набор аномалий на любой вкус. Изменено 23 Января 2010 пользователем Garry_Galler Ссылка на комментарий
Malandrinus 615 Опубликовано 23 Января 2010 Поделиться Опубликовано 23 Января 2010 Garry_Galler, это как бы не специальный метод для убиения, а коллбек серверного объекта на смерть. Т.е. он автоматом вызывается при смерти непися. Весьма неожиданно, что он сам по себе вызывает смерть неписей. Я не пробовал, но может быть можно использовать метод kill_entity класса alife_simulator. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Monnoroch 6 Опубликовано 24 Января 2010 Поделиться Опубликовано 24 Января 2010 malandrinus, а коллбэк на хит вызывает хит? Ссылка на комментарий
Malandrinus 615 Опубликовано 24 Января 2010 Поделиться Опубликовано 24 Января 2010 Monnoroch, нет конечно. И вообще смысл колбека - не вызывать что-то, а напротив быть вызванным чем-то, чтобы дать в этот момент что-то сделать дополнительное. Поэтому меня и удивило немного, что on_death вызывает смерть. Однако работает, а kill_entity не работает, я только что проверил. Кстати, в ЗП для серверного класса добавили метод kill, видимо как раз для решения этой проблемы. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Monnoroch 6 Опубликовано 24 Января 2010 Поделиться Опубликовано 24 Января 2010 (изменено) malandrinus, Да я чисто по аналогии) И правда,аномально...мб ПЫС и сами не знают? Вопрос: что может это означать: local a ={} function a:func_1() end function a:func_2() end Это что,такой самопальный класс на основе таблицы? Изменено 24 Января 2010 пользователем Monnoroch Ссылка на комментарий
Vano_Santuri 33 Опубликовано 24 Января 2010 Поделиться Опубликовано 24 Января 2010 Garry_Galler, Спасибо, а как можно очищать эту таблицу? Допустим. 1)Спавним аномалии, данные о них записываются в таблицу. 2)Во время удаления эти данные извлекаются и аномалии удаляются. 3)Но, эти же данные остаются сохраненные в таблице, как их очистить? 4)В очищенную таблицу опять заносятся данные ..... Можно ли чистить её вообще? Что-то кончается, что-то начинается... Ссылка на комментарий
Monnoroch 6 Опубликовано 24 Января 2010 Поделиться Опубликовано 24 Января 2010 (изменено) Vano_Santuri, удалять: tbl = {} Добавлено через 3 мин.: Vano_Santuri, Проще по-другому делать.Ничего никуда не сохранять,просто в нет_спавне актора запускать спавн анамалий а в нет_дестрое их удаление. Изменено 24 Января 2010 пользователем Monnoroch Ссылка на комментарий
Malandrinus 615 Опубликовано 24 Января 2010 Поделиться Опубликовано 24 Января 2010 Monnoroch, Конструкция вида: function <имя_класса/таблицы>:<имя_функции/метода>(<список_аргументов>) <тело функции> end это на самом деле комбинация из двух синтаксических украшений. Приведённый код эквивалентен следующей конструкции: <имя_класса/таблицы>.<имя_функции/метода> = function(self, <список_аргументов>)<тело функции>end Или иными словами в таблицу просто добавляется ещё одна пара с ключом <имя_функции/метода> и значением типа "function". Сама функция при вызове подразумевает наличие первого скрытого аргумента self. В случае использования при вызове нотации с двоеточием: t:fun(<список_аргументов>) это в свою очередь эквивалентно записи t.fun(t, <список_аргументов>) Т.е. при вызове таблица/объект подставляется в качестве первого неявного аргумента, который соответственно станет неявным аргументов self в объявлении выше. Короче да, самопальный класс =) Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Vano_Santuri 33 Опубликовано 24 Января 2010 Поделиться Опубликовано 24 Января 2010 Что-то не допру : 1) Спавнили аномалию, её данные занеслись в таблицу? local tbl = {} function zaton_anom() lv_new = math.random(1700000) pos_new = level.vertex_position(lv_new) local obj = create_anomalies("zone_mine_electric_dinamic",3,pos_new.x,pos_new.y,pos_new.z,lv_new,0) table.insert(tbl,obj.id) end 2)В этом же скрипте (поставили на биндер актора) т.е данные из таблицы сохранились? Но куда они сохранились? function morg_save(p) local i = 0 for k,v in pairs(morg) do i = i + 1 end p:w_u8(i) for k, v in pairs(morg) do p:w_u16(k) p:w_u16(v) end end 3)Так же загружаем игру, в биндере выводятся данные этой таблицы function morg_load(r) local i = r:r_u8() for k = 1, i do local id = r:r_u16() morg[id] = r:r_u16() end end 4)Запускаем функцию удаления, и она выводит данные о таблице и удаляет анормалии по этим данным? которые загрузились из нетпакета? function destroi_anomalies() for i = 1,#tbl do alife():release(alife():object(tbl[i]), true) end end Так получается? Просто я не могу понять ход работы этой всей системы. Потом вопрос такой. Вот удалились аномалии. Данные все равно в таблице остались? Если да, то Monnoroch, как это понять? удалять: tbl = {} Т.е вообще из скрипта удалить, не использовать её ? И встречный вопрос , что делают функции записанные в таком виде? ххххх ={} это как глобальные? или как? Что-то кончается, что-то начинается... Ссылка на комментарий
Monnoroch 6 Опубликовано 24 Января 2010 Поделиться Опубликовано 24 Января 2010 Vano_Santuri, это - очистить таблицу.присвоить ей начальное значение {}. malandrinus, это тоже luabind? Ссылка на комментарий
Garry_Galler 7 Опубликовано 24 Января 2010 Поделиться Опубликовано 24 Января 2010 Vano_Santuri первая функция запишет айди аномалий в таблицу по принципу ключ=значение так как таблица у тебя индексируется по умолчанию - то будет так [1] = айди [2] = айди [3] = айди и т.д. вторая функция сохранит все данные из таблицы (при нажатии квиксейва, записи сохранения или перезагрузке) в объект "actor" средствами нет пакета. третья функция загрузит данные таблицы из объекта "actor" и заполнит таблицу заново. четвертая функция проитерировав табличку удалит аномалии по их айди из таблицы. если в конце функции удаления (перед последним end) написать local имя таблицы ={} -- то таблица будет объявлена как пустая - то есть очищена от всех данных. И теперь при новой генерации аномалии она будет заполнена новыми айди. объявление переменных без идентификатора local означает их автоматическое объявление как глобальных - то есть с областью видимости за пределами файла\функции где они объявлены. Чревато ошибками если имена глобальных переменных пересекутся. Ссылка на комментарий
Malandrinus 615 Опубликовано 24 Января 2010 Поделиться Опубликовано 24 Января 2010 это тоже luabind?Нет. То, что я сейчас описал - это голый Lua. Будет работать где угодно. Luabind естественно опирается на эти синтаксические возможности. Добавляет к этому предопределённые конструкторы/деструкторы, глобальную функция создания, наследование. Ну в принципе это и средствами Lua тоже можно сделать, но там это просто готовое есть. Кроме того, если здесь строится на базе таблицы, то в Luabind - на базе пользовательского объекта. Естественно, в основном он нужен для экспорта сишных классов. "Просто классы" Luabind как бы приводит к своему стандарту оформления. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти