Yardım Bir oyunda oyuncuya ait verilere nasıl erişilir?

lexury05

Öğrenci
9 Şubat 2023
8
0
1
25
Bir oyunda oyuncuya ait X, y cinsinden konumuna karakterin baktığı yön gibi verilere anlık olarak nasıl erişilir?
 

mychar276

Profesör
17 Mayıs 2016
2,932
5
3,051
358
Oyun geliştirme amacıyla mı soruyorsunuz? Öyle ise hangi motorda ve hangi yazılım dili ile? Sorunuzu detaylandırırsanız bildiğim kadarıyla paylaşmaktan mutluluk duyarım.
 

lexury05

Öğrenci
9 Şubat 2023
8
0
1
25
Oyun geliştirme amacıyla mı soruyorsunuz? Öyle ise hangi motorda ve hangi yazılım dili ile? Sorunuzu detaylandırırsanız bildiğim kadarıyla paylaşmaktan mutluluk duyarım.
Oynadığım bir oyun için sormuştum. Oyun bir web oyunu. Bu oyunda kendime ait karakter konumu, mouse konumu gibi bilgilere erişmek istiyorum.
 

Emnn

Jet Sesi, Özgürlüğün Sesidir!
Emektar
Müdavim
3 Mayıs 2021
2,218
8
1,883
358
Web kazıma yapmanız lazım. Python iş görür. Siteye girdikten sonra istediğiniz bilgilerin id veya etiket bilgilerini bulmalısınız. Sonrasında python kodu ile istediğiniz bilgileri çekersiniz.
 

mychar276

Profesör
17 Mayıs 2016
2,932
5
3,051
358
Öncelikle bu tarz şeyler için oyunlar (eğer mod desteği vs. veriyor ise oyun) kendi sağladığı API'lar ile mümkün oluyor. İlgili dokümantasyonlardan bakarak istediğin veriye API aracılığı ile ulaşıyorsun. Hatta bazı özellikleri vs. otonomize edebiliyorsun. Ama eğer oyun resmi olarak API desteği vermiyor ise sistem mühendisliği yaparak bu verilere ulaşabiliyorsun. Bunun için python, JavaScript gibi yazılım dillerini kullanarak madencilik yapman lazım.
Örneğin mouse konumunu almak için aşağıdaki gibi bir js kodu kullanabilirsin
JavaScript:
document.addEventListener('mousemove', function(event) {
    console.log("Mouse X: " + event.clientX + ", Mouse Y: " + event.clientY); });

Eğer oyun html üzerinden açık şekilde çalışıyor ise getElementById kullanarak html üzerinden verileri çekebilirsin. Hangi veriyi aradığını manuel olarak arayıp bulman gerekebilir. ID sine ihtiyacın olacak istediğin şeyin.

Örnek vereyim, belli bir interval ile devamlı olarak karakterin konumunu html üzerinden ulaşılabilir şekilde yapmışlarsa bu şekilde veriye ulaşmak denenebilir.:

JavaScript:
var HtmlElementiIDsi = document.getElementById('userID');



function characterLocation() {

    var rect = HtmlElementiIDsi.getBoundingClientRect();

    console.log("Character Location X: " + rect.left + ", Character Location Y: " + rect.top);

}

Python kullanarak da benzer bir şekilde verilere ulaşabilirsin. Örneğin, Selenium kütüphanesi ile bir web sayfasında mouse konumunu ve HTML elementlerinin konumunu almak için aşağıdaki kodu kullanabilirsin:

Mouse konumunu almak için:
Python:
from selenium import webdriver

import time



driver = webdriver.Chrome()

driver.get('https://www.example.com')



mouse_listener_js = """

document.addEventListener('mousemove', function(event) {

    document.body.setAttribute('data-mouse-x', event.clientX);

    document.body.setAttribute('data-mouse-y', event.clientY);

});

"""



driver.execute_script(mouse_listener_js)



try:

    while True:

        mouse_x = driver.execute_script("return document.body.getAttribute('data-mouse-x')")

        mouse_y = driver.execute_script("return document.body.getAttribute('data-mouse-y')")

     

        if mouse_x and mouse_y:

            print(f"Mouse X: {mouse_x}, Mouse Y: {mouse_y}")

     

        time.sleep(1)

except KeyboardInterrupt:

    driver.quit()

HTML elementinin konumunu almak için:
Python:
from selenium import webdriver



driver = webdriver.Chrome()

driver.get('https://www.example.com')



element = driver.find_element_by_id('userID')

rect = element.rect

print(f"Character Location X: {rect['x']}, Character Location Y: {rect['y']}")



driver.quit()

Not: Kodları çalıştırmadan direk internetten aldım, çalışmıyor olabilir doğruluğunu birisi kontrol ediversin :) .


ID şifre ile giriş yapmak isteniyorsa ilgili alanların doldurulması gerek, bunu da yine element ID si ile yapıyorsun. Robot kontrolü yoksa örneğin alttaki gibi forumu doldurabirsin. ID lere ulaşman lazım tabi bakarak.
Python:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Chrome()
driver.get('https://www.examplegame.com/login')

username_field = driver.find_element(By.ID, 'username')
password_field = driver.find_element(By.ID, 'password')

username_field.send_keys('your_username')
password_field.send_keys('your_password')
password_field.send_keys(Keys.RETURN)

time.sleep(5)

element = driver.find_element(By.ID, 'userID')
rect = element.rect
print(f"Character Location X: {rect['x']}, Character Location Y: {rect['y']}")

driver.quit()
 
Son düzenleme:
Üst