ыыыы можно самому упаковать И кстати говоря можно из проги очень просто вытащить архив с модами, который ставиться...
firsacho, ты как всегда в своем репертуаре хД
Quote (firsacho)
1. Разделить прогу на две части с разными но похожими названиями. Одна для создания паков, другая для их загрузки. Не все, кто юзает моды - их создает. Раздавать проги как два отдельных файла.
несогласен, во первых проще использовать мой принцип, то есть создание ехе фалов, он в несколько раз удобнее
Quote (firsacho)
2. Делать бэкап стандартных файлов перед установкой мода. После удаления мода (восстановления бэкапа) удалять стандартные файлы из папки бэкап
это можно, но это очень проблематично, придется делать бэкап в гигабайт о_О, плюс придется сверять хэш файлов, что бы знать, что это стандартные файлы
Quote (firsacho)
3. Создать центральную прогу Mod Manager (или что то типа того). Прога регистрирует все мод паки на компе пользователя в виде списка. При выборе названия мода из списка выводит справа подробную информацию о моде, где будет вкл\выкл\удалить. При этом можно будет включать сразу несколько модов, если они не заменяют одни и те же файлы.
хы, можно, но разработка затянется на месяц....
Quote (firsacho)
4. Можно регистрировать по типу заменяемых файлов тип мода и выводить об этом инфу (интерфейс, модели оружия, твики оружия и т.д.)
я сначала хотел это сделать, но там были свои подводные камни, и мне было лень их решать :3
созданный ехе файл, после запуска, вытаскивает из своих ресурсов файл "temp.modfile", и кладет его в ту папку из которой он запущен, это простой zip архив
Quote (Unaited_Ru)
тогда прога будет создавать и устанавливать моды?
не понял что ты имеешь в виду, моя прога запаковывает мод в ехе файл, тоесть что бы поставить мой мод, нужно всего лишь запустить этот ехе, а не скачивать какую то программу, что бы его поставить
Quote (Unaited_Ru)
можно ведь делать бэкап только заменяемых файлов, а не всей игры
читаей более внимательнее
Quote (Unaited_Ru)
плюс придется сверять хэш файлов, что бы знать, что это стандартные файлы
Quote (Unaited_Ru)
и можно чтобы прога заменяла не весь твик, а отдельные участки кода
это вообще бред хоть и реализуем, проблема в том, что модифицировать в моей проге можно не только твики а все все файлы, данный способ реализуем только для твиков и луа скриптов :3
Скажи хоть один мод, который заменяет стандартных файлов на гигобайт) бэкап ТОЛЬКО заменяемых файлов. Хэш файл не обязательно. Если изначально до юзания проги считать, что игра без модов, то прогой можно просто отслеживать включение\выключение паков модов и в зависмости от файлов которые они заменяют делать бэкап.
ыыы хеш все равно придется сравнивать, что бы быть уверенным что там стандартные файлы
Quote (firsacho)
С чем они связаны?
мне было лень это реализовывать, если точнее
Quote (firsacho)
возможно оно того стоит) Во-первых прогу можно будет использовать не только для червей, а вообще для любой игры, где файлы не запрятаны в единый архив, достаточно просто поменять название проги и оформление) И потом прогу можно доразвить до той идеи с загрузкой модов с сервера при подключении к игроку с модами)
Привет дорогой, с вами снова Доктор Зло, я давно не писал статьи, так как не было желание и лень, ох эта ужасная лень… Но вот это желание снова проснулось (правда, через силу), в этом уроке мы поговорим о дальнейшим порабощении языка паскаль о типах данных и об условных операторах (В РОТ МНЕ НОГИ).
И не забываем читать комментарии в коде – в них глаголет истина…
Сначала поговорим о типах данных…
Это такая хрень без которой нельзя обойтись в языке паскаль (к сожалению) (кстати говоря, в одном волшебном языке - JavaScript, не обязательно объявлять тип, этим меня он и прет)
Строка Объявить переменную с нужным нам типом, просто, к примеру, как мы делали в нашем примере с «hello user»
Code
Var s:string;
Мы тут объявили переменную «s» как тип string, из названия этого типа понятно, что это простая строка.
Теперь мы рассмотрим еще пару нужных нам типов (осторожно, много буковь):
Целые типы
(Типы для хранения цифр (чисел)) Integer, longint, byte остальные нам не очень понадобится (я надеюсь =) ) Они отличаются только размерами, например byte может хранить только одно число, вообще мы вначале будем использовать только longint, т.к. оно самое большое.
Чтобы создать переменную с longint, и присвоить какое нибудь число:
Code
Var s:longint; Begin S:=123456; End.
З.Ы. вместо s можно написать любую букву или слово, это я так на всякий случай
Логический тип Это тип, умеющий хранить, так сказать, «правду» и «не правду», короче данный тип может принимать только значения «true» (правда) и «false» (не правда).
Этот тип очень полезен (как и остальные). К примеру, нам нужно узнать, кто съел печеньки… Это сделал Вася! – мы получим «false» (это не правда); это сделал Lex-Serest?!– мы получим «true» (это правда):D
Создать переменную с логическим типом:
Code
Var b:boolean; Begin b:=true; //к “b” присвоили правду… End.
Вещественный тип Это вещественный тип, точнее он может хранить не целые числа. Например, real , пример использования:
Code
Var s:real; Begin // (это комментарии если что, в них можно писать все что угодно) S:=1234.6545; // вот тут мы видим real во всей красе =) End.
Еще к вещественному типу относиться: extended и double, они отличатся от real только размером… (они больше real'ьности , но нам пока что это не понадобиться, хотя можете импровизировать)) )
Теперь поговорим о том, что с типами можно делать…
Сложение (почти со всеми, кроме Вещественного типа (смотрим наверх, что это)):
Code
Var l1,l2:longint; R1,r2:real; S1,s2:string; Begin
L1:=54; L2:=12; Writeln(l1+l2); // выведет 66
r1:=54.50000; r2:=12.50000; Writeln(r1+r2); {выведет 6,70000000000000 и т.д. и это не есть гуд если написать “ r1+r2:0:3”, (то есть «Writeln(r1+r2:0:3);» ) то будет все нормально, :0:3 нужна для того что бы он нам выводил 3 знака после запятой, а не множество нулей, можно вместо тройки поставить любое другое число} Writeln(r1+r2:0:3);
Так же все это будет работать и для «readln» (надеюсь, что все помнят что это, если не помните, смотрите в прошлом/позапрошлом уроке)
Разность
Code
Var l1,l2:longint; R1,r2:real;
Begin L1:=54; L2:=12; Writeln(l1-l2); // выведет 42 (мы получили ответ на вопрос вселенной и всего такого хД ) r1:=54.50000; r2:=12.50000; Writeln(r1-r2:0:3); // выведет 42 (что-то у меня дежавю) readln; End.
К сожалению, отнимать у строки нельзя…
Умножение Так же естественно есть еще умножение, поэтому его приводить не буду, могу сказать, что оно обозначается «*»
Но вот деление считается совсем не так…
Деление
Code
Var l1,l2:longint; R1,r2:real;
Begin L1:=54; L2:=10; Writeln(l1 div l2); // выведет «5», “div” - это деление без остатка, к примеру если выполнить “5 div 2”то выведет “2” Writeln(l1 mod l2); // выведет «4», “mod” – это получение остатка с округлением, к примеру если выполнить 5 mod 2, то выведет 3 (5/2 = 2.5, если округлить, то будет 3)
r1:=52; // точку с нулями можно для этого типа не писАть, это я так на всякий случай... r2:=12; Writeln(r1/r2:0:3); //“/” – знак деление, тут, я надеюсь, все понятно)
readln; End.
Теперь решим маленькую задачу посчитать площадь произвольного квадрата, зная одну его сторону (площадь квадрата равна – квадрату его стороны (хД туфтология получилась)) Напишем программу:
Code
Program z1; //надеюсь что все помнят с чего должна начинаться программа… (кто не помнит, читайте прошлые уроки) Var hax: longint; //заводим переменную, в которой будем хранить длину стороны квадрата Begin Writeln('введите длину стороны квадрата'); //приветствие (куда же без него) Readln(x); //запрашиваем длину, и сохраняем ее в переменную «hax» (ыыы) Writeln('Площадь квадрата=',hax*hax); //выводим текст (человек же должен знать что мы получили… и выводим квадрат стороны, то есть площадь {кстати забыл добавить – во Writeln'e «'текст',хрень» заместо «текст» можно вписать все что угодно, то что находится после запятой (где написано «хрень»), должна идти переменная, так же можно так дохрена вывести текст, переменная, текст, переменная, к примеру, можно вот так Writeln('Площадь квадрата=',hax*hax,' вротмненоги-работает'); } {кстати говоря, в некоторых средах программирования (эта та хрень в которой вы пишите код) вместо русского текста выводит какие-то крякозябли, если такое у вас, используете вместо русских букв, английские, пример - (p/\olllaDb kBadPaTa= )} readln; // нужно что бы наша прога не закрывалась сразу после запуска End.
(ухтыё, вы видите много непонятных слов? Тогда перечитай еще раз - до сих пор не понятно? - спроси в комментах)
Фух вроде справились, маленькое домашнее задание – напишите программу для подсчета площади прямоугольника (то есть, одна сторона на вторую сторону (горизонтальную на вертикальную)) (за решенные домашние задания, будут поощрения, в виде вкусных печенек в репутацию =) )
Надеюсь, что вы передОхнули, пока считали перевод строк, теперь продолжим
Условия
Что такое условия? Условия это то что нужно выполнять при выполнении какого-то условия
Пример: Если этот человек - модератор, то сказать ему что он хороший человек, если нет - сказать что он го#но (логика тролля)
В общем в языке паскаль, условия выглядят следующим образом:
If [условие] then [че нужно делать]; Или можно вот так: If [условие] then [че нужно делать] else [если условие ложное выполняется это];
Пример:
Code
If z=0 then writeln('это ноль') else writeln('это не ноль');
Задание для укрепления материала Даны два числа, вывести их сумму, разность, произведение и частное ( еще раз говорю, за решенные домашние задания, будут поощрения, в виде вкусных печенек в репутацию =) )
<Продолжение - позже, а пока отдохните, побейтесь апп стену головой, что бы все усвоить, дальше – хуже>
Урок НЕ полный. Продолжение об условиях будет в следующим уроке, так как я сейчас болею, а когда болеешь такой кайф писать многостраничные уроки… В следующим уроке, мы подробно разберем условия и узнаем чем они хороши, так же начнем изучать циклы (гы гы)