Все посты %s в %S - AMK Team
Перейти к контенту

[CoP] Ковыряемся в файлах


Halford

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

У меня такая проблема. Не бейте сильно, если она уже была где-то описана - полистал, не нашёл...

Дело вот в чём. Добавил на Затоне рандомом аномалии. Как оказалось - они не срабатывают на НПС. На монстров вроде срабатывает, но без ущерба для них. Как решить проблему? Заранее большое спасибо.

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


Ссылка на сообщение
Опять возник вопрос. Мне раньше никогда не приходилось спавнить что-то в инвентарь NPC. Так что возникли некоторые проблемы. Конечно, можно было просто добавить предмет неписю через его профиль, но тогда надо начинать новую игру. Вот я решил сделать для этого скрипт. Вот такой

Тут ошибка в том, что ты пытаешься получить кооринаты не с объекта, а из строки.

Попробуй исправить вот так:

function spawn_killers_pda()
    local id, npc
    id = "zat_b103_lost_merc_leader" ------Строка, а не объект!--------
    npc = get_story_object_id(id)
    npc = alife():object(npc) ---- А вот тут уже объект 
    alife():create("killers_pda", npc:position(), npc:level_vertex_id(), npc:game_vertex_id(), npc:id())
end

Должно сработать.

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

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


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

psevdoгринго

Сразу не обратил внимание, но в строчке:

alife():create("killers_pda", npc:position(), npc:level_vertex_id(), npc:game_vertex_id(), npc:id())

зачем там npc:id()?

Оставь без него:

alife():create("killers_pda", npc:position(), npc:level_vertex_id(), npc:game_vertex_id())

 

Теперь о моей проблеме. При рандомном спавне любых аномалий происходит вылет вот такой:

 

FATAL ERROR

 

[error]Expression : assertion failed

[error]Function : CCustomZone::CalcDistanceTo

[error]File : D:\prog_repository\sources\trunk\xrGame\CustomZone.cpp

[error]Line : 1469

[error]Description : nearest_s

 

Причём, происходит он, если спавню больше 120-130 аномалий. Кто-нибудь сталкивался с такой проблемой?

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


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

Maks_K

Я это тоже находил. Даже пришлось Shoker Mod 1.2 (ЧН) скачать. В скриптах глянул - "field" нужно для аномалий, типа зоны радиации, для аномалий, которые "бьют больно и сразу" оно не нужно. На всякий случай попробовал добавить ко всем аномалиям, которые спавню. Классно. Сталкер загрузился, но нет ни одной аномалии (Специально спавнил только "Холодец", т.к. его далеко видно). Так что проблема не решена :(

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


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

У меня вот так сработало:

function spawn_killers_pda()
    local id, npc
    if xr_conditions.is_alive(nil,nil,{"zat_b103_lost_merc_leader"}) then
        id = "zat_b103_lost_merc_leader"
        npc = get_story_object_id(id)
        npc = alife():object(npc) 
        alife():create("wpn_rpg7", npc.position, npc.level_vertex_id,  npc.game_vertex_id, npc.id)
    end
end

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


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

Доброго времени суток.

 

Аномалии в CoP не "жалятся", потому что разаботчики отключили взаимодействие сталкеров (да и монстров) с ними.

Обрати внимание в секции [stalker] на параметр SpaceRestrictionSection (да и на killer_clsids тоже) и сравни с аналогичным в SHoC и CS.

Думаю этой подсказки достаточно, чтобы самому восстановить опасность аномалий для неписей.

 

Прочитав эту подсказку, сразу же бросился сравнивать эти параметры для ЗП и ТЧ. Однако оба этих параметра оказались одиннаковыми:

 

SpaceRestrictionSection = space_restrictor,zone_mine_field

killer_clsids = Z_MINCER,Z_GALANT,ZS_BFUZZ,ZS_MBALD,ZS_GALAN,ZS_MINCE

 

Поэтому, уважаемый Artos, не мог бы ты дать ещё одну подсказку?

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


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

Доброго времени суток.

 

Кто нибудь юзал функцию set_visual_name? Вообщем, дело тут вот в чём. Мне нужно заменить visual у npc, когда он появляется. Вызываю её в конце функции motivator_binder:net_spawn. Там даже в начале функции есть фрагмент кода, в котором используется set_visual_name. В этом случае visual у npc меняется, но он при этом становится бессмертным. Если вешаю set_visual_name на таймер, тогда вообще мало того, что он не убиваемый, так они ещё и выглядят как комок с тряпками, который волочится по полу. При этом успешно атакует ГГ )))

