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

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


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

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

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

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

Shadowman, Monnoroch,

Может таблицу исключений по переодеванию перенести в "протектед_итемс", а в xrs_armor.script комментарием указать, где они находятся?

Это чтобы Архара всех VIP-персонажей в одном месте добавлял :)

А может вообще их уравнять с теми, чьи трупы нельзя убирать уборщику?

Или вообще ввести в конфиг непися какой-то особый атрибут protected или vip равный true или 1, и уже в коде уборщика и переодевания просто проверять наличие/значение этого артрибута? Тогда Архаре не нужно будет после добавления квестового непися помнить, что нужно его ещё и внести в два файла, да ещё и не ошибится при этом (любое движение несёт в себе вероятность ошибки )

 

P.S. Итерации по оптимизации закончились :crazy:

 

Arhara, даже если так - как ты относишься к тому, чтобы держать все списки исключений в одном файле "протектед_итемс" или введению в конфиг непися спецатрибутов "неубираемый" (protected_remove=1), "непереодевающийся" (protected_unchanged_clothes=1) ?

 

Monnoroch, о тормозах я подумал, но всё же переодевания не так часты, как и уборка трупов.

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

sapsan,

Трупы квестовиков меня мало волнуют - пусть пропадают, кроме основных 24. Если оставить всех - завалим зону... :lol: Сейчас этих квестовиков больше чем нормальных сталкеров.

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

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

sapsan, к сожалению, в каждом конкретном случае по логике - разные списки. Я уже думал об этом. Тут лучше пока сильно новшества не вводить. А где держать исключения - все равно, можно и в тот скрипт переносить.

 

 

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

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

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

Shadowman, кстати я - за.Надо бы правда все эксклюзивные случаи держать в кучке.

 

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

sapsan, А вот в конфиг - не вариант.Потому что медленное это дело - из конфига читать.

 

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

sapsan, Ну просто не нужно.Лучше все-таки табличку.

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

sapsan, уборщик срабатывает один раз при загрузке, а переодевание - рандомно. При серьезной боевке - оно может срабатывать очень часто, можешь сам легко убедиться, поставив метку в функцию check_armor, перед проверкой на наличие в имени секции названия outfit и на наличие запрещенных неписей по табличке excluded_npcs - загружаешь любой сейв, где есть вокруг неписи и что-то уже на локе происходило (боевка какая-нибудь), или покидай пару броников. Короче, лучше там из конфигов не читать ничего - молотит будь здоров.

В принципе, на крайняк всегда можно убрать какую-нибудь запятую или закомментить строчку в xrs_armor (или закомментить запуск в мотиваторе) и переодевание перестанет запускаться вообще :crazy:

 

Arhara, кстати, при уборке зависшего квестовика можно попробовать писать в нетпакет ГГ какую-нить переменную, в которой будет табличка, кого поубирало. Потому как в консоль выдавать - перезагрузился, - потерял; в ПДА ньюсами - тоже трется со временем. По идее, даже правильнее при гибели любого непися, участвующего в сюжете, можно такое проделывать. И сделать какую-нибудь приладу, чтобы проверять этот список и что-нибудь с ним делать (например, переспавнивать или проверять квесты, или еще чего).

 

=================================================================

 

Очень интересный случай со стволами описал вчера magnit:

Shadowman По порядку:

1. На АС появился после загрузки локации, после перехода с Радара, когда с Радара уходил никого в радиусе действия биорадара и ПДА не было

2. После появления ПДА пиликнуло что есть 5 НПС, обернулся в сторону Радара из за края локация вышло 5 НПС, все с ЛРками за спиной, шли с Радара на АС.

a923b7c8c98e354f11c964d70b0885704d525e45694169.jpg

3. После прохождения точки перехода для ГГ

3662684317420372c5e43b5a02af2e614d525e45694170.jpg

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

После загрузки перехода на ДТ было сообщение уборщика,что 5 стволов убрано с Радара, я думаю что эти вот стволы и были, если сэйв найду скину в личку.

 

 

Прошу прощения, что цитирую весь пост, но могут удалить, а это, похоже, поможет разобраться наконец с причиной появления стволов с кривыми вертексами.

У себя таких случаев не наблюдал, но поскольку сейчас практически не играю уже - и неудивительно.

А без сейва медитировать над кодом Бака (скорее всего) - не возьмусь :)

 

