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

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

_Val_ _Val_

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


Svoboда

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

*Shoker*, да разобрал я спавн и там у него нормальное имя, вот лучше объясните как выводить имена в лог сталкеров и желательно монстров?

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


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

Виталкер, все они основаны на координатах, так что без замеров, это пальцем в небо.

Ребята, так можно как то вывести в лог имена монстров и сталкеров, хоть как то?

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

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


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

Мне кажется лучше установить АИ вертолётов и не парится, как по мне лучший выбор.

И ещё, ребята, дайте пожалуйста ссылку(и) на учебник(и) по LUA, только что бы нормальные были, так что бы от самого начала и по возможности до конца, а то надоело собирать по кускам.

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


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

Люди, у меня такой вопрос, за что отвечают такие строки в скриптах?

for k, v in pairs(pstor) do

for n, c in pairs(l) do

for inum, infop in pairs(cond.infop_set) do

for inum, infop in pairs(cond.infop_check) do

Если можно, по детальнее, заранее спасибо.

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


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

Ребята, помогите пожалуйста, у меня вот такой вылет:

Expression    : fatal error
Function      : CScriptEngine::lua_error
File          : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line          : 73
Description   : <no expression>
Arguments     : LUA error: ... game$\s.t.a.l.k.e.r\gamedata\scripts\xr_kamp.script:265: table index is nil

Вот собственно 265 строка:

deadmansids[self.a.choosed_deadman]=nil

Чего это с ней не так, ведь такое значение вроде ей присваивается потому что действие надо отменить. Да и в других модах, видел эту строку и вылетов вроде не было... Как это исправить? Заранее большое спасибо.

 

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

И ещё такой вылет:

Expression    : fatal error
Function      : CScriptEngine::lua_error
File          : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
Line          : 73
Description   : <no expression>
Arguments     : LUA error: ... game$\s.t.a.l.k.e.r\gamedata\scripts\xr_kamp.script:808: attempt to index field '?' (a nil value)

808 строка выглядит так:

self.npc[npc_id].states["eat_kolbasa"] = false

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

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


Ссылка на сообщение
RvP, странно, а как это тогда исправить? И почему в других модах, да даже в Солянке, вроде так же всё написано и не вылетает?

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


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

*Shoker*, да спасибо, я и правда намудрил в одном скрипте, из за которого был такой вылет.

 

Я вот кажется нашел корень зла моего безлогового вылета, во первых это лагерь на свалке, там где сидит Серый, то есть все люди, которые сидят с ним у костра, а точнее виновник вылета похоже сталкер, которого надо вылечить, который валяется раненным. Проблема заключается в следующем, я его попытался вылечить, около 5ти раз пытался, но не вышло, так как я ему даю аптечку, он встаёт, благодарит и сразу же опять падает раненным на землю. Ну я его не стал трогать и ушел на Агропром, вернулся, только дохожу на расстояние метров 150(расстояние алайфа) после чего они переходят в онлайн и происходит вылет. Ну тут просто других предположений у меня нет. Так вот, правильно ли я думаю, это во первых, а во вторых, чего это он не лечится как надо? Толика и Лиса я нормально вылечил, они не выпендривались. Есть ли у кого то идеи?

 

P.S. У меня стоит медицинская резинка от Vergas`a(может полезная информация).

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


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

*Shoker*, ну в техническом плане, как я понял во первых аптечки не лечат сами по себе, то есть добавляет новые параметры в секции медикаментов, а старые параметры, такие как eat_health, eat_satiety, eat_power, eat_radiation равны 0. Если что, вот ссылка на мод.

И ещё, может виновато то, что в алл.спавне параметр здоровья предположительного виновника выглядит так:

health = 0.0899999961256981

и так:

upd:health = 0.0899999961256981

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

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


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

*Shoker*, а почему Лиса и Толика я могу вылечить? Просто раньше, когда я не добовлял xr_wounded из мода, я никого не мог вылечить.

 

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

И ещё, может каким то обманным способом можно обойти лечение моего Психа?

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


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

*Shoker*, да у меня просто уже предположений нет, что с ним делать, хоть АИ сетку вырезать вокруг него...

И ешё, вот у меня иногда происходят вылеты на Баре с переполнением стека. Это происходит из за того, что на локации лазит очень много НПС, только перешел на локацию, как смотрю с Армейских складов идёт отряд одиночек, человек с 10-15. Вот как мне ограничить количество НПС на локации?

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


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

Я вот тут вспомнил, есть в скрипте se_respawn таблица с названием simMaxCount вот ею можно урезать количество населения Зоны? Только там какие то значения слишком маленькие, это показывает количество НПС в alife или где?

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


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

abramcumner, да это вот только что тоже заметил, но ещё увидел, что одно обращение всё таки есть:

function lstats()

local can_spawn = {}

printf("***************** LIMITS STATISTIC *********************")

for k,v in pairs(respawners) do

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

local wage = 0

for kk,vv in pairs(v.respawn_section) do

wage = wage + vv.prob

end

 

-- Заносим максимальное количество всех типов чуваков, которые данный респавнер может наспаунить.

for kk,vv in pairs(v.respawn_section) do

local tt = v.sectSpawnProps[vv.section]

local community_rank = tt.community.."_"..tt.rank

if can_spawn[community_rank] == nil then

can_spawn[community_rank] = {community = tt.community, rank = tt.rank}

end

end

end

-- Выводим все это в общей статистике

local total_max, total_prob, total_current, total_limit = 0,0,0,0

for k,v in pairs(can_spawn) do

local cs = sim_statistic.simNpcCount(v.community, v.rank)

local gl = simMaxCount[k]

if gl == nil then gl = 0 end

 

total_current = total_current + cs

total_limit = total_limit + gl

 

printf("%s current=%s limit=%s", k, cs, gl)

end

printf("TOTAL: current=%s limit=%s", total_current, total_limit)

end

 

Это не оно? Если всё таки это не сработает, то каким способом можно уменьшить?

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


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

Ну игра не тормозит, но просто это закономерность, вылеты с переполнением стека, только на Баре и там как раз людей, многовато лазит, по крайней мере учитывая малые размеры локации, в алайфе находится уж очень много НПС.

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


Ссылка на сообщение
Artos, скорее всего проблема первая, так как комп у меня то хороший, но вот ОЗУ маловато, 2 планки по 2гб сгорели и вот сижу пока довольствуюсь одной на 2гб. А со вторым, ну АИ схемы нормально оптимизированы, я говорю про АИ пак 3в1?

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


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

*Shoker*, спасибо, вроде нашел.

Вот у меня имеется во такой кусок скрипта:

if string.find(vis,"stalker_bandit_") then return section end
if string.find(vis,"stalker_bandit_veteran") then return section end
if string.find(vis,"stalker_bandit_master") then return section end
if string.find(vis,"stalker_bandit_borov") then return section end
if string.find(vis,"stalker_bandit_exoskeleton") then return section end

Можно ли его заменить на вот такой:

local stalker_gopnik = {"stalker_bandit_", "stalker_bandit_veteran", "stalker_bandit_master", "stalker_bandit_exoskeleton"}
if string.find(vis,"stalker_gopnik") then return section end

И если да, то я понял возвращаться будет "section", даже если хоть одна из переменных, из stalker_gopnik подходит?

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


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

Artos, то есть лучше так оставить?

if string.find(vis,"stalker_bandit_") then return section end
if string.find(vis,"stalker_bandit_veteran") then return section end
if string.find(vis,"stalker_bandit_master") then return section end
if string.find(vis,"stalker_bandit_borov") then return section end
if string.find(vis,"stalker_bandit_exoskeleton") then return section end

И почему способ Призрака неправильный? Я вот в одном уроке видел такой способ:

--Проверка на взятие нескольких разных предметов и выдача инфопоршня:
local t_wpn = {"ПРЕДМЕТ1", "ПРЕДМЕТ1", "ПРЕДМЕТ1"}
function search_ALL_weapons_complete()
local gg = db.actor
if gg then
for i=1,#t_wpn do
if not gg:object(t_wpn[i]) then 
return false
end
end
gg:give_info_portion("ПОРШЕНЬ")
return true 
end
return false
end

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

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


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

*Shoker*, на счёт stalker_bandit_ то я ошибся, там должно быть название модели экзоскелета, хоть это теперь и не важно. А вообще мне надо, что бы была проверка на визуалы НПС, и если хоть один из визуалов одет на НПС то возвращался true. И вот я думал, что по примеру как в OGSE можно сделать, там вот так это всё выглядит, вот кусок:

function vis_to_armor(npc)

 

local section

 

if npc then

 

local obj = alife():object(npc:id())

if not obj then return "novice_outfit" end

local stalk = xrs_utils.read_stalker_params(obj)

local vis = tostring(stalk.visual)

 

if vis then

 

if npc:character_community()=="bandit" then

 

-- bandits

if string.find(vis,"stalker_bandit_") then section = "bandit_outfit" end

if string.find(vis,"stalker_bandit_veteran") then section = "bandit_veteran_outfit" end

if string.find(vis,"stalker_bandit_master") then section = "bandit_master_outfit" end

if string.find(vis,"stalker_bandit_borov") then section = "bandit_master_outfit" end

if string.find(vis,"stalker_bandit_exoskeleton") then section = "exo_bandit_outfit" end

...

 

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

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


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

К сожалению я не могу найти хотя бы пример, создания таблицы в которой не прерывается проверка, после первого найденного значения, я просто не делал никогда большие проверки и мне хватало использовать "elseif". Сейчас даже поискал по другим скриптам, так там как раз используется "elseif". А в некоторых была проверка по таблице, вроде так же как и я написал раньше, на предыдущей странице, так вот, он использовался как раз в проверке не на первый найденный, а вообще по всей таблице. Можете пожалуйсто хоть кто то дать мне пример написания, такой таблицы, что бы проверка шла по всей таблице и не прерывалась на первом найденном?

 

P.S. Пример прошу, не потому что я его заучить хочу, а понять принцип, так сказать наглядное пособие.

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


Ссылка на сообщение
Real Wolf, дак а мне надо искать не определённое значение, а именно все те которые есть в таблице, и если хоть одно совпало, то вернуть true.

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


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

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