n6260

Народная 2010 разработка

873 сообщения в этой теме

"Что у нее внутри, и как это сделать лучше". Для тех, кто уже разбирается в скриптах, конфигах, текстурах и "других страшных словах" ©, и имеет желание и время действительно делать их лучше.
См. подробности в первом посте.

Тема НЕ является ни столом заказов, ни службой техподдержки, ни справочным бюро.

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

  • http://www.amk-team.ru/forum/uploads//ratings/thumb_up.png × 2
  • http://www.amk-team.ru/forum/uploads//ratings/wrench_orange.png × 1

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


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

_And_,

 

Андрей, не беспокойся. У меня тоже есть скрипты. Но я обещал - ни одна запятая или идея не попадёт в солянку. Беспокоится об этом не надо.

Сообщение от модератора меченый(стрелок)
Привет, эти можно ;)
Изменено пользователем меченый(стрелок)

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


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

Arhara, что-то я, видимо, пропустил... О чём была речь ? :crazy:

Сообщение от модератора меченый(стрелок)
и ты ,мой друг, можешь не беспокоится ;)

То, что выложено выше , было решено давно выложить, но никак не получалось , а вот сейчас получилось... А Дима, немного не в курсе ;)

Изменено пользователем меченый(стрелок)

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


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

Monnoroch, я другое вчера пробовал. Теперь отхожу :)

 

Есть вопрос к скриптерам. Написал такую ф-цию.

function get_obj_name(obj)
    local s_name = ""
    local i = 0
    if (news_main.isGameObject(obj) and obj.section) then
        -- s_name = obj:section()
        i = string.find (obj:name(), tostring(obj:id())) --,1,true
        if i then
            -- get_console():execute("load ~#I#: начало id с символа "..i)
            s_name = string.sub(obj:name(),1,i-1)
        else
            s_name = string.sub(obj:name(),1,-1)
        end
    elseif (obj.section_name) then
        s_name = obj:name() --obj:section_name()
    end
    if (s_name == nil) then s_name = "" end    
    return s_name
end

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

 

И еще один вопрос. Есть ли способ скриптом проверить, есть ли объект в аллспавн и узнать номер его секции?

 

Monnoroch, я попробую поставить создание таблицы. Но как потом проверить, что работает? Переписать просто тупо нетпакет всем неписям, чтобы убедиться, что нормально сработало? Потому как начать НГ, дождаться что кто-то зависнет и потом проверить - это нереально :) Ну а в сейве с зависом - таблица нетпакетов пока пуста. И еще нюанс: нужно не нарваться на кривые или пустые данные при записи этой таблицы.

Сообщение от модератора меченый(стрелок)
Shadowman, да вроде нет, не велосипед ;)...
Изменено пользователем меченый(стрелок)

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


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

Шадоу,не лукавь,я гдето видел у тебя же такую же функцию О_о

==

Про тестирование: а ты сам зависни непися.Понапиши ему в пстор хрени всякой или обнули.вызови завис короче.

===

ха,я думал ты написал а потом забыл и снова написал))

===

ты все-таки попробуй нетпакетно восстанавливать НПС.А ну как получится?

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

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


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

Monnoroch, ну да, у меня эта ф-ция и есть. В скрипте со всеми таблицами уборщика

Просто уборщик получает имя всегда как серверного обжа, а когда понадобился игровой - оказалось, что obj:section() - это stalker, stalker_sakharov - у всех сталкеров поголовно. Не та секция короче. Вот, переписал. Решил уточнить - может, есть более простой путь. В чем лукавство-то усмотрел? :blink:

Ф-ция эта в таком виде, как я здесь показал - пока в единственном экземпляре, только на моем компе ;)

 

меченый(стрелок), то есть я так понял, что одобряешь? :D

По аллспавну - очень бы хотелось положительного ответа. Но, видимо, не судьба :(

 

Monnoroch, кстати, по нетпакету: ты сам понял, какую грандиозную вещь ты придумал? Это же фактически можно сейвы редактировать!

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

 

В личку кинуть, или запостить? ;)

Запостил.

А по файлам - вот Shoker такое написал.

