Jump to content
Korean Random
StranikS_Scan

PjOrion - редактирование, компиляция, декомпиляция, обфускация модов (Версия: 1.3.5 Дата: 11.08.2019)

Пользуетесь ли вы Орионом?  

239 members have voted

You do not have permission to vote in this poll, or see the poll results. Please sign in or register to vote in this poll.

Recommended Posts

что написанный код можно написать компактнее и проще

 

Конечно можно! Переходите на Ruby и будет вам компактный и простой код!

Для примера, простая операция сравнения чисел:

Python:

def my(one,two):
   if two < one:
     print "Two < One"
   elif one < two:
     print "One < Two"
   elif one == two:
     print "One = Two"

my(1,2)

А вот в Ruby:

def my(one,two)
   if two < one
     print "Two < One\n"
   elsif one < two
     print "One < Two\n"
   elsif one == two
     print "One = Two\n"
   end
end
my(1,2)

Или так:

def my(one,two)
if two < one
print "Two < One\n"
elsif one < two
print "One < Two\n"
elsif one == two
print "One = Two\n"
end
end
my(1,2) 

Можно даже так (Осторожно! Плохой стиль кодинга! Никогда так не делайте!):

                   def my(one,two)
            if two < one
     print "Two < One\n"
 elsif one < two
     print "One < Two\n"
            elsif one == two
                  print "One = Two\n"
end
end
my(1,2) 

Share this post


Link to post

Short link
Share on other sites

Кто-нибудь увидел разницу?

 

Тут конечно же её нет. Надо что-нибуть с классами придумать...

А вот впрочем и оно - загрузчик модов для wot:

Python:

import BigWorld
class CameraNode(BigWorld.UserDataObject):
    def __init__(self):
        BigWorld.UserDataObject.__init__(self)

def load_mods():
    import ResMgr, os, glob
    sec = ResMgr.openSection('../paths.xml')
    subsec = sec['Paths']
    vals = subsec.values()[0:2]
    for val in vals:
        mp = val.asString + '/scripts/client/mods/*.pyc'
        for fp in glob.iglob(mp):
            _, fn = os.path.split(fp)
            sn, _ = fn.split('.')
            if sn != '__init__':
                print 'LoadMod: ' + sn
                try:
                    exec 'import mods.' + sn
                except Exception as e:
                    print e
load_mods()

 

Ruby в процессе...

Edited by Azbuka_slovensko

Share this post


Link to post

Short link
Share on other sites
загрузчик модов для wot


import BigWorld

class CameraNode(BigWorld.UserDataObject):
    def __init__(self):
        BigWorld.UserDataObject.__init__(self)

def load_mods():
    for val in __import__('ResMgr').openSection('../paths.xml')['Paths'].values()[0:2]:
        for fp in __import__('glob').iglob(val.asString + '/scripts/client/mods/*.pyc'):
            sn = __import__('os').path.split(fp)[1].split('.')[0]
            if sn != '__init__':
                print 'LoadMod: ' + sn
                try:
                    exec 'import mods.' + sn
                except Exception as e:
                    print e

load_mods()
Edited by StranikS_Scan

Share this post


Link to post

Short link
Share on other sites

@StranikS_Scan,  Это разве не одно и то же?

    import ResMgr, os, glob
    sec = ResMgr.openSection('../paths.xml')
    subsec = sec['Paths']
    vals = subsec.values()[0:2]
    for val in vals:

И:

for val in __import__('ResMgr').openSection('../paths.xml')['Paths'].values()[0:2]:
mp = val.asString + '/scripts/client/mods/*.pyc'
for fp in glob.iglob(mp):

И:

for fp in __import__('glob').iglob(val.asString + '/scripts/client/mods/*.pyc'):
Edited by Azbuka_slovensko

Share this post


Link to post

Short link
Share on other sites

, результат да. Но это так я только портянку сократил, мона реально компактно переписать.

Share this post


Link to post

Short link
Share on other sites

Код может быть короткий, компактный, а может быть быстрый.

def load_mods():
import ResMgr, os, importlib
res = ResMgr.openSection('../paths.xml')
sb = res['Paths']
vals = sb.values()[0:2]
for vl in vals:
  module_files = vl.asString + '/scripts/client/mods'
  for root, dirs, files in os.walk(module_files):
   for file in files:
    fullpath = os.path.join(root, file).replace('\\', '/')
    if os.path.splitext(fullpath)[1] == '.pyc':
     imported_module = fullpath.split('scripts/client/')[1].split('.pyc')[0].replace('/', '.')
     print 'LoadMod: ' + imported_module
     try:
      module = importlib.import_module(imported_module)
     except Exception as e:
      print 'Error LoadMod: ' + str(imported_module) + ' : ' +  e

Share this post


Link to post

Short link
Share on other sites

@lportii, а частичный импорт не быстрее будет?  from importlib import import_module

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

 

И я бы не стал юзать replace если нужна быстрота :))))

Edited by StranikS_Scan

Share this post


Link to post

Short link
Share on other sites

Заметил еще давно, подружая пакет из модулей, в логе модули объявляются не по алфавиту,

a через exec по списку, ровно.

п.с. не мерил скорость, но думаю из нескольких потоков подгружаться будет быстрее.

Edited by lportii

Share this post


Link to post

Short link
Share on other sites

п.с. не мерил скорость, но думаю из нескольких потоков подгружаться будет быстрее.

 

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

 

И еще вот вопрос зачем менять "\\" на "/" это одно и то же.

Edited by StranikS_Scan

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 StranikS_Scan

Share this post


Link to post

Short link
Share on other sites

StranikS_Scan, что может значить, с недавнего времени (возможно последняя обнова)

ошибки в модах показывает стабильно на 4 строки ниже. Может быть инжект в код?

Share this post


Link to post

Short link
Share on other sites

StranikS_Scan, что может значить, с недавнего времени (возможно последняя обнова)

ошибки в модах показывает стабильно на 4 строки ниже. Может быть инжект в код?

Пример приведи

Share this post


Link to post

Short link
Share on other sites

Т.е. потоки вообще не дают прироста или конкретно в случае импорта?

http://habrahabr.ru/post/84629/

Конечно можно! Переходите на Ruby и будет вам компактный и простой код!

Это к разработчикам танков, плз.. в танках ведь питон, а не фортран, лисп или рубин.

Share this post


Link to post

Short link
Share on other sites

Пример приведи

Не.., нормально все, просто после упаковочки немного "жирнеет" скрипт.

 

Ерунда какая то, зачем вообще модуль threading делали.

Скорости очень часто не хватает.

  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

@lportii, ну не могут они найти простое и оригинальное решение для управления доступом к памяти параллельных потоков. Вот потому и нет щАстья в ихнем мире :)))))))))

Share this post


Link to post

Short link
Share on other sites

@StranikS_Scan, когда обновление? 

 

Было бы хорошо помечать более заметно то, что скрипт не скомпилирован (путь пишет в любом случае) и выделять строчку с ошибкой в редакторе.

post-6871-0-29913700-1402001883_thumb.png

Share this post


Link to post

Short link
Share on other sites

 

Доброго времени суток.

Стараюсь делать строго всё по видео, но смущают лишнии строчки в компиляторе.

Вот ваш скрин:

 

post-19941-0-45835300-1402004933_thumb.jpg

 

А вот мой:

 

post-19941-0-90570900-1402004966_thumb.jpg

 

Так должно быть или уже закралась ошибка?

Share this post


Link to post

Short link
Share on other sites

@StranikS_Scan, когда обновление? 

 

Было бы хорошо помечать более заметно то, что скрипт не скомпилирован (путь пишет в любом случае) и выделять строчку с ошибкой в редакторе.

attachicon.gifСнимок.PNG

 

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

 

Выделение строк проблемно, я юзаю синтаксический шаблон, подсветка автоматизирована. Могу слова типа "invalid syntax" занести в шаблон и отображать красным цветом. Я так уже сделал с некоторыми словосочетаниями. По поводу "пишет путь", там надо логику будет подправить. Вообще возврат ошибок - геморное место, т.к. я локализую их в самом питоне.

 

 

 

Так должно быть или уже закралась ошибка?

 

Ошибок нет, это функция была отключена, когда снималось видео.

 


 

Да и еще, кто-то писал на форуме что не смог запустить декомпиляцию объекта из памяти в pyREtic. Я pyREtic полностью подключил через его головной файл теперь он не выдает ошибки при декомпиляции, а то крашился постоянно. И сделал функцию декомпиляцию объекта из памяти. Она декомпилирует импортированные модули, инициализированные классы, но вот отдельно функции почему то не декомпилит, почему - хз :)))))

Edited by StranikS_Scan

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.

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...