Так вот, можно ли как то заставить эту функцию работать нормально?

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

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


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

Для проверки сделал элементарную вешь:

убрал старую gamedata, создал новую, в ней - папку scripts, в неё скопировал из расспакованого сталкера всего один файл xr_motivator.script. В нём в конце функции motivator_binder:net_spawn(sobject) после строки self.object:group_throw_time_interval(2000) добавил вот такое:

self.object:set_visual_name([[actors\stalker_neutral\stalker_neutral_nauchniy]])

Создаю новую игру. Иду встречаю двух типов, они всё как положено в научном прикиде, но только не убиваемые. Ну по крайней мере, с укороченного калаша нивкакую, правда я с гаусса не пробовал, но думаю, врятли бы помогло. ))

Так вот, что я сделал не так?

function motivator_binder:net_spawn(sobject)
    ...
    self.object:group_throw_time_interval(2000)
    self.object:set_visual_name([[actors\stalker_neutral\stalker_neutral_nauchniy]])
    return true
end

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

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


Ссылка на сообщение
А зачем тебе вообще через скрипт визуал менять? Не проще создать сколько угодно нужных профилей с нужными визуалами и вводить (убирать) в игру?

Муторно это. Вот, допустим понравилась, мне моделька из-какого-нибудь мода, и я хочу чтобы некоторые npc её использовали. Так это сколько xml'а надо перелопатить? А я тут придумал попроще. В лтх файле в соостветствии с названием портрета npc хранить допустимые для него визуалы и когда npc первый раз спавнится - выбирать случайный. И чтобы добавить новый визуал в игру, достаточно прописать его в нескольких файлах (число локаций). Не хочется с net-пакетами связываться, я в них ничего не понимаю, но видимо придётся (((

 

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


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

В character_desc_* куча профилей, в которых уже прописан визуал. Допустим я в них хочу заменить, но не во всех, тогда что делать?. А в моём способе что муторно? Визуал в одном месте прописать? Ну а с иконками вообще не заморачиваюсь, какие есть, такие есть, всё равно, когда играю, на них уже не смотрю. Да и потом, вдруг нужно какой-нибудь визуал из игры убрать - удаляю его из одного файла и всего делов. Мне кажется, способ оч. хороший.

 

Добавлено через 30 мин.:

Artos, про защиту я знаю, только сейчас про неё речи нет. В общем, попытался я сделать через net-paketы (своровал кусок кода из imm мода). Принцип работы: через нет-пакет записываю новый визуал, потом отправляю npc в оффлайн, потом отправляю обрано в онлайн. И всё в принципе работает, но есть проблемка: у трупов появляются вещи, которых быть не должно: гармошка, пда, гитара и т.д. Может кто-нибудь подскажет из-за чего?

Функция, которая отправляет npc онлайн/оффлайн:

function convert_npc(npc_id, state)
local npc=level.object_by_id(npc_id)
local serv_obj=alife():object(npc_id)

if not serv_obj then
	need_change[npc_id]=nil
	return
end

if npc == nil and state == "turn_on" then
	serv_obj.sim_forced_online = true
	if serv_obj.online ~= true then
		serv_obj:switch_online()
	end
	need_change[npc_id]=nil
elseif npc and state == "turn_off" then
	if _m.is_stalker(serv_obj) then
		npc:clear_animations()
		if serv_obj:alive() then
			npc:stop_talk()
		end
	end
	serv_obj:switch_offline()
	need_change[npc_id]="turn_on"
end
end

 

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

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


