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

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

Ох опять я стал похож на потребителя, который хочет все готовое :)

Если я в посте прошу "разжевать" не упоминая при этом о собственных попытках разобраться - это еще не значит что я их не делал. Просто приберег результаты для дальнейшей полемики.

Итак

Не мудрствуя лукаво, взял за основу один из простеньких диалогов, прописанный Сидору. Добавил в него экшен:

    <dialog id="tutorial_barter">
        <phrase_list>
            <phrase id="0">
                <text>tutorial_barter_0</text>
                <next>1</next>
            </phrase>
            <phrase id="1">
                <text>tutorial_barter_1</text>
                <next>2</next>
            </phrase>
            <phrase id="2">
                <text>tutorial_barter_2</text>
        <action>blabla.tralala</action>
                <next>3</next>
            </phrase>
            <phrase id="3">
                <text>tutorial_barter_3</text>
                <next>4</next>
            </phrase>
            <phrase id="4">
                <text>tutorial_barter_4</text>
                <next>5</next>
            </phrase>
            <phrase id="5">
                <text>tutorial_barter_5</text>
                <next>6</next>
            </phrase>
            <phrase id="6">
                <text>tutorial_barter_6</text>
            </phrase>
        </phrase_list>
    </dialog>

Вон он, в фразе с id = "2".

 

 

Затем в папке scripts создал файл "blabla.script"

Вот все его содержимое:

function tralala()
news_manager.send_tip(db.actor, "Ох как нам повезло, мы не вылетаем!", nil, nil, 20000)
end

 

И, собственно, все. Запустил игру, поболтал с Сидором - результат:

Скриншот

 

 

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

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

Прошу прощения если чрезмерно надоедаю своими вопросами. И, да, если что - я тоже ни в коей мере не хотел вас задеть/обидеть.

08.01.2012 в 03:30, xStream сказал(а):

Те, у кого свои руки есть, копипастить это не будут, проще свое написать, которое тоже велосипедное, но более понятное автору.

Мод, где не бывает одинаковых путей - Судьба Зоны.

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

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


Ссылка на сообщение
Поделиться на других сайтах

Совершенно аналогичная ситуация. Скрипты, функции которых вызываются из xml-тегов диалогов, и больше нигде не вызываются (как и сам скрипт), тем ни мение они все работает, хотя до вызова из диалога попасть в _G таблицу не могли...

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

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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


Ссылка на сообщение
Поделиться на других сайтах

Мда-а-а, аргументация "а вот у меня работает, хотя и не знаю почему" - рулить ... Ну так что волнуетесь? Моддьте далее ... ;-)

 

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

Zander_driver, найду время, вычищу свои навороты, оставив читую игру и воспроизведу специально для тебя ситуаци., когда ссылка из тега диалога на непроинициализированный скрипт приводит вылету.

На сим пока предлагаю прекратить пинг-понг "работает - не работает".

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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


Ссылка на сообщение
Поделиться на других сайтах

Прошу помощи! У меня не работает рандомная погода! Погода постоянная - предвыбросная, как написано в скрипте amk_mod. Я поковырялся и выяснил, что тупо не запускается game.start_tutorial("restore_sun"), т.е. функция, отвечающая за смену погоды на рандомную после перезагрузки.

 

Вызывал даже вручную, напрямую с помощью скрипта ui_main_menu - и после перезагрузки всё опять слетает на предвыбросную.

 

Очень прошу помощи! Уже сколько пытаюсь разобраться - и ничего не получается...

 

Просьба не привносить в моддинг и тем более в топике "Школа ..." принципы натурального обмена "ты мне - я тебе".

Есть что предложить другим -выкладываем в общий доступ. Есть вопросы, задаем их в соответствующем топике - и ждем ответы ...

--/Artos

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

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


Ссылка на сообщение
Поделиться на других сайтах

kratos888, сосершенно непонятно, используется ли тобою собственно AMK-mod или только отдельные файлы взяты.

Если отдельные - то требуется касательно твоей проблемы еще взглянуть в gamedata\config\ui\ui_movies.xml (см. <restore_sun>) откуда собственно и запускается amk_mod.restore_sun.

Ну а чтобы вызывалась game.start_tutorial("restore_sun") - требуется из amk_mod.script на старте игры запускать check_spawn() ... что делается из amk.script вызовом mod_call("check_spawn") из on_game_load().

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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


