Может быть там нет 36 элемента? Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
Krisss, На вид все нормально. Процитируй ошибку плиз. И еще совет - поищи в гугле про отладку кода в делфи (breakpoints, точки останова) - тебе сильно поможет. Будешь смотреть код по линиям и увидишь где ошибка сам. Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } procedure ExitClick(Sender: TObject); end;
var Form1: TForm1; progdir:string; help1:TAnsiStringArray; tyu:string; L: TTextLibrary; implementation {$R *.dfm} procedure TForm1.ExitClick(Sender: TObject); begin Form1.Close; end; procedure TForm1.Button1Click(Sender: TObject); begin l:= TTextLibrary.Create; ProgDIR:=ExtractFilePath(Application.ExeName); if (progDIR[Length(progDIR)] <> '\') then begin progDIR:=progDir + '\'; end; progdir:=progdir+'TEXT_GAMES.AE5_TEXT';
l.LoadLIBXFile(progdir,0,help1,true); tyu:=help1[36]; form1.Caption:=tyu; L.Free; //и освободить его после использовани end;
end.
unit Unit2;
interface uses Classes, SysUtils,unit3, Math, StrUtils; type TTextLibrary = class procedure LoadLIBXFile(FilePath: string; aFirstIndex: Word; var aArray: TAnsiStringArray; aOverwrite: Boolean); private fLocale: AnsiString; fFallbackLocale: AnsiString; public end; implementation uses unit1; {AE5_TEXT files consist of lines. Each line has an index and a text. Lines without index are skipped} procedure TTextLibrary.LoadLIBXFile(FilePath: string; aFirstIndex: Word; var aArray: TAnsiStringArray; aOverwrite: Boolean); var aStringList: TStringList; I: Integer; s: AnsiString; firstDelimiter: Integer; ID, MaxID: Integer; begin if not FileExists(FilePath) then Exit;
//First line is empty or comment and could have first 3 bytes Unicode Byte-Order Mark (BOM) s := aStringList[1]; if Copy(s, 1, 6) <> 'MaxID=' then Exit;
firstDelimiter := Pos('=', s); if not TryStrToInt(RightStr(s, Length(s) - firstDelimiter), MaxID) then Exit;
if not aOverwrite then SetLength(aArray, aFirstIndex + MaxID + 1);
for I := 0 to aStringList.Count - 1 do begin s := aStringList[I];
//Get string index and skip erroneous lines firstDelimiter := Pos('=', s); if firstDelimiter = 0 then Continue; if not TryStrToInt(TrimLeft(LeftStr(s, firstDelimiter - 1)), ID) then Continue; if ID > MaxID then Continue;
s := RightStr(s, Length(s) - firstDelimiter); //Required characters that can't be stored in plain text s := StringReplace(s, '\n', eol, [rfReplaceAll, rfIgnoreCase]); //EOL s := StringReplace(s, '\\', '\', [rfReplaceAll, rfIgnoreCase]); //Slash if not aOverwrite or (s <> '') then aArray[aFirstIndex + ID] := s; end;
aStringList.Free; //Must free at last to avoid memory-leaks end;
end.
unit Unit3;
interface uses Classes, SysUtils, Math, StrUtils; const eol:string=#13+#10; //EndOfLine type TStringArray = array of String; TAnsiStringArray = array of AnsiString; implementation
end.
MaxID=36 0=Меню Игры 1=Новая игра 2=Выбрана новая игра. Пожалуйста выберите игру. 3=Компания 4=Выбрана Компания. Пожалуйста выберите Компанию. 5=Одиночная игра 6=Выбрана Одиночная игра. Пожалуйста выберите категрию одиночной игры. 7=Учебник 8=Выбран Учебник. Пожалуйста выберите один из учебников. 9=Назад 10=Инфо 11=Информация игры. 12=Редакторы 13=Выбраны редакторы. Пожалуйста выберите редактор. 14=Настройки 15=Выбраны настройки. 16=Звук 17=Громкость звуков 18=Громкость голосов 19=Музыка 20=Выбор папки музыки 21=Случайно 22=По порядку 23=Включена 24=Отключена 25=Статус продолжения музыки 26=Графика 27=Окно 28=В Полном экране 29=Разрешение экрана 30=Яркость 31=Автосохронение 32=Язык 33=Русский 34=Английский 35=Немецкий 36=Выход
И в Delphi 7 тоже код не работает может скажешь что не так. Возникает системная ошибка
Сообщение отредактировал Krisss - Воскресенье, 16.12.2012, 16:09
Итак, открываем проект, ставим курсор на линию L.LoadLIBXFile(progdir, 0, help1, true) и жмем F4 это запутист программу и остановит ее на этой строке. когда прога остановлена, наводим курсор на переменную, чтобы посмотреть ее состояние - в progdir путь правильный, help1 пока еще пустой. Жмем F7 - это переход на следующую строку (она будет внутри LoadLIBXFile). Жмем F7 еще несколько раз и смотрим что в переменных и где будут перескоки. Первый перескок на if Copy(s, 1, 6) <> 'MaxID=' then потому что строки нумеруются с 0, а первая строка уже (0=Меню Игры), смотрим комментарий над строчкой, там написано, что нулевая строка должна быть пустой, а MaxID должно стоять на 1 строке. Редактируем TEXT_GAMES. Перезапускаем, опять F4 и F7, смотрим дальше, где прога вылетает - на строке aArray[aFirstIndex + ID] := s; Думаем почему, а потому что не задали массиву длину. Длина должна задаваться здесь - if not aOverwrite then SetLength(aArray, aFirstIndex + MaxID + 1); а не задается из-за ключа aOverwrite - он должен быть False а не True. Правим L.LoadLIBXFile(progdir, 0, help1, False); Теперь все работает. Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
TEXT_GAMES.AE5_TEXT отредактировал? *первая строчка должна быть пустой 'TEXT_GAMES.AE5_TEXT' в той же папке что и ЕХЕ лежит? Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
0:Война и Мир 10:Приспешникам предателя удалось пробить брешь в нашей обороне: крепость пала, и если вам не удастся обратить врага в бегство, то и все королевство погублено, а разбойник, посягнувший на трон, добьется успеха и одержит победу. К оружию, моя гвардия! 11:Благодаря одержанной вами победе мы снова обрели надежду... Но не настало еще время для празднеств: разбитый враг отступает, чтобы вновь собраться с силами в одной из соседних деревень! Постарайтесь сохранить спокойствие и ни в коем случае не позволяйте себе вступать в бой в открытом поле. Рельеф местности способствует успешной обороне: в месте узкого брода, который обязательно будут пересекать солдаты противника, вы наверняка одержите победу! 12:О, знаменательный день! Армия вероломного принца отступает, и дорога к княжеству Лауенбург теперь свободна. Однако сам князь фон Лауенбург уже давно известен как союзник нашего принца, а следовательно отправляясь в его владения, вы должны считаться с возможным вооруженным сопротивлением... 13:Нашим врагам не удалось остановить наступление королевских войск: разбитый фон Лауенбург вместе со своей личной гвардией отошел в крепость и готовится к штурму. Население княжества встречает нас по-дружески, что наверняка позволит нам увеличить армию. Захватите Лауенбург и разбейте князя -- это станет хорошим предостережением и для всех других изменников! 14:Фон Лауенбург сдался вам и, раскаявшись, получил милостивое прощение нашего короля. Следующей вашей целью теперь стал город Моорбах: совсем рядом с городом наши разведчики обнаружили покинутый опорный пункт, который вы должны занять и укрепить. Так как теперь Лауенбург стал союзником, его войска будут сражаться бок о бок с вашими. Постарайтесь сохранить эти воинские формирования, чтобы укрепить доверие между нами и нашими новыми соратниками -- в ближайшем будущем мы рассчитываем получить от них новых солдат... 15:Моорбах захвачен, и наши враги не только разбиты, но и совершенно деморализованы. По сообщениям разведчиков, чтобы отомстить нам за позор Моорбаха, на северо-западе формируется новая вражеская армия. Однако теперь мы достаточно сильны для того, чтобы и самим перейти в наступление: выступайте навстречу вражеским соединениям, прежде чем они объединятся. При этом вам можно будет уже опереться на присоединившихся к нам копейщиков из Лауенбурга. 16:Известие о ваших победах распространяется по всему королевству с быстротой молнии, капитан! Повсюду граждане восстают против тирана, но на севере лежит Вальхайм, все еще удерживаемый вероломным принцем. Хозяин Вальхайма отказывается принять парламентеров и клянется защищать город до последнего, однако жители небольшой деревушки недалеко от нашего опорного пункта уже восстали против поработителей! 17:Северные варвары собираются вместе, чтобы вторгнуться в наше ослабевшее королевство. Любыми способами вам нужно остановить их, прежде чем они смогут перейти на сторону бунтовщиков. Попробуйте соорудить на руинах Вальхайма несколько дозорных башен: вы должны возвести как можно более прочный бастион для защиты от лавины вражеских полчищ, а затем уничтожить дикарей всех до единого! 18:Дикари ссорятся между собой. Используя хитрые дипломатические приемы, вы смогли перетянуть на свою сторону двух их вождей вместе с воинами. Ваш теперешний лагерь легко защищается, но площадь для его обустройства очень ограничена, а потому к вопросам его планировки вам следует отнестись с особенным вниманием. Враг готовится к сражению и скоро нападет -- вам следует поспешить, чтобы успеть подготовиться и дать врагу достойный отпор! 19:Проклятый деспот угрожает одному из наших городов. Лишь марш-бросок позволит вашим солдатам своевременно прибыть к месту события. По данным наших разведчиков, вам придется иметь дело с крупным вражеским отрядом, при этом собственные вооруженные силы вам надлежит грамотно рассредоточить. Только правильно выбранная тактика принесет вам победу, в то время как штурм напролом неизбежно приведет к поражению... 20:Наступление на наш город с блеском удалось отразить. Конечно, вероломная атака оставила свой след -- враг беспощадно грабил, и едва ли не все жители погибли... Чувство мести требует устроить врагам кровавую бойню, однако прежде чем привлечь их к суровому ответу, вы должны в срочном порядке восстановить разрушенный город! 21:Враг был наголову разбит и отступает на север. Имеющиеся там залежи железной руды имеют огромное стратегическое значение для успеха военных действий: наберите новую армию, чтобы раз и навсегда изгнать разбойников из этого региона! Мост, расположенный к востоку от вашего лагеря, поможет вам при проведении оборонительных действий, в то время как ваша военная мощь будет только расти. 22:Враг все еще располагает огромными резервами и собирается провести контрнаступление. Однако ему будет весьма трудно преодолеть стоящие на его пути горы со всей своей огромной армией... Выступите навстречу противнику и поджидайте его войска у самого высокого горного перевала -- предатели вновь не смогут одержать верх в сражении! 23:Наконец ваши усилия увенчались успехом и принесли свои плоды. Повсюду в королевстве подданные короля оказывают сопротивление террору принца, и далеко не все из его собственных генералов согласны с бесчеловечными методами расправы, используемыми им против мирного населения страны. Один из таких генералов тайком передал нам сообщение о том, что принц хочет наказать жителей одной деревни, открыто восставших против его тирании. Вы, конечно, должны нарушить планы тирана и защитить своих смелых и мужественных граждан! 24:Недалек, недалек тот час, когда враги короля будут окончательно повержены: Принц изменил свою тактику и решил занять важные месторождения природного сырья. Попробуйте самостоятельно захватить ближайшие железные рудники и выбейте оттуда разбойников. Болотистые места создадут вам дополнительные трудности, поэтому готовьте себя и своих людей к жестокой и затяжной битве... 25:В этой местности в вашем распоряжении оказались и плодородные земли, и богатые залежи ценного сырья. Можно не сомневаться в том, что скоро враг двинется сюда, чтобы снова захватить этот лакомый кусочек земли под свой контроль. Удерживайте этот район и беспощадно уничтожайте всех наступающих солдат! 26:Предатель собирает на севере всех своих вассалов, чтобы еще раз попытаться перейти в наступление. Однако он еще не готов встретиться с нами в открытом бою. Выступайте ему навстречу, чтобы разбить его новую армию еще до того, как она будет в состоянии атаковать нас. На этот раз мы должны пройти через горы. И, конечно, противник занял самый верхний горный перевал, чтобы помешать нашему продвижению. Но мы должны попасть на север, чего бы это нам не стоило! 27:Ваша новая победа вынудила противника перейти к обороне. Он окопался под защитой почти неприступной, созданной природой крепости и трусливо ожидает нашего решительного наступления. Военачальники уже много раз пытались взять крепость штурмом, однако все эти попытки провалились. Но вы не должны падать духом: может быть, ваши предшественники оставили вам ценную информацию, которая может помочь в решении этой трудной задачи... 28:Это наш черный день. Коварное покушение на короля, увы, увенчалось успехом... Потерявший всякий стыд принц, -- несомненно, истинный закулисный вдохновитель вероломного убийства, -- провозгласил себя новым королем... Укрывшись за мощным валом, он надеется, что таким способом сможет остановить вас. Штурмуйте кажущиеся неприступными стены крепости и добейтесь, чтобы самозванец понес заслуженную кару за свое преступление! 29:Мы у цели: кольцо осады вокруг последнего бастиона лжекороля замкнулось! Никакой пощады тем, кто еще верен предателю -- уничтожьте врага и сравняйте с землей все следы его былого господства, после чего в королевстве вновь воцарятся мир и спокойствие!
а вот мой
MaxID=36
0=Меню Игры 1=Новая игра 2=Выбрана новая игра. Пожалуйста выберите игру. 3=Компания 4=Выбрана Компания. Пожалуйста выберите Компанию. 5=Одиночная игра 6=Выбрана Одиночная игра. Пожалуйста выберите категрию одиночной игры. 7=Учебник 8=Выбран Учебник. Пожалуйста выберите один из учебников. 9=Назад 10=Инфо 11=Информация игры. 12=Редакторы 13=Выбраны редакторы. Пожалуйста выберите редактор. 14=Настройки 15=Выбраны настройки. 16=Звук 17=Громкость звуков 18=Громкость голосов 19=Музыка 20=Выбор папки музыки 21=Случайно 22=По порядку 23=Включена 24=Отключена 25=Статус продолжения музыки 26=Графика 27=Окно 28=В Полном экране 29=Разрешение экрана 30=Яркость 31=Автосохронение 32=Язык 33=Русский 34=Английский 35=Немецкий 36=Выход
там отступ должен быть от строки вот поэтому и ошибка
Добавлено (16.12.2012, 18:40) --------------------------------------------- Кром, пожалуйста, подскажи, как можно сделать архивчик на подобия твоего rxx чтобы он содержал эти текстовики но просто так чтобы не возможно было открыть
Сообщение отредактировал Krisss - Воскресенье, 16.12.2012, 18:37
Krisss, зачем, оставь как есть ) Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
как оставить тогда скажи как можно проверку сделать есть ли отступ в файле если нет то сделать так как без отступа код не работает могу архив с файлами выслать для сравнения
Krisss, У нас отступ нужен, т.к. иногда при редактировании файла, у него появляются три символа перед первой строкой (погугли BOM header). Самый простой способ его пропустить - добавить вверх пустую строчку (к которой он будет лепиться) и всегда ее пропускать. Нашли баг в КаМ Ремейке? Отправьте отчет на с пометками, желательно на английском, в какой версии, что и когда случилось, приложите реплей или сохраненную игру в которой этот баг воспроизводится.
Добавлено (20.12.2012, 21:34) --------------------------------------------- Как можно координаты курсора мышки X b Y перевести в координаты Image Left и Top.
Добавлено (25.12.2012, 20:28) --------------------------------------------- Krom, а какой ты стиль у StatusBar задал, чтото в коде стиль я у тебя не нашел
Добавлено (29.12.2012, 23:41) --------------------------------------------- Скажите кто-нибудь, как научиться создавать и использовать спрайты Rxx и как их можно использовать в Opengl, а то канфас пробовал, но с канфас 2 проблемы 1. Это не поддерживает отрисовку Png 2. Виснет. Картинки размерами 1000 на 2000 уменьшает в размерах, когда отрисовывает.
Добавлено (06.01.2013, 17:27) --------------------------------------------- Кром скажи, что за файл cmp у тебя.
Добавлено (09.01.2013, 15:01) --------------------------------------------- Кто-нибудь скажите мне, как сделать редактор карт, но чтобы каждая картинка была отдельно меня пока что интересует движение имаге по скролбоксу.
Сообщение отредактировал AlexandrV - Четверг, 20.12.2012, 21:36