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

Внимание. На форуме проводятся технические работы с боковым меню.

_Val_ _Val_

Скриптование


Svoboда

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

2 минуты назад, Zander_driver сказал:
item_id++; -- :)

Я конечно дико извиняюсь, это какова язика синтоксис?

C# или С++ ?  но явно не LUA

чукча конечно не прогер и может ошибаться

Поделиться этим сообщением


Ссылка на сообщение
11 минут назад, Zander_driver сказал:

Я в чужие дела не лезу, хочет узнать - значит есть, зачем.   #Сидорович

 

12 минут назад, Zander_driver сказал:

если опираться на функционал оригинального движка

если на то пошло - и будем опираться на оригинал - у непися может и будет находиться только то, что ему заспавнено (оллспавном или скриптом),

и больше ни чего - так как в ванили нпс не лутаются, не торгуют между собой и барыгами, не шмонают трупы и нычки, и не собирают арты и любой другой хабар,

единственная возможность изменения содержимого инвентаря (если я ни чего не забыл) нпс это торговля с ГГ, поэтому я и посчитал данный вопрос 

всего лишь глупой хотелкой.

Поделиться этим сообщением


Ссылка на сообщение
8 часов назад, Zander_driver сказал:

Одну "мину" нашел, возьми с полки пирожок. Их там было две

Я и не искал - она сама мне прямо в глаз "попала" :23:

Это и правда было-бы весело - если бы не было печально, подавляющее большинство среднестатистических индивидуумов тупо скопирует твой "заминированный" код,

и не будет разбираться в синтаксисе и искать пасхалки, а будет сидеть и ныть в комментах "ни роботаит",

а если ему подскажут в чём трабл - ну или всё же сам допетрит - как ты думаешь что он с ним сделает?

!Правильно! - повесит на апдейт! и вся эта портянка будет перебирать 65к предметов за такт, и опять начнется "виснит", "логаит", "вылитаит", :dash3:

так что это тот ещё вопрос, под кого это мина заложена :WhiteVoid_2:, и восстанут "Юзвери" из пепла форумных ристалищ - и пойдут они строчить каменты на 3 страницы offтопа

 

  • Согласен 1

Поделиться этим сообщением


Ссылка на сообщение
1 час назад, mole venomous сказал:

Возможно ли одно из четырёх значений, определяющих пар-тр hit_power в конфиге оружия, вернуть как число?

Скрытый текст
 if system_ini():line_exist(item:section(), "hit_power") then
 local Hitpower = system_ini():r_string(item:section(), "hit_power")
  if Hitpower then
   Hitpower = string.gsub(Hitpower,"[,]"," ")
   for k, v in string.gmatch(Hitpower,"[%p0-z]+") do
    --  k перебирает все значения hit_power
   end
  end	
 end

 

 

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

Поделиться этим сообщением


Ссылка на сообщение
13 минут назад, mole venomous сказал:

Как именно? Моего опыта с таблицами на большее не хватает.

 именно так   tActorItems = {}

закрытые фигурные скобки обнуляют таблицу

  • Спасибо 1

Поделиться этим сообщением


Ссылка на сообщение
7 минут назад, mole venomous сказал:

её так лишь объявляют перед кодом

Точно так, не существующая до этого таблица создаётся, а существующая очищается :528:

Поделиться этим сообщением


Ссылка на сообщение
1 час назад, mole venomous сказал:

Не выкидываются все предметы

попробуй вот так:

function dropall()
	for i=0,db.actor:object_count()-1 do
	local item = db.actor:object(i)
		if item and item:section() ~= "bolt" and item:section() ~= "device_pda" and item:section() ~= "device_torch" then
			local death_ini = ini_file("misc\\death_generic.ltx")
			local n = death_ini:line_count("keep_items")
			for i=0, n-1 do
				local keep_item = death_ini:r_line("keep_items",i,"","")
				if item:section() ~= keep_item then
					db.actor:drop_item(item)
				end
			end
		end
	end
end

 

  • Согласен 1

Поделиться этим сообщением


Ссылка на сообщение
4 часа назад, Colder сказал:

 for i = 1, math.random(1,3) do

