SGV 3 Опубликовано 3 Октября 2012 Поделиться Опубликовано 3 Октября 2012 Никто не задумывался, как-бы сделать перемещение всех предметов одного типа из рюкзака в контейнер или торговцу за раз? Ведь правая кнопка мыши при продаже предметов не задействована, можно например на неё повесиить функцию продать(переместить) всё одним кликом или при нажатии высвечивается меню "продать всё". Я не понимаю, чем разработчики думали? Неужели так трудно было добавить эту функцию? Приходится, после очередного рейда по несколько тысяч раз кликать мышкой, чтобы продать всё, что нужно. Одну кнопку я уже из-за этого убил. Ладно хоть был запас старых мышек доноров. 1 Ссылка на комментарий
dPlayer 500 Опубликовано 3 Октября 2012 Поделиться Опубликовано 3 Октября 2012 (изменено) Разработчики никак не думали, что их идею сирурвариума, где приходится дорожить лутом и просчитывать носимый вес испоганят солянками до степени "продать пару сотнет артов, полтинник автоматов и 3 килопатрона, принеся это в экзоскелете бандита к торговцу" который этот товар себе разве что в карман засунуть может. Изменено 3 Октября 2012 пользователем Igor88.89 2 Ссылка на комментарий
SGV 3 Опубликовано 3 Октября 2012 Поделиться Опубликовано 3 Октября 2012 (изменено) Igor88.89, я понимаю твою иронию и полностью с тобой согласен Но все-таки, было бы не плохо, чтобы это кто-нибудь реализовал Эту функцию явно с помощью скриптов не сделать, надо в движке копаться, а с ассемблером я не дружу. Изменено 3 Октября 2012 пользователем SGV Ссылка на комментарий
Malandrinus 615 Опубликовано 4 Октября 2012 Поделиться Опубликовано 4 Октября 2012 Igor88.89, испоганят солянками до степени "продать пару сотнет артов, полтинник автоматов и 3 килопатрона, Справедливости ради замечу, что описание вполне соответствует балансу чистой игры. Так что вряд ли можно объяснить отсутствие искомых фич неким глубоким замыслом. Скорее, создатели не предполагали, что народ будет играть в игру в стиле фриплея, даже проходя основной сюжет =) SGV, для начала имеет смысл как минимум задействовать перепаковщики пачек патронов, что несколько снижает остроту проблемы. Затем, приложить усилия по выправлению баланса. К сожалению, изменения движка в части окошек/кнопочек по ряду причин крайне муторное дело. Теоретически можно, но лично я бы раньше балансом занялся, нежели такой фичей. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Ирбис 183 Опубликовано 4 Октября 2012 Поделиться Опубликовано 4 Октября 2012 (изменено) А ограничение инвентаря по ячейкам движковым способом никак не реализуемо? Скажем к примеру - заключением вылета при заполнении инвентаря, имеющего в конфиге статус (ограничено) в безопасный код, препятствующий вылету? Изменено 4 Октября 2012 пользователем Ирбис Замедляю полураспад души стержнями музыки Ссылка на комментарий
SGV 3 Опубликовано 10 Октября 2012 Поделиться Опубликовано 10 Октября 2012 Так что вряд ли можно объяснить отсутствие искомых фич неким глубоким замыслом. Скорее, создатели не предполагали, что народ будет играть в игру в стиле фриплея, даже проходя основной сюжет =) Во всех рпг есть возможность перемещать все предметы одного типа за раз - тот же обливион, например. А ведь все разрабы живут в своём мирке, оторванном от игроков. Дать широкие возможности для моддинга и не включить такую фичу ни в одной из 3-х частей сталкера, по меньшей мере странно. Принудительное отключение теней от травы в 4-том и последующих патчах, лишний раз доказывает, что им на нас по барабану... Скажите, зачем полностью убирать тени от травы, когда в меню и так кому надо, мог их отключить? Как разрабы хвастали, что им удалось повысить производителность на 25% в 4-ом патче - это за счёт теней что-ли? Я когда патч 4-й поставил обрадовался, что даже на глаз тормозов меньше стало. Потом не много поиграв, смотрю, что-то не то... Графика как-то бедней что-ли стала выглядеть, чем на 3-м патче, как-будто чего-то не хватает. Долго доперал что к чему... Так и играл до сего момента с патчем 1.0003, пока хорошие люди не исправили этот недостаток. Авторам правленного рендера особая благодарность!!! Ссылка на комментарий
_Призрак_ 11 Опубликовано 10 Октября 2012 Поделиться Опубликовано 10 Октября 2012 Вы видимо не знакомы с разработкой игр. Дело в том что в игре то все зацеплено и из-за не правильной архитектуры может получиться что исправив одно, ты получаешь баг в другом. Баг с травой был как раз в этом. Исправив одно разработчики случайно (!) прикончили другое И не надо на них сливать весь негатив И я, как и разработчики не думал о том что нужно сделать ту фишку, о которой ты говорил. Ну не приходила она мне в голову, а в игры я особо не играю Freedom Ссылка на комментарий
SGV 3 Опубликовано 10 Октября 2012 Поделиться Опубликовано 10 Октября 2012 Баг с травой был как раз в этом. Не понял. В чем? Если вы о тормозах, то с 1.0001-1.0003 патчах их небыло. Ссылка на комментарий
SkyLoader 53 Опубликовано 10 Октября 2012 Поделиться Опубликовано 10 Октября 2012 (изменено) Скажите, зачем полностью убирать тени от травы, когда в меню и так кому надо, мог их отключить? Никто не убирал. Это баг появился в связи с тем, что разрабы перенесли некоторую работу с детейлами во второй поток. В результате они не учли некоторые моменты после этого переноса: после отрисовки теней травы, тени сразу же удаляются из буфера. "Поторопились с патчем", как сказал Deathdoor Как разрабы хвастали, что им удалось повысить производителность на 25% в 4-ом патче - это за счёт теней что-ли? Как раз из-за переноса во второй поток. Изменено 10 Октября 2012 пользователем SkyLoader Ссылка на комментарий
dPlayer 500 Опубликовано 10 Октября 2012 Поделиться Опубликовано 10 Октября 2012 Это баг появился в связи с тем, что разрабы перенесли некоторую работу с детейлами во второй поток. В результате они не учли некоторые моменты после этого переноса: после отрисовки теней травы, тени сразу же удаляются из буфера Но ведь после этого было 2 патча ТЧ, 10 патчей ЧН и 2 патча ЗП, где это не было поправлено, если это баг. Мб убрали осознанно? Ссылка на комментарий
SkyLoader 53 Опубликовано 11 Октября 2012 Поделиться Опубликовано 11 Октября 2012 Но ведь после этого было 2 патча ТЧ, 10 патчей ЧН и 2 патча ЗП, где это не было поправлено, если это баг. Мб убрали осознанно? Они просто не заметили этого бага. Комьюнити опомнилось, когда уже было все выпущено в свет Ссылка на комментарий
SGV 3 Опубликовано 11 Октября 2012 Поделиться Опубликовано 11 Октября 2012 Они просто не заметили этого бага. Комьюнити опомнилось' date=' когда уже было все выпущено в свет[/quote']Откуда у вас такая информация? У вас есть связи в комьюнити? Ссылка на комментарий
volazar 139 Опубликовано 11 Октября 2012 Поделиться Опубликовано 11 Октября 2012 (изменено) SGV, а у вас есть информация, что это было сделано осознанно? На то могло быть 100500 причин. И в конце концов, какая разница теперь? Давайте еще вспомним самую первую версию сталкера и все, что было вырезано Изменено 11 Октября 2012 пользователем volazar Ссылка на комментарий
ColR_iT 171 Опубликовано 11 Октября 2012 Поделиться Опубликовано 11 Октября 2012 Заканчиваем оффтопить. 1 Ссылка на комментарий
*Shoker* 322 Опубликовано 22 Октября 2012 Поделиться Опубликовано 22 Октября 2012 (изменено) Используя Lua-Перехватчик от alpet-а можно считывать\изменять значение в памяти игры, и назрела такая идея, о реализации которой я бы хотел уточнить. (ЧН) Цель: через запись значений в память заменять путь к модели текущего оружия в руках ГГ, чтобы можно было прямо во время игры изменять модель в руках игрока на другую. Вопрос: насколько реализуема такая задумка (спрашиваю у тех, кто глубоко ковырял движок, вдруг что заметили) И второй вопрос: если первая задумка не реализуема, есть ли способ как то окольными путями изменять модель в руках игрока. Например в расширении движка от malandrinus-а для ТЧ есть возможность скрывать произвольные кости у оружия, можно ли такое реализовать изменением памяти? Интересует реализация именно через изменение значений в памяти, т.к изменение движка не подходит.(хотя теоретически можно дописать dll-ку с нужным кодом и вживлять в процесс игры через перехватчик, правда опыта у меня в этом пока мало) Изменено 22 Октября 2012 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
_Призрак_ 11 Опубликовано 22 Октября 2012 Поделиться Опубликовано 22 Октября 2012 (изменено) Вряд ли. Дело в том, что путь к модели считывается один раз, после чего модель подгружается и отображается. И будешь ты менять путь во время игры или нет - разницы не будет. Можно конечно заменить в памяти загруженную модель, но это уже больше похоже на мазохизм. Тут нужно как минимум вызывать функцию для загрузки модели по предоставленному тобой пути. Но это уже другой разговор, т.к. вызов не сделаешь, просто копаясь в памяти (тут я немного вру, ибо костылями можно сделать все) Изменено 22 Октября 2012 пользователем _Призрак_ Freedom Ссылка на комментарий
Artos 99 Опубликовано 23 Октября 2012 Поделиться Опубликовано 23 Октября 2012 (изменено) *Shoker*, помимо уже сказанного про подгрузку модели, есть еще один немаловажный нюанс: То, что "валяется на земле" иль держит в руках кто-то, т.е. собственно модель оружия и то, что "держит в руках актор при виде от 1-го лица" - не одно и то же. Визуал (т.е. модель) для оружия пишется не в секции самого оружия, а в подсекции его худа. К чему это приводит? К тому, что даже если объекту оружия после его спана заменить путь к иной модели и даже, сохранив это значение в сэйв, перезапустить игру - в руках актор (при виде от 1-го лица!) будет продолжать держать прежнюю модель (визуал) оружия! Т.е. путь к модели, которую держит в руках актор, каждый раз при загрузке игры читается не из объекта оружия, а по прежнему из секции худа, т.е. из исходного конфига данного оружия. Итого, не знаю что ты там задумал фокусничать с оружием в руках, но искать в памяти придется именно путь для худа оружия (как минимум)... , и каждый раз менять его. Подчеркиваю, что визуал оружия именно при виде от 1-го лица берется из текущего конфига и может быть отличен от того, что приписан в самом объекте оружия, т.е. , например был при спавне оружия, и/или был изменен каким-либо способом. Изменено 23 Октября 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
*Shoker* 322 Опубликовано 23 Октября 2012 Поделиться Опубликовано 23 Октября 2012 Задумано в принципе ничего не обычного, просто хочется реализовать визуальное отображение каких либо аддонов в произвольной комбинации на оружии. Сейчас у меня такой механизм основан на подмене секции, но этот метод, само собой, заставляет плодить кучу моделей и главное секций под каждую комбинацию всевозможных аддонов. А эти секции потом надо прописывать в торговлю, mp_ranks... Сейчас думаю как можно переделать этот механизм наименее затратным способом. За ответы спасибо, тогда попробую глянуть функцию по скрыванию костей в расширении движка и вырезать её в отдельную dll-ку. Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Shredder 49 Опубликовано 18 Декабря 2012 Поделиться Опубликовано 18 Декабря 2012 Доброго времени суток. Пока в отпуске решился поковырять движок ЗП. Обидно, на ТЧ целую кучую полезных функций добавили (xray-extension), а ЗП видимо забросили совсем. Прочитал тему, пару дней изучал xray-extension с имеющимеся комментариями. И вроде понял посделовательность действий, но вот отсутствие навыков програмиирования на ассемблере берёт своё. Целю себе поставил добавить колбэки on_slot_callback, on_belt_collback, on_ruck_collback. Начал с on_slot_callback. Сперва нашёл функцию Inventory_Slot, вроде бы она: .text:102A7F33 loc_102A7F33: ; CODE XREF: Inventory_Slot+23Fj .text:102A7F33 mov ecx, ds:?Debug@@3VxrDebug@@A ; xrDebug Debug .text:102A7F39 push offset byte_1064EA55 .text:102A7F3E push offset aCinventorySlot ; "CInventory::Slot" .text:102A7F43 push 163h .text:102A7F48 push offset asc_10552A40 ; "D:\\prog_repository\\sources\\trunk\\xrGame"... .text:102A7F4D push eax .text:102A7F4E push offset aGetownerObject ; "GetOwner()->object_id() == real_parent" .text:102A7F53 call ds:?fail@xrDebug@@QAEXPBD00H0AA_N@Z ; xrDebug::fail(char const *,char const *,char const *,int,char const *,bool &) .text:102A7F59 lea edx, [esp+2Ch+var_8] .text:102A7F5D cmp [esp+2Ch+var_4], edx .text:102A7F61 jz short loc_102A7F98 .text:102A7F63 mov eax, [esp+2Ch+var_18] .text:102A7F67 test eax, eax .text:102A7F69 jz short loc_102A7F98 .text:102A7F6B mov ecx, ds:?Memory@@3VxrMemory@@A ; xrMemory Memory .text:102A7F71 push eax .text:102A7F72 call ds:?mem_free@xrMemory@@QAEXPAX@Z ; xrMemory::mem_free(void *) .text:102A7F78 jmp short loc_102A7F98 .text:102A7F7A ; --------------------------------------------------------------------------- .text:102A7F7A .text:102A7F7A loc_102A7F7A: ; CODE XREF: Inventory_Slot+11Aj .text:102A7F7A cmp ecx, ebp .text:102A7F7C jz short loc_102A7F8A .text:102A7F7E push ecx ; Dst .text:102A7F7F mov ecx, ebx .text:102A7F81 call sub_1007B680 .text:102A7F86 mov eax, [esp+2Ch+item__111] .text:102A7F8A .text:102A7F8A loc_102A7F8A: ; CODE XREF: Inventory_Slot+28Cj .text:102A7F8A cmp eax, [esi+20h] .text:102A7F8D jz short loc_102A7F98 .text:102A7F8F push eax ; Dst .text:102A7F90 lea ecx, [esi+1Ch] .text:102A7F93 call sub_1007B680 .text:102A7F98 .text:102A7F98 loc_102A7F98: ; CODE XREF: Inventory_Slot+133j .text:102A7F98 ; Inventory_Slot+140j ... .text:102A7F98 movzx eax, word ptr [edi+0A0h] .text:102A7F9F mov ebx, [esp+2Ch+arg_0] .text:102A7FA3 lea ebp, [edi+0A0h] .text:102A7FA9 mov cl, al .text:102A7FAB and cl, 0Fh .text:102A7FAE cmp cl, 1 .text:102A7FB1 jnz short loc_102A7FE7 .text:102A7FB3 shr eax, 4 .text:102A7FB6 and eax, 3Fh .text:102A7FB9 cmp ax, bx .text:102A7FBC jz short loc_102A7FE7 .text:102A7FBE cmp [esi+40h], ax .text:102A7FC2 jnz short loc_102A7FCF .text:102A7FC4 push 0 .text:102A7FC6 push 0 .text:102A7FC8 mov ecx, esi .text:102A7FCA call sub_102A8070 .text:102A7FCF .text:102A7FCF loc_102A7FCF: ; CODE XREF: Inventory_Slot+2D2j .text:102A7FCF movzx eax, word ptr [ebp+0] .text:102A7FD3 shr eax, 4 .text:102A7FD6 and eax, 3Fh .text:102A7FD9 lea edx, [eax+eax*2] .text:102A7FDC mov eax, [esi+34h] .text:102A7FDF mov dword ptr [eax+edx*4+4], 0 .text:102A7FE7 .text:102A7FE7 loc_102A7FE7: ; CODE XREF: Inventory_Slot+2C1j .text:102A7FE7 ; Inventory_Slot+2CCj .text:102A7FE7 movzx eax, word ptr [esi+40h] .text:102A7FEB cmp ax, bx .text:102A7FEE jz short loc_102A7FFB .text:102A7FF0 test ax, ax .text:102A7FF3 jnz short loc_102A800C .text:102A7FF5 cmp [esi+42h], ax .text:102A7FF9 jnz short loc_102A800C .text:102A7FFB .text:102A7FFB loc_102A7FFB: ; CODE XREF: Inventory_Slot+2FEj .text:102A7FFB cmp [esp+2Ch+arg_8], 0 .text:102A8000 jnz short loc_102A800C .text:102A8002 push 0 .text:102A8004 push ebx .text:102A8005 mov ecx, esi .text:102A8007 call sub_102A8070 .text:102A800C .text:102A800C loc_102A800C: ; CODE XREF: Inventory_Slot+303j .text:102A800C ; Inventory_Slot+309j ... .text:102A800C movzx ecx, word ptr [ebp+0] .text:102A8010 mov esi, [esi+48h] .text:102A8013 mov word ptr [esp+2Ch+var_1C], cx .text:102A8018 mov edx, [esi] .text:102A801A mov eax, [edx+0B8h] .text:102A8020 push ebp .text:102A8021 push edi .text:102A8022 mov ecx, esi .text:102A8024 call eax .text:102A8026 movzx ecx, word ptr [ebp+0] .text:102A802A and ebx, 3Fh .text:102A802D and cx, 0FC01h .text:102A8032 shl ebx, 4 .text:102A8035 or bx, cx .text:102A8038 or bx, 1 .text:102A803C mov [ebp+0], bx .text:102A8040 mov edx, [edi] .text:102A8042 mov edx, [edx+98h] .text:102A8048 lea eax, [esp+2Ch+var_1C] .text:102A804C push eax .text:102A804D mov ecx, edi .text:102A804F call edx .text:102A8051 mov ecx, [edi+0D4h] [b].text:102A8057 call ds:?processing_activate@CObject@@QAEXXZ ; CObject::processing_activate(void)[/b] .text:102A805D pop ebp .text:102A805E pop edi .text:102A805F pop esi .text:102A8060 mov al, 1 .text:102A8062 pop ebx .text:102A8063 add esp, 1Ch .text:102A8066 retn 10h .text:102A8066 Inventory_Slot endp код не полностью, а с момента xrDebug, по которой я решил, что это то что я ищу ("CInventory::Slot") 102A805D - адрес, куда мне нужно врезаться (Это я по врезке для ТЧ определил) И тут как бы тупик. Я на 99% был уверен, что врезка для ТЧ не проканает, но выбора не было, в итоге заменил только то, что "вырезал": on_slot_callback proc ; esi == item, ebx == this;item = dword ptr 4 ;jmp exit ; вызываем колбек mov ecx, g_Actor cmp [ecx+298h], ebx ; ebx == this jnz short exit ; Actor()->m_inventory == this mov ebx, esi test ebx, ebx jnz short lab2 xor edi, edi ; edi = 0 jmp short lab3lab2: mov edx, [ebx] mov eax, [edx+12Ch] mov ecx, ebx call eax mov edi, eaxlab3: call CGameObject__lua_game_object push eax push 132 ; type = ??? mov ecx, g_Actor call CGameObject__callback ; eax = callback push eax ; callback call script_use_callbackexit: ; делаем то, что вырезали pop ebp pop edi pop esi mov al, 1 pop ebx add esp, 1Ch retn 10h ; обратно идти не надоon_slot_callback endp В corrections_list.txt добавил 0x102A805D 5 ;on_slot_item В mydll.asm добавил include actor_inventory_callbacks.asm В xrgame_stubs.asm org 102A805Dh - shift jmp on_slot_callbackorg 10188800h - shiftscript_use_callback: И ещё, как искал адрес script_use_callback. CGameObject__callback уже был прописан в xrgame_stubs.asm, я искал код, где вызывается эта функция, и чтобы перед ней было push 1Ch или 1Вh - 28(on_item_take) или 29(on_drop_item), всего таких нашлось 5, одна из них: .text:102B1C10 XZ_DropItem proc near ; CODE XREF: sub_1005C190+Ep.text:102B1C10 ; sub_102615C0+Fp.text:102B1C10 ; DATA XREF: ....text:102B1C10.text:102B1C10 arg_0 = dword ptr 4.text:102B1C10.text:102B1C10 push ebx.text:102B1C11 push esi.text:102B1C12 mov esi, ecx.text:102B1C14 test esi, esi.text:102B1C16 push edi.text:102B1C17 jnz short loc_102B1C1D.text:102B1C19 xor ebx, ebx.text:102B1C1B jmp short loc_102B1C28.text:102B1C1D ; ---------------------------------------------------------------------------.text:102B1C1D.text:102B1C1D loc_102B1C1D: ; CODE XREF: XZ_DropItem+7j.text:102B1C1D push esi.text:102B1C1E call sub_10348510.text:102B1C23 add esp, 4.text:102B1C26 mov ebx, eax.text:102B1C28.text:102B1C28 loc_102B1C28: ; CODE XREF: XZ_DropItem+Bj.text:102B1C28 mov edi, [esp+0Ch+arg_0].text:102B1C2C mov ecx, [edi+0D4h].text:102B1C32 call CGameObject__lua_game_object.text:102B1C37 push eax.text:102B1C38 [b]push 1Dh[/b].text:102B1C3A mov ecx, ebx.text:102B1C3C call CGameObject__callback.text:102B1C41 mov ecx, eax.text:102B1C43 [b]call script_use_callback[/b].text:102B1C48 mov eax, [esi].text:102B1C4A mov edx, [eax+20h].text:102B1C4D push edi.text:102B1C4E mov ecx, esi.text:102B1C50 call edx.text:102B1C52 pop edi.text:102B1C53 pop esi.text:102B1C54 pop ebx.text:102B1C55 retn 8.text:102B1C55 XZ_DropItem endp Собрать dll-ку получилось, но результата нет. Игра не вылетает, но и колбэк не срабатывает. Так вот прошу знаюших людей поделиться мыслями по этой проблеме, буду очень благодарен. Ссылка на комментарий
Shredder 49 Опубликовано 19 Декабря 2012 Поделиться Опубликовано 19 Декабря 2012 Спрошу что по-проще. Можно врезать код, который бы просто выводил в консоль что-нибудь? Т.е. чтобы я определил, правильно я нашёл место врезки или нет. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти