1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

Результаты поиска

  1. JoLan
  2. JoLan
  3. JoLan
  4. JoLan
    Тема

    PCK Module

    Представляю Вашему вниманию программу PCK Module. [img] Возможности программы: Редактирование pck-архивов PW и JDМассовое и пофайловое извлечение, добавление, удаление файловПоиск файлов и директорий с переходом к найденной позиции по двойному клику: [img] Дефрагментация архива* Немного предыстории: если добавлять файлы с помощью sPCK, то при замене уже существующего файла sPCK просто дописывает новый файл в конец и указывает смещение на добавленный файл в записи о данном файле ( %) ). Таким образом в архиве будет 2 файла, допустим того же «1.ini», но в файловой таблице будет указано смещение последнего добавленного. То есть в архиве будет лишних 245 байт (некритично, конечно, ну а если models.pck?). Данная программа ищет такие блоки и может их устранить: [img] (На скриншоте указан configs.pck от свежескачанного клиента руофа) Цена: 500 р. На данный момент в связи с пребыванием в армии принимаю только яндекс.деньги и пользуюсь только ICQ.
    Автор темы: JoLan, 1 фев 2012, ответов - 17, в разделе: Архив
  5. JoLan
  6. JoLan
    Скрин - полезная вещь для просмотра логов с разных сессий. Т.к. многие не умеют пользоваться сий замечательной вещью, опишу, что нужно делать: Конечно же установить сам screen apt-get install screen Теперь как им пользоваться: 1) Создание нового скрина:screen -S [имя] -h [кол-во строк, которые сохранять]Пример:screen -S server -h 1000В этом случае создастся скрин с именем server, который будет хранить до 1000 строк (Обратите внимание, что буква "S" заглавная). 2) Сворачивание скрина:Ctrl+A+D 3) Восстановление свернутого скрина: screen -r [имя]Пример: screen -r server 4) Уничтожение скрина: Ctrl+D Теперь, если необходимо что-то скопировать со скрина, увы, стандартный скролл-бар не поможет. Нужно нажать Ctrl+A затем Esc и теперь можно перемещать курсор стрелкой, выделять мышью и копировать сочетанием Ctrl+Insert. Для отмены режима копирования нужно снова нажать Esc. Ну, вроде бы, все.
    Автор темы: JoLan, 17 мар 2011, ответов - 1, в разделе: Общее
  7. JoLan
  8. JoLan
    Тема

    Content Finder

    Лениво было искать какие программы могут искать по содержимому, поэтому сделал свою: [img] Path - путь до сканируемой директории Entries - вхождения, которые нужно искать в файлах Ext. - расширения файлов, которые сканировать Вхождения и расширения должны вписываться через "-" и обязательно в конце тоже должно стоять тире, иначе последнее вхождение/расширение будет проигнорировано. Регистр искомых расширений/вхождений неважен. FileName - имя файла (Капитан, конечно) Entry - какое вхождение было найдено в файле Index - номер строки, в которой было найдено вхождение [hide thank "1"]Ссылка: http://narod.ru/disk/6978659001/content_finder.zip.html Пароль: Special for mmorpg-devs.ru[/hide] P.S. Программа может искать в любых текстовых файлах, она не ограничивается только тремя расширениями. P.P.S: Чтобы найти юникодное вхождение (аля китайские иероглифы) сперва нужно сконвертировать Unicode в Multibyte Программа для конвертирования Unicode <-> Multibyte
    Автор темы: JoLan, 7 мар 2011, ответов - 9, в разделе: Архив
  9. JoLan
  10. JoLan
    Для чего вообще нужны циклы? Они нужны для того, чтобы вводить/выводить повторяющуюся информацию не 100 строками кода, 2-мя. Циклы бывают 3-х видов: 1) Параметрический цикл - цикл с заданным кол-вом итераций (Итерация - один проход всех команд в цикле) 2) Цикл с предусловием - будет выполняться, пока будет или не будет выполняться некое условие 3) Цикл с постусловием - то же самое, что и с предусловием, только условие будет проверяться после итерации, а не перед ней. Допустим, нам нужна сумма чисел от 1-го до 30, мы же не будем писать так:sum := 1+2; sum := sum+3; sum := sum+4;и т.д. Намного проще задействовать для этого цикл: - Параметрическийprogram Project1; {$APPTYPE CONSOLE} uses SysUtils; var i,sum:integer; begin sum := 0; for i := 1 to 30 do sum := sum + i; writeln(sum); readln; end. - Цикл с предусловиемprogram Project1; {$APPTYPE CONSOLE} uses SysUtils; var i,sum:integer; begin sum := 0; i := 1; while i <= 30 do begin sum := sum + i; i := i+1; end; writeln(sum); readln; end.Заметьте, что здесь мы выделили каждую итерацию конструкцией begin-end, показывая компилятору тем самым, что с каждой итерацией нужно выполнять более, чем 1-у команду. - Цикл с постусловием:program Project1; {$APPTYPE CONSOLE} uses SysUtils; var i,sum:integer; begin sum := 0; i := 1; repeat sum := sum + i; i := i+1; until (i > 30); writeln(sum); readln; end.В цикле с постусловием не нужно выделять несколько команд конструкцией begin-end, т.к. конструкция вида repeat-until уже предусматривает выполнение нескольких команд (ну это можно понять, взглянув на код). Если Вам нужно прервать цикл в определенной итерации, то Вы должны воспользоваться командой Break:program Project1; {$APPTYPE CONSOLE} uses SysUtils; var i,sum:integer; begin sum := 0; i := 1; repeat sum := sum + i; i := i+1; if i = 15 then Break; until (i > 30); writeln(sum); readln; end.В этом случае выполнение цикла на 15-й итерации прервется. Иногда бывает нужно пропустить некую итерацию, в этом случае мы воспользуемся командой Continue:program Project1; {$APPTYPE CONSOLE} uses SysUtils; var i,sum:integer; begin sum := 0; for i := 1 to 30 do begin if i = 15 then Continue; sum := sum + i; end; writeln(sum); readln; end.Тогда программа пропустит 15-ю итерацию и, соответственно, не прибавит число 15 (т.к. условие стоит до выполнения суммы). Кстати, поскольку теперь в цикле нужно выполнять более одной операции мы выделили их конструкцией begin-end. Но тут все задано программно и неинтересно. Сделаем ввод с клавиатуры (сделаю только с параметрическим циклом, с другими сами разберетесь):program Project1; {$APPTYPE CONSOLE} uses SysUtils; var i,limit,sum:integer; begin Write('Input sum limit: '); Readln(limit); sum := 0; for i := 1 to limit do sum := sum + i; writeln('Sum: ',sum); readln; end. [img] Вот мы и научились пользоваться циклами. Поздравляю! P.S. Вместо такой конструкции i := i+1 или i := i-1 лучше пользоваться фукциями inc(i) и dec(i) соответственно.
    Автор темы: JoLan, 21 фев 2011, ответов - 2, в разделе: Уроки
  11. JoLan
    Добрый день. Сегодня я покажу Вам, как работать с переменными. Переменная - это отведенный под программу участок памяти, в который по ходу программы будут заноситься разные значения. Создаем новое консольное приложение (как это сделать описано в 1-м уроке) и объявляем переменную командой var (Variable - переменная):program Project1; {$APPTYPE CONSOLE} uses SysUtils; var a:integer; begin end. Тут мы объявили переменную типа Integer, что значит целые числа в пределах от -2147483648 до 2147483647, то есть наша переменная "a" сможет принять значение от -2147483648 до 2147483647, больше, чем достаточно. Что же мы сделаем дальше? Конечно же присвоим значение этой переменной и выведем её на экран. Оператор присваивания в языке паскаль выглядит так " := ":program Project1; {$APPTYPE CONSOLE} uses SysUtils; var a:integer; begin a := 5; writeln(a); readln; end.Тут мы присвоили переменной "a" значение 5, все просто и замечательно. [img] Но ведь одна переменная это не интересно, давайте сделаем простой калькулятор с одним действием. Для этого нам понадобится 3 переменные:a,b,result: integer; //переменные можно называть, как Вашей душе угодно Выведем на экран сумму a и b:program Project1; {$APPTYPE CONSOLE} uses SysUtils; var a,b,result: integer; begin a := 2; b := 3; result := a + b; writeln(result); readln; end.[img] В данном примере мы задали значения a и b программно, но ведь интересней, если мы введем их с клавиатуры, не так ли? Тут нам пригодится Readln:program Project1; {$APPTYPE CONSOLE} uses SysUtils; var a,b,result: integer; begin readln(a); readln(B); result := a + b; writeln(result); readln; end. Теперь программа умеет складывать числа, введенные с клавиатуры, простенький калькулятор готов.[img] Но выглядит это не очень. Делаем вывод красивым: program Project1; {$APPTYPE CONSOLE} uses SysUtils; var a,b: integer; begin write('Input first argument: '); readln(a); write('Input second argument: '); readln(B); write('Total: ',a+B); readln; end. Заметили, что result на самом-то деле не нужен? Теперь немного о Write/Writeln: все аргументы для вывода следует писать через запятую. Со строками немного по-другому, но сейчас не об этом. [img] Калькулятор готов! Поздравляю!
    Автор темы: JoLan, 19 фев 2011, ответов - 0, в разделе: Уроки
  12. JoLan
    Итак, для начала нам понадобится среда разработки. Я предпочитаю Embarcadero RAD Studio 2010. Скачали? Отлично. Как установить и крякнуть описано в той же теме, тут об этом писать незачем. Внимание: Запускайте Delphi 2010, а не RAD Studio, иначе потом запутаетесь, что относится к C++, а что к Delphi Выбираем File -> New -> Console Application [img] Не нашли? Фигня-война: нажимаем File -> New -> Other [img] Итак, мы видим такой код:program Project1; //Это само название программы, не обязательно вообще, но лучше пусть будет. {$APPTYPE CONSOLE} //директива компилятору, говорит, что выходной тип приложения текущего проекта будет консоль uses SysUtils; //Подключаемые библиотеки, в SysUtils находятся большинство самых необходимых функций и процедур begin //Начало основного тела программы try { TODO -oUser -cConsole Main : Insert code here } except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end. //Конец программы. Видите конструкцию try-except? Сносите её куда подальше, объясню позже, мы ведь простой Hello World пишем. Должно получиться вот это: program Project1; {$APPTYPE CONSOLE} uses SysUtils; begin end. Все, теперь у нас есть заготовка под нашу программу. Немного об используемых процедурах: Writeln - вывод на экран переменной, константы с переносом строки Write - аналогично, но переноса не будет Readln - считывание переменной Read - то же самое Что мы хотим от нашей программы? Нет. Вон вы, в первом ряду! Да, почти! Да, именно это: мы хотим вывести на экран строку. Для этого нам понадобится процедура... Правильно, Writeln. Задаем строковый аргумент в процедуру, после чего наш код приобретает следующий вид:program Project1; {$APPTYPE CONSOLE} uses SysUtils; begin Writeln('Hello world!'); end. Немного пояснений: раз мы передаем постоянную строку, т.е. константу, мы задаем её явно в аргументах процедуры. А чтобы компилятор не расценил это как команду мы заключили её в апострофы. Запускаем. Консоль появилась и сразу исчезла. Программа сработала правильно, вывела в консоли наше сообщение, но мы не объяснили компилятору, что до выхода из приложения нужно дождаться нажатия Enter. Для этого дописываем Readln после вывода сообщения:program Project1; {$APPTYPE CONSOLE} uses SysUtils; begin Writeln('Hello world!'); Readln; end. Теперь все замечательно, вот и наша первая программа: [img] Поздравляю Вас! P.S. Что непонятно - спрашивайте, расскажу и покажу.
    Автор темы: JoLan, 18 фев 2011, ответов - 3, в разделе: Уроки
  13. JoLan
  14. JoLan
    Тема

    sMODfix Tool

    sMODfix Tool v.2 Возможности: копирование всех *.ecm и *.smd по одному заданному *.ecm копирование всех *.gfx, относящихся к скопированным *.ecm файлам копирование всех *.dds, относящихся к *.gfx файлам сохранение древовидной структуры, что упростит обратное копирование файлов. 2 метода копирования: Исправление: будут скопированы только *.ecm, *.smd, *.gfx, *.dds Добавление: скопируются полные папки по заданным *.ecm файлам, а так же соответствующие *.gfx и *.dds файлы [IMG] Отдельное окно, куда выводятся не нейденные файлы [IMG] Структура программы: sMODfix Tool - корневой каталог files - каталог, в который копируются заданные файлы ecm_smd - каталог, в который копируются *.ecm и *.smd gfx - каталог, в который копируются *.gfx и *.dds lines.txt - юникодовый текстовый файл, хранящий последние заданные *.ecm файлы conf.ini - конфигурационный файл, который хранит пути до models и gfx, а так же выбранный метод копирования. Как пользоваться: В поле Models требуется указать путь до папки models.pck.files, в GFX - путь до папки gfx.pck.files\gfx. Пример: D:\Games\Perfect World International\element\models.pck.files D:\Games\Perfect World International\element\gfx.pck.files\gfx Ссылка: https://cloud.mail.ru/public/1d37583805cc/smft.zip Пароль: MMORPG Devs Приветствуются вопросы, пожелания, критика, недочеты.
    Автор темы: JoLan, 9 янв 2011, ответов - 11, в разделе: PW Разработки
  15. JoLan
    В кратце: Недавно получил в наследство сервачек ПВ, тыкаясь с новой игрушкой, как-то коряво тормознул и радостно принялся ковырять сервачек, покавырял полез запускать, оп вижу какие-то ошибки аля ругаюсь на такую то базу пум пум пум и как следствие err : gdelivery:: connect GameDB failed Много матов от начальства, 3и часа с дрожащими руками и помощью товарища мастера (огромное ему спасибка за попытку помочь) ни к чему не привели. Расстроенный я откатил базы на последний дамп (как раз когда отдали сервачек я его себе дампнул) и запустил сервер, игроки недовольны, начальство подзатыльником пригрозило и усе. Но как ум любопытный я не мог простить себе данной огрешности и решил порыскать, часик эксперементов и подозрения по поводу утилки dbtool лежащей в папке с базами подтвердились. Натравив утилку с параметром -r на интересующую базу (на которую ругается) она что-то похимичила и исправила нашу базу =D Есть пара подводных камней, например натравливая утилку на базу с параметром -r [Вход] [Выход] при вход=выход база неведомыми силами может испортится. Натравливая утилку на нормальную базу, она тоже может что нить испортить Для удобства написал скриптик прогоняющий по всем базам, репейря их в базу[2] и заменяя базу[2] на базу[1]. Похожих темок не увидел, поэтому разместил в раздел для опытных. Если тема стара и все это фигня, то перекидывайте новичкам. Но кроме как вайпа или отката на бекапы я вроде ничего не увидел Добавлю немного от себя, чтоб не было глупых вопросов: 1) создаем файл любого названия в /home/gamedbd nano /home/gamedbd/recover.sh 2) вставляем в содержимое этот текст:#!/bin/bash for file in `ls ./dbhomewdb/dbdata/`; do ./dbtool -r -s ./dbhomewdb/dbdata/$file -d ./dbhomewdb/dbdata/$file"2" mv ./dbhomewdb/dbdata/$file"2" ./dbhomewdb/dbdata/$file done 3) Сохраняем и закрываем файл (Ctrl+O -> Ctrl+X) 4) Выдаем права файлуchmod 755 /home/gamedbd/recover.sh 5) Запускаем скрипт cd /home/gamedbd ./recover.sh Данный гайд был нагло списан с emudev, автора не помню.
    Автор темы: JoLan, 8 янв 2011, ответов - 0, в разделе: PW Фиксы
  16. JoLan
  17. JoLan
  18. JoLan
    есть ini-файл такого содержания: [Bowmaster] Sum1=200000 Name1=Neron [Warrior] Sum1=200000 Name1=Belum [Mage] Sum1=200000 Name1=kirdan [Priest] Sum1=200000 Name1=Вжик [Werewolf] Sum1=200000 Name1=Зак Sum2=200000 Name2=Тестчо [Druid] Sum1=200000 Name1=Suffocate Задача: посчитать в каждой секции кол-во народа и дописать соответствующее число к классу. Мой вариант кода: procedure TForm1.sRadioGroup1Click(Sender: TObject); const a:array[0..5]of string=('Воин','Маг','Лучник','Жрец','Оборотень','Друид'); b:array[1..6]of string=('Warrior','Mage','Bowmaster','Priest','Werewolf','Druid'); var k1,i1,i2:integer; s:string; begin StringGrid1.RowCount:=2; StringGrid1.Cells[0,1]:=''; StringGrid1.Cells[1,1]:=''; JIni:=TiniFile.Create(extractfilepath(Application.ExeName)+'judges.ini'); case sRadioGroup1.ItemIndex of 0:s:='Warrior'; 1:s:='Mage'; 2:s:='Bowmaster'; 3:s:='Priest'; 4:s:='Werewolf'; 5:s:='Druid'; end; begin for k1:=1 to JIni.InstanceSize do begin StringGrid1.Cells[0,k1]:=JIni.ReadString(s,'Sum'+inttostr(k1),''); StringGrid1.Cells[1,k1]:=JIni.ReadString(s,'Name'+inttostr(k1),''); if (StringGrid1.Cells[0,k1]<>'') and (StringGrid1.Cells[1,k1]<>'') then StringGrid1.RowCount:=StringGrid1.RowCount+1 else if StringGrid1.RowCount>2 then begin StringGrid1.RowCount:=StringGrid1.RowCount-1; break; JIni.Free; end else begin break; JIni.Free; end; end; end; JIni:=TiniFile.Create(extractfilepath(Application.ExeName)+'judges.ini'); for i1:=0 to 5 do begin for i2:=1 to JIni.InstanceSize do begin s:=JIni.ReadString(b[i2],'Name'+inttostr(i2),''); if s<>'' then sRadioGroup1.Items.Strings[i1]:=a[i1]+' ('+inttostr(i2)+')' else break; end; end; JIni.Free; end; [img] К каждой професии добавляет число, равное кол-ву записей в секции Warrior. Не пойму в чем проблема :lol:
    Автор темы: JoLan, 27 июл 2010, ответов - 11, в разделе: Delphi
  19. JoLan
  20. JoLan