Обсуждение Вопросы по программированию модификаций на Python

Статус
В этой теме нельзя размещать новые ответы.
А где можно найти информацию по BigWorld.player(). BigWorld.entities ещё интересует. Да и вообще по BigWorld, может есть где какие крохи?
 
Разве что только Manual по BigWorld движку, но не по самой игре, а так только dis, dir и __dict__ идут на помощь.
 
Последнее редактирование:
А где можно найти информацию по BigWorld.player().
Это так или иначе не избавит от много часового разглядывания кода .py файлов, что бы понять как это всё работает.

Наша задача найти функцию(метод) обрабатывающую нашу пременую (свойство класса), и добавить в неё свой функционал, будь то вывод сообщения на экран через условный оператор if либо какие либо метаморфозы с самим значением.

Файловый поиск, вот это очень даже, шарить по .py исходникам иргы на предмет использования схожего метода или переменой, понится что то типа Архивариус 3000. А то действительно много файловое изучение игры, с кучей импорта в начале кода.

2ZorroJan, я не меньший олень =). Студент 2го курса, сижу вот изучаю ООП. =)
 
Это так или иначе не избавит от много часового разглядывания кода .py файлов, что бы понять как это всё работает.

Наша задача найти функцию(метод) обрабатывающую нашу пременую (свойство класса), и добавить в неё свой функционал, будь то вывод сообщения на экран через условный оператор if либо какие либо метаморфозы с самим значением.

Файловый поиск, вот это очень даже, шарить по .py исходникам иргы на предмет использования схожего метода или переменой, понится что то типа Архивариус 3000. А то действительно много файловое изучение игры, с кучей импорта в начале кода.

2ZorroJan, я не меньший олень =). Студент 2го курса, сижу вот изучаю ООП. =)

Например нужно нам найти команду, чтобы определить местоположение противника, в помощь идет базовый английский (школьный), вбиваем в поиск position, а дальше уже методом тыка смотрим как это работает.
 
Блин всю башню сломал просматривая код, но так и не понял, где перехватить перезарядку, когда кд союзник принудительно выполняет ((, а ведь когда кдшишься метка на миникарте идёт, значит перехватить можно, но как???
 
Пожалуйста имейте ввиду, что этот пользователь забанен
союзников - да , противников - нет ( на серверном уровне )
 
ProstoNoob
Да мне только союзников и надо. Я понимаю, что противники на серверном уровне, но на это у меня есть другой план. Я сейчас перезарядку над танком мучу, но вот упёрся в эту перезарядку союзников и сдвинуться не могу. Жалко, время пропадает на исследование, уже неделя ушла. Может, если тебе не трудно подсобишь, а я с тобой кодом поделюсь, можно совместный проект сделать, если желание есть. Трудно мне дилетанту одному.:Smile_crab:
 
Последнее редактирование:
ProstoNoob
Вот я тут ещё файлик набрасал.

Посмотреть вложение 6139

import BigWorld, Vehicle
from Avatar import PlayerAvatar

BigWorld.entity(vehicleID).publicInfo.team == BigWorld.player().team # определение союзника - по ID
BigWorld.entity(vehicleID).isAlive() # определение на то - живой ли - по ID
BigWorld.entity(vehicleID).isPlayer # определение - игрок ли по ID


##### onEnterWorld, onLeaveWorld
import BigWorld
from Avatar import PlayerAvatar

pre_onEnterWorld_init = PlayerAvatar.onEnterWorld
pre_onLeaveWorld_init = PlayerAvatar.onLeaveWorld

def new_onEnterWorld_init(current, prereqs):
pre_onEnterWorld_init(current, prereqs)
# появление в мире (для врагов - засвет)

def new_onLeaveWorld_init(current):
pre_onLeaveWorld_init(current)
# пропадание (для врагов - уход из засвета)

PlayerAvatar.onEnterWorld = new_onEnterWorld_init
PlayerAvatar.onLeaveWorld = new_onLeaveWorld_init


##### VehicleKilled
import BigWorld
from gui.Scaleform.BattleDamageMessages import BattleDamageMessages

def new_onArenaVehicleKilled_init(current, vehicleID, attackerID, reason):
pre_onArenaVehicleKilled_init(current, vehicleID, attackerID, reason)
# действие при убийстве танка
# vehicleID - ID убитого, attackerID - ID атакующего

pre_onArenaVehicleKilled_init = BattleDamageMessages.onArenaVehicleKilled
BattleDamageMessages.onArenaVehicleKilled = new_onArenaVehicleKilled_init


##### VehicleKilled
import BigWorld
from gui.WindowsManager import g_windowsManager

def __onVehicleKilled(targetID, atackerID, reason):

def __startBattle():
BigWorld.player().arena.onVehicleKilled += __onVehicleKilled


def __stopBattle():
BigWorld.player().arena.onVehicleKilled -= __onVehicleKilled

g_windowsManager.onInitBattleGUI += __startBattle
g_windowsManager.onDestroyBattleGUI += __stopBattle


##### PlayerHandleKey
import BigWorld
from Avatar import PlayerAvatar
import Keys

def new_PlayerHandleKey_init(current, isDown, key, mods):
pre_PlayerHandleKey_init(current, isDown, key, mods)

if key == getattr(Keys, 'KEY_F10', None) and isDown:
# действие при нажатии клавиши F10 (пример)

pre_PlayerHandleKey_init = PlayerAvatar.handleKey
PlayerAvatar.handleKey = new_PlayerHandleKey_init


##### showTracer
import BigWorld
from Avatar import PlayerAvatar

def new_showTracer(current, shooterID, shotID, isRicochet, effectsIndex, refStartPoint, velocity, gravity, maxShotDist):
pre_showTracer(current, shooterID, shotID, isRicochet, effectsIndex, refStartPoint, velocity, gravity, maxShotDist)
# действие при запуске трассера (выстрел танка)

pre_showTracer = PlayerAvatar.showTracer
PlayerAvatar.showTracer = new_showTracer


##### onArenaPeriodChange
import BigWorld
from Avatar import PlayerAvatar
from constants import ARENA_PERIOD

def new_onArenaPeriodChange(current, period, periodEndTime, periodLength, periodAdditionalInfo):
pre_onArenaPeriodChange(current, period, periodEndTime, periodLength, periodAdditionalInfo)
# действие при различных периодах боя
if period == ARENA_PERIOD.PREBATTLE and period > -1:
# действие при начале отсчёта
if period == ARENA_PERIOD.BATTLE and period > -1:
# действие при окончании отсчёта, начале боя

pre_onArenaPeriodChange = PlayerAvatar._PlayerAvatar__onArenaPeriodChange
PlayerAvatar._PlayerAvatar__onArenaPeriodChange = new_onArenaPeriodChange


##### onBecomePlayer
import BigWorld
from Account import PlayerAccount
from messenger import MessengerEntry

def new_onBecomePlayer_init(current):
pre_onBecomePlayer_init(current)
# действие при входе в ангар на старте игры

SystemMessages.pushMessage('<font color="#AA80AA"><B>.....</font>', type = SystemMessages.SM_TYPE.Warning)

pre_onBecomePlayer_init = PlayerAccount.onBecomePlayer
PlayerAccount.onBecomePlayer = new_onBecomePlayer_init

#####

Можно его пополнять постоянно новыми фишками и будет хорошая база знаний для написания модов. Как тебе идея?
Отступы конечно все удалились ))
 
Последнее редактирование:
ProstoNoob
Вот я тут ещё файлик набрасал.

Посмотреть вложение 6139

import BigWorld, Vehicle
from Avatar import PlayerAvatar

BigWorld.entity(vehicleID).publicInfo.team == BigWorld.player().team # определение союзника - по ID
BigWorld.entity(vehicleID).isAlive() # определение на то - живой ли - по ID
BigWorld.entity(vehicleID).isPlayer # определение - игрок ли по ID


##### onEnterWorld, onLeaveWorld
import BigWorld
from Avatar import PlayerAvatar

pre_onEnterWorld_init = PlayerAvatar.onEnterWorld
pre_onLeaveWorld_init = PlayerAvatar.onLeaveWorld

def new_onEnterWorld_init(current, prereqs):
pre_onEnterWorld_init(current, prereqs)
# появление в мире (для врагов - засвет)

def new_onLeaveWorld_init(current):
pre_onLeaveWorld_init(current)
# пропадание (для врагов - уход из засвета)

PlayerAvatar.onEnterWorld = new_onEnterWorld_init
PlayerAvatar.onLeaveWorld = new_onLeaveWorld_init


##### VehicleKilled
import BigWorld
from gui.Scaleform.BattleDamageMessages import BattleDamageMessages

def new_onArenaVehicleKilled_init(current, vehicleID, attackerID, reason):
pre_onArenaVehicleKilled_init(current, vehicleID, attackerID, reason)
# действие при убийстве танка
# vehicleID - ID убитого, attackerID - ID атакующего

