XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
ELITE
АДмин
offline
Опыт: 4,078
Активность:
преобразование предмет - строка
подскажите, как в переменную типа строка записать ID предмета из инвентаря героя

именно ID а не ИМЯ!!!
Старый 28.03.2012, 11:22
DaeDR

offline
Опыт: 7,979
Активность:
Есть такая native:
native GetItemTypeId takes item i returns integer
Выводит 10-значное число, которое осталось только преобразовать (если надо)
Старый 28.03.2012, 11:34
Extremator

offline
Опыт: 39,403
Активность:
а зачем тебе строка? запомнить в переменную типа предмет... ссылаясь на неё можно создать такой же...
Старый 28.03.2012, 12:18
ELITE
АДмин
offline
Опыт: 4,078
Активность:
мне нужен в строковом типе получить 4х значный ID предмета
не 8 а именно 4х значный
Старый 28.03.2012, 14:51
ELITE
АДмин
offline
Опыт: 4,078
Активность:
хорошо, раз никто не знает
то другой вопрос

как циклом можно заполнить массив вещами, но не всеми, а только не стандартными?
Старый 02.04.2012, 09:23
Харгард
Epic
offline
Опыт: 7,829
Активность:
ELITE, поступи проще.
Воспользуйся инструментами, которые дает тебе ВЕ и разбей все свои 500 вещей на группы при помощи [b]типов[/b] и [b]уровней[/b] предметов.
Тригерами отлавливай тип предмета а потом уже решай что нужно с ним делать.
Отличить все нестандартные предметы можно так. Достаточно присвоить им уровень, который не имеют стандартные (точное число не скажу, смотри сам) и тригером проверять уровень манипулируемого предмета.
Также, все созданные тобой предметы имеют имя [b]I...[/b] где после I идет счетчик в 256-ричной системе, начинающийся с 000. Поэтому если начать с I000 и увеличивать на единицу, то все получится, если конечно ты не шибко намусорил в редакторе объедков.
Старый 02.04.2012, 12:23
ELITE
АДмин
offline
Опыт: 4,078
Активность:
даже делать так не хочу
тк в действии такой способ вызовет дикие тормоза и 99% десинхронизацию игроков
или займет несколько минут времени
а труда - это месяц базу забирать только предметами

не могли близарды просто так зарезать единственную возможность преобразования ID
писалось, что какойто хеш взамен должен быть
но ничего про хеш нигде не пишут, даже среди фенкций его просто нет

надо всего навсего из буквеного ID I000 получить числовой ID 00000000
Старый 02.04.2012, 12:44
MpW

offline
Опыт: 49,642
Активность:
Extremator, он хочет равкод из 4-х символов получить кажись

Код:
native I2S takes integer i returns string
native S2I takes string s returns integer


преобразует из строки в число и обратно

надо всего навсего из буквеного ID I000 получить числовой ID 00000000
Код:
native S2I takes string s returns integer 
native GetItemTypeId takes item i returns integer

//должно так
//достаточно вставить в GetItemTypeId предмет и получишь число
GetItemTypeId(предмет)

I2S('равкод предмета из 4 символов' ) //получаем число из 10 цифр
//обратно сложнее, хотя выше все описано


не пробовал сравнивать?
'I000' == 1227894832 одно и тоже

вот тема на всякий случай

Отредактировано Steal nerves, 02.04.2012 в 14:33.
Старый 02.04.2012, 13:54
J64_

offline
Опыт: 4,724
Активность:
ELITE,
В качестве индекса массива обычно используют число. Тебе дали возможность получить уникальное число из символа, так в чем проблема?
globals
	string array I2Char
	integer array ASCIIIndex
	string array ASCIIChar
endglobals

function InitChar takes string s, integer asciiindex returns nothing
	set I2Char[Char2I(s)] = s
	set ASCIIIndex[Char2I(s)] = asciiindex
	set ASCIIChar[asciiindex] = s
endfunction
Старый 02.04.2012, 14:35
ScorpioT1000
Работаем
offline
Опыт: отключен
вы велосипедисты, ай-яй-яй
как циклом можно заполнить массив вещами, но не всеми, а только не стандартными?
if itemcode >= 'I000' then
Всё гениальное - просто!
ScorpioT1000 добавил:
почитал, че вы тут понаписали, ппц
ScorpioT1000 добавил:
надеюсь, никто не против, что я удалил откровенный бред
Старый 02.04.2012, 15:18
ELITE
АДмин
offline
Опыт: 4,078
Активность:
I2S('равкод предмета из 4 символов' ) //получаем число из 10 цифр
это то что надо

Но РАВ код у меня в строковой переменной

как его вставить?

есть S[10] string
то мне как делать?

I2S('S[10]')
так?
просто если I2S(S[10]) - варик не дает включить карту

// изывиняюсь, что много спрашиваю, карта уже 17 мб весит сохранение с запуском занимают около часа
// в сжатом 7Мб, но сжатие тоже порядка часа идет и + 20 минут запуск карты
Старый 02.04.2012, 15:47
ScorpioT1000
Работаем
offline
Опыт: отключен
это то что надо
А что надо?
Старый 02.04.2012, 15:57
ELITE
АДмин
offline
Опыт: 4,078
Активность:
надо из переменной типа строка с текстов "I000" записать в переменную типа строка текст типа "0000000000"

ELITE добавил:
конструкция I2S( 'I000' ) работает
но как поставить туда переменную?

пробовал по разному - не хочет карта запускаться
I2S ( "'" + s + "'")
I2S ( 's' )
I2S ( ' + s + ' )

не принимает
Старый 02.04.2012, 17:08
ScorpioT1000
Работаем
offline
Опыт: отключен
Если уверен, что без этого никак не обойтись (например сразу хранить как integer, т.е. одинарные кавычки, как все всегда это делают), то:
копируешь код наверх карты xgm.ru/forum/showpost.php?p=535769&postcount=193
set результат = I2S( ASCII2DEC(строка с текстом "I000") )
Старый 02.04.2012, 17:10
prog

offline
Опыт: 32,865
Активность:
ELITE, по поводу забивания предметов в базу, обрати внимание на Fly Data Processor. Уже сейчас, в состоянии ранней беты, этот плагин к JNGP умеет извлечь данные из РО и подставить их в код.
Старый 02.04.2012, 17:19
ELITE
АДмин
offline
Опыт: 4,078
Активность:
ScorpioT1000, попробовал xgm.ru/forum/showpost.php?p=535769&postcount=193
на вообще чистой карте
без единого тригера (кроме дефолтного инициализации 1 игрока)
в шапку пихнул код
карта не запускается :(
Прикрепленные файлы
Тип файла: w3x mapa_test_sl.w3x (21.7 Кбайт, 1 просмотров )
Старый 02.04.2012, 17:19
ScorpioT1000
Работаем
offline
Опыт: отключен
это требует jngp если что
Старый 02.04.2012, 17:24
ELITE
АДмин
offline
Опыт: 4,078
Активность:
ScorpioT1000, jngp 5d стоит
Старый 02.04.2012, 17:25
ScorpioT1000
Работаем
offline
Опыт: отключен
на инициализации надо это вызывать ForInitializationMap
но раз не запускается, то какойто странный косяк, компилятор обязан непропустить кривую карту
ты точно нажал два раза сохранить?
Старый 02.04.2012, 17:28
ELITE
АДмин
offline
Опыт: 4,078
Активность:
да, я заметил, что компилятор очень часто пропускает мелкие опечатки типа "dfgd'
или (+dfgdg))

тоесть не хватает/лишний знака или не тот знак

а варик уже не дает запустить


может дадите ссылку на проверенны, нормально работающий редактор?
может в моём косяк какой
Старый 02.04.2012, 17:30
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 11:36.