-- Запись в таблицу 
function god_dialog:OnButton_btn2_clicked()
      pos_x = tostring(self.edit_box:GetText())
      pos_y = tostring(self.edit_box2:GetText())
      pos_z = tostring(self.edit_box3:GetText())
      pos_name = tostring(self.edit_box4:GetText())

if pos_x~="" and pos_y~="" and pos_z~="" and pos_name~="" then
    self.settingFileName = "gamedata\\teleports_coordinats.txt"
    local file = io.open( self.settingFileName, "a" )
    if file ~= nil then
        file:write( pos_name.."|"..pos_x.."|"..pos_y .."|"..pos_z.."\n")
        file:close()
    end
      self:ModeChanges()
end

end

Правда, это для ЗП. Работает ли в ТЧ - не проверял. Файл должен быть предварительно создан.

 

 

ха,я думал ты написал а потом забыл и снова написал))

Такая история у Дэна, по-моему наблюдается: у него в браад две функции ограбления ГГ одинакового назначения.

К тому же, список исключений, чего отбирать нельзя - был разный у каждой из ф-ций :)

 

меченый(стрелок), да, спасибо. Насчет распакованной геймдаты и пользовать как ини - это понятно :)

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

Есть класс FS, но, похоже, записать файл нельзя, можно только прочитать...

Мон, спасибо, что поправил :) К сожалению, это не решает проблемы - файл в ТЧ не запишешь. Очень жаль. Можно только в лог записать.

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

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


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

Фиг ты ее сохранишь....нету таких функций в сталкере....

Но вообще да.Это конечно вещь жесткая.

 

НО у меня-то только онлайновые НПС.

Кстати,я тут забыл надо еще на нет_дестрой коллбэк на чистку ставить...

==

Кинь плз мне то,что я написал тебе - я винду переставил и... :(

==

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

Я кстати заодно и допишу. :)

 

 

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

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


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

Shadowman, Это работать не будет..в ТЧ пространства имен io,os,etc... нету :(

По алл.спавну , можно , если алл.спавн будет распакован :), и то ,мягко говоря, сотворить это будет трудно и ,скажем так, нерационально .. :)

просто работать с файлами алл.спавн как с ини файлами , кстати я кинул скрипт который облегчает работу с ини файлами до не хочу :)

или я неправильно понял? :)

то есть я так понял, что одобряешь?

Ага :)

Изменено пользователем меченый(стрелок)

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


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

Shadowman, а вот FS - это класс а не пространство имен :)

 

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

Шадоу,ты гений!А чем тебе лог не файл?Мы ж ради интереса пишем - пусть будет в лог :)

 

=========

глянешь как работает - отпишись :)

мне самому интересно,сожрет оно такой обьем или нет...

=====

Shadowman, Ты ж тестировал мой трейд.Лог там до пары мегабайт набирался :)

====

Кстати будешь выводить - имей ввиду,нетпакет - это какбы табличка.Все имена внутренние в АМК скрипте посмотри.Там туча целая...

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

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


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

меченый(стрелок), это тот, что для телепортов в спавнер? А все, понял amkII_ini. Классная штука!

Сообщение от модератора меченый(стрелок)
Точно , о нём! рад что он будет полезен! я , кстати, за то , чтобы каждый скрипт ,или почти, использовал свой фаил настройки(это позволяет пользователям настраивать скрипт под себя без знания Lua). Так сказать лояльное отношение к Юзерам ;)

 

Monnoroch, вечером попробую. Лог вполне может и навернуться от таких объемов. Хотя - попробую, конечно.

Да, я в курсе, что там у каждого непися по таблице. Это надо будет слегка поизвращаться, чтобы увидет ее в логе. Но должно получиться.

А лог, когда из апдейта шел - валил игру минут за 5-7 :)

 

Monnoroch, а зачем очищать табличку? А если при загрузке игры у непися уже мусор в пстор (тоже, кстати, надо как-то проверять предварительно и не писать, если уже биндер зависший)? Если в сейве ее не будет (т.е. она будет пустой) - то тогда и смысла нет ее создавать.

