TRAMP14 1 Опубликовано 30 Марта 2011 Поделиться Опубликовано 30 Марта 2011 Напшите пожалуйста пример как снять и потом записать характеристики оружия через нет пакет. Т.е. сначала снять хар-ки какого либо оружия затем через некоторое время записать эти хар-ки в другое оружие (модификацию). Хочу сделать чтобы модишикации оружия постепенно превращались в само оружие но где найти полный список хар-к нетпакета для оружия незнаю Ссылка на комментарий
HellRatz 2 873 Опубликовано 30 Марта 2011 Поделиться Опубликовано 30 Марта 2011 Всем привет. Объясните пожалуйста по пунктам, как заставить НПС встать на путь (который я задал в way) и переходить между локациями по нему? (Если такое возможно). Суть: Спавнится отряд на Янтаре, у всех такая логика [logic] active = otrad_kamp@perviy_put [otrad_kamp@perviy_put] home_min_radius = 0 home_max_radius = 0 on_info = {+doyti_do_rostka} otrad_kamp@vtoroy_put [otrad_kamp@vtoroy_put] path_home = putdva_walk meet = no_meet home_min_radius = 0 home_max_radius = 0 on_info = {+tocka_odin_done} remark@postovoy [remark@postovoy] anim = guard target = actor meet = meet По пути putdva_walk они должны идти с Янтаря на Росток. Но они почему то не встают на путь, и идут куда попало. или же все дело в том, что они не могут перейти через локации? Объясните пожалуйста. GTA 3 MAP X-Ray | NFS U:2 MAP X-Ray | RTCW MAP X-Ray | L2D | Раритетные моды на моем облаке — на память о былом. Ссылка на комментарий
PavelSnork 3 Опубликовано 30 Марта 2011 Поделиться Опубликовано 30 Марта 2011 Ребята, помогите написать сткрипт. В функции мне нужно запустить таймер, а через 10 секунд его остановить. И еще нужно, чтоб во время этого запущенного таймера нельзя было использовать продукты питания. Сталкер ЗП. Жду ли я Сталкер 2? Хм... Ссылка на комментарий
speczadanie 0 Опубликовано 31 Марта 2011 Поделиться Опубликовано 31 Марта 2011 Как можно наиболее рационально скриптом сосчитать количество всех предметов в инвентаре у игрока, название которых начинается с "af_" ??? Ссылка на комментарий
Stalk15 27 Опубликовано 31 Марта 2011 Поделиться Опубликовано 31 Марта 2011 (изменено) speczadanie function d() local cnt = db.actor:object_count() local d = 0 for i=0, cnt-1 do local Item = db.actor:object(i) if string.find(Item:section(), "af_") then d = d + 1 end end return d end Изменено 31 Марта 2011 пользователем Stalk15 Ссылка на комментарий
Министр 3 Опубликовано 31 Марта 2011 Поделиться Опубликовано 31 Марта 2011 (изменено) TRAMP14, посмотри АМКшные ф-ии для чтения/записи пакетов, в частности get_weapon_data и set_weapon_data. PavelSnork, непонятно, у тебя сам таймер есть или нет? speczadanie, function rtn_af_cnt() local count = 0 db.actor:iterate_inventory(function (dummy, item) if string.find(item:section(), "af_") then count = count + 1 end end, db.actor) return count end А вообще такие вещи давно пора бы знать, тем более поиск по форуму никто не отменял. Изменено 31 Марта 2011 пользователем Министр Ссылка на комментарий
SkyLoader 53 Опубликовано 31 Марта 2011 Поделиться Опубликовано 31 Марта 2011 Народ, помогите плз. Я хочу заспаунить турель из огсе, но она не спаунится, если место спауна онлайн. Спаун происходит через ф-цию [white]create_turret()[/white]. Вот так создаю турель: turret_mgun.create_turret("turret_nato", "l06_rostok", vector():set(-84.12,0.9,140.35), "killer", "", 90, 90) Текст скрипта turret_mgun.script function bind(obj) -- printf("turret_mgun.bind") local ini = obj:spawn_ini() if ini == nil or not ini:section_exist("logic") then abort("turret '%s' must have logic", obj:name()) end obj:bind_object(turret_binder(obj, ini)) end class "turret_binder" (object_binder) function turret_binder:__init(obj, ini) super(obj) self.ini = ini self.initialized = false self.loaded = false end function turret_binder:reinit() object_binder.reinit(self) db.storage[self.object:id()] = {} self.st = db.storage[self.object:id()] self.heli = self.object:get_helicopter() self.object:set_callback(callback.helicopter_on_hit, self.on_hit, self) end function turret_binder:update(delta) object_binder.update(self, delta) if not self.initialized and db.actor ~= nil then xr_logic.initialize_obj(self.object, self.st, self.loaded, db.actor, modules.stype_heli) self.initialized = true end if self.st.active_section ~= nil then xr_logic.issue_event(self.object, self.st[self.st.active_scheme], "update", delta) end self:check_health() end function turret_binder:net_spawn(data) if not object_binder.net_spawn(self, data) then return false end self.se_obj = alife():object(self.object:id()) self.heli:SetfHealth(self.se_obj.health) self.st.alive = self.se_obj.health > 0.005 db.add_turret(self.object) return true end function turret_binder:net_destroy() db.del_turret(self.object) object_binder.net_destroy(self) end function turret_binder:net_save_relevant() return true end function turret_binder:save(packet) object_binder.save(self, packet) xr_logic.save_obj(self.object, packet) end function turret_binder:load(packet) object_binder.load(self, packet) xr_logic.load_obj(self.object, packet) end function turret_binder:on_hit(power, impulse, hit_type, enemy_id) dbglog("hit: power=%f impulse=%f hit_type=%d enemy_id=%d health=%f", power, impulse, hit_type, enemy_id, self.heli:GetfHealth()) self.se_obj.health = self.heli:GetfHealth() local enemy = level.object_by_id(enemy_id) if enemy ~= nil and self.st.active_section ~= nil then xr_logic.issue_event(self.object, self.st[self.st.active_scheme], "hit_callback", self.object, power, nil, enemy, nil) end end function turret_binder:check_health() if self.st.alive and self.heli:GetfHealth() <= 0.005 then explode_turret(self.object) end end function explode_turret(turret) local heli = turret:get_helicopter() heli:ClearEnemy() heli:Die() local se_obj = alife():object(turret:id()) se_obj.health = 0 db.storage[turret:id()].alive = false utils2.deferred_release(turret:id(), 5) end function is_friendly_turret(npc, turret, position) -- сначала выясним, турель ли это вообще. local k,v if turret == nil then -- ссылки на объект нет. что ж, бывает, попробуем -- определить по месту расположения. for k,v in pairs(db.turret) do local test_position = v:position() if test_position.x == position.x and test_position.z == position.z then turret = v break end end if turret == nil then return false end elseif (turret:section() ~= "turret_mgun") and (turret:section() ~= "turret_army") and (turret:section() ~= "turret_nato") then return false end local community = db.storage[turret:id()].community if community == nil then return false end if utils2.community_relation(community, npc) > -400 then return true end return false end function create_turret(turret_section_name, level_name, position, community, owner_gulag, search_dist, hunt_actor_prob, explode_dist, spawner) local packet1 = utils2.packet_pool_get() local packet2 = utils2.packet_pool_get() local level_vertex_id, game_vertex_id = utils2.get_top_graph_ids(level_name) local se_obj = alife():create(turret_section_name, position, level_vertex_id, game_vertex_id) if se_obj == nil then abort("can't create '%s' at (%f,%f,%f)") end -- лучше через table.concat() local custom_data = "[logic]\nactive = turret\n[turret]\n" if community ~= nil then custom_data = custom_data.."community = "..community.."\n" end if owner_gulag ~= nil then custom_data = custom_data.."owner_gulag = "..owner_gulag.."\n" end if hunt_actor_prob ~= nil then custom_data = custom_data.."hunt_actor_prob = "..tostring(hunt_actor_prob).."\n" else custom_data = custom_data.."hunt_actor_prob = 50\n" end if search_dist ~= nil then custom_data = custom_data.."search_dist = "..tostring(search_dist).."\n" else custom_data = custom_data.."search_dist = 90\n" end if explode_dist ~= nil then custom_data = custom_data.."explode_dist = "..tostring(explode_dist).."\n" else custom_data = custom_data.."explode_dist = 1\n" end if spawner ~= nil then custom_data = custom_data.."[spawner]\ncond = "..spawner.."\n" end se_obj:STATE_Write(packet1) local dead_space = packet2:w_tell() -- cse_alife_dynamic_object utils2.packet_copy(packet2, packet1, 18) packet1:r_stringZ() packet2:w_stringZ(custom_data) utils2.packet_copy(packet2, packet1, 8) -- cse_visual packet2:w_stringZ(packet1:r_stringZ()) utils2.packet_copy(packet2, packet1, 1) -- cse_motion packet2:w_stringZ(packet1:r_stringZ()) -- cse_ph_skeleton packet2:w_stringZ(packet1:r_stringZ()) utils2.packet_copy(packet2, packet1, 3) -- cse_alife_helicopter packet2:w_stringZ("idle") packet2:w_stringZ("$no_sound") -- se_turret_mgun packet2:w_float(1.0) se_obj:STATE_Read(packet2, packet2:w_tell() - dead_space) utils2.packet_pool_put(packet1) utils2.packet_pool_put(packet2) end function create_dir_turret(turret_section_name, level_name, position, community, owner_gulag, search_dist, hunt_actor_prob, explode_dist, spawner) local packet1 = utils2.packet_pool_get() local packet2 = utils2.packet_pool_get() local level_vertex_id, game_vertex_id = utils2.get_top_graph_ids(level_name) local se_obj = alife():create(turret_section_name, position, level_vertex_id, game_vertex_id) if se_obj == nil then abort("can't create '%s' at (%f,%f,%f)") end -- лучше через table.concat() local custom_data = "[logic]\nactive = turret\n[turret]\n" if community ~= nil then custom_data = custom_data.."community = "..community.."\n" end if owner_gulag ~= nil then custom_data = custom_data.."owner_gulag = "..owner_gulag.."\n" end if hunt_actor_prob ~= nil then custom_data = custom_data.."hunt_actor_prob = "..tostring(hunt_actor_prob).."\n" else custom_data = custom_data.."hunt_actor_prob = 50\n" end if search_dist ~= nil then custom_data = custom_data.."search_dist = "..tostring(search_dist).."\n" else custom_data = custom_data.."search_dist = 90\n" end if explode_dist ~= nil then custom_data = custom_data.."explode_dist = "..tostring(explode_dist).."\n" else custom_data = custom_data.."explode_dist = 3\n" end if spawner ~= nil then custom_data = custom_data.."[spawner]\ncond = "..spawner.."\n" end se_obj:STATE_Write(packet1) local dead_space = packet2:w_tell() -- cse_alife_dynamic_object utils2.packet_copy(packet2, packet1, 18) packet1:r_stringZ() packet2:w_stringZ(custom_data) utils2.packet_copy(packet2, packet1, 8) -- cse_visual packet2:w_stringZ(packet1:r_stringZ()) utils2.packet_copy(packet2, packet1, 1) -- cse_motion packet2:w_stringZ(packet1:r_stringZ()) -- cse_ph_skeleton packet2:w_stringZ(packet1:r_stringZ()) utils2.packet_copy(packet2, packet1, 3) -- cse_alife_helicopter packet2:w_stringZ("idle") packet2:w_stringZ("$no_sound") -- se_turret_mgun packet2:w_float(1.0) se_obj:STATE_Read(packet2, packet2:w_tell() - dead_space) utils2.packet_pool_put(packet1) utils2.packet_pool_put(packet2) ---------------direction se_obj.direction = vector():set(-1, 0, 0) --------------- end ----------------------------------------------------------------------- class "se_turret_mgun" (cse_alife_helicopter) function se_turret_mgun:__init(section) super(section) self.spawner_present = false self.health = 1.0 self.direction = vector():set(0, 0, 0) end function se_turret_mgun:can_switch_offline() return cse_alife_helicopter.can_switch_offline(self) end function se_turret_mgun:can_switch_online() if self.health <= 0.005 then return false end if self.spawner_present == nil then local ini = self:spawn_ini() self.spawner_present = ini:section_exist("spawner") end if self.spawner_present == true then return cse_alife_helicopter.can_switch_online(self) end return xr_spawner.check_spawn(self) end function se_turret_mgun:STATE_Read(packet, size) cse_alife_helicopter.STATE_Read(self, packet, size) self.health = packet:r_float() self.direction = packet:r_vec3() end function se_turret_mgun:STATE_Write(packet) cse_alife_helicopter.STATE_Write(self, packet) packet:w_float(self.health) packet:w_vec3(self.direction) end Как мне вынести турель в онлайн? Ссылка на комментарий
_Призрак_ 11 Опубликовано 31 Марта 2011 Поделиться Опубликовано 31 Марта 2011 А если заспавнить в оффлайн куда нибудь, а потом установить нужную позицию Freedom Ссылка на комментарий
Lagos 688 Опубликовано 31 Марта 2011 Поделиться Опубликовано 31 Марта 2011 Ребят,помогите!Нажимаю распаковать all.spawn: Официальный сайт . Ссылка на комментарий
SkyLoader 53 Опубликовано 31 Марта 2011 Поделиться Опубликовано 31 Марта 2011 _Призрак_, а методов смены позиции вроде нет у турелей. Они на классе вертолета. Ссылка на комментарий
panzyuza 41 Опубликовано 31 Марта 2011 Поделиться Опубликовано 31 Марта 2011 кто нибудь.Разьясните понятия в сексиях респавнера файла all.spawn.Просто сделал респавнер,а у меня заместо троих основных появилось 12 человек.Причем сразу. AVS_LOCATION_MOD Ссылка на комментарий
_Призрак_ 11 Опубликовано 31 Марта 2011 Поделиться Опубликовано 31 Марта 2011 SkyLoader У меня появилась дурацкая, но идея. А если заспавнить тураль под карту, а потом, когда нужно при помощи логики хели_мув переместить ее на нужное место? Турель ты же говоришь сделана на основе вертолета, а вертушки на агропроме так и сделаны - заспавнены под локацией и когда нужно, они вылетают Freedom Ссылка на комментарий
TRAMP14 1 Опубликовано 31 Марта 2011 Поделиться Опубликовано 31 Марта 2011 Заспавнил несколько зомбей на кордоне скриптом. Поймал вылет: Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ...w of chernobyl\gamedata\scripts\smart_terrain.script:1137: attempt to index local 'obj' (a nil value) Я в смарт террейны не лазил только бинд сталкер и мой скрипт спавна. Как исправить? Ссылка на комментарий
SkyLoader 53 Опубликовано 31 Марта 2011 Поделиться Опубликовано 31 Марта 2011 _Призрак_, ну так на это ж требуется время, чтобы турель пролетела. + я хочу сделать динамический спавн, .т.е. в любой момент спавнить турель. А вертолеты летают по точкам в алл.спавне. Ссылка на комментарий
_Призрак_ 11 Опубликовано 31 Марта 2011 Поделиться Опубликовано 31 Марта 2011 Ну так ты установи скорость полета турели 99999. Да и можно в логике поставить условие на инфопоршень или на выполенение функции Freedom Ссылка на комментарий
SkyLoader 53 Опубликовано 31 Марта 2011 Поделиться Опубликовано 31 Марта 2011 Ну эту проблему возможно можно решить. Осталась одна: нужно найти метод скриптового назначения точки полета. Ибо через логику не получится сделать, потому что вертолеты летают по точкам в алл.спавне А я хочу сделать динамический спавн. Ссылка на комментарий
PavelSnork 3 Опубликовано 31 Марта 2011 Поделиться Опубликовано 31 Марта 2011 PavelSnork, непонятно, у тебя сам таймер есть или нет? У меня таймера нету. Ответте, пожалуйста, на мой предыдущий пост. Жду ли я Сталкер 2? Хм... Ссылка на комментарий
speczadanie 0 Опубликовано 1 Апреля 2011 Поделиться Опубликовано 1 Апреля 2011 Есть скрипт. Игра нещадно вылетает при попытке его чтения с логом типа "нет такого файла", то есть, как я понял, тут ошибка синтаксиса... Сам найти не могу. В чём проблема? local nano = 0 local outfit = db.actor:item_in_slot(6) function update() if not outfit then nano=0 end if outfit and (outfit="novice_outfit" or outfit="bandit_outfit" or outfit="killer_blue_exoskeleton" or outfit="svoboda_exoskeleton" or outfit="monolit_exoskeleton" or outfit="broken_exoskeleton" or outfit="monolit_scientific_outfit" or outfit="bandit_master_outfit" or outfit="soldier_outfit" or outfit="bandit_veteran_outfit") then nano=0 end if outfit and (outfit="killer_outfit" or outfit="monolit_outfit" or outfit="svoboda_light_outfit" or outfit="dolg_outfit" or outfit="dolg_black_exoskeleton" or outfit="merc_scientific_outfit" or outfit="neytral_exo_antigas_outfit" or outfit="military_outfit" or outfit="military_stalker_commander_outfit") then nano=1 end if outfit and (outfit="specops_outfit" or outfit="stalker_outfit" or outfit="exo_outfit" or outfit="svoboda_heavy_outfit" or outfit="dolg_scientific_outfit" or outfit="freedom_scientific_outfit" or outfit="vstalker_outfit") then nano=3 end if outfit and (outfit="scientific_outfit" or outfit="ecolog_outfit" or outfit="protection_outfit") then nano=5 end update_container() end function update_af_num() local cnt = db.actor:object_count() local d = 0 for i=0, cnt-1 do local Item = db.actor:object(i) if string.find(Item:section(), "af_") then d = d + 1 end end return d end function update_container() local af_num = update_af_num() local psy_hit = hit() psy_hit.direction = vector():set(0,0,0) psy_hit.impulse = 0 psy_hit.draftsman = db.actor if nano < af_num then psy_hit.power = 0.0005 psy_hit.type = hit.radiation db.actor:hit(psy_hit) end if nano >= af_num then psy_hit.power = 0 psy_hit.type = hit.radiation db.actor:hit(psy_hit) end end Ссылка на комментарий
TRAMP14 1 Опубликовано 1 Апреля 2011 Поделиться Опубликовано 1 Апреля 2011 Если "нет такого файла" то при чём тут ошибка синтаксиса? Дай весь лог вылета Ссылка на комментарий
speczadanie 0 Опубликовано 1 Апреля 2011 Поделиться Опубликовано 1 Апреля 2011 Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ....e.r.-1-1\gamedata\scripts\my_updating.script:21: attempt to index global 'my_container' (a nil value) Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти