Jump to content
Korean Random
Sign in to follow this  
adjgam

ошибка File "", line , in

Recommended Posts

почему пишет?

***   File "", line 99, in _onHealthChanged
***   File "", line 99, in _onHealthChanged
***   File "", line 99, in _onHealthChanged
***   File "", line 99, in _onHealthChanged
***   File "", line 99, in _onHealthChanged
***   File "", line 99, in _onHealthChanged
***   File "", line 99, in _onHealthChanged
***   File "", line 99, in _onHealthChanged
***   File "", line 99, in _onHealthChanged
***   File "", line 99, in _onHealthChanged
***   File "", line 99, in _onHealthChanged
***   File "", line 99, in _onHealthChanged
***   File "", line 99, in _onHealthChanged
***   File "", line 99, in _onHealthChanged
***   File "", line 99, in _onHealthChanged
***   File "", line 99, in _onHealthChanged
*** RuntimeError: maximum recursion depth exceeded while calling a Python object

***   File "", line 120, in _onLeaveWorld
***   File "", line 120, in _onLeaveWorld
***   File "", line 120, in _onLeaveWorld
***   File "", line 120, in _onLeaveWorld
***   File "", line 120, in _onLeaveWorld
***   File "", line 120, in _onLeaveWorld
***   File "", line 120, in _onLeaveWorld
***   File "", line 120, in _onLeaveWorld
***   File "", line 120, in _onLeaveWorld
***   File "", line 120, in _onLeaveWorld
***   File "", line 120, in _onLeaveWorld
***   File "", line 120, in _onLeaveWorld
***   File "", line 120, in _onLeaveWorld
***   File "", line 120, in _onLeaveWorld
***   File "", line 120, in _onLeaveWorld
***   File "", line 120, in _onLeaveWorld
***   File "", line 120, in _onLeaveWorld
***   File "", line 120, in _onLeaveWorld
*** RuntimeError: maximum recursion depth exceeded while calling a Python object

import BigWorld
import os
import json
import httplib, urllib2
from Avatar import PlayerAvatar
from items import vehicles
from Vehicle import Vehicle
import Math

url = ''
LastHP = 0

# read GameSense url
def Gamesense_ReadUrl():
    with open(os.getenv('PROGRAMDATA')+'/SteelSeries/SteelSeries Engine 3/coreProps.json', 'r') as f:
        data = json.load(f)
    global url
    url = 'http://' + data['address']

# register game
def Gamesense_RegisterGame():
    data = {"game":"WOT","game_display_name":"World Of Tanks","icon_color_id":11}
    req = urllib2.Request(url+'/game_metadata')
    req.add_header('Content-Type', 'application/json')
    response = urllib2.urlopen(req, json.dumps(data))

# delete game
def Gamesense_DeleteGame():
    data = {"game":"WOT"}
    req = urllib2.Request(url+'/remove_game')
    req.add_header('Content-Type', 'application/json')
    response = urllib2.urlopen(req, json.dumps(data))

# register HP event
def Gamesense_RegisterHpEvent():
    data = { "game":"WOT",	"event":"HP", "min_value":1, "max_value":100, "icon_id":1, "handlers": [{"zone":"headset", "color":	{"gradient":{ "zero": {"red":255,"green":0,"blue":0}, "hundred": {"red":0,"green":255,"blue":0}	} }, "mode":"percent", "device-type":"rgb-1-zone" }]}
    req = urllib2.Request(url+'/bind_game_event')
    req.add_header('Content-Type', 'application/json')
    response = urllib2.urlopen(req, json.dumps(data))
    
# delete game event
def Gamesense_DeleteEvent(EventName):
    data = {"game":"WOT","event":"+EventName+"}
    req = urllib2.Request(url+'/remove_game_event')
    req.add_header('Content-Type', 'application/json')
    response = urllib2.urlopen(req, json.dumps(data))

# post HP change event 0..100
def HpChange(n):
    data = {"game":"WOT","event":"HP","data":{"value": n}}
    req = urllib2.Request(url+'/game_event')
    req.add_header('Content-Type', 'application/json')
    response = urllib2.urlopen(req, json.dumps(data))

# change color
def Gamesense_SetRgb(r, g, b):
    data = {"game":"WOT","event":"SETRGB","data":{"r": r, "g": g, "b": b}}
    req = urllib2.Request(url+'/game_event')
    req.add_header('Content-Type', 'application/json')
    response = urllib2.urlopen(req, json.dumps(data))

# post Keepalive Event
def Gamesense_PostHearBeat():
    data = {"game":"WOT"}
    req = urllib2.Request(url+'/game_heartbeat')
    req.add_header('Content-Type', 'application/json')
    response = urllib2.urlopen(req, json.dumps(data))


# gamesense hearbeat     15s = set default
def _loop():
    Gamesense_PostHearBeat()
    BigWorld.callback(10, _loop)
    
# on battle loaded set green    
def new_onInitStepCompleted(self):
    # update url
    Gamesense_ReadUrl()
    Gamesense_SetRgb(0,255,0)

old_onInitStepCompleted = PlayerAvatar._PlayerAvatar__onInitStepCompleted
PlayerAvatar._PlayerAvatar__onInitStepCompleted = new_onInitStepCompleted    


# on hp change
def _onHealthChanged(self, newHealth, attackerID, attackReasonID):
    orig_onHealthChanged(self, newHealth, attackerID, attackReasonID)
    playerVehicle = BigWorld.entity(BigWorld.player().playerVehicleID)
    global LastHP   
    if playerVehicle is not None and playerVehicle.isStarted and playerVehicle.isPlayerVehicle:
        HP = playerVehicle.health
        MaxHP = playerVehicle.typeDescriptor.maxHealth
        if LastHP == HP:
            return
        LastHP = HP
        if HP>0:   #  playerVehicle.isAlive()
            HPPercent = math.trunc(HP*100/MaxHP)
            HpChange(HPPercent)             
        else:
            Gamesense_SetRgb(0 ,0, 0)
            return    
    return

orig_onHealthChanged = Vehicle.onHealthChanged
Vehicle.onHealthChanged = _onHealthChanged

def _onLeaveWorld(self):
    orig_onLeaveWorld(self)
    Gamesense_SetRgb(0,0,0)
    
orig_onLeaveWorld = PlayerAvatar.onLeaveWorld
PlayerAvatar.onLeaveWorld = _onLeaveWorld    

Gamesense_ReadUrl()
Gamesense_SetRgb(0, 0, 0)  # set color (0,0,0)  on game init     
_loop()

вывод.txt

Share this post


Link to post

Short link
Share on other sites

тоесть в new_onInitStepCompleted  запустить поток, и в потоке по таймеру выполнять то, что я делаю в _onHealthChanged?

Share this post


Link to post

Short link
Share on other sites

так?

import BigWorld
import os
import json
import httplib, urllib2
from Avatar import PlayerAvatar
from items import vehicles
from Vehicle import Vehicle
import Math
import math
import threading

print "gamesense loaded"

url = ''
LastHP = 0

# read GameSense url
def Gamesense_ReadUrl():
    with open(os.getenv('PROGRAMDATA')+'/SteelSeries/SteelSeries Engine 3/coreProps.json', 'r') as f:
        data = json.load(f)
    global url
    url = 'http://' + data['address']

# register game
def Gamesense_RegisterGame():
    data = {"game":"WOT","game_display_name":"World Of Tanks","icon_color_id":11}
    req = urllib2.Request(url+'/game_metadata')
    req.add_header('Content-Type', 'application/json')
    response = urllib2.urlopen(req, json.dumps(data))

# delete game
def Gamesense_DeleteGame():
    data = {"game":"WOT"}
    req = urllib2.Request(url+'/remove_game')
    req.add_header('Content-Type', 'application/json')
    response = urllib2.urlopen(req, json.dumps(data))

# register HP event
def Gamesense_RegisterHpEvent():
    data = { "game":"WOT",	"event":"HP", "min_value":1, "max_value":100, "icon_id":1, "handlers": [{"zone":"headset", "color":	{"gradient":{ "zero": {"red":255,"green":0,"blue":0}, "hundred": {"red":0,"green":255,"blue":0}	} }, "mode":"percent", "device-type":"rgb-1-zone" }]}
    req = urllib2.Request(url+'/bind_game_event')
    req.add_header('Content-Type', 'application/json')
    response = urllib2.urlopen(req, json.dumps(data))
    
# delete game event
def Gamesense_DeleteEvent(EventName):
    data = {"game":"WOT","event":"+EventName+"}
    req = urllib2.Request(url+'/remove_game_event')
    req.add_header('Content-Type', 'application/json')
    response = urllib2.urlopen(req, json.dumps(data))

# post HP change event 0..100
def HpChange(n):
    data = {"game":"WOT","event":"HP","data":{"value": n}}
    req = urllib2.Request(url+'/game_event')
    req.add_header('Content-Type', 'application/json')
    response = urllib2.urlopen(req, json.dumps(data))

# change color
def Gamesense_SetRgb(r, g, b):
    data = {"game":"WOT","event":"SETRGB","data":{"r": r, "g": g, "b": b}}
    req = urllib2.Request(url+'/game_event')
    req.add_header('Content-Type', 'application/json')
    response = urllib2.urlopen(req, json.dumps(data))

# post Keepalive Event
def Gamesense_PostHearBeat():
    data = {"game":"WOT"}
    req = urllib2.Request(url+'/game_heartbeat')
    req.add_header('Content-Type', 'application/json')
    response = urllib2.urlopen(req, json.dumps(data))

def threadDecorate(object):
    def decorate(*args, **kwargs):
        th = threading.Thread(target=object, args=args, kwargs=kwargs)
        th.setName = object.func_name
        th.setDaemon = True
        th.start()
    return decorate

# gamesense hearbeat     15s = set default
@threadDecorate
def _loop():
    Gamesense_PostHearBeat()
    BigWorld.callback(10, _loop)
    
# on battle loaded set green    
def _onInitStepCompleted(self):
    orig_onInitStepCompleted(self)
    Gamesense_SetRgb(0,255,0)    

orig_onInitStepCompleted = PlayerAvatar._PlayerAvatar__onInitStepCompleted
PlayerAvatar._PlayerAvatar__onInitStepCompleted = _onInitStepCompleted    

# on hp change
@threadDecorate
def OnHp():
    playerVehicle = BigWorld.entity(BigWorld.player().playerVehicleID)      
    global LastHP   
    if playerVehicle is not None and playerVehicle.isStarted and playerVehicle.isPlayerVehicle:
        HP = playerVehicle.health
        MaxHP = playerVehicle.typeDescriptor.maxHealth
        if LastHP == HP:
            return
        LastHP = HP
        if HP>0:   #  playerVehicle.isAlive()
            HPPercent = math.trunc(HP*100/MaxHP)
            HpChange(HPPercent)             
        else:
            Gamesense_SetRgb(0 ,0, 0)
            return    
    return


def _onHealthChanged(self, newHealth, attackerID, attackReasonID):
    orig_onHealthChanged(self, newHealth, attackerID, attackReasonID)
    OnHp()
    
orig_onHealthChanged = Vehicle.onHealthChanged
Vehicle.onHealthChanged = _onHealthChanged

def _onLeaveWorld(self):
    orig_onLeaveWorld(self)
    Gamesense_SetRgb(0,0,0)
    
orig_onLeaveWorld = PlayerAvatar.onLeaveWorld
PlayerAvatar.onLeaveWorld = _onLeaveWorld    

Gamesense_ReadUrl()
Gamesense_SetRgb(0, 0, 0)  # set color (0,0,0)  on game init     
_loop()

Share this post


Link to post

Short link
Share on other sites

@adjgam, всё сетевое нужно вынести в поток и прописать timeout на запрос.

И я не уверен, что urllib2 будет потокобезопасен.

Edited by ShadowHunterRUS

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...