эту строчку перенеси в самое начало функции

  • Спасибо 1

Поделиться этим сообщением


Ссылка на сообщение
2 часа назад, imcrazyhoudini сказал:

Есть такой код:

Функцию целиком выложи, а то не очень понятно что к чему

 

ну или как-то так:

Скрытый текст
    if obj:section() == "sleepingbag" then
        local can_sleep = true    
        local actor = db.actor
        for id=1,65535 do
            local object = level.object_by_id(id)
            if object ~= nil then
                if (IsStalker(object) and object:relation(actor) == game_object.enemy) or IsMonster(object) then
                    if object:position():distance_to(actor:position()) < ENEMY_RADIUS and object:see(actor) then
                        news_manager.send_tip(actor, "sleep_warning_enemy", nil, "default", 5000)
                        can_sleep = false
                        break
                    end
                end
            end
        end

        -- проверка на радиацию
        if actor.radiation > 0 and can_sleep then
            news_manager.send_tip(actor, "sleep_warning_radiation", nil, "default", 5000)
            can_sleep = false
        end

        if actor.satiety < 0.5 and can_sleep then
            news_manager.send_tip(actor, "satiety_warning_radiation", nil, "default", 5000)
            can_sleep = false
        end
		
         -- ATM Sleeping Bag start
        if can_sleep then
            if self.already_jumped==false and jump_level.need_jump==true and (device().frame > self.spawn_frame+2000) then
                jump_level.try_to_jump()
                self.already_jumped = true
                return
            end		
        end
    end

 

 

Изменено пользователем ted.80

Поделиться этим сообщением


Ссылка на сообщение
15 часов назад, imcrazyhoudini сказал:

Что не так с кодом?

да там всё "нитак" - все проверки у тебя находятся в bind_stalker.script > actor_binder:use_object(obj)

но и одна из них не запускает "окно сна", а конструкция:

    -- ATM Sleeping Bag start
    if self.already_jumped==false and jump_level.need_jump==true and (device().frame > self.spawn_frame+2000) then
        jump_level.try_to_jump()
        self.already_jumped = true
        return
    end

ни какого отношения к сну вообще не имеет :big_boss:

А нужное тебе окно запускается через - bind_stalker.script > actor_binder:on_item_drop (obj) > atmmain.on_item_drop(obj)

function on_item_drop(obj)
	if obj:section() == "sleepingbag" then
		sleepingbag_id = obj:id();
		ui_sleep_init = true;		
	end
--	atmdebug.abundance(obj);	
end

тут проверяется секция и переменная  ui_sleep_init  становится "тру"

потом эта переменная в функции    atmmain.update()  которая как нистрано висит апдейте актора

в строке 59 запускает нужное или нет окно 

level.start_stop_menu(atmsleep.UISleep(), true);

 

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

Поделиться этим сообщением


Ссылка на сообщение
2 часа назад, imcrazyhoudini сказал:

Что не так?

 

2 часа назад, imcrazyhoudini сказал:

   if db.actor.satiety < 0.70 and ui_sleep_init == true then

Тут    ui_sleep_init    всегда будет "фолс" а не "тру" всегда!!!

потому что в предыдущей функции она объявлена  local   

и живёт она только внутри этой функции :spiteful:, и её значение в другую функцию

а тем более в другой скрипт не передаётся

  • Спасибо 1

Поделиться этим сообщением


Ссылка на сообщение
20 минут назад, UriZzz сказал:

Хм, а точно не nil

	if variable == nil or variable == "nil" or variable == false then
  		variable ~= true
  	end

 

  • Согласен 1

Поделиться этим сообщением


Ссылка на сообщение
2 часа назад, Pavel_2000 сказал:

чтоб писало "Найден артефакт: (арт)" 

 

	if db.actor:object("af_medusa") and not db.actor:has_info("medusa") then
		db.actor:give_info_portion("medusa")
        local art_name = "Найден артефакт: %c[255,255,50,50]"..game.translate_string(system_ini():r_string("af_medusa", "inv_name")).."%c[default]"
        news_manager.send_tip(db.actor, art_name, 0, "got_artefact", 3000)
	end

 

  • Спасибо 1
  • Нравится 2
  • Согласен 1