Ссылка на сообщение
Artos, возможно ты не внимательно посмотрел мой пример использования функции set_visual_name, т.к. там я совершенно не меняю параметры защиты у visual'а, более того там вообще всего один файл изменён по сравнению с оригиналом. Так о какой защите может идти речь? Проблема - npc после переодевания их функцией set_visual_name становятся бессмертными, независимо от того, какой визуал ты им указываешь. Да и к тому же, при переодевании npc нет-пакетом такой проблемы нет. Вообщем, либо после (до) использования функции set_visual_name c npc нужно что-то ещё сделать, либо эта функциия вообще предназначена только для ГГ, т.к. приминетельно к нему никаких проблем не возникает.

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


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

На счёт попугаев. Специально для тебя добавил ещё один файлик, в котором в начале игры добавил себе гаусс. Встречаю двух типов в научных комбензонах (переодетых функцией set_visual_name), подхожу в упор и стреляю в голову из гаусса!!!. Он только: "Ах ты ж епт..." и по мне стрелять. Я думаю, мне не стоит тебе рассказывать, на сколько мощный гаусс в оригинале ЗП? И о том, что параметры защиты прошиты в визуале указанием на определённый файл я оч. хорошо знаю.

Поэтому, уважаемый Artos, вместо того, чтобы принимать меня за дурачка, который совсем не шарит в кодах Сталкера, попробовал бы воспроизвести ситуацию и убить этих двух типов даже используя вот такую строку:self.object:set_visual_name([[actors\stalker_neutral\stalker_neutral_1]])

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

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


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

Я знаю, что ещё со времён Теней Чернобыля успешно используют нет-пакеты для этого дела. Но вот захотелось в ЗП использовать новую функцию, а она упрямится (((

Прочитал свой первый пост, в конце которого: как можно заставить эту функцию (set_visual_name) работать правильно?

Если тебе не сложно, то покажи пожалуйста код, как её используешь ты.

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


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

Ты натолкнул меня на одну мысль и я ещё немного поэкспериментировал. Что выяснилось:

1) set_visual_name отрабатывает норм, если ей передаётся такой же visual, как и был. Делал так:

visual = npc:get_visual_name()

npc:set_visual_name(visual)

 

 

походу, где-то в движке проверка стоит, и функция просто не выполняется.

 

2) Теперь я знаю зачем разрбам понадобилась функция set_visual_name - для отыгрывания сценок с гг, когда спавнится сталкер и ему устанавливается визуал, как у ГГ. И понятно, что в этой сценке того двойника не должны убить, вот функция и делает его бессмертным.

 

3) А комок то всё равно получается.

~150Uz3fMF.jpg

Вот как я его получал:

local stalker_ids = {}

 

function update()

local npc

local visual

for id,t in pairs(stalker_ids) do

if t then

npc = level.object_by_id(id)

if npc and (t + 20000 < time_global()) then

npc:set_visual_name([[actors\stalker_neutral\stalker_neutral_nauchniy]])

stalker_ids[id] = nil

end

end

end

end

 

function on_npc_spawn(npc)

if npc and npc:alive() then

stalker_ids[npc:id()] = time_global()

end

end

 

 

 

Как говорится, в споре рождается истина! И хоть я так и не узнал, как правильно использовать функцию set_visual_name, зато теперь мне совершенно ясно, что её не нужно использовать для моих целей, т.к. она для этого не предназначена.

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


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

Хочу добавить, что при "комках" случались вылеты, в логе было что-то типа error stalker in visual.

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


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

