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

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

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

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

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

Изменено пользователем Dennis_Chikin
  • Нравится 2
  • Полезно 1
Ссылка на комментарий

_And_,

 

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

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

Еще 10 лет таких цен, зарплат и пенсий, и вместо переписи населения будет перекличка

Ссылка на комментарий
ни одна запятая или идея не попадёт в солянку

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

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

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

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

Железо: Intel Core i5 9400F / 16Gb DDR4 2400MHz / SSD NVMe M.2 Samsung 970 EVO Plus 256Gb / GF GTX 1050Ti 4Gb Ось: Win10x64


Подарки

  • Ссылка на комментарий

    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, да вроде нет, не велосипед ;)...
    Изменено пользователем меченый(стрелок)

    Железо: Intel Core i5 9400F / 16Gb DDR4 2400MHz / SSD NVMe M.2 Samsung 970 EVO Plus 256Gb / GF GTX 1050Ti 4Gb Ось: Win10x64


    Подарки

  • Ссылка на комментарий

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

    ==

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

    ===

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

    ===

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

    Изменено пользователем 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

    Железо: Intel Core i5 9400F / 16Gb DDR4 2400MHz / SSD NVMe M.2 Samsung 970 EVO Plus 256Gb / GF GTX 1050Ti 4Gb Ось: Win10x64


    Подарки

  • Ссылка на комментарий

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

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

     

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

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

    ==

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

    ==

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

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

     

     

    Изменено пользователем 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

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

    Железо: Intel Core i5 9400F / 16Gb DDR4 2400MHz / SSD NVMe M.2 Samsung 970 EVO Plus 256Gb / GF GTX 1050Ti 4Gb Ось: Win10x64


    Подарки

  • Ссылка на комментарий

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

     

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

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

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

     

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

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

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

    Изменено пользователем Monnoroch
    Ссылка на комментарий

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

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

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

    Изменено пользователем меченый(стрелок)
    Цензура ограничивает творчество © by me
    Ссылка на комментарий
    через дополнительные конфиги
    Не вижу ничего плохого, в данном способе. Просто и без лишних заморочек. Кстати ПЫС свои уники по тому же принципу организовали.

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

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

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

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

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

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

    Athlon X2 5000 (Phenom FX-5000@3630 МГц, разлочены 2 ядра и 6Мб кеша), ZALMAN CNPS10X Performa, GA-MA770-UD3 rev2, 2x2048 G.Skill, Inno3D GeForce GTX650Ti Boost Herculez 2GB, Chieftec APS-550S.

     

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

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

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

     

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

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

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

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

     

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

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

    Железо: Intel Core i5 9400F / 16Gb DDR4 2400MHz / SSD NVMe M.2 Samsung 970 EVO Plus 256Gb / GF GTX 1050Ti 4Gb Ось: Win10x64


    Подарки

  • Ссылка на комментарий

    Shadowman,

     

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

    Еще 10 лет таких цен, зарплат и пенсий, и вместо переписи населения будет перекличка

    Ссылка на комментарий

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

    <texture>ui_hud_frame_clock_vergas</texture>

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

    Ссылка на комментарий

    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

    Железо: Intel Core i5 9400F / 16Gb DDR4 2400MHz / SSD NVMe M.2 Samsung 970 EVO Plus 256Gb / GF GTX 1050Ti 4Gb Ось: Win10x64


    Подарки

  • Ссылка на комментарий

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

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

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

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

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

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

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

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

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

    ----

    Рад помочь ;)

    Изменено пользователем меченый(стрелок)
    Ссылка на комментарий
    Гость
    Эта тема закрыта для публикации сообщений.
    • Недавно просматривали   0 пользователей

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

    AMK-Team.ru

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