Перейти к контенту

Рекомендуемые сообщения

@Dennis_Chikin, num это сколько нужно патронов(вроде очевидно), 239 например... Далее функция бьет число на пачки и спавнит, в целом в ЧН это все лучше выглядит, т.к. там бокс сайзы поболее, удобнее перекидывать/продавать большие объемы патронов. А если еще и переупаковку воткнуть(ту же знаменитую от IG 2007), то вообще офигенно будет.

Ссылка на комментарий

Позанудствую: ;)

 

А откуда мы узнали, что патронов надо именно 239 ?

Ссылка на комментарий

@Dennis_Chikin, ты чето походу жеско не врубаешься, изначально АндрейСол тележил за то, что креат не годится, а годится только креат_аммо, потом Зандер сказал, что креат аммо нужен для поштучного спавна, а креат спавнит пачками по бокс сайзу, и предложил юзать нет пакеты(как пример), я предложил иной вариант без использования нет пакетов. Я не говорю что он как-то лучше, и я так же не пытаюсь навязать свой код, и как-либо показать что он как-то лучше/правильнее. Это аналогия, не более, которую я бы использовал для обычного спавна, с заранее(!) заданным числом. Например 239 :)

  • Не нравится 1
Ссылка на комментарий

Поэма есть такая замечательная: "смешались в кучу кони, люди..." ;)

Ладно, все способы перечислили, по 150000му разу, кому надо будет - найдет нужный, а кому "не больно-то и хотелось" - будет "как обычно".

Ссылка на комментарий

 

 


Можно ли скриптом поместить артефакт на пояс? или в конфиге артефакта так нахимичить, чтоб по появлению в инвентаре он сразу на пояс запрыгивал. Стволы с комбезами, в слоты свои, сами запрыгивают. Но тут у нас не слот...

Попробуй прописать в конфиге default_to_ruck = false, хотя сомневаюсь, что сработает..

  • Нравится 1
Ссылка на комментарий
использование object_count на мой взгляд не оправдано

Совершенно верно.

Конечно перебор массива for start,limit,step do работет гораздо быстрее. Но всё зависит от конкретной ситуации.

 

В общем случае вызов функции - операция более дорогая, чем любые другие

Объявление функции может быть. Но потом она находиться на стеке достаточно близко

Если нужно что-то использовать многократно, то лучше объявить функцию и затем обращаться к ней

 

Насколько быстрее я уже не помню, но, что быстрее, - так точно

Это верно. iterate_inventory раза в два быстрее. Почему? Выше писал и...

 

меньше движений: в первом случае получаем число объектов, затем дергаем алайф, чтоб получить сам объект и от него уже секцию, а во втором - сразу получаем объект и секцию от него....

...из уже заранее объявленной функции внутри db.actor:iterate_inventory(function (dummy,item) 

 

abramcumner

Дружище, вижу что тут. Ответь мне сам знаешь где :)

Изменено пользователем Nazgool
Ссылка на комментарий

Такая вот ситуация - есть инвентарный ящик. Создаю объект скриптом, допустим броник, указывая ему в parent_id этот самый ящик.

Подхожу к ящику, открываю - вижу этот броник. Все нормально, броник из ящика можно взять, надеть на актора(ГГ).

Но, если после создания броника не трогая его из ящика сделать сэйв\лоад - броник из ящика пропадает.

Если этому бронику, после создания, с помощью нет-пакета выставить flCanSave в object_flags это исправит проблему с сэйв\лоад ?

Если да, то подскажите как правильно выставить этот бит ?

Ф-ции я вроде нашел, вот тока не пойму какая из них нужна ?

function bit_and(number, number)
function bit_not(number)
function bit_or(number, number)
function bit_xor(number, number)

Ссылка на комментарий
@AndreySol, просто этот ящик с броником при спавне нужно засунуть в оффлайн, а потом достать оттуда назад в онлайн.

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

Ссылка на комментарий

 

 


просто этот ящик с броником при спавне нужно засунуть в оффлайн, а потом достать оттуда назад в онлайн

я об этом в курсе, вопрос в другом - почему объект пропадает ? Я сомневаюсь, что движок при сэйв\лоад проверяет инвентарные ящики и удаляет из них какие-то объекты, которые ему "негожи". Значит проблема с самим объектом ? Что-то в его свойствах мешает\не позволяет движку его нормально сохранить. Вот и хочется понять - что ? А понять проблему в большинстве случаев означает и решить ее.

Ссылка на комментарий

Я ж писал: попробовать сначала засунуть ящик в офлайн, заспавнить туда что-нибудь, а потом ящик высунуть.

И посмотреть на результат.

 

Второй тест - заспавнить в онлайновый ящик, и посмотреть, что будет после шевеления и загрузки.

Ссылка на комментарий

@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 или сменить уровень.

Изменено пользователем *Shoker*

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

Ссылка на комментарий

Тогда игра корректно запоминает кому принадлежит вещь

Т.е. Ваша версия - что неверно записывается\сохраняется для инвентарного предмета его владелец ?

Вопрос по 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 --/>
................

Почему вылет ?

Изменено пользователем AndreySol
Ссылка на комментарий
Потому что у тебя не 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 ?

Изменено пользователем AndreySol
Ссылка на комментарий

При всем уважении к Артосу, похоже, не только в пояснении.

Ссылка на комментарий

Модуль, который есть у меня датирован 08.03.2012. Староват, явно. А более свежий не получается найти - ссылки попадаются всё просроченные.

Ссылка на комментарий

@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 должен быть прописан его вызов.

Ссылка на комментарий

 

 


Чтобы 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() и инициализировать ? Как это сделать правильно ?

Ссылка на комментарий

но этого похоже мало - self.cb_netpk видимо нужно объявить где-то в районе se_outfit:__init() и инициализировать ? Как это сделать правильно ?

Это как раз и делает net_cse_abstract:setCallback

 

То есть логика следующая должна быть, ставишь setCallback, ждешь пока движок вызовет STATE_Write, а там уже твоя функция сработает и запишет, что надо. Ну и движок можно подтолкнуть - потасовать онлайн/оффлайн. Может быть у Artos`а все это уже есть в setCallback...

А тебе кстати нужна именно cse_abstract часть? А то если нет, то все это и не нужно.

Ссылка на комментарий

А тебе кстати нужна именно 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

проверил - нифига не помогло. Наверное сама идея не верна.

Изменено пользователем AndreySol
Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...