|
Ткните носом пожалуйста - Общение разработчиков - Программирование для Perfect World, общение и обсуждене разработок |
30.07.2013, 23:55
|
#61
|
|
|
|
Разведчик
|
Регистрация: 13.04.2013
Сообщений: 5
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Ткните носом пожалуйста
|
Цитата: |
|
|
|
|
|
|
|
|
то бежишь к заданной точке. |
|
|
|
|
|
Вот тут-то и нужна ассемблерная вставка перемещения перса к точке с координатами, пока у меня этого ни разу не получилось. Конкретно в данный момент, сижу переписываю своего недоделанного бота с VS в C++Builder6. Думаю, как восстановлю исходную функциональность, то сначала попробую простую Асм вставку снятия моба с таргета, а потом уже буду смотреть как переместить перса в координаты...
Ну, и скромно надеюсь на вашу моральную и кодовую поддержку!))
Добавлено через 1 час 51 минуту
+036C BuffsArray /Список баффов/
+ [I*0x12] Buffs, word
Ммм, word==Word==WORD==unsigned short? Список бафов - это массив бафов? А он динамически расширяется с добавлением новых бафов или он имеет статический размер? Как понять что на тебе, допустим, бафф формы лисы?
Последний раз редактировалось Xantrax; 31.07.2013 в 01:47.
Причина: Добавлено сообщение
|
|
|
31.07.2013, 19:44
|
#62
|
|
|
|
Сержант
|
Регистрация: 11.12.2010
Сообщений: 110
Популярность: 541
Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
|
Re: Ткните носом пожалуйста
Xantrax, чтоб VS ничего не добавлял к функции инжекта, нужно описывать функцию так:
__declspec(naked) void Func()
________________
Принимаю реквесты на статьи, программы. Всё будет запилено в лучшем виде :3
|
|
|
31.07.2013, 21:53
|
#63
|
|
|
|
Разведчик
|
Регистрация: 13.04.2013
Сообщений: 5
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Ткните носом пожалуйста
|
|
|
01.08.2013, 03:08
|
#64
|
|
|
|
Сержант
|
Регистрация: 11.12.2010
Сообщений: 110
Популярность: 541
Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
|
Re: Ткните носом пожалуйста
________________
Принимаю реквесты на статьи, программы. Всё будет запилено в лучшем виде :3
|
|
|
01.08.2013, 08:02
|
#65
|
|
|
|
Разведчик
|
Регистрация: 13.04.2013
Сообщений: 5
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Ткните носом пожалуйста
Пока без понятия, не пробовал. Но люди с этого форума под C Builder не жалуются, а значит наверное не делает.
|
|
|
28.08.2013, 00:43
|
#66
|
|
|
|
Разведчик
|
Регистрация: 13.04.2013
Сообщений: 5
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Ткните носом пожалуйста
Люди, поделитесь алгоритмом действий, помогите оживить бревно.
Я делаю так:
PHP код:
EnableFox = GetFormaPersa(); if(EnableFox == 0) { inject.TransformToFox(); inject.SayHelloPet(); Sleep(4000); PetID = GetActivePetID(); CallAttackTimer->Enabled = true; } else if(EnableFox == 1) { CallAttackTimer->Enabled = false; inject.TransformToFox(); inject.SayGoodByePet(); inject.TargetMobOff(); }
1) смотрю форму перса, если на двух ногах, то превращаюсь в лису + вызываю пета + получаю его ID, далее запускаю таймер, который с каждым тиком (раз в 5 сек)) проверяет состояние переменной int
PHP код:
NomerDeistvij: void __fastcall TForm1::CallAttackTimerTimer(TObject *Sender) { switch(NomerDeistvij) { case 0: { NomerDeistvij = 1; break; } case 1: { SelectTargetMob(); NomerDeistvij = 3; break; } case 2: { //inject.DeselectTarget(); inject.MyPetHeal(PetID); NomerDeistvij = 3; break; //inject.DeselectTarget(); } case 3: { if(PetHPProc < 95) { NomerDeistvij = 2;
} if(CurrentPersTarget()!= 0) { inject.NormalAttack(); if(PersChi()>2) { UseSkillLvl1(); } NomerDeistvij = 3; } else { NomerDeistvij = 1; } break; } } }
Но у меня проблемы с хилом пета, всегда тик приходит либо когда значение равно 2-м и перс только и делает, что хилит, либо не хилит в бою, либо спец атаку не проводит.... (( В общем беда, поделитесь идеей, мыслью, если возможно кодом...
Спасибо...
Добавлено через 11 часов 57 минут
Ну, неужели никто не поделится даже мыслью?
Последний раз редактировалось Xantrax; 28.08.2013 в 12:41.
Причина: Добавлено сообщение
|
|
|
28.08.2013, 16:26
|
#67
|
|
|
|
Пехотинец
|
Регистрация: 21.03.2012
Сообщений: 83
Популярность: 1178
Сказал(а) спасибо: 18
Поблагодарили 101 раз(а) в 53 сообщениях
|
Re: Ткните носом пожалуйста
Я оживлял "полешко" таким вот способом клац
Там же есть ссылка от vogel на другой способ
|
Цитата: |
|
|
|
|
|
|
________________
╔═╗
║ ˑ ˑ ╬ ╬
╚═╝
|
|
|
28.08.2013, 17:48
|
#68
|
|
|
|
Разведчик
|
Регистрация: 13.04.2013
Сообщений: 5
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Ткните носом пожалуйста
Последний раз редактировалось Xantrax; 28.08.2013 в 18:08.
Причина: Добавлено сообщение
|
|
|
28.08.2013, 18:39
|
#69
|
|
|
|
Разведчик
|
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
|
Re: Ткните носом пожалуйста
|
|
|
28.08.2013, 19:23
|
#70
|
|
|
|
Разведчик
|
Регистрация: 13.04.2013
Сообщений: 5
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Ткните носом пожалуйста
|
|
|
28.08.2013, 19:42
|
#71
|
|
|
|
Разведчик
|
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
|
Re: Ткните носом пожалуйста
Xantrax,
можно сделать по другому:
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
CB1:=CB1+300;
if CB1>=... then
begin
CB1:=0;
......................
end;
CB2:=CB2+300;
if CB2>=... then
begin
CB2:=0;
......................
end;
end;
тайминг таймера 300мс поэтому и +300, можно изменить.
В этом случае у тебя не будет пересечения, а действия будут выполняться последовательно.
|
|
|
28.08.2013, 19:51
|
#72
|
|
|
|
Разведчик
|
Регистрация: 13.04.2013
Сообщений: 5
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Ткните носом пожалуйста
|
|
|
28.08.2013, 19:57
|
#73
|
|
|
|
Разведчик
|
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
|
Re: Ткните носом пожалуйста
CB - это переменная которая при каждом тике таймера увеличивается на время тайминга, таким образом можно контролировать обработку разных действий в разное время на одном таймере.
Да, кстати, зачем делать тайминг 10мс, т.е. 100 тиков в секунду, вполне можно обойтись и таймингом в 100-200мс, стабильнее будет работать, поверь.
|
|
|
28.08.2013, 20:06
|
#74
|
|
|
|
Разведчик
|
Регистрация: 13.04.2013
Сообщений: 5
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Ткните носом пожалуйста
|
Цитата: |
|
|
|
|
|
|
|
|
|
CB - это переменная которая при каждом тике таймера увеличивается на время тайминга
|
|
|
|
|
|
Почему на именно на время таймера, можно и на 1 увеличивать. И все равно задумку не понял...
PHP код:
int i = 0; void TForm::Timer() { i+=1; if(i>0) { выбираем таргет; i = 0; } }
А если какое-либо действие не успеет за это время выполниться? А если мне два раза нужно выполнить это действие? Логику по прежнему не понял. Он у меня на отрез отказывается хилить пета (( Проверяю, HPProc(проценты хп) пета и если меньше 95 (для теста), скидываю флаг на тот в котором должен выполняться хил, но 0 эмоций при запуске, хотя сама функция работает...
А если поставить break; после перехода на действие "хил пета", он только и делает, что хилит пета. Я не понимаю, почему он в коде проскакивает условие:
PHP код:
if(PetHPProc < 95) { NomerDeistvij = 2; }
Последний раз редактировалось Xantrax; 28.08.2013 в 20:13.
|
|
|
28.08.2013, 20:24
|
#75
|
|
|
|
Разведчик
|
Регистрация: 23.06.2012
Сообщений: 43
Популярность: 427
Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
|
Re: Ткните носом пожалуйста
|
Цитата: |
|
|
|
|
|
|
|
|
|
Он у меня на отрез отказывается хилить пета ((
|
|
|
|
|
|
Ок, давай разберем твою функцию:
Код:
NomerDeistvij:
void __fastcall TForm1::CallAttackTimerTimer(TObject *Sender)
{
switch(NomerDeistvij)
{
case 0:
{
NomerDeistvij = 1;
break;
}
case 1:
{
SelectTargetMob();
NomerDeistvij = 3;
break;
}
case 2:
{
//inject.DeselectTarget();
inject.MyPetHeal(PetID);
NomerDeistvij = 3;
break;
//inject.DeselectTarget();
}
case 3:
{
if(PetHPProc < 95)
{
NomerDeistvij = 2;
}
if(CurrentPersTarget()!= 0)
{
inject.NormalAttack();
if(PersChi()>2)
{
UseSkillLvl1();
}
NomerDeistvij = 3;
}
else
{
NomerDeistvij = 1;
}
break;
}
}
}
Смотри когда case=3, что делает прога:
1) проверяет хп пета, и если оно меньше 95% то должна хилить пета, НО ДАЛЬШЕ ИДЕТ:
2) условие, что если в таргете кто либо есть, то атаковать и если есть более 2х чи то использовать скилл, это действие перебивает хилл пета,
поэтому в бою пет не хилится.
Как вариант, можно заслипить на время хилла пета последующие действия, т.е.
извиняюсь немного не так ), попробуй следующее
Код:
if(PetHPProc < 95)
{
NomerDeistvij = 2;
break;
}
если не будет хилить, добавь слип в case=2
прочитал предыдущий пост и понял что ты так уже сделал )
тогда просто вместо 95 установи значение поменьше, 60 например, т.к. первый же удар моба сносит пету более 5% хп, поэтому прога только и хилит.
Последний раз редактировалось fds255; 28.08.2013 в 20:35.
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Похожие темы
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Гм Инновы у нас под носом О_о
|
.NextTarget |
Общение и обсуждение, архив Point Blank |
4 |
10.03.2011 13:16 |
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 00:11.
|
|