Кстати, ловлю вылет на несуществующий packet_table именно поэтому, наверное. (attempt to index global packet_table (a nil value)), хотя в мотиваторе объявил ее глобальной и вроде как запись туда в мотиваторе сработала. По-видимому, amk.write_stalker_params надо все-таки ставить внутрь условия if packet_table[npc_id] then

Изменено пользователем меченый(стрелок)

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


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

Shadowman, а теперь посчитай 5-7 минут * десяток раз в секунду.если не больше....это ж апдейт ГГ...

 

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

Shadowman, Как вылет?У меня же написано packet_table = {}

Зачем ты ее в мотиватор то сунул,оставь у меня в скрипте.

 

Да и условие непонятно зачем.Ведь при нет_спавне ж оно туда все пишется полюбому.

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

Попробуй с новой игры непися насильно обрушить - все должно сработать.

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

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


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

меченый(стрелок), а каким образом будут выглядеть эти апгрейды? Видел как-то в одном моде как апгрейды реализовали через дополнительные конфиги (отдельные файлы) для апгрейженных (прости господи) стволов. У тебя так же или нет?

Сообщение от модератора меченый(стрелок)
Не знаю где было реализовано подобное, вспоминается только мод Zen'a ,но там не ВИЗУАЛЬНО реализован апгрейд... А по Сути, в моём скрипте, происходит замена секций оружия\костюма\итема с замещаемыми параметрами ... по сути из редми должно быть понятно... Да ,это можно назвать заменой "конфигов", но в этом самом конфиге не нужно писать все параметры ствола ,а только нужные.. к примеру увеличенную пулестойкость у броника и т.д...тут всё зависить от рациональности мышления разработчика...

З.Ы. ИМХО, не стоит спешить с добавлением всего и вся в Соль, а то потом набирается проблем. Отдельные паки типа стволов, флэшек и т.д. - вот выход, а потом уже протестированное можно ставить, если надо. Сначала все кричали давайте ремонт, потом все начали плеваться...

Изменено пользователем меченый(стрелок)

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


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

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

К чему изобретать велосипед... :ny_wink:

Сообщение от модератора меченый(стрелок)
+1

Хотя, чтобы сделать по другому нужно править XrGame.dll, что без знания ассемблера представляется невозможным :(

Ray, ну так многие этим и пользуются. Вроде в ОГСЕ поступили аналогично.

Изменено пользователем меченый(стрелок)

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


Ссылка на сообщение
Поделиться на других сайтах
solvador, согласен впосне нормальное использование принципа наследования классов. Производный класс получает все, что есть в базовом и может перекрыть некоторые поля (начальная скорость пули, вес и т.д.). Эта идея у меня зрела давно (сразу после изучения файла уникуе_итемс). Изменено пользователем Ray

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


Ссылка на сообщение
Поделиться на других сайтах
чтобы каждый скрипт ,или почти, использовал свой фаил настройки(это позволяет пользователям настраивать скрипт под себя без знания Lua)

Вообще-то хорошо бы. Только тормознутая это штука - чтение конфигов. Надо тогда внимательно смотреть, чтобы "с водой не выплестнуть и ребенка" ;)

В смысле, в каких-то скриптах чтение конфигов может сильно сажать быстродействие.

 

Arhara, не не в сидах дело. Все равно, раз начали - нужно довести до логического конца.

А СИДы - не помогут, что так - что эдак. Восстановление нужно делать с названием секции из аллспавн (цифровым). А СИД - можно либо взять из того же аллспавн, либо прочитать у зависшего непися перед переспавном. Димос подмогнет чуток с табличкой названий секций, я напишу что-нибудь для вытаскивания цифири из аллспавн (как Меченый предложил) - и будет этот вариант.

Если не получится фокус с нетпакетом - все равно будет этот запасной вариант :)

И что-то мне подсказывает, что фокус с нетпакетом должен получиться...

 