Возвращаюсь к теме визуала, хотя здесь скорее всего вопрос по нет-пакетам (туго у меня с ними). Сначала объясню на словах, что делаю, потом код. Мне нужно в первый спавн сталкера сменить ему визуал и установить флаг, что визуал сменён, чтобы при следующем спавне уже не менять визуал. Для этого я в файле se_stalker.script добавляю этот флаг self.not_first_spawn = false в функцию se_stalker:__init . В функции сохранения/записи в этом же файле добавляю соответственно в se_stalker:STATE_Write(packet) строку packet:w_bool(self.not_first_spawn), а в функцию se_stalker:STATE_Read(packet, size) строку self.not_first_spawn = packet:r_bool() в самом конце функций. В функцию se_stalker:switch_offline() в начале ставлю self.not_first_spawn = true. Для работы с нет-пакетами использую функции из SGM-мода. В первый спавн сталкера я нет-пакетом заменяю визуал. Чтобы изменения коснулись клиентского объекта - отправляю его в оффлайн, а потом обратно в онлайн. Но почему то иногда флаг спавна лута death_droped получается установлен в true ещё до смерти сталкера, из-за этого при убийстве у него появляются гармошка, гитара, кпк и т.д. Я подозреваю, что как раз в функциях _p.read_stalker_params, _p.write_stalker_params, которые как раз работают с нет-пакетом, тоже нужно внести изменения, чтобы они правильно записывали/читали новый параметр not_first_spawn, но не могу сообразить, что нужно добавить. Помогите пожалуйста. Может есть более лёгкий способ запомнить, что сталкер уже появлялся на свет?

function se_stalker:__init (section) super (section)

self.ini = nil

self.ini_initialized = false

 

self.smart_terrain_conditions = nil

self.smart_terrain_conditions_initialized = false

 

-- этот флаг берётся из работы смарта

-- true = всегда в онлайне

-- false = всегда в офлайне

-- condlist = условие, которое отпределяет true или false

-- nil = смарту всё равно

self.job_online = nil

self.job_online_condlist = nil

 

self.death_droped = false --'Генерил ли персонаж выпадаемые предметы или нет.

self.not_first_spawn = false --'Указывает, что сталкер заспавнился первый раз

 

self.m_registred = false

 

self.sim_forced_online = false

 

if db.offline_objects[self.id] == nil then

db.offline_objects[self.id] = {}

end

 

self.board = sim_board.get_sim_board()

end

 

function se_stalker:switch_offline()

self.not_first_spawn = true

_callbacks.on_npc_switch_offline(self)

cse_alife_human_stalker.switch_offline(self)

end

--------------------

function se_stalker:STATE_Write(packet)

cse_alife_human_stalker.STATE_Write (self, packet)

if self.online then

packet:w_stringZ(tostring(level and level.object_by_id(self.id) and level.object_by_id(self.id):level_vertex_id()))

else

packet:w_stringZ(tostring(db.offline_objects[self.id] and db.offline_objects[self.id].level_vertex_id))

end

packet:w_stringZ(tostring(db.offline_objects[self.id] and db.offline_objects[self.id].active_section))

packet:w_bool(self.death_droped )

packet:w_bool(self.not_first_spawn)

end

--------------------

function se_stalker:STATE_Read(packet, size)

cse_alife_human_stalker.STATE_Read (self, packet, size)

if self.script_version > 10 then

local old_lvid = packet:r_stringZ()

if db.offline_objects[self.id] == nil then

db.offline_objects[self.id] = {}

end

db.offline_objects[self.id].active_section = packet:r_stringZ()

if db.offline_objects[self.id].active_section == "nil" then

db.offline_objects[self.id].active_section = nil

end

if old_lvid ~= "nil" then

db.offline_objects[self.id].level_vertex_id = tonumber(old_lvid)

end

end

self.death_droped = packet:r_bool()

self.not_first_spawn = packet:r_bool()

end

 

 

function read_stalker_params(id)

local sobj

if type(id) == "number" then

sobj = alife():object(id)

else

sobj = id

id = sobj.id

end

if sobj then

stpk:w_begin(0)

uppk:w_begin(0)

sobj:STATE_Write(stpk)

sobj:UPDATE_Write(uppk)

local size=stpk:w_tell()

local size1=uppk:w_tell()

 

stpk:r_seek(2)

uppk:r_seek(2)

 

local ret = {}

 

-- cse_alife_trader_abstract properties

ret.money = stpk:r_s32()

ret.specific_character = stpk:r_stringZ()

ret.trader_flags = stpk:r_s32()

ret.character_profile = stpk:r_stringZ()

ret.community_index = stpk:r_s32()

ret.rank = stpk:r_s32()

ret.reputation = stpk:r_s32()

ret.character_name = stpk:r_stringZ()

 

-- cse_alife_object properties

ret.game_vertex_id = stpk:r_u16()

ret.distance = stpk:r_float()

ret.direct_control = stpk:r_s32()

ret.level_vertex_id = stpk:r_s32()

ret.object_flags = stpk:r_s32()

ret.custom_data = stpk:r_stringZ()

ret.story_id = stpk:r_s32()

ret.spawn_story_id = stpk:r_s32()

 

-- cse_visual

ret.visual_name = stpk:r_stringZ()

 

ret.upd_extra_data=read_extra(uppk,size)

ret.extra_data=read_extra(stpk,size)

return ret

end

return nil

end

 

-- таблица параметров и id на входе

function write_stalker_params(ret,id)

local sobj

if type(id) == "number" then

sobj = alife():object(id)

else

sobj = id

id = sobj.id

end

if sobj then

stpk:w_begin(0)

uppk:w_begin(0)

 

-- cse_alife_trader_abstract properties

stpk:w_s32(ret.money)

stpk:w_stringZ(ret.specific_character)

stpk:w_s32(ret.trader_flags)

stpk:w_stringZ(ret.character_profile)

stpk:w_s32(ret.community_index)

stpk:w_s32(ret.rank)

stpk:w_s32(ret.reputation)

stpk:w_stringZ(ret.character_name)

 

-- cse_alife_object properties

stpk:w_u16(ret.game_vertex_id)

stpk:w_float(ret.distance)

stpk:w_s32(ret.direct_control)

stpk:w_s32(ret.level_vertex_id)

stpk:w_s32(ret.object_flags)

stpk:w_stringZ(ret.custom_data)

stpk:w_s32(ret.story_id)

stpk:w_s32(ret.spawn_story_id)

 

-- cse_visual

stpk:w_stringZ(ret.visual_name)

 

write_extra(uppk,ret.upd_extra_data)

write_extra(stpk,ret.extra_data)

 

local size=stpk:w_tell()

stpk:r_seek(2)

uppk:r_seek(2)

sobj:STATE_Read(stpk,size)

sobj:UPDATE_Read(uppk)

end

end

 

 

