Kubix! Опубликовано 28 апреля, 2015 Жалоба Поделиться Опубликовано 28 апреля, 2015 (изменено) В общем, проблема состоит в том, что значения в массиве дублируются.Возьмем для примера обычный кусок:prontera,151,148,6 script arraytest 100,{for(.i = 0; .i < getarraysize(.Arrays); .i++){if(.Arrays[.i] != 0)mes (.i+1) +" > "+.Arrays[.i];}close;OnInit:setarray .Arrays[0], 1, 2, 3, 4, 5;end;}Он должен показать что-то типа:1 > 12 > 23 > 34 > 45 > 5А он показывает:1 > 12 > 23 > 34 > 45 > 5257 > 1258 > 2259 > 3260 > 4261 > 5Если заменить for(.i = 0; .i < getarraysize(.Arrays); .i++){наfor(.i = 0; .i < 5; .i++){Тогда будет все ок.И так со всеми нпц. Даже стандартными. Из-за этого половина нпцов дублируют свои значения, типа кафра предлагает 2 раза засейвиться и т.д.А некоторые нпц которые используют getarraysize вообще не работают. Типа новых энчант-квестов в moraЕсть у кого инфа по решению? заплачу, если что. С апдейтом эмуля траблы, если предложите :< Изменено 28 апреля, 2015 пользователем Kubix Ссылка на комментарий Поделиться на другие сайты Поделиться
Кеник Опубликовано 28 апреля, 2015 Жалоба Поделиться Опубликовано 28 апреля, 2015 А вывести результат getarraysize пробовал? Какую цифру функция возвращает?А еще глянь код функции gearraysize в script.c Ссылка на комментарий Поделиться на другие сайты Поделиться
Kubix! Опубликовано 28 апреля, 2015 Автор Жалоба Поделиться Опубликовано 28 апреля, 2015 (изменено) А вывести результат getarraysize пробовал? Какую цифру функция возвращает?А еще глянь код функции gearraysize в script.cmes ">"+getarraysize(.Arrays);Выводит результат: 261. :<prontera,151,148,6 script arraytest 100,{for(.s = 0; .s <= getarraysize(.Arrays); .s++){if(.Arrays[.s] != 0)mes (.s+1) +" > "+getelementofarray(.Arrays, .s);}next;switch(select("arraysize loop:copyarray loop:getarraysize")){case 1:for(.i = 0; .i <= getarraysize(.Arrays); .i++){if(.Arrays[.i] != 0)mes (.i+1) +" & "+.Arrays[.i];}close;case 2:for(.a = 0; .a <= getarraysize(.Arrays2); .a++){if(.Arrays2[.a] != 0)mes (.a+1) +" ! "+.Arrays2[.a];}close;case 3:mes ">"+getarraysize(.Arrays);mes ">"+getarraysize(.Arrays2);close;}OnInit:setarray .Arrays[0], 1, 2, 3, 4, 5;copyarray .Arrays2,.Arrays[0],getarraysize(.Arrays);end;}Все это - дублирует массив и выводит 1,2,3,4,5,257,258,259,260,261В script.c смотрел, но я мало чего там понимаю:<Мой getarraysize в script.c:static int32 getarraysize(struct script_state* st, int32 id, int32 idx, int isstring, struct DBMap** ref){int32 ret = idx;if( isstring ){for( ; idx < SCRIPT_MAX_ARRAYSIZE; ++idx ){char* str = (char*)get_val2(st, reference_uid(id, idx), ref);if( str && *str )ret = idx + 1;script_removetop(st, -1, 0);}}else{for( ; idx < SCRIPT_MAX_ARRAYSIZE; ++idx ){int32 num = (int32)__64BPRTSIZE(get_val2(st, reference_uid(id, idx), ref));if( num )ret = idx + 1;script_removetop(st, -1, 0);}}return ret;} Изменено 28 апреля, 2015 пользователем Kubix Ссылка на комментарий Поделиться на другие сайты Поделиться
Kubix! Опубликовано 28 апреля, 2015 Автор Жалоба Поделиться Опубликовано 28 апреля, 2015 (изменено) Так, походу разобрался. Какой-то придурок в script.c поставил значение MAX_ARRAY_SIZE = 500; Сейчас проверю да, это было оно. фу пойду убивать дурака который это сделал, я неделю мучался, не знал что за беда Изменено 28 апреля, 2015 пользователем Kubix Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения