<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: if, else, then при зажатой клавише]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=8215</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=8215&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: if, else, then при зажатой клавише».]]></description>
		<lastBuildDate>Fri, 12 Apr 2013 05:47:52 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: if, else, then при зажатой клавише]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=71310#p71310</link>
			<description><![CDATA[<div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;Сообщение не имееющее отношения к заданным вопросам</div><div class="fancy_spoiler"><div class="codebox"><pre><code>if 34 != 34
    действие
else if 34 = 34
   действие</code></pre></div><p>Сперва выполняется проверка истинности неравенства значения возвращаемого ProcessReadMemory, после — проверка истинности равентва. Это лишнее.<br />Если (34 != 34) = false то 34 = 34, и повторно вызывать ProcessReadMemory нет необходимости.</p></div></div>]]></description>
			<author><![CDATA[null@example.com (creature.ws)]]></author>
			<pubDate>Fri, 12 Apr 2013 05:47:52 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=71310#p71310</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: if, else, then при зажатой клавише]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=71309#p71309</link>
			<description><![CDATA[<p>Все решил. Спасибо)</p>]]></description>
			<author><![CDATA[null@example.com (Dworkin)]]></author>
			<pubDate>Fri, 12 Apr 2013 00:11:10 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=71309#p71309</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: if, else, then при зажатой клавише]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=71206#p71206</link>
			<description><![CDATA[<p>Решил переделать под другое оружие.</p><div class="codebox"><pre><code>processName := &quot;gta_sa.exe&quot;
baseAddressPointer := 0xB7CD98
SniperWeaponTypeoffset := 0x648

InitAddresses() {
    global
    baseAddress := ProcessReadMemory(baseAddressPointer, processName)
    SniperWeaponTypeAddress := baseAddress + SniperWeaponTypeoffset ; тип оружия для снайперки
}

F2::

    if !baseAddress
        InitAddresses()

    SetTimer CheckWeapon, 100
    KeyWait F2
    SetTimer CheckWeapon, Off
    return

CheckWeapon:
    if (processReadMemory(SniperWeaponTypeAddress, processName, &quot;UInt&quot;) != 34) ;  если не равно 34 значит в руках не снайперка и послать сообщение
       {
       msgbox, в руках нету снайперки
       }
    else if (processReadMemory(SniperWeaponTypeAddress, processName, &quot;UInt&quot;) = 34) ; иначе если в руках снайперка то выполнить след действия
       {
        send {vk01 down}
        KeyWait, vk02, D
        sleep 350
        send {vk43 down}
        sleep 50
        send {vk43 up}
        sleep 150
        send {vk01 up}
       }
    return</code></pre></div><p>Но почему не работает:( Зажимаю F2. Если в руках что либо другое то сообщение не присылает так же выполняет действия с любым видом(</p>]]></description>
			<author><![CDATA[null@example.com (Dworkin)]]></author>
			<pubDate>Mon, 08 Apr 2013 14:24:59 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=71206#p71206</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: if, else, then при зажатой клавише]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=71150#p71150</link>
			<description><![CDATA[<p>Спасибо</p>]]></description>
			<author><![CDATA[null@example.com (Dworkin)]]></author>
			<pubDate>Sun, 07 Apr 2013 14:20:43 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=71150#p71150</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: if, else, then при зажатой клавише]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=71133#p71133</link>
			<description><![CDATA[<div class="codebox"><pre><code>processName := &quot;gta_sa.exe&quot;
baseAddressPointer := 0xB7CD98
pistolWeaponTypeOffset := 0x5D8 ; тип оружия, не deaglestate
pistolAmmoInClipOffset := 0x5E0

F2::
    if !baseAddress
        InitAddresses()

    SetTimer CheckWeapon, 100 ; проверять нужно не более чем в два раза чаще периодичности убывания боеприпаса. пример: 1 выстрел в сек - проверяем значение не чаще раз в 500 мс.
    KeyWait F2
    SetTimer CheckWeapon, Off
    return

CheckWeapon:
    if (!mouseButtonsIsPressed &amp;&amp; ProcessReadMemory(pistolWeaponTypeAddress, processName, &quot;UInt&quot;) = 24) { ; если кнопки еще не зажаты и тип оружия = 24
        Send {RBUTTON down}{LBUTTON down}
        mouseButtonsIsPressed := true
    }

    if (mouseButtonsIsPressed &amp;&amp; ProcessReadMemory(pistolAmmoInClipAddress, processName, &quot;UInt&quot;) &lt;= 2) { ; если кнопки уже зажаты и количество б.п. &lt;= 2
        SetKeyDelay, 20, 50 ; для SendEvent лучше, чем использовать кучку Sleep
        Send {RBUTTON up}{LBUTTON up}{vk51}{vk45}
        mouseButtonsIsPressed := false
    }
    return

InitAddresses() {
    global
    baseAddress := ProcessReadMemory(baseAddressPointer, processName)
    pistolWeaponTypeAddress := baseAddress + pistolWeaponTypeOffset ; подсчитывает указатель по которому можно прочитать значение текущего типа оружия
    pistolAmmoInClipAddress := baseAddress + pistolAmmoInClipOffset ; указатель на значение количества патронов в обойме
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (creature.ws)]]></author>
			<pubDate>Sun, 07 Apr 2013 02:18:58 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=71133#p71133</guid>
		</item>
		<item>
			<title><![CDATA[AHK: if, else, then при зажатой клавише]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=71131#p71131</link>
			<description><![CDATA[<p>Здравствуйте снова <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> Возникла необходимость написать один макрос с которым я не могу справится сам к сожалению поэтому прошу вашей помощи.</p><p>Суть скрипта:<br />Я зажимаю клавишу F2. Когда я зажал ее, она должна через память все время считывать данные про оружие в руках, зажимать правую кнопку мыши(прицел), зажимать левую кнопку мыши(стрельба) и когда патронов в этом обойме остается 2 , оно отжимает левую кнопку мыши, отжимает правую кнопку мыши и посылает скролл. И так по кругу пока зажата клавиша.</p><p>То есть:<br />Я зажал клавишу F2<br />Все время(loop) считывается данные об оружие и когда в руках, оказывается именно это оружие, тогда</p><p>зажимается левая и правая кнопка мыши и все время(loop) считывается количество патронов в обойме, и когда в обойме оказывается 2 патрона то</p><p>отпускается левая и правая кнопка мыши и посылается скрол. И так по кругу пока зажат F2</p><br /><br /><p>Вот скрипт:<br /></p><div class="codebox"><pre><code>processName := &quot;gta_sa.exe&quot;
baseAddressPointer := 0xB7CD98
deaglestateoffset := 0x5D8
deagleammooffset := 0x5E0

InitAddresses() {
    global
baseAddress := ProcessReadMemory(baseAddressPointer, processName)

deagleAddress := baseAddress + deaglestateoffset ; считывает какое оружие
deagleammoAddress := baseAddress + deagleammooffset ; количество патронов в обойме 
}

F2::
if !baseAddress
        InitAddresses()

loop
{
deagle := ProcessReadMemory(deagleAddress, processName, &quot;UInt&quot;) ; считывает оружие в   руках
if deagle = 24 ; если равно 24 что значит в руках дигл
}

then 

send {RBUTTON down}
send {LBUTTON down}

Loop
{
ammo := ProcessReadMemory(deagleammoAddress, processName, &quot;UInt&quot;) ; считывает патроны в обойме
     if ammo = 2 ; если в обойме 2 патрона то
}

then 

send {RBUTTON up}
send {LBUTTON up}
sleep, 50
       send {vk51 down} 
       sleep, 50
       send {vk51 up}
       sleep 50
       send {vk45 down}
       sleep, 50
       send {vk45 up}
return</code></pre></div><p>Знаю что код не правильный просто я попытался точно передать суть скрипта.</p>]]></description>
			<author><![CDATA[null@example.com (Dworkin)]]></author>
			<pubDate>Sun, 07 Apr 2013 00:16:13 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=71131#p71131</guid>
		</item>
	</channel>
</rss>
