Карлан 1 050 Опубликовано 14 Сентября 2013 Мне нужно написать таймер, и сохранить его в pstor или пакет, пока не выходит, не подскажете рациональный способ? local time = time_global() function my_timer() local delay = 300 if time_global()>time+delay*1000 then time=time_global() return true end end packet:w_u32(delay) delay = reader:r_u32() Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 15 Сентября 2013 (изменено) Условно говоря таймер мне нужен для, ну допустим, "умер один сталкер, запустили таймер на час игрового времени, и через час умер второй". Соответственно в этот час мы можем сохраниться/загрузиться. Спасибо за пояснения, но(!) ранее в соседней теме критиковали game.time(), и высказывались в пользу game.get_game_time(). Как перевести таймер на метод game.get_game_time()? Просто хотелось бы сразу сделать как надо. Изменено 15 Сентября 2013 пользователем Карлан Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 22 Сентября 2013 (изменено) ув. @Artos, использую Ваши таймеры сейчас, и ловлю небольшую проблему, а именно - действие происходит очень быстро, мне нужно что-бы действие воспроизводилось циклично пока не выполнятся мои условия, и в начало функции ставлю: if start_real_timer(3) then Условия выполняются явно быстрее, чем 3 секунды. Судя по мануалу я возможно не правильно делаю, возможно нужно вот так: start_real_timer(3):set_name("my_timer_name") if not timer_exists("my_timer_name") then Изменено 22 Сентября 2013 пользователем Карлан Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 22 Сентября 2013 (изменено) @Artos, а как им воспользоватся при таком запросе: Если прошло 3 секунды то выполняем функцию завершить Я понимаю, что при таком запросе ему надо выписать экшн вторым аргументом, но мне в данном случае не подходит, т.к. функции срабатывают по свои флагам, и их удобнее загнать именно под вышеприведенное условие... Если никак не получится, то тогда уже перепишу код под твои таймеры, это тоже не сложно, просто хотел узнать Еще вопрос, таймер по умолчанию цикличен? Т.е. мне для своих нужд делать как-то так? start_multi_timer(2*60, "my_file.my_func") --/ я так понял, что цикличны только мульти-таймеры И что-то я не совсем понял, после выполнения всех моих условий таймер отключится, или так и будет крутится вечно? А, по моему до меня дошло...сейчас проверю и отпишусь, чето туплю под вечер start_real_timer(2, "my_file.my_func") Мне нужно чтобы моя функция выполнялась каждые две секунды, взвожу такой таймер. Ничего почему-то не происходит. Тестировал свои функции на обычном time_global(), все как часы. Походу неправильно все таки как-то я их, таймеры, применяю... Можно конечно все на нем и оставить(time_global())... но не хочется. Изменено 22 Сентября 2013 пользователем Карлан Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 22 Сентября 2013 (изменено) Если твои функции требуют указания неких своих аргументов со своим порядком следования, то не сложно написать функцию отрабатываемую таймеров, в которой вызывается твоя с необходимым набором аргументов. Именно так и сделал, даже вот код: function my_update() --/ update start_real_timer(2, "my_file.my_func1") start_real_timer(2, "my_file.my_func2") start_multi_timer(2, "my_file.my_func3", nil, true) end И ни одна из моих функций не выполняется, причем(еще раз укажу) с time_global() у меня все работает(все условия моих функций выполняются). Изменено 22 Сентября 2013 пользователем Карлан Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 22 Сентября 2013 (изменено) @*Shoker*, разумеется, я это все понимаю Твой флаг бесполезен, т.к. таймеру дается каждый раз новое имя. @Artos, таймеры у меня работают(тестовый из bind_stalker по крайней мере), так что проблема явно не в модуле, и явно не в моих функциях. Пока я считаю, что проблема в моих руках, т.к. они модуль не так как-то используют... Ладно, пойду поковыряюсь, больше не буду засорять топик. Upd: Да, да, сейчас дошло. Только все равно у меня мои функции не работают, чорт с ним, что-нибудь другое напишу. Изменено 22 Сентября 2013 пользователем Карлан Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 22 Сентября 2013 (изменено) Так, стоп, давайте по порядку. А то я запутался, если я и сейчас тупану, то хоть баньте(и посты потрите, если нужно). 1 Я установил таймеры и все работает нормально: --/ Пример запуска таймера: start_real_timer(15, nil, {tip = {self.object, "Text test_RT"}}, "RT_test") --/ 15 real-seconds + set name --/< это отрабатывается. 2 Я создал свой скрипт my_file. Написал туда следующее: function t1() news_manager.send_tip(db.actor, text, 0, "Hello", 10000) end local bStarted = false function update() --/ update if not bStarted then start_multi_timer(1, "my_file.t1", nil, true) bStarted = true end end 3 В update биндера актора написал следующее: ... function actor_binder:update(delta) object_binder.update(self, delta) my_file.update() -- DEBUG slowdown ... И у меня нихрена не работает. По идее, как я понял, должен вылетать типс с текстом "Hello" каждую секунду, но у меня ничего не происходит. Изменено 22 Сентября 2013 пользователем Карлан Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 30 Сентября 2013 (изменено) Такой вопрос, есть строка вида(в конфиге): items = medkit, 2, antirad, 3, kolbasa, 2 Как из нее получить строку вида: string = "medkit(2),antirad(3),kolbasa(2)" Доколе работал с таблицами, там делал так: формировал строку с рандомнымиитемами, потом формировал из строки таблицу,сохранял таблицу, потом загружал таблицу и разделял таблицу по сепаратору обратно в строку.Тут вроде операций поменьше должно быть... По сути я так думаю надо написать функцию с циклом и туда передавать нашу строку, т.е. перебирать строку с шагом в "1", проверять следующий итем строки, если это слово, то продолжаем, если цифра то ставим сепаратор и продолжаем... как-то вот так. Пока смутно представляю как сделать. Как вариант пробовать как обычно, получаем строку в виде массива и разбираем его с помощью explode по нужному сепаратору, меняя позиции для цифр с помощью string.sub. Изменено 30 Сентября 2013 пользователем Карлан Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 18 Октября 2013 (изменено) Есть таблица вида: local t = {{key = value}} --/ где value - boolean Далее идет формирование строки if t[i].key then string = "1" --/ true else string = "2" --/ false end Так вот, при загрузке игры у меня происходит сброс этих value, и у меня все строки становятся равными "2". Вопрос: как правильно сохранить/прочесть мое значение и подставить загруженное значение в мое условие при загрузке игры? Разумеется всячески мусолил w_bool/r_bool, но за неимением навыков у меня что-то не получилось подставить значения в условия(но они сохранялись/загружались). Изменено 18 Октября 2013 пользователем Карлан Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 18 Октября 2013 (изменено) @sapsan, у меня таблица с подтаблицами, вроде: local t = { {key1=string, key2=number, key3=boolean, key4=boolean}, {key1=string, key2=number, key3=boolean, key4=boolean} ... } И вот из этой таблицы мне и надо сохранить ключи с булевыми значениями. Простая, как видишь, не подойдет. Что-то не понял я твоего объяснения, можешь наглядно? Допустим функции сохранения/загрузки таблицы возьмем готовые из амк. (load_table/save_table)(только они вложенные массивы вроде не сохраняют, так что я совсем в ступоре ). Мне бы только примерный алгоритм дальше сам допилю, я не понял по какому принципу должно идти сохранение. Как вариант в цикле брать ключи string и number каждой строки, в зависимости от этого формировать новый одномерный(!) массив из булевых значений, и с ним уже делать вышеописанные операции. Хреновый ход, может что попроще кто предложит. Изменено 18 Октября 2013 пользователем Карлан Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 18 Октября 2013 @sapsan, извиняй, тупанул я, я же на модулях от Artos'а сижу. Если их видел, то вот мои функции: function load_table(name) local var = GetVar(name) return table.decompress(var) end function save_table(name, tbl) SetVar(name, table.compress(tbl)) end Я только смысла в таком сохранении не вижу, у меня строка строится динамически, а таблица у меня - константа, поэтому оперировать тут с таблицой глупо и бессмысленно. Значения видно сбрасываются при загрузке строки. Что-то я сам запутался. Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 18 Октября 2013 @*Shoker*, так я делал еще часа три назад, и результата нужного мне это не принесло К слову, это первое, что я пытался сделать. stringZ все хавал, сохранял и загружал. Пробовал сохранять и распарсенную таблицу, и ключи таблицы в цикле(как у тебя) и свою готовую строку...все эти потуги мне результата никакого не принесли. Короче я сейчас понял, что я ничего не понял Я не понимаю как формируется моя строка при загрузке, не получается отловить это, видать умений у меня мало, и из этого, как следствие, не те методы применяю к перезаписи, то ли не так перезаписываю, то ли не то перезаписываю... сложно как-то все, придется немного ампутировать свой код, иного варианта пока не вижу. 1 Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 19 Октября 2013 @*Shoker*, вопрос задан некорректно и совершенно не ясно что нужно автору вопроса. То-ли он не управится с аргументом complex_mode, то-ли ему надо составить листинг/текст скриптом со скроллом, лично я вопроса не понял. Приведу свой пример для листинга составляемого скриптом(здесь у меня именно список, а не абзационный текст): --/ расположение листинга local list_wnd = CUIListWnd() list_wnd:SetAutoDelete(true) list_wnd:SetWindowName("list_window") list_wnd:SetItemHeight(20) list_wnd:Init(130, 230, 430, 400) list_wnd:EnableScrollBar(true) --// показывать скролл-бар или нет list_wnd:ShowSelectedItem(true) self:Register(list_wnd) self:AttachChild(list_wnd) 1 Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 19 Октября 2013 (изменено) @Dennis_Chikin, ну очевидно же, что вот так: local pObj = particles_object(string*) if pObj then ... end ====================================================Итак, не претендуя на гениальность представляю набросок функции получения различных конфиговых параметров предметов, функция полностью не дописана, пока работаю над этим, как допишу выложу полную версию: --/ ----------------------------------------------------------------- --/ by Карлан --/ Получение параметров объекта-итема --// oObj - юзердата, секция или номер слота итема | ini - путь до конфига через двойной сплеш(\\) --/ ----------------------------------------------------------------- function fGetItemParameters(oObj, ini) --/< параметр ini входит как заглушка багам несовпадения названий секций, иначе я не могу выпрямить руки пользователям данной функции if ini then sini = ini_file(ini) end local gTbl = {} --// таблица с ключами-параметрами итема local oSection if oObj then --// на передачу таблицы с итемами ума не хватило сделать, т.к. в итоговую таблицу будут писаться значения последнего итема, а не всех if type(oObj) == 'userdata' then printf('userdata') gTbl.userdata = oObj --// только в этом случае есть юзердата #!# oSection = oObj:section() elseif type(oObj) == 'string' then printf('string') oSection = oObj elseif (type(oObj) == 'number' and (oObl > 0 and oObj <= 10)) then printf('number') oSection = db.actor:item_in_slot(oObj):section() end end if oSection and sini:section_exist(oSection) then --// на всякий случай --// Базовые параметры для всех типов итемов gTbl.section = oSection gTbl.class = sini:r_string(oSection, "class") or "" gTbl.clsid = sini:r_clsid(oSection, "class") or nil gTbl.visual = sini:r_string(oSection, "visual") or "" gTbl.inv_name = sini:r_string(oSection, "inv_name") or "" gTbl.real_name = game.translate_string(sini:r_string(oSection, "inv_name")) or "" gTbl.inv_name_short = sini:r_string(oSection, "inv_name_short") or "" gTbl.real_name_short = game.translate_string(sini:r_string(oSection, "inv_name_short")) or "" gTbl.description = sini:r_string(oSection, "description") or "" gTbl.real_description = game.translate_string(sini:r_string(oSection, "description")) or "" gTbl.weight = sini:r_float(oSection, "inv_weight") or 0 gTbl.cost = sini:r_u32(oSection, "cost") or 0 --/ (cost > 0 or 4294967296) gTbl.icon_width = sini:r_u32(oSection, "inv_grid_width") or 0 gTbl.icon_height = sini:r_u32(oSection, "inv_grid_height") or 0 gTbl.icon_x = sini:r_u32(oSection, "inv_grid_x") or 0 gTbl.icon_y = sini:r_u32(oSection, "inv_grid_y") or 0 --// Индивидуальные параметры if string.find(oSection,"ammo_") then --// вот для таких случаев и нужна заглушка gTbl.box_size = sini:r_u32(oSection, "box_size") or 0 gTbl.explosive = sini:r_string(oSection, "explosive") or "" gTbl.tracer = sini:r_string(oSection, "tracer") or "" if gTbl.explosive == "on" then local explode_particles = string.split(sini:r_string(oSection, "explode_particles"), ",", false) for i=1, #explode_particles do gTbl["explode_particles"..i] = explode_particles[i] end end if gTbl.tracer == "on" then gTbl.tracers_color_id = sini:r_u32(oSection, "tracers_color_ID") or 0 end end if string.find(oSection,"outfit") then gTbl.actor_visual = sini:r_string(oSection, "actor_visual") or "" gTbl.full_icon_name = sini:r_string(oSection, "full_icon_name") or "" local full_scale_icon = string.split(sini:r_string(oSection, "full_scale_icon"), ",", false) --// вот этот параметр нахер нужен я не знаю, но сделаю на всякий случай gTbl.full_icon_name_x = tonumber(full_scale_icon[1]) or 0 gTbl.full_icon_name_y = tonumber(full_scale_icon[2]) or 0 gTbl.nightvision_sect = sini:r_string(oSection, "nightvision_sect") or "" gTbl.bones_protection = sini:r_string(oSection, "bones_koeff_protection") or "" --// protection and immunity local pai = {"burn", "strike", "shock", "wound", "radiation", "telepatic", "chemical_burn", "explosion", "fire_wound"} for i=1,#pai do gTbl[i.."_protection"] = sini:r_float(oSection, i.."_protection") or 0 gTbl[i.."_immunity"] = sini:r_float(oSection, i.."_immunity") or 0 end end if string.find(oSection,"wpn_") then end end return gTbl end Внимание! Для работы функции требуется lua_extension.script.Не знаю кому как, но мне гораздо удобнее получать параметры вот так: local ItemParams = GetItemParameters(obj) local cost = ItemParams.cost ,нежели вот так: local cost = system_ini():r_u32(obj:section(), "cost") ====================================================Критика и предложения приветствуются! Я просто не знаю, может так и вовсе неэффективно/медленно работает, или еще что, я пока не замерял. Изменено 19 Октября 2013 пользователем Карлан 2 Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 20 Октября 2013 (изменено) @*Shoker*, да да, я чето блин загрузился под ночь, тоже думал написать функцию как ты предложил, только не знал как передавать тип параметра, точно, можно же так как у тебя, тогда да, мой вариант хромает. Но все же я его оставлю, иногда бывает нужно несколько параметров скопом получить, тут писать кучу строк лень. Завтра я тогда доделаю и свой вариант и немного под себя подправлю твой, и выложу два кода, для получения всех параметров - мой, и для получения одного-двух параметров - твой. Кстати я сейчас понял как в свой вариант засунуть на место oObj таблицу с итемами, завтра все реализую, и выложу, спасибо за альтернативные варианты. Из соображений оптимизации кода лучше все параметры считывать единожды когда нужно, разумеется не сохраняя в сейв Изменено 20 Октября 2013 пользователем Карлан 1 Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 20 Октября 2013 (изменено) @*Shoker*, как заказывал, теперь можно получать все параметры скопом, можно получить один параметр, и есть флаг получения спецпараметров(например box_size и иже с ним для патронов). Парсинг таблицы с итемами я не сделал, т.к. мне лень переписывать всю функцию --/ ----------------------------------------------------------------- --// by Карлан --/ Получение параметров объекта-итема --// oObj - юзердата, секция или номер слота итема | ini - путь до конфига через двойной сплеш(\\) --/ ----------------------------------------------------------------- function fGetItemParameters(oObj, sValue, sValue_param, bSpecParam, ini) --/< параметр ini входит как заглушка багам несовпадения названий секций, иначе я не могу выпрямить руки пользователям данной функции if ini then sini = ini_file(ini) end if not bSpecParam then bSpecParam = false end local gTbl = {} --// таблица с ключами-параметрами итема local gTbl_value = {} --// таблица с параметрами ключа строки нескольких параметров local oSection if oObj then --// на передачу таблицы с итемами ума не хватило сделать, т.к. в итоговую таблицу будут писаться значения последнего итема, а не всех if type(oObj) == 'userdata' then if not sValue then gTbl.userdata = oObj end--// только в этом случае есть юзердата #!# oSection = oObj:section() elseif type(oObj) == 'string' then oSection = oObj elseif (type(oObj) == 'number' and (oObl > 0 and oObj <= 10)) then oSection = db.actor:item_in_slot(oObj):section() end end if oSection and sini:section_exist(oSection) and not(sValue and sValue_param) then --// на всякий случай --// Базовые параметры для всех типов итемов gTbl.section = oSection gTbl.class = sini:r_string(oSection, "class") or "" gTbl.clsid = sini:r_clsid(oSection, "class") or nil gTbl.visual = sini:r_string(oSection, "visual") or "" gTbl.inv_name = sini:r_string(oSection, "inv_name") or "" gTbl.real_name = game.translate_string(sini:r_string(oSection, "inv_name")) or "" gTbl.inv_name_short = sini:r_string(oSection, "inv_name_short") or "" gTbl.real_name_short = game.translate_string(sini:r_string(oSection, "inv_name_short")) or "" gTbl.description = sini:r_string(oSection, "description") or "" gTbl.real_description = game.translate_string(sini:r_string(oSection, "description")) or "" gTbl.weight = sini:r_float(oSection, "inv_weight") or 0 gTbl.cost = sini:r_u32(oSection, "cost") or 0 --/ (cost > 0 or 4294967296) gTbl.icon_width = sini:r_u32(oSection, "inv_grid_width") or 0 gTbl.icon_height = sini:r_u32(oSection, "inv_grid_height") or 0 gTbl.icon_x = sini:r_u32(oSection, "inv_grid_x") or 0 gTbl.icon_y = sini:r_u32(oSection, "inv_grid_y") or 0 --// Индивидуальные параметры if bSpecParam then if string.find(oSection,"ammo_") then --// вот для таких случаев и нужна заглушка gTbl.box_size = sini:r_u32(oSection, "box_size") or 0 gTbl.explosive = sini:r_string(oSection, "explosive") or "" gTbl.tracer = sini:r_string(oSection, "tracer") or "" if gTbl.explosive == "on" then local explode_particles = string.split(sini:r_string(oSection, "explode_particles"), ",", false) for i=1, #explode_particles do gTbl["explode_particles"..i] = explode_particles[i] end end if gTbl.tracer == "on" then gTbl.tracers_color_id = sini:r_u32(oSection, "tracers_color_ID") or 0 end end if string.find(oSection,"outfit") then gTbl.actor_visual = sini:r_string(oSection, "actor_visual") or "" gTbl.full_icon_name = sini:r_string(oSection, "full_icon_name") or "" local full_scale_icon = string.split(sini:r_string(oSection, "full_scale_icon"), ",", false) --// вот этот параметр нахер нужен я не знаю, но сделаю на всякий случай gTbl.full_icon_name_x = tonumber(full_scale_icon[1]) or 0 gTbl.full_icon_name_y = tonumber(full_scale_icon[2]) or 0 gTbl.nightvision_sect = sini:r_string(oSection, "nightvision_sect") or "" gTbl.bones_protection = sini:r_string(oSection, "bones_koeff_protection") or "" --// protection and immunity local pai = {"burn", "strike", "shock", "wound", "radiation", "telepatic", "chemical_burn", "explosion", "fire_wound"} for i=1,#pai do gTbl[i.."_protection"] = sini:r_float(oSection, i.."_protection") or 0 gTbl[i.."_immunity"] = sini:r_float(oSection, i.."_immunity") or 0 end end if string.find(oSection,"wpn_") then end end return gTbl --// Все не нужны elseif (oSection and sini:section_exist(oSection)) and (sValue and sValue_param and type(sValue) == 'string' and type(sValue_param) == 'string') then if sValue_param ~= "table" then if sValue_param == "float" then sValue = sini:r_float(oSection, sValue) end if sValue_param == "string" then sValue = sini:r_string(oSection, sValue) end if sValue_param == "string_wq" then sValue = sini:r_string_wq(oSection, sValue) end if sValue_param == "num" then sValue = sini:r_s32(oSection, sValue) end if sValue_param == "pnum" then sValue = sini:r_u32(oSection, sValue) end if sValue_param == "bool" then sValue = sini:r_bool(oSection, sValue) end if sValue_param == "vector" then sValue = sini:r_vector(oSection, sValue) end return sValue else sValue = string.split(sini:r_string(oSection, sValue), ",", false) for i=1, #sValue do gTbl_value["sValue_"..i] = sValue[i] end return gTbl_value end end end Примеры вызовов: GetItemParameters("novice_outfit") --// получить базовые параметры GetItemParameters("novice_outfit", nil, nil, true) --// получить все параметры GetItemParameters("novice_outfit", nil, nil, true, "misc\\outfit.ltx") --// получить все параметры из указанного файла GetItemParameters("novice_outfit", "cost", "pnum", false, "misc\\outfit.ltx") --// получить указанный параметр из нужной секции определенного файла Как дойдут руки, перепишу функцию, чтобы можно было таблицей итемы загонять и получать для них скопом все секции, так же есть в планах сделать вызов типа: local ItemParams = GetItemParameters({["bandage"] = "cost, weight", ["medkit"] = "inv_name, real_name" }) Просто, но надо все переписывать P.S. для считывания всех параметров, разумеется, можно было использовать r_line, но он считывает все в алфавитном порядке, и не удобно будет далее работать с параметрами, или я чего-то не понял и нагородил индусский код. Изменено 20 Октября 2013 пользователем Карлан Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 20 Октября 2013 конечно, если по этому параметру на самом деле лежит число, то надо будет дополнительно перевести его в числовой тип. Это мне и не давало написать нормальную функцию, сейчас тоже до этого додумался и переделал функцию по другому, получилось нечто подобие твоей, гораздо экономичнее(по строкам) и удобнее. И да, в строке у loadstring скобки писать не нужно, и используется она вместе с assert, что у тебя тоже не указано. Свои коды более не выкладываю За сим предлагаю закрыть данный вопрос. Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 15 Мая 2014 (изменено) P.S. И где сейчас можно найти актуальную версию m_netpk? У меня от 9 октября, вроде последнее. obj = level.object_by_id(k) Хрен ты угадал, в момент спавна нельзя его так получить. obj в твоем случае серверный - да, и править его тока нет пакетами, есть еще одна функция, с которой можно работать, глянь в справочнике. Если ты говоришь что дофига таких модов, то че тебе мешает их использовать в своих целях? У меня скриптом проваливаются тоже(книги всякие спавнил), в результате забил, спавнил через acdc. Тебе религия что-ли не позволяет ей пользоваться, или че, я не понимаю вас... Спавн скриптом хорош, но не в этих случаях. Изменено 15 Мая 2014 пользователем Карлан 1 Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 16 Мая 2014 (изменено) Нифига у меня нвоый гулаг создать не получается, 4 раза пересоздавал, вылетал все с той же ошибкой. Кому не лень сделайте гулаг на эскейпе для людей и поделитесь. Для монстров у меня все гулаги работают, как ни странно. Изменено 16 Мая 2014 пользователем Карлан 1 Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 31 Мая 2014 например, ковырнув нет-пакет исходной пачки. Весьма изощренный метод, достаточно бокс сайз прочесть из секции конфига патронов. @AndreySol, а чем должен объект каунт оправдываться? Мне просто интересно. Другой базар, что итерация работает быстрее, и все нормальные люди всегда ее юзают. @Dennis_Chikin, используя объект каунт нужно перебирать от нуля, а не от единицы. Поделиться этим сообщением Ссылка на сообщение