Jump to content
Korean Random

Постоянный, или случайный камуфляж в ангаре (камо-мод)


refaol

Recommended Posts

'Описание'

Привет.
Попросили сделать мод, который фиксил бы баг с камуфляжами, - и в самом деле иногда не хорошо, когда заходишь в игру - всегда по умолчанию зимний камуфляж.
Мой мод решает эту проблему, - можно сделать случайный выбор камуфляжа каждый раз при смене танка в ангаре, либо выбрать один тип камуфляжа навсегда, и в ангаре он всегда будет таким как зададите.

Автор:S0me0ne (он же tehs0me0ne)
---
Последнее обновление:
- добавлены GUI настройки в ангаре
- случайный камуфляж работает при смене танка в ангаре, а не один раз на всю сессию
- какие-то еще мелкие фиксы
- адаптация под 0.8.10
---
Огромное спасибо STL1te(user_1000531) за помощь в реализации Flash GUI интерфейса для ангара.
post-11459-0-79517000-1387434644_thumb.jpg
---
Скачать (обновлено 17.12):Google Drive: https://drive.google.com/file/d/0B7R6yzmXknFaeVVhUjRjaEE0SjQ/edit?usp=sharing

Новость и картинки взяты сhttp://world-of-ru.livejournal.com/2872154.html
p.s.
поиском воспользовался, темы не нашел, если есть прошу..., ну вы поняли

Edited by refaol
  • Upvote 5
Link to comment
Short link
Share on other sites

  • 1 month later...
  • 4 weeks later...
  • 4 weeks later...

Вот все что удалось вытащить из основного скрипта этого мода.

Проблема совместимости не решается путем простого перекомпилирования, поскольку часть библиотек на которые ссылается код, найти не удалось.

 

 

'Основная функция смены камуфляжа'

defcamo = 'winter'
userandom = 'yes'
recreateVehicle = ClientHangarSpace.ClientHangarSpace.recreateVehicle
def my_recreateVehicle(self, vDesc, vState, onVehicleLoadedCallback = None):
try:
cDescr = vDesc.type.compactDescr
if (vDesc.camouflages is not None):
try:
config = ResMgr.openSection('camo.cfg')
defcamo = config.readString('camo')
userandom = string.lower(config.readString('userandom'))
if (userandom != 'yes'):
if (defcamo == 'winter'):
zid = 0
elif (defcamo == 'summer'):
zid = 1
elif (defcamo == 'desert'):
zid = 2
g_tankActiveCamouflage[cDescr] = zid
else:
g_tankActiveCamouflage[cDescr] = choice([0, 1, 2])
except:
pass
except:
pass
recreateVehicle(self, vDesc, vState, onVehicleLoadedCallback)

ClientHangarSpace.ClientHangarSpace.recreateVehicle = my_recreateVehicle

 

 

'Весь код, который удалось вытащить'

global userandom, defcamo
import BigWorld
import ResMgr
import string
import Keys
import game
from random import choice
from items.vehicles import CAMOUFLAGE_KINDS
from gui import ClientHangarSpace
from gui import g_tankActiveCamouflage
from gui.Scaleform.Flash import Flash
from gui.Scaleform.framework import g_entitiesFactories
from gui.Scaleform.framework import ViewSettings
from gui.Scaleform.framework import VIEW_TYPE
from gui.Scaleform.framework import VIEW_SCOPE
from gui.Scaleform.framework.entities.View import View
from gui.WindowsManager import g_windowsManager
from gui.Scaleform import SCALEFORM_SWF_PATH
from gui.shared import events
from gui.Scaleform.daapi.view.meta.WindowViewMeta import WindowViewMeta
defcamo = 'winter'
userandom = 'yes'
recreateVehicle = ClientHangarSpace.ClientHangarSpace.recreateVehicle
def my_recreateVehicle(self, vDesc, vState, onVehicleLoadedCallback = None):
try:
cDescr = vDesc.type.compactDescr
if (vDesc.camouflages is not None):
try:
config = ResMgr.openSection('camo.cfg')
defcamo = config.readString('camo')
userandom = string.lower(config.readString('userandom'))
if (userandom != 'yes'):
if (defcamo == 'winter'):
zid = 0
elif (defcamo == 'summer'):
zid = 1
elif (defcamo == 'desert'):
zid = 2
g_tankActiveCamouflage[cDescr] = zid
else:
g_tankActiveCamouflage[cDescr] = choice([0, 1, 2])
except:
pass
except:
pass
recreateVehicle(self, vDesc, vState, onVehicleLoadedCallback)