Дед, скорей всего, аддон Бака прячет стволы. Т.е. "в инвентаре" - можно проверить только на трупе, а при торговле - прячут (там есть разграничения оружия ближнего, среднего и дальнего действия, плюс гранаты, мед.препараты). Скорей всего, так и задумано.

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

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

Ссылка на комментарий
можно убрать какую-нибудь запятую

лучше воспользоваться проверенным способом "ЖОПА" ;)

медитировать над кодом Бака

И тут ты прав,даже я над его менеджером только помедитировать могу часов n+1 ...

Это почти бессмысленно - надо знать где ошибка.Либо быть мега скриптером :)

Посему опытным путем придется...

 

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

Дед, таблица приоритетов есть в конфигах - кстати опять же я считаю,что зря он туда это сунул.лучшеб таблички по скриптам сделал.но переделать никто кроме автора я думаю не возьмется - там путано все очень.

 

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

======

 

А про случай со стволами - не понимаю,как оно связано.Ведь level.name то поменялся!

Изменено пользователем Monnoroch
Ссылка на комментарий
помедитировать могу часов n+1

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

Нужно просто придумать методику проверки каждого события, раскомментировать всю отладку и ворочать.

У меня отладка была включена на самых основных моментах - никаких косяков не замечал.

level.name то поменялся!

Monnoroch, да, но очень уж странное совпадение, не находишь?

Есть еще вариант исключить эту ЛР300 - там у него предусмотрен вариант forbidden_weapons в конфигах. Наверное, нужно поставить

forbidden_weapons = wpn_lr300 во всех конфигах аддона и посмотреть, как это скажется на появлении оружия. Если прекратит вылетать по вертексам, то Архара был-таки прав. По сути, и в полуфинале этот вылет уже перестал быть критичным - перезагрузка сейва перед заходом на радар ведь помогает.

 

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

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

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

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

Shadowman, Monnoroch, табличка так табличка. Моё дело - предложить. :)

А по стволам - может уровень считается уровнем только в определённых границах координат и те неписи появились как бы вне уровня (вне "закона" скриптов)?

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

sapsan, нет.уровень он и есть уровень.так уж оно устроено.

 

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

На каждом уровне свой набор координат.

 

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

Shadowman, А про странность - чего только не бывает.Не у всех ж повально такое.

 

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

Shadowman, Даже если и не единичный - при чем тут менеджер?И почему именно радар?

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

Камрады, у меня вопрос по вылету:

[error]Description : Specified story object is already in the Story registry!

Насколько я понимаю, вылет появляется потому что добавляется переход Бар-Арм.Склады, причем вроде 2 раза. Этот экшен <action>sak.add_new_military</action> в dialogs_bar.xml встречается дважды. А ещё этот переход в алспавне есть... :huh:

Кстати, может вообще оставить переход без сида и не будет проблем с 2 одинаковыми сидами по причине их отсутствия :crazy:

 

Получается, что можно купить этот переход у информатора, а потом его выдает бармен за флешку Круглова.

Изменено пользователем dimos
Цензура ограничивает творчество © by me
Ссылка на комментарий

dimos, а откуда уверенность, что именно этот переход? И он в обоих случаях с одинаковым сидом? Процитируй, что в аллспавн?

Скорей всего - спавн перехода по условию поршня, выдаваемого в диалоге. Или с начала НГ?

 

dimos, так самое главное - это то, что этот переход в аллспавн и с тем же сидом. Вот потому и вылазит "already in the Story registry!"

Т.е. либо из аллспавн-а убирать, либо из экшенов

 

Данные о том сколько ремкомплектов испозовалось для конкретного ствола можно по идее писать в нетпакет

Ray, такое сделать теоретически можно, используя сид ствола. И, например, удалять переменную после продажи этого ствола.

Тогда уже мы вплотную подходим к уникальности каждого ствола в игре :)

Альтернативой, кстати, является запись нетпакета на сам ствол. Но это уже маразм, имхо.

Но тут есть элемент непредсказуемости: откуда нам знать, сколько стволов игрок будет юзать за игру?

Тогда, наверное, нужно делать еще один объект для записи на него этих данных, иначе завалим вроде как достигнутый наконец баланс с нетпакетом.

Вообще-то это могло бы быть альтернативой усложненному ремонту. ...И трудозатраты вроде не особо велики.

 

------

Ну да, я именно это и говорю. Сид в игре уникален - поэтому именем переменной и будет сам сид (story_id), а значением - кол-во ремкомплектов.

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

При использовании ремкомплекта будет проверка и запись, при ремонте / продаже - удаление. Все логично.

 

