FreeSlave самый лучший вариант - модифицировать пушабли кодом из моего тутора, и грузить отдельными bsp. Растягивать транзишен на всю карту плохое решение. Либо, просто не заводи глобалнейм. Не дай игроку возможности утащить пушаблю на первую карту, вот и всё.
Добавлено 15-02-2020 в 21:42:
Попробуй расположить пушаблю подальше от чейнджлевела, чтобы она не попадала в его PVS, кстати.
printf( "UMD dict %i %i %s\n", i, *propDict[i][128], propDict[i][128] );
23
i++;
24
}
25
26
}
Count меняется, но указатель на propDict[count][128] не меняется, я вообще хз. В первом цикле значения propDict разные, во втором-одинаковые. propDict объявлен глобально, но когда я из другого cpp пытаюсь его читать, там как минимум половина строк повреждены.
Тут 129-му элементу (count+1)-ного по счёту массива присваивается указатель на чяр, судя по коду. Какой длины эти массивы, если у тебя повреждаются строки?
Может, имелось в виду strcpy(propDict[count], lump.m_Name);?
ну вон видишь в printf просто * приписываю к стрингтабле. Сейчас попробовал вывести без звездочки, как %x. Теперь больше похоже на пойнтер (12f64c) но он всё равно всегда одинаковый.
Цитата:
nemyax писал: Тут 129-му элементу (count+1)-ного по счёту массива присваивается указатель на чяр, судя по коду. Какой длины эти массивы, если у тебя повреждаются строки?
Может, имелось в виду strcpy(propDict[count], lump.m_Name);?
Нет никакого 129-го элемента. 128 символов на строку, а count это счётчик более старшего порядка, он перечисляет строки.
Я пробовал всякие strcpy, Q_strcpy, memcpy, Q_memcpy, все приводят к тому что он валится с ошибкой. Только присваивание работает.
Присваивание не работает. Ты записываешь указатель на память, которая протухает и идёт по рукам, как только ты ретурнулся из записывающей функции. Если ты хочешь записать в глобальную табличку строку, чтобы она там осталась, тебе нужен какой-нибудь эквивалент стркпю.