#1
08 октября 2008 в 09:09
Может кто знает, как на Quake C прочитать содержимое файла? Хочу сделать подгрузку дополнительных поинт-ентитей.
#2
08 октября 2008 в 09:32
Если под оригинальный квак делать - никак (фрикбот не в счет, он читает свои вейпонты извращенским путем через конфиг-файлы)<br /><br />если под порт - в помощь экстеншн FRIK_FILE<br /><br />http://web.archive.org/web/20071029104936/wiki.quakesrc.org/index.php/FRIK_FILE<br /><br />пример использования FRIK_FILE:<br />
<br />float filehandle;<br />string s;<br /><br />filehandle = fopen("myfile.txt", FILE_READ);<br />if (filehandle < 0)<br /> return; // ошибка при открытии<br />s = fgets(filehandle);<br />while(s)<br />{<br />// код обработки строчки<br />// читаем следующую<br />s = fgets(filehandle);<br />}<br />fclose(filehandle);
#3
09 октября 2008 в 08:06
VorteX, не совсем понял. Мне нужен какой-то порт, который поддерживает эти функции, так?<br />Я подохреваю, что почти все они это уже умеют. Еще мне нужен, видимо, расширенный qcc, я пользую последний fteqcc. Это все или нужно еще что-то иметь?
#4
09 октября 2008 в 08:51
Мне нужен какой-то порт, который поддерживает эти функции, так?Да<br /><br />
Я подозреваю, что почти все они это уже умеютЕсли брать самые известные - то все. FTE, Darkplaces, Vengeance (r1/r2), Betwix, QMB, Tremor, JoeQuake, Fuh и пр. Но есть и те, в которых этого нет, или где свой экстеншн под чтение файла (TOMAZ_FILE у TomazQuake, у ZQuake что то свое, не помню).<br /><br />Чтобы все было правильно, рекомендую пользоваться checkextension(), тогда ты точно будешь знать, поддерживает ли порт данную фишку или нет.<br /><br /><br />
Еще мне нужен, видимо, расширенный qcc, я пользую последний fteqcc<br />да, желательно юзать FTEQCC/FRIKQCC, в FTEQCC надо включить опцию if(string) fix<br /><br />Дело в том, что в QC как и в C есть принципиальное различие между нулевой и пустой строкой (пустая строка содержит ноль-терминатор, нулевая строка его не имеет). В оригинальном QCC проверки на нулевую строку нет - только на пустую строку. А фишка в том, что fgets() при достижении конца файла начинает возвращать именно нулевую строку, то есть без современного FTEQCC/FRIKQCC конец файла нормальным образом не поймать, в оригинальном QCC if (!s) сработает на первой пустой строке (которые гипотетически могут быть в середине файла)
#5
09 октября 2008 в 10:15
VorteX, спасибо большое. Попробую зачитать что-нибудь простенькое для начала, а там и партикли можно будет пускать...
#6
09 октября 2008 в 10:20
[quote author=VorteX link=topic=409.msg10039#msg10039 date=1223542313]рекомендую пользоваться checkextension()[/quote]Это в QC пишется что-то вроде checkextinsion(FRIK_FILE) и если возвращает 1, то можно пускать код обработки, а если 0 - то просто не включать эффект?
#7
09 октября 2008 в 10:46
Scrama пишет:<br />
Это в QC пишется что-то вроде checkextinsion(FRIK_FILE) и если возвращает 1, то можно пускать код обработки, а если 0 - то просто не включать эффект?<br /><br />в общем так, я использую такой подход:<br />
<br />void() worldspawn =<br />{<br /> // проверим что движок поддерживает функцию checkextension<br /> if (!cvar("pr_checkextension"))<br /> error("Engine does not supports QSG extensions");<br /> // проверяем жизненно важный FRIK_FILE<br /> if (!checkextension("FRIK_FILE"))<br /> error("Vital extension FRIK_FILE is missed");<br /> ...<br />}<br />
<br /><br />или так, как в цитате (отрубание вызова функции)<br /><br /><br />float frik_file_supported;<br />void() worldspawn =<br />{<br /> frik_file_supported = FALSE;<br /> if (cvar("pr_checkextension"))<br /> {<br /> if (!checkextension("FRIK_FILE"))<br /> frik_file_supported = TRUE;<br /> }<br /> ...<br />}<br /><br />void() SomeFuncToWriteFile =<br />{<br /> if (!frik_file_supported)<br /> return;<br /> filehandle = fopen....<br />}<br />
<br /><br />а там и партикли можно будет пускать...<br />Партикл-скрипты задумал сделать? :)<br />
#8
09 октября 2008 в 10:58
А фишка в том, что fgets() при достижении конца файла начинает возвращать именно нулевую строку, то есть без современного FTEQCC/FRIKQCC конец файла нормальным образом не поймать<br />Даже в кушной файловой системе FS_ReadFile спецом добавляет нолик к буферу, в который загрузили файл.
#9
10 октября 2008 в 02:51
Партикл-скрипты задумал сделать?Да, хочу сделать что-то вроде Spirit of Half-life, но под Кваку. Пока чисто из интереса, на сколько далеко можно продвинуться.<br /><br />Дернул тут вращающиеся объекты из армагона - что-то они не срабатывают, или я чего-то не то делаю.<br />Навписывал там в функции бпринтов - отчитывается о выполнении постоянно, но сам объект куда-то исчез с карты, его просто не видно. А функция в консоль исправно гадит.<br />
<br />{<br />"classname" "func_rotate_entity"<br />"spawnflags" "2"<br />"rotate" "30 0 0"<br />"speed" "1"<br />"target" "rp"<br />"targetname" "rot"<br />"origin" "128 0 0"<br />}<br />{<br />"classname" "info_rotate"<br />"targetname" "rp"<br />"origin" "128 0 96"<br />}<br /><br />
#10
10 октября 2008 в 03:27
Майндфак! Там оказывается две поинт-ентити и одна солид должна быть!<br />Осталось хоть как-то сгладить движение и получать зачот...