------

Ты про Деда? Ну, никогда нельзя нравиться всем :D

Можешь сделать свой мод - и всего-то делов :ny_z_1:

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

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

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

Shadowman, писать в пакет только те стволы, которые хотя бы раз ремонтировались ремкомплектом и после ремонта его у ремонтника (или продажи - вот это не знаю как сделать) удалять из нетпакета. По идее за игру игрок юзает небольшое количество стволов - не думаю, что сильно перегрузим нетпакет (надо ведь писать только сид/айдишник и количество юзания для него ремкомплекта)

Про уникальность каждого объекта знал, но не знал что это называется сидом (для меняя это айдишник - ID).

--------------------

Shadowman, да без разницы как и куда (тебе виднее - я в этом не шарю, вот в ремонте дела получше обстоят :ny_ph34r_1: ) - это пока только идея - и ее уже восприняли в штыки. :ny_ph34r_1:

--------------------

Будет время - попробую. В первую очередь хочу сделать ремонт броньки за время, а не мгновенно (по идее делов часа на два максимум), а потом можно и эту фишку прикрутить (с твоей безвоздмездной и неоценимой помощью :ny_z_1: . С ремонтом то я разберусь, а вот с нетпакетом лучше воспользоваться услугами лучшего в мира знатока нетпакета :ny_ph34r_1: ).

Еще в планах есть апгрейд оружия - он уже процентов на 50-60 сделан: новые конфиги оружия, почти дописаны скрипты. Осталось прописать диалоги, описания для новых стволов, создать статью в ПДА и все протестить. Но сейчас у меня сессия - должников много, принимаю экзамены/зачеты почти каждый день - некогда блин.

Скрипты ремонта от меченый(стрелок) не использую - делаю по своему.

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

AMD Ryzen 5 3600 Box, MB Asus Prime B450-Plus, 2x8 Gb Kingston DDR4-3200, MSI GeForce GTX 1060 3GB, SSD Samsung 840 EVO 120GB, Kingston A400 120 Gb, Samsung HD103SJ SATA2, Samsung HD502HJ SATA2

 

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

Galil, про лайт-версию писал я (причем, чисто теоретически, просто подал идею). Имел в виду вариант с облегченными текстурами и файлом иконок 2048х2048 в основном. К скриптам это тоже можно частично отнести (например, отключить пару фич, но это все в чистой теории).

Самое интересное - кто это будет делать. Явно это должен быть человек, которому это нужно самому. :)

 

Ray, работа по оптимизации основных скриптов нужна в Соли как воздух. И это никоим образом не может относиться к какой-то лайт-версии. Это нужно всем без исключения. Если подтянуть для начала самое криво написанное - будет отлично, а если всё - то это вообще почти недостижимый идеал.

 

Ray, вот именно! Я как раз это и имел в виду, когда намекал про желающих поработать над кодом.

Вот и Сапсан уже подогнал мне правленный хрс_армор с учетом скрипта амк. Только вот погонять бы чуток...

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

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

Ссылка на комментарий
sapsan, гы,красиво ты с табличкой :)

но все таки в данном случае оно того не стоит ..

Это я больше для примера ввёл. Ведь вы оба много кода пишите или ещё будете писать для сталкера и не только. А этот способ вызова функций является очень оптимальным. Да и переделать существующий код можно под эту "технику".

 

инфопорции - это куча методов выполнять.

опять же - не стоит оно того.

Ну я так и написал - можно и не использовать. Хотя куча методов будет выполняться не чаще 1 раза в секунду да ещё и при нужном условии (слабом здоровьи, высокой радиации или истощении).

 

Согласен, тут Monnoroch вроде немного недосмотрел, но на первый взгляд это можно исправить так

В моём файле это уже исправлено. А что не досмотрел, то я сам конечный вариант не сразу написал - часа два над ним посидел :)

 

По вызову функций - это, кажись, есть и в Делфи, и в С++. Лишь бы мог переменной присвоить функцию или ссылку на неё.

 

Shadowman, есть в скриптах - ищи по "](". Но не подсмотрел в сталке, а где-то вычитал.

 

[spoiler=За счёт чего появляется выигрыш при использовании массива функций или других значений]Это быстрее только в случае замены if-в или switch-й этим массивом. В случае if-в или switch-й идёт сравнение по всей их цепочке if ... else до момента пока не выполнится одно из условий-сравнений, а в случае массива сразу находится нужная функция. Вот на отсутствии этой цепочки проверок и осуществляется экономия.

