Merhaba.Arkadaşlar hemen örnek olarak sorunumu ve ve yapmak istediğimi anlatayım.
Veritabanında bulunan 100 tane oyuncuyu 1 tane bota saldırtıyorum.Güç hespalamaları oyuncuları çekme vs her şey tamam sorun yok.
Saldırı düzenlerken oyuncuları sırasıyla ya da rastgele bot yok olana kadar saldırtıyorum.Buraya kadar da sorun yok.
Benim istediğim ise oyuncuların mesela 20 kişinin aynı anda bir vuruş yapması sonra bu oyuncular 5 saniye beklerken diğer atıyorum 45 oyuncunun saldırması ve her saldırı yapan oyuncunun belli süre beklemesi.
Peki bunu yapabilir miyim ?Şöyle bir çözümüm var;oyuncuların tamamını listelere vs çekerek rastgele ekipler alıp bunların güçlerini toplayarak bot canından düşürerek yaparım.Ancak böyle bir çözümde her oyuncunun gücünü almak toplamak.Saldıran ekipi çıkarıp bekletmek.Bir sürü listeyle döngüyle uğraşmak zorunda kalacağım.Yok mudur daha kısa yolu çözümü?
def Event(a=0,b=0):
x=a;xx=b
loop=0
try:
while True:
npc_list=server.Npc()
print(loop)
connect=sql.connect("C:\\Users\Efkan\PycharmProjects\pythonProject\dosya\\denemetaban.db")
cursor=connect.cursor()
cursor.execute(
"SELECT level,cannon1,cannon2,cannon3,username,xp,money,npcsunk FROM players WHERE id={}".format(
random.choice(server_list)))
data=cursor.fetchall()
level=(data[0][0])
cannon1=data[0][1]
cannon2=data[0][2]
cannon3=data[0][3]
playername=data[0][4]
playerxp=int(data[0][5])
money=int(data[0][6])
npcsunk=int(data[0][7])
playerhp=10000
power=((int(cannon1) * kartopu_power * _35power + int(cannon2) * kartopu_power * _25power + int(
cannon3) * kartopu_power * _15power))
npc_name=npc_list[9][0]
npc_hp=int(npc_list[9][1])
npc_power=4200
npc_prize=int(npc_list[9][2])
npc_xp=int(npc_list[9][3])
a=6
b=5
while True:
if playerhp > 0 and npc_hp > 0:
if a % 6 == 0:
time.sleep(x)
if npc_hp <= power:
# print("{} Oyuncusu {} vurdu rakip battı".format(playername, npc_hp))
npc_hp=0
break
# print("{} Oyuncusu {} vurdu".format(playername, power))
npc_hp-=int(power)
# print("{} oyuncusunun canı {}, {} oyuncusunun canı {}".format(playername, playerhp, npc_name,npc_hp))
time.sleep(x)
if b % 5 == 0:
if playerhp <= npc_power:
# print("{} Oyuncusu {} vurdu rakip battı".format(npc_name, playerhp))
playerhp=0
break
# print("{} Oyuncusu {} vurdu".format(npc_name, npc_power))
playerhp-=int(npc_power)
# print("{} oyuncusunun canı {}, {} oyuncusunun canı {}".format(playername, playerhp, npc_name,npc_hp))
time.sleep(xx)
a+=1
b+=1
else:
time.sleep(xx)
a+=1
b+=1
else:
break
if playerhp >= npc_hp:
playerxp+=npc_xp
money+=npc_prize
npcsunk+=1
print("Etkinliği Kazanan {} {} gemisi battı.{} {} altın ve {} xp kazandı".format(playername, npc_name,
playername,
npc_prize, npc_xp))
cursor.execute(
"UPDATE players SET money={},xp={},npcsunk={} WHERE username='{}'".format(money, playerxp, npcsunk,
playername))
connect.commit()
quit()
else:
npc_hp=npc_hp
print("Kazanan {} {} oyuncusunun gemisi battı".format(npc_name, playername))
cursor.execute("UPDATE npc SET hp={} WHERE npc='{}'".format(npc_hp, npc_name))
connect.commit()
loop+=1
Dip Not:Loop değişkeni kaç farklı saldırı yapıldığını tutmak için kullandım.
a,b parametreleri ise fonksiyon içerisindeki x,xx beklemelerine süre göndermek için.
Mod kullanma sebebi ise iki kişinin karşılıklı saldırılarını farklı sürelerde yaptırmak için.
Dikkat ederseniz server_list teki oyuncuları rastgele almak sadece 1 oyuncu olarak almak zorunda kalıyorum.