Перейти к содержимому
Korean Random
goodman

Динамические макросы в Python

Рекомендуемые сообщения

xenus   

Парни,есть старенький скриптик с таким кодом:

import BigWorld

@xvm.export('shell_damage.shell_damage', deterministic=False)
def shell_damage():
    vehicle = BigWorld.player()
    shotDescr = vehicle.vehicleTypeDescriptor.shot
    if shotDescr['shell']['kind'] == 'HIGH_EXPLOSIVE':
        return "%i" % (shotDescr['shell']['damage'][0] // 2)
    else:
        return "%i" % (shotDescr['shell']['damage'][0]) 

Работал нормально,но в этом патче в логе ошибки посыпались:

2017-08-30 02:47:17: [ERROR] Traceback (most recent call last):

  File "./res_mods/mods/packages\xvm_main\python\python_macro.py", line 157, in process_python_macro

    return (func(), deterministic)

  File "./res_mods/mods/packages\xvm_main\python\python_macro.py", line 150, in <lambda>

    return (lambda: func(*args), deterministic)

  File "res_mods/configs/xvm/py_macro\shell_damage.py", line 7, in shell_damage

    if shotDescr['shell']['kind'] == 'HIGH_EXPLOSIVE':

  File "scripts/common/items/components/legacy_stuff.py", line 56, in __getitem__

AssertionError: Operation is not allowed

arg='shell_damage.shell_damage()'

Помогите поправить,моих знаний недостаточно(((

Попробуй вот так:

import BigWorld

@xvm.export('shell_damage.shell_damage', deterministic=False)
def shell_damage():
    vehicle = BigWorld.player()
    shotDescr = vehicle.vehicleTypeDescriptor.shot
    if shotDescr.shell.kind == SHELL_TYPES.HIGH_EXPLOSIVE:
        return "%i" % (shotDescr.shell.damage[0] // 2)
    else:
        return "%i" % (shotDescr.shell.damage[0])

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Попробуй вот так:

import BigWorld

@xvm.export('shell_damage.shell_damage', deterministic=False)
def shell_damage():
    vehicle = BigWorld.player()
    shotDescr = vehicle.vehicleTypeDescriptor.shot
    if shotDescr.shell.kind == SHELL_TYPES.HIGH_EXPLOSIVE:
        return "%i" % (shotDescr.shell.damage[0] // 2)
    else:
        return "%i" % (shotDescr.shell.damage[0])

Не помогло к сожалению,не работает и в логе вот что:

2017-08-30 23:20:15: [ERROR] Traceback (most recent call last):

File "./res_mods/mods/packages\xvm_main\python\python_macro.py", line 157, in process_python_macro

return (func(), deterministic)

File "./res_mods/mods/packages\xvm_main\python\python_macro.py", line 150, in

return (lambda: func(*args), deterministic)

File "res_mods/configs/xvm/py_macro\shell_damage.py", line 7, in shell_damage

if shotDescr.shell.kind == SHELL_TYPES.HIGH_EXPLOSIVE:

NameError: global name 'SHELL_TYPES' is not defined

arg='shell_damage.shell_damage()'

Это скриптик для того,что показывало шотные для твоего урона танки(для фугасов дамаг поделен на два,пробой редко проходит).Код в конфиге такой,мало ли:

"killEnemy": {
      "name": "killEnemy",
      "enabled": true,
      "x": 0,
      "y": "{{battletype?-73|{{squad?-73|-60}}}}",
      "alpha": "{{hp<{{py:shell_damage.shell_damage()}}?80|0}}",
      "color": "0xFFFF00",
      "align": "center",
	  "textFormat": {
        "font": "$FieldFont",
        "size": 13,
        "bold": false,
        "italic": false
      },
      "shadow": {
	  	// false - no shadow
        // false - без тени
        "enabled": true,
        "distance": 0,
        "angle": 90,
        "color": null,
        "alpha": 30,
        "blur": 6,
        "strength": 2
      },
      "format": "<img src='xvm://res/icons/killEnemy/{{vtype-key}}.png' width='23' height='23'>" // формат текста. См. описание макросов в macros.txt
	} 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
xenus   

Не помогло к сожалению,не работает и в логе вот что:

2017-08-30 23:20:15: [ERROR] Traceback (most recent call last):

File "./res_mods/mods/packages\xvm_main\python\python_macro.py", line 157, in process_python_macro

return (func(), deterministic)

File "./res_mods/mods/packages\xvm_main\python\python_macro.py", line 150, in

return (lambda: func(*args), deterministic)

File "res_mods/configs/xvm/py_macro\shell_damage.py", line 7, in shell_damage

if shotDescr.shell.kind == SHELL_TYPES.HIGH_EXPLOSIVE:

NameError: global name 'SHELL_TYPES' is not defined

arg='shell_damage.shell_damage()'

Это скриптик для того,что показывало шотные для твоего урона танки(для фугасов дамаг поделен на два,пробой редко проходит).Код в конфиге такой,мало ли:

"killEnemy": {
      "name": "killEnemy",
      "enabled": true,
      "x": 0,
      "y": "{{battletype?-73|{{squad?-73|-60}}}}",
      "alpha": "{{hp<{{py:shell_damage.shell_damage()}}?80|0}}",
      "color": "0xFFFF00",
      "align": "center",
	  "textFormat": {
        "font": "$FieldFont",
        "size": 13,
        "bold": false,
        "italic": false
      },
      "shadow": {
	  	// false - no shadow
        // false - без тени
        "enabled": true,
        "distance": 0,
        "angle": 90,
        "color": null,
        "alpha": 30,
        "blur": 6,
        "strength": 2
      },
      "format": "<img src='xvm://res/icons/killEnemy/{{vtype-key}}.png' width='23' height='23'>" // формат текста. См. описание макросов в macros.txt
	} 

Похоже нехватало импорта, вот так вроде как работает:

import BigWorld
from constants import SHELL_TYPES

@xvm.export('shell_damage.shell_damage', deterministic=False)
def shell_damage():
    vehicle = BigWorld.player()
    shotDescr = vehicle.vehicleTypeDescriptor.shot
    if shotDescr.shell.kind == SHELL_TYPES.HIGH_EXPLOSIVE:
        return "%i" % (shotDescr.shell.damage[0] // 2)
    else:
        return "%i" % (shotDescr.shell.damage[0])

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Похоже нехватало импорта, вот так вроде как работает:

import BigWorld
from constants import SHELL_TYPES

@xvm.export('shell_damage.shell_damage', deterministic=False)
def shell_damage():
    vehicle = BigWorld.player()
    shotDescr = vehicle.vehicleTypeDescriptor.shot
    if shotDescr.shell.kind == SHELL_TYPES.HIGH_EXPLOSIVE:
        return "%i" % (shotDescr.shell.damage[0] // 2)
    else:
        return "%i" % (shotDescr.shell.damage[0])

Спасибо тебе добрый человек,теперь все работает и лог чистый;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ADv   

 

I write a python macro to show the friendly arty's aiming position.

It will display as white points in the minimap and white circle in the battle view.

from xvm import aimingposition
@ Xvm.export ( 'xvm.aimpos', deterministic = False)
def refreshAimPos ():
	aimingposition.posManager.refreshList ()
	return ''
{
   "AimPos": {
      "Enabled": true,
      "UpdateEvent": "ON_EVERY_FRAME",
      "Alpha": 0,
      "Format": "{{py: xvm.aimpos ()}}"
	}
}

Если кто умеет, пофиксите вот этот скрипт, пожалуйста.

 

Сыпет в лог

2017-09-03 16:57:34.425: INFO: 2017-09-03 16:57:34: [ERROR] 79 aimpos|Operation is not allowed
2017-09-03 16:57:35.423: INFO: 2017-09-03 16:57:35: [ERROR] 79 aimpos|Operation is not allowed

Свежайшее, что есть у меня в аттаче

aimingposition21122016.zip

 

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
xenus   

Если кто умеет, пофиксите вот этот скрипт, пожалуйста.

 

Сыпет в лог

2017-09-03 16:57:34.425: INFO: 2017-09-03 16:57:34: [ERROR] 79 aimpos|Operation is not allowed
2017-09-03 16:57:35.423: INFO: 2017-09-03 16:57:35: [ERROR] 79 aimpos|Operation is not allowed

Свежайшее, что есть у меня в аттаче

attachicon.gifaimingposition21122016.zip

 

Спасибо.

Вот, поправил дескрипторы. Сам не проверял, возможно что то еще надо будет править.

aimingposition.zip

Изменено пользователем xenus

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ktulho   

@sirmax, а есть способ переопределить метод класса (@classmethod)? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
 sirmax   

@overrideClassMethod(cls, method)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ktulho   

@overrideClassMethod(cls, method)

Спасибо, что-то я не замечал его раньше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
 sirmax   

А он нигде и не использовался. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ktulho   

А он нигде и не использовался. :)

Несколько мест нашел). 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
 sirmax   

А, точно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×