Monnoroch, я тут кстати подумал: а зачем, собственно, искусственно портить кому-то пстор после НГ. Я могу просто-напросто катануть зависшему неписю пстор аналогичного (я про свой конкретный пример - это охотник бар_охотник_респавн1), можно просто закатать ему нетпакет какого-нибудь рядом имеющегося, типа бар_охотник_респавн2. И, кстати, попортить пстор (именно мусором заполнить) - не так и просто. Нужно убирать зэкер из функции его записи. Так что непонятно, как тот мусор у него вообще мог появиться.

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

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


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

Shadowman,

 

не заморачивайся. Если дело действительно стоящие - я проставлю всем СИДы

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


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

Arhara, нужно закомментировать в gamedata/config/ui/ui_custom_msgs.xml строку 184:

<texture>ui_hud_frame_clock_vergas</texture>

Она осталась в полуфинале.

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


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

Shadowman, а,ну даже так можно.но это не 100% проверка работы системы :)

 

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


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

Monnoroch, а чем лучше записать скриптом в пстор что-то левое? В записи из хр_лождик стоит заглушка, там левого ничего писаться не должно.

И если я эту заглушку не сниму - то и сам ничего левого не запишу :)

По-любому, тест частично будет исскусственным. Важно, чтобы перезапись "здорового" нетпакета давала результат. А тогда уже - как повезёт. имхо, без записи этой таблицы в сейв - толку будет маловато (с очисткой на нет_дестрой). Или нужно-таки ловить, где криво пишется, или вести постоянный мониторинг. Можно сеять по квестовикам, вообще-то (таблица есть уже :) )

 

меченый(стрелок), по поводу амк2_ини и того, что мне нужно сделать:

очень надеялся, что можно, зная параметр (например, name) из аллспавн (или любого другого конфига) получить имя секции. Но, по-видимому, можно только наоборот. Собственно, это к любому конфигу применимо.

Т.е. заполучить список всех секций, или с какими-либо условиями по параметрам - не судьба :(

Ну, можно, наверное, читать файл построчно и потом отсеивать, но это уже - вообще изврат.

Вобщем, придумал уже, как это сделать; не без изврата, то приемлемо :)

 

Monnoroch, не знаю. Пока что все это дело работает при загрузке сейва. Вся кухня вылетает уже после записи нетпакета в ф-ции gulag:removeObject( obj_id ) в строке if not self.npc_info[obj_id].exclusive then с ругательством на нил в поле '?'

Перезаписал нетпакетом аналогичного охотника. Этого точно делать нельзя. Хочешь, нетпакет непися покажу? ;)

! Cannot find saved game ~#i#: pstor_load_all:bar_ohotnik_respawn_1 id: 14026 ctr=4

! Cannot find saved game ~~~ updu8u2 => 0

! Cannot find saved game ~~~ updgroup => 0

! Cannot find saved game ~~~ class => sim_arhara_green_regular

! Cannot find saved game ~~~ updmodel => 1.9438806772232

! Cannot find saved game ~~~ upddir =>

! Cannot find saved game ~~~ y => -0

! Cannot find saved game ~~~ x => 1.9438806772232

! Cannot find saved game ~~~ z => 0

! Cannot find saved game ~~~ obs32u3 => -1

! Cannot find saved game ~~~ team => 20

! Cannot find saved game ~~~ killerid => 65535

! Cannot find saved game ~~~ charname => Герман Омут

! Cannot find saved game ~~~ money => 5000

! Cannot find saved game ~~~ crvu32u16u1 =>

! Cannot find saved game ~~~ updu16u1 => 1229

! Cannot find saved game ~~~ profile => stalker_green_bar1

! Cannot find saved game ~~~ smtrtaskactive => 0

! Cannot find saved game ~~~ lvid => 36450

! Cannot find saved game ~~~ infammo => 1

! Cannot find saved game ~~~ gvid => 1229

! Cannot find saved game ~~~ oflags => -65

! Cannot find saved game ~~~ group => 0

! Cannot find saved game ~~~ vsu8u1 => 0

! Cannot find saved game ~~~ obf32u1 => 10.5

! Cannot find saved game ~~~ updhealth => 1

! Cannot find saved game ~~~ upds32u4 => 1091317111

! Cannot find saved game ~~~ updteam => 20

! Cannot find saved game ~~~ huvu32u8u1 =>

! Cannot find saved game ~~~ 1 => 2

! Cannot find saved game ~~~ 2 => 1

! Cannot find saved game ~~~ 3 => 0

! Cannot find saved game ~~~ 4 => 1

! Cannot find saved game ~~~ 5 => 2

! Cannot find saved game ~~~ squad => 0

! Cannot find saved game ~~~ upds32u3 => 1091317111

! Cannot find saved game ~~~ game_death_time =>

! Cannot find saved game ~~~ 1 => 0

! Cannot find saved game ~~~ 2 => 0

! Cannot find saved game ~~~ 3 => 0

! Cannot find saved game ~~~ 4 => 0

! Cannot find saved game ~~~ 5 => 0

! Cannot find saved game ~~~ 6 => 0

! Cannot find saved game ~~~ 7 => 0

! Cannot find saved game ~~~ 8 => 0

! Cannot find saved game ~~~ smtrid => 10887

! Cannot find saved game ~~~ visual => actors\hunters\hunter1

! Cannot find saved game ~~~ baseinr =>

! Cannot find saved game ~~~ communityid => 16

! Cannot find saved game ~~~ updsquad => 0

! Cannot find saved game ~~~ reputation => 100

! Cannot find saved game ~~~ huvu32u8u2 =>

! Cannot find saved game ~~~ 1 => 1

! Cannot find saved game ~~~ 2 => 1

! Cannot find saved game ~~~ 3 => 2

! Cannot find saved game ~~~ 4 => 1

! Cannot find saved game ~~~ updpos =>

! Cannot find saved game ~~~ y => -0.00096631050109863

! Cannot find saved game ~~~ x => 132.68312072754

! Cannot find saved game ~~~ z => 70.187408447266

! Cannot find saved game ~~~ obs32u2 => 1

! Cannot find saved game ~~~ upds32u1 => 84648

! Cannot find saved game ~~~ baseoutr =>

! Cannot find saved game ~~~ custom => ; stalker_custom_data.ltx

[game_info]

 

! Cannot find saved game ~~~ updu16u2 => 1229

! Cannot find saved game ~~~ crvu32u16u2 =>

! Cannot find saved game ~~~ health => 1

! Cannot find saved game ~~~ sid => -1

! Cannot find saved game ~~~ rank => 622

! Cannot find saved game ~#i#:непись: bar_ohotnik_respawn_114026 записан в packet_table

 

 

 

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

Кстати, массив имен секций получить можно. Не совсем автоматически, к сожалению... сортировкой строк с последующим сохранением в табличку результата сортировки :D ..А потом перебрать уже эту табличку

Что-то начало с нетпакетом получаться... Только теперь эту всю байду нужно будет запускать как-то по-другому, потому что в сейв несколько мегов нетпакетов - никак не вогнать. А значит, "отлов" зависов придется возвращать.

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

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


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

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


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

Shadowman,Monnoroch, здравствуйте ;).

Смотри - каждый объект имеет номер(название секции)...

наша задача прочитать все конфиги алл.спавна в табличку которая будет содержать информацию об объекты и является подтаблицей главной таблицы которая хранит подтаблицы :D.

для это нам нужен список файлов который мы будем читать, для это табличку пишем сами :)

потом - цикл в цикле, один цикл по табличке с именами файлов , (внутри)другой от 1 до 65355(ну или как вам захочется)....

в амк2_ини во всех функциях проверяется на существование секций и ключей , поэтому вылета не будет....

ну а дальше после всего ищи по табличке всё что тебе нужно...только не забудь :) , в алл.спавне не только нпс(но они имеют уникальные параметры ,так что думаю проблемы сделать проверку на проверку ключа у секции нет ;)).. Как-то так

очень надеялся, что можно, зная параметр (например, name) из аллспавн (или любого другого конфига) получить имя секции

можно , только если у тебя есть массив имён секций, иначе ,увы, никак

----

Рад помочь ;)

Изменено пользователем меченый(стрелок)

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


Ссылка на сообщение
Поделиться на других сайтах
Гость
Эта тема закрыта для публикации сообщений.

  • Пользователи, читающие эту тему   0 пользователей

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