Ссылка на сообщение
Поделиться на других сайтах
Artos, "большое тебе человеческое спасибо...", я и не знал, что можно вызвать через xml - смотрел в основном обычные туториалы в _g скрипте, и в конфигах по информации к энциклопедии...

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


Ссылка на сообщение
Поделиться на других сайтах

У меня сделать сценарий.

 

но в этом сценарии любой ложный или отсутствует, но что?

 

local npc = {

mar_clear_sky_respawn_1 = mar_clear_sky_respawn_1_counter
,
mar_clear_sky_respawn_2 = mar_clear_sky_respawn_2_counter
,
mar_clear_sky_respawn_3 = mar_clear_sky_respawn_3_counter
,
}

local npc_spawn_data = {

mar_clear_sky_respawn_1 = -61.996055603027, 0.92057931423187, 293.67742919922, game_vertex_id = 3402, level_vertex_id = 106182
,
mar_clear_sky_respawn_2 = -51.345394134521, 1.1859278678894, 296.54559326172, game_vertex_id = 3402, level_vertex_id = 114134
,
mar_clear_sky_respawn_3 = -51.345394134521, 1.1859278678894, 296.54559326172, game_vertex_id = 3402, level_vertex_id = 114134
,
}

local npc_respawn_counter = {

mar_clear_sky_respawn_1_counter = 3
,
mar_clear_sky_respawn_2_counter = 5
,
mar_clear_sky_respawn_3_counter = 2
,
}







local npc_spawn = Respawn_NPC()

function start()

    npc_spawn:LoadConfig()

end



class "Respawn_NPC"



function Respawn_NPC:__init()

    self.init_done = false



    self.respawn_npc_tabel = nil

    self.respawn_counter = nil

    self.respawn_counter_name = nil

    self.respawn_npc = nil

    self.respawn_npc_point = nil



    self.respawn_timer = 0

    if level.name() ~= "marsh" then

        self.enabled = false

    else

        self.enabled = true

        self:LoadConfig()

    end

    self.init_done = true

end



function Respawn_NPC:__finalize()

    self.init_done = nil

    self.enabled = nil

    self.respawn_counter = nil

    self.respawn_npc_tabel = nil

    self.respawn_counter_name = nil

    self.respawn_npc = nil

    self.respawn_npc_point = nil

end



function Respawn_NPC:LoadConfig()

        self.respawn_npc .. "_" .. count = 0

        local npc_1 = npc

        local npc_respawn_counter_1 = npc_respawn_counter

        local npc_spawn_data_1 = npc_spawn_data



        self.respawn_counter = {}

        self.respawn_counter_name = {}

        self.respawn_npc = {}

        self.respawn_npc_point = {}



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

            self.respawn_npc(k)

            self.respawn_counter_name(v)

        end

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

                if k == respawn_counter_name then

                self.respawn_counter(v)

            end            

        end

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

            if k == respawn_npc then

                if respawn_npc .. "_" .. count < respawn_counter then

                self.respawn_npc_point(v)

                else 

                return

                end                    

            end

        end

end




function Respawn_NPC:Timer()

    if respawn_timer == false then 

    if respawn_timer == 0 then 

              respawn_timer = level.get_time_hours() + math.random(3, 4) 

              if respawn_timer > 23 then respawn_timer = respawn_timer - 24 end

        end

    if db.actor:alive() then

            if level.get_time_hours() > respawn_timer then

                respawn_timer = 0

        respawn_timer_a = true

        end

    end

end



function Respawn_NPC:Spawn_NPC(respawn_counter_ltx, respawn_npc_point)

    if respawn_timer_a == true then

    if respawn_timer == 0 then

    if not respawn_counter and not respawn_npc_point then

        return false

        end

    end

    self.respawn_npc_tabel = {}

    if npc_respawn_counter < respawn_counter then

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

    respawn_npc_tabel[spwan.id] = true
    end

end





function Respawn_NPC:Counter(respawn_npc_tabel)

if not respawn_npc_tabel then

    return false

end



local obj,count,tbl_cnt = nil,0,#respawn_npc_tabel 

for k,v in pairs(respawn_npc_tabel) do

obj = alife():object(k)

if obj == nil then

v = nil   

respawn_npc .. "_" .. count = respawn_npc .. "_" .. count - 1

end

