Script problem

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By Newby

My Battle script for my battle scene is attack when it shouldnt
my game involves multiple choice questions to fight if you get it right you damage the enemy if wrong you get damaged but there is something wrong in the script, in the beginning it is fine but when you get to the next question the enemy and player both take damage.
Here is the script

extends Control
onready var QnA=get_node("QnA")
onready var Player=get_node("Player")
onready var Enemy=get_node("Enemy")
func answerlocation():
get_node("Question").set_text(QnA.questions())
randomize()
var num=randi()%4
if num==0:
	get_node("Choice1").connect("pressed",get_node("Player"),"attack",[get_node("Enemy")])
	get_node("Choice1").set_text(QnA.answers())
	get_node("Choice2").connect("pressed",get_node("Enemy"),"attac",[get_node("Player")])
	get_node("Choice2").set_text(QnA.wrong1())
	get_node("Choice3").connect("pressed",get_node("Enemy"),"attac",[get_node("Player")])
	get_node("Choice3").set_text(QnA.wrong2())
	get_node("Choice4").connect("pressed",get_node("Enemy"),"attac",[get_node("Player")])
	get_node("Choice4").set_text(QnA.wrong3())
if num==1:
	get_node("Choice2").connect("pressed",get_node("Player"),"attack",[get_node("Enemy")])
	get_node("Choice2").set_text(QnA.answers())
	get_node("Choice1").connect("pressed",get_node("Enemy"),"attac",[get_node("Player")])
	get_node("Choice1").set_text(QnA.wrong1())
	get_node("Choice3").connect("pressed",get_node("Enemy"),"attac",[get_node("Player")])
	get_node("Choice3").set_text(QnA.wrong2())
	get_node("Choice4").connect("pressed",get_node("Enemy"),"attac",[get_node("Player")])
	get_node("Choice4").set_text(QnA.wrong3())
if num==2:
	get_node("Choice3").connect("pressed",get_node("Player"),"attack",[get_node("Enemy")])
	get_node("Choice3").set_text(QnA.answers())
	get_node("Choice2").connect("pressed",get_node("Enemy"),"attac",[get_node("Player")])
	get_node("Choice2").set_text(QnA.wrong1())
	get_node("Choice1").connect("pressed",get_node("Enemy"),"attac",[get_node("Player")])
	get_node("Choice1").set_text(QnA.wrong2())
	get_node("Choice4").connect("pressed",get_node("Enemy"),"attac",[get_node("Player")])
	get_node("Choice4").set_text(QnA.wrong3())
if num==3:
	get_node("Choice4").connect("pressed",get_node("Player"),"attack",[get_node("Enemy")])
	get_node("Choice4").set_text(QnA.answers())
	get_node("Choice2").connect("pressed",get_node("Enemy"),"attac",[get_node("Player")])
	get_node("Choice2").set_text(QnA.wrong1())
	get_node("Choice3").connect("pressed",get_node("Enemy"),"attac",[get_node("Player")])
	get_node("Choice3").set_text(QnA.wrong2())
	get_node("Choice1").connect("pressed",get_node("Enemy"),"attac",[get_node("Player")])
	get_node("Choice1").set_text(QnA.wrong3())
print(num)
func goback():
if Player.dead==true or Enemy.dead==true:
	get_tree().change_scene("res://Scene/Overworld.tscn")
func _ready():
set_process(true)
answerlocation()
QnA.rand()
func _process(delta):
goback()
func _on_Choice1_pressed():
answerlocation()
QnA.rand()
func _on_Choice2_pressed():
answerlocation()
QnA.rand()
func _on_Choice3_pressed():
answerlocation()
QnA.rand()
func _on_Choice4_pressed():
answerlocation()
QnA.rand()

please help it is for my capstone project

:bust_in_silhouette: Reply From: hilfazer

Try disconnecting your signals at the beginning of answerlocation() method with a function like this:

 func disconnectAttackSignals():
	get_node("Choice1").disconnect("pressed",get_node("Player"),"attack")
	get_node("Choice1").disconnect("pressed",get_node("Enemy"),"attac")
	get_node("Choice2").disconnect("pressed",get_node("Player"),"attack")
	get_node("Choice2").disconnect("pressed",get_node("Enemy"),"attac")
	get_node("Choice3").disconnect("pressed",get_node("Player"),"attack")
	get_node("Choice3").disconnect("pressed",get_node("Enemy"),"attac")
	get_node("Choice4").disconnect("pressed",get_node("Player"),"attack")
	get_node("Choice4").disconnect("pressed",get_node("Enemy"),"attac")

Or better yet, we can use $ instead of all the get_node()s

SingingApple | 2018-03-02 16:10

To prevent debugger from spamming errors there’s Object.is_connected() method
Object — Godot Engine (latest) documentation in English

disconnect() should not be called if this method return false.

hilfazer | 2018-03-02 16:18