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

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


Svoboда

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

olaf1

Найди отличие

111 self.spwan = alife():create(respawn_npc, vector():set(respawn_npc_point)

111 self.spwan = alife():create(respawn_npc, vector():set(respawn_npc_point))

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


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

HellRatz

А что тут непонятного?

В файле xr_gulag.script, в строке 1219 переменная 'strn' равна nil.

Ищи, откуда она берется, какое значение должно быть ей присвоено.

И почему она равна nil. У нас твоих кодов нет, поэтому прийдется тебе самостоятельно это сделать.

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


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

olaf1

Your script not correct! Use some lua checker.

For instance. You write :

...

for k,v in pairs("npc1") do

...

Type "npc1" is string. But must be a table.

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

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


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

Study syntax lua.

"npc" is string. This string is not some name.

The name your table - npc - a link.

Use it is necessary so :

for k,v in pairs(npc) do

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


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

Tris

Инициализируй функции перед выполнением проверок.

function random_time()
    function function_start_1()
        ...
    end

    -- и т.д.

    if random_table_function == 1 then
      function_start_1()
    end
    -- и т.д.
end

 

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

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


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

Что за запись? function function_start_1(). Один раз function

Сорри. Зарапортовался.

P.S. Ну ты и назвал. Назови просто start_1, дабы не вводить людей в заблуждение :)

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

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


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

Мля, достали уже.

demover123, да и многие другие.

Когда-то написал этот скрипт - ДА!. Но только не для тех кто в бронепоезде.

Неужели трудно понять что

[[Путь_до_звука_относительно_папки_sounds]]
, да и другое, это...

Э-э-х. Чего бисер метать?

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

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


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

_Призрак_

Подобная конкатенация в цикле - str=str..add - всегда была ужасно медленной штуковиной.

Сделай через таблицу :

local t = {}
local char = string.char
for i=1,size do
    t[#t+1] = char(r:r_u8())
end
local str = table.concat(t)

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

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


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

Я уже забыл конечно (давно сталкером не занимался). Собственно - изменение в инвентаре это не дроп\тэйк?

Если да, то ставить обновление на них вместо апдейта.

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


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

olaf1

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

Я так и не смог толком понять что же тебе нужно, поэтому пришлось понимать по приведённому тобой коду.

И в нём присутствует абсурд.

А именно в строке

if time_global() > timer then

time_global() измеряется в миллисекундах, а timer у тебя задан в часах.

Естественно, что time_global() у тебя всегда будет больше чем timer.

Приведи оба операнда к единому измерению.

 

Всё бы хорошо, но по всей видимости и английский не является родным языком нашего гостя.

ColR_iT

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

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


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

Да, и оформлять код нужно должным образом. Так, чтобы читать можно было легко.

Например (шутка) :

local respwan_table = {}local timer = nil

local levels = {marsh= {x=-61.996055603027,y=0.92057931423187,z=293.67742919922} }local respwan_npc = {

["mar_clear_sky_respawn_1"] = true,

["mar_clear_sky_respawn_2"] = true,

["mar_clear_sky_respawn_3"] = true,

}

 

function spwanen()

if
db
.
actor
:
alive
() ==
false then return end

local
level_name
=
level
.
name
()

local
coordinates
=
levels
[
level_name
]

if
coordinates
then

local
pos
=
vector
():
set
(
coordinates
.
x
,
coordinates
.
y
,
coordinates
.
z
)

local
lvi
=
db
.
actor
:
level_vertex_id
()

local
gvi
=
db
.
actor
:
game_vertex_id
()

for
section
,
flag
in
pairs
(
respwan_npc
)
do

if
flag
==
true then

if
timer
==
nil then

timer
=
level
.
get_time_hours
() +
math.random
(
3
,
6
)

if
timer
>
23
then
timer
=
timer
-
24
end

end

if
time_global
() >
timer
then

timer
=
nil

local
se_obj
=
alife
():
create
(
section
,
pos
,
lvi
,
gvi
)

respwan_table
[
se_obj
.
id
] =
section

respwan_npc
[
section
] =
false

end
end
end
end
end

 

for id,section in pairs(respwan_table) do

local
obj
=
db
.
storage
[
id
]
and
db
.
storage
[
id
].
object

if not
obj
or
obj
:
alive
() ==
false then

respwan_npc
[
section
] =
true

respwan_table
[
id
] =
nil

end
end

 

 

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

I long ago do not work with S.T.A.L.K.E.R so answer will not very exact.

First. Get population gulag

function IsPopulationGulag(name)
        local gulag = xr_gulag.get_gulag(name)
        -- or local gulag  = xr_gulag.fraction["name_gulag"]  -- "name_gulag" is string at name gulag. Sorry, exactly not litter.
        return gulag:get_population() > 0
end

Second. If population is a zero, that cause forced respawn

function ForceRespawn(name) -- name is story id smart_terrain or name (string) gulag
    if not IsPopulationGulag(name) then
        -- your function for spawn NPC
        spwanen() -- Only correct mistakes, about which I have said
    end
end

 

А еще интересно то, что вот такой предложенный "искусственный" респавн, наш гость пытается "прилепить" к НПС, не в гулаге, а со своей логикой.

ColR_iT

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

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


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

Ну тогда писать каждому в логику секцию [on_death] и в ней выдачу инфопорции на смерть. Когда соберутся все, производить спавн и восстановление инфопорций.

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


Ссылка на сообщение
...стОит (ИМХО) очищать топик от подобных кодов как у AlexLUMEN, дабы не давать примеров как НЕ нужно делать...
Artos, при всём уважении - не дай Бог мне было бы попасть на тебя при начале моего изучения скриптинга и lua в целом.

Ну пытается человек что-то (с)делать. Ну хочется быстрее, хоть и меньшими усилиями. Но ведь пытается всё же.

И может быть когда-то, сужу по себе, ему надоест быть "слабым звеном"?

Такими темпами ты не только отобьёшь интерес к lua, но и в принципе к вопрошаниям по любой теме..

Не суди меня строго, но где же им ещё учиться как не в форумах?

Предугадываю встречный вопрос, - "А как же ты(в смысле Я) сам себя вёл в подобных ситуациях?"

Сознаюсь - очень не хорошо. Но всё меняется. Теперь считаю что иногда лучше промолчать, чем ...

Но это, конечно, не значит что этим постом поддерживаю полную безграмотность. И в первую очередь грамматическую.

ColR_iT усиленно борется с этим, а я бы убивал не месте :)

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

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


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

Artos

Понимаю, но и "отсылать" изучать матчасть тоже не всегда является самым правильным решением.

Откуда они знают что и где искать?

В свете недавних событий (кто следит за топиком и помнит) даже гуру попадаются на "мякине".

Обвинять таких людей в незнании более чем некорректно. Просто...и так уж иногда получается.

А что говорить про новичков?

Поэтому можно бы и "ткнуть носом". Сначала pil :

math.random возвращает псевдослучайное целое число из отрезка [1, m]
А затем не трудно пояснить, что число >= 1.5 <= 2.5 (это грубо конечно. экспоненту 1е+14 не трогаю) в данном случае округляется до 2-х. Ну и так далее по коду.

А дальше видно будет. Если качество вопросов не измениться, то тогда и рубить головы. Под корень. Тогда я и сам уже помогу поднять топор.

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

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


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

Если движкового объекта уже нет, то проверка type(object) == 'userdata' возвратит false, поэтому до второй части - and type(object.id) ~= 'nil' - даже не дойдёт.

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


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

Artos

Я как то упустил, что в этом вопросе была предыстория.

И всё-таки проверка!!! if a == b возвратит false, я ведь писал не о результате работы функции type :)

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


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

malandrinus

Изначально я, признаю, выразился не совсем точно. И получилось не то, что я хотел сказать. А именно :

вместо сказанного - "Если движкового объекта уже нет", мне стоило сказать - "Если объекта уже нет".

Получилось как-то с уклоном на Сталкер, которого у меня ни на компе нет, ни в приоритетах интересов.

Поэтому о "движковых объектах" это я уже как-то случайно загнул не по моим знаниям, т.к. занимаюсь только академическим Lua.

В связи с чем твоё пояснение для меня ("в очередной раз встречаю некоторое непонимание разницы между ссылкой и самим значением"), несомненно полезное для новичков, считаю направленным несколько не по теме ))

Ну если (в Lua) объекта нет, т.е. все ссылки на него равны nil, то и ... вот об этом я и писал выше.

 

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

Снова не точно. Правильно будет сказать - нет ссылок на объект.

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

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


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

volazar

Может как-то так :

local old_suit_name

function nano_speed()
    local gg = db.actor
    local nano_speed = gg:item_in_slot(1)
    local suit  = gg:item_in_slot(6)
    
    if nano_speed and nano_speed:section() == "nano_speed" then
        local current_suit_name = suit and suit:section()
        
        if current_suit_name == old_suit_name then return end
        
        if current_suit_name == "nano_suit" then
            news_manager.send_tip(gg, "%c[10,241,129,129]".."Сообщение центрального процессора:".."\\n"..[[%c[10,241,129,129]Инициализирован модуль "Скорость". Модуль готов к использованию.]].."\n")
        else
            news_manager.send_tip(gg, "%c[10,241,129,129]".."ERROR:".."\\n".."%c[10,241,129,129]Ошибка инициализации. Отсутствует подключение к центральному процессору!".."\n", nil, nil, 30000)
        end
        
        old_suit_name = current_suit_name
    end
end

Пользуйся редакторами с подсветкой синтаксиса.

У тебя ошибка в строке - "%c[10,241,129,129]Инициализирован модуль "Скорость". Модуль готов к использованию."

Найдёшь?

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


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

Artos

У меня, твоя переменная bSend, называлась просто flag.

После того как написал код я сделал следующее :

1. Подумал что так делалось уже очень много раз.

2. Выделил всё.

3. Удалил.

4. И решил написать немного по-другому.

5. Написал.

Лично мне так...веселее что-ли? Интереснее... :)

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


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

Artos

Да я то изначально так и подумал, что если нет nano_speed-а, то и не фиг дёргаться ))

Хотя логичнее по-твоему

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

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


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

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