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

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

@AndreySol, тогда ещё проще.

npc:give_money( -math.min(npc:money(), sum) )

 

  • Спасибо 1
  • Согласен 1
  • Полезно 2

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

naxac.gif


Подарки

Ссылка на комментарий
В 23.09.2019 в 13:23, AndreySol сказал:

А почитать соседнюю тему "Справочник по ф-циям и классам", на первой странице раздел "Создание и управление худом и пользовательским интерфейсом"?

Читал, там нет подробного объяснения.

 

P.S. Подскажите, может кто знает:

Как отправить скриптово НПС из точки А в точку Б, допустим, даже на пару метров от того места где он находится, это вообще возможно?..

Изменено пользователем Баба ЯГА

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

Ссылка на комментарий
11 часов назад, Баба ЯГА сказал:

Как отправить скриптово НПС из точки А в точку Б, допустим, даже на пару метров от того места где он находится, это вообще возможно?..

В нужный момент выдать инфо, а дальше прописать нужное действие в логике НПС (переход в секцию логики по выдаче инфо).

Сталкер - наше всё!

Ссылка на комментарий
17 часов назад, Баба ЯГА сказал:

Читал, там нет подробного объяснения.

Всё там есть.

level.start_stop_menu(wnd, true|false) - показывает|скрывает переданное в первом аргументе окно

level.main_input_receiver() - возвращает открытое в настоящий момент окно (диалог, инвентарь и т. д.)

  • Полезно 1
Ссылка на комментарий
В 26.09.2019 в 09:41, AndreySol сказал:

Уточни, что ты под этим понимаешь?

 

В 26.09.2019 в 07:32, AndrewMor сказал:

В нужный момент выдать инфо, а дальше прописать нужное действие в логике НПС (переход в секцию логики по выдаче инфо).

Не, я не это имел ввиду, нужно именно скриптово, без логики, поршней и дополнительных костылей, что-то типа если то иначе, ну, например, стоит НПС на координатах (1,1,1) а ему нужно "приказать" пойти/переместиться на координаты (3,1,1), или - проверять по lvid и перемещать его по lvid, что-то типа этого. Я потому и спрашиваю, что не знаю как это сделать... Что-то похожее есть в скрипте который отвечает за перемещение нпс в укрытия при выбросе, но я там ничего не понял... И там без логики и поршней всё, а именно скриптово, но как это сделать?

 

 

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

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

@Баба ЯГА, это делается с помощью метода клиентского обьекта set_dest_level_vertex_id( lvid ). Непись пойдет на этот lvid, если в процессе его какой-нибудь скрипт не пошлет куда-нибудь в другое место.

 

  • Полезно 2
Ссылка на комментарий
8 минут назад, dsh сказал:

@Баба ЯГА, это делается с помощью метода клиентского обьекта set_dest_level_vertex_id( lvid ). Непись пойдет на этот lvid, если в процессе его какой-нибудь скрипт не пошлет куда-нибудь в другое место.

 

А можешь на малюсеньком примере показать чтобы до меня как-то больше дошло... :blush: Ну, типа там, берём ID любого непися онлайн и...

for i=1,65000 do

  local o = alife():level_obj_by_id(i)

  if o then

    o:set_dest_level_vertex_id( 45612 )

  end

end

 

как-то так?

Изменено пользователем Баба ЯГА

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

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

Ребята, кто мне помогал, огромное спасибо! Теперь все НПС платно отправляют СМСки в чат, ибо нефиг халявничать! 

Возник следующий вопрос: тратить НПС деньги научились, а где бы им подзаработать? Реализована ли в НС какая-нибудь схема, где НПС в оффлайне продают ненужный лут?


Подарки

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

    Продолжаю пытаться отправить НПС по нужным координатам, на данный момент добился вот такого:

    npc:set_desired_position()
    npc:set_desired_direction()
    npc:clear_animations()
    npc:set_detail_path_type(move.line)
    npc:set_body_state(move.standing)
    npc:set_movement_type(move.run)
    npc:set_path_type(game_object.level_path)
    npc:set_mental_state(anim.free)
    npc:set_sight(look.danger, nil, 0)
    npc:remove_all_restrictions()
    gg_lvid = db.actor:level_vertex_id()
    npc:set_dest_level_vertex_id( gg_lvid )

    но, например, нпс сидит у костра, когда я выполняю код, то он жопе так и едет к нужному lvid...

    Ну да ладно, дело вот в чём ещё, когда нпс достигает КРАЯ нужного level_vertex_id то он считает что всё хорошо, но, мне нужно чтобы нпс при достижении нужного level_vertex_id не останавливался на краю. а заходил В ЦЕНТР этой клетки, т.к. клетка, например может быть размером 3х3 метра, как это сделать? Подскажите ребята. :russian_ru: 

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

    Ссылка на комментарий
    57 минут назад, _Sk8_AsTeR_ сказал:

    Теперь все НПС платно отправляют СМСки в чат, ибо нефиг халявничать! 

    Ты это о чем вообще? О ботах, которыми рулит ИИ движка?

    1 час назад, _Sk8_AsTeR_ сказал:

    Реализована ли в НС какая-нибудь схема, где НПС в оффлайне продают ненужный лут?

    Ты бы спросил сначала: "А есть ли схема, где НПС в оффлайне этот лут добывают?".

    2 минуты назад, Баба ЯГА сказал:

    но, например, нпс сидит у костра

    А ты подумал о том, что НПС не просто "сидит у костра", а что он находится под логикой некой работы в неком гулаге. И ты думаешь, что это нормальная идея - выдернуть скриптово его с работы из гулага?

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

    @AndreySol, да, думаю это нормальная идея, и если ты заметил, я спрашивал - КАК ОТПРАВИТЬ НПС в ЦЕНТ КЛЕТКИ level_vertex_id - знаешь как это правильно сделать - то подскажи. Я задал конкретный вопрос - зачем ты мне вопросы задаёшь что я думаю??? Я сюда пришёл за помощью, я понятия не имею что такое гулаги и работа - ты знаешь как отправить НПС в ЦЕНТР клетки level_vertex_id ?

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

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

    Добрый вечер. Подскажет ли кто-нибудь, как скриптово принудительно остановить перезарядку оружия у ГГ?

    Здесь могла быть ваша реклама.


    Подарки

  • 5
  • 5
  • 4
  • 2
  • Ссылка на комментарий

    @AndreySol, а разве они оффлайн не подбирают?

    Они умеют в оффлайне драться, например, и вроде там же арты подбирают те же. amk_offline_alife.script

    Скрытый текст
    
    --есть бесхозное оружие
    	amk.oau_reason="cn offline_alife chp13 "..tostring(victim and victim:name())
    						on_weapons_found(victim, vdata)
    						break	--прерываем цикл - событие отработано
    					elseif #vdata.artefacts>0 then
    					--есть арты
    	amk.oau_reason="cn offline_alife chp14 "..tostring(victim and victim:name())
    						on_artifacts_found(victim, vdata)
    						break	--прерываем цикл - событие отработано
    					elseif #vdata.inv_boxes>0 then
    					--есть контейнеры. Надо обыскать.
    	amk.oau_reason="cn offline_alife chp18 "..tostring(victim and victim:name())
    						on_inv_boxes_found(victim, vdata)
    						break	--прерываем цикл - событие отработано
    					elseif items[victim.id] and #items[victim.id] > 0 then
    					--попробуем продать всякого
    	amk.oau_reason="cn offline_alife chp15 "..tostring(victim and victim:name())
    						-- amk.mylog("Offline: lets trade")
    	amk.oau_reason="cn offline_alife chp17 "..tostring(victim and victim:name())
    						process_trade(victim)
    						-- amk.mylog("Offline: trade done")
    						break

     

    Скрытый текст
    
    function on_artifacts_found(victim, vdata)
    	if (victim == nil or vdata == nil) then return end
    	local obj, v_obj
    	local object
    	local v_id = victim.id
    	local b_stalker = false
    	-- Если сталкер - дадим опыт.
    	if victim and IAmAStalker[victim:clsid()] and victim.community then
    		local m_comm  = victim:community()
    		if (m_comm == "stalker" or m_comm == "dolg" or m_comm == "freedom") then
    			b_stalker = true
    		end
    	end
    	for i=1, #vdata.artefacts do
    		v_obj = vdata.artefacts[i]
    		if (v_obj) then
    			object = alife():object(v_obj.id)
    			if (object and object:name() == v_obj.name) then
    				obj = pick_item(victim, object)
    				if (obj) then
    					if (b_stalker == true) then
    						victim:set_rank(victim:rank() + rate_art_found)
    					end
    				end
    			end
    		end
    	end
    	process_trade(victim)
    end

     

     

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

    Подарки

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

    Ребята, как узнать на карте произвольный level_vertex_id, ну например, level_vertex_id(30078) - а мне возвращает если он существует то true и его координаты, а если его не существует то возвращает просто false, как такое реализовать?

     

    upd: или как узнать по координатам ID вертекса и валидный он или нет? Например, я запрашиваю произвольные координаты на локации на которой находится ГГ, а мне возвращает по этим координатам level_vertex_id и то есть ли он там на самом деле, грубо говоря - если клетка АI сетки по этим координатам?

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

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

    как узнать на карте произвольный level_vertex_id

    @Баба ЯГА, например так

    local v = math.random(1, vertex_count)

    Количество вертексов фиксированное, т ч. можно составить табличку [имя уровня] = кол-во вертексов.

    Позиция вертекса: level.vertex_position(level_vertex)

    Обратной функции в ТЧ точно нет, про ЧН/ЗП не в курсе. Есть в X-Ray Extensions:

    level.vertex_id_by_pos = function ( position )
    	db.actor:set_vector_global_arg_1( position )
    	return level.vertex_id()
    	end

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

    naxac.gif


    Подарки

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

    @naxac, жаль что нельзя по координатам узнать ID вертекса :( 

    14 минут назад, naxac сказал:

    Количество вертексов фиксированное, т ч. можно составить табличку [имя уровня] = кол-во вертексов.

    Позиция вертекса: level.vertex_position(level_vertex)

    Я об этом думал, но, вот тут проблема,, например на Кордоне = 539254 вертекса, а при переборе показывает только 5421 из них 4702 - валидных... Если перебирать свыше 300000 - вылет. Ничего понять не могу... Я так понимаю, что клетка AI сетки - это и есть вертекс, значит на Кордоне должно быть 539254 вертекса по количеству AI клеток.

    17 минут назад, naxac сказал:

    Есть в X-Ray Extensions:

    Я не знаю что это такое... :( 

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

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

    @Баба ЯГА, level_vertex не может быть невалидным по определению. Невалидным для AI может быть game_vertex, если он расположен вне аи-сетки.

    Цитата

    Я не знаю что это такое...

    https://www.amk-team.ru/forum/topic/10538-x-ray-extensions/

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

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

    naxac.gif


    Подарки

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

    @naxac, хорошо, как тогда перебрать все вертексы на Кордоне например?

    Вот так у меня показывает 4477 вертекса

    function GetLevelsVertexes(lname)
      local t = {}
      local i = 0
      local graph = game_graph()
      local sim = alife()
      while graph:valid_vertex_id(i) do
        local v = graph:vertex(i)
        local ln = sim:level_name(v:level_id())
        if ln == lname then
          t[#t+1] = v:level_vertex_id()
        end
        i = i+1
      end
      return t, i
    end
    
    local t,i =  GetLevelsVertexes(level.name())

    а вот так показывает 5704 вертекса на Кордоне, а реально там 500000 клеток (а значит и вертексов)

    local colco_ver = 0
    local all_colvo = 0
    clear_log()
    while all_colvo < 350000 do
      if game_graph():vertex(all_colvo):level_id() == alife():level_id() then
        colco_ver = colco_ver + 1
        --gc:execute( "load ~:> vertex_id ="..i..", " )
      end
      all_colvo = all_colvo + 1
    end

     

    upd: вот тут хотел поставить 600000 (предварительно количество посмотрел в LE) чтобы с запасом, но, как я и говорил если ставить больше чем 300000 - то вылет.

    while all_colvo < 350000 do

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

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

    @Баба ЯГА, так оно и не покажет реальное количество нод, это же только вертексы точек графа. Реальное количество нужно смотреть в level.gct локации (или в level.ai, не помню, склероз, чтоб его...), с помощью, например, Graph Viewer, скриптами его не получить.

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

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

    naxac.gif


    Подарки

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

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

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

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

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

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

    Войти

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

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

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

    AMK-Team.ru

    ×
    ×
    • Создать...