pre_onArenaVehicleKilled_init = BattleDamageMessages.onArenaVehicleKilled
BattleDamageMessages.onArenaVehicleKilled = new_onArenaVehicleKilled_init


##### VehicleKilled
import BigWorld
from gui.WindowsManager import g_windowsManager

def __onVehicleKilled(targetID, atackerID, reason):

def __startBattle():
BigWorld.player().arena.onVehicleKilled += __onVehicleKilled


def __stopBattle():
BigWorld.player().arena.onVehicleKilled -= __onVehicleKilled

g_windowsManager.onInitBattleGUI += __startBattle
g_windowsManager.onDestroyBattleGUI += __stopBattle


##### PlayerHandleKey
import BigWorld
from Avatar import PlayerAvatar
import Keys

def new_PlayerHandleKey_init(current, isDown, key, mods):
pre_PlayerHandleKey_init(current, isDown, key, mods)

if key == getattr(Keys, 'KEY_F10', None) and isDown:
# действие при нажатии клавиши F10 (пример)

pre_PlayerHandleKey_init = PlayerAvatar.handleKey
PlayerAvatar.handleKey = new_PlayerHandleKey_init


##### showTracer
import BigWorld
from Avatar import PlayerAvatar

def new_showTracer(current, shooterID, shotID, isRicochet, effectsIndex, refStartPoint, velocity, gravity, maxShotDist):
pre_showTracer(current, shooterID, shotID, isRicochet, effectsIndex, refStartPoint, velocity, gravity, maxShotDist)
# действие при запуске трассера (выстрел танка)

pre_showTracer = PlayerAvatar.showTracer
PlayerAvatar.showTracer = new_showTracer


##### onArenaPeriodChange
import BigWorld
from Avatar import PlayerAvatar
from constants import ARENA_PERIOD

def new_onArenaPeriodChange(current, period, periodEndTime, periodLength, periodAdditionalInfo):
pre_onArenaPeriodChange(current, period, periodEndTime, periodLength, periodAdditionalInfo)
# действие при различных периодах боя
if period == ARENA_PERIOD.PREBATTLE and period > -1:
# действие при начале отсчёта
if period == ARENA_PERIOD.BATTLE and period > -1:
# действие при окончании отсчёта, начале боя

pre_onArenaPeriodChange = PlayerAvatar._PlayerAvatar__onArenaPeriodChange
PlayerAvatar._PlayerAvatar__onArenaPeriodChange = new_onArenaPeriodChange


##### onBecomePlayer
import BigWorld
from Account import PlayerAccount
from messenger import MessengerEntry

def new_onBecomePlayer_init(current):
pre_onBecomePlayer_init(current)
# действие при входе в ангар на старте игры

SystemMessages.pushMessage('<font color="#AA80AA"><B>.....</font>', type = SystemMessages.SM_TYPE.Warning)

pre_onBecomePlayer_init = PlayerAccount.onBecomePlayer
PlayerAccount.onBecomePlayer = new_onBecomePlayer_init

#####

Можно его пополнять постоянно новыми фишками и будет хорошая база знаний для написания модов. Как тебе идея?
Отступы конечно все удалились ))

..........................................................

def new_onEnterWorld_init(current, prereqs):
pre_onEnterWorld_init(current, prereqs)
# появление в мире (для врагов - засвет, для всех танков)

def new_onLeaveWorld_init(current):
pre_onLeaveWorld_init(current)
# пропадание (для врагов - уход из засвета, для всех танков)
 
Последнее редактирование:
Доброго времени суток! Ребят ни у кого нету набора для изменения скриптов, как на другом читерском сайте, а то у них файл удален :( Спасибо за внимание :)
 
Последнее редактирование:
Доброго времени суток! Ребят ни у кого нету набора для изменения скриптов, как на другом читерском сайте, а то у них файл удален :( Спасибо за внимание :)

попробуй эту софтину от странника

 
Подскажите книжку питон для чайников, хочу моды пилить
 
К сожалению для чайников питона нету...
Есть только для самоваров Python.
 
Подскажите книжку питон для чайников, хочу моды пилить

1. Литература

Марк Лутц “Программирование на Python” — его советуют читать на многих форумах и курсах. Мне он показался излишне подробным и нагруженным для новичка. Читать много, программировать мало. Гораздо полезнее его читать после овладевания Python минимума.

Марк Саммерфилд “Программирование на Python 3” — динамично, с отличными примерами и заданиями. Без излишнего углубления, которое только все усложняет в начале. Я рекомендую начать именно с этой книги, она поможет быстро вникнуть, не пугая сложностями.

Все остальные книги оказались мене полезными и информативными. Вообще, хорошую литературу по этой теме трудно просто так взять и купить в магазине или в цифровой версии.

2. Что читать в интернете

http://pythonworld.ru/ — простым и понятным языком рассказывается об азах языка, часто использовал, как шпаргалку.
 
Приколол подход в защите скриптовых модов от декомпилирования.
Все собственно стали использовать один и тот же способ. Разве защита маршалом уже не в моде? =)

Код:
# Embedded file name: ********
Error: array indices must be integers

Код:
Error: tuple index out of range

Код:
# Embedded file name: ********
Error: tuple index out of range

Везде одни ошибки индекса вне диапазона индексов массива. =)

З.Ы. И да, типа вые*нулся.=)
 
Последнее редактирование:
Интересна область применения, а значит и область действия этих макроподстановок:
_PYTHON_MACROS = {'p': 'BigWorld.player()',
't': 'BigWorld.target()',
'B': 'BigWorld',
'v': 'BigWorld.entities[BigWorld.player().playerVehicleID]',
'b': 'BigWorld.player().addBotToArena',
'w': 'import Weather; Weather.weather().summon',
'cam_pos': 'BigWorld.player().inputHandler._AvatarInputHandler__curCtrl.setCameraPosition',
'gc': 'import gc; gc.set_debug(gc.DEBUG_LEAK | gc.DEBUG_STATS);gc.collect(2)',
'gcd': 'import gc; gc.set_debug(gc.DEBUG_LEAK | gc.DEBUG_STATS);from debug_utils import dump_garbage; dump_garbage()',
'gcd2': 'from debug_utils import dump_garbage_2; dump_garbage_2',
'connect': 'ls=game.LanServers();ls.searchAndConnect',
'create': 'BigWorld.player().createArena',
'list': 'alr = game.ArenaListRequester',
'start': 'BigWorld.player().startArena',
'join': 'BigWorld.player().joinArena',
'leave': 'BigWorld.player().leaveArena',
'cv': 'import vehicles_check;vehicles_check.check',
'chat': 'from messenger.MessengerEntry import g_instance;g_instance',
'battleUI': 'from gui.WindowsManager import g_windowsManager; g_windowsManager.battleWindow',
'wm': 'from gui.WindowsManager import g_windowsManager; wm = g_windowsManager; wm',
'cm': 'from gui.WindowsManager import g_windowsManager; cm = g_windowsManager.window.containerManager; cm',
'cls': "print '\\n' * 100",
'items': 'from gui.shared import g_itemsCache, REQ_CRITERIA; items = g_itemsCache.items; items',
'unlockAll': 'BigWorld.player().stats.unlockAll(lambda *args:None)',
'hangar': 'from gui.ClientHangarSpace import g_clientHangarSpaceOverride; g_clientHangarSpaceOverride',
'cvi': 'from CurrentVehicle import g_currentVehicle; cvi = g_currentVehicle.item; cvi',
'sc': 'from account_helpers.settings_core.SettingsCore import g_settingsCore; sc = g_settingsCore; sc',
'quests': 'from gui.server_events import g_eventsCache; quests = g_eventsCache; quests',
'wc': 'from gui.Scaleform.Waiting import Waiting; Waiting.close()',
'clan': 'from gui.shared.ClanCache import g_clanCache; clan = g_clanCache'}

а то нарыл тут в клиенте. :29_64:

Код:
'cls': "print '\\n' * 100"
Это что то вроде system("cls") из с++, только на питоше? =)
 
Последнее редактирование:
Hexx написал(а):
попробуй эту софтину от странника
StranikS, вообще красавчег такую софтинку своял. Для тех кто не дружит с командным интерфейсом, его с гуишником самое то. =)
 
Хреново что в языках программирования нет преемственности. =(
После с ++ ни за что бы не подумал что _init_ в данном контексте это конструктор:

Код:
class Employee:
   'Common base class for all employees'
   empCount = 0

   def __init__(self, name, salary):
      self.name = name
      self.salary = salary
      Employee.empCount += 1
   
   def displayCount(self):
     print "Total Employee %d" % Employee.empCount

   def displayEmployee(self):
      print "Name : ", self.name,  ", Salary: ", self.salary

а self, в некотором смысле выполняет функции указателя this.
 
Последнее редактирование:
Полагаю, свежий "Орион" виноват.

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

Выходило так, что, тот у кого исходный код - тот и автор. А теперь наоборот будет, кто автор - у того и исходный код, а остальные пусть идут по шоссе и сосут сушки.
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху