Page 1 of 1

Assigner une touche à l'utilisation d'un script

Posted: 27 May 2020, 10:50
by blastedmodzz
Bonjour, je m'excuse pour le titre, je n'arrive pas à expliquer correctement mon problème dedans.

J'essaie actuellement de faire un script qui, en fonction de mon choix, se déclenche quand j'appuie sur 1 ou 2 (exemple) mais je veux pouvoir choisir sans avoir à changer le code.

J'ai mon script qui est le suivant :

Code: Select all

Random, rand, 97, 138
$LButton::
loop
While GetKeyState("LButton","P")
{
    Send, {LButton}
    Sleep, rand
}
{
    Send, {LButton}
    Sleep, rand
}

return

f1:: 
Suspend, Toggle
Pause, Toggle, 1
return
Il s'agit d'un rapidfire donc. Le soucis sur mon jeu c'est qu'on a 2 armes mais que je doive appuyer sur F1 pour le mettre en pause si je change d'arme, pas super pratique en plein combat.
mon but est donc de pouvoir assigner le script à une touche en fonction de ça.
Exemple :
J'ai une arme automatique en 1, et en 2 j'ai celle qui nécessite le rapidfire
le script détecterait quand j'appuie sur 1 ou 2 ce qui donnerait plus ou moins ça :

Code: Select all

bind_1=1
bind_2=2
bind_run=3 ;Run key
bind_granade=g

Hotkey, ~$*%bind_1%, key_1
Hotkey, ~$*%bind_2%, key_2
Hotkey, ~$*%bind_run%, key_3
Hotkey, ~$*%bind_granade%, key_granade

slotA:=1 
slotB:=0
rate=10
volume=80
SAPI := ComObjCreate("SAPI.SpVoice")
SAPI.rate:=rate
SAPI.volume:=volume

key_1:
slotA:=1
slotB:=0
return

key_2:
slotA:=0
slotB:=1
return

key_3:
key_granade:
slotA:=0
slotB:=0
if GetKeyState(bind_run,"P")
SAPI.Speak("courir")
else if GetKeyState(bind_granade,"P")
SAPI.Speak("granade")
return

là, ça définirait slotA ou slotB à 1 selon si j'appuie sur 1 ou 2, en admettant que ce soit slotB, là, j'appuie sur F2, le script détecterait quel slot est égal à 1 et donc il assigne le rapidfire au slotB. ce qui fait que si j'ai mon arme 1, il ne marche pas, mais si je prends l'arme 2, là il s'active.
Pour la touche 3/G c'est pour qu'il détecte que je suis en train de courir ou que j'utilise une grenade et que les deux slot soient à 0.

Mon problème c'est que je ne sais ABSOLUMENT PAS comment faire ce que j'ai en tête... l'idée est simple dans ma tête mais j'ai pas le niveau du tout pour faire ça, c'est pour ça que j'en appelle à votre aide.. j'ai la base pour qu'il détecte si j'appuie sur 1/2/3 et qu'il modifie les slot en fonction, mais pour le reste j'ai aucune idée de quoi et comment faire

Re: Assigner une touche à l'utilisation d'un script

Posted: 27 May 2020, 13:02
by joedf
Je pense qu'il serait plus simple si tu fait une section/fonction séparer pour assigner les touches.

Code: Select all

F1::
bind_1:=1
bind_2:=0
gosub, UpdateHotkeys
return

F2::
bind_1:=0
bind_2:=1
gosub, UpdateHotkeys
return

UpdateHotkeys:
;unbind and rebind, fonctionne si c'est seulement les mêmes touches, ex: 1 ou 2
Hotkey, ~$*%bind_1%, Off
Hotkey, ~$*%bind_2%, Off
Hotkey, ~$*%bind_1%, key_1
Hotkey, ~$*%bind_2%, key_2
Return

Re: Assigner une touche à l'utilisation d'un script

Posted: 27 May 2020, 14:41
by blastedmodzz
Bonjour, merci pour votre réponse mais dans ce cas, comment faire pour que le script détecte que je ne suis pas en train de courir ou que je n'utilise pas un grenade ? (3/G)
bind_run=3
bind_granade=g

Hotkey, ~$*%bind_run%, key_3
Hotkey, ~$*%bind_granade%, key_granade
désolé si ma question est bête mais je suis pas vraiment doué avec AutoHotkey :/
pour être honnête je me base sur un script que j'utilisais auparavant qui marchait pour environ 6/7 armes, en appuyant sur 1 puis F2 par exemple il assignait une arme à 1, puis si j'appuyais sur 2 puis F4 il en assignait une autre ou si je n'appuyais sur aucun F, il ne faisait rien, la base que j'ai vient de ce que j'ai pu "comprendre" et récupérer dans ce script.. :/

Re: Assigner une touche à l'utilisation d'un script

Posted: 27 May 2020, 14:46
by blastedmodzz
c'est assez.. gros.. mais voici le code complet du script dont je parlais, je n'ai pas besoin de récupérer les patern en soi c'est juste la base qui m'intéresse, assigner une arme à la touche 1/2 et agir en fonction de l'arme assignée à cette touche quand je clique, malheureusement, avec mon niveau plus que nul, je comprends pas grand chose..

Code: Select all

#NoEnv
#KeyHistory, 0
#SingleInstance force
#MaxThreadsBuffer on
#Persistent
;#NoTrayIcon ;if you care (not reccomend)
SetBatchLines, -1
ListLines, Off
SetWorkingDir %A_ScriptDir%

;-----editplz-----
sens:=3.5 ;Edit this to your in-game sens
bind_bhop=Numpad1 ;This button should be binded sub-crouch[hold] key in Game setting
subjumpkey=Numpad9 ;This button should be binded sub-Jump key in Game setting
subshootkey=Numpad0 ;This button should be binded sub-Attack key in Game setting

bind_1=1
bind_2=2
bind_run=3 ;Run key
bind_reset=f6 ;Reset button
bind_granade=g ;Granade key
bind_r31=f1
bind_r9=f2
bind_pros=f3
bind_pro=f4
bind_lstar=f5
bind_flat=f7
bind_devo=f8
bind_hav=f9
;----hotkey registor-----
Hotkey, ~$*%bind_1%, key_1
Hotkey, ~$*%bind_2%, key_2
Hotkey, ~$*%bind_run%, key_3
Hotkey, ~$*%bind_r31%, r301
Hotkey, ~$*%bind_r9%, r99
Hotkey, ~$*%bind_pros%, prowlerselect
Hotkey, ~$*%bind_pro%, prowler
Hotkey, ~$*%bind_lstar%, lstar
Hotkey, ~$*%bind_flat%, flatline
Hotkey, ~$*%bind_devo%, devotion
Hotkey, ~$*%bind_hav%, havoc
Hotkey, ~$*%bind_reset%, key_reset
Hotkey, ~$*%bind_granade%, key_granade
Hotkey, ~$*%bind_bhop%, key_bhop

; ~~~~~~~~~~~~~~~~~Pattern~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
no_pattern := {}
r301_pattern := {1: "-3.5,10.4,80", 2: "4.4,10.6,80", 3: "-6.4,9.5,80"
,4: "-1.2,10.0,80", 5: "-5.3,7.6,80", 6: "-0.4,4.1,80"
,7: "-1.8,3.3,80", 8: "-4.1,1.9,80", 9: "-2.4,3.3,80"
,10: "-3.2,1.0,80", 11: "0.0,3.3,80", 12: "2.0,2.2,80"
,13: "5.0,2.8,80", 14: "4.7,2.3,80", 15: "5.0,1.9,80"
,16: "5.2,0.9,80", 17: "3.2,0.9,80", 18: "0.0,2.2,80"
,19: "-1.1,4.2,80", 20: "-3.1,2.8,80", 21: "-3.6,1.3,80"
,22: "-3.6,0.0,80", 23: "-2.6,1.4,80", 24: "-2.4,1.4,80"
,25: "-3.0,0.0,80", 26: "0.0,0.0,80", 27: "0.0,0.0,80"
,28: "0.0,0.0,80", 29: "0.0,0.0,80", 30: "0.0,0.0,80"}

r99_pattern := {1: "-1.6,7,53", 2: "0.1,7,53", 3: "2.3,5.9,53"
,4: "-1.8,10.2,53", 5: "-3.3,14.9,53", 6: "-6.3,13,53"
,7: "-5.5,9.7,53", 8: "-2.5,8.8,53", 9: "0.2,9,52"
,10: "2.3,7.8,52", 11: "4.5,7.3,52", 12: "0.9,6.1,52"
,13: "1.6,8.5,52", 14: "-1.1,4,52", 15: "-4.9,1,52"
,16: "-2.3,2.8,52", 17: "-4.5,1.5,52", 18: "4,2.3,52"
,19: "0,2,52", 20: "2.5,1.7,52", 21: "3.5,1.7,52"
,22: "4,2.6,52", 23: "3.5,2,52", 24: "4.6,2,52"
,25: "2,1.5,52", 26: "2,2,52", 27: "-5,3,52"
,28: "-5,0,52", 29: "-5,1,52", 30: "0,0,52"}

prowlerselect_pattern := {1: "2,15.2,120", 2: "2,11.7,120", 3: "2,12.9,120"
,4: "2,12.4,120", 5: "3,9.4,120", 6: "3,10.6,120"
,7: "3,9.0,120", 8: "3,8.5,120", 9: "-2,3.9,120"
,10: "-3,6.0,120", 11: "-3,6.0,120", 12: "-3,6.4,120"
,13: "-3,6.9,120", 14: "-3,3.9,120", 15: "3,7.8,120"
,16: "3,4.8,120", 17: "3,3.7,120", 18: "0,3.9,120"
,19: "0,6.0,120", 20: "0.0,5.3,120", 21: "0.0,0.0,120"}

prowler_pattern := {1: "0.7,17.3,36", 2: "0.3,15.0,36", 3: "0.3,14.3,36"}

lstar_pattern := {1: "0,5,37", 2: "0,5,37", 3: "0,5,37"
,4: "2,5,37", 5: "2,5,37", 6: "2,5,37"
,7: "2,5,37", 8: "2,5,37", 9: "2,5,37"
,10: "0,5,32", 11: "0,5,32", 12: "0,5,37"
,13: "0,5,32", 14: "0,5,32", 15: "0,5,32"
,16: "0,5,42", 17: "0,5,42", 18: "0,5,42"
,19: "0,5,42", 20: "0,5,42", 21: "0,5,42"
,22: "0,5,42", 23: "0,5,55", 24: "0,5,55"
,25: "0,5,55", 26: "0,5,55", 27: "0,5,55"
,28: "0,5,55", 29: "0,5,55", 30: "0,5,55"
,31: "0,5,55", 32: "0,5,55", 33: "0,5,55"
,34: "0,5,55", 35: "0,5,55", 36: "0,5,55"
,37: "0,5,55", 38: "0,5,55", 39: "0,5,55"
,40: "0,5,55", 41: "0,5,55", 42: "0,5,55"
,43: "0,5,55", 44: "0,5,55", 45: "0,5,55"}

flatline_pattern := {1: "3.0,15.2,110", 2: "1.5,5.3,110", 3: "9.6,10.1,110", 4: "6.3,7.5,110"
,5: "3.3,9.7,110", 6: "-1.3,9.7,110", 7: "-4.5,2.6,110", 8: "-10.6,-2.0,110"
,9: "-2.7,-1.3,110", 10: "-3.9,3.5,110", 11: "-1.7,6.6,110", 12: "4.5,2.0,110"
,13: "9.9,4.4,110", 14: "5.1,1.9,110", 15: "9.6,-1.6,110", 16: "4.2,2.1,110"
,17: "1.8,8.3,110", 18: "3.3,8.1,110", 19: "6.9,4.9,110", 20: "9.0,2.3,110"
,21: "3.9,0.6,113", 22: "-1.2,5,113", 23: "-7.9,2.5,113", 24: "-5.5,2,113"
,25: "-8.8,2.2,113", 26: "-9.1,1.5,113", 27: "-8.8,1,113"}



devotion_pattern := {1: "0.0,0.0,40", 2: "0.8,24.5,180", 3: "0.3,20.0,170"
,4: "0.3,23.5,140", 5: "2.0,23.2,120", 6: "3.1,19.5,100"
,7: "2.8,12.6,85", 8: "2.8,10.6,85", 9: "6.2,4.8,85"
,10: "2.8,6.4,85", 11: "3.1,5.8,68", 12: "4.8,7.1,68"
,13: "5.0,4.4,68", 14: "6.2,2.3,68", 15: "7.6,1.8,68"
,16: "7.0,0.5,68", 17: "4.2,-1.6,68", 18: "6.2,1.6,68"
,19: "-1.4,4.6,68", 20: "0.0,5.3,66", 21: "-3.9,3.9,66"
,22: "-4.5,2.3,66", 23: "-4.5,2.5,66", 24: "-6.7,3.0,66"
,25: "-7.0,3.0,66", 26: "-3.1,3.2,66", 27: "1.7,3.7,66"
,28: "-1.4,4.8,66", 29: "-3.6,4.4,66", 30: "-5.0,3.5,70"
,31: "-6.2,2.1,70", 32: "-5.6,-0.5,70", 33: "-5.6,-0.5,70"
,34: "-4.8,3.7,70", 35: "-4.8,3.7,67", 36: "-0.8,4.1,67"
,37: "-2.8,3.5,67", 38: "2.0,3.5,67", 39: "2.0,3.5,66"
,40: "-1.4,3.7,67", 41: "-1.4,2.8,67", 42: "-3.6,1.6,67"
,43: "-1.4,2.3,67", 44: "0.0,3.0,67", 45: "3.6,1.8,67"}

havoc_pattern := {1: "0.0,0.0,460", 2: "-1.1,10.8,84", 3: "5.5,11.9,84"
,4: "-4.8,10.4,84", 5: "2.6,10.8,84", 6: "-4.6,11.0,84"
,7: "-2.0,11.1,84", 8: "-3.7,11.1,84", 9: "-0.9,11.1,84"
,10: "2.8,11.1,84", 11: "5.5,10.3,84", 12: "2.8,11.1,84"
,13: "0.9,10.1,84", 14: "-2.0,10.1,84", 15: "-2.0,10.1,84"
,16: "-3.7,8,83", 17: "-2.8,7,83", 18: "-2.0,5,83"
,19: "-0.9,5.5,83", 20: "0.9,4,84", 21: "2.0,2.8,84"
,22: "2.8,2.8,84", 23: "2.0,2.8,84", 24: "0.9,2.8,84"
,25: "-0.9,2.5,84", 26: "-2.0,2.5,84", 27: "0.0,2,84"
,28: "0.0,2,84", 29: "0.0,2,84", 30: "0.0,2,84"
,31: "0.0,2,84", 32: "0.0,2,84", 33: "0.0,0.0,100"}
;~~~~~~~~~~~~~~~~~~~~~~~Base state~~~~~~~~~~~~~~~~~~~~~~~~~~
slotA:=1 ;Slot1 activate memory Var
slotB:=0 ;Slot2 activate memory Var
memA:=non ,memB:=non ;Weapon pattern memory Var
memR1:=0 memR2:=0 ;Fire-mode memory Var
active_pattern:=no_pattern
modifier:= 3.4/sens
rate=10
volume=80
SAPI := ComObjCreate("SAPI.SpVoice")
SAPI.rate:=rate
SAPI.volume:=volume
rapidmode:=0

isCursorShown()
{
StructSize := A_PtrSize + 16
VarSetCapacity(InfoStruct, StructSize)
NumPut(StructSize, InfoStruct)
DllCall("GetCursorInfo", UInt, &InfoStruct)
Result := NumGet(InfoStruct, 8)
if Result > 1
Return 1
else
Return 0
}
Loop {
Sleep 50
if isCursorShown() == 1
mice:=1
else
mice:=0
}

; ~~~~~~~~~~~~~~~~~Base activation~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
key_1:
slotA:=1
slotB:=0
active_pattern:=%memA%_pattern
rapidmode:=memR1
SAPI.Speak(memA)
return

key_2:
slotA:=0
slotB:=1
active_pattern:=%memB%_pattern
rapidmode:=memR2
SAPI.Speak(memB)
return

key_3:
key_granade:
active_pattern:=no_pattern
rapidmode:=()
if GetKeyState(bind_run,"P")
SAPI.Speak("courir")
else if GetKeyState(bind_granade,"P")
SAPI.Speak("granade")
return

key_reset:
active_pattern:=no_pattern
slotA:=1
slotB:=0
memA:=non
memB:=non
memR1:=0
memR2:=0
rapidmode:=0
SAPI.Speak("réset")
return

; ~~~~~~~~~~~~~~~~~~~~~~~~~~Weapon Profile~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;Full-Auto Weapon section
r301:
r99:
lstar:
flatline:
devotion:
havoc:

prowlerselect:
{
nullA := A_thislabel
active_pattern:=%nullA%_pattern
rapidmode:=0
if (slotA)
memA:=nullA ,memR1:=0
else
memB:=nullA ,memR2:=0
SAPI.Speak(nullA)
}
return

;Tap or burst weapon section
prowler:
{
nullA := A_thislabel
active_pattern:=%nullA%_pattern
rapidmode:=0
if (slotA)
memA:=nullA ,memR1:=1
else
memB:=nullA ,memR2:=1
SAPI.Speak(nullA)
}
return

; ~~~~~~~~~~~~~~~~~~~~~~Main~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
key_bhop:
sleep 150
while GetKeyState(bind_bhop, "P")
{
Random, foo, 50, 100
Send % subjumpkey
Sleep %foo%
send {space}
sleep %foo%
}
return

#IF mice=0 ; Disable switch cursor shown (start line)
~$*LButton::
sleep 5
loop {
if (rapidmode) ;For Tap Weapon
{
if a_index<3 ; remove bug
click
else
random, foo2, 1, 2
if(foo2=1)
click
else
send % subshootkey
}
x := strsplit(active_pattern[a_index],",")[1] ;using str insteed of normal array for easly edit pattern
y := strsplit(active_pattern[a_index],",")[2]
t := strsplit(active_pattern[a_index],",")[3]
dllcall("mouse_event","UInt",0x01,"UInt",x*modifier,"UInt",y*modifier)
sleep t
} until !GetKeyState("LButton","P") || a_index > active_pattern.maxindex()
return
#IF ; Disable switch cursor shown (end line)

~end::
SAPI.Speak("bye")
Exitapp
return

Re: Assigner une touche à l'utilisation d'un script

Posted: 27 May 2020, 17:54
by joedf
Je suis pas certain de comprendre ce que tu cherches à faire... :/
Peut-être si tu me le décrit plus schématiquement?

Par exemple:
F1 -> fait ceci
3 -> Fait cela
F2 -> fait ceci, si variable = qqch

:think: ?

Re: Assigner une touche à l'utilisation d'un script

Posted: 28 May 2020, 04:48
by blastedmodzz
Désolé en effet c'est un peu brouillon :/
alors le script serait censé agir comme ça :

Si j'appuie sur 1, il définit la valeur de SlotA à 1 et SlotB à 0, si j'appuie sur 2, SlotA = 0, SlotB = 1, si j'appuie sur 3 ou G, il mets les deux valeurs à 0
Les SlotA/B serviraient au script à savoir si j'utilise l'arme 1 ou 2 pendant que je joue.
Maintenant, admettons que j'utilise l'arme 1, SlotA est donc à 1 et SlotB à 0, si j'appuie sur F1, j'aimerai qu'il assigne donc ce script à la touche 1, donc si j'appuie sur 2, il détecte que le script est pas assigné à cette touche et ne se déclenche pas.
Script que j'utilise pour le rapidfire :

Code: Select all

    $LButton::
Random, rand, 97, 138
    loop
    While GetKeyState("LButton","P")
    {
    	Send, {LButton}
    	Sleep, rand
    }
    {
    	Send, {LButton}
    	Sleep, rand
    }