local new_visual = visuals[math.random(1,#visuals)]

 

local npc_data = _p.read_stalker_params(server_obj)

 

if not npc_data then

return

end

npc_data.visual_name = new_visual

_p.write_stalker_params(npc_data, server_obj)

need_change[npc:id()] = 'turn_off'

 

 

function vch_update()

for id, state in pairs(need_change) do

if state then

convert_npc(id, state)

end

end

end

 

function convert_npc(npc_id, state)

local npc=level.object_by_id(npc_id)

local serv_obj=alife():object(npc_id)

 

if not serv_obj then

need_change[npc_id]=nil

return

end

 

if npc == nil and state == "turn_on" then

serv_obj.sim_forced_online = true

if serv_obj.online ~= true then

serv_obj:switch_online()

end

need_change[npc_id]=nil

elseif npc and state == "turn_off" then

if _m.is_stalker(serv_obj) then

npc:clear_animations()

if serv_obj:alive() then

npc:stop_talk()

end

end

serv_obj:switch_offline()

need_change[npc_id]="turn_on"

end

end

 

 

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


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

Уважаемый Artos, не мог бы ты поделиться со мной библиотечкой для работы с нет-пакетами для чистой версии COP 1.6.02, если таковая имеется в твоём запасе? Просто оказалось, что взятые мной функции из различных модов искажают нет-пакет, даже если я совершенно не трогаю файл se_stalker, т.е. не добавляю какие-либо параметры.

По поводу флага смены визуала. Сразу хочу сказать Спасибо! Т.к. твои слова просто писать переменную в pstor твоему об'екту меня просто осинили. Я почему то всегда думал, что pstor - этот только для actora, но сейчас глянул эти функции и убедился, что это не так.

 

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


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

Возвращаюсь к вопросу визуалов и нет-пакетов. У меня походу скоро крыша поедет. Использование m_netpk не к чему не привело, т.к. грёбаные гитары, гармошки и прочая хрень всё также появляется у трупов. Собрал отдельную сборочку: В папке gamedata две папки configs и scripts. В папке configs всего один файл m_netpk.ltx. в Папке scripts 3 файла: m_netpk.script, mod.script и xr_motivator.script.

function logf(str,...)

if not str then

str = "((string is nil))"

end

get_console():execute("load ~#I#:"..string.format(str,...))

end

 

function npc_first_update(npc)

logf('npc update [%s]', npc:name())

if npc and npc:alive() then

local pk = m_netpk.get(alife():object(npc:id()))

if pk and pk:isOk() then

mod.logf("pk is OK")

local npc_data = pk:get()

npc_data.visual_name = [[actors\stalker_neutral\stalker_neutral_nauchniy]]

pk:set(npc_data)

end

end

end

function motivator_binder:update(delta)

 

...

 

if self.first_update == false then

if object_alive == false then

death_manager.drop_manager(object):create_release_item()

end

mod.npc_first_update(object)

self.first_update = true

end

 

...

end

 

m_netpk.script не изменял.

 

В результате, при убийстве npc у него появляются (а точнее не исчезают) вышеупомянутые предметы...

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


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

Artos я это прекрасно понимаю! Как раз флаг выдачи лута устанавливается в true после записи нет-пакета. Если в приведённом выше примере я не записываю нет-пакет, то с флагом всё в порядке. Ни файл death_manager.script, ни его конфиги (death_items_by_communities.ltx, death_items_by_levels.ltx, death_items_count.ltx) я вообще не трогаю. Я отдельно собрал минимальный набор файлов, который привёл выше. Там всё просто, как три копейки, но флаг death_droped становиться true после записи нет-пакета. Вот ссылка на архивчик с этой минисборкой. Уважаемый Artos, если найдёшь время - посмотри пожалуйста. Я уже 4-ый день не могу спокойно спать и работа над модом стоит...

 

(вообще вот это уже лучше в ЛС, дабы не засорять частностями)

Уточни версию патча твоей игры (SHoC 1.0004/5/6 ru/ww) ? Заодно проверь, нет ли в папке игры лишних *.dbN## иль в подпапке 'mods' *.xdb##.

И что будешь делать, если посмотрю и скажу, что у меня трупы почти пусты и никаких излишков? В таком случае хотя бы прикладывают сэйвы с логом (до и после события)

--/Artos

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

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


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

karonbaron, если он не будет его съедать - то это получится какой-то читерский ремкомплект. Предполагается, что этот ремкомплект содержит расходный материал (типа бронепластины и т.д.) и естественно, что после ремонта он должен исчезать. Ну если тебе нужен такой, то переделай вот так:

-- Ремонт комплект для костюмов
function repair_outfit()
alife():create("repair_kit_outfit", db.actor:position(), 1, db.actor:game_vertex_id(), db.actor:id())
local item_s6 = db.actor:item_in_slot(6) --объявляем переменную (item_s6)
if item_s6 ~= nil and item_s6:condition() >=0.30 and item_s6:condition() ~=1 then --когда костюм можно чинить (состояние больше или равно 30%)
item_s6:set_condition(1)
local snd_obj = xr_sound.get_safe_sound_object([[interface\inv_detach_addon]])
snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,0,255,0]Ремонт костюма завершен."
db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000)
elseif item_s6 == nil then --когда костюма нет
local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,255,0,0]Ремонт невозможен: нужно одеть коcтюм."
db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000)
elseif item_s6:condition() <0.30 then --когда костюм нельзя чинить (состояние меньше 30%)
local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,255,0,0]Ремонт невозможен: костюм слишком сильно повреждён."
db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000)
elseif item_s6:condition() ==1 then --когда костюм в отличном состояние
local news_text = "%c[255,160,160,160]Ремонт комплект:\\n%c[255,255,0,0]Ремонт невозможен: %c[255,0,255,0]костюм в отличном состояние."
db.actor:give_game_news(news_text, "ui\\ui_iconsTotal", Frect():set(83,470,83,47), 1000, 5000)

end
end

 

И будет тебе счастье :)

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


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

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