Плагин для CommFort (Delphi)

Аватара пользователя
Maximus
Супермодератор
Супермодератор
Сообщения: 1507
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Maximus » 22 окт 2011, 17:08

Пытаюсь при регистрации на сервере виртуального пользователя использовать ID тот который я ввёл, но почему-то всё время при регистрации у бота в ID все нули.

Код: Выделить всё

aDataToSend := fTextToAnsiString(Rec.User)+  //???
fTextToAnsiString(Rec.IP)+  //IP
fIntegerToAnsiString(0)+  //??? ??????
fTextToAnsiString(Rec.Password)+  //??????
fIntegerToAnsiString(Rec.Pol)+  //??????
fTextToAnsiString(Rec.ID);  //ID
CommFortProcess(dwPluginID, 1001, PAnsiChar(aDataToSend), Length(aDataToSend));

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Andrey » 22 окт 2011, 17:26

Не знаю, если в Rec.ID хранится правильный ID то должно быть всё нормально.

Аватара пользователя
Maximus
Супермодератор
Супермодератор
Сообщения: 1507
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Maximus » 22 окт 2011, 17:32

Сейчас попробовал без Rec.ID, просто вписал 32 двойки, результат - опять нули.

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Andrey » 22 окт 2011, 17:36

Он у тебя точно текстом задан, а не числом?

Аватара пользователя
Maximus
Супермодератор
Супермодератор
Сообщения: 1507
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Maximus » 22 окт 2011, 17:39

Ну да текстом, в кавычках.

Код: Выделить всё

fTextToAnsiString('22222222222222222222222222222222');  //ID

Аватара пользователя
Maximus
Супермодератор
Супермодератор
Сообщения: 1507
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Maximus » 22 окт 2011, 20:30

В Crazy CommFort Server Plugin v1.07 у меня тоже не получилось изменить ID бота. Такое ощущение что эта функция вообще не работает.

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Andrey » 22 окт 2011, 20:35

Я пробовал поискать что-нибудь по этому поводу, но не нашёл. Может быть и не работает, но тогда информация об этом была бы на их форуме

Аватара пользователя
Maximus
Супермодератор
Супермодератор
Сообщения: 1507
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Maximus » 22 окт 2011, 20:38

Тогда я не знаю, толи я что-то не то ввожу, по идее еслиб эта функция не работала, то нету смысла добавлять в настройки Crazy Plugin эту строку.

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Andrey » 22 окт 2011, 20:41

Там вроде просто 32 символа (цифры и буквы a-f), не знаю что там можно неправильно ввести

Аватара пользователя
Maximus
Супермодератор
Супермодератор
Сообщения: 1507
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Maximus » 23 окт 2011, 17:10

Установил на виртуальную машину триальную версию сервера, всё прекрасно заработало, видимо это только на взломанной версии так.

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Andrey » 23 окт 2011, 17:51

Значит в процессе взлома что-то сломали

Аватара пользователя
Maximus
Супермодератор
Супермодератор
Сообщения: 1507
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Maximus » 23 окт 2011, 22:57

Пытаюсь сделать удаление информации о пользователе у которого значение DelDay превысило назначенное значение, а последнего в массиве переместить на его место. Эта часть кода выполняется в таймере, сначала прибавляем всем а потом проверяем не превысило ли значение. Я чувствую что где-то намудрил с циклами и изменением конечного значения, проверял с помощью ShowMessage() и заметил что после удаления одного из двух игроков цикл всё равно продолжает выполняться уже на несуществующего игрока. Может нужно как-то по-другому организовать это?
k := Length(S)-1;
for i:=0 to k do S[i].DelDay := S[i].DelDay + 1;
k := Length(S)-1;
for i:=0 to k do
  if S[i].DelDay >= Rec.DelDay then
  begin
    S[i].Name := S[Length(S)-1].Name;
    S[i].Ocki := S[Length(S)-1].Ocki;
    S[i].DelDay := S[Length(S)-1].DelDay;
    k := Length(s)-1;
    SetLength(S, k);
    k := Length(s)-1;
  end;
Последний раз редактировалось Maximus 23 окт 2011, 22:57, всего редактировалось 4 раза.
Причина: Исправлена подсветка синтаксиса

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Andrey » 24 окт 2011, 09:59

Delphi в отличие от C++ не позволяет вручную менять параметр цикла (да и в C++ это не очень хорошо). Поэтому нужно запустить цикл в обратном порядке, от последнего к первому. Тогда несуществующие обрабатываться не будут.
Этот вариант я не проверял, поэтому если работать не будет, то пиши.
k := Length(S)-1;
  for i:=0 to k do S[i].DelDay := S[i].DelDay + 1; //здесь можно не менять
    for i:=Length(S)-1; downto 0 do //цикл for в обратном порядке
      if S[i].DelDay >= Rec.DelDay then
        begin
          S[i].Name := S[Length(S)-1].Name;
          S[i].Ocki := S[Length(S)-1].Ocki;
          S[i].DelDay := S[Length(S)-1].DelDay;
          SetLength(S, length(S)-1);
        end;
В том варианте есть один недостаток: если последний пользователь попадает под условие, то он удалён не будет, потому что информация о нём будет перезаписана, поэтому предагаю такой вариант:
k := Length(S)-1;
  for i:=0 to k do S[i].DelDay := S[i].DelDay + 1; //здесь можно не менять
    for i:=Length(S)-1; downto 0 do //цикл for в обратном порядке
      if (S[i].DelDay and  >= Rec.DelDay) and (S[i].Name <> S[Length(S)-1].Name) then //проверяем по имени что это разные пользователи
        begin
          S[i].Name := S[Length(S)-1].Name;
          S[i].Ocki := S[Length(S)-1].Ocki;
          S[i].DelDay := S[Length(S)-1].DelDay;
          SetLength(S, length(S)-1);
        end;
Последний раз редактировалось Andrey 24 окт 2011, 09:59, всего редактировалось 5 раз.
Причина: Исправлена подсветка синтаксиса

Аватара пользователя
Maximus
Супермодератор
Супермодератор
Сообщения: 1507
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Maximus » 24 окт 2011, 17:35

А по-моему наоборот, в первом случае будет удаляться информация о последнем пользователе т.к. мы уменьшаем на единицу размер массива, а следовательно пропадает информация о нём. Во втором же случае, когда цикл наткнётся на последнего он его пропустит и ничего не будет с ним делать.

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Andrey » 24 окт 2011, 17:51

Проверю сейчас то что написал

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Andrey » 24 окт 2011, 17:57

Да, немного некорректно.
Вот такой вариант должен быть правильным, но я его сейчас дополнительно проверю
k := Length(S)-1;
  for i:=0 to k do S[i].DelDay := S[i].DelDay + 1; //здесь можно не менять
    for i:=Length(S)-1 downto 0 do //цикл for в обратном порядке
      if S[i].DelDay  >= Rec.DelDay then //проверяем по имени что это разные пользователи
        begin
          if S[i].Name <> S[Length(S)-1].Name then
          begin
             S[i].Name := S[Length(S)-1].Name;
             S[i].Ocki := S[Length(S)-1].Ocki;
             S[i].DelDay := S[Length(S)-1].DelDay;
          end;
          SetLength(S, length(S)-1);
        end;
Последний раз редактировалось Andrey 24 окт 2011, 17:57, всего редактировалось 4 раза.
Причина: Исправлена подсветка синтаксиса

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Andrey » 24 окт 2011, 18:07

Написанный выше код работает правильно (в условиях проведённого мной теста). Если нужно сделаю подробное описание как он работает с примерами

Аватара пользователя
Maximus
Супермодератор
Супермодератор
Сообщения: 1507
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Maximus » 24 окт 2011, 18:09

В принципе и первый вариант работает, только выполняет лишнее копирование) Описания не нужно, всё понятно.

Аватара пользователя
Maximus
Супермодератор
Супермодератор
Сообщения: 1507
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Maximus » 31 окт 2011, 18:35

Нужно проверить какой ранг соответствует набранным очкам, почему-то вообще не работает.
S[j].Ocki - очки
R[].Ball - кол-во баллов на номер ранга
S[j].Rang - ранг

Код: Выделить всё

                    while (S[j].Ocki >= R[S[j].Rang+k].Ball) and (R[S[j].Rang+k].Ball <= R[Length(R)].Ball) do
                      begin
                        if S[j].Rang <> (S[j].Rang + k) then
                          begin
                            NewRang := 'Получил ранг: [b]'+R[S[j].Rang+k].NameRang+'[/b]';
                            S[j].Rang := S[j].Rang + k;
                          end;
                        inc(k);
                      end;

Аватара пользователя
Andrey
Администратор
Администратор
Сообщения: 2345
Зарегистрирован: 02 фев 2012, 11:42
Откуда: Воронеж
Контактная информация:

Re: Плагин для CommFort (Delphi)

Сообщение Andrey » 31 окт 2011, 19:25

Логику первой строки не понимаю. Что такое k и в каком виде там данные хранятся?

Ответить