Карлан 1 049 Опубликовано 31 Мая 2014 Поделиться Опубликовано 31 Мая 2014 @Dennis_Chikin, num это сколько нужно патронов(вроде очевидно), 239 например... Далее функция бьет число на пачки и спавнит, в целом в ЧН это все лучше выглядит, т.к. там бокс сайзы поболее, удобнее перекидывать/продавать большие объемы патронов. А если еще и переупаковку воткнуть(ту же знаменитую от IG 2007), то вообще офигенно будет. Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 31 Мая 2014 Поделиться Опубликовано 31 Мая 2014 Позанудствую: А откуда мы узнали, что патронов надо именно 239 ? Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Карлан 1 049 Опубликовано 31 Мая 2014 Поделиться Опубликовано 31 Мая 2014 @Dennis_Chikin, ты чето походу жеско не врубаешься, изначально АндрейСол тележил за то, что креат не годится, а годится только креат_аммо, потом Зандер сказал, что креат аммо нужен для поштучного спавна, а креат спавнит пачками по бокс сайзу, и предложил юзать нет пакеты(как пример), я предложил иной вариант без использования нет пакетов. Я не говорю что он как-то лучше, и я так же не пытаюсь навязать свой код, и как-либо показать что он как-то лучше/правильнее. Это аналогия, не более, которую я бы использовал для обычного спавна, с заранее(!) заданным числом. Например 239 1 Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 31 Мая 2014 Поделиться Опубликовано 31 Мая 2014 Поэма есть такая замечательная: "смешались в кучу кони, люди..." Ладно, все способы перечислили, по 150000му разу, кому надо будет - найдет нужный, а кому "не больно-то и хотелось" - будет "как обычно". Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Scarabay 98 Опубликовано 1 Июня 2014 Поделиться Опубликовано 1 Июня 2014 Можно ли скриптом поместить артефакт на пояс? или в конфиге артефакта так нахимичить, чтоб по появлению в инвентаре он сразу на пояс запрыгивал. Стволы с комбезами, в слоты свои, сами запрыгивают. Но тут у нас не слот... Попробуй прописать в конфиге default_to_ruck = false, хотя сомневаюсь, что сработает.. 1 Мой YouTube-канал Ссылка на комментарий
Nazgool 250 Опубликовано 1 Июня 2014 Поделиться Опубликовано 1 Июня 2014 (изменено) использование object_count на мой взгляд не оправдано Совершенно верно. Конечно перебор массива for start,limit,step do работет гораздо быстрее. Но всё зависит от конкретной ситуации. В общем случае вызов функции - операция более дорогая, чем любые другие Объявление функции может быть. Но потом она находиться на стеке достаточно близко Если нужно что-то использовать многократно, то лучше объявить функцию и затем обращаться к ней Насколько быстрее я уже не помню, но, что быстрее, - так точно Это верно. iterate_inventory раза в два быстрее. Почему? Выше писал и... меньше движений: в первом случае получаем число объектов, затем дергаем алайф, чтоб получить сам объект и от него уже секцию, а во втором - сразу получаем объект и секцию от него.... ...из уже заранее объявленной функции внутри db.actor:iterate_inventory(function (dummy,item) abramcumner Дружище, вижу что тут. Ответь мне сам знаешь где Изменено 1 Июня 2014 пользователем Nazgool Ссылка на комментарий
AndreySol 215 Опубликовано 4 Июня 2014 Поделиться Опубликовано 4 Июня 2014 Такая вот ситуация - есть инвентарный ящик. Создаю объект скриптом, допустим броник, указывая ему в parent_id этот самый ящик. Подхожу к ящику, открываю - вижу этот броник. Все нормально, броник из ящика можно взять, надеть на актора(ГГ). Но, если после создания броника не трогая его из ящика сделать сэйв\лоад - броник из ящика пропадает. Если этому бронику, после создания, с помощью нет-пакета выставить flCanSave в object_flags это исправит проблему с сэйв\лоад ? Если да, то подскажите как правильно выставить этот бит ? Ф-ции я вроде нашел, вот тока не пойму какая из них нужна ? function bit_and(number, number)function bit_not(number)function bit_or(number, number)function bit_xor(number, number) Ссылка на комментарий
naxac 2 445 Опубликовано 18 Июня 2014 Поделиться Опубликовано 18 Июня 2014 @AndreySol, просто этот ящик с броником при спавне нужно засунуть в оффлайн, а потом достать оттуда назад в онлайн. Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
AndreySol 215 Опубликовано 18 Июня 2014 Поделиться Опубликовано 18 Июня 2014 просто этот ящик с броником при спавне нужно засунуть в оффлайн, а потом достать оттуда назад в онлайн я об этом в курсе, вопрос в другом - почему объект пропадает ? Я сомневаюсь, что движок при сэйв\лоад проверяет инвентарные ящики и удаляет из них какие-то объекты, которые ему "негожи". Значит проблема с самим объектом ? Что-то в его свойствах мешает\не позволяет движку его нормально сохранить. Вот и хочется понять - что ? А понять проблему в большинстве случаев означает и решить ее. Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 18 Июня 2014 Поделиться Опубликовано 18 Июня 2014 Я ж писал: попробовать сначала засунуть ящик в офлайн, заспавнить туда что-нибудь, а потом ящик высунуть. И посмотреть на результат. Второй тест - заспавнить в онлайновый ящик, и посмотреть, что будет после шевеления и загрузки. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
*Shoker* 322 Опубликовано 18 Июня 2014 Поделиться Опубликовано 18 Июня 2014 (изменено) @AndreySol, ловил такой баг в ЧН с монстрами. Там если спавнить предметы им в инвентарь напрямую - такой же косяк был. Решил следующим образом - сперва спавню предмет в монстре (тот же ящик в твоём случае) а потом повторно через функцию transfer_item перемещаю предмет из монстра в него-же. Тогда игра корректно запоминает кому принадлежит вещь.Вот пример: local sobj = sm.spawn_in_inv(section, obj:id()) --> Просто спавн в нужный ящик с таким-то id level.client_spawn_manager():add( sobj.id, -1, spawn_callback, obj) --> Колбек на выход sobj (заспавненного предмета) в онлайн, obj в данном примере - клиентский объект ящика ... --\\ Колбек на появление заспавненого предмета в онлайне function spawn_callback(obj, id, item) obj:transfer_item(item, obj) end Единственное условие - при спавне предмета ящик должен находится в онлайне, либо быть в онлайне в будущем до того как игрок успеет сделать save\load или сменить уровень. Изменено 18 Июня 2014 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
AndreySol 215 Опубликовано 19 Июня 2014 Поделиться Опубликовано 19 Июня 2014 (изменено) Тогда игра корректно запоминает кому принадлежит вещь Т.е. Ваша версия - что неверно записывается\сохраняется для инвентарного предмета его владелец ? Вопрос по m_netpk.script от Artos такой код: local pk = m_netpk.get(obj_add) -- запрос нет-пакета if pk:isOk() then pk:setCallback(function(data) end) end вылетаю с ошибкой: attempt to call method 'setCallback' (a nil value) В m_netpk.script, есть: function net_dummy:setCallback() return false end --/> ................ Почему вылет ? Изменено 19 Июня 2014 пользователем AndreySol Ссылка на комментарий
abramcumner 1 151 Опубликовано 19 Июня 2014 Поделиться Опубликовано 19 Июня 2014 Почему вылет ?Потому что у тебя не net_dummy? Ну и используешь setCallback соооовсем не по назначению. Ссылка на комментарий
AndreySol 215 Опубликовано 19 Июня 2014 Поделиться Опубликовано 19 Июня 2014 (изменено) Потому что у тебя не net_dummy? Посмотрел внимательнее m_netpk.script setCallback() есть еще как метод класса net_cse_abstract, который в свою очередь унаследован от net_base. Вот выдержка из m_netpk.txt function test_abstract() --/ Переносим вентилятор из каморки Сидоровича на тумбочку в подвальчике деревни новичков (на Кордоне) local sobj = alife():object("trader_ventilyator_0000") --/ находим в игре серверный объект вентилятора if sobj then --/ нашли? local pk = get_netpk(sobj,0) --/ или m_netpk.net_cse_abstract(sobj) if pk:isOk() then local vPos = vector():set(-212.8,-22.28,-127.20) --/ координаты 'на тумбочке в подвальчике' local vDir = vector():set(0,3.14,0) --/ направление: 'лопастями от стены' --/ var-1: установка колбэка с таблицей local status = pk:setCallback( { position = vPos, direction = vDir } ) --[[ --/ var-2: установка колбэка с функцией local status = pk:setCallback( function(data) data.position = vPos --/ change property 'position' in 'cse_abstract' data.direction = vDir --/ change property 'direction' in 'cse_abstract' end ) --]] end end end Делаю по образцу, но видно пример не совсем корректен ? Как-же тогда использовать этот setCallback ? Изменено 19 Июня 2014 пользователем AndreySol Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 19 Июня 2014 Поделиться Опубликовано 19 Июня 2014 При всем уважении к Артосу, похоже, не только в пояснении. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
AndreySol 215 Опубликовано 19 Июня 2014 Поделиться Опубликовано 19 Июня 2014 Модуль, который есть у меня датирован 08.03.2012. Староват, явно. А более свежий не получается найти - ссылки попадаются всё просроченные. Ссылка на комментарий
abramcumner 1 151 Опубликовано 19 Июня 2014 Поделиться Опубликовано 19 Июня 2014 @AndreySol, для начала найди как вернуть именно net_cse_absract. В примере Artos`а указано m_netpk.net_cse_abstract(sobj), почему так не делаешь? local pk = m_netpk.get(obj_add) -- запрос нет-пакетаВозвращает обычные нет-пакеты типа net_se_stalker или net_cse_alife_item Чтобы setcallback нормально работал, у тебя в нужном классе se_*.script должен быть прописан его вызов. Ссылка на комментарий
AndreySol 215 Опубликовано 19 Июня 2014 Поделиться Опубликовано 19 Июня 2014 Чтобы setcallback нормально работал, у тебя в нужном классе se_*.script должен быть прописан его вызов Дописал в методе STATE_Write для class "se_outfit" if self.cb_netpk then -- коллбэк для изменения свойств пакета self.cb_netpk(self, packet) end но этого похоже мало - self.cb_netpk видимо нужно объявить где-то в районе se_outfit:__init() и инициализировать ? Как это сделать правильно ? Ссылка на комментарий
abramcumner 1 151 Опубликовано 19 Июня 2014 Поделиться Опубликовано 19 Июня 2014 но этого похоже мало - self.cb_netpk видимо нужно объявить где-то в районе se_outfit:__init() и инициализировать ? Как это сделать правильно ?Это как раз и делает net_cse_abstract:setCallback То есть логика следующая должна быть, ставишь setCallback, ждешь пока движок вызовет STATE_Write, а там уже твоя функция сработает и запишет, что надо. Ну и движок можно подтолкнуть - потасовать онлайн/оффлайн. Может быть у Artos`а все это уже есть в setCallback... А тебе кстати нужна именно cse_abstract часть? А то если нет, то все это и не нужно. Ссылка на комментарий
AndreySol 215 Опубликовано 19 Июня 2014 Поделиться Опубликовано 19 Июня 2014 (изменено) А тебе кстати нужна именно cse_abstract часть? А то если нет, то все это и не нужно Похоже, что действительно не нужно. насчет проблемы с пропаданием предметов, заспавненых скриптом в инв.ящик. Проверил, после create, у серверного объекта parent_id=65535, а по идее должно-быть равно ID ящика-владельца ? Соответственно движок наверное и не хочет сохранять\загружать инвентарный предмет, для которого не указан владелец. Вот и хотел попробовать через нет-пакет изменить parent_id на нужный. Сваял такой вот код: local ser_obj = alife():story_object(2000) --"esc_simulation_box_1" if ser_obj then local obj = level.object_by_id(ser_obj.id) if obj then local obj_add = alife():create("novice_outfit", obj:position(), obj:level_vertex_id(), obj:game_vertex_id(), obj:id()) if obj_add then local pk = m_netpk.net_cse_abstract(obj_add) if pk then pk:setCallback({parent_id = ser_obj.id}) end end end end проверил - нифига не помогло. Наверное сама идея не верна. Изменено 19 Июня 2014 пользователем AndreySol Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти