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

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


Svoboда

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

Нет, такое не получится.

У тебя есть только два варианта реализации твоей задумки

1. Написать на ассемблере функцию позволяющую скачивать интернет страницы. На практике это практически невозможно

2. Написать dll, которая при помощи перехватчика от alpet/отредактированных длл будет выходить в интернет и скачивать страницу.

 

Оба варианта сложны и мало кто это может сделать

Freedom

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


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

С одной стороны - да, ошибка, т.к. судя по аргументам, action_remark_activity должен принимать имя НПС. С другой стороны - имя НПС ни где не юзается, поэтому первый аргумент может быть любым;

Freedom

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


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

Тебе же написано:

! Cannot find saved game ~abort:there is no patrol path esc_blokpost_sniper1_smart_escape_blokpost_chasovoy_walk

Признайся, сувал под гулаг непися? Если да то пути должны называться так: имя_смарта_имя_пути

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

Freedom

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


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

Озадачился я сегодня такой проблемой. Есть текст произвольной длинны. Нужно узнать сколько строк он займет при выводе на статик. У статика задан параметр компекс_мод=1

У меня было несколько идей:

1. Посчитать какой размер текста и сколько в нем символов \n. Но проблема в том что из-за переменоса слов на другую строку этот метод дает погрешность в несколько строк при большом объеме текста.

2. Фактически переписать метод SetText. Идея такая - резать строку по словам и смотреть помещается ли это слово на эту строку. заодно посчитать символы \n. Но при больших текстах такая система будет работать очень долго, а там как у меня и так много чего в этот момент обрабатывается это не есть хорошо.

 

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

Freedom

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


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

ColR_iT

id в двигателе обозначается чилом типа unsigned short int (2 байта), которое ну никак не может быть равно -1. id у актора = 0

Freedom

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


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

Стоит такая задача - нужно из файла (с расширением .xml) считать все. Собственно у Kirag'a был такой вариант в его парсере .xml файлов:

local str = r:r_stringZ()
if r:r_tell() > size then
    str = string.sub(str,1,size)
end

Все логично, но если файл упакован в архив, то я получаю вылет без лога, т.к. в архивах у файлов нет \0 символа, обозначающего конец файла. Тогда я попытался сделать так:

local str = ""
for i=1,size do
    str=str..string.char(r:r_u8())
end

где size - размер файла в байтах

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

Изменено пользователем _Призрак_

Freedom

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


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

Есть более элегантное решение. Установите себе X-Ray extensions, там есть метод (в каком то из последних ревизий добавили), который возвращает вес инвентаря

Freedom

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


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

Видимо проблема в том что почему то Sender - не сталкер. Поэтому я бы тебе посоветовал вставить эту строку перед получением character_name:

get_console():execute("news:name="..Sender:name())

И я готов поспорить что имя будет принадлежать не сталкеру ;)

Freedom

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


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

olaf1

Sorry for English:)

Firstly, you have logical error in your timer. You have used level.get_time_hours() and time_global() which return not the same type of time. If you open the Referenceща Function and classes (you can find it on our forum) you will see, that level.get_time_hours() returns time in hours,which show which hour now in game, but time_global() returns time in milliseconds,which show how many milliseconds have passed since starting the program. So, you must change underlying code:

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

on this code:

if timer == nil then
    timer = level.get_time_hours() + math.random(3, 6)
    if timer > 23 then timer = timer - 24 end
end
if level.get_time_hours() = timer then

 

Secondly, what this code must do? It so.... I can't translate what I think, but it's realy strange code:

for npc,spwan in pairs(respwan_npc)do
    if spwan == true then
        respwan_table[alife():create("mar_clear_sky_respawn_1", pos, lvi, gvi).id] = true
        table.insert(respwan_npc,2,false)
    end
end

Please, explain:)

 

And the last for now, May be I now why you have crash witout log. In for construction you use 'spwan' which already name of function. Change

for npc,spwan in pairs(respwan_npc)do
    if spwan == true then

on

for npc,myspwan in pairs(respwan_npc)do
    if myspwan == true then

and try again. Replay after check

Изменено пользователем _Призрак_

Freedom

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


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

Здравствуйте. Хотел бы прояснить вот какой момент - можно ли в лист вставлять объект не в конец, а в середину. Поясняю:

Есть объект типа CUIListBox (тот же CUIListWnd только в ЗП) и нужно в его середину вставить строку с текстом. На Qt есть отличная функция insert, которой можно указать куда вставлять обьект. Однако в сталкере я такого не нашел. Может я слепой? Больно уж не хочится очищать и заного добавлять все обьекты для того чтобы вставить пару строк текста в лист.

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

Freedom

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


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

А вы уверенны, что вертолет будет в онлайне и его можно будет отловить при помощи таблички db.* или функций level.* ?

Freedom

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


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

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

Freedom

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


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

Artos

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

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

 

Таблицы db.storage (и иже) хотя и зависят от онлайновых появлений в игре об'ектов, но как раз никак не отражают - в онлайне или в офлайне об'ект.

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

 

Как, в прочем, и не оговорено вообще что за вертушки и при каких условиях собрался удалять panzyuza.

Если включить логику и понять что локации сталкера в большенстве своем гораздо больше 150 метров по длине, поэтому тут нужно всегда помнить о том что обьект может быть в оффлайне. И тогда при попытке получить обьект при помощи функций пространства level ничего не даст.

 

*Shoker*

Спасибо не знал. Точнее не замечал этого момента

Freedom

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


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

Как вариант:

local id = obj:id()

if alife():object(id) then --Существует серверный обьект

end

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

 

Перепрочти вопрос и процитированное в нем, обратив внимание на: "При попытке вызвать любой метод этого объекта будет вылет. ", и в последующем не спеши с ответами из серии "В огороде бузина, а в киеве дядька". --/Artos

[x]

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

Freedom

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


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

Buusty

А не проще разобраться почему непись зависает и удаляется этим скриптом? Потому как костыль сделать можно, но ты уверен что этот костыль не приведет к вылетам

Freedom

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


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

Получить значение поля bio не представляется возможным через функции. Можно конечно написать движковую функцию для того чтобы получать биографию, но врядли ты это осилишь. Поэтому придется парсить весь файл. Есть отличный парсер xml от Kirag, который отлично распарсивает весь файл в табличку, откуда я вынимал значения поля bio. Поищи на этом форуме

Freedom

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


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

Проконсультируйте по такому вопросу:

У меня в моде получается очень много рестрикторов, который срабатывают один раз, а потом лежат мертвых грузом. Хотел бы узнать, как правильно удалить спейс_рестриктор чтобы не получить после удаления осложнений. Спейсы не прописаны в in/out рестрикторах у НПС. Подойдет ли здесь простое получение серверного объекта и его удаление через alife():release()?

Freedom

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


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

Z3oM

О_о

 

На C++ в рантайм можно подключать нескомпилированный код?

 

local sactor = alife():actor()
local cactor = level.object_by_id(sactor.id)
cactor:give_game_news(
"Тест Сообщение\\nЯ вывожу его!!!1",
"",
Frect():set(0,0,0,0),
1000,
8000
)

Такого крутого получения актора я давно не видел. Наверное никогда:) На будущее - используй вместо:

local sactor = alife():actor()
local cactor = level.object_by_id(sactor.id)

просто:

local actor = db.actor

 

Кстати почитать построчно (если у тебя ЗП) проще так:

for line in io.lines("путь_до_файла") do
   ... do something with line
end

 

 

NaslednikTutti

А нельзя просто узнать где выдается инфо и вместе с выдачей инфо выводить сообщение?

Freedom

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


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

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