Мне нужна система на GUI,Ну или если нет на GUI то JASS,которая при вводе в чат -spawn (ID Unit),заспавнит рядом с выделенным юнитом того кого ввёл по ID!?

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

Slashur, вы даете
call CreateUnitAtLoc(GetTriggerPlayer(), udg_ItemID, udg_temp_point, 0)
изменяете на
call CreateUnitAtLoc(GetTriggerPlayer(), udg_ItemID, udg_temp_point, 270)
всего 1 строчку. всего 1 аргумент. с нуля на 270 поменял и все. стандартное ориентация зданий = 270 град, записана в переменную.
хотел чтобы вы сами помучались. пробуй брать гуи,конвентировать в код. сравнивали. пример
статьи читали бы.
`
ОЖИДАНИЕ РЕКЛАМЫ...
1
24
6 лет назад
1
Ну так возьми и распарсь строку, через сабстринг кажется - и спавни на здоровье
0
7
6 лет назад
0
darkowlom:
Ну так возьми и распарсь строку, через сабстринг кажется - и спавни на здоровье
я не знаю как:(
2
24
6 лет назад
2
карта в архиве есть: Substring - titul to player.w3x. Разбери этот пример
1
21
6 лет назад
1
Уверен, что именно по ID лучше? Может, удобнее бд сделать и, скажем, через -spawn Драконид спавнить драконида и т. п.?
1
27
6 лет назад
Отредактирован MpW
1
смотри тему кто-то похожее несколько месяцев назад задавал
вот ссылка на карту чтоб не читать тему, а сразу скачать готовенькое
можно просто бд сделать. Сделать два массива: имена юнитов и равкоды. Перебегаешь циклом, и сравниваешь введенное имя с именем, сохраненное в данном индексе массива. Если имена совпали выдаешь равкод. Главное из цикла просто индекс массива нужный вытащить.
Откуда обычный игрок будет знать равкоды. Если не предоставив ему в описании и не пойми где еще.
0
7
6 лет назад
0
ClotPh:
Уверен, что именно по ID лучше? Может, удобнее бд сделать и, скажем, через -spawn Драконид спавнить драконида и т. п.?
а так возможно?
Steal nerves:
скачай мапу кто-то похожее несколько месяцев назад задавал
можно просто бд сделать. Сделать два массива: имена юнитов и равкоды. Перебегаешь циклом, и сравниваешь введенное имя с именем, сохраненное в данном индексе массива. Если имена совпали выдаешь равкод. Главное из цикла просто индекс массива нужный вытащить.
Откуда обычный игрок будет знать равкоды. Если не предоставив ему в описании и не пойми где еще.
хм
ClotPh:
Уверен, что именно по ID лучше? Может, удобнее бд сделать и, скажем, через -spawn Драконид спавнить драконида и т. п.?
вроде с ID легче)
0
27
6 лет назад
Отредактирован MpW
0
а выше скинул ссылку на карту с равкодом ID
карта с равкодом ID вводишь например "-hfoo" и спавнится пехотинец. Вводишь "-Hpal" создается герой паладин. Тут не только равкод можно юнита, но и итема, декора. Только надо брать соответствующую функцию, типа CreateItem для предмета или CreateUnit для юнита. Немного ту карту редакт с пояснениями, а то там может быть непонятно.
пример со строками вводишь в чат название юнита. Например: "-spawn Пехотинец", и вам спавнится пехотинец.
Загруженные файлы
2
21
6 лет назад
2
Slashur, с id просто не надо бд мутить но так всем, кто будет пользоваться, надо все id помнить
что проще запомнить - id или осмысленное название?
это как раз тот случай, когда бд оправдана
upd: а, да, выше примерно про то же вот написали
кстати, в Battle for Souls такое используется, но там не ид хотя бы, а номер
и неплохая идея и имена использовать, да, позже как альтернативу
0
26
6 лет назад
0
ClotPh, а как автоматически БД сделать, чтобы не руками название каждого юнита вводить?
3
25
6 лет назад
Отредактирован Jack-of-shadow
3
8gabriel8:
ClotPh, а как автоматически БД сделать, чтобы не руками название каждого юнита вводить?
Слк скриптом разбирать.
Либо закинуть всех нужных юнитов на карту. Выбрать группу и для каждого
SaveInteger (hash, BdNameHandle,StringHash(GetUnitName(u)), GetUnitId())
Сохранить прелоадом в текстовик.
тип того:
cjass
nothing PreloadAddString (string unitname, string unitid, ){
Preload ("SaveInteger (hash,BdNameHandle,StringHash("unitname"),"unitid")" )
}
nothing SaveUnitName (){
unit u = GetFilterUnit()
PreloadAddString (GetUnitName(u), I2S(GetUnitId(u)))
}
nothing SaveUnitsName () {
ForGroupBJ( GetUnitsInRectAll(GetPlayableMapRect()), function SaveUnitName )
PreloadGenEnd (path)
PreloadGenClear()
}
0
21
6 лет назад
0
8gabriel8, ну вот именно это как раз тот случай где имхо и руками можно и всех новых тоже руками только пометку сделать чтобы не забыть
хотя в идеале конечно вообще вот как-то через мемхак по id имя боевой единицы считывать, оно же есть в РО
1
25
6 лет назад
Отредактирован Jack-of-shadow
1
поправочка, I2S забыл. теперь вроде должно сработать. Для сохранения нужно включить доступ к локальным файлам и указать переменные :
YourHash
YourBdHandle
YourFolderPath

vjass
nothing PreloadAddString (string unitname, string unitid, ){
Preload ("SaveInteger ("+YourHash+,+YourBdHandle+",StringHash("+unitname+"),"+unitid+")") 
}

nothing SaveUnitName (){
 unit u = GetFilterUnit()
 PreloadAddString (GetUnitName(u), I2S(GetUnitId(u)))
}

nothing SaveUnitsName () { 
  ForGroupBJ( GetUnitsInRectAll(GetPlayableMapRect()), function SaveUnitName ) 
  PreloadGenEnd (YourFolderPath)
  PreloadGenClear() 
}
0
26
6 лет назад
0
А если не slk разбирать и не на карту всех ставить, а вообще универсальный триггер? Пусть даже триггер этот какое-то время займёт в самом начале карты. Типа делаем перебор равкодов, всего это 26 букв латиницы в строчном и прописном виде и цифры, то есть 62 разных символа в четвёртой степени, получается 62х62х62х62=14.776.336 вариантов, из них лишь часть юнитов, остальное предметы, разрушаемые объекты, способности и прочее. Каким условием проверить, что равкод принадлежит юниту?
1
28
6 лет назад
1
ClotPh:
Уверен, что именно по ID лучше? Может, удобнее бд сделать и, скажем, через -spawn Драконид спавнить драконида и т. п.?
Вообще, есть функция CreateUnitByName.
native          CreateUnit              takes player id, integer unitid, real x, real y, real face returns unit
native          CreateUnitByName        takes player whichPlayer, string unitname, real x, real y, real face returns unit
native          CreateUnitAtLoc         takes player id, integer unitid, location whichLocation, real face returns unit
native          CreateUnitAtLocByName   takes player id, string unitname, location whichLocation, real face returns unit
native          CreateCorpse            takes player whichPlayer, integer unitid, real x, real y, real face returns unit
0
7
6 лет назад
0
ClotPh:
Slashur, с id просто не надо бд мутить но так всем, кто будет пользоваться, надо все id помнить
что проще запомнить - id или осмысленное название?
это как раз тот случай, когда бд оправдана
upd: а, да, выше примерно про то же вот написали
кстати, в Battle for Souls такое используется, но там не ид хотя бы, а номер
и неплохая идея и имена использовать, да, позже как альтернативу
на русском если Пехотинец написать пойдет,в игре сработает?
0
25
6 лет назад
Отредактирован Jack-of-shadow
0
< 8gabriel8:
Каким условием проверить, что равкод принадлежит юниту?
Если для бд, без выставления юнитов на карту, то спавнить все подряд, все 14 лямов)) потом енум юнитов и сейв
0
7
6 лет назад
0
Steal nerves:
а выше скинул ссылку на карту с равкодом ID
карта с равкодом ID вводишь например "-hfoo" и спавнится пехотинец. Вводишь "-Hpal" создается герой паладин. Тут не только равкод можно юнита, но и итема, декора. Только надо брать соответствующую функцию, типа CreateItem для предмета или CreateUnit для юнита. Немного ту карту редакт с пояснениями, а то там может быть непонятно.
пример со строками вводишь в чат название юнита. Например: "-spawn Пехотинец", и вам спавнится пехотинец.
мне нужен спавн рядом с юнитом которого я выделил!
0
21
6 лет назад
Отредактирован ClotPh
0
PT153, хм... это же та, что всегда была в дефолтном ГУИ имеется в виду, а не что-то из новых? Если да, то ок, можно замешать...
0
7
6 лет назад
0
ClotPh:
PT153, с какого патча такая функция?
с 1.26
0
26
6 лет назад
0
PT153:
Вообще, есть функция CreateUnitByName.
Она принимает лишь английские имена, не Пехотинец, а footman, не Вурдалак, а ghoul.
0
27
6 лет назад
Отредактирован MpW
0
Вообще, есть функция CreateUnitByName.
Но разве там не на английском. Ввожу "Пехотинец", не создается. Ввожу "footman", создается. Даже нестандартные английские названия не принимает. Там какая база, где-то хранится, иначе наделаю 5 юнитов с одинаковым именем, как определяет? походу только с станд. равкодами юнитов
Slashur,
мне нужен спавн рядом с юнитом которого я выделил!
какой хитрый. Могу сделать. Но скажи мне, а если игрок выделил несколько юнитов, у какого юнита спавнить? мне нужно выбрать юнита. Выбрал первого попавшегося.
Загруженные файлы
0
28
6 лет назад
0
Зато теперь я разобрался, как эта функция создаёт.
0
7
6 лет назад
0
Steal nerves:
Вообще, есть функция CreateUnitByName.
Но разве там не на английском. Ввожу "Пехотинец", не создается. Ввожу "footman", создается. Даже нестандартные английские названия не принимает. Там какая база, где-то хранится, иначе наделаю 5 юнитов с одинаковым именем, как определяет? походу только с станд. равкодами юнитов
Slashur,
мне нужен спавн рядом с юнитом которого я выделил!
какой хитрый. Могу сделать. Но скажи мне, а если игрок выделил несколько юнитов, у какого юнита спавнить? мне нужно выбрать юнита. Выбрал первого попавшегося.
ну сделай хотя бы на выделенном одном юните?
0
27
6 лет назад
Отредактирован MpW
0
Slashur, сделал пример выше. вот суть в том, что проверяем выделен ли хоть один юнит. Это можно запоминать, например группой тема И от этого пляшем. Выбираем первого юнита в группе, и около него создаем. По-другому никак. Варкрафте не выдает. Если только мем хаком.
код драколича
//конвентирует адрес юнита в юнита
//# +nosemanticerror
function I2Unit takes integer i returns unit
call setInt2Unit(ConvertUnitAddressToHandleIDNative(i))
return l__Int2Unit
endfunction
    //Выдает адрес выделенного юнита, панель интерфейса, которая отображена на экране у локального игрока
    //допустим выделив рамкой 2 юнитов: героя и раба, у вас будет отображаться в окне посерединке 2 иконки выделенных юнитов. Но сбоку меню будет переключено на героя (механика вара)
    //если взять нажать Tab, можно переключать меню на другого юнита, так с героя на раба
    function GetActiveUnitInSelection takes nothing returns integer
        return RMem(pGameUICurrentSelection+0x238)
    endfunction
просто думал мб какое-нибудь условие: выделен рабочий и так далее. я думаю тебе бессмысленно объяснять и делать. т.к. тебе надо самому научиться. все показано/разжевано. что еще надо? мем хак рано вам, и не факт что норм работать будет
0
7
6 лет назад
0
Steal nerves:
Slashur, сделал пример выше. вот суть в том, что проверяем выделен ли хоть один юнит. Это можно запоминать, например группой тема И от этого пляшем. Выбираем первого юнита в группе, и около него создаем. По-другому никак. Варкрафте не выдает. Если только мем хаком.
код драколича
//конвентирует адрес юнита в юнита
//# +nosemanticerror
function I2Unit takes integer i returns unit
call setInt2Unit(ConvertUnitAddressToHandleIDNative(i))
return l__Int2Unit
endfunction
    //Выдает адрес выделенного юнита, панель интерфейса, которая отображена на экране у локального игрока
    //допустим выделив рамкой 2 юнитов: героя и раба, у вас будет отображаться в окне посерединке 2 иконки выделенных юнитов. Но сбоку меню будет переключено на героя (механика вара)
    //если взять нажать Tab, можно переключать меню на другого юнита, так с героя на раба
    function GetActiveUnitInSelection takes nothing returns integer
        return RMem(pGameUICurrentSelection+0x238)
    endfunction
просто думал мб какое-нибудь условие: выделен рабочий и так далее. я думаю тебе бессмысленно объяснять и делать. т.к. тебе надо самому научиться. все показано/разжевано. что еще надо? мем хак рано вам, и не факт что норм работать будет
можно ещё просто выделен игроком инциатором,и если выделенно скажем 12 юнитов,то рядом с любым из 12 юнитов он заспавнится!
Steal nerves:
Вообще, есть функция CreateUnitByName.
Но разве там не на английском. Ввожу "Пехотинец", не создается. Ввожу "footman", создается. Даже нестандартные английские названия не принимает. Там какая база, где-то хранится, иначе наделаю 5 юнитов с одинаковым именем, как определяет? походу только с станд. равкодами юнитов
Slashur,
мне нужен спавн рядом с юнитом которого я выделил!
какой хитрый. Могу сделать. Но скажи мне, а если игрок выделил несколько юнитов, у какого юнита спавнить? мне нужно выбрать юнита. Выбрал первого попавшегося.
то что ты скинул тут,ошибка в базе данных триггеров чё за фигня?
Мне просто нужно написать в чате -spawn (ID Unit,ну и декораций с предметами ID тоже подойдет) и заспавниться рядом с выделенным юнитом юнит!
Чтобы оставить комментарий, пожалуйста, войдите на сайт.