по поводу спавна: спавнь просто от одной точки в промежутки времени не зависимо от ГГ и всяких расстояний
по поводу вылетов: уже многие говорили что они лечатся рестартом с последнего сейва(они НЕ стабильны), чаще всего бывают из за кривого спавна чего либо
Stalk15
1 тут
2 берёт все значения которые указаны условием в цикле, то есть конкретней если сказать то начинается итерация от нуля и до cnt-1(общее кол-во минус 1)
отредактировал(а) Struck: 23-12-2010 11:17 GMT3 час. Снова в строю.
erlik
Не знал. Спасибо за информацию.
"Спрятали", по всей видимости, потому, что существующие способы и быстрее, и проще, и памяти меньше занимают. А выкинуть, наверное, жалко было =)
Gun12
Спрятали просто потому что... спрятали. :-) Забыли упомянуть\расписать в официальной документации. НО пишут что в верcии Lua 5.2 (уже вроде как есть доступная бетаверсия) на это раз упомянуть не забыли.:-)
И существующие способы вряд ли быстрее - мой вариант split() на основе данного шаблона работает в ~80 раз быстрее существующих реализаций split() в сталкере.
Но надо бы конечно еще сравнить ее по скорости с официальной split() из библиотеки lpeg.
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Gun12
Отличный вариант - я до такого варианта шаблона как то не допер. Поэтому искал в другом направлении.
Небольшая модификация твоего вариант**5001b67681f3126adde4**.."]+") do -- т.е. указать сепараторы
-- или
--for v in s:gmatch('[%w%_]+') do
if r then t[v] = true
else table.insert(t,v)
end
end
return t
end[/code]
PS: при разборе строки состоящей из десяти тысяч строк слов работает практически с тем же результатом, что и мой вариант(хотя мой вариант ухудшает производительность в два раза при необходимости вставлять пробелы). Так что твой лидирует. Показатель твоего 0.015 сек.
Штатный вариант используемый в модах дает результат в 1.3 сек.
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
А ты ещё и занимаемую память проверь. Ещё один, хоть и небольшой, но плюсик добавится.
Сейчас посмотрю как сделать с таблицами.
Я с тела, набирать ужаСТЬ.
-----
Вот-вот. Только хотел сказать
отредактировал(а) Gun12: 23-12-2010 13:27 GMT3 час. Не стань номинантом премии Дарвина.
Mastermind
Покажи мне это же самое в официальной справке по lua на lua.ru (или в справочной документации сопровождающей базовые библиотеки lua ) , а также в книге Иерусалимского.
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
MRN$
Не знаю чем именно в СТАЛКЕРЕ сортируют, но в Luа так :
Если массив однородный (числовой или строчный) , то
table.sort(таблица)
Если не однородный, то вторым аргументом в table.sort писать функцию-обработчик.
Ты скриптер или где? Человек, программирующий на определённом языке должен уметь находить нужную ему информацию самостоятельно. Справочная документация (очень поверхностно переведённая на русский) или книга Иерусалимского - не истина в последней инстанции. Нужно хотя бы немоного читать по английски, так как 80% книг и статей о разных языках программирования, в том числе и о Lua никогда на русском языке не выходили и не выйдут скорее всего.
Просто указанный метод разборки строк паттернами мы уже у себя два года как пользуем, и предположить не могли что он вдруг станет для кого-то открытием :-G
Вам Lua так ещё много готовит открытий чудных :-)
добавлено спустя 1 минуту
Gun12
table.sort работает только с таблицами у которых ключи числовые, на других не сработает, там надо что-то своё придумывать.
отредактировал(а) Mastermind: 23-12-2010 14:07 GMT3 час.
Struck МММ. я такое наблюдаю. На кордоне если на лагере новичком прыгнуть так на метров 60 вверх, то солдаты видны, они уже стоят на нужных местах.
Я смотрел в спавне, там вроде как солдат этих нет, т.е. они отреспавнились.
Но однако, иду я значит на генераторы, уже ушел от вызова респавна далеко, но вот псевдогиганты появляются лишь при приближении к ним примерно так на 100-70 метров. ну и они из одной точки начинают расползаться по точкам которые я им в логике прописал, теперь я понял о чем вы говорите, респавн происходит, но вот сами НПС или мутанты переходят в онлайн при близком расстоянии, вот что я имею введу.
Короче как повысить дальность при которой мутант переходит в онлайн?
erlik
Дружище, секунду. Кровь кипит. Mastermind
Если ВЫ обратили внимание, то в вопросе было сказано слово "массив"
Ни ХЭШ !, ни просто ТАБЛИЦА !, а именно МАССИВ.
А какие ключи в массиве ?... erlik
В принципе правильно ставил.
И результаты налицо.
отредактировал(а) Gun12: 23-12-2010 14:57 GMT3 час. Не стань номинантом премии Дарвина.
Бред говорите, в Lua нет такого понятия как массив. "Массивом" в Lua работает одномерная таблица без заданных ключей. А такую штуку вы никак не отсортируете, есть только сортировка по ключам. Пишите что-то свое.
#erlik :
Еще бы сделать возможность задавать таблицу сепараторов.
А зачем нужно её вообще создавать?
Я не понял твоего замысла.
Почему в аргумент "sер" при каждом вызове функции не передавать необходимые сепараторы?
Поясни, плз, идею.
Помогите с вылетом
Description : item not found, id
Arguments : encyclopedy_mutant_cat_general
Horrible area modВидео в журнале
--------------------------------------------------------------------
Важнейшая задача цивилизации - научить человека мыслить
Gun12
В строке может присутствовать не один вид разделителей - ,./^ & *: %; - все что угодно.
Во всех нормальных реализациях метода split() (в других языках ) присутствует возможность передачи как аргумента таблицы сепараторов, чтобы метод смог разобрать строку ориентируясь на заданный набор.
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
#Mastermind :
Бред говорите, в Lua нет такого понятия как массив.
Ну, как Вам уже говорили, мы университетов не заканчивали. Самоучки-с.
Поэтому ищем информацию где прийдется.
Когда-то нашел такое :
"В отличии от традиционных языков программирования, в Luа можно смешивать все виды задания полей. Однако, пока это возможно, Luа старается хранить массивы именно как массивы, а не хэши, что делает работу с массивами быстрее"
Могу и поискать из какой это статьи, но только дома с компа.
Можете связаться с автором, и так сказать на высшем уровне прийти к консенсусу.
А мы, плебеи, потом изменим своё мнение.
Если я правельно понимаю, добавленный тобой, "новый" мутант (кот) не занесен в инциклопедию.
Следовательно, необходима правка следующих файлов: xr_info, encyclopedia_mutants, info_known_objects для правильной работы вырезанных из игры монстров.
Собственно о чем тебе, в кратце тебе сказал тов. SkyLoader
for v in s:gmatch('[^%s%,]+') do
добавь в паттерн то , что нужно
'[^%s%\\%*%,%~%/%%%: ну и т.д. через знак процента]'
Или передавай необходимый набор для конкретной строки.
отредактировал(а) Gun12: 23-12-2010 16:07 GMT3 час. Не стань номинантом премии Дарвина.
Когда-то нашел такое :
"В отличии от традиционных языков программирования, в Luа можно смешивать все виды задания полей. Однако, пока это возможно, Luа старается хранить массивы именно как массивы, а не хэши, что делает работу с массивами быстрее"
Хых, какой консенсунс блин - вы сами не поняли что имеется в виду. Ага, Lua старается такие таблицы как массивы хранить. Только хранит она их в исполняемом коде в ОЗУ, а не "у нас тут". Мы "не с той стороны" кода находимся, и массивы определять не можем. Делаем таблицу, а дальше она сама разбирается как её хранить. Поэтому я и говорю - в Lua массивов нету. Есть "плоские" одномерные таблицы. А как уже она их там хранит в ОЗУ нас не касается, мы всё равно ничего с этим сделать не можем :lol)
И никаких функций нету в Lua для сортировки массивов, только для сортировки таблиц с номерными ключами. Поэтому сразу говорю, придумывайте что-то своё.
добавлено спустя 2 минут
Кстати, как интересно вы собираетесь определять - как там в данный момент Lua хранит вашу таблицу? Чтоб узнать, насколько быстро оно работает? :prankster:
отредактировал(а) Mastermind: 23-12-2010 16:05 GMT3 час.
Так. Получается, что весь смысл нашей дискуссии сводится к тому, что я что-то там неправильно назвал, хотя речь ведется об одном и том же?
И tаblе.sоrt таки работает с с этим "одним и тем же".
Спасибо конечно, но мне Ваша поправка не принесла ничего полезного в плане практики.
На сем закончу дискуссию, т.к. и количество моих постов на портале говорит о предмете беседы.
О! Тут делом занимаются! :-) erlik, Gun12
Спасибо за уже проделанную работу!
Когда-то (в начале кодоко**5004b67681f3126adde4**ctgarbage("collect")
collectgarbage("collect")
return collectgarbage("count")
end[/code]
Странно, что у тебя выдает с десятичными ...
Кстати, а зачем 'bHash' затаскивать внутрь цикла распарсивания строки? При длинной многочленной строке проверки на этот флаг излишни (ИМХО). Не проще ли типа:
[code]function Parse_StrToTbl(sStr, sDiv, Mode)
local tRet = {}
local sPattern,sValue = "",""
if sDiv then --/ если divider задан: разделяем по нему
sPattern = '[^%s%'..sDiv..']+'
else --/ разделяем слова
sPattern = '[%w%_]+'
end
if Mode == nil then --/ обычный массив
for sValue in sStr:gmatch(sPattern) do
table.insert(tRet, sValue)
end
elseif Mode == true then --/ таблица '[значение]=true'
for sValue in sStr:gmatch(sPattern) do
tRet[sValue] = true
end
elseif type(Mode) == "number" then --/ таблица '[idx] = число или стринг'
local iIdx = 1
for sValue in sStr:gmatch(sPattern) do
tRet[iIdx] = tonumber(sValue) or sValue
iIdx = iIdx +1
end
else
--/ тут еще можно что-нить замутить ...
end
return tRet --/>
end
[/code]
Так должно вроде как побыстрее длинные строки разбирать.
О принудительной записи в pstor: Да, для акторсого нужно ставить коллбэк в биндере актора, в самое начало 'actor_binder:save(...)', пока не начались пакеты из 'xr_logic.pstor_save_all(...)'.
Если же для других объектов - то можно и в акторском ... или если есть причины - ловить в 'xr_logic'.
Gun12
Ну наверно можно и в самом шаблоне сразу задать все подряд. Просто я говорю о реал**5001b67681f3126adde4**и удалим пустые строки.
string [] massiv = stroka.Split(new char[] {' ', ',', ';', ':', '.', '?', '!'}, StringSplitOptions.RemoveEmptyEntries);
[/code]
то есть непосредственно в виде аргумента-таблицы передается нужный набор разделителей.
--------------------------------------------------------------------------- Artos
Понял насчет пстора. collectgarbage попробую в таком варианте использовать.
...Ну вот и новый вариант функции уже есть:-)
отредактировал(а) erlik: 23-12-2010 16:39 GMT3 час. Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Gun12Artoserlik можете объяснить дураку какой смысл в данном коде?:-)...я пока понял что он "что написали" переделывает в таблицу...иными словами из строки создаёт таблицу...
Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.