Jump to content
Korean Random
SysUtils2

[XVM-Mod] TankCarousel + фильтры по уровню и "типу" (v.1.0.3) (30.10.2013)

Recommended Posts

установил ваши шрифты, многие заменил, не помогло. скачивал с еврофорума

попробуй увеличить размер ячейки и размер сообщения в конфиге ( попробуй везде поставить парамерт 1.0). У меня что-то похожее раз было  (маленькие буквы сливаются в один квадрат), может поможет.

Share this post


Link to post

Short link
Share on other sites
попробуй увеличить размер ячейки и размер сообщения в конфиге ( попробуй везде поставить парамерт 1.0). У меня что-то похожее раз было (маленькие буквы сливаются в один квадрат), может поможет.

Не в шрифтах или размерах проблема. Мод изначально был баганый, позже исправили.

Edited by Kotyarko_O
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

установил ваши шрифты, многие заменил, не помогло. скачивал с еврофорума

Если не можешь найти, то возьми (скачан с темы [0.8.11] Карусель танков в 2,3,4 и т.д. ряда v.1.2 от 13.02.2014) . Лично мне фильтры там не нравяться, жду доработки [XVM-Mod] TankCarousel + фильтры по уровню и "типу" до версии 0.8.11

Есть старые, нормальные для 0.8.10 и с многоярусной каруселью. Если кому надо , чтоб перекрутить под 0.8.11 могу выложить. Отличается от "многоярусной карусели" только добавлением Одного файла TankCarouselAF.swf . Может кто умеет редактировать ***.swf ?????????????

КАРУСЕЛЬ.rar

TankCarouselAF.rar

Edited by IURIK666

Share this post


Link to post

Short link
Share on other sites

Не в шрифтах или размерах проблема. Мод изначально был баганый, позже исправили.

ну да, потом подправили по быстрому

Share this post


Link to post

Short link
Share on other sites

Блин,неужели так сложно сделать норм карусель...ДАЙТЕЕЕЕ
Последний ожидаемый мод.и все никак

Edited by santon_mks
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

 

 

