*Shoker* 322 Опубликовано 13 Октября 2011 (изменено) > *Shoker*, ты полез туда, где нужны уверенные знания, а не погадалки. Метод проб и ошибок никто не отменял Попробовать всегда можно, потому и уточнил. > Параметр 'condition' для всех предметов читается как: tT.condition = oPs:r_float(). Чем тебе это не нравится или что смущает? Меня смущает наличие upd:condition, для чего он тогда нужен, и что обозначает? Собственно говоря его я вывожу лишь для того чтобы проверить корректную работу разбора UPDATE_ пакета, и только потому-что оно шло первым-вторым в свойствах upd_пакета оружия, а не чтобы получить текущее состояние оружия. Но если этот параметр обозначает не состояние оружия, то тогда почему имеет такое название, и для чего нужен? > И ты так и не отвтеил, что же в твоем пониманиее такое однобайтовые(!) параметры 'upd:condition' и 'upd:grenade_mode' и каковы же значения для них ты ожидаешь? Названия этим параметрам придумывал не я, а те, кто разбирали нет-пакеты. Ориентируясь по названиям, я ожидаю, что upd:grenade_mode вернёт мне что то, связанное с гранатомётом. Но вместо этого он каждый раз при каждом save\load (как и upd:condition) возвращает разные числа, которые изменяются случайным образом лишь при следующей загрузке, а их значения не имеют никакого смысла . Тут уже я должен задать вопрос, что из этих параметров я могу получить полезное, что мне от них ожидать, и для чего они вообще существуют? Ибо пока у меня выходит лишь бессвязный набор случайных цифр. PS: С новым скриптом ситуация аналогичная, разве что он теперь чаще просто нули возвращает в выводимых мною upd-параметрах. ^^^ Изменено 13 Октября 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Поделиться этим сообщением Ссылка на сообщение
*Shoker* 322 Опубликовано 13 Октября 2011 (изменено) sm.mylog("ShotX = "..scnt) sm.mylog(ammo_name) sm.mylog(packet.updgrenade_mode) -- = oPu:r_u8() --/#+# sm.mylog(packet.updcondition) -- = oPu:r_u8() sm.mylog(packet.updweapon_flags) -- = oPu:r_u8() sm.mylog(packet.updammo_elapsed) -- = oPu:r_u16() sm.mylog(packet.updaddon_flags) -- = oPu:r_u8() sm.mylog(packet.updammo_type) -- = oPu:r_u8() sm.mylog(packet.updweapon_state) -- = oPu:r_u8() sm.mylog(packet.updweapon_zoom) -- = oPu:r_u8() sm.mylog(packet.updcurrent_fire_mode) -- = oPu:r_u8() sm.mylog("ENDS") Результат: ! [LUA][ERROR] [07:10] ShotX = 1 ! [LUA][ERROR] [07:10] ammo_5.56x45_ss190 ! [LUA][ERROR] [07:10] 32 ! [LUA][ERROR] [07:10] 116 ! [LUA][ERROR] [07:10] 104 ! [LUA][ERROR] [07:10] 29545 ! [LUA][ERROR] [07:10] 32 ! [LUA][ERROR] [07:10] 32 ! [LUA][ERROR] [07:10] 115 ! [LUA][ERROR] [07:10] 101 ! [LUA][ERROR] [07:10] 116 ! [LUA][ERROR] [07:10] ENDS Бред же какой то... Изменено 13 Октября 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Поделиться этим сообщением Ссылка на сообщение
*Shoker* 322 Опубликовано 13 Октября 2011 (изменено) --/ cse_alife_object local function Parse_Packet_cse_alife_object(tT,oPs) (1.6):gvid=[135] (1.25):distance=[0] (1.22):direct_control=[1] (1.4):lvid=[48111] (0.4):object_flags=[-65] (1.17):custom_data=[] (1.23):story_id=[-1] (0.6):spawn_story_id=[-1] --/ cse_visual local function Parse_Packet_cse_visual(tT,oPs) (1.19):visual_name=[dynamics\weapons\wpn_fn2000\wpn_fn2000] (0.5):visual_flags=[0] --/ cse_alife_item function Parse_Packet_cse_alife_item(tT,oPs,oPu) (0.2):condition=[0.99999958276749] (0.8):upgrade_count=[0] (1.16):updnum_items=[0] --UPD-- (0.1):updph_position=[<userdata>] --UPD-- (1.11):upditem__unk1=[<userdata>] --UPD-- (1.8):upditem__unk2=[<userdata>] --UPD-- (0.12):updph_rotation --UPD-- (1.0):a=[3.7459390200166e-017] (1.1):d=[0] (1.2):c=[0] (1.3):b=[8.6880504788139e-044] (0.0):updph_angular_vel=[<userdata>] --UPD-- (0.7):updph_linear_vel=[<userdata>] --UPD-- (0.3):updph_unknown=[0] --UPD-- --/ cse_alife_item_weapon_magazined_w_gl function Parse_Packet_cse_alife_item_weapon_w_gl(tT,oPs,oPu) (1.7):ammo_current=[90] (1.14):ammo_elapsed=[30] (1.15):weapon_state=[5] (1.5):addon_flags=[0] (1.24):ammo_type=[0] (0.9):item_weapon__unk1=[0] (0.10):updgrenade_mode=[76] --UPD-- VVV (1.13):updcondition=[82] (0.11):updweapon_flags=[123] (1.12):updammo_elapsed=[3] (1.9):updaddon_flags=[0] (1.21):updammo_type=[0] (1.20):updweapon_state=[0] (1.10):updweapon_zoom=[0] (1.18):updcurrent_fire_mode=[0] ------------ Проверял на updweapon_state, updweapon_zoom и updcurrent_fire_mode, ни один не менялся ни при смене патронов, ни при зуме и прочем. Тоже с остальными upd-параметрами. Начинаются боятся, что это всего-навсего GSC-овский рудимент, аля (1.7):ammo_current=[90], и грош цена этим данным Изменено 13 Октября 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Поделиться этим сообщением Ссылка на сообщение
*Shoker* 322 Опубликовано 13 Октября 2011 (изменено) KD87 Спасибо за ответ Вселяешь надежду Но с чего ты определил, что ошибка именно в updnum_items=[0]? В ACDC.pl он записан как type => 'h8', но чтения h8 не нашёл, а потому остаётся только u8, который в данный момент и используется... (Всё, уже разобрался) И спасибо за подробную информацию о q8\q16, эти данные были получены с помощью IDA? И будет ли тогда критично пытаться прочитать upd:condition как u8? По идее вылета не будет, но и значение выйдет не правильное. Artos !, щас протестирую... ziStam ИЗучай конец скрипт xr_meet.script Изменено 13 Октября 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Поделиться этим сообщением Ссылка на сообщение
*Shoker* 322 Опубликовано 13 Октября 2011 (изменено) Не, ну это да, только смысл тогда в этом, по сути просто сохранённые данные из конфигов, да ещё и не имеющие особого смысла. Кстати с новой версией возвращает nil-ы, т.к updnum_items = 0 и эти данные просто не читаются ... Кажется я понял в чём дело, updnum_items же вроде тока к физике относится, а у тебя дальше проверка на то что он больше 0 и на параметры класса оружия\фонарика и ещё пары. Щас гляну... Да, терь что то выводится, правда щас разберусь ещё что именно, но значения меняются... Изменено 13 Октября 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Поделиться этим сообщением Ссылка на сообщение
*Shoker* 322 Опубликовано 13 Октября 2011 (изменено) Всё, теперь работает, Artos, зачем у тебя в скрипте это: if oPu and tT.updnum_items > 0 then tT.updgrenade_mode = oPu:r_u8() --/#+# tT.updcondition = oPu:r_u8() Зачем tT.updnum_items, ведь он относится к физической части объекта и к cse_alife_inventory_item Из за этого параметры ниже чтения updnum_items стабильно возвращают nil-ы После того, как я убрал проверку у них на updnum_items, стали выводится значения, и похоже корректные, по крайнем мере они точно корректны когда включён режим обычной стрельбы, при стрельбе из гранатомёта выводятся слегка другие данные, я сейчас ещё буду разбираться почему так происходит. И по поводу updconditon, это таки состояние оружия. Так при 100% состоянии оружия, оно мне вывело 256, это 2 в 8 степени. И соответственно с уменьшением состояния оружия оно опускалось вплоть до нуля. KD87, спс., щас проверю, отпишусь. Изменено 13 Октября 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Поделиться этим сообщением Ссылка на сообщение
*Shoker* 322 Опубликовано 13 Октября 2011 (изменено) KD87 Твой вариант странноват, не вылетает, но работает не верно, в upd возвращает преимущественно 0, и ещё иногда 1 в updnum_items (при вкл. гранатомёте) и 2 в updgrenade_mode когда стрельба не из гранатомёта идёт. Также у тебя не нашёл чтения tT.updph_rotation, хотя в записи он всегда записывается. Щас ещё кое что попробую, скажу потом. > Не забывай, что в игре классы чаще всего наследуют предыдущие. Оружие - инвентарный предмет (в первую очередь), вот и присущи ему параметры родительского класса. Не тут верно, но updnum_items относится ж тока к инвентарной части нет пакета оружия, зачем из за него блокировать чтение части с параметрами оружия? Изменено 13 Октября 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Поделиться этим сообщением Ссылка на сообщение
*Shoker* 322 Опубликовано 13 Октября 2011 (изменено) Ну хотя бы потому что updcondition в твоём варианте тоже ноль возвращает Взял сейчас вариант Artos-а ( архив 11013-2, последний), поудалял везде проверку на tT.updnum_items, кроме cse_alife_item. В итоге: packet.updnum_items = 0 packet.updgrenade_mode = 0 packet.updcondition = 255 packet.updweapon_flags = 1 packet.updammo_elapsed = 21 --\\ Не совсем совпадает с действительностью packet.updaddon_flags = 0 packet.updammo_type = 0 packet.updweapon_state = 5 packet.updweapon_zoom = 0 packet.updcurrent_fire_mode = 2 packet.updnum_items = 1 packet.updgrenade_mode = 76 packet.updcondition = 82 packet.updweapon_flags = 124 packet.updammo_elapsed = 3 packet.updaddon_flags = 0 packet.updammo_type = 0 packet.updweapon_state = 0 packet.updweapon_zoom = 0 packet.updcurrent_fire_mode = 0 Так что непонятки, похоже всё же при updnum_items > 0 что то не так считывается. Ежели он равен 0, то всё идёт корректно. Но если оставить проверки Artos-а, то при обычной стрельбе всегда будет возвращать nil. А если взять твой вариант там кажется некорректно идёт, но я завтра если что перепроверю. Изменено 13 Октября 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Поделиться этим сообщением Ссылка на сообщение
*Shoker* 322 Опубликовано 14 Октября 2011 (изменено) Artos, KD87 Огромное спасибо за помощь С последней версией всё прекрасно работает. Никаких сдвигов (ЧН) я не заметил, все параметры отображаются корректно. Теперь попробую переделать колбек на выстрел, чтобы без кейлогера работал. RvP А твоя lua-библиотека с невырезанными функциями работает только в ТЧ? > в правой части должно везде быть по примеру Ещё можно так: if obj_sect == 'medkit' then snd = "interface\\inv_medkit" Добавлено через 7 мин.: И вообще, функцию use_object лучше так переделать, использовать таблицу: local snd_tbl = { --\\ Медикаменты medkit = "interface\\inv_medkit", medkit_army = "interface\\inv_medkit", medkit_scientic = "interface\\inv_medkit", bandage = "interface\\inv_bandage", antirad = "interface\\inv_pills", --\\ Еда bread = "interface\\inv_food", kolbasa = "interface\\inv_food", conserva = "interface\\inv_food", --\\ Напитки vodka = "interface\\inv_vodka", energy_drink = "interface\\inv_softdrink", } function use_snd(obj) local obj_sect = obj:section() if snd_tbl[obj_sect] then local snd_obj = xr_sound.get_safe_sound_object(snd_tbl[obj_sect]) snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) end end Изменено 14 Октября 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Поделиться этим сообщением Ссылка на сообщение
*Shoker* 322 Опубликовано 14 Октября 2011 (изменено) KoRan Вообще то "if obj and obj:section() == "af_medusa" then ..." и то что ниже, должно быть внутри функции actor_binder:on_item_take (obj), тоесть до end стоять. function actor_binder:on_item_take (obj) level_tasks.proceed(self.object) --game_stats.update_take_item (obj, self.object) if obj and obj:section() == "af_medusa" then db.actor:give_info_portion("find_art1") end if obj and obj:section() == "af_gravi" then db.actor:give_info_portion("find_art2") end end Но тебе проще будет сделать так: local my_info_table = { af_medusa = "find_art1", af_gravi = "find_art2", } function actor_binder:on_item_take (obj) level_tasks.proceed(self.object) --game_stats.update_take_item (obj, self.object) if my_info_table[obj:section()] then db.actor:give_info_portion( my_info_table[obj:section()]) end end Тогда тебе достаточно будет лишь заполнять таблицу my_info_table, секция предмета = имя инфы Artos Кажется нашёл в новой версии нет-пакетов ошибки. Я ещё не до конца досмотрел, буду писать по мере нахождения: 1) В функциях работы с нет-пакетами аномалий появилась проверка на аномалию, функция isAnomaly(), но она есть только в твоём моде (в _G скрипте), соответственно если кто то другой будет использовать твой скрипт, то при попытке разбора аномалии, игра будет вылетать. Функцию вставить не проблема, но имхо это уже лишняя осторожность. 2) В Fill_Packet_cse_ph_skeleton у тебя идёт запись updskeleton_flags, но в Parse_Packet_cse_ph_skeleton (и вообще во всём скрипте) ты её не считываешь. Причём в старой версии скрипта это считывание присутствует. 3) Не уверен что ошибка. но в Parse_Packet_se_zone_anom, у тебя идёт чтение last_spawn_time_present, читается 8 бит и если они есть, то вызывается функция utils.w_CTime(oPs, tT.ctime), проблема в том, что в чистой игре, эта функция вылетает с таким логом: [error]Arguments : LUA error: ...es\stalker - clear sky\gamedata\scripts\utils.script:595: attempt to index local 't' (a number value) В старой версии чтение и запись CTime я просто убрал, вылетов и глюков не было, хотя не могу стопроцентно ручаться. Всё это проверялось на ЧН. Больше вроде бы пока ничего не нашёл. ЗЫ: Некоторые вещи мог сказать не правильно, но ты суть поймёшь, если глянешь на скрипт. Изменено 14 Октября 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Поделиться этим сообщением Ссылка на сообщение
*Shoker* 322 Опубликовано 15 Октября 2011 Лёха_тц И новую игру не забывай начинать, если спавн меняешь. Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Поделиться этим сообщением Ссылка на сообщение
*Shoker* 322 Опубликовано 15 Октября 2011 (изменено) Artos Похоже на ошибку GSC. Если взять utils.script безпатченной версии, то там функция w_CTime() такая: if not (t == CTime_0) then local Y, M, D, h, m, s, ms = 0, 0, 0, 0, 0, 0, 0 Y, M, D, h, m, s, ms = t:get( Y, M, D, h, m, s, ms ) А в патченой версии я нигде не нашёл, чтобы вызывался код вида utils.CTime Разве что как то движково. И да, так мне получается параметр updskeleton_flags просто удалить? А то я вставил его чтение\запись Изменено 15 Октября 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Поделиться этим сообщением Ссылка на сообщение
*Shoker* 322 Опубликовано 20 Октября 2011 Galil Если статьи выдаются инфопоршнями, попробуй просто эти инфопоршни "забрать" (db.actor:disable_info_portion(" ") - но не уверен что именно так, проверь в lua_help) Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Поделиться этим сообщением Ссылка на сообщение
*Shoker* 322 Опубликовано 22 Октября 2011 (изменено) Хотел вот спросить по поводу некоторых странностей в работе STATE_Read и State_write колбеков в скриптах типа se_xxx.script В скрипте sim_faction.script (ЧН, 10 патч) в функциях -- Сейв function se_sim_faction:STATE_Write(packet) -- ЛОАД function se_sim_faction:STATE_Read(packet, size) Поставил вывод сообщения такого типа: sm.ilog_c("load faction %s sid %s", self:name(), self.sid) В итоге вот лог, записан сразу после save\load * Saving objects... ! [LUA][ERROR] [07:15] save faction mar_sim_faction_csky sid 91495 ! [LUA][ERROR] [07:15] save faction mar_sim_faction_renegade sid 10069 ! [LUA][ERROR] [07:15] save faction mar_sim_faction_monster sid 18016 ! [LUA][ERROR] [07:15] save faction gar_sim_faction_bandit sid 82950 ! [LUA][ERROR] [07:15] save faction esc_sim_faction_stalker sid 34651 ! [LUA][ERROR] [07:15] save faction esc_sim_faction_military sid 89133 ! [LUA][ERROR] [07:15] save faction val_sim_faction_freedom sid 64428 ! [LUA][ERROR] [07:15] save faction val_sim_faction_killer sid 12956 ! [LUA][ERROR] [07:15] save faction agr_sim_faction_dolg sid 26588 ! [LUA][ERROR] [07:15] save faction yan_sim_faction_zombied sid 17237 ! [LUA][ERROR] [07:15] save faction lim_sim_faction_monolith sid 62255 * 21852 objects are successfully saved * Game WinSeven_quicksave.sav is successfully saved to file 'f:\games\stalker - clear sky\save\winseven\stalker-stcs\savedgames\winseven_quicksave.sav' ... Загрузка игры "winseven_quicksave.sav"... * Loading spawn registry... ! [LUA][ERROR] [07:15] load faction mar_sim_faction_csky sid 47402 ! [LUA][ERROR] [07:15] load faction mar_sim_faction_renegade sid 99711 ! [LUA][ERROR] [07:15] load faction mar_sim_faction_monster sid 17753 ! [LUA][ERROR] [07:15] load faction gar_sim_faction_bandit sid 48238 ! [LUA][ERROR] [07:15] load faction esc_sim_faction_stalker sid 24366 ! [LUA][ERROR] [07:15] load faction esc_sim_faction_military sid 78940 ! [LUA][ERROR] [07:15] load faction val_sim_faction_freedom sid 59261 ! [LUA][ERROR] [07:15] load faction val_sim_faction_killer sid 57427 ! [LUA][ERROR] [07:15] load faction agr_sim_faction_dolg sid 81796 ! [LUA][ERROR] [07:15] load faction yan_sim_faction_zombied sid 93268 ! [LUA][ERROR] [07:15] load faction lim_sim_faction_monolith sid 31654 * 11568 spawn points are successfully loaded * Loading objects... ! [LUA][ERROR] [07:15] load faction mar_sim_faction_csky sid 68530 ! [LUA][ERROR] [07:15] load faction mar_sim_faction_renegade sid 95163 ! [LUA][ERROR] [07:15] load faction mar_sim_faction_monster sid 1499 ! [LUA][ERROR] [07:15] load faction gar_sim_faction_bandit sid 71579 ! [LUA][ERROR] [07:15] load faction esc_sim_faction_stalker sid 26426 ! [LUA][ERROR] [07:15] load faction esc_sim_faction_military sid 86856 ! [LUA][ERROR] [07:15] load faction val_sim_faction_freedom sid 19908 ! [LUA][ERROR] [07:15] load faction val_sim_faction_killer sid 25487 ! [LUA][ERROR] [07:15] load faction agr_sim_faction_dolg sid 25358 ! [LUA][ERROR] [07:15] load faction yan_sim_faction_zombied sid 11439 ! [LUA][ERROR] [07:15] load faction lim_sim_faction_monolith sid 32970 * 21852 objects are successfully loaded * Game winseven_quicksave is successfully loaded from file 'f:\games\stalker - clear sky\save\winseven\stalker-stcs\savedgames\winseven_quicksave.sav' ... Клиент: Синхронизация... ... ! [LUA][ERROR] [07:18] save faction mar_sim_faction_csky sid 68530 ! [LUA][ERROR] [07:18] save faction mar_sim_faction_csky sid 68530 ! [LUA][ERROR] [07:18] save faction mar_sim_faction_renegade sid 95163 ! [LUA][ERROR] [07:18] save faction mar_sim_faction_renegade sid 95163 ! [LUA][ERROR] [07:18] save faction mar_sim_faction_monster sid 1499 ! [LUA][ERROR] [07:18] save faction mar_sim_faction_monster sid 1499 ! [LUA][ERROR] [07:18] load faction mar_sim_faction_csky sid 65484 ! [LUA][ERROR] [07:18] load faction mar_sim_faction_renegade sid 17958 ! [LUA][ERROR] [07:18] load faction mar_sim_faction_monster sid 57149 Добавлено через 7 мин.: Собстно я не совсем понял механизм работы этих функций. Зачем при загрузке два раза вызывается функция STATE_Read() + ещё раз в конце), и зачем в конце загрузки игра занаво вызывает STATE_Write() для всех объектов, если мы загружаем а не сохраняем? Изменено 22 Октября 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Поделиться этим сообщением Ссылка на сообщение
*Shoker* 322 Опубликовано 23 Октября 2011 (изменено) Vano_Santuri А что тебе мешает сделать одну глобальную таблицу с подтаблицами? Типа: local NewsTbl = { ["all"] = { --\\ Общий канал "Текст новости", "Текст новости", ... }, ["freedom"] = { --\\ Свобода "Текст новости", "Текст новости", ... }, ... } А дальше можно получать рэндомный текст таким образом. local ntbl = NewsTbl["freedom"] --\\ получаем подтаблицу с текстами свободы local random_text = ntbl[math.random(#ntbl)] В итоге random_text будет равен случайному сообщению из таблицы freedom И тебе достаточно будет лишь менять имя таблицы в local ntbl, передавая её нужное строкове имя. C if-ами лучше не заигрывайся, а то на твоей предыдущей версии новостей из за них Lua Cheker виснул Ну и заполнять их аналогично можно, ты только учти что в table.insert первый аргумент это таблица как раз, куда ты будешь свой текст добавлять, тоесть если хочешь туда добавить текст, то пишешь так: table.insert(ntb, "текст") и всё Artos Спасибо за новую версию нет-пакетов И как тебе хватает терпения каждый раз их перелапатывать чуть ли не полностью, я б повесился давно Я их постараюсь проверить, отпишусь, спасибо По поводу STATE_Read\Write, я просто не понял зачем при загрузке сохранения, во первых функция STATE_Read вызывается 3 (!) раза за загрузку для всех объектов. А во вторых в конце загрузки при синхронизации происходить вызов STATE_Write (тоесть по сути во время загрузки сохранять все наши переменные) для всех объектов а потом опять STATE_Read (но уже для тех что на 1 локации с ГГ) И того 3 Read и 1 Write во время загрузки... зачем? Изменено 23 Октября 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Поделиться этим сообщением Ссылка на сообщение
*Shoker* 322 Опубликовано 23 Октября 2011 (изменено) Скриншоты не могу глянуть, интернет не позволяет, но как насчёт того (возможно не до конца тебя понял) local MsgTbl = {} function addToTbl(name,ti) if MsgTbl[name] == nil then MsgTbl[name] = {} end table.insert(MsgTbl[name], ti) end С помощью функции addToTbl() ты можешь добавить в MsgTbl нужный тебе текст к нужной группировке. Тоесть если тебе надо допустим добавить текст (или не тока текст, ti может быть и таблицой и чем угодно) к свободе, то ты просто пишешь addToTbl("freedom", <...>) Ну и соответственно получить таблицу свободы через такую функцию. function getFromTbl(name) if MsgTbl[name] == nil then return nil --\\ вернёт nil если ничего нету end return MsgTbl[name] end Сама таблица будет примерно как та, что я выше показывал. local MsgTbl = { freedom = { -- эту таблицу вернёт функция getFromTbl, name = freedom 1 = ..., 2 = ..., }, } Изменено 23 Октября 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Поделиться этим сообщением Ссылка на сообщение
*Shoker* 322 Опубликовано 25 Октября 2011 (изменено) Кто знает, почему в Сталкере разработчики, при определении расстояния от одного вектора к другому, используют преимущественно функцию v1:distance_to_sqr(v2) -- квадрат расстояния между v1 и v2, а не обычную? Изменено 25 Октября 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Поделиться этим сообщением Ссылка на сообщение
*Shoker* 322 Опубликовано 25 Октября 2011 (изменено) abramcumner Ну похоже что так Собстно я сейчас ищу методы ускорения определия дистанции ГГ до объекта. Есть таблица, там в среднем около 200 объектов - аномалий, и нужно каждый апдейт (возможны небольшие погрешности) сравнивать их дистанцию до игрока. Остановился на использовании distance_to_sqr, но потери времени всё равно очень большие, за 1 апдейт в среднем 600-900 "мсек" теряется (не знаю в чём определяется значение profile_timer()) Я вот думаю, каким макаром можно ещё это ускорить ... Изменено 25 Октября 2011 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Поделиться этим сообщением Ссылка на сообщение
*Shoker* 322 Опубликовано 27 Октября 2011 Artos Присоединяюсь к вопросу о флаге. > Ты прав, это 'мои грабли' А если не секрет, для чего они были необходимы. Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Поделиться этим сообщением Ссылка на сообщение
*Shoker* 322 Опубликовано 28 Октября 2011 Что такое постоянный колбек? Такого нету, есть функция update, которая вызывается несколько раз в секунду (зависит от fps) Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Поделиться этим сообщением Ссылка на сообщение