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

[SoC] Ковыряемся в файлах


Halford

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

Kirag

а разве он сам не переводится при приближении актора к нему ближе, чем на радиус онлайна?

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


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

Vergas,

local hud = get_hud()
hud:HideActorMenu()

 

Не уверен, но может помочь. И вот второй вариант:

level.disable_input()
level.hide_indicators_safe()
local hud = get_hud()
hud:HideActorMenu()
hud:HidePdaMenu()
level.enable_input()
level.show_indicators()

 

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

Monnoroch, на ум приходит:

actor:give_game_news("", "", [заранее сделанная текстура с чёрным шрифтом], 1000,20000)

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

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


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

Gonarh, а вот такой вопрос:

1. Как в Lua писать данные в файл, как читать данные из файла?

2. Что такое NET пакеты и зачем они нужны? (это случай не что-то по типу winAPI)

3. Что за Frect():set(0,658,83,47)?

4. В стандартном news_manager:

actor:give_game_news(news_caption, news_text, texture, timeout*1000, showtime)

 

У вас на месте таймаута стоит Frect():set(0,658,83,47)?

5. Расскажите о методах GetHolder() и start_stop_menu(self,true). (Как я понимаю, start_stop_menu (self,true) открывает или закрывает элемент self, в нашем случае инвентарь.)

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

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


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

malandrinus, Gonarh, в faction commander для ЧН как-то сделали запись в файл и чтение из него.

Вот кусок кода:

class "Setting"
function Setting:__init()
    self.settingFileName = "gamedata\\faction_commander_setting.txt"
    self.settingTable = {
        command        = { value = "", pattern = ".+",     defaultValue = "default" },
        magnitude     = { value = "", pattern = "%d+",    defaultValue = "0" },
        ai             = { value = "", pattern = "%a+",     defaultValue = "disable" },
        commission    = { value = "", pattern = "%a+",     defaultValue = "commission_off" },
    }

    local file = io.open( self.settingFileName, "r" )
    if file ~= nil then
        for name, info in pairs( self.settingTable ) do
            info.value = file:read( "*line" ) or ""
        end
        file:close()
    end
    
    for name, setting in pairs( self.settingTable ) do
        self:_checkIntegrity( name )
    end
end

function Setting:__finalize()
    local file = io.open( self.settingFileName, "w" )
    if file ~= nil then
        for name, setting in pairs( self.settingTable ) do
            file:write( setting.value, "\n" )
        end
        file:close()
    end
end

function Setting:getValue( name )
    return self.settingTable[ name ].value
end

function Setting:setValue( name, value )
    self.settingTable[ name ].value = value
    self:_checkIntegrity( name )
end

 

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

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


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

я сделал так:

packet = net_packet()
obj = db.actor
obj:STATE_Write(packet)
direction = packet:r_vector()

 

у меня ругается на то, что метод STATE_Write () неизвестен. Что делать? :(

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


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

я создал свой файл скриптов: MyScripts.script

там написал функцию:

BlaBlaBla(oneparam,twoparam)
...
end

вызвал её из другого скрипта вот так:

MyScripts.BlaBlaBla (oneargument,towargument)

у меня вылазит:

[error]Arguments : LUA error: .... - чистое небо\gamedata\scripts\ui_main_menu.script:117: attempt to index global 'MyScripts' (a nil value)

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


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

Borsalino, так вы all.spawn смогли разобрать? Или нет?

 

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

Явно не объявленная переменная будет глобальной по всей игре?

 

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

Ага... Уже ясно, что глобальной переменная является не во всех скриптах,а только в каком-то классе или вообще только в каком-то файле. Бум дальше тестить.

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


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

Вот кусок кода:

ObjSpawn = alife():create(section,pos,db.actor:level_vertex_id(),db.actor:game_vertex_id())

if NumObjectsFramedThroughTitles == nil or NumObjectsFramedThroughTitles == 0 then

NumObjectsFramedThroughTitles = 1

else

NumObjectsFramedThroughTitles = NumObjectsFramedThroughTitles + 1

end

ObjectsFramedThroughTitles = {}

ObjectsFramedThroughTitles[NumObjectsFramedThroughTitles] = ObjSpawn

news_manager.RealLog("NPC №"..ObjSpawn:id().." enable")

if not has_alife_info ("enabled_timer") then

StartMinutes = tonumber(level.get_time_minutes())

db.actor:give_info_portion("enabled_timer")

news_manager.RealLog("Start time "..tostring(StartMinutes))

end

 

Как видим, сначала мы спавним чувака. Потом запоминаем его в таблицу ObjectsFramedThroughTitles под индекс 1. При попытке получить ID объекты происходит вылет, что метод не найден!!!! Чё делать? Чё за косяк?

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


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

Ура!!!! Всё сделал: непись появляется и дохнет через три минуты:

 

function main_menu:OnButton_credits_clicked()
    local ObjSpawn
    local long = 1
    local section = "sim_default_duty_"..math.random(0,4)
    local prob = 101
    if math.random (1,100) < prob then
        local ArLong = {
            [0] = 2.5,
            [1] = 3.5,
            [2] = 4.5,
            [3] = 9
        }
        local obj = db.actor
        local dir = vector()
        local pos = vector()
        pos = obj:position()
        dir = obj:direction()
        pos.x = pos.x - dir.x * ArLong[long]
        pos.z = pos.z - dir.z * ArLong[long]
        ObjSpawn = alife():create(section,pos,db.actor:level_vertex_id(),db.actor:game_vertex_id())
        if kill_object_id then
            number_obj_kill = number_obj_kill + 1
            kill_object_id[number_obj_kill] = ObjSpawn.id
        else
            kill_object_id = {}
            number_obj_kill = 1
            kill_object_id[number_obj_kill] = ObjSpawn.id
        end
        db.actor:give_info_portion ("enabled_timer")
        StartMinutes = tonumber(level.get_time_minutes())
    end
end

function timer1()
--проверка неписей    
if has_alife_info ("enabled_timer") then
    if StartMinutes == tonumber(level.get_time_minutes()) - 3 then
        RealLog("Disabled info")
        db.actor:disable_info_portion ("enabled_timer")
        local i
        local obj
        RealLog (number_obj_kill)
        for i = 1, number_obj_kill do
            obj = level.object_by_id(kill_object_id[i])
            RealLog(kill_object_id[i])
            RealLog(obj:id())
            RealLog(obj:character_community())
            obj:kill(obj)
            number_obj_kill = 0
        end
        kill_object_id = nil
    end
end
end

 

 

Но вот вопросы:

1. Насчёт метода kill(). В параметрах метода указывается игровой объект. Зачем, если метод применяется к объекту? Что за объект указывается в скобках? Мб, убийца?

2. При вызове метода kill() непись убивается: её здоровье снижается до нуля. Как скриптом нанести неписю урон в голову (ногу, руку, пах...)?

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


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

И как написать? Мб, так:

local a = vector ()

a = db.actor:direction()

a.x = -a.x

a.z = -a.z

obj:hit(a,nil[что такое draftsman?],400,0.5,2[это, как я понимаю, константа типа урона пулей. Правильно?]):bone("bip01_head")

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


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

А вот в скриптах постоянно встречается self? Что это за self?

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


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

Kirag, не знаю точно, но это помочь может.

 

1) А может вот так:

gulag_members[gulag] = {}
table.insert(gulag_members[gulag],v:id())

И проверьте gulag, вдруг nil. (в скрипте сверху gulag - это типа "гулаг", а ниже - уже типа "number".

 

2) Наверно, просто элемент таблицы нужно объявить как таблицу, т.е.:

local table = {}

local i

for i = 1, 5 do

table = {}

end.

 

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

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

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


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

Kirag, вы попробовали элемент таблицы объявить как таблицу? см. мой пост выше.

local table = {}

table[1] = {}

table.indert (table[1],db.actor:id())

  • Полезно 1

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


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

Storyteller, инфопоршень можно получить всего тремя путями:

1. Через диалог. <give_info_portion></give_info_portion>

2. Через логику. +

3. Через скрипты. db.actor:give_info_portion()

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


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

Storyteller, это способ через скрипты. думаю, вам ответ либо товарищ Gonarh, либо мастер malandrinus. Мне кажется, что надо делать так: сделать у пушки собственный sid. В actor_binder:on_item_take(obj), что находится в bind_stalker написать:

local sid = [заготовленный sid]
if obj:story_id() == sid then
db.actor:give_info_portion("info_take_item_art_1")
end

malandrinus, так?

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

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


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

Какой параметр в net_packet'е (сталкер) отвечает за:

1. Здоровье.

2. Модель (визуал).

3. Чемодан (инвентарь)

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


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

Два вопроса по скриптам:

1. Как поймать непися, который попал по ГГ?

2. Как поймать непися, по которому попал ГГ?

3. Как узнать хит, который получил ГГ в результате попадания по нему непися?

4. Как узнать хит, который был нанесён неписю ГГ?

5. При стрельбе из РПГ вылетает ракета? Это game_object? Если да, то как поймать? Если нет, то как получить место взрыва этой ракеты?

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


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

wolkolak, game_object:condition([значение сюда]) [=или сюда, точно не знаю]

 

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

malandrinus, сделал так, как вы сказали в спойлере "Тестирование скриптов без обрушения и перезапуска игры". В консоли сообщение, что "test.lua" типа не найден. (мб, в ЧН исходной директорией является не bin? но как-то маловероятным это кажется)

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

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


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

malandrinus, как я понимаю, в аргументах функции может быть функция. но как это реализовать? ведь если напишем:

file1.function1(10,15,nil,...,file1.function2)

 

то в аргументы передастся не сама функция, а её результат, т.е. то, что вернёт функция file1.function2. Или я ошибаюсь?

 

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

Storyteller, по-моему, однозначно стоит заглянуть на вики. Там всё есть по квестам.

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


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

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