singapur22
Вот не заметил - тут же другой итератор у тебя. А он как я понял просто берет предметы из общего массива объектов инвентаря. По сути являясь аналогом варианта:
local cnt = st:object_count()
for i=0,cnt-1 do
local item = st:object(i)
...
end
отредактировал(а) erlik: 20-08-2010 00:01 GMT3 час. Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
erlik
"Спасибо" за пояснение.:-)
Если брать принципиально - то ты, конечно прав.
Для значения в таблице всегда существует ключ. И это истина.
Так что можно **50316ea8aab1bb10eeba**
erlik Хех. На счёт метода iterate_inventory, не угадал. Это итератор удаления предметов. Поясню как она**50016ea8aab1bb10eeba**== "medkit" then
return false
else
return true
end
end,
db.actor)[/code]
Тоесть, если функция фозвращает false, то объект удаляется. Вот как. :-P
Причём удаление производит только у трупов и в инвентарных ящиках. :blink
добавлено спустя 3 минут
Gun12 Неее. В инвентаре счёт начинается с нуля, потому и:
[code]for i=0,cnt-1 do[/code]
Иначе потом придётся единицу отнимать. А если i используется несколько раз за цикл? Тогда единицу придётся отнимать все эти несколько раз. А это уже критично. ;-)
отредактировал(а) singapur22: 20-08-2010 00:45 GMT3 час. Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
если это сделано в С, то и копать нужно в С (Кто-то будет это делать?)
Проблема не в языке, с хорошими знаниями Lua, любой код на C (пожалуй все же без примочек в виде C++) будет понятен любому. Похожие принципы, конечно, со своими особенностями / ловушками, но тем не менее. Главное найти что "ковырять".
Gun12 Ну если её использовать как ты написал, то конечно, она будет производить пустой **50016ea8aab1bb10eeba**if item:section() == "medkit" then
return false
else
return true
end
end, npc)[/code]
В данном случае, npc --это допустим труп сталкера. При работе данного кода производится итерация предметов как у актора, так и у "трупа" (кстати в этом случае первый аргумент возвращает юзердату трупа, тобишь второго объекта). Если у актора находится аптечка, производится поиск такого же объекта у трупа. И если онный находится, то производится его удаление (у трупа)).
Если нужно произвести независимое удаление, то и там и там указывается один и тот же объект. Тоесть как в предыдущем посте.
Мдя. Поспешил с выводами. Извиняюсь. :-G
Ничерта она не удаляет. Перепробывал все возможные варианты. Кроме обычного перебора, ничего нового не заметил. Правда в отличии от inventory_for_each, данный метод производит прогон по всем предметам, включая болт, пда, детектор и фонарик.
Обманули гады!!! Зачем тогда было писать ложное описание метода? Не понимаю.
отредактировал(а) singapur22: 20-08-2010 01:27 GMT3 час. Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Gun12
Как я понимаю сам движок располагается в папочке bin в виде кучки динамических библиотек (и судя по всему написанных на C++), "главная" из которых - xrGame.dll, предоставляет основной интерфейс ко всему функционалу движка, в т.ч и через luabind скриптам на Lua. Исходники xrGame.dll закрыты, что весьма логично, а значит и получить доступ из вне, ко всему ее функционалу не так то просто и без дезасемблирования, я бы даже сказал, невозможно. Т.е проблема как к этому "С++" добраться, а уж понять как что работает и изменить под себя - дело второе.
Cos Ну дизассемблер иметь мало, нужно ещё им уметь пользоваться, в том числе и знать язык ассемблера. У меня IDA PRO стоит уже года три, может чуть меньше. Юзаю часто, но толку от этого мало. Обычно чисто выявить нужные мне методы и классы, не более того.
Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
singapur22
Естественно, сказать "дизасемблировать" легко, сделать трудно. Особенно когда создатель программы этого не хочет и встраивает в свои решения различного рода защиты.
А уж потом как перевести готовое с ассемблера на языки более высокого уровня - проблема другая.
Всем прив. Хотелось бы узнать как удалить с локации с помощью инфопоршня заспавненный объект? Скажите плиз.
И еще, подскажите плиз где можно скачать мод который добавляет возможность заправлять машины топливом? если конечно такой мод есть, а то как то не реалистично, на тачке можно вечно ездить.
отредактировал(а) Mehanik Yar: 20-08-2010 08:01 GMT3 час.
function addKillCount(npc)
local props, sect = getNpcType(npc)
if props == nil then
return
end
local sect_name
if sect_alias[sect] ~= nil then
sect_name = sect_alias[sect]
else
sect_name = sect
end
if killCountProps[sect_name] == nil then
print_table(sect_alias)
abort("Statistic ERROR: required section [%s] not present, based [%s]", tostring(sect_name), tostring(sect))
end
actor_stats.add_points(props, sect_name, 1, killCountProps[sect_name])
db.actor:set_character_rank(db.actor:character_rank() + killCountProps[sect_name])
end
function getNpcType(npc)
if IsStalker(npc) then
local community = "neutral"
if npc:character_community() == "monolith" then community = "monolith"
elseif npc:character_community() == "military" then community = "military"
elseif npc:character_community() == "killer" then community = "killer"
elseif npc:character_community() == "ecolog" then community = "ecolog"
elseif npc:character_community() == "dolg" then community = "dolg"
elseif npc:character_community() == "freedom" then community = "freedom"
elseif npc:character_community() == "bandit" then community = "bandit"
elseif npc:character_community() == "zombied" then community = "zombied"
elseif npc:character_community() == "fracture" then community = "fracture"
elseif npc:character_community() == "burer" then community = "burer"
elseif npc:character_community() == "chimera" then community = "chimera"
elseif npc:character_community() == "poltergeist" then community = "poltergeist"
elseif npc:character_community() == "gigant" then community = "gigant"
elseif npc:character_community() == "controller" then community = "controller"
elseif npc:character_community() == "tushkano" then community = "tushkano"
elseif npc:character_community() == "flesh" then community = "flesh"
elseif npc:character_community() == "cat" then community = "cat"
elseif npc:character_community() == "bloodsucker" then community = "bloodsucker"
elseif npc:character_community() == "boar" then community = "boar"
elseif npc:character_community() == "snork" then community = "snork"
elseif npc:character_community() == "dog" then community = "dog"
elseif npc:character_community() == "pseudodog" then community = "pseudodog"
elseif npc:character_community() == "rat" then community = "rat"
end
local rank = ranks.get_obj_rank_name(npc)
return "stalkerkills", community.."_"..rank
else
local community = monster_classes[get_clsid(npc)]
if community == nil then
abort("Statistic ERROR: cannot find monstr class for [%s]", npc:name())
end
if community == "NIL" then
return nil,nil
end
local rank = ranks.get_obj_rank_name(npc)
return "monsterkills", community.."_"..rank
end
end
m_rat.ltx
[[rat_group]
GroupControlSection = spawn_group
$spawn = "monsters\rat-group" ; option for Level Editor
$npc = on ; option for Level Editor
Human = off ; option for ALife Simulator
class = AI_RAT_G ; AI class
monster_section = m_rat_e
[m_rat_e]:monster_base
GroupControlSection = spawn_group
$spawn = "monsters\rat" ; option for Level Editor
$npc = on ; option for Level Editor
$prefetch = 128
visual = monsters\rat\rat_1
corpse_visual = monsters\rat\rat_1
icon = ui_npc_monster_tushkano
Scheduled = on ; option for ALife Simulator
Human = off ; option for ALife Simulator
Health = 15 ; option for ALife Simulator
MinSpeed = 1.0 ; option for ALife Simulator
MaxSpeed = 1.5 ; option for ALife Simulator
going_speed = 1.0 ; option for ALife Simulator
retreat_threshold = 0.2
eye_fov = 170
eye_range = 10
max_hear_dist = 50
MaxHealthValue = 15 ; range [0..200]
hit_power = 5
hit_type = wound
transparency_threshold = 1.0
DynamicObjectsCount = 32
DynamicSoundsCount = 32
;---------------------------------------------------------------------
ph_skeleton_airr_lin_factor = 2.0 ;550.0 (изменно из-за того, что убрано домножение коэффициент 0.002 из кода)
ph_skeleton_airr_ang_factor = 0.0 ;0.0 (изменно из-за того, что убрано домножение на коэффициент 0.3 из кода (0.0*0.3=0.0))
ph_skeleton_hinger_factor1 = 1.0 ;1.0 (изменно из-за того, что убрано домножение на коэффициент 5.0 из кода)
ph_skeleton_ddelay = 15.0 ;Время изменения значения трения в суставе с момента создания шелла, сек
min_view_distance = 0.8 ; коэффициент, который множится на eye_range, в зависимости от угла
max_view_distance = 1.0 ; коэффициент, который множится на eye_range, в зависимости от угла
visibility_threshold = 100.0 ; значение, при достижении суммой которого объект считается видимым
always_visible_distance = 0.3
time_quant = 0.001
decrease_value = 0.01 ; значение, на которое уменьшается вес, если объект попал в фрустум, но отсёкся по каким-то причинам
velocity_factor = 0.5
luminocity_factor = 0.5 ; фактор освещения (только для Актёра)
;открытые раны
bleeding_v = 0 ;потеря крови при номинальной ране в секунду
wound_incarnation_v = 0.0 ;крутизна кривой заживления (какой процент раны останется после заживления в игровую секунду)
min_wound_size = 0.01
bone_torso = bip01_spine1 ; bone name
bone_head = bip01_head ; bone name
bone_fire = bip01_head ; bone name
weapon_usage = 0 ; boolean
material = creatures\small
DynamicObjectsCount = 32
;species of monster
species = rat
spec_rank = normal
community = rat
[rats_terrain]
255,000,255,255 ;на всех уровнях, по графам без описания
255,004,255,255 ;на всех уровнях, по мертвой земле
255,005,255,255 ;на всех уровнях, по деревням
255,006,255,255 ;на всех уровнях, по городам
255,007,255,255 ;на всех уровнях, по промзастройкам
255,008,255,255 ;на всех уровнях, по туннелям
255,009,255,255 ;на всех уровнях, по подземельям
255,014,255,255 ;на всех уровнях, по железнодорожным насыпям
255,015,255,255 ;на всех уровнях, по искусственным заграждениям
[m_resp_rat_damage]
;bone_name = ,-1,
; - коэфф. изменения хита (уменьшения здоровья)
; - коэфф. изменения величины открытой раны
default = 1, -1, 0.10 ;0.15, -1, 0.10
[rat_weak]:m_rat_e
$spawn = "monsters\rat"
monster_type = indoor
rank = 0
spec_rank = weak
community = rat
Tele_Time_To_Hold = 200
/spoiler]
1. Вы сейчас в интернете
2. Вы на сайте stalker-portal
3. Вы читаете
5. Вы не заметили, что отсутствует пункт 4
6. Вы это проверили
7. Вы улыбаетесь
8. Поставь себе в подпись и нас будет больше
djslavikoz
Вроде надо в xr_statistic.script записать нового монстра.По анологии.Или посмотри, как, напимер, в солянке прописана кры**50016ea8aab1bb10eeba**дом находящихся НПС на врагов к ГГ
npc:set_relation(game_object.enemy, тут нужно что-то написать, но не знаю что)
end
end[/code]
Не подскажете?
----------------------------------------------- erlik
Спасибо.Всетаки попробую, вдруг повезет:-)
отредактировал(а) Stalk15: 20-08-2010 10:28 GMT3 час. Новые фишки для сталкера(см. журнал)
djslavikoz
Не существует такого классового идентификатора как rat_s. Потому игра и ругается на таблицу monster_classes.
Посмотри внимательно в lua_help class clsid, где перечислены все существующие константы - откуда ты взял эту строчку?
Крысу вроде как делают на классе тушкана. И еще (насколько я помню - может и не совсем прав)- без обработки ее модели в 3D редакторах (и SDK) она спавнится то ли неживой, то ли еще как то криво.
-------------------------------------------------------------
PS: не заметил - она у тебя и так на классе тушкана сделана. Значит просто лишняя строчка
rat_s в таблице. Stalk15
К кому меняешь отношение - того и пиши. db.actor например.
Хотя у меня есть подозрение, что у тебя ничего не выйдет. Я то ж самое как то давно пытался делать через цикл - и чего то не вышло.
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
djslavikoz
а может проблемма в xr_statistic хотя там у тебя все прописано а еще может дело в самом скрипте хотя я сомневаюсь
Horrible area modВидео в журнале
--------------------------------------------------------------------
Важнейшая задача цивилизации - научить человека мыслить
народ кто нибудь мне может помоч : я хочу заспаунить через скрипт контролера на кордоне и не получается . Пожалуйста кто нибудь напиши те полностью функцию из спауна
Horrible area modВидео в журнале
--------------------------------------------------------------------
Важнейшая задача цивилизации - научить человека мыслить
Произвёл модернизацию кода определения предметов на поясе. Улучшения:
1. -- величина кода уменьшилась в два раза!!! (за счёт избавления от некоторых ключей)
2. -- произведён раздел действий (спавн разделителя/-> итерация/-> удаление разделителя) на разные циклы апдейта, за счёт**50016ea8aab1bb10eeba**e end
end
return false
end
--функция отключения итерации при открытии инвентаря
--(привязана к колбэку info_callback() в файле bind_stalker.script)
function InventoryInfo(info)
if info == "ui_inventory" then
open_inventory = true
this.DeleteSeparator()
elseif info == "ui_inventory_hide" then
open_inventory = false
end
end
--функция сброса итерации, при взятии/выбрасывании предметов инвентаря
--(привязана к колбэкам on_item_take() и on_item_drop () в файле bind_stalker.script)
function TakeAndDrop(item)
if item:section() == "separator" or not separator then return end
if not open_inventory then
this.DeleteSeparator()
end
end[/code]
Код будет добавлен в журнал и F.A.Q.
отредактировал(а) singapur22: 20-08-2010 15:18 GMT3 час. Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
singapur22
The function is Good :-cool)
--------------------------------
Так значит по твоим словам делить код на более мелкие куски (в виде отдельных функций на одно-два действия) имеет смысл не только ради большей читабельности кода, но и в плане производительности?
Я просто никогда не любил писать огромные блоки (кстати в АМК этим особенно злоупотребляли составляя блоки function ...end по 300-500 строк ) и поэтому всегда (чисто ради собственного удобства) старался их как то поделить на более мелкие составляющие.
------------------------------------------------------------------------------------------------------------ singapur22
Ну как бы там ни было неоптимально изначально, автору кода можно это простить - все таки это единственный существующий рабочий вариант данной проверки, идея которого пришла в голову только одному человеку. За что ему и спасибо. А доработка кода - уже задача тех, кто его использует.:-)
отредактировал(а) erlik: 20-08-2010 15:35 GMT3 час. Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
erlik Это естественно. Многие действия выполняются в нескольких местах кода (как например удаление в данном коде), и естественно имеет смысл вывести его во внешнюю функцию, дабы не прописывать одно и тоже по нескольку раз. В предложеном тобой коде так же была тупая дубликация одной из функций. Где первая вызывалась из take, а вторая из дропа. Единственное что их различало, это сообщение выводимое в консоль. Не забываем, что величина кода так же влияет на производительность.
отредактировал(а) singapur22: 20-08-2010 15:38 GMT3 час. Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Кто нибудь может объяснить что за фигня творится?! (Я даже переустановил игру вылетает все равно!)
Имеем SHOC 1.0004, имею свой мод. Вдруг не с того не с сего у меня стала игра вылетать на синхронизации с подобными вылетами:
Expression : fatal error
Function : weapon_hud_value::load
File : E:\stalker\patch_1_0004\xr_3da\xrGame\WeaponHUD.cpp
Line : 34
Description :
Arguments : There is no 'wpn_knife_0' bone for weapon 'wpn_knife_hud'.
(До этого у меня стоял реаниматион прожект)
И что я только не делал. Удалил OGF модели - вылет. Удалил конфиг - вылет. Удалил и то и другое - вылет. И так любой вариант! :obstenu:
Может кто знает где таится неизведанный мне худ?!?!? То есть ОТКУДА ЖЕ СЧИТЫВАЕТСЯ ЭТОТ ДОЛБАННЫЙ ХУД ДАЖЕ КОГДА НЕТ КОНФИГОВ И ОГФ МОДЕЛЕЙ!?
АнархОПанк Смотря какой конфиг удаляешь. Не нужно забывать, что все новые модели оружия и предметов, создаются на основе уже имеющихся классов. Вполне возможно (даже скорее всего), был добавлен новый итем, который был привязан к классу ножа. Но при этом не все настройки в конфигах были указаны. Не нужно также забывать, что модель итема должна при этом содержать все нужные кости, которые требует класс.
Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
erlik
(Всем привет! Был в отлучке ...)
Рабочий вариант проверки предмета на поясе существует не в единственном варианте. Уже давно мною исходный код был причесан и модернизирован ... (см. m_belt.script в Симбионе). singapur22
Помимо открытяи инвентори актора следует внести проверки на открытие окон обыскиваемых трупов/ящиков/... ("ui_car_body"). Да и есть нюанс с открытием окна торговли ("ui_trade").
По оптимизации: ИМХО, относительный недостаток и этого и 'моего' вариантов кодов в том, что каждый раз спавнится/удаляется сепаратор, хотя собственно требуется всего лишь определить 'границу между слотами и рюкзаком', для чего требуется 'зафиксировать' некий последний предмет, попавший на пояс. Начал как то писать вариант перемещения предмета-сепаратора из фейк-хранилища на пояс актору и обратно, но ... недоделал. Т.к. спавн и удаление объекта значительно больше тратят ресурсов игры, чем перемещение - домодернизация имеет смысл ... (о хите по инвентори-боксу)
Пока не сделал рабочий вариант. И времени не было и долелать кое что по своей сборке сейчас требуется ... Но изыскания не заброшены. АнархОПанк
Дополню ответ singapur22: При считывании конфигов важен порядок(!) их считывания. Если у тебя добавлен некий предмет, для которого используется худ родительского предмета, то чтение конфига этого предмета должно быть НЕ ранее чтения конфига родительского предмета.
Помимо открытяи инвентори актора следует внести проверки на открытие окон обыскиваемых трупов/чщиков/... ("ui_car_body"). Да и есть y.fyc с открытием окна торговли ("ui_trade").
Логично. Я както это упустил. Лады, ща допишем. :-)
Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
singapur22 , Artos спасибо. Буду смотреть, искать....
Просто вылет произлшел после того как пытался добавить ружье БМ-16 (Full) и началось.... Удалив все конфиги и ОГФ модели, вылеты прекратились. Решил заменить реаниматион прожект на Арсенал Мод - вылеты начались вновь.. Что ж, спасибо за подсказки!
Будет есть на что опираться.
люди скачал билдовский корднон для ТЧ а там вместе текстурес лтх без них работает но все текстуры ужас а с ним игра не запускается че делать подскажите
singapur22
Есть еще идея по поясу: А зачем вообще спавнить/удалять/перемещать сепаратор?! Ведь он может быть всегда у актора. Для определения границы 'пояс-рюкзак' с его помощью, вполне достаточно чтобы он был 'положен на пояс' последним.
Имею ввиду вот что: Если перед циклом итерации по инвентори актора предварительно дропить сепаратор и возвращать назад -> и границу/индекс можно определять и возни со (ре)спавнами не будет. Останется только внести сепаратор в различные схемы/алгоритмы, которые могут быть к нему критичны.
Останется один недостаток, который и в исходном алгоритме определения пояса присутствует: Полезный объем пояса (кол-во ячее) на одну меньше чем имеется. А это значит: алгоритм НЕ работает при полной загрузке пояса реальными предметами.
Чувак на болоте ты можешь объяснить подробнее че ты написал?
PS ДАй ссылку на этот кордон.
PSS Это случайно не из 1935 билда, предназначенная для теста/просмотра оной локации. Если да то не нужно ссылку, если нет, то будь добр дай:-)?
Короче скачал порт билдосвкого кордона для финалки. Там все текстуры террейна размыты. Чтобы они появились из надо было прописать в textures.ltx там был готовый файл скачал игра после логотипа стаклер тени чернобыля вылетает. я хз чеделать
предварительно дропить сепаратор и возвращать назад
Это очень даже интересно. Логично мыслишь. Надо попробывать.
Останется один недостаток, который и в исходном алгоритме определения пояса присутствует: Полезный объем пояса (кол-во ячее) на одну меньше чем имеется. А это значит: алгоритм НЕ работает при полной загрузке пояса реальными предметами.
А тут я не понял, что ты имеешь ввиду. Ведь сепаратор спавнится в рюкзак, а не на пояс. А в рюкзаке места предостаточно. :-)
Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.