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

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


Svoboда

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

@Pavel_2000 

local keys = {
	[DIK_keys.DIK_W] = true,
	[DIK_keys.DIK_A] = true,
	[DIK_keys.DIK_S] = true,
	[DIK_keys.DIK_D] = true
}
function actor_binder:key_hold(key)
	if has_alife_info("item_id_used") then
		if not has_alife_info("test_work_start") and keys[key] == true then
			test_script.test_func()
		end
	end
end

 

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

Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD

Полезное: модули Артоса, XML парсер

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


Ссылка на сообщение

@Chizha нет, это связано с нахождением определяемого объекта в контейнере. Если ты подобрал предмет и пытаешься определить его координаты - они будут такими, какими были непосредственно перед взятием в инвентарь, на какое бы расстояние ты ни отошёл после этого. Соответственно, для того, чтобы получить истинные координаты объекта, необходимо понимать, где он находится в этот момент времени:
- сам по себе: берём координаты самого объекта obj;

- внутри любого контейнера, в том числе в инвентаре ГГ: берём родительский объект по свойству серверного объекта obj.parent_id, и уже у него берём координаты.
Ну и не забываем, что для того, чтобы свойства серверного объекта обновились. Например, если пытаться брать координаты сразу в том участке кода, в котором выбросили предмет из инвентаря, то они будут ещё такими, как будто бы предмет до сих пор в инвентаре. Нужно пропустить апдейт.

  • Спасибо 1

Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD

Полезное: модули Артоса, XML парсер

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


Ссылка на сообщение

@vampirnik77 вот это уже знакомый ник. )

Всё правильно, это возможный вариант реализации того, что я описал многими буквами. Остальное детали и нюансы.

Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD

Полезное: модули Артоса, XML парсер

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


Ссылка на сообщение
14.12.2025 в 07:08, vampirnik77 сказал:

как можно определить что нпс торговец или техник? Торговца вроде через clsid можно определить, а с техником как быть...

Прямого свойства или свойства нет-пакета не припомню. Но можно попробовать зайти через текущую логику и отображение в зависимости от неё точки на миникарте: для ЧН см. подсказки в stalker_generic.reset_show_spot(). Я бы так попробовал.
Что же касается спавна на другой локации и наполнения контейнера, то проблем тут на первый взгляд не видно. Сначала нужные координаты и вертексы, затем спавн по id.

  • Спасибо 1

Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD

Полезное: модули Артоса, XML парсер

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


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

почему?

Потому что при первом вызове actor_last_money = 0, а это значит, что разность actor_last_money - money имеет отрицательное значение, которое меньше единицы, из-за чего и следует выход из функции. А вот при втором вызове actor_last_money имеет уже не нулевой показатель и, вероятно, больше значения money, так что условие выхода не срабатывает.
Но вообще здесь вся логика неправильная какая-то. Учитывая, что функция on_trade вызывается при торговле столько раз, сколько всего продаётся/покупается предметов, кешбэк будет перечисляться при каждом вызове нарастающим итогом, при этом будет зависеть не от цены продажи конкретного примера, а исключительно от наличности в кармане актора (идёт подмена входящего параметра money вычисляемым).

Также мне кажется, что кешбэк имеет смысл начислять актору только при покупке, то есть при входящем параметре sell_bye = false.

Резюмируя всё вышесказанное, я сделал бы просто: вместо

function on_trade(item, sell_bye, money)
  local money = db.actor:money()
  local cashback = round((actor_last_money - money) * 0.3)
  if cashback < 1 then
    actor_last_money = money
    return
  end
  db.actor:give_money(cashback)
  -- всё остальное
end

написал что-то вроде такого

function on_trade(item, sell_bye, money)
  if sell_bye == false then
    local cashback = round(money * 0.3) -- здесь 0.3 - 30% кешбэка от потраченной на приобретение предмета суммы
    db.actor:give_money(cashback)
    -- всё остальное
  end
end

 

  • Спасибо 1

Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD

Полезное: модули Артоса, XML парсер

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


Ссылка на сообщение
10 часов назад, Chypakabra сказал:
disable_input_time

В оригинале это свойство принимает значение только в функции, накладывающей эффект после удара в морду (см. xr_effects.actor_punch), а она, емнип, нигде не используется. Как уже совершенно справедливо заметил @Blum , до ошибки дело просто не доходит, потому никто не заметил и не исправил.

Такого мусора в скриптах полно, вычищать можно долго.

  • Полезно 1

Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD

Полезное: модули Артоса, XML парсер

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


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

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