Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Закрытая тема
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.04.2013, 14:13
serega6531 serega6531 вне форума
Начинающий
 
Регистрация: 03.03.2013
Сообщения: 106
Версия Delphi: Delphi 7, XE5
Репутация: 10
Вопрос Не появляется окно программы

Итак, вот в чём заключается проблема. Задумал я сделать лаунчер для майнкрафта. Написал код для проверки md5, процесс запускается, но окно программы не появляется. Ошибок при компиляции не возникает. Вот сам код:
Код:
begin
LauncherVer:=1;
appdata:=GetSpecialFolderPath(CSIDL_APPDATA);
RootDir:='.happyminers';
  files[1]:='bin\minecraft.jar';
  files[2]:='bin\lwjgl_util.jar';
  files[3]:='bin\lwjgl.jar';
  files[4]:='bin\jinput.jar';
  files[5]:='bin\natives\jinput-dx8.dll';
  files[6]:='bin\natives\jinput-dx8_64.dll';
  files[7]:='bin\natives\jinput-raw.dll';
  files[8]:='bin\natives\jinput-raw_64.dll';
  files[9]:='bin\natives\lwjgl.dll';
  files[10]:='bin\natives\lwjgl64.dll';
  files[11]:='bin\natives\OpenAL32.dll';
  files[12]:='bin\natives\OpenAL64.dll';
  files[13]:='mods\matmos_packaged.zip';
  files[13]:='mods\mod_worldeditcui_1.5.1_01_lite_mc1.5.1.litemod';
  files[14]:='additonal.zip';

  while (count < 15) do
begin
FilesFullPatch[count]:=appdata + '\' + RootDir + '\' + files[count];
end;
end;
Виновата вот эта строка:
Код:
while (count < 15) do
begin
FilesFullPatch[count]:=appdata + '\' + RootDir + '\' + files[count];
end;
Если её убрать, то всё нормально работает. Подскажите, как решить эту проблему.
  #2  
Старый 16.04.2013, 14:18
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от serega6531
Виновата вот эта строка:
Код:
while (count < 15) do
begin
FilesFullPatch[count]:=appdata + '\' + RootDir + '\' + files[count];
end;
Если её убрать, то всё нормально работает. Подскажите, как решить эту проблему.
Что-то я не понял где у тебя в этом цикле меняется значение переменной count? Ведь если переменная count будет меньше 15, то это же будет бесконечный цикл? Или я что-то не понял?
  #3  
Старый 16.04.2013, 14:41
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Код:
  count := 0;
  while (count < 15) do
  begin
    FilesFullPatch[count]:=appdata + '\' + RootDir + '\' + files[count];
    inc(count);
  end;

И че, реально запускает из любой папки его?
Интересует портэйбл вариант.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
  #4  
Старый 16.04.2013, 15:35
serega6531 serega6531 вне форума
Начинающий
 
Регистрация: 03.03.2013
Сообщения: 106
Версия Delphi: Delphi 7, XE5
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Код:
  count := 0;
  while (count < 15) do
  begin
    FilesFullPatch[count]:=appdata + '\' + RootDir + '\' + files[count];
    inc(count);
  end;

И че, реально запускает из любой папки его?
Интересует портэйбл вариант.
Нет, сам лаунчер ещё разрабатывается. Там будет проверка по md5, загрузка собственных файлов и т.д.
  #5  
Старый 16.04.2013, 15:47
serega6531 serega6531 вне форума
Начинающий
 
Регистрация: 03.03.2013
Сообщения: 106
Версия Delphi: Delphi 7, XE5
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Что-то я не понял где у тебя в этом цикле меняется значение переменной count? Ведь если переменная count будет меньше 15, то это же будет бесконечный цикл? Или я что-то не понял?
Да, спасибо, в этом и была проблема. Но теперь при нажатии кнопки Играть программа уходит в "Не отвечает". Может у меня где то ещё бесконечный цикл? Почему то не могу приложить исходники, так что скачайте их тут
http://happyminers.ru/launcher.rar
  #6  
Старый 16.04.2013, 15:47
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Смысл от проверки?
У меня например в minecraft.jar натолкана приблуда дающая доступ ко всем возможным блокам (All items вроде зовется).
Т.е. если я скачаю твой лончер, я не смогу запустить свой майн?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
  #7  
