Аминь
Crazy about that shit
offline
Опыт:
3,214Активность: |
Аттач структуры к handle
Дело в том, что я никогда не работал со структурами, и не совсем понимаю как с ними можно работать.
У меня есть система, которая может принять структуру в качестве аргумента, сохранить ее, а затем я могу считать данные из нее, когда мне будет нужно. Пожалуйста, привидите пример такого аттача:
|
03.09.2010, 11:52 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
AlexKARASb
Learning cpp
offline
Опыт:
22,103Активность: |
» code
|
03.09.2010, 13:38 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Аминь
Crazy about that shit
offline
Опыт:
3,214Активность: |
Мануал читал, пытался разобраться. Ничего не вышло.
Статью прочитал. Не работал со структурами и по-этому, смотрю на код, как баран на новые ворота. AlexKARASb, можно для наглядности увидеть данный способ в действии? Допустим прикрепить 2 инта, 2 реала на хэндл юнита, и, в периодическом таймере на 3 его запуске извлечь эти числа. Вот такой пример точно расставил бы все точки над "и". |
03.09.2010, 14:05 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
AlexKARASb
Learning cpp
offline
Опыт:
22,103Активность: |
Пардон, я не заметил, я тебе метод перебора, а ты спросил это ^^ Вот выкладываю свою наработку аттача через структуры, наверно и в барахолку скину для общего развития всем. Вот карта пример.
Юнит отдает приказ смарт, перемещаясь на большой скорости к точке приказа со скоростью: Своя скорость из РО + 400.00 от триггеров. Все упростил для наглядности.
Еще бы хотел узнать у осведомленных:
» code
Pause false в отделе обнуления очепяточно оказалась там ^^ Отредактировано AlexKARASb, 03.09.2010 в 16:02. |
03.09.2010, 15:56 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт:
6,885Активность: |
Аминь, тебе нужно именно к любому хендлу аттачить, либо только для юнита или предмета? если 2 вариант: создавай структуру, в статических данных у которой сохранен массив всех экземпляров этой структуры, а на юнита/предмет вешай через CustomValue индекс в этом массиве |
03.09.2010, 16:06 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
AlexKARASb
Learning cpp
offline
Опыт:
22,103Активность: |
а если этот юнит находится в другой структуре которая тоже использует его кастум валью -.-, будет сбой.. |
03.09.2010, 16:15 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Аминь
Crazy about that shit
offline
Опыт:
3,214Активность: |
Alex_Hell, CV у меня уже используется.
Мне нужно записывать на хендл, именно инютов, данные, динамически сгенерированные перед записью в одной функции. Я сделал это с помощью системы ToadCop'a - XAT. (сам пока до конца не понял, как это вышло)
Затем извлекаю через несколько секунд
Я не совсем понимаю принцип работы структур и меня терзают смутные сомнения - будет ли все правильно работать в мультиплеере, при игре более одного игрока. Или же моя структура будет перезаписана при действии другого игрока, и, первый игрок получит в итоге неверные данные. |
03.09.2010, 16:48 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
AlexKARASb
Learning cpp
offline
Опыт:
22,103Активность: |
Будет, принцип моего основан на принципе хешовых сохранений через хендл юнита. Если срабатывает в хеше, то и тут будет. Ладно я потопал. Вроде принцип своего аттача разжевал. Пойду смотреть как же Tc это сделал. |
03.09.2010, 16:53 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
XOR
offline
Опыт:
38,284Активность: |
я когда то делал такой контейнер, может свдн помнит)
» code
library AttachLib uses main { #define REGATTACH(TYPE) = { handle array H##TYPE TYPE array X##TYPE string array Key##TYPE int i##TYPE = 0 void attach##TYPE (handle h, TYPE x,string KEY) { int r = 0 while(r==i##TYPE or H##TYPE[r] == h) { if Key##TYPE[r] == KEY { H##TYPE[r] = h X##TYPE[r] = x Key##TYPE[r] = KEY else BJDebugMsg("1") H##TYPE[i##TYPE] = h X##TYPE[i##TYPE] = x Key##TYPE[i##TYPE] = KEY } r++ } i##TYPE++ } TYPE Get##TYPE(handle h,string KEY) { int r = 0 TYPE a while(H##TYPE[r] == h or r==i##TYPE) { if Key##TYPE[r] == KEY { return X##TYPE[r] } r++ } debug BJDebugMsg("bad key =P") return a } void Delete##TYPE(handle h,string KEY) { int r = 0 while(H##TYPE[r] == h or r==i##TYPE) { if Key##TYPE[r] == KEY { H##TYPE[r] = null i##TYPE-- debug else debug BJDebugMsg("bad key =P") } r++ } } } registration some attaches REGATTACH(integer) REGATTACH(real) REGATTACH(string) REGATTACH(trackable) REGATTACH(unit) end } учитывая то, что структура это инт, то
XimikS добавил: делалось давно ради мультеверсионности |
03.09.2010, 17:02 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Аминь
Crazy about that shit
offline
Опыт:
3,214Активность: |
Дебаггер упорно выдает мне сообщение подобного рода: "Double free of type: spell_data"
Кто-нибудь сталкивался? Что он хочет от моей структуры?
|
03.09.2010, 17:05 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
AlexKARASb
Learning cpp
offline
Опыт:
22,103Активность: |
|
03.09.2010, 17:19 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт:
6,885Активность: |
AlexKARASb, "а если этот юнит находится в другой структуре которая тоже использует его кастум валью -.-, будет сбой.."
Нужно делать по-уму, т.е. сделать к примеру структуру UnitData, внутри которой так же ссылки на все другие используемые структуры: Struct1, Struct2.. юниту в CustomValue писать индекс массива UnitData-структур, а от-туда получать всю нужную инфу..
при расширении системы, т.е. если нужно что-то еще вешать на юнита: в UnitData добавляем еще один параметр (ссылку на другую структуру).. никаких проблем не вижу в принципе! К примеру:
Отредактировано Alex_Hell, 03.09.2010 в 20:47. |
03.09.2010, 20:36 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
делайте для каждого юнита одну главную структуру, а в ней уже сколько угодно своих кастом велью внутри :) это же элементарно |
03.09.2010, 20:49 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|