Пробуйте. Перекомпилил. Из этой темы.   ....   Не работает :(

 

Можно поподробней...

Что перекомпилил и чем???

 

Я тоже пробовал перекомпилить два файла (Python27 а точнее 2.7.6)

брал файлы те что в шапке

\0.8.11\scripts\client\gui\mods\xvmtankcarousel\__init__.pyc  

и

\0.8.11\scripts\client\gui\mods\xvmtankcarousel\XvmTankCarousel.pyc

устанавливал на чистый клиент 8.11 с xvm 5.1.0, прикрутил два выше перечисленных файла + \xvm\mods\xvm-tankcarousel.swf (этот не трогал)

В ангаре без изменений. :(

Share this post


Link to post

Short link
Share on other sites

OnMax, файл XvmTankCarousel.pyc не декомпилируется. Что вы там смогли декомпилировать и как?

Share this post


Link to post

Short link
Share on other sites

OnMax, файл XvmTankCarousel.pyc не декомпилируется. Что вы там смогли декомпилировать и как?

'Декомпил'

# Source Generated with Decompyle++
# File: XvmTankCarousel.pyc (Python 2.6)

''' xvm-tankcarousel (c) STL1te 2013 '''
import BigWorld
import Settings
import pickle
import base64
import json
from gui.mods.xpm import *
DEFAULT_FILTER = {
'levels': [
1,
2,
3,
4,
5,
6,
7,
8,
9,
10],
'types': [] }

class XvmTankCarousel(object):
filters = { }

def __init__(self):
pass


def init(self):
userPrefs = Settings.g_instance.userPrefs
if not userPrefs.has_key('XVM'):
userPrefs.write('XVM', '')

xvm_settings = userPrefs['XVM']
if not xvm_settings.has_key('TankCarousel'):
xvm_settings.write('TankCarousel', '')
xvm_settings['TankCarousel'].write('filters', base64.b64encode(pickle.dumps(DEFAULT_FILTER)))

self.filters = pickle.loads(base64.b64decode(userPrefs['XVM']['TankCarousel'].readString('filters')))


def getFilters(self, proxy, id):
self.init()
proxy.movie.invoke(('xvm.tankcarousel.getFiltersRespond', [
json.dumps(self.filters)]))


def setFilters(self, proxy, id, _filters):
self.filters = json.loads(_filters)
userPrefs = Settings.g_instance.userPrefs
userPrefs['XVM']['TankCarousel'].writeString('filters', str(base64.b64encode(pickle.dumps(self.filters))))
Settings.g_instance.save()


def handle_as_vehiclesResponseS(self, basefunc, baseclass, param):
new_slots = []
for vehicle in param['slots']:
if vehicle['level'] in self.filters['levels'] and typesInArr(getVehTypes(vehicle), self.filters['types']):
new_slots.append(vehicle)
continue

param['slots'] = new_slots
basefunc(baseclass, param)


g_xvmTankCarousel = XvmTankCarousel()

def getVehTypes(vehicle):
res = []
if vehicle['elite']:
res.append('!elite')
else:
res.append('elite')
if vehicle['doubleXPReceived'] > 0:
res.append('!played')
else:
res.append('played')
if vehicle['premium']:
res.append('premium')
else:
res.append('normal')
return res


def typesInArr(types, array):
for value in array:
if value not in types:
return False

return True

 

Вот тут есть вообще исходники

И я так думаю со скриптом все нормально. Проблема в xvm-tankcarousel.swf

Edited by Dimitro

Share this post


Link to post

Short link
Share on other sites

 

 

XvmTankCarousel.pyc не декомпилируется

декомпилируется.

питон и ексвм лог ни о чем не говорят

 

 

 

И я так думаю со скриптом все нормально. Проблема в xvm-tankcarousel.swf

скорей всего 


 

 

Проблема в xvm-tankcarousel.swf

или может в сам xvm 5.1.0 чего не добавили 

Share this post


Link to post

Short link
Share on other sites

может у кого получиться перекомпилировать. (по-моему стоит защита). Стоял (рабочий) в 0.8.10 совместно с мультикаруселью.


в чем проблема???

что не так с каруселью...

 

attachicon.gifКарусель.rar

Поставь карусель танков в ОДИН РЯД. Попробуй вкл-выкл фильтры, Выбери 5+6+7 левел, А ПОТОМ РАССКАЖЕШЬ НАМ КАК У ТЕБЯ ЭТО ПОЛУЧИЛОСЬ !!!!

фильтры карусели.rar

Share this post


Link to post

Short link
Share on other sites

может у кого получиться перекомпилировать. (по-моему стоит защита). Стоял (рабочий) в 0.8.10 совместно с мультикаруселью.

Поставь карусель танков в ОДИН РЯД. Попробуй вкл-выкл фильтры, Выбери 5+6+7 левел, А ПОТОМ РАССКАЖЕШЬ НАМ КАК У ТЕБЯ ЭТО ПОЛУЧИЛОСЬ !!!!

Да этим товарищам уже последние 3 страницы вбивают что это совсем другая карусель, а всё как горохом об стену. Им говоришь что нужны фильтры из этой карусели,  аони и дальше пихают из той темы. Где же автор ? Одного мода не хватает для полного счастья, да и тему надо почистить от этого флуда с левой каруселью :)

Share this post


Link to post

Short link
Share on other sites

Содержание xvm-tankcarousel.swf

 

//ActionScript 3.0
// package components
// class ImageCheckBoxItemRenderer
package components
{
import com.xvm.*;
import flash.geom.*;
import net.wg.gui.events.*;

public class ImageCheckBoxItemRenderer extends ListItemRedererImageText
{
public function ImageCheckBoxItemRenderer()
{
super();
this.icon.autoSize = false;
return;
}

protected override function configUI():void
{
super.configUI();
this.checkBox = this.addChildAt(new CheckBox(), 5) as CheckBox;
this.checkBox.label = "";
this.checkBox.x = 45;
this.checkBox.setActualSize(40, 20);
this.width = 148;
this.parent.scrollRect = new flash.geom.Rectangle(0, 0, 93, 242);
return;
}

protected override function draw():void
{
super.draw();
var loc1:*;
this.selected = loc1 = this.data.selected;
this.checkBox.selected = loc1;
return;
}

protected override function completeLoadA(arg1:net.wg.gui.events.UILoaderEvent):void
{
super.completeLoadA(arg1);
var loc1:*=this.icon.getChildAt(1);
var loc2:*=loc1.content.width >> 1;
this.icon.x = int(this.ico_border.x + (this.ico_border.width >> 1) - loc2);
return;
}

public var checkBox:CheckBox;
}
}


// class MultiSelectionDropDown
package components
{
import com.xvm.*;
import scaleform.clik.events.*;

public class MultiSelectionDropDown extends DropDownImageText
{
public function MultiSelectionDropDown()
{
this.selectedItems = new Array();
super();
this.icon.autoSize = false;
return;
}

protected override function configUI():void
{
super.configUI();
this.updateSelected();
return;
}

private function updateSelected():void
{
var loc1:*=undefined;
this.selectedItems.splice();
var loc2:*=0;
var loc3:*=this._dataProvider;
for each (loc1 in loc3)
{
if (loc1.selected != true)
{
continue;
}
this.selectedItems.push(loc1.data);
}
return;
}

private function _isInArray(arg1:*, arg2:Array):Boolean
{
return arg2.indexOf(arg1) >= 0;
}

public function multiSelect(arg1:Boolean):void
{
var loc1:*=undefined;
var loc2:*=0;
var loc3:*=this.dataProvider;
for each (loc1 in loc3)
{
loc1.selected = arg1;
}
this.updateSelected();
this.dataProvider.invalidate();
return;
}

protected override function handleMenuItemClick(arg1:scaleform.clik.events.ListEvent):void
{
this.dataProvider[arg1.index].selected = !this.dataProvider[arg1.index].selected;
if (!this._isInArray(arg1.itemData.data, this.selectedItems))
{
this.selectedItems.push(arg1.itemData.data);
}
else
{
this.selectedItems.splice(this.selectedItems.indexOf(arg1.itemData.data), 1);
}
var loc1:*=new scaleform.clik.events.ListEvent(scaleform.clik.events.ListEvent.INDEX_CHANGE);
loc1.index = arg1.index;
dispatchEvent(loc1);
return;
}

public var selectedItems:Array;
}
}


// class XVMTankCarousel
package
{
import com.xvm.*;
import components.*;
import flash.display.*;
import flash.events.*;
import flash.external.*;
import net.wg.gui.components.common.*;
import net.wg.gui.lobby.hangar.*;
import net.wg.infrastructure.events.*;
import net.wg.infrastructure.interfaces.*;
import net.wg.infrastructure.managers.impl.*;
import scaleform.clik.data.*;
import scaleform.clik.events.*;

public class XVMTankCarousel extends flash.display.Sprite
{
public function XVMTankCarousel()
{
var loc1:*;
super();
try
{
if (stage)
{
this.init();
}
else
{
addEventListener(flash.events.Event.ADDED_TO_STAGE, this.init);
}
}
catch (ex:Error)
{
com.xvm.Logger.add(ex.getStackTrace());
}
return;
}

private function init(arg1:flash.events.Event=null):void
{
var e:flash.events.Event=null;
var mgr:net.wg.infrastructure.managers.impl.ContainerManager;
var c:net.wg.infrastructure.interfaces.IManagedContainer;
var vc:net.wg.gui.components.common.MainViewContainer;
var i:int;
var v:net.wg.infrastructure.interfaces.IView;

var loc1:*;
mgr = null;
c = null;
vc = null;
i = 0;
v = null;
e = arg1;
removeEventListener(flash.events.Event.ADDED_TO_STAGE, this.init);
try
{
mgr = App.containerMgr as net.wg.infrastructure.managers.impl.ContainerManager;
loc2 = 0;
var loc3:*=mgr.containersMap;
for each (c in loc3)
{
vc = c as net.wg.gui.components.common.MainViewContainer;
if (vc == null)
{
continue;
}
i = 0;
while (i < vc.numChildren)
{
v = vc.getChildAt(i) as net.wg.infrastructure.interfaces.IView;
if (v != null)
{
this.processView(v, true);
}
++i;
}
}
App.containerMgr.loader.addEventListener(net.wg.infrastructure.events.LoaderEvent.VIEW_LOADED, this.onViewLoaded);
}
catch (e:*)
{
com.xvm.Logger.add(e.getStackTrace());
}
return;
}

private function onViewLoaded(arg1:net.wg.infrastructure.events.LoaderEvent):void
{
this.processView(arg1.view);
return;
}

private function processView(arg1:net.wg.infrastructure.interfaces.IView, arg2:Boolean=false):void
{
var view:net.wg.infrastructure.interfaces.IView;
var populated:Boolean=false;

var loc1:*;
view = arg1;
populated = arg2;
try
{
loc2 = view.as_alias;
}
catch (ex:Error)
{
com.xvm.Logger.add(ex.getStackTrace());
}
return;
}

private function processHangar(arg1:net.wg.gui.lobby.hangar.Hangar):void
{
this.page = arg1;
flash.external.ExternalInterface.addCallback("xvm.tankcarousel.getFiltersRespond", this.filtersResponse);
this.getFilters();
return;
}

public function filtersResponse(arg1:*):void
{
this.customFilters = App.utils.JSON.decode(arg1);
this.createFiltersDropdowns();
return;
}

private function setFilters():void
{
var loc1:*=new Array();
loc1.push(App.utils.JSON.encode({"levels":this.levelFilter.selectedItems, "types":this.typeFilter.selectedItems}));
loc1.unshift("xvm.tankcarousel.setFilters", "tankcarousel");
flash.external.ExternalInterface.call.apply(null, loc1);
this.page.carousel.onFilterChanged();
return;
}

private function getFilters():void
{
var loc1:*=new Array();
loc1.unshift("xvm.tankcarousel.getFilters", "tankcarousel");
flash.external.ExternalInterface.call.apply(null, loc1);
return;
}

private function createFiltersDropdowns():void
{
this.createLevelDropdown();
this.createTypeDropdown();
return;
}

private function handleFilterChange(arg1:scaleform.clik.events.ListEvent):void
{
if (arg1.currentTarget == this.levelFilter && arg1.index == 0)
{
this.levelFilter.multiSelect(this.levelFilter.dataProvider[0].selected);
}
this.setFilters();
return;
}

private function createLevelDropdown():void
{
this.levelFilter = this.page.carousel.vehicleFilters.addChild(this.createDropdown()) as components.MultiSelectionDropDown;
this.page.carousel.vehicleFilters.width = this.page.carousel.vehicleFilters.width + this.levelFilter.width;
this.levelFilter.y = this.page.carousel.vehicleFilters.nationFilter.y;
this.levelFilter.x = this.page.carousel.vehicleFilters.nationFilter.x + this.page.carousel.vehicleFilters.nationFilter.width + this.DROPDOWN_OFFSET;
this.levelFilter.menuRowCount = 11;
this.levelFilter.icon.source = "../maps/icons/buttons/tab_sort_button/level.png";
this.levelFilter.addEventListener(scaleform.clik.events.ListEvent.INDEX_CHANGE, this.handleFilterChange);
var loc1:*=new Array();
loc1.push({"label":"", "icon":"../maps/icons/buttons/tab_sort_button/level.png", "data":0, "selected":this._isInArray(NaN, this.customFilters.levels)});
var loc2:*=1;
while (loc2 <= 10)
{
loc1.push({"label":"", "icon":"../maps/icons/levels/tank_level_" + loc2 + ".png", "data":loc2, "selected":this._isInArray(loc2, this.customFilters.levels)});
++loc2;
}
this.levelFilter.dataProvider = new scaleform.clik.data.DataProvider(loc1);
return;
}

private function createTypeDropdown():void
{
this.typeFilter = this.page.carousel.vehicleFilters.addChild(this.createDropdown()) as components.MultiSelectionDropDown;
this.typeFilter.y = this.page.carousel.vehicleFilters.tankFilter.y;
this.typeFilter.x = this.page.carousel.vehicleFilters.tankFilter.x + this.page.carousel.vehicleFilters.tankFilter.width + this.DROPDOWN_OFFSET;
this.typeFilter.menuRowCount = 5;
this.typeFilter.icon.source = "../maps/icons/buttons/Tank-ico.png";
this.typeFilter.addEventListener(scaleform.clik.events.ListEvent.INDEX_CHANGE, this.handleFilterChange);
var loc1:*=new Array();
loc1.push({"label":"", "icon":"../maps/icons/library/PersonalAchievementsIcon-1.png", "data":"elite", "selected":this._isInArray("elite", this.customFilters.types)});
loc1.push({"label":"", "icon":"../maps/icons/library/GoldIcon-1.png", "data":"premium", "selected":this._isInArray("premium", this.customFilters.types)});
loc1.push({"label":"", "icon":"../maps/icons/library/CreditsIcon-1.png", "data":"normal", "selected":this._isInArray("normal", this.customFilters.types)});
loc1.push({"label":"", "icon":"../maps/icons/library/multyXp.png", "data":"!played", "selected":this._isInArray("!played", this.customFilters.types)});
this.typeFilter.dataProvider = new scaleform.clik.data.DataProvider(loc1);
return;
}

private function createDropdown():flash.display.DisplayObject
{
var loc1:*=new components.MultiSelectionDropDown();
loc1.autoSize = "none";
loc1.dropdown = "DropdownMenu_ScrollingList";
loc1.enabled = true;
loc1.enableInitCallback = false;
loc1.focusable = true;
loc1.handleScroll = false;
loc1.itemRenderer = components.ImageCheckBoxItemRenderer;
loc1.menuDirection = "up";
loc1.menuMargin = 2;
loc1.inspectableMenuOffset = {"top":0, "right":0, "bottom":4, "left":3};
loc1.inspectableMenuPadding = {"top":0, "right":0, "bottom":-1, "left":0};
loc1.menuRowsFixed = false;
loc1.menuWidth = 95;
loc1.menuWrapping = "normal";
loc1.scrollBar = "";
loc1.showEmptyItems = false;
loc1.soundId = "";
loc1.soundType = "";
loc1.inspectableThumbOffset = {"top":0, "bottom":0};
loc1.visible = true;
return loc1 as flash.display.DisplayObject;
}

private function _isInArray(arg1:*, arg2:Array):Boolean
{
if (arg2 == null)
{
return false;
}
return !(arg2.indexOf(arg1) == -1);
}

private const DROPDOWN_OFFSET:int=5;

private var page:net.wg.gui.lobby.hangar.Hangar;

private var isVisible:Boolean=true;

private var hideBtn:ButtonNormal;

private var levelFilter:DropDownImageText;

private var typeFilter:DropDownImageText;

private var customFilters:Object=null;
}
}

Возможно, кому-нибудь поможет. )

Хороший мод, ждем волшебника.

Share this post


Link to post

Short link
Share on other sites

OnMax, при помощи Decompyle++ декомпилируется, а вот uncompyle2 не берёт его.

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

 

 

OnMax, при помощи Decompyle++ декомпилируется, а вот uncompyle2 не берёт его.

точно не помню чем декомпилировалось, но подтвержтаю что чем то получилось, а чем то нет...

но суть не в том... как говорилось выше есть исходники... 

 

 

Декомпил   Вот тут есть вообще исходники
 

Share this post


Link to post

Short link
Share on other sites

 

точно не помню чем декомпилировалось, но подтвержтаю что чем то получилось, а чем то нет...

но суть не в том... как говорилось выше есть исходники... 

 

 

 

 

чет есть сомнения что этот мод мы вообще дождемся...

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

чет есть сомнения что этот мод мы вообще дождемся...

Такие же мысли.

P.S.Ну если есть исходники, может кто из мододелов возмется за данное творение?

Edited by ChibricheK

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.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...