ClientHangarSpace.ClientHangarSpace.recreateVehicle = my_recreateVehicle
class MyWindow(View):
def __init__(self):
View.__init__(self)

def _populate(self):
View._populate(self)
self.callToFlash({'random': userandom.lower() == 'yes', 'camo': defcamo})

def callFromFlash(self, data):
config = ResMgr.openSection('camo.cfg')
zcamo = config.child(0)
zrand = config.child(1)
if data.random:
userandom = 'yes'
else:
userandom = 'no'
zrand.asString = userandom
defcamo = data.camo
zcamo.asString = defcamo
config.save()
self.destroy()

def callToFlash(self, data):
if self._isDAAPIInited():
self.flashObject.as_callToFlash(data)

def onWindowClose(self):
self.destroy()

_windowAlias = 'CamoSelectorWindow'
_settings = ViewSettings(_windowAlias, MyWindow, 'MyWindow.swf', VIEW_TYPE.WINDOW, None, VIEW_SCOPE.DEFAULT)
g_entitiesFactories.addSettings(_settings)
class CamobSelector(View, WindowViewMeta):
def __init__(self):
View.__init__(self)

def as_isModalS(self):
if self._isDAAPIInited():
return False
else:
return

_loaderAlias = 'CamoSelector'
_settings = ViewSettings(_loaderAlias, CamobSelector, 'CamoSelectorButton.swf', VIEW_TYPE.WINDOW, None, VIEW_SCOPE.GLOBAL)
g_entitiesFactories.addSettings(_settings)
old_init = Flash.__init__
def new_init(self, swf, className = 'Flash', args = None, path = SCALEFORM_SWF_PATH):
old_init(self, swf, className, args, path)
if (swf == 'Application.swf'):
self.addListener(events.GUICommonEvent.APP_STARTED, (lambda e: AppStarted(self, e)))

Flash.__init__ = new_init
def AppStarted(self, event):
self.loadView(_loaderAlias)
self.addExternalCallback('CamoSelector.showWindow', (lambda : g_windowsManager.window.loadView(_windowAlias)))

handleKeyBkup = game.handleKeyEvent
def loadWindow():
try:
from gui.WindowsManager import g_windowsManager
g_windowsManager.window.loadView(_alias)
except:
pass

def hkKeyEvent(event):
try:
isDown, key, mods, isRepeat = game.convertKeyEvent(event)
if ((key == Keys.KEY_SPACE) and isDown):
loadWindow()
except:
pass
finally:
return handleKeyBkup(event)

game.handleKeyEvent = hkKeyEvent

 

 

 

М.б. кому-то удастся починить мод.

camo_source.py.txt

Edited by NickName994
  • Upvote 1
Link to comment
Short link
Share on other sites

  • 2 months later...

Доработал мод под версию 0.9.0. SWF остались те же, питон переписан по образцу и подобию оригинала. Оптимизировано расположение файла конфигурации (теперь в папке с модами, при отсутствии файла конфиг создается автоматически при сохранении настроек в GUI), оптимизированы операции ввода-вывода в файл конфига. Остальное осталось как раньше. В общем, забирайте пока горячее пока совместимо с текущей версией клиента.

 

HangarCamo.zip

  • Upvote 1
Link to comment
Short link
Share on other sites

  • 2 weeks later...
  • 3 months later...

Координат кнопки я чет в питоне не вижу... значит во флэше замуровано...

Вот исходник скрипта под 0.9.0 (поменять расширение на *.py)

attachicon.gifHangarCamo.txt

т.е. переименовать файл в HangarCamo.pyc и заменить его в старом архиве? и все остальное скинуть как раньше?

Link to comment
Short link
Share on other sites

т.е. переименовать файл в HangarCamo.pyc и заменить его в старом архиве? и все остальное скинуть как раньше?

Это исходник скрипта (*.py - source, *.pyc - compiled), для тех кто сможет поправить нужным образом флэш. Координаты кнопки зашиты во флэш, в котором я не силен( Скорее всего просто кнопка оказывается под менюшкой...
Link to comment
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.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...