Что бы удаленно дорабатывать карту решил записывать все в заметки телефона. Описания скилов, построек, юнитов, со статами и всем всем всем.
Но теперь информации стало столько, что уже нереально листать текст к нужному месту.
Какие программы на пк вы используете для хранения и структуризации информации?
так же интересуют приложения на IOS.
Я как то юзал прогу которая строила древо технологий в ячейках, но когда информации стало слишком много, эти переплетения тоже превратились в кашу.
Вообще любые идеи были бы кстати.

Принятый ответ

То, что хочет автор, называется "дизайн-документ". Моя практика показала, что лучше всего использовать документы в гуглдокс (для некоторых вещей гуглтаблицы) с перекрёстными ссылками.
Также советую почитать статью и приложенный к ней дизайн-документ от разработчиков Dirty Bomb для вдохновения.
`
ОЖИДАНИЕ РЕКЛАМЫ...
3
28
5 лет назад
Отредактирован PT153
3
Я для себя сделал таблицу равкодов, чтобы мне было удобно глянуть, какие равкоды ещё свободны для опредлённого типа объектов.
Также я сделал таблицу с описаниями улучшений, характеристиками и прочим.
Всё это хранится в одном фале Excel, для телефона же лучше использовать Google таблицы.

Вот таблица равкодов, может будет интересно.
Красным выделены "нехорошие" символы.
Загруженные файлы
2
26
5 лет назад
2
Можно создавать в редакторе, например, новую способность. Потом создать кампанию и сохранить способность в редакторе кампаний, потом из редактора кампаний аналогично перенести способность в любую другую карту. Но для хранения триггеров недостаточно просто кампании без карт, нужно импортировать в неё карту, а в ней сохранять все триггеры.
Короче, редактор кампаний - это то, что тебе нужно.
1
28
5 лет назад
1
8gabriel8, ты не понял, о чём он. Он про хранение инфы о карте вне редактора.
1
26
5 лет назад
1
Вот значит как) Да, вроде таким не занимался никогда, потому не понял.
1
32
5 лет назад
1
А у меня свой вопрос по этой теме, по поводу хранения и получения информации о карте.
В общем возможно ли делать какое-то оглавление при помощи TESH? потому что я не понимаю как вы вообще ориентируетесь в огромных длинных функциях кода (я про редактор триггеров). Так вот у меня вот такой вот tesh с автозаполнением,
брал его год назад с хайва, так вот, существует ли какая-то возможность делать оглавление ? я просто устал делать ctrl+f, и именно поэтому я не могу делать все скилы на 1 событии активации способности, я просто иначе не разберусь в своём же коде когда он обрастёт мясом. Я точно видел Scroll pozition, но не видел чтобы было автозаполнение, всегда что-то одно, и возможно ли добиться автозаполнения от самописных функций?
Это тоже бы упростило работу с редактором триггером, и наполнением в него инфы...
Загруженные файлы
2
28
5 лет назад
2
Можно добавить свои функции (и только их). Делаешь текстовый файл в папке includes (что в папке tesh), в него пишешь все тебе нужные функции, сохраняешь. Твои функции будут в Function List. Если же добавить, пока редактор открыт, то, чтобы отобразились твои функции, нужно нажать TESH -> Reload user includes.

template - шаблон, в папке с шаблонами можно свои шаблоны добавить. Это не то, что тебе нужно.

Оглавление сделать нельзя, скрывай ненужные функции в самом коде, тыкая на + рядом с номером строки.
0
26
5 лет назад
Отредактирован Hate
0
Bergi_Bear, не нужно доводить до срача, стоит отделять мух от котлет. все зависит только от вас, разбивайте функции по библиотекам предназначенных для определенной цели
по вашему комменту можно предположить что вы делаете однотипные действия с некоторыми отличиями, вместо того что бы делать кашу можно сделать библиотеку которая будет обрабатывать такие случаи
0
32
5 лет назад
0
Можно добавить свои функции (и только их). Делаешь текстовый файл в папке includes (что в папке tesh), в него пишешь все тебе нужные функции, сохраняешь. Твои функции будут в Function List. Если же добавить, пока редактор открыт, то, чтобы отобразились твои функции, нужно нажать TESH -> Reload user includes.
Просто космос, но со своими функциями не особо имело смысл, потому что помнишь до 6 параметров что в нее передавать надо, но если давно не пользоваться можно и забыть, с мемхаком тоже работает, вообще красота!
П.С. Сорри за оффтом, но вроде как по теме
0
23
5 лет назад
0
чтоб было ясно всегда делай
/*
* Это данный код создает Герой
*/
function CreateHero takes integer i returns nothing
	...
endfunction
Если хотите понять что делает
0
32
5 лет назад
Отредактирован Берги
0
pro100master, ага и таких комментариев в триггере на 1000-2000 строк будет за 50 штук, "просто одно удовольствие искать", потому что с переходом на новый теш поиск на русском не работает, приходятся на инглише делать текстовую метку.
Вот к примеру берём библиотеку Utils от мемхака в ней 2500 строк, функция "HideAbilityButton" находится на 1700 строке, но я её нашёл потому что сделал CTRL+F по тексту, и теперь я посмотрю как она пишется точно и какие параметры принимает и что возвращает, и какая у неё начинка, теперь то да, как подсказал PT153, мне больше не надо этого делать так я просто напишу Hid... и мне вылезет вся начинка из функции.
Вот а что прикажете делать с такой же библиотекой на 2000+ строк для функции обработки скилов? равкоды я не помню, и вообще не помню какой комментарий написал, так как прошло к примеру 2 года, или же помню но надо снова жать контр+ф, неужели все так страдают или только я?
0
28
5 лет назад
0
Вот а что прикажете делать с такой же библиотекой на 2000+ строк для функции обработки скилов?
У тебя на каждый скилл своя функция? Я не понял, что тебе нужно.
3
30
5 лет назад
3
То, что хочет автор, называется "дизайн-документ". Моя практика показала, что лучше всего использовать документы в гуглдокс (для некоторых вещей гуглтаблицы) с перекрёстными ссылками.
Также советую почитать статью и приложенный к ней дизайн-документ от разработчиков Dirty Bomb для вдохновения.
Принятый ответ
0
28
5 лет назад
Отредактирован PT153
0
Bergi_Bear, пример БД башен из моей карты.
code
//===========================================================================
// Trigger: TowerData
//===========================================================================
library TowerData uses TowerTypes, TowerAbilityDataLib
private function AddTowerData1 takes integer T, real height, real scale, integer goldcost, integer limit, boolean selfupgrade,/*
                                  */ boolean hasexp, integer prevfactor, integer lvlfactor, integer constfactor, integer base,/*
                                  */ integer superlvl, integer superlvlfactor returns nothing
    set TowerData[T].height = height
    set TowerData[T].scale = scale
    set TowerData[T].goldcost = goldcost
    set TowerData[T].limit = limit
    set TowerData[T].selfupgrade = selfupgrade
    set TowerData[T].hasexp = hasexp
    set TowerData[T].prevfactor = prevfactor
    set TowerData[T].lvlfactor = lvlfactor
    set TowerData[T].constfactor = constfactor
    set TowerData[T].base = base
    set TowerData[T].superlvl = superlvl
    set TowerData[T].superlvlfactor = superlvlfactor
endfunction

private function AddTowerData2 takes integer T, integer abil_id, boolean hasattack, real attdmg, real attup, integer atttype,/*
                                  */ real attrange, boolean explosive returns nothing
    set TowerData[T].abil_id = abil_id
    set TowerData[T].hasattack = hasattack
    set TowerData[T].attdmg = attdmg
    set TowerData[T].attup = attup
    set TowerData[T].atttype = atttype
    set TowerData[T].attrange = attrange
    set TowerData[T].explosive = explosive
endfunction

private function AddTowerTrigger takes integer T, code build, code upgrade returns nothing
    set TowerData[T].build = CreateTrigger()
    call TriggerAddAction(TowerData[T].build, build)
    if upgrade != null then
        set TowerData[T].upgrade = CreateTrigger()
        call TriggerAddCondition(TowerData[T].upgrade, Filter(upgrade))
    endif
endfunction

//! textmacro AddTowerTrigger takes name
    call AddTowerTrigger($name$Id, function $name$.build, function $name$.upgrade)
//! endtextmacro

globals
    constant integer WallId = 0
    constant integer ArrowId = 1
    constant integer BurrowId = 2
    constant integer LightningId = 3
    constant integer BurstId = 4
    constant integer GoldMineId = 5
    constant integer FoLId = 6
    constant integer FoEId = 7
    constant integer BloodId = 8
    constant integer WaveId = 9
    
    constant integer TowerTypesAmount = 10
endglobals

function InitTowerData takes nothing returns nothing
    // Data                    typ, hght, scale, cost, lim, upgrd, hasxp, prvfac, lvlfac, const, base, suplvl, factor.
    call AddTowerData1(     WallId,  60.,   0.4,    5,  -1, false, false,      0,      0,     0,    0,      0, 10)
    call AddTowerData1(    ArrowId, 145.,   0.6,   10,  -1,  true,  true,      1,      5,     0,   20,     10, 10)
    call AddTowerData1(   BurrowId,  60.,   0.6,   10,  -1,  true,  true,      1,      5,     0,   20,     10, 10)
    call AddTowerData1(LightningId, 255.,   0.5,   10,  -1,  true,  true,      1,      5,     0,   20,     10, 10)
    call AddTowerData1(    BurstId, 135.,   0.6,   20,  -1,  true, false,      1,      0,    20,   40,     10, 10)
    call AddTowerData1( GoldMineId,  60.,   0.4,  120,   4,  true, false,      1,      0,    60,  180,     10, 10)
    call AddTowerData1(      FoLId,  60.,   0.4,  100,   4,  true, false,      1,      0,    50,  150,     10, 10)
    call AddTowerData1(      FoEId,  60.,   0.4,  100,  -1,  true, false,      1,      0,    50,  150,     10, 10)
    call AddTowerData1(    BloodId, 255.,   0.5,   20,  -1, false, false,      0,      0,     0,    0,      0, 10)
    call AddTowerData1(     WaveId, 135.,   0.6,   20,  -1,  true,  true,      1,      5,     0,   20,     10, 10)
    // Additional Data         typ,               abil_id, hasatt, dmg, attup, atttyp, attran, explo.
    call AddTowerData2(     WallId,                     0,  false,  0.,    0.,      0,     0., false)
    call AddTowerData2(    ArrowId,   AbilFocusedAttackId,   true, 7.5, 0.075,   Phys,   384., false)
    call AddTowerData2(   BurrowId,       AbilMultishotId,   true,  1., 0.075,   Phys,   384., false)
    call AddTowerData2(LightningId, AbilLightningAttackId,   true, 10., 0.075,   Magc,   384.,  true)
    call AddTowerData2(    BurstId,  AbilProjectileSiloId,   true,  5.,   0.5,   Perc,   384., false)
    call AddTowerData2( GoldMineId,      AbilGoldMiningId,  false,  0.,    0.,      0,     0., false)
    call AddTowerData2(      FoLId,   AbilReplenishLifeId,  false,  0.,    0.,      0,     0., false)
    call AddTowerData2(      FoEId,    AbilExpGeneratorId,  false,  0.,    0.,      0,     0., false)
    call AddTowerData2(    BloodId,      AbilOrbOfBloodId,   true,  3.,    0.,   Magc,   384.,  true)
    call AddTowerData2(     WaveId,       AbilShockwaveId,   true,  5., 0.075,   Phys,   512.,  true)
    // Triggers
    call AddTowerTrigger(WallId, function Wall.build, null)
//! runtextmacro AddTowerTrigger("Arrow")
//! runtextmacro AddTowerTrigger("Burrow")
//! runtextmacro AddTowerTrigger("Lightning")
//! runtextmacro AddTowerTrigger("Burst")
//! runtextmacro AddTowerTrigger("GoldMine")
//! runtextmacro AddTowerTrigger("FoL")
//! runtextmacro AddTowerTrigger("FoE")
//! runtextmacro AddTowerTrigger("Blood")
//! runtextmacro AddTowerTrigger("Wave")
endfunction
endlibrary

struct TowerData extends array
    integer abil_id
    real height
    real scale
    integer goldcost
    integer limit
    boolean hasattack
    real attdmg
    real attup
    integer atttype
    real attrange
    boolean explosive
    boolean selfupgrade
    boolean hasexp
    integer prevfactor
    integer lvlfactor
    integer constfactor
    integer base
    integer superlvl
    integer superlvlfactor
    
    trigger build
    trigger upgrade
endstruct
При строительстве срабатывает триггер, определяет id башни, делает некоторые действия, а потом вызывает триггер build, сохраняяя нужные параметры в глобалки. С апгрейдом аналогично.
Я с таким уже успехом мог передавать не сами функции (то есть code), а только их имена, vJass превратит их в индексы и сам создаст триггеры. сам функции можно будет вызывать через .evaluate(), .execute(). Но в моей реализации на одно обращение к массиву меньше.
0
4
5 лет назад
0
Clamp:
То, что хочет автор, называется "дизайн-документ". Моя практика показала, что лучше всего использовать документы в гуглдокс (для некоторых вещей гуглтаблицы) с перекрёстными ссылками.
Также советую почитать статью и приложенный к ней дизайн-документ от разработчиков Dirty Bomb для вдохновения.
Да, это именно оно! Спасибо огромное, теперь понятно как это делают нормальные люди.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.