Rev412 крафт

Автор темы #1
Дата рег
29 Июн 2014
Сообщения
38
Симпатии
2
Привет.
В документации описан такой вот класс: CraftItem. Информации по нему, мягко сказать, мало. Как им пользоваться? Вроде как можно сделать так:
Код:
 CraftItem@ craft = GetCraftItem(113);
uint[]@ nums;
int[]@ values;
bool[]@ ors;
craft.GetNeedParams(nums, values, ors);
for( uint i = 0, j = nums.length(); i<j; i++ )
Log("param " + nums[i] );
Но такой код не работает. Говорит "Null Pointer Access". Какой номер нужно подставлять вместо 113? Пробовал подставлять PID вещи, её номер в файле FOCRAFT.msg, просто 0 и 1 - всегда одно и тоже, Null Pointer Access.

Как использовать ors? Они показывают, что может быть заменено. Как с этим работать?
 
Автор темы #2
Дата рег
29 Июн 2014
Сообщения
38
Симпатии
2
Всё работает, это мой код хреновый. Нужно убрать знак @, и всё будет работать:
Код:
 CraftItem@ craft = GetCraftItem(113);
uint[] nums;
int[] values;
bool[] ors;
craft.GetNeedParams(nums, values, ors);
for( uint i = 0, j = nums.length(); i<j; i++ )
Log("param " + nums[i] );
GetCraftItem выдаёт рецептурный предмет по номеру из FOCRAFT.
 
Дата рег
22 Окт 2012
Сообщения
119
Симпатии
63
тебе надо передать сам массив а не пустой указатель те @ в коде не нужна

так же емнип в фонлайне есть какая то разница между инициализацией массива через [] и через array<type> помню что в итоге когда я этим занимался было решено использовать только второй вариант
del
 
Автор темы #4
Дата рег
29 Июн 2014
Сообщения
38
Симпатии
2
MEXAHOTABOP, спасибо. По привычке написал @, как когда нужен Critter@, например.

Если кому-то будет полезно, ors указывает, можно ли заменить параметр или предмет на следующий, или нет. Например, фунция GetNeedTools(pids, values, ors) выдала три массива:
  • pids - номера предметов, которые нужны для крафта
  • values - количество предметов (обычно 1)
  • ors - можно ли заменить данный предмет следующим.
Количество записей в ors равно таковому в pids. Если сопоставить эти массивы, получится условие:
[xtable]
{tbody}
{tr}
{td}PIDs{/td}
{td}ORs{/td}
{/tr}
{tr}
{td}383{/td}
{td}true{/td}
{/tr}
{tr}
{td}4{/td}
{td}true{/td}
{/tr}
{tr}
{td}45{/td}
{td}false{/td}
{/tr}
{/tbody}
[/xtable]
Получается:
PID 383 может бысть заменён на PID 4.
PID 4 может бысть заменён на PID 45.
PID 45 последний, потому для него ORs будет false.
То есть, чтобы собрать эту вещь, как инструмент можно использовать вещь с PID 383 или PID 4 или PID 45.

А если записи такие:
[xtable]
{tbody}
{tr}
{td}PIDs{/td}
{td}ORs{/td}
{/tr}
{tr}
{td}383{/td}
{td}true{/td}
{/tr}
{tr}
{td}4{/td}
{td}false{/td}
{/tr}
{tr}
{td}45{/td}
{td}false{/td}
{/tr}
{/tbody}
[/xtable]

то требование для инструментов будет такое: "можно использовать вещь с PID 383 или PID 4, и вещь с PID 45".