Карлан 1 050 Опубликовано 31 Мая 2014 Для неполных - да, вытаскивать из пакета, и создавать через create_ammo(). Да чтож вы local ini = system_ini() local num_in_box = ini:r_u32(section, "box_size") while num > num_in_box do alife():create_ammo(section, position, lvi, gvi, pid, num_in_box) num = num - num_in_box end alife():create_ammo(section, position, lvi, gvi, pid, num) И никаких пакетов не нужно. С пакетом получится, как говорится, на все случаи жизни, но для обычного спавна и без него обойтись можно вполне. По скорости - а кто-нибудь мерил ? Мерили, и не раз, и не один человек. Насколько быстрее я уже не помню, но, что быстрее, - так точно. Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 31 Мая 2014 @Dennis_Chikin, num это сколько нужно патронов(вроде очевидно), 239 например... Далее функция бьет число на пачки и спавнит, в целом в ЧН это все лучше выглядит, т.к. там бокс сайзы поболее, удобнее перекидывать/продавать большие объемы патронов. А если еще и переупаковку воткнуть(ту же знаменитую от IG 2007), то вообще офигенно будет. Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 31 Мая 2014 @Dennis_Chikin, ты чето походу жеско не врубаешься, изначально АндрейСол тележил за то, что креат не годится, а годится только креат_аммо, потом Зандер сказал, что креат аммо нужен для поштучного спавна, а креат спавнит пачками по бокс сайзу, и предложил юзать нет пакеты(как пример), я предложил иной вариант без использования нет пакетов. Я не говорю что он как-то лучше, и я так же не пытаюсь навязать свой код, и как-либо показать что он как-то лучше/правильнее. Это аналогия, не более, которую я бы использовал для обычного спавна, с заранее(!) заданным числом. Например 239 1 Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 20 Июня 2014 @Старлей, кэп намекает на сталкера, если конкретно, то в данном примере три класса, cse_alife_trader_abstract, cse_alife_object, и, собственно нужный нам - cse_visual. Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 21 Июня 2014 (изменено) r_h32()Опечатка, такого нету. По крайней мере судя по документации, сам не проверял. а у меня в этой штуковине(из acdc) unsigned int Наверняка автор подразумевал, что отрицательного количества денег в оригинале игры быть не может.К чему я это - получается можно читать пакеты, зная только кол-во байт под какую переменную определенно, а уж signed/unsigned нужно только, если работать с этими значениями?Если я правильно понял вопрос, то да.Читать, кстати, можно вообще сразу нужную переменную, если знать позицию.В случае с визуалом сталкера, получение конкретно этого параметра будет весьма кривым кодом. Не уверен что работает, вот набросал: function GetVisual(obj) local packet = net_packet() local se_obj = alife():object(obj:id()) se_obj.STATE_Write(se_obj, packet) packet:r_advance(4) packet:r_stringZ() packet:r_advance(4) packet:r_stringZ() packet:r_advance(12) packet:r_stringZ() packet:r_advance(18) packet:r_stringZ() packet:r_advance(8) return packet:r_stringZ() end Разумеется можно считывать сразу длину строк и устанавливать позицию чтения сразу туда, куда нужно, но это сами сделайте, кому интересно. Изменено 21 Июня 2014 пользователем Карлан Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 23 Июня 2014 @Wlad777, не уверен, но можно попробовать заспавнить объект на основе physic_object или, если угодно, O_PHYS_S, и указать ему кость фиксации в стейт части (fixed_bones называется, тип - строка). Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 24 Июня 2014 @demon96, вместо npc db.actor поставь и будет тебе счастье. Для выдачи сообщений за глаза хватит. Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 24 Июня 2014 (изменено) @demon96, http://www.amk-team.ru/forum/index.php?showtopic=7450&p=258470 здесь и http://www.amk-team.ru/forum/index.php?showtopic=7450&p=472142 здесь конкретно получишь ответ на "при загрузке игры", а уж "определенные действия" извини, не угадаем. @Wlad777, еще тебе подкину один метод, в классе physics_element есть метод fix(), намертво фиксирует гейм объект по указанной кости. Получать кость можно например методом get_element_by_bone_id, но для того, чтобы не путатся, лучше использовать get_element_by_bone_name. Замечу, что при перезагрузке фиксация так скажем теряется, так что нужно "перефиксировать" объект каждый раз при перезагрузке... В целом лучше конечно нет-пакет юзать, но я так, может кому надо будет. Вот можешь попробовать: function FixObj(Obj) local oObj if type(Obj) == 'userdata' then oObj = Obj end if type(Obj) == 'number' then oObj = level.object_by_id(Obj) end if oObj then local GetPhysShell = oObj:get_physics_shell() if GetPhysShell then local sElement = GetPhysShell:get_element_by_bone_name("link") if sElement and (not sElement:is_fixed()) then sElement:fix() end end end end Изменено 24 Июня 2014 пользователем Карлан Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 10 Июля 2014 (изменено) @Призрачный, может с такими вопросами лучше на ап-про? Там ребят твоего уровня побольше, ну и людей, которые на такие вопросы любят отвечать тоже. Конкретно у тебя вопрос, если так можно сказать, "туториальный", зайди в Справочник по функциям и классам, там ну очень подробно расписан класс effector, с помощью него реализовать тобою задуманное весьма не сложно. @Музафир, вешаешь на дез колбек убил ли ты кровососа, прибавляешь единичку (или сколько тебе надо) к числовой переменной, ее хранишь в сейве сколько нужно, хоть всю игру, хоть пока идет квест, ну в целом готово. Опять же скажу за себя, у меня в модуле доп. рангов за убийства монстров прибавляются очки и, если убито должное количество, повышается сам ранг, обе эти переменные хранятся подобным образом: for i=1, #clsIDMobs do if not has_alife_info(aRankData.monster_data[clsIDMobs[i]][#aRankData.monster_data[clsIDMobs[i]]].sInfo) then packet:w_u8(aRankData.monster_data[clsIDMobs[i]].index or 0) packet:w_u32(aRankData.monster_data[clsIDMobs[i]].count or 0) end endТебе нужно сделать что-то подобное, только проще раз в 10. Тебе достаточно использовать w_u8. Изменено 10 Июля 2014 пользователем Карлан Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 18 Июля 2014 (изменено) @Vadyanchikus, в сталкере есть непонятная лично мне особенность, сначала нужно забирать итем у актора, а потом дальше че-нить фигарить, иначе у актора нифига забираться не будет, несмотря на появленное сообщение. Так что переставь порядок функций и отпишись заработало или нет.Замечательно забирается. dc Эмпирически доказал для себя обратное, спорить я конечно не буду, у меня такой косяк имел место быть, хотя логики в нем не видно. Не забирается. Изменено 18 Июля 2014 пользователем Карлан Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 8 Сентября 2014 (изменено) @Kirgudu, ну вот на тч артос такое написал, а вообще советовал бы диалогс.скрипт из симбиона глянуть, там в целом удобно все сделано: function fGet_Actor(oSpeaker1, oSpeaker2) if oSpeaker1:id() == (idActor or db.actor:id()) then return oSpeaker1 --/> end return oSpeaker2 --/> end function fGet_NPC(oSpeaker1, oSpeaker2) if oSpeaker2:id() == (idActor or db.actor:id()) then return oSpeaker1 --/> end return oSpeaker2 --/> end function fGet_Actor_NPC(oSpeaker1, oSpeaker2) if oSpeaker1:id() == (idActor or db.actor:id()) then return oSpeaker1,oSpeaker2 end return oSpeaker2,oSpeaker1 --/> end Согласен; видел эти функции, они являются развитием оригинальной идеи и подходят для любой версии игры. Просто я хотел показать @Хемуль36рус, как можно сделать, чтобы не забивать голову выбором объекта. Kirgudu Изменено 8 Сентября 2014 пользователем Kirgudu Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 20 Октября 2014 while #tbl > 0 do table.remove(tbl, math.random(#tbl)) end Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 15 Ноября 2014 (изменено) @Kirgudu, за луа_хелпер могу сказать, что некоторые функции там не дописаны, и некоторые приводят к вылетам, их тоже следует дополнить и/или поправить. Artos сам говорил, что это далеко не окончательный вариант, и каждый в праве править под себя все функции. Кое-что мне у него не нравится и я пишу по своему, т.е... ну неофициальной доработкой этого заниматься как-то глупо. Кто их использует - тот доделает, а кто не использует - тому и не нужно. Так же можно функционал таймеров расширить и т.п. Ошибок таких как у тебя не ловил, за исправления спасибо, заберу. @7.9, у всех типов менеджеров структура одна и та же, пойми один и поймешь все. Такое расписывать - дело не благодарное, а время прогрессов прошло, кто что хотел уже все давно сделали. Изменено 15 Ноября 2014 пользователем Карлан Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 29 Ноября 2014 @Dennis_Chikin, оно и не работает (как нужно), функцию нужно заново писать. Хотя выглядит красиво и заманчиво. и каждый незадачливый солянщик считает должным себе это взять, хотя на деле это выглядит/работает весьма... не корректно. Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 2 Декабря 2014 (изменено) @Serge!, тебе все по делу написали. А это извращение было открыто в 2010. Все об это знают я думаю. io в ТЧ нет и не было. К чему ты тут развел это все я не понимаю. Даже сам Artos такое не использовал, а написал se_stor. Подобное нужно лишь в редких случаях (и то - не уверен), например вот как Денис описал. Обновленная система ивентов: m_events (031214) [~2.5Kb] P.S.: не трактую свою систему как хорошую и безупречно работающую, но может кому и сгодится Изменено 2 Декабря 2014 пользователем Карлан 1 Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 5 Декабря 2014 (изменено) @Barmolini, во-первых да, избавляемся от косяков с секциями, и в некоторых модулях не городим ненужные таблицы напрасно тратя время. А во-вторых проверка t[clsid] работает в ~6-7 раз быстрее чем string.find. На всякий (миллион итераций): strfind 0.022 table 0.003 Ну а ассоциативных массивов ты можешь писать сколь угодно, хоть на каждый итем в отдельности, если конечно сделаешь необходимые для этого действия, но это уже другая степь немного. Изменено 5 Декабря 2014 пользователем Карлан Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 19 Декабря 2014 @Dennis_Chikin, оно только в пределах текущей локации, корректнее делать именно через all.spawn. 1 Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 15 Января 2015 @UnLoaded, учитывая что инвентарный и физический объекты - разные вещи, то в этом смысла никакого не будет (а учитывая еще как движок обрабатывает перемещения в слот, то это вообще чушь). , единственный корректный подход это сохранять в пакет актору, либо чему-то с ним связанному (фонарик, пда, ...) (в ассоциативном массиве разумеется). Если нужно обязательно в броники или стволы, то тут лучше всего записывать в кастом дату. Можно использовать se_stor или xrvars; это бездонные хранилища, в них можно засовывать что угодно в каких угодно размерах, в xrvars нету явного ограничения на 4кб. Удачи . Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 17 Января 2015 Вот поглядите, накостылил кой-чего Фотошопил я пару минут, так что сильно не пинайте))) http://youtu.be/9G-LjHxesOE Немного пояснить наверное нужно, метка ставится на живой объект, их можно как угодно раскрашивать и менять прозрачность (в зависимости от отношения, группировки, ранга, чего угодно), можно ставить разные метки разного цвета и разной формы, можно прикрепить описание, к сожалению только полноценно масштабировать не выйдет, пока нету методов увеличения и уменьшения текста, но сами рамки масштабировать вполне удастся. Сейчас немного доработал, в планах еще кое-что, показывать наверное уже нет смысла, и так все предельно ясно я считаю, в общем где это появится я пока не знаю. 3 Поделиться этим сообщением Ссылка на сообщение
Карлан 1 050 Опубликовано 18 Января 2015 @Dennis_Chikin, ну да, только в трехмерном пространстве. Ничего сложного по сути. Прошлое видео удалил. Сделал два типа меток, различие меток по цветам в зависимости от отношения сталкера/монстра к ГГ. Улучшил алгоритмы вычисления позиции на экране для проецирования метки, так же написал алгоритм увеличения/уменьшения метки в зависимости от дальности. Все работает вполне нормально. Смотрите в 1080. 2 Поделиться этим сообщением Ссылка на сообщение