Сейчас 06:25:04 Воскресенье, 14 августа, 2022 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Раздел картостроителя » [СТАТЬЯ] Синхронизация Данных.
[СТАТЬЯ] Синхронизация Данных.
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, в любом случае потом перебор будет методом цикла. Или ты мне предлогаешь ифзенить? :D

 

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
Блокировки:
Quote
по разному.

Ну и кто из нас безграммотный, умник???? "по-разному" пишеться через дефис!

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

 

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 орфографические и одну речевую в двух строках текста. Мо-ло-дец. )

ПасЫба учитЭл! :D
Я просто думал ты идеально русский знашь..

 

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
 

Форум о Warcraft 3 » Раздел для картостроителей » Раздел картостроителя » [СТАТЬЯ] Синхронизация Данных.
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Copyright © 2006 - 2022 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz