Jump to content

Recommended Posts

Dimon12321    93

В Зове Чернобыля скриптовые выводы сообщений (CusMsg, game.translate_string и local message) не распознают русские символы. Занимаюсь переводом одного мода на русский, в котором некоторые сообщения на ХУД выводятся с помощью файлов .script, а не .xml. Посмотрел на другие моды - там в скриптах такого нет (весь выводимый текст расположен в .xml, за исключением значений).

Как-то можно "вставить" русский в скрипты?

 


 

 

Share this post


Link to post
Share on other sites
Marafon6540    586
15 минут назад, Dimon12321 сказал:

там в скриптах такого нет

Есть, но желательно, конечно все делать в xml. Но можно и прямо в скрипте:

function from_system_2()
	news_manager.send_tip(db.actor, "%c[255,1,255,255]Мутанты уничтожены, можно запустить генератор и забрать ящик", nil, nil, 10000)
end

 

  • Thanks 1

Share this post


Link to post
Share on other sites
dPlayer    345

Ф-ия удаляет обьекты по спавн_ид. Как в локал передать несколько значений (т.е. не 001, а скажем, 001, 002 и 006)? Чтобы удалить несколько объектов разом.

function clear_all_spawn()
	local obj_spawn = alife():story_object(001)
	if obj_spawn then
		alife():release(obj_spawn, true)
	end
end

 


westwood.gif

Share this post


Link to post
Share on other sites
AndreySol    101
1 час назад, dPlayer сказал:

удалить несколько объектов разом.

Собрать нужные значения в таблицу, затем итерацией по таблице получать эти значения и использовать в ф-ции.

Вот только я сомневаюсь, что ф-ция alife():release может принимать аргументом сам объект...

Share this post


Link to post
Share on other sites
Graff46    451

@AndreySol, Принимает серверный объект, вот строка из луа_хелп:

function release(alife_simulator*, cse_abstract*, boolean);

 


fe2f085fa6ec930af82f5856df7e561b.jpg

Share this post


Link to post
Share on other sites

Как сделать,чтобы после юзания чего-то,сбрасывался уже поставленный таймер.У меня есть таймер на сообщение,оно приходит через 40 секунд,мне нужно,чтобы после юзания кое-чего таймер сбрасывался и начинал сначала...Можно ли так сделать?

 

Share this post


Link to post
Share on other sites
Gorlomi    0

Хочу адаптировать АМК 1.4.1 под таймфактор 15. Стоит ли делать правки выброса в amk_mod.script? А то я не совсем понимаю значение циферок в скобках, например

amk.g_start_timer("blowout",0,0,3,2)

 

Ещё интересует редактирование меток на миникарте. Где ковырять, если хочу изменить скрипт исчезновения меток НПС, когда они уходят из поля зрения (красные метки врагов сделать постоянными или метки нейтралов сделать исчезающими)?

Share this post


Link to post
Share on other sites
dPlayer    345

@AndreySol@AndreySol, сделал прям по уроку, что не так? Не вылетает.

function clear_all_spawn()
	local t = {001, 002, 006}
	for i=1, table.getn( t ) do
	 a = alife():story_object( i )
		if a then
			alife():release( a, true )
		end
	end
end

 

Edited by dPlayer

westwood.gif

Share this post


Link to post
Share on other sites
WinCap    135

@dPlayer, функция table.getn устарела, теперь нужно использовать оператор длины #.

Так:

for i=1, #do
   a = alife():story_object(t[i])

или привычнее так:

for k,v in pairs(t) do= alife():story_object(v)

 

  • Thanks 1

Share this post


Link to post
Share on other sites
AndreySol    101
4 часа назад, WinCap сказал:

функция table.getn устарела

Ну это она для свежих версий Луа устарела, а в оригинальном движке прекрасно работает...

 

@dPlayer

Перебор таблицы у тебя не правильно сделан, см. пост @WinCap

  • Thanks 1

Share this post


Link to post
Share on other sites
Fenrir02    198

@Gorlomi
Не нужно править таймеры выброса. Он будет работать и при таймфакторе 500.

Эта строка запускает таймер выброса в игровом времени.

amk.g_start_timer("blowout",0,0,3,2)
g_start_timer(name,delay_d,delay_h,delay_m,action)

name - имя таймера

delay_d - задержка в днях

delay_h - задержка в часах

delay_m - задержка в минутах

 


Важнейшая задача цивилизации - научить человека мыслить.

Share this post


Link to post
Share on other sites
dPlayer    345
6 часов назад, WinCap сказал:

функция table.getn устарела

Вот это поворот:biggrin:

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

а в оригинальном движке прекрасно работает

Просто из академического интереса, а как этот перебор выглядел бы на table.geth правильно?


westwood.gif

Share this post


Link to post
Share on other sites
WinCap    135

@AndreySol@dPlayer, я не говорил, что функция table.getn не работает - она не рекомендуется к использованию. А перебор с её помощью выглядит также, как и с оператором длины #.

for i=1, table.getn(t) do
   a = alife():story_object(t[i])

 

Share this post


Link to post
Share on other sites
naxac    1,523
В 15.12.2018 в 19:09, Dimon12321 сказал:

В Зове Чернобыля скриптовые выводы сообщений (CusMsg, game.translate_string и local message) не распознают русские символы

 

Распознают, просто надо сохранять файлы с кириллицей в кодировке  windows-1251.

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

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

naxac.gif

Share this post


Link to post
Share on other sites
Zagolski    74

Неужели остались еще мазохисты писать table.geth вместо короткого #

Share this post


Link to post
Share on other sites
Graff46    451

@Zagolski, Остались. Обратная совместимость нужна когда пишите модули для общего пользования. Если table.geth  нет (не определена Луа новее 5.2 вроде), то её можно написать самому.


fe2f085fa6ec930af82f5856df7e561b.jpg

Share this post


Link to post
Share on other sites
Heymon    5

Здравствуйте. Вопрос, как можно совмещать скрипты? Хочу поиграть в ТЧ с некоторыми мини-модами, а оба этих мода используют один и тот же скрипт bind_stalker, а хотелось бы оба установить

Share this post


Link to post
Share on other sites
Cagorich    0

Доброго времени суток. Недавно заинтересовался созданием сюжета на платформе Теней Чернобыля и обнаружил для себя одну проблему, проблема в том что я не нашел в оригинале функцию на передачу\взятие одинаковых предметов в разном количестве. После долгого поиска на форумах нашел такую функцию:

Скрытый текст

-- Проверка наличия нескольких и разных предметов у ГГ.
local items_count=0 
local itemin=nil 
function item_much(itm,need_namber) 
local actor=db.actor 
items_count=0 
itemin=itm 
actor:iterate_inventory(cheking_item,actor) 
     if items_count>=need_namber then 
      return true 
     else 
      return false 
     end 
end     
function cheking_item(actor,item) 
local items=item:section() 
     if items==itemin then 
      items_count=items_count+1 
     end 
end 
function create_items(npc,section,number) 
            for i=1,number do 
       alife():create(section,     
                npc:position(), 
                npc:level_vertex_id(),      
                npc:game_vertex_id(), 
                npc:id()) 
            end     
end

-- Отдача определенных предметов в нужном количестве.
local reloc_params={} 
local stalk 
function out_item_much(itm_section,need_number) 
     reloc_params.itm_section=itm_section 
     reloc_params.itm_cnt=need_number 
     reloc_params.itm_cnt_found=0 
     db.actor:iterate_inventory(checkout_items_count,db.actor) 
     reloc_params.itm_cnt_found=0 
     if reloc_params.itm_cnt_found<=reloc_params.itm_cnt then 
      db.actor:iterate_inventory(out_items_count,db.actor) 
     end 
     news_manager.relocate_item(db.actor, "out", itm_section) 
     reloc_params={} 
end 
function checkout_items_count(actor,item) 
     if item.section and item:section()==reloc_params.itm_section then 
      reloc_params.itm_cnt_found = reloc_params.itm_cnt_found + 1 
     end 
end 
function out_items_count(actor,item) 
     if item.section and item:section()==reloc_params.itm_section and reloc_params.itm_cnt_found<reloc_params.itm_cnt then 
      ваш_скрипт.remove_item_from_inventory(item, actor) 
      reloc_params.itm_cnt_found = reloc_params.itm_cnt_found + 1 
     end 
end 

 

И оформляется это к примеру так:

-- Есть ли два "ammo_gauss" - проверка.
function have_ammo_gauss() 
return     
ваше_название_скрипта.item_much("ammo_gauss",2) ~= false 
end

-- Проверка на количество разных предметов.
return 
ваше_название_скрипта.item_much("conserva",5) ~= false and 
ваше_название_скрипта.item_much("kolbasa",5) ~= false and 
ваше_название_скрипта.item_much("bread",5) ~= false 
end

-- Отдача "этих" предметов без появления их в торговле НПС - тупо отбирание предметов у ГГ.
function ваша_функция(second_speaker, first_speaker) 
ваше_название_скрипта.out_item_much("conserva",5) 
ваше_название_скрипта.out_item_much("kolbasa",5) 
ваше_название_скрипта.out_item_much("bread",5) 
end

Вроде бы все хорошо и понятно, но я не понял строчку в функции под спойлером:

ваш_скрипт.remove_item_from_inventory(item, actor) 

Что имелось ввиду? С какого скрипта должно вызываться remove_item_from_inventory? Там откуда я взял "это" нет никаких объяснений, а форум мертв.

И как сделать так что бы отдача определенных предметов в разном количестве была "наоборот" от НПС к ГГ? Или можно сделать все проще?

В скриптах я не силен, я только недавно начал ковыряться в файлах игры. Мне посоветовали обратиться с данным вопросом на этот форум.

Share this post


Link to post
Share on other sites
gam    65
2 часа назад, Cagorich сказал:

я не нашел в оригинале функцию на передачу\взятие

dialogs.script\function relocate_item_section(victim, section, type)

 

Можно пользоваться и таким методом, допустим определяем ценность общего барахла в инвентори актора:

function get_value()
	local value = 0
	for i=0, db.actor:object_count()-1 do
		local item = db.actor:object(i)
		if item then
			local sec = item:section()
			local cost = system_ini():r_float(sec,"cost")
			value = value + cost*item:condition()
		end
	end
	return value
end

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


AMK-Team.ru

×
×
  • Create New...