Старый 16.04.2013, 16:03
serega6531 serega6531 вне форума
Начинающий
 
Регистрация: 03.03.2013
Сообщения: 106
Версия Delphi: Delphi 7, XE5
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Смысл от проверки?
У меня например в minecraft.jar натолкана приблуда дающая доступ ко всем возможным блокам (All items вроде зовется).
Т.е. если я скачаю твой лончер, я не смогу запустить свой майн?
Вобще это лаунчер для моего сервера. Хеши берутся с сайта. Но если хочешь я могу сделать версию для тебя без проверки хешей. Но смысл от такого лаунчера без сервера? А тот мод называется Too Many Items.
  #8  
Старый 16.04.2013, 16:51
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от serega6531
Да, спасибо, в этом и была проблема. Но теперь при нажатии кнопки Играть программа уходит в "Не отвечает". Может у меня где то ещё бесконечный цикл? Почему то не могу приложить исходники, так что скачайте их тут
http://happyminers.ru/launcher.rar
Есть подозрение на эту процедуру:
Код:
procedure IsSetFiles();
var
  count: integer;
  FilesIsSet: Array [1 .. 14] of boolean;
begin
  count := 1;
  While (count < 15) do
  begin
    if FileExists(FilesFullPatch[count]) then
    begin
      count := count + 1;
      FilesIsSet[count] := true;
    end
    else
      FilesIsSet[count] := false;
  end;
  ShowMessage(BooleanToStr(FilesIsSet[13]));
end;
Здесь если очередной файл существует - то всё нормально (счётчик увеличивается), если же файла не существует, то опять попадаем в бесконечный цикл, так как в ветке else счётчик не изменяется.
  #9  
Старый 16.04.2013, 16:54
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от serega6531
...при нажатии кнопки Играть программа уходит в "Не отвечает"...
Так будет логичнее
Код:
procedure IsSetFiles();
var count: integer;
    FilesIsSet: Array[1..14] of boolean;
begin
count:=1;
While (count < 15) do
begin
FilesIsSet[count]:=FileExists(FilesFullPatch[count]);
inc(count);
end;
ShowMessage(BooleanToStr(FilesIsSet[13]));
end;

З.Ы. И ещё, хорошо бы массив Files задать при объявлении, так проще
Код:
var

...

Files:Array[1..1{4}5] of string = (
  'bin\minecraft.jar',
  'bin\lwjgl_util.jar',
  'bin\lwjgl.jar',
  'bin\jinput.jar',
  'bin\natives\jinput-dx8.dll',
  'bin\natives\jinput-dx8_64.dll',
  'bin\natives\jinput-raw.dll',
  'bin\natives\jinput-raw_64.dll',
  'bin\natives\lwjgl.dll',
  'bin\natives\lwjgl64.dll',
  'bin\natives\OpenAL32.dll',
  'bin\natives\OpenAL64.dll',
  'mods\matmos_packaged.zip', // ошибка -> 13
  'mods\mod_worldeditcui_1.5.1_01_lite_mc1.5.1.litemod', // -> 13, одно из двух
  'additonal.zip');
...

Последний раз редактировалось Alegun, 16.04.2013 в 17:06.
  #10  
Старый 16.04.2013, 17:01
serega6531 serega6531 вне форума
Начинающий
 
Регистрация: 03.03.2013
Сообщения: 106
Версия Delphi: Delphi 7, XE5
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Так будет логичнее
Код:
procedure IsSetFiles();
var count: integer;
    FilesIsSet: Array[1..14] of boolean;
begin
count:=1;
While (count < 15) do
begin
FilesIsSet[count]:=FileExists(FilesFullPatch[count]);
inc(count);
end;
ShowMessage(BooleanToStr(FilesIsSet[13]));
end;
Спасибо всем. Теперь вопрос номер 3.
Как узнать, есть ли в текстовой строке пробелы? Гугл не помог.
  #11  
Старый 16.04.2013, 17:04
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от serega6531
Спасибо всем. Теперь вопрос номер 3.
Как узнать, есть ли в текстовой строке пробелы? Гугл не помог.
Код:
if Pos(' ', ТекстоваяСтрока)>0 then ShowMessage('Пробелы в строке есть') else ShowMessage('Пробелов в строке нет')
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
serega6531 (16.04.2013)
  #12  
Старый 16.04.2013, 17:40
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Понял. Я думал локальный лончер.