Поделиться этим сообщением


Ссылка на сообщение
2 часа назад, Капрал Хикс сказал:

в Зове Припяти можно при клике на найденные КПК в инвентаре слушать звуковое сообщение,

ЕМНИП - сообщение воспроизводится при поднятии КПК, а при наведении курсора - во всплывающем окошке появляется текст,

подобное в ТЧ было в нычке стрелка при поднятии флешки, вот тут память меня подводит или в AMK нашем и родном :hm:

или в НарСоль, ну или маразм меня подводит :russian_ru:

Поделиться этим сообщением


Ссылка на сообщение
26 минут назад, Labadal сказал:

В любом случае, можешь попробовать данную функцию:

Тыж мой золотой, гайд по воиспроизведению звука при использовании предмета написан ОООчень давно,

но за старание плюсик :good2:   но ты забываешь один мааааленький нюанс ни в ТЧ ни в ЗП  кпк или пда кому как,

не является юзабельным предметом, ну нет у него функционала "использовать", ты можешь только выкинуть его или продать - ВСЁ!

чтоб его юзать нужно делать отдельный предмет на классе аптечки, бинта или антирада, да хоть колбасы наконец,

присваивать ему иконку кпк вот потом его можно юзать.

43 минуты назад, Labadal сказал:
--не забываешь выдать предмет обратно, т.к. при использовании он пропадает

а чтоб с этим не париться:

[remkit]:device_pda
description			= "Ремнабор"
inv_name			= "Ремнабор"
inv_name_short		= "Ремнабор"
cost				= 5000
class			= II_ANTIR
eat_health = 	0
eat_satiety = 	0
eat_power = 	0
eat_radiation = 0
wounds_heal_perc = 0
eat_portions_num = -1

последняя строчка    eat_portions_num = -1  обозначает что предмет можно есть бесконечно 

он не пропадает из инвентаря и спавнить заново не нужно - пользуйся

  • Нравится 1
  • Полезно 1

Поделиться этим сообщением


Ссылка на сообщение
5 часов назад, Капрал Хикс сказал:

рабочий скрипт отображения иконками на карте оружия

 

Ну так поделись творением искусственного интеллекта - мы чай не тупее будем 

доработаем до удобоваримости

 

Поделюсь своим творением

 

local Dot = {
{"ammo","cheat_ammo_spot"},
{"medkit","cheat_medkit_spot"},
{"af_","cheat_af_spot"},
{"wpn_","cheat_wpn_spot"},
{"outfit","cheat_outfit_spot"}
}

function DelDot(obj)
	for k, v in pairs(Dot) do
		if level.map_has_object_spot(obj.id, v[2]) ~= 0 then
			for i = 1, level.map_has_object_spot(obj.id, v[2]) do
				level.map_remove_object_spot(obj.id, v[2])
			end
		end
	end
end

function Dots(obj)
	for k, v in pairs(Dot) do
		if string.find(obj:section_name(), v[1]) then
			if level.map_has_object_spot(obj.id, v[2]) == 0 then
				level.map_add_object_spot_ser(obj.id, v[2], game.translate_string(system_ini():r_string(obj:section_name(), "inv_name")))
			end
		end
	end
end

function ItemDot()
	for i = 1, 65534 do
		local obj = alife():object((i))
		if obj and obj.parent_id then
			if obj.parent_id == 65535 then
				Dots(obj)
			else
				DelDot(obj)
			end
		end
	end
end

 

Изменено пользователем ted.80
  • Полезно 2

Поделиться этим сообщением


Ссылка на сообщение
43 минуты назад, Капрал Хикс сказал:

а мирно себе лежит в олл.спавне/скриптом заспавнено в начале игры?

 

Ну так для него и сделай перебор - только по какому либо условию, а не на апдейте

 

@Norman Eisenherz 

Вместо перебора можно привязать создание/удаление меток к сбросу/поднятию оружия на стороне ГГ и сбросу из инвентаря NPC в [death_manager.script].

Изменено пользователем ted.80

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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