|
|
|
|
[СТАТЬЯ] Синхронизация Данных.
|
|
FkoFF | Дата: Четверг, 01 Июля 2010, 00:49:15 | Сообщение # 1 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| Приветствую тебя, мой читатель. Сегодня я расскажу тебе как решить тысячу и одну проблему, связанную с такими вещами как отображение иконок героев в мультибоарде, награды за уничтожение юнитов, отображение иконок предметов в мультибоарде и все, требующее привязки каких-либо значений к определенным объектам. Итак, самый простой способ решить все вышеперечисленные проблемы, как понятно из названия темы, создание синхронизации данных, проще говоря - базы данных. К любому объекту можно привязать неограниченное количество данных, но мы, в нашем примере, ограничимся синхронизацией двух показателей, типа юнита и строки к иконке.
Итак, как сказанно в предисловии - синхронизировать мы будем иконки по типу юнита. Создаем в редакторе переменных следующие строки.
DB_Heroes[array] - Переменная по типу "тип объекта" с пометкой "массив" DB_HeroesIcons[array] - Переменная по типу "строка" с пометкой "массив" далее, в триггер, можно при инициализации карты, можно в отдельный триггер на прошествие времени - инициализировать базу данных следующим образом. К примеру, у нас будет всего четыре героя, а именно: Lich, Tauren Chieftan, Paladin, Demon Hunter В триггер добавляем следующие строки. set DB_Heroes[1] = Lich set DB_Heroes[2] = Tauren Chieftan set DB_Heroes[3] = Paladin set DB_Heroes[4] = Demon Hunter Для удобства ставим пустую коммент строку. set DB_HeroesIcons[1] = ReplaceableTextures\CommandButtons\BTNLichVersion2.blp set DB_HeroesIcons[2] = ReplaceableTextures\CommandButtons\BTNHeroTaurenChieftain.blp set DB_HeroesIcons[3] = ReplaceableTextures\CommandButtons\BTNHeroPaladin.blp set DB_HeroesIcons[4] = ReplaceableTextures\CommandButtons\BTNHeroDemonHunter.blp Принципиально важно лишь то, что числа массива должны совпадать, это и служит синхронизацией данных. Теперь, допустим, можно развить тему и, например, добавить в ники игроков имена нужных героев, но не те, что есть по умолчанию (ссылка "Hero Name") а, сокращенные варианты или, допусим, раскрашенные. Потребуется еще одна переменная DB_HeroesNames[array] -переменная по типу "Строка", с пометкой "массив". Раздаем значения: set DB_HeroesNames[1] = Леденец set DB_HeroesNames[2] = Рогатый set DB_HeroesNames[3] = Cвятоша set DB_HeroesNames[4] = Илидашко Теперь о работе с базами данных. В основном это делается с помощью циклов (For loop integer DB from 1 to HeroDatabaseSize) где HeroDatabaseSize целочисленная переменная, ссылается на максимальный размер базы героев, для нейтральных крипов - отдельное значение, для предемтов - отдельное и так далее. DB - так же, целочисленная переменная. На примере с иконками героев и добавлением их в мультибоард: Generic unit продает боевую единицу Boolean Comparison: Sold unit is Герой = да. Actions: For Each Integer DB from 1 to HeroesDatabaseSize do actions: if\then\else: Unit-type of sold unit = DB_Heroes[DB] then: Меню Паузы: установить значение для строки (нужная строка) в столбце (нужный столбец) = DB_HeroesIcons[DB] Теперь, в этом же триггере - добавим к имени игрока - зарезервированное "условное" имя героя следующей строкой: Игрок: Установить имя игрока: (имя игрока) + DB_HeroesNames[DB] К одному объекту можно привязать хоть две сотни разнообразных значений. Например, что-бы зарезервировать награду за всех нейтралов к каждому юниту в базе нейтралов добавляется по 2 переменных, из рандомного значения между которыми и будет выдаваться награда. Благодарю за внимание, читатель. До скорых встреч.
P.S Поправил ошибки, прошу библиотекарей заменить текст статьи в базе на текст первого массага.
Сообщение отредактировал FkoFF - Четверг, 01 Июля 2010, 00:49:55 |
|
|
|
nikikin | Дата: Четверг, 01 Июля 2010, 00:52:01 | Сообщение # 2 |
Группа: Проверенные
Сообщений: 5397
Награды: 3
Репутация: 1805
Блокировки:
| мне это мало что поможет, но спс)
|
|
|
|
FkoFF | Дата: Четверг, 01 Июля 2010, 00:53:43 | Сообщение # 3 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| Ты моделлер, тебе то это зачем? )
|
|
|
|
Pa3apT | Дата: Четверг, 01 Июля 2010, 01:01:21 | Сообщение # 4 |
8 уровень
Группа: Проверенные
Сообщений: 653
Награды: 0
Репутация: 166
Блокировки:
| 1) энто не статья 2) причём тут синхронизация данных? 3) создание мультиборда (далее мб) не рассмотрено 4) у тебя нет кода изменения иконки героя 5) если человек умеет создавать мб, то с ф-циями работы с иконками он знаком, ибо они видны по дефолту 6) лично я бы использовал хеш для бд
|
|
|
|
FkoFF | Дата: Четверг, 01 Июля 2010, 01:10:50 | Сообщение # 5 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| хеш отлично подходит для двойных баз, когда требуется зарезервировать большое количество информации, нужной для перебора, к примеру таблицы дропа (разное количество перемешанных между собою предметов) А так - такой вариант вполне себе приемлемый. Quote (Pa3apT) 2) причём тут синхронизация данных? при том что данный соединяются в одно целое (герои с иконками и именами), это, по сути и есть синхронизация - соединение в одно целое. Quote (Wiki) Синхрониза́ция (от греч. συνχρόνος — одновременный) — процесс приведения к одному значению одного или нескольких параметров разных объектов. См.: В нашем варианте - подгонка всех пераметров к одному объекту для последующей работы. Quote (Pa3apT) 4) у тебя нет кода изменения иконки героя Что бы это значило? Quote (Pa3apT) 3) создание мультиборда (далее мб) не рассмотрено в данной статье описывается пример работы с синхронизированными данными а не создание мультибоарда
|
|
|
|
Pa3apT | Дата: Четверг, 01 Июля 2010, 01:25:28 | Сообщение # 6 |
8 уровень
Группа: Проверенные
Сообщений: 653
Награды: 0
Репутация: 166
Блокировки:
| Quote Сегодня я расскажу тебе как решить тысячу и одну проблему, связанную с такими вещами как отображение иконок героев в мультибоарде, награды за уничтожение юнитов, отображение иконок предметов в мультибоарде и все, требующее привязки каких-либо значений к определенным объектам. Про выделенное ты не написал ни слова В нашем варианте - подгонка всех пераметров к одному объекту для последующей работы. Это как минимум не логично, ибо ты не присваиваешь параметры к 1 объекту Quote в данной статье описывается пример работы с синхронизированными данными а не создание мультибоарда Данная статья вообще не имеет смысла, ибо сопоставить индексы элементов массивов может любой школьник и писать ради этого статью, не открывая для читателей ничего нового... кг/ам имхо, мб конечно я и не прав...Добавлено (01-07-2010, 01:25) --------------------------------------------- з.ы. требующее привязки каких-либо значений к определенным объектам - тоже обязанность хеша, а не массивов, так быстрее...
|
|
|
|
FkoFF | Дата: Четверг, 01 Июля 2010, 04:04:56 | Сообщение # 7 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| Quote (Pa3apT) Про выделенное ты не написал ни слова Кодер может ты и хороший, в чем я имел возможность убедится, но мыслишь ты кошмарно однобоко. Наверное даже дураку понятно что Quote (FkoFF) отображение иконок героев в мультибоарде, награды за уничтожение юнитов, отображение иконок предметов в мультибоарде делается по тому же принципу - присваиваются значения к разным переменным записанным под одним индексом (как это показанно на маленьком примере в статье), и в последствии через цикл вызываются в игре. Quote (Pa3apT) Это как минимум не логично, ибо ты не присваиваешь параметры к 1 объекту В данном случае фейл. Мы привязываем к герою - текстовую ссылку на его иконку и имя, добавляемое к нику игрока. Мы их связываем общим индексом для использования в дальнейшем и доступа к ним по надобности. Таки, как я уже говорил, ты смыслишь слишком однобоко. Подтверждение тому: Quote (Pa3apT) Данная статья вообще не имеет смысла Quote (Pa3apT) не открывая для читателей ничего нового Конкретно для тебя - ничего нового, а огромное количество картостроителей на этом сайте, я уже видел пару примеров, работают через "if\then\else" внутри триггера. Что лучше? сравнение через цикл или огромный ифзен на 40-50 параметров, тормозящий доступ к триггеру. Quote (Pa3apT) требующее привязки каких-либо значений к определенным объектам - тоже обязанность хеша, а не массивов, так быстрее... Хэш удобен для привязки, к примеру, передмета к владельцу (как в доте, для запрета использования другими героями), для более простых целей (где требуется не конкретный хэндл, а тип и прочее) - массивы подходят идеально.
|
|
|
|
Pa3apT | Дата: Четверг, 01 Июля 2010, 14:36:55 | Сообщение # 8 |
8 уровень
Группа: Проверенные
Сообщений: 653
Награды: 0
Репутация: 166
Блокировки:
| FkoFF, согласись что такой код намного удобнее Code call SaveString(udg_Hash, StringHash("Lich"), StringHash("Icon"), “ReplaceableTextures\CommandButtons\BTNLichVersion2.blp”) call SaveString(udg_Hash, StringHash("Lich"), StringHash("Name"), “Леденец”)
call SaveString(udg_Hash, StringHash("Tauren Chieftan"), StringHash("Icon"), “ReplaceableTextures\CommandButtons\BTNHeroTaurenChieftain.blp”) call SaveString(udg_Hash, StringHash("Tauren Chieftan"), StringHash("Name"), “Рогатый”)
call SaveString(udg_Hash, StringHash("Paladin"), StringHash("Icon"), “ReplaceableTextures\CommandButtons\BTNHeroPaladin.blp”) call SaveString(udg_Hash, StringHash("Paladin"), StringHash("Name"), “Cвятоша”)
call SaveString(udg_Hash, StringHash("Demon Hunter"), StringHash("Icon"), “ReplaceableTextures\CommandButtons\BTNHeroDemonHunter.blp”) call SaveString(udg_Hash, StringHash("Demon Hunter"), StringHash("Name"), “Илидашко”)
set name = LoadString(udg_Hash, GetHandleId("Demon Hunter"), StringHash("Name")) Чем такое: Code set DB_Heroes[1] = Lich set DB_Heroes[2] = Tauren Chieftan set DB_Heroes[3] = Paladin set DB_Heroes[4] = Demon Hunter set DB_HeroesIcons[1] = ReplaceableTextures\CommandButtons\BTNLichVersion2.blp set DB_HeroesIcons[2] = ReplaceableTextures\CommandButtons\BTNHeroTaurenChieftain.blp set DB_HeroesIcons[3] = ReplaceableTextures\CommandButtons\BTNHeroPaladin.blp set DB_HeroesIcons[4] = ReplaceableTextures\CommandButtons\BTNHeroDemonHunter.blp set DB_HeroesNames[1] = Леденец set DB_HeroesNames[2] = Рогатый set DB_HeroesNames[3] = Cвятоша set DB_HeroesNames[4] = Илидашко //============================ local integer n=0 loop exitwhen n > 4 if DB_Heroes[2] == "Demon Hunter" then //блаблабла endif set n = n + 1 endloop
|
|
|
|
FkoFF | Дата: Четверг, 01 Июля 2010, 14:45:10 | Сообщение # 9 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| смысл в итоге будет тот же, просто сделано по разному.
|
|
|
|
Pa3apT | Дата: Четверг, 01 Июля 2010, 14:48:14 | Сообщение # 10 |
8 уровень
Группа: Проверенные
Сообщений: 653
Награды: 0
Репутация: 166
Блокировки:
| Угу, что 1 строка Code set name = LoadString(udg_Hash, GetHandleId("Demon Hunter"), StringHash("Name")) и что цикл Quote local integer n=0 loop exitwhen n > 4 if DB_Heroes[2] == "Demon Hunter" then //блаблабла endif set n = n + 1 endloop
|
|
|
|
DragoN | Дата: Четверг, 01 Июля 2010, 18:14:58 | Сообщение # 11 |
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
| FkoFF, я то уже обрадовался что тут будет описывается принципы нормальной работы с localplayer,что бы не было десинка...
El Psy Congroo
|
|
|
|
FkoFF | Дата: Четверг, 01 Июля 2010, 21:31:13 | Сообщение # 12 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| Pa3apT, в любом случае потом перебор будет методом цикла. Или ты мне предлогаешь ифзенить?
|
|
|
|
Pa3apT | Дата: Пятница, 02 Июля 2010, 01:12:01 | Сообщение # 13 |
8 уровень
Группа: Проверенные
Сообщений: 653
Награды: 0
Репутация: 166
Блокировки:
| FkoFF, там он более оптимизированный
|
|
|
|
FkoFF | Дата: Пятница, 02 Июля 2010, 01:24:44 | Сообщение # 14 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| Pa3apT, спор на пустом месте ) Возьми и напиши статью про использование хэша во всех деталях, я тоже с радостью почитаю, авось узнаю что то новое. А пока ты не написал подобной статьи - не раздувай спор на пустом месте )
|
|
|
|
Pa3apT | Дата: Пятница, 02 Июля 2010, 01:42:35 | Сообщение # 15 |
8 уровень
Группа: Проверенные
Сообщений: 653
Награды: 0
Репутация: 166
Блокировки:
| FkoFF, эээ я написал статью про хеш(http://xgm.ru/forum/showpost.php?p=700665&postcount=1) и давно, какие тебе ещё детали нужны?
|
|
|
|
H_A_PK | Дата: Пятница, 02 Июля 2010, 01:43:03 | Сообщение # 16 |
Быдлокодер
Группа: Проверенные
Сообщений: 2605
Награды: 1
Репутация: 822
Блокировки:
| Всёже согласен хеш и быстрее и меньше глобалок, массив же имеет предел до 8000+- 200 имхо: он и удобней. Статья пойдёт только нубам на радость =)
проклятье ляжет на любого кто дочитает до конца нет не дочитывай не надо остановись ну всё капец
|
|
|
|
Banzay89 | Дата: Пятница, 02 Июля 2010, 02:02:42 | Сообщение # 17 |
9 уровень
Группа: Проверенные
Сообщений: 858
Награды: 1
Репутация: 77
Блокировки:
| Ну и кто из нас безграммотный, умник???? "по-разному" пишеться через дефис! По сабжу: при чем тут синхронизация данных к созданию мультиборда я так и не понял, ибо иконки вставить в мб дело элементарное
|
|
|
|
FkoFF | Дата: Пятница, 02 Июля 2010, 03:36:45 | Сообщение # 18 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| Quote (Banzay89) при чем тут синхронизация данных к созданию мультиборда я так и не понял, ибо иконки вставить в мб дело элементарное просто это самый элементарный пример который пришел в голову, при создании статьи.Добавлено (02-07-2010, 03:30) ---------------------------------------------
Quote (H_A_PK) массив же имеет предел до 8000+- 200 имхо: он и удобней. я не думаю что у тебя в карте будет столько типовых привязок )Добавлено (02-07-2010, 03:34) ---------------------------------------------
Quote (Banzay89) Ну и кто из нас безграмотный, умник???? "по-разному" пишетсячерез дефис! По сабжу: при чем тут синхронизация данных и создание мультиборда я так и не понял, ибо иконки вставить в мб дело элементарное сравнил "вылаживать" с отсутствием дефиса, нашел ошибку в статье а сам допустил 2 орфографические и одну речевую в двух строках текста. Мо-ло-дец. )Добавлено (02-07-2010, 03:36) --------------------------------------------- Кстати да, мне вот любопытно, народ каким местом читает статью? Тут речь идет о привязке каких-либо строк\параметров к типовым объектам для работы с ними, и как пример - взят тип юнита и его иконка, вы же смотрите на пример и не понимаете причем здесь мультибоард. Туго всасываете?
|
|
|
|
[DUОS] | Дата: Пятница, 02 Июля 2010, 11:01:54 | Сообщение # 19 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| FkoFF, Если не будет синхронизации данных - будет десинк. Десинк - вылет. Значит, тут по идее следовало бы с таким названием описать GetLocalPlayer()
|
|
|
|
H_A_PK | Дата: Пятница, 02 Июля 2010, 11:30:07 | Сообщение # 20 |
Быдлокодер
Группа: Проверенные
Сообщений: 2605
Награды: 1
Репутация: 822
Блокировки:
| Под этим словам он имхо имел "структуры"
проклятье ляжет на любого кто дочитает до конца нет не дочитывай не надо остановись ну всё капец
|
|
|
|
FkoFF | Дата: Пятница, 02 Июля 2010, 11:39:04 | Сообщение # 21 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| [DUОS], вот возьми и опиши )
|
|
|
|
Banzay89 | Дата: Пятница, 02 Июля 2010, 11:58:22 | Сообщение # 22 |
9 уровень
Группа: Проверенные
Сообщений: 858
Награды: 1
Репутация: 77
Блокировки:
| Quote сравнил "вылаживать" с отсутствием дефиса, нашел ошибку в статье а сам допустил 2 орфографические и одну речевую в двух строках текста. Мо-ло-дец. ) ПасЫба учитЭл! Я просто думал ты идеально русский знашь..
|
|
|
|
Pa3apT | Дата: Пятница, 02 Июля 2010, 13:58:33 | Сообщение # 23 |
8 уровень
Группа: Проверенные
Сообщений: 653
Награды: 0
Репутация: 166
Блокировки:
| [DUОS], +1 тут половина всех думало что статья про гетлокалплеера
|
|
|
|
[DUОS] | Дата: Пятница, 02 Июля 2010, 14:21:28 | Сообщение # 24 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| Quote (Pa3apT) тут половина всех думало что статья про гетлокалплеера "Как сделать свой собственный десинк". Хех.
|
|
|
|
DragoN | Дата: Пятница, 02 Июля 2010, 15:04:13 | Сообщение # 25 |
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
| Quote (H_A_PK) Всёже согласен хеш и быстрее и меньше глобалок, массив же имеет предел до 8000+- 200 имхо: он и удобней. Т_Т... в нём 8192 элемента([0..8191])
El Psy Congroo
|
|
|
|
|
|
|
|
|
|
|