Ну и работает это, конечно, только в случае сравнения с константными значениями, которые можно записать как ключи массива (или хеш-массива - в некоторых языках программирования строка не может быть ключем обычного массива, но в специальных хеш-массивах может). Если же использовать вместо строковых ключей числовые константы, то выигрыш будет ещё чуть больше из-за отсутствия работы со строками.

 

Если же функции выполняются без предварительной цепочки проверок, то смысл в этом массиве пропадает.

 

В том скрипте всего две проверки, а если их десятки... В критических участках кода эти мизерные выиграши дадут существенный выигрыш.

 

Этот выигрыш эквивалентен переходу от пачки ифов с последующим присвоеним одной и той же переменной какого-то значения к присвоению через таблицу всего одной строкой. При загрузке кода транслятор потратит чуть больше времени на проглатывание таблицы, зато потом присвоение через таблицу будет происходить много быстрее.

 

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

sapsan, Мнэээ...хочется выразить свою огромнуб радость,что тут наконечцто собрался коллектив,занявшийся оптимизарией (рационализацией и утилизицией :D )

 

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

sapsan, Тех кто в онлайне:

for k,v in pairs(db.storage) do

object_all = level.object_by_id(k)

 

Тут даже проверку if obj and isStalker(obj) - не надо.но это ТОЛЬКО сталкеры,насколько я знаю...

 

====

 

Эту штуку надо по меньшей мере в сотне-другой мест в скриптах вставлять!

 

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

=====

 

Моожет создать архив "оптимизированные скрипты", кинуть в шапку и чтобы мы работали уже с ним?и не изобретали велосипеды каждый раз по невнимательности?

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

Ray, Слушай,есть тема ковырялка.Там миллионы раз все рассказывалось.

 

db.actor.psy_health - это на чтение пси-здоровье,а на запись прирост пси-здоровья.

Учи матчасть.

 

И пиши

 

db.actor.psy_health=-0.5

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

Всё, что ниже - только мои догадки :)

Залез я в xrs_armor.script и вот что заметил:

- В функции add_to_binder() есть привязка неписю "способа мышления" (evaluator_see_useful_armor()) и там (add_to_binder()) в исключениях отсутствуют какие-то одиночки (stranger), для которых также отсутствует запись в таблице armors_by_community и остальных таблицах. Таким образом им привязывается мышление, но данных по ним нет. И по ходу выполнения должен быть завис или вылет в функции check_armor() в проверке if suits_to_visuals[com][vis] then так как и в таблице suits_to_visuals их нет.

 

- В таблице armors_by_community запись для экологов пустая, хотя их нет в исключениях в том же add_to_binder(), а при выполнении функции select_next_visual() они отсекаются проверкой table.getn(armors_by_community[com])>0.

 

Таким образом как минимум нужно ввести дополнительную проверку так:

        if suits_to_visuals[com] and suits_to_visuals[com][vis] then

Кроме того, если уж экологи должны иметь только свой визуал, тогда можно добавить ещё визуалов эколога в таблицу suits_to_visuals["ecolog"], если имеются новые, и сам разрешенный визуал в таблицу armors_by_community["ecolog"].

 

Если нужно, чтобы те одиночки переодевались, нужно убрать их из исключения в add_to_binder() и заполнить для них все таблицы.

 

Кроме того есть ещё такая мысль - можно ведь исключать неписей по имени не во время npc_update(binder) и evaluator_see_useful_armor:evaluate() (если я правильно понимаю - эти функции вызывается только у тех неписей, к которым было прикручено мышление в add_to_binder()), а ещё во время того самого прикручивания мышления в add_to_binder(), что там так и делается для двух товарищей (object:name()=="mil_stalker0012" or object:name()=="yantar_ecolog_general"). В то же время в функции update() эту проверку нужно оставить.

 

Самый кардинальный и простой метод - отрезать :crazy: В этом случае нужно просто и экологов, и тех одиночек (stranger) поместить в исключения в функции add_to_binder() как целые сообщества (community). Но это самый нежелательный вариант.

 

Ну и на последок - нужно провести ревизию таблицы suits_to_visuals на наличие визуалов, которые там прописаны.

 

Вот вариант файла с дополнительной защитой на будущее, исключёнными одиночками (stranger) и разрешением переодеваться экологам в косюмы экологов.

 

 

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

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

Вот исправленный файл.

Ray, добавь его в архив.

