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

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

 

 

И вот здесь меня мучат сомнения: допустим, кровососы убиты в порядке 4,2,1,3, будет ли в таком случае k = 4?

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

Вообще, это больше относится к азам программирования, чем к скриптам конкретно Сталкера.

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

@Призрачный, может с такими вопросами лучше на ап-про? Там ребят твоего уровня побольше, ну и людей, которые на такие вопросы любят отвечать тоже. Конкретно у тебя вопрос, если так можно сказать, "туториальный", зайди в Справочник по функциям и классам, там ну очень подробно расписан класс effector, с помощью него реализовать тобою задуманное весьма не сложно. :)

 

@Музафир, вешаешь на дез колбек убил ли ты кровососа, прибавляешь единичку (или сколько тебе надо) к числовой переменной, ее хранишь в сейве сколько нужно, хоть всю игру, хоть пока идет квест, ну в целом готово. Опять же скажу за себя, у меня в модуле доп. рангов за убийства монстров прибавляются очки и, если убито должное количество, повышается сам ранг, обе эти переменные хранятся подобным образом:

 

for i=1, #clsIDMobs do
if not has_alife_info(aRankData.monster_data[clsIDMobs[i]][#aRankData.monster_data[clsIDMobs[i]]].sInfo) then 
packet:w_u8(aRankData.monster_data[clsIDMobs[i]].index or 0)
packet:w_u32(aRankData.monster_data[clsIDMobs[i]].count or 0)
end 
end
Тебе нужно сделать что-то подобное, только проще раз в 10. Тебе достаточно использовать w_u8. Изменено пользователем Карлан
Ссылка на комментарий

Как сделать срабатывание функции через некоторое время после вызова? Например,чтоб сообщение приходило через 15сек.

У меня возникает странный вопрос: внутрь bind_stalker.script хоть раз доводилось заглядывать, или "не царское это дело" ? dc

Изменено пользователем Dennis_Chikin
Ссылка на комментарий
Как сделать срабатывание функции через некоторое время после вызова

Никак, если вызвал ф-цию - она отработает все свое содержимое и завершится.

Судя по

 

Например,чтоб сообщение приходило через 15сек.

тебе видимо требуется это ?

void give_game_news( -- выдать на экран сообщение

string, -- само сообщение. Может содержать некоторые форматирующие элементы

string, --текстура, из которой берется аватара "отправителя"

Frect, --координаты и размеры вырезаемого из текстуры изображения

int, --начало показа сообщения с текущего момента (в миллисекундах) -- поставь 15000 и сообщение прийдет через 15 секунд после вызова ф-ции в которой это сообщение будет послано.

int --длительность показа сообщения (в миллисекундах)

)

 

Если-же требуется из одной ф-ции вызвать другую, но с какой-то временной задержкой - тогда юзай таймеры...

Изменено пользователем AndreySol
Ссылка на комментарий

@AndreySol,Ситуация такова:

function teleport(actor, npc)
level.add_cam_effector("camera_effects\\empty.anm", 160608, false,"tp.teleportate")
level.add_pp_effector("peace_fade.ppe", 160608, false)
end
 
function teleportate()
level.add_pp_effector ("teleport.ppe", 16060800, false)
db.actor:set_actor_position( vector( -241.71509460448, -26.742816052856, -304.54711914063 ) )
    sms_guider()
end
 
function sms_guider()
news_manager.send_tip(db.actor, "%c[255,255,128,128] Ну вот и добрались, я развязываю тебе глаза и 
 
ухожу. Не пытайся меня искать, удачи! %c[default]", nil, "stalker", nil, 30000)

end


Нужно, чтоб после телепорта спустя 15 сек. приходило сообщение. 

Таймер так и не понял как применять, может вписал не правильно.

Изменено пользователем demon96
Ссылка на комментарий

@demon96, тебе же @AndreySol, конкретно указал на функцию и значение, которые нужно выставить...Вообще, можно, конечно, и движковую give_game_news использовать, но мне лично удобней просто задать третье значения в send_tip:

news_manager.send_tip(db.actor, "%c[255,255,128,128] Ну вот и добрались, я развязываю тебе глаза и ухожу. Не пытайся меня искать, удачи! %c[default]", 15000, "stalker", nil, 30000)

c57d8f0c86.png

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

Получилось, только в таком случае в фкнкции указываются секунды, а не милисекунды, тоесть не 15000, а 15.

Изменено пользователем demon96
Ссылка на комментарий

Лучше спросить у автора(ов) скрипта. ;)


К какому оригиналу: ТЧ, ЧН, ЗП. Откуда скрипт взят ? Что он вообще делает -
какие-то бомбы\мины\детонаторы... Судя по использованию таймеров - сначала надо
адаптировать эти самые таймеры на не указаный оригинал. Надо знать - а есть-ли
связанные с этим скриптом другие скрипты, их тоже адаптировать. Конфиги не
забыть...

 

 

Изменено пользователем AndreySol
Ссылка на комментарий

Люди, прошу помощи с одним скриптом. Бывалым скриптерам это труда не доставит.

Суть скрипта в чём: мне нужно принести Сидоровичу один из артефактов: Выверт или Грави. За это он мне 1500 даёт. Если у игрока только Выверт - Сидор забирает Выверт, если только Грави - забирает Грави. Если и то, и другое - забирает Выверт. Проблема вот в чём: Сидор забирает у меня Грави, хотя его у меня нет в инвентаре, но есть Выверт, который так и остаётся в рюкзаке. Помимо этого он даёт 1500, получается, что ни за что. Помогите исправить эту проблему, пожалуйста. Вот код:

function give_esc_art(first_speaker, second_speaker)
    local artefact=first_speaker:object("af_vyvert")
    if artefact==nil then dialogs.relocate_item_section(second_speaker, "af_gravi", "out")
    else dialogs.relocate_item_section(second_speaker, "af_vyvert", "out")
    end
    dialogs.relocate_money(second_speaker, 1500, "in")
end

Заранее спасибо.

Ссылка на комментарий
function give_esc_art(first_speaker, second_speaker)
  if db.actor:object("af_vyvert") ~= nil then
    dialogs.relocate_item_section(second_speaker, "af_vyvert", "out")
  elseif db.actor:object("af_gravi") ~= nil then
    dialogs.relocate_item_section(second_speaker, "af_gravi", "out")
  else
    return
  end
  dialogs.relocate_money(second_speaker, 1500, "in")
end

 

 

Изменено пользователем Kirgudu
Ссылка на комментарий

Увы, помогло только частично. Теперь Сидорович забирает нужный артефакт (Выверт), но он всё ещё остаётся в рюкзаке.
 
А, проблема в самой функции relocate_item_section. Я посмотрел скрипт, отвечающий за передачу водки механику "Свободы" - там функция relocate_item. Хотя она указана, как устаревшая. Я посмотрел функцию relocate_item_section, и в ней есть пометка, что она перемещает только квестовые предметы. Вот функция:

function relocate_item_section(victim, section, type)
	if db.actor and victim then
		if type == "in" then

			--' Трансферить нужно только квестовые предметы.
			if quest_section[section] == true and
			   victim:object(section) ~= nil 
			then
				victim:transfer_item(victim:object(section), db.actor)
			else
				alife():create(section,	
					    db.actor:position(),
						db.actor:level_vertex_id(),	
						db.actor:game_vertex_id(),
						db.actor:id())
			end
		elseif type == "out" then
			db.actor:transfer_item(db.actor:object(section), victim)
		end
		news_manager.relocate_item(db.actor, type, section)
	end
end

 


Наверное, из-за этого артефакт из моего рюкзака и не отбирается. Может, кто-нибудь подскажет, как сделать эту функцию универсальной, то есть не только квестовые предметы перетаскивать?

 

Напоминаю: портянки убираем под спойлер. Kirgudu

Изменено пользователем Kirgudu
Ссылка на комментарий

 

local sim = alife()

local actor -- db.actor

local t_quest = {} -- квестовые предметы

local news_relocate_item -- вывод сообщения о потере/получении предмета

 

function relocate_item_section( who, sect, d, n ) -- todo: составить таблицы, потом перемещать

local r = 0

if d == "in" then

for i = 1, n or 1 do

if who and t_quest[sect] and i == 1 then -- квестовые предметы перемещаем

local item = who:object( sect )

if item then who:transfer_item( item, actor )

else sim:create( sect, vector(), 0, 0, 0 )

end

r = r + 1

else sim:create( sect, vector(), 0, 0, 0 ); r = r + 1

end end

elseif who and d == "out" then

for i = 1, n or 1 do

local item = actor:object( sect )

if item then

actor:transfer_item( item, who )

r = r + 1

end end end

if r ~= 0 then news_relocate_item( actor, d, sect, r ) end

return r

end

переменные перед функцией определить на свои значения

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

 

 

local news_relocate_item -- вывод сообщения о потере/получении предмета

Здесь стоит добавить для тех, кто не в теме, что news_relocate_item - функция или ссылка на функцию.

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

Я в скриптах пока не очень понимаю, только если по шаблону писать. То есть этот скрипт на перемещение предметов подойдёт на ТЧ 1.0006?

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

@Vadyanchikus, в сталкере есть непонятная лично мне особенность, сначала нужно забирать итем у актора, а потом дальше че-нить фигарить, иначе у актора нифига забираться не будет, несмотря на появленное сообщение. Так что переставь порядок функций и отпишись заработало или нет.

Замечательно забирается. dc

 

Эмпирически доказал для себя обратное, спорить я конечно не буду, у меня такой косяк имел место быть, хотя логики в нем не видно. Не забирается.

Изменено пользователем Карлан
Ссылка на комментарий

Приветствую! У меня тут такой вопрос. Как можно сделать условие, чтобы при наличии артефакта в инвентаре, повышался уровень радиации у ГГ, а когда убираешь артефакт в ячейку для артефактов, радиация переставала повышаться?

А вот функция, которую я сделал. Но когда арт убираешь в ячейку для слотов, радиация все равно повышается.

 

function artefact_radiation() 
 
if time_global() - flag_timer < 10000 then 
return 
end 
if db.actor.radiation <= 0.5 then 
flag_timer = time_global()
if db.actor:object("af_oasis_heart") and db.actor:item_in_slot(11) ~= "af_oasis_heart" then 
local actor = db.actor
local h = hit()
h.draftsman = actor
h.power = 0.3
h.type = hit.radiation
actor:hit(h) 
end
end 
end

 

 

 

db.actor:item_in_slot(11) ~= "af_oasis_heart", как минимум... dc
 

В том и прикол, что даже когда артефакт в ячейке, функция работает. Даже сделал функцию вывода сообщения, если артефакт в слоте, так сообщение не выводится.

P.S. Надеюсь пост ниже не относится ко мне? Я всего-то задал вопрос, а отвечать или нет, ваше дело. Просто реально уже все перепробовал.

Изменено пользователем aleksn09
Ссылка на комментарий

А вообще опять становится грустно...

С одной стороны, вроде радоваться надо, что появляются люди, которым еще что-то интересно, а с другой - все сводится к дичайшему примитиву, и опять таки: "вот, я тут наделал - исправьте мне", и "дайте мне, чтобы все было"... 8(

 

То есть, какой-то собственной работы не видно совсем.

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

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

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

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

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

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

Войти

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

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

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

AMK-Team.ru

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