PDA

Просмотр полной версии : [Помогите!] Таймер


Dimedrol1536
09.09.2011, 07:59
Нужна помощь по написанию отключения функции по таймеру.
if(cItem.megok400==0)DetourCreate((PBYTE)ADDRES_Da mage,(PBYTE)DamageUnhook,5); выкл
if(cItem.megok400==0)DetourCreate((PBYTE)ADDRES_Da mage,(PBYTE)Damage,5); вкл

это пример функции

iVs.Dark
10.09.2011, 00:09
Нужна помощь по написанию отключения функции по таймеру.
if(cItem.megok400==0)
DetourCreate((PBYTE)ADDRES_Damage,(PBYTE)DamageUnh ook,5); выкл
if(cItem.megok400==0)
DetourCreate((PBYTE)ADDRES_Damage,(PBYTE)Damage,5) ; вкл

это пример функции

я конечно ниче не понял, более конкретно бы.... и кстати у тебя условия один в один /problem


...
/* запуск таймера */
System.Timers.Timer timer1 = new System.Timers.Timer();
timer1.Elapsed += new ElapsedEventHandler(timer1_Tick);
timer1.Enabled = true; //запускаем таймер
timer1.Interval = 15000; /интервал таймера в мс (sec*1000);
GC.KeepAlive(timer1); //не помню полное описание, но это чтобы таймер не был "собран" сборщиком мусора.
/* end */
...

private void timer1_Tick(object sender, EventArgs e) //выполнение каждые 15 сек (15000 мс);
{
if (cItem.megok400 == 0) //если true выполняем и вырубаем таймер;
{
DetourCreate((PBYTE)ADDRES_Damage, (PBYTE)DamageUnhook, 5); //твоя функция
timer1.Enabled = false; //выключаем таймер
timer1.Dispose(); //освободить ресурсы, хотя может и лишнее;
}

else //если false выполняем, таймер не трогаем
{
DetourCreate((PBYTE)ADDRES_Damage, (PBYTE)Damage, 5);
}
}


Надеюсь понятно. Тут запускается таймер и каждые n сек (в д.с. 15 сек) выполняется проверка условия...
Если тебе нужно чередовать их выполнение (a,b,a,b,a,b...) код в тике (timer1_Tick) нужно изменить. напишешь подробно - может и помогу.

Dimedrol1536
10.09.2011, 13:14
iVs.Dark, более подробно
if(GetAsyncKeyState(VK_NUMPAD1)&1)//ON
{
DetourCreate((PBYTE)ADDRES_Knife,(PBYTE)knife,5);
MessageBeep(0);
это включение.
И теперь надо, что-бы она выключилась.

iVs.Dark
10.09.2011, 14:11
iVs.Dark, более подробно
if(GetAsyncKeyState(VK_NUMPAD1)&1)//ON
{
DetourCreate((PBYTE)ADDRES_Knife,(PBYTE)knife,5);
MessageBeep(0);
это включение.
И теперь надо, что-бы она выключилась.

не понял, подробнее что должно происходить. функция значения не имеет.
тебе нужно ее включить, а потом проверять условие и если оно выполнилось ее выключить?
или тебе нужно ее включить, выключить, включить.... ?

Dimedrol1536
10.09.2011, 15:06
Это DLL (ВХ), функция изменяет код игры (асма), после включения с игры кикает (срабатует защита), что-бы не кикнуло её нужно отключить в течении 3 с.
Это включение
__declspec(naked)void Damage()

Это выключение и возврат к исходному коду.
__declspec(naked)void DamageUnhook()


Соответственно кнопки вкл и выкл.
if(GetAsyncKeyState(VK_NUMPAD1)&1)//ON
{
DetourCreate((PBYTE)ADDRES_Damage,(PBYTE)Damage,5) ;

if(GetAsyncKeyState(VK_NUMPAD2)&1)//OFF
{
DetourCreate((PBYTE)ADDRES_Damage,(PBYTE)DamageUnh ook,5);

•theSaboteur•
10.09.2011, 15:10
bool state=false;
if(GetAsyncKeyState(VK_NUMPAD1)&1)
{
if(!state){
DetourCreate((PBYTE)ADDRES_Damage,(PBYTE)Damage,5) ; //ON
state=1;
}
else{
DetourCreate((PBYTE)ADDRES_Damage,(PBYTE)DamageUng ook,5); //off
state=0;
}
если я правильно понял, тебе нужно это?

___
added:

в чем заключается вопрос?

Dimedrol1536
10.09.2011, 15:21
•theSaboteur•, мне надо, что-бы через некоторое время сработал возврат функции "DetourCreate((PBYTE)ADDRES_Damage,(PBYTE)DamageUng ook,5);"