Arhara, если ты уже заполнял этот файл, то просто вместо

local random_news_number

пропиши

local random_news_number = 1

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

sapsan,

есть привязка неписю "способа мышления"

Это не то что нормально,это необходимо.Ему этот эвалуатор привязывается как бы с потивоположным знаком.Там от этого эвалуатора в общем то только название.Не смотри на это...

 

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

sapsan, По сути я продолжаю иметь простое мнение - перепишем таблицу попроще,без перекрашивания в броню своей группировки и т.п. ,допишем все,что есть в солянке,но нет в этой таблиц - вот и решим проблему.

И никакие охотники в исклах сидеть не должны.

 

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

Ray, Короче как надо делать - вешаем на обычный квест документ.Как только выполняем - выдается инфопоршен конца квеста - а у нас коллбэк на выдачу инфо - и мы в этом коллбэке переделываем костюмчик.

Никакого апдейта,все счастливы.Комп доволен,юзеры не плачут.

И нечего тут извращения выдумывать.(ибо это извращение само по себе - в апдейте такое делать)

 

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

При том делаем в бинд_сталкере таблицу:

 

(вери биг спасибо sapsan у :) )

 

local infos = {
"my_info_1" = true,
"my_info_2" = true,
}

local fncs_by_info = {
"my_info_1" =  function ()...... end,
"my_info_2" = function ()...... end
}

и вызываем:

function actor_binder:on_info(info)
if infos[info] then
 fncs_by_info[info]
end
end

 

И так же надо переделать все и в on_take и on_drop

ато вы посчитайте сейчас,сколько там проверок....

 

=====

 

угу,конечно,так бстренько сяк актора переназначил,ага...

 

==========

 

или так:

local fncs_by_info = {
"my_info_1" = {true, function ()...... end},
"my_info_2" = {true,function ()...... end)}
}

и вызываем:

function actor_binder:on_info(info)
if fncs_by_info[info][1] then
 fncs_by_info[info][2]
end
end

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

Wlad777, подозреваю, что всё же есть такие неписи и кроме ГГ.

arhara_dialog.script:

--' ГГ друг снайперов
function friend_community(actor, npc)
db.actor:set_character_community("stranger", 0, 0)
end

dialog_manager.ltx:

[dm_action_info_18]
wounded = false
level = l05_bar
npc_community = stranger
category = cool_info

[dm_action_info_19]
wounded = false
level = l05_bar
npc_community = stranger
category = cool_info

stable_dialog_manager.xml:

- <string id="dm_action_info_18">
  <text>Эта территория теперь контролируется "Долгом", и закон здесь - правила "Долга". Мы контролируем границы зоны и остужаем горячие головы: подорванные сюда целыми составами приезжают, любители романтики... а потом гибнут пачками в первый же день.</text> 
  </string>
- <string id="dm_action_info_19">
  <text>Ты на нашей перевалочной базе бывал? Она, правда, не только наша - тут много кого встретить можно. Главное, место хорошее, без дряни всякой, и все новости о Зоне сюда стекаются. Почти всегда чего-нибудь полезное услышать можно или просто с народом за жизнь потрепаться. Жаль только, Лысый с группой позавчера ушёл - так я с ним в этот раз и не свиделся.</text> 
  </string>

 

 

Monnoroch, а так не проще будет:

function actor_binder:on_info(info)
if fncs_by_info[info] then
fncs_by_info[info]()
end
end

?

 

И по колбеку на инфопорцию как избавление от апдейта ты прав.

 

Я там в лоб скопировал. Теперь выполнится только один раз.

Аргументы - не нужно иметь и синхронизировать две таблицы.

 

fncs_by_info[info] - это как-бы переменная, которая имеет в себе или ссылается на функцию

fncs_by_info[info]() - это уже вызов самой функции

 

Monnoroch, проверил - точно один раз.

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

sapsan, можт и проще,но я не уверен,что заработает....ну просто перестраховываюсь.

=========

неее,нельзя так - тогда fncs_by_info[info] 2 раза выполнится.

 

знаю,что прав,я бы не бушевал тут возмущенно пару страниц назад,если б не знал :)

 

Теперь выполнится только один раз.

Ты уверен?

Если да - я согласен.Но я пока не уверен...

 

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

sapsan,

Аргументы - не нужно иметь и синхронизировать две таблицы.

Да не,я просто сначала прочитал "не прав"...

 

=====

 

ну если точно 1 раз - проверь на практике - то я согласен полностью,да.

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

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