Pour résumer
pression de la touche 1 : SlotA = 1, SlotB =0
pression de la touche 2 : SlotA = 0, SlotB =1
pression de la touche 3 ou G : SlotA = 0, SlotB =0
pression de la touche F1 :
- Si SlotA = 1 et SlotB = 0 le script garde en mémoire que la fonction assignée au clic gauche doit d'activer uniquement si SlotA = 1 et SlotB = 0
- Si SlotA = 0 et SlotB = 1 le script garde en mémoire que la fonction assignée au clic gauche doit d'activer uniquement si SlotA = 0 et SlotB = 1
pression du clic gauche : Si j'ai appuyé sur F1 pour la touche 1, alors, si SlotA = 1 et SlotB = 0, le script se déclenche, si j'ai appuyé sur 2/3/G, le script détecte que SlotA n'est pas égal à 1 et ne déclenche pas le rapidfire

Re: Assigner une touche à l'utilisation d'un script

Posted: 28 May 2020, 10:11
by joedf
Ok... Essayes ça? :geek:

Code: Select all

; par joedf
; Aide pour blastedmodzz
; https://www.autohotkey.com/boards/viewtopic.php?f=55&t=76533

; pression de la touche 1 : SlotA = 1, SlotB =0
~$*1:: SlotA := 1, SlotB := 0

; pression de la touche 2 : SlotA = 0, SlotB =1
~$*2:: SlotA := 0, SlotB := 1

; pression de la touche 3 ou G : SlotA = 0, SlotB =0
~$*3::
~$*G::
SlotA := 0, SlotB := 0
return

; pression de la touche F1 :
F1::

; - Si SlotA = 1 et SlotB = 0 le script garde en mémoire que la fonction 
;   assignée au clic gauche doit d'activer uniquement si SlotA = 1 et SlotB = 0
if (SlotA == 1 and SlotB == 0) {
	Hotkey, ~$*LButton, RapidFire
	Hotkey, ~$*RButton, FaitRien
}

; - Si SlotA = 0 et SlotB = 1 le script garde en mémoire que la fonction 
;   assignée au clic gauche doit d'activer uniquement si SlotA = 0 et SlotB = 1
if (SlotA == 0 and SlotB == 1) {
	Hotkey, ~$*RButton, RapidFire
	Hotkey, ~$*LButton, FaitRien
}

; pression du clic gauche : Si j'ai appuyé sur F1 pour la touche 1, alors, 
; si SlotA = 1 et SlotB = 0, le script se déclenche, si j'ai appuyé sur 2/3/G, 
; le script détecte que SlotA n'est pas égal à 1 et ne déclenche pas le rapidfire
return

FaitRien:
return

RapidFire:
key := Trim(A_thisHotkey," `t$~*")
While GetKeyState(key,"P")
{
	Send, {%key%}
	Random, rand, 97, 138
	Sleep, rand
}
return

Re: Assigner une touche à l'utilisation d'un script

Posted: 28 May 2020, 11:57
by blastedmodzz
Et bien ça marche et je t'en remercie mais il y a un petit soucis, le script s'active donc bien si slotA = 1/slotB = 0 et inversement (donc si j'ai mon arme 1 ou 2 en main) mais du coup, c'est en permanence justement.

Le but de la touche F1 serait celui ci :
Admettons que j'ai besoin du rapidfire pour l'arme 1, j'appuie donc sur 1 (ce qui en jeu équipe l'arme 1) et que pour le script définirait la valeur de SlotA sur 1 et SlotB sur 0, en suite j'appuie sur F1 pour que le rapidfire marche quand j'utilise l'arme 1.

Si c'est brouillon je m'en excuse, ayant peu de connaissances en AHK j'ai du mal à l'expliquer.. J'ai joint plus haut le gros script dont je m'inspire qui fait actuellement cette fonction, en gros ce script sert d'anti recul, en appuyant sur 1/2 il définir SlotA/B à 1, en suite si j'appuie sur F1/F2/F3/F4 etc il assigne une arme à la touche 1/2 et quand je clique ça agit en fonction de l'arme choisie, le but serait justement de pouvoir assigner la fonction du rapidfire à la touche 1 ou 2 et qu'elle ne se déclenche que si j'ai appuyé sur 1 ou 2 et que le rapidfire est assigné à cette touche

Re: Assigner une touche à l'utilisation d'un script

Posted: 28 May 2020, 13:54
by joedf
Donc, si comprend bien le but de F1 c'est de simplement Activer et Déactiver le rapidfire? :think:

Re: Assigner une touche à l'utilisation d'un script

Posted: 28 May 2020, 14:01
by blastedmodzz
joedf wrote:
28 May 2020, 13:54
Donc, si comprend bien le but de F1 c'est de simplement Activer et Déactiver le rapidfire? :think:
non pas vraiment :/

Exemple :
Arme 1 : P2020
Arme 2 : R99

Si j'ai besoin du rapidfire pour l'arme 1, donc, j'appuie sur 1, là, le script défini SlotA à 1 et SlotB à 0, en suite j'appuie sur F1, là, le script assigne le rapidfire au SlotA, donc en gros, si j'appuie sur 2/3 ou G, le rapidfire ne marche plus mais si j'appuie sur 1, là, il reconnait que le rapidfire est assigné et l'active

Re: Assigner une touche à l'utilisation d'un script

Posted: 28 May 2020, 14:48
by joedf
C trop mélangeant... :crazy:
Maintenant c rapidfire seulement sur l'arme #1 et F1 active/deactive le rapidfire sur larme #1.

Code: Select all

; par joedf
; Aide pour blastedmodzz
; https://www.autohotkey.com/boards/viewtopic.php?f=55&t=76533

useRapidFire := false


; pression de la touche 1 : SlotA = 1, SlotB =0
~$*1:: SlotA := 1, SlotB := 0

; pression de la touche 2 : SlotA = 0, SlotB =1
~$*2:: SlotA := 0, SlotB := 1

; pression de la touche 3 ou G : SlotA = 0, SlotB =0
~$*3::
~$*G::
SlotA := 0, SlotB := 0
return

; pression de la touche F1 :
F1::
useRapidFire := !useRapidFire
return

#If (SlotA == 1 and SlotB == 0)
~$*LButton::
RapidFire:
if (useRapidFire){
	While GetKeyState("LButton","P")
	{
		;Send, {LButton}
		Random, rand, 97, 138
		ToolTip %rand%
		Sleep, rand
	}
}
return

Re: Assigner une touche à l'utilisation d'un script

Posted: 29 May 2020, 06:34
by blastedmodzz
je précisais que c'était un exemple mais finalement grâce à ton aide j'ai pu trouver comment faire ce que je voulais, malheureusement, j'ai un petit soucis..

Là, tout marche correctement, quand j'appuie sur 1, SlotA=1, SlotB=0 et quand j'appuie sur 2 SlotA=0, SlotB=1, quand j'appuie sur F1 ou F2, en fonction de si c'est SlotA ou SlotB qui est à 1, il assigne l'arme à la touche 1 ou 2 et le SAPI donne bien le nom de la bonne arme, mon soucis se passe au niveau du clic, à la commande $LButton: en gros, j'ai les if qui vérifient au moment ou je clique si la valeur de SlotA ou SlotB est égale a 1 et aussi que memA/memB ait bien le nom d'une arme (hemlok ou p2020) mon problème c'est que même si memA ne correspond pas le rapidfire s'enclenche..

Script actuel entier :
Spoiler

Re: Assigner une touche à l'utilisation d'un script  Topic is solved

Posted: 29 May 2020, 07:52
by joedf
Les comparaison avec texte nécessitent des guillemets sinon, c'est interprété comme une expression ou une variable.
donc je pense que tu veux qqch comme (slotB == 1 and memB == "p2020") ou (slotB == 1 and memB == "hemlok")
plutôt que (slotB == 1 and memB == p2020) ou (slotB == 1 and memB == hemlok).

Re: Assigner une touche à l'utilisation d'un script

Posted: 29 May 2020, 10:49
by blastedmodzz
En effet les guillemets étaient nécessaires merci, j'ai eu plusieurs autres problèmes après ça que j'ai réussi à fixer, le premier était que le loop ne s'arrêtait plus même si je relâchais le clic, l'autre annulait complètement mon clic si rien ne correspondait au If. De plus, j'avais oublier de remplacer memA par memB pour l'emplacement 2, ce qui causait également un problème.

Code: Select all

    While GetKeyState("LButton","P")
    {
    	Send, {LButton}
    	Sleep, rand
    }
    {  <- c'était d'ici
    	Send, {LButton}
    	Sleep, rand
    } <- à ici qui causait la majorité des soucis
    
Merci énormément pour ton aide joedf, grâce à toi j'ai pu réussir ce script.

Voici le code complet si quelqu'un en a besoin :
Spoiler

Re: Assigner une touche à l'utilisation d'un script

Posted: 29 May 2020, 14:13
by joedf
Soucis 1: Tu dois mettre ~ devant $LButton:: pour ne pas blocker le clic normal.
Soucis 2: Je ne suis pas certain pourquoi tu as deux blocs en dessous le while, en plus un loop... ça ne fonctionne pas de cette façon.
la commande Random devrait se trouver a l'intérieur du loop, sinon la variable rand ne changera pas

Essayes ça

Code: Select all

~$LButton::
if (slotA == 1 and memA == "p2020") {
	While GetKeyState("LButton","P")
	{
		Send, {LButton}
		Random, rand, 97, 148
		Sleep, rand
	}
}
return
En fait, il serait même mieux de faire ceci...
Le rapidfire sera seulement actif quand la condition est respectée

Code: Select all

#If (slotA == 1 and memA == "p2020")
~$LButton::
While GetKeyState("LButton","P")
{
	Send, {LButton}
	Random, rand, 97, 148
	Sleep, rand
}
return

Re: Assigner une touche à l'utilisation d'un script

Posted: 29 May 2020, 14:33
by blastedmodzz

Code: Select all

#If (slotA == 1 and memA == "p2020")
~$LButton::
While GetKeyState("LButton","P")
{
	Send, {LButton}
	Random, rand, 97, 148
	Sleep, rand
}
return
Il y a 4 conditions pour le moment, est ce qu'un argument if x = 1 OR x = 2 ...existe ou pas ?

Re: Assigner une touche à l'utilisation d'un script

Posted: 29 May 2020, 15:48
by joedf
Oui bien sur! :thumbup:

Tu peux faire ça

Code: Select all

#If ( (slotA == 1 and memA == "p2020") or (slotA == 1 and memA == "hemlok") )
~$LButton::
While GetKeyState("LButton","P")
{
	Send, {LButton}
	Random, rand, 97, 148
	Sleep, rand
}
return
ou encore mieux, si tu veux faire qqch un peu différemment pour chaque condition :

Code: Select all

#If (slotA == 1 and memA == "hemlok")
~$LButton::
While GetKeyState("LButton","P")
{
	Send, {LButton}
	Random, rand, 97, 148
	Sleep, rand
}
return

#If (slotA == 1 and memA == "p2020")
~$LButton::
While GetKeyState("LButton","P")
{
	Send, {LButton}
	Random, rand, 97, 148
	Sleep, rand
}
return

Re: Assigner une touche à l'utilisation d'un script

Posted: 30 May 2020, 10:34
by blastedmodzz
en effet merci pour l'information, pour le coup je n'ai pas vraiment besoin d'une action différente en fonction de l'arme, c'est surtout pour le SAPI que j'utilise plusieurs noms, mais cela va m'être utile pour plus tard étant donné que je compte ajouter une fonction anti recul adaptée à l'arme

Re: Assigner une touche à l'utilisation d'un script

Posted: 30 May 2020, 10:50
by joedf
Parfait, et alors... bonne chance! :+1:

Re: Assigner une touche à l'utilisation d'un script

Posted: 31 May 2020, 15:43
by blastedmodzz
merci beaucoup et merci encore pour ton aide !