end

    if respawn_npc .. "_" .. count < respawn_counter  then

        respawn_timer = false 

            respawn_timer = 0   

    end

end

 

 

LUA мой редактор сказал, что в строке 111 "=" ожидается около `.. '(111)

 

100 function Respawn_NPC:Spawn_NPC(respawn_counter_ltx, 101respawn_npc_point)
102    if respawn_timer_a == true then
103    if respawn_timer == 0 then
104    if not respawn_counter and not respawn_npc_point then
105        return false
106        end
107    end
108    self.respawn_npc_tabel = {}
109    if npc_respawn_counter < respawn_counter then
110    self.spwan = alife():create(respawn_npc, vector():set(respawn_npc_point)
111    respawn_npc_tabel[spwan.id] = true
112    end
113end

 

Я надеюсь, кто-нибудь может мне помочь моей проблеме.

 

Я не knwo, что у меня есть реактивный делать.

 

пс почему мой последний вклад был удален?.

 

Сообщение от модератора ColR_iT
Please write your question in the native language, you will.
Изменено пользователем ColR_iT

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


Ссылка на сообщение
Поделиться на других сайтах

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. У нас твоих кодов нет, поэтому прийдется тебе самостоятельно это сделать.

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


Ссылка на сообщение
Поделиться на других сайтах

i have correct the script.

local npc = {

mar_clear_sky_respawn_1 = mar_clear_sky_respawn_1_counter
,
mar_clear_sky_respawn_2 = mar_clear_sky_respawn_2_counter
,
mar_clear_sky_respawn_3 = mar_clear_sky_respawn_3_counter
,
}

local npc_data = {
mar_clear_sky_respawn_1 = -61.996055603027, 0.92057931423187, 293.67742919922, game_vertex_id = 3402, level_vertex_id = 106182
,
mar_clear_sky_respawn_2 = -51.345394134521, 1.1859278678894, 296.54559326172, game_vertex_id = 3402, level_vertex_id = 114134
,
mar_clear_sky_respawn_3 = -51.345394134521, 1.1859278678894, 296.54559326172, game_vertex_id = 3402, level_vertex_id = 114134,
}


local npc_respawn_counter = {

mar_clear_sky_respawn_1_counter = 3
,
mar_clear_sky_respawn_2_counter = 5
,
mar_clear_sky_respawn_3_counter = 2
,
}

local NPC = nil
function Start()
if NPC == nil then
	NPC = Respawn_NPC()
end
return NPC
end

class "Respawn_NPC"

function Respawn_NPC:__init()
self.init_done = false
self.counter_im_script = nil
self.respawn_npc_tabel = nil
self.respawn_counter = nil
self.respawn_counter_name = nil
self.respawn_npc = nil
self.respawn_npc_point = nil

self.respawn_timer = 0
if level.name() ~= "marsh" then
	self.enabled = false
else
	self.enabled = true
	self:LoadConfig()
end
self.init_done = true
end



function Respawn_NPC:__finalize()
self.counter_im_script = nil
self.init_done = nil
self.enabled = nil
self.respawn_counter = nil
self.respawn_npc_tabel = nil
self.respawn_counter_name = nil
self.respawn_npc = nil
self.respawn_npc_point = nil
end



function Respawn_NPC:LoadConfig()
	local npc_1 = npc
	local npc_respawn_counter_1 = npc_respawn_counter
	local npc_spawn_data_1 = npc_spawn_data
	self.respawn_counter = {}
	self.respawn_counter_name = {}
	self.respawn_npc = {}
	self.respawn_npc_point = {}

	for k,v in pairs ("npc_1")do
		self.respawn_npc(k)
		self.respawn_counter_name(v)
	end
	self.counter_im_script = respawn_npc.."_counter"
	self.counter_im_script = 0
	for k,v in pairs("npc_respawn_counter_1") do 
			if k == respawn_counter_name then
			self.respawn_counter(v)
		end    
	end

	for k,v in pairs("npc_spawn_data_1") do 
		if k == respawn_npc then
			if counter_im_script < respawn_counter then
			self.respawn_npc_point(v)
			else 
			return
			end					
		end
	end
end




function Respawn_NPC:Timer()
if respawn_timer == false then 
if respawn_timer == 0 then 
             respawn_timer = level.get_time_hours() + math.random(3, 4) 
             if respawn_timer > 23 then respawn_timer = respawn_timer - 24 end
       end
if db.actor:alive() then
           if level.get_time_hours() > respawn_timer then
               respawn_timer = 0
	respawn_timer_a = true
	end
end
end


function Respawn_NPC:Spawn_NPC(respawn_counter_ltx, respawn_npc_point)
if respawn_timer_a == true then
	if respawn_timer == 0 then
		if not respawn_counter and not respawn_npc_point then
			return false
		end
	end
	self.respawn_npc_tabel = {}
	if npc_respawn_counter < respawn_counter then
		self.spwan = alife():create(respawn_npc, vector():set(respawn_npc_point))
		respawn_npc_tabel[spwan.id] = true
	end
   end
end




function Respawn_NPC:Counter(respawn_npc_tabel)
if not respawn_npc_tabel then
return false
end
local obj,count,tbl_cnt = nil,0,#respawn_npc_tabel 
for k,v in pairs(respawn_npc_tabel) do
obj = alife():object(k)
if obj == nil then
v = nil 
counter_im_script = counter_im_script - 1  
end
end
if counter_im_script < respawn_counter  then
	respawn_timer = false 
   	respawn_timer = 0   
end
end
end


 

 

but when i start the game it comming a crash.

 

FATAL ERROR

[error]Expression    : fatal error
[error]Function      : CScriptEngine::lua_error
[error]File          : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
[error]Line          : 73
[error]Description   : <no expression>
[error]Arguments     : LUA error: ...w of chernobyl\gamedata\scripts\resapwan_npc2.script:128: bad argument #1 to 'pairs' (table expected, got string)


stack trace:

 

 

but i don´t know what i have yet to do.

 

can anyone help me?

 

thank you

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


Ссылка на сообщение
Поделиться на других сайтах

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

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


Ссылка на сообщение
Поделиться на других сайтах

when i use the local tabel name is it then correct?

 

i have use this

 

local npc = {

mar_clear_sky_respawn_1 = mar_clear_sky_respawn_1_counter
,
mar_clear_sky_respawn_2 = mar_clear_sky_respawn_2_counter
,
mar_clear_sky_respawn_3 = mar_clear_sky_respawn_3_counter
,
    }

local npc_data = {
mar_clear_sky_respawn_1 = -61.996055603027, 0.92057931423187, 293.67742919922, game_vertex_id = 3402, level_vertex_id = 106182
,
mar_clear_sky_respawn_2 = -51.345394134521, 1.1859278678894, 296.54559326172, game_vertex_id = 3402, level_vertex_id = 114134
,
mar_clear_sky_respawn_3 = -51.345394134521, 1.1859278678894, 296.54559326172, game_vertex_id = 3402, level_vertex_id = 114134,
}


local npc_respawn_counter = {

mar_clear_sky_respawn_1_counter = 3
,
mar_clear_sky_respawn_2_counter = 5
,
mar_clear_sky_respawn_3_counter = 2
,
    }
    
local NPC = nil
function Start()
    if NPC == nil then
        NPC = Respawn_NPC()
    end
    return NPC
end

class "Respawn_NPC"

function Respawn_NPC:__init()
    self.init_done = false
    self.counter_im_script = nil
    self.respawn_npc_tabel = nil
    self.respawn_counter = nil
    self.respawn_counter_name = nil
    self.respawn_npc_name = nil
    self.respawn_npc_point = nil

    self.respawn_timer = 0
    if level.name() ~= "marsh" then
        self.enabled = false
    else
        self.enabled = true
        self:LoadConfig()
    end
    self.init_done = true
end



function Respawn_NPC:__finalize()
    self.counter_im_script = nil
    self.init_done = nil
    self.enabled = nil
    self.respawn_counter = nil
    self.respawn_npc_tabel = nil
    self.respawn_counter_name = nil
    self.respawn_npc_name = nil
    self.respawn_npc_point = nil
end



function Respawn_NPC:LoadConfig()
        self.respawn_counter = {}
        self.respawn_counter_name = {}
        self.respawn_npc_name = {}
        self.respawn_npc_point = {}

        for k,v in pairs ("npc")do
            self.respawn_npc_name(k)
            self.respawn_counter_name(v)
        end
        self.counter_im_script = respawn_npc_name.."_counter"
        self.counter_im_script = 0
        for k,v in pairs("npc_respawn_counter") do 
                if k == respawn_counter_name then
                self.respawn_counter(v)
            end    
        end

        for k,v in pairs("npc_spawn_data") do 
            if k == respawn_npc then
                if counter_im_script < respawn_counter then
                self.respawn_npc_point(v)
                else 
                return
                end                    
            end
        end
end




function Respawn_NPC:Timer()
    if respawn_timer == false then 
    if respawn_timer == 0 then 
              respawn_timer = level.get_time_hours() + math.random(3, 4) 
              if respawn_timer > 23 then respawn_timer = respawn_timer - 24 end
        end
    if db.actor:alive() then
            if level.get_time_hours() > respawn_timer then
                respawn_timer = 0
        respawn_timer_a = true
        end
    end
end


function Respawn_NPC:Spawn_NPC(respawn_counter_ltx, respawn_npc_point)
    if respawn_timer_a == true then
        if respawn_timer == 0 then
            if not respawn_counter and not respawn_npc_point then
                return false
            end
        end
        self.respawn_npc_tabel = {}
        if npc_respawn_counter < respawn_counter then
            self.spwan = alife():create(respawn_npc, vector():set(respawn_npc_point))
            counter_im_script = counter_im_script + 1
            respawn_npc_tabel[spwan.id] = true
        end
    end
end




function Respawn_NPC:Counter(respawn_npc_tabel)
if not respawn_npc_tabel then
    return false
end
local obj,count,tbl_cnt = nil,0,#respawn_npc_tabel 
for k,v in pairs(respawn_npc_tabel) do
obj = alife():object(k)
if obj == nil then
v = nil 
counter_im_script = counter_im_script - 1  
end
end
if counter_im_script < respawn_counter  then
        respawn_timer = false 
        respawn_timer = 0   
    end
end
end

 

but it give the same problem.

 

what i must yet do?

 

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


Ссылка на сообщение
Поделиться на других сайтах

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

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


Ссылка на сообщение
Поделиться на других сайтах

what mean you i donґt understand this.

sorry.

Сообщение от модератора ColR_iT
The function pairs must take as its argument the name of the table, not a string.

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

when i use it not in a function then i works but when i use it in a function it donґt works but why it donґt work?

Сообщение от модератора ColR_iT
Here in this line:
for k,v in pairs ("npc")do

parameter npc should be written without quotation marks.

And so everywhere.

I advise you read the articles on the syntax of the language Lua, here: http://www.lua.org/

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

when i use this

function tabel(npc)
local npc = 
{
mar_clear_sky_respawn_1 = 232442,
mar_clear_sky_respawn_2 = 243544,
mar_clear_sky_respawn_3 = 7685686
    }
for k,v in pairs(npc)do
print(k)
end
end

and i starting debugging this then is not output

 

but when i start is to debugging

local npc = 
{
mar_clear_sky_respawn_1 = 232442,
mar_clear_sky_respawn_2 = 243544,
mar_clear_sky_respawn_3 = 7685686
    }
for k,v in pairs(npc)do
print(k)
end

then spent some.

why is it so?

I know that it really belongs here, not pure but could you please ask the beantoworten anyway.

thank you before

Сообщение от модератора ColR_iT
It appears that you have no programming experience.

Therefore, in order not to mislead either registered users, nor you, encourage you to read the basic principles of programming in Lua, on the official site:http://www.lua.org/

Thank you for your understanding.

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

i have learn somthing in lua and iґm at the beginning.

can anyone explaen me this why this is so?

thank you.

 

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

i have make it yet in the function.

local npc = nil

function Start()
if npc == nil then
	npc = Respawn_NPC()
end
return npc
end

class  "Respawn_NPC"
function Respawn_NPC:__init()
self.init_done = false
self.counter_im_script = nil
self.respawn_npc_tabel = nil
self.respawn_counter = nil
self.respawn_counter_name = nil
self.respawn_npc_name = nil
self.respawn_npc_point = nil

self.respawn_timer = 0
if level.name() ~= "marsh" then
	self.enabled = false
else
	self.enabled = true
	self:LoadConfig()
end
self.init_done = true
end



function Respawn_NPC:__finalize()
self.counter_im_script = nil
self.init_done = nil
self.enabled = nil
self.respawn_counter = nil
self.respawn_npc_tabel = nil
self.respawn_counter_name = nil
self.respawn_npc_name = nil
self.respawn_npc_point = nil
end



function Respawn_NPC:LoadConfig()
	local npc = 
{
mar_clear_sky_respawn_1 = {"mar_clear_sky_respawn_1_counter"},
mar_clear_sky_respawn_2 = {"mar_clear_sky_respawn_2_counter"},
mar_clear_sky_respawn_3 = {"mar_clear_sky_respawn_3_counter"}
}
local npc_data = 
{
mar_clear_sky_respawn_1 = -61.996055603027, 0.92057931423187, 293.67742919922, game_vertex_id = 3402, level_vertex_id = 106182,
mar_clear_sky_respawn_2 = -51.345394134521, 1.1859278678894, 296.54559326172, game_vertex_id = 3402, level_vertex_id = 114134,
mar_clear_sky_respawn_3 = -51.345394134521, 1.1859278678894, 296.54559326172, game_vertex_id = 3402, level_vertex_id = 114134
}


local npc_respawn_counter =
{
mar_clear_sky_respawn_1_counter = 3,
mar_clear_sky_respawn_2_counter = 5,
mar_clear_sky_respawn_3_counter = 2	
}

	for k,v in pairs(npc)do 
		self.respawn_npc_name = k
		self.respawn_counter_name = v
	end
	self.counter_im_script = respawn_npc_name.."_counter"
	self.counter_im_script = 0
	for k,v in pairs(npc_respawn_counter)do 
			if k == respawn_counter_name then
			self.respawn_counter(v)
		end    
	end

	for k,v in pairs(npc_spawn_data)do 
		if k == respawn_npc then
			if counter_im_script < respawn_counter then
			self.respawn_npc_point(v)
			else 
			return
			end					
		end
	end
end




function Respawn_NPC:Timer()
if respawn_timer == false then 
if respawn_timer == 0 then 
             respawn_timer = level.get_time_hours() + math.random(3, 4) 
             if respawn_timer > 23 then respawn_timer = respawn_timer - 24 end
       end
if db.actor:alive() then
           if level.get_time_hours() > respawn_timer then
               respawn_timer = 0
	respawn_timer_a = true
	end
end
end


function Respawn_NPC:Spawn_NPC(respawn_counter_ltx, respawn_npc_point)
if respawn_timer_a == true then
	if respawn_timer == 0 then
		if not respawn_counter and not respawn_npc_point then
			return false
		end
	end
	self.respawn_npc_tabel = {}
	if npc_respawn_counter < respawn_counter then
		self.spwan = alife():create(respawn_npc, vector():set(respawn_npc_point))
		counter_im_script = counter_im_script + 1
		respawn_npc_tabel[spwan.id] = true
	end
   end
end




function Respawn_NPC:Counter(respawn_npc_tabel)
if not respawn_npc_tabel then
return false
end
local obj,count,tbl_cnt = nil,0,#respawn_npc_tabel 
for k,v in pairs(respawn_npc_tabel)do
obj = alife():object(k)
if obj == nil then
v = nil 
counter_im_script = counter_im_script - 1  
end
end
if counter_im_script < respawn_counter  then
	respawn_timer = false 
   	respawn_timer = 0   
end
end
end


but it comming a crash,too.

FATAL ERROR

[error]Expression    : fatal error
[error]Function      : CScriptEngine::lua_error
[error]File          : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
[error]Line          : 73
[error]Description   : <no expression>
[error]Arguments     : LUA error: ...ow of chernobyl\gamedata\scripts\respwan_npc2.script:71: attempt to concatenate global 'respawn_npc_name' (a nil value)


stack trace:

is it to global or what?

what i have yet to do?

can anyone say me that.

thank you

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

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


Ссылка на сообщение
Поделиться на других сайтах

(оффтопик) "Ох и тяжкая эта работа - из болота тащить бегемота"©Чуковский

;-)

[x]

 

Поддержу. Думаю не имеет смысла продолжать переписку с нашим иностранным гостем. Не в обиду никому.

ColR_iT

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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


Ссылка на сообщение
Поделиться на других сайтах

у меня вопрос по логике: в схеме walker обязательно должны присутствовать look_points?

Т.е. вот так допустимо?

[ras5_walk]

points = p0

p0:name = wp00

p0:flags = 0x1

p0:position = -213.861343383789,2.20881962776184,80.225471496582

p0:game_vertex_id = 3708

p0:level_vertex_id = 354315

 

[logic]

active = walker1

 

[walker1]

path_walk = ras5_walk

 

 

 

Создаю глобальный мод с новыми локациямЭ

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


Ссылка на сообщение
Поделиться на других сайтах

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

А вообще - нет. Если НПС находится под логикой walkerа и стоит он на одной точке, то точка look обязательна.

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

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

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


Ссылка на сообщение
Поделиться на других сайтах

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

Вылет был из за монстров (оба монстра из оригинала, ставятся через all.spawn, флажок "всегда в онлайне"), когда я глянул их рестрикторы, у обоих в in-рестрикторах была прописана ближайшая (на момент загрузки сейва) к ним грави-аномалия (но расстояние между монстром и аномалией около 10-15 метров). Но что интересно, оба монстра были живы и ходили по локации. Так каким образом к ним могла прописаться эта аномалия в рестрикторы? Возможно аномалия прописывается объекту после нанесения ему хита? (я ещё это не проверил)

И кстати, при удалении этих аномалий, рестрикторы которых были прописаны монстрам, сообщение об ошибке в консоль не выводилось в 97% тестов.

 

И вот ещё вопросцы по поводу рестрикторов...

1) Рестрикторы можно удалить в любой момент, или нужно из какой нибудь скриптовой схемы? В ЧН нашёл интересный скрипт restrictor_manager.script, который как раз из xr_logic вызывается.

2) Рестрикторы достаточно удалить только у онлайн объектов, или они могут быть ещё прописаны объекту который в оффлайне?

3) Какие ещё есть подводные камни, связанные с удалением рестрикторов, которые стоит знать?

 

И ещё извиняюсь за тупой вопрос, но щас уже поздно, штудировать мануалы не хочется. In рестрикторы я так понял НЕ впускают в себя объект, а out наоборот НЕ выпускают. А если out-ов несколько прописано?

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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


Ссылка на сообщение
Поделиться на других сайтах

*Shoker*, ну хоть так, наощупь постепенно начинаешь приближаться к опыту работы с рестрикторами. :-)

 

Вот если бы задался парой общих вопросов, возможно быстрее бы получил ответы на частные.

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

Загляни в конфиги монстров/сталкеров и посмотри параметр SpaceRestrictionSection. Ничего не навевают и название и значения?

 

Ну а теперь не столь для тебя, ты уже почти сам нашел ответы:

Рестрикторы прописываются неписям/монстрам движком при инициализации объекта в онлайне и из логики (собственно restrictor_manager.script развитие этого). Прописываются все(!) имена рестрикторов, тип/класс которых упомянут в конфиге секции непися/монстра. Соответственно тип рестриктора (restrictor_type) учитывается в in- или в out- записи попадет рестриктор.

(упрощенно) Обновляются записи о рестрикторах соответственно по апдейтам, а точнее в ЧН по переключению секций логики.

1. Удалять можешь когда тебе захочется, вот только если рестриктор существует (включен, в онлайне) - то при апдейте иль переключении секций логики, твоя чистка будет опять "замарана".

Менеждер рестрикторов в ЧН/ЗП, более организованно позволяет из секций логики управлять записью/удалением соотв.рестрикторов.

Как, например, организован в Расширенной арене уход в бар Арни (иль его заместителя)? Довольно просто, ему прописан рестриктор арены и держит его внутри здания арены. Когда этот рестриктор удаляется - Арни идет в Бар. Когда приходит время - рестриктор вновь прописывется и Арни возвращается к работе ...

 

2. Ответ на это см. в п.1. Пока объект на локации - ему прописаны рестрикторы данной локации, даже трупу, даже если он a оффлайне.

3. Вся игра, ее алгоритм, скрипты - груда подводных камней и попытаться дать заранее ответ о них ... это как описать все варианты развития шахматной партии. ;-)

 

Ну а штудировать мануалы никогда не позно, ты ведь не на самолет опаздываешь.

'in'- рестрикторы определяют зону куда запрещено объекту входить, 'out'- наоборот, предписывают именно в зоне рестриктора находиться.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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


Ссылка на сообщение
Поделиться на других сайтах

Такой вопрос, давно его задавал: есть ли возможность изменять направление у физ. объектов через нет-пакеты? Обновленные пакеты позволяют это сделать, или движком не добавлено направление для класса физ. объектов?

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


Ссылка на сообщение
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

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

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

AMK-Team.ru

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