Не надо ничего. Обойдусь портэйбл версией, тем более играю в майн крайне редко.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
  #13  
Старый 16.04.2013, 17:43
serega6531 serega6531 вне форума
Начинающий
 
Регистрация: 03.03.2013
Сообщения: 106
Версия Delphi: Delphi 7, XE5
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Код:
if Pos(' ', ТекстоваяСтрока)>0 then ShowMessage('Пробелы в строке есть') else ShowMessage('Пробелов в строке нет')
Спасибо огромное!
  #14  
Старый 17.04.2013, 09:18
serega6531 serega6531 вне форума
Начинающий
 
Регистрация: 03.03.2013
Сообщения: 106
Версия Delphi: Delphi 7, XE5
Репутация: 10
Вопрос Идем дальше

Идём дальше. Мне нужно сделать подключение к php странице и оттуда получить id сессии. Как это сделать?
Подключаться надо к auth.php
PHP код:
<?php
define
('INCLUDE_CHECK',true);
require_once 
'functions.php';
include (
"connect.php");
$login=$_POST['user'];
$password=$_POST['password'];
$ver=$_POST['version'];

        if(
getGameInfo('launcher') == $ver){

            
$result mysql_query("SELECT $db_columnPass FROM $db_table WHERE $db_columnUser='$login'") or die ("Запрос к базе завершился ошибкой."); //извлекаем из базы все данные о пользователе с введенным логином
                
$myrow mysql_fetch_array($result);

            
$realPass $myrow[$db_columnPass];

                if (
checkPass($realPass,$password)) 
                {
                    
$sessid generateSessionId();
                    
$gamebuild=getGameInfo('build');

                    
mysql_query("UPDATE $db_table SET $db_columnSesId='$sessid' WHERE $db_columnUser = '$login'") or die ("Запрос к базе завершился ошибкой.");

                    
$dlticket md5($login);
                    echo 
$gamebuild.':'.$dlticket.':'.$login.':'.$sessid.':';
                }
            else {
                echo 
"Bad login";
                }
        }
        else{
            echo 
'Old version';
            }
?>
Файл с функциями functions.php
PHP код:
<?php
if(!defined('INCLUDE_CHECK')) die('У вас нет прав на выполнение данного файла!');

function 
generateSessionId(){
    
// generate rand num
    
srand(time());
    
$randNum rand(10000000002147483647).rand(10000000002147483647).rand(0,9);
    return 
$randNum;
}

function 
getGameInfo($type){
    include (
"connect.php");
    switch(
$type){
    case 
'build':
        
$query mysql_query("SELECT * FROM $db_GameDatatable WHERE $db_Propertycolumn = 'latest-game-build'") or die ("Запрос к базе завершился ошибкой.");    
            
$resource mysql_fetch_array($query);
            return 
$resource[$db_Valuecolumn];
    break;

    case 
'launcher':
        
$query mysql_query("SELECT * FROM $db_GameDatatable WHERE $db_Propertycolumn = 'launcher-version'") or die ("Запрос к базе завершился ошибкой."); 
            
$resource mysql_fetch_array($query);
            return 
$resource[$db_Valuecolumn];
    break;

    }
}

function 
checkPass($realPass,$password){
            if (
strlen($realPass) == 32)
            {
                
$cp md5($password);
            }
            else {
                if(
strpos($realPass,'$SHA$') !== false)
                {
                    
$ar preg_split("/\\$/",$realPass);
                    
$salt $ar[2];
                    
$cp '$SHA$'.$salt.'$'.hash('sha256',hash('sha256',$password).$salt);
                }
                else
                {
                    
$saltPos = (strlen($password) >= strlen($realPass) ? strlen($realPass) : strlen($password));
                    
$salt substr($realPass$saltPos12);
                    
$hash hash('whirlpool'$salt $password);
                    
$cp substr($hash0$saltPos) . $salt substr($hash$saltPos);
                }
            }
            
            if (
$realPass==$cp) {
                return 
true;
            }
            else {
                return 
false;
            }
}
?>
connect.php просто соединяет с базой данных
Буду очень благодарен если вы мне поможете.

Последний раз редактировалось serega6531, 17.04.2013 в 09:31.
  #15  
Старый 17.04.2013, 09:44
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Одна тема - один вопрос (см. правила форума).
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Закрытая тема


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:39.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter