Гость HighByte Опубликовано 4 ноября, 2017 Поделиться Опубликовано 4 ноября, 2017 Добрый день. Есть SWF библиотека, в которой есть пакет: Скрытый текст package alternativa.tanks.models.tank.killhandlers { import alternativa.tanks.battle.BattleRunner; import alternativa.tanks.battle.BattleService; import alternativa.tanks.battle.events.BattleEventDispatcher; import alternativa.tanks.battle.events.death.TankDeadEvent; import alternativa.tanks.battle.objects.tank.Tank; import alternativa.tanks.battle.objects.tank.TankControlLockBits; import alternativa.tanks.models.sfx.lighting.ILightingSFXModel; import alternativa.tanks.models.tank.ITankModel; import alternativa.tanks.models.tank.configuration.TankConfiguration; import alternativa.tanks.models.tank.explosion.ITankExplosionModel; import alternativa.tanks.models.tank.spawn.ReadyToSpawnTask; import alternativa.tanks.sfx.LightAnimation; import flash.utils.getTimer; import platform.client.fp10.core.type.IGameObject; public class CommonTankDieHandler { [Inject] public static var battleService:BattleService; [Inject] public static var battleEventDispatcher:BattleEventDispatcher; public function CommonTankDieHandler() { super(); } protected static function getTankModel(param1:IGameObject) : ITankModel { return ITankModel(param1.adapt(ITankModel)); } private static function createDeathEffects(param1:Tank) : void { param1.getBody().clearAccumulators(); param1.getBody().state.velocity.z = param1.getBody().state.velocity.z + 500; param1.getBody().state.angularVelocity.reset(2,2,2); param1.getSkin().setDeadState(); var _loc2_:TankConfiguration = TankConfiguration(param1.user.adapt(TankConfiguration)); var _loc3_:IGameObject = _loc2_.getHullObject(); var _loc4_:ITankExplosionModel = ITankExplosionModel(_loc3_.adapt(ITankExplosionModel)); _loc4_.createExplosionEffects(_loc3_,param1,getExplosionAnimation(param1.user)); } private static function getExplosionAnimation(param1:IGameObject) : LightAnimation { var _loc2_:ILightingSFXModel = ILightingSFXModel(param1.adapt(ILightingSFXModel)); return _loc2_.getLightAnimation("explosion"); } protected function killTank(param1:IGameObject, param2:int) : void { var _loc3_:ITankModel = getTankModel(param1); _loc3_.lockMovementControl(TankControlLockBits.DEAD); _loc3_.getWeaponController().lockWeapon(TankControlLockBits.DEAD,false); _loc3_.getWeaponController().deactivateWeapon(); var _loc4_:Tank = _loc3_.getTank(); _loc4_.kill(); var _loc5_:BattleRunner = battleService.getBattleRunner(); _loc5_.addLogicUnit(new ReadyToSpawnTask(getTimer() + param2,_loc4_)); createDeathEffects(_loc4_); battleEventDispatcher.dispatchEvent(new TankDeadEvent(param1)); } } } По логике если эту часть кода(ниже) поместить в другой участок библиотеки, в функцию, которой передаётся "param1:IGameObject" то возможно респ будет срабатывать Скрытый текст import alternativa.tanks.battle.BattleRunner; import alternativa.tanks.battle.objects.tank.Tank; import alternativa.tanks.models.tank.ITankModel; import alternativa.tanks.models.tank.spawn.ReadyToSpawnTask; import flash.utils.getTimer; import platform.client.fp10.core.type.IGameObject; var _loc3_:ITankModel = getTankModel(param1); var _loc4_:Tank = _loc3_.getTank(); var _loc5_:BattleRunner = battleService.getBattleRunner(); _loc5_.addLogicUnit(new ReadyToSpawnTask(getTimer() + param2,_loc4_)); Но если я вставляю данный код в другой пакет, прописываю нужные импорты - в игре вылетает ошибка: Скрытый текст Что я делаю не так? Возможна ли ошибка из-за неправильного сохраниения библиотеки через FFDEC? Возможно ли реализовать это каким либо другим путём, например создав свой пакет, в котором установить хоткей и каким-то образом его подключить к библиотеке? Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 5 ноября, 2017 Поделиться Опубликовано 5 ноября, 2017 Ругается он на переменную getTankModel, которая, видимо, на момент вызова респа неопределена. Предполагаю, что во время загрузки объекта танка грузится и его модель, которая не найдена, отсюда и вылет. Ищи, где определяется упомянутая переменная, и переноси в свой код. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость HighByte Опубликовано 5 ноября, 2017 Поделиться Опубликовано 5 ноября, 2017 Ошибку понял, я пропустил некоторые части кода, а именно: Скрытый текст import alternativa.tanks.battle.BattleService; [Inject] public static var battleService:BattleService; protected static function getTankModel(param1:IGameObject) : ITankModel { return ITankModel(param1.adapt(ITankModel)); } Но теперь когда я сохраняю такой код: Скрытый текст package alternativa.tanks.models.tank.pause { import alternativa.tanks.battle.BattleRunner; import alternativa.tanks.battle.BattleService; import alternativa.tanks.battle.objects.tank.Tank; import alternativa.tanks.models.tank.ITankModel; import alternativa.tanks.models.tank.spawn.ReadyToSpawnTask; import flash.utils.getTimer; import platform.client.fp10.core.model.impl.Model; import platform.client.fp10.core.type.IGameObject; public class ITankPauseAdapt implements ITankPause { [Inject] public static var battleService:BattleService; private var object:IGameObject; private var impl:ITankPause; protected static function getTankModel(param1:IGameObject) : ITankModel { return ITankModel(param1.adapt(ITankModel)); } public function ITankPauseAdapt(param1:IGameObject, param2:ITankPause) { var _loc3_:ITankModel = getTankModel(param1); var _loc4_:Tank = _loc3_.getTank(); var _loc5_:BattleRunner = battleService.getBattleRunner(); _loc5_.addLogicUnit(new ReadyToSpawnTask(getTimer() + param2,_loc4_)); super(); this.object = param1; this.impl = param2; } public function enablePause() : void { try { Model.object = this.object; this.impl.enablePause(); return; } finally { Model.popObject(); } } public function disablePause() : void { try { Model.object = this.object; this.impl.disablePause(); return; } finally { Model.popObject(); } } public function resetIdleKickTime() : void { try { Model.object = this.object; this.impl.resetIdleKickTime(); return; } finally { Model.popObject(); } } } } FFDEC сохраняет такой код: Скрытый текст package alternativa.tanks.models.tank.pause { import alternativa.tanks.battle.BattleRunner; import alternativa.tanks.battle.BattleService; import alternativa.tanks.battle.objects.tank.Tank; import alternativa.tanks.models.tank.ITankModel; import alternativa.tanks.models.tank.spawn.ReadyToSpawnTask; import flash.utils.getTimer; import platform.client.fp10.core.model.impl.Model; import platform.client.fp10.core.type.IGameObject; public class ITankPauseAdapt implements ITankPause { [Inject] public static var battleService:BattleService; private var object:IGameObject; private var impl:ITankPause; public function ITankPauseAdapt(param1:IGameObject, param2:ITankPause) { var _loc3_:ITankModel = getTankModel(param1); var _loc4_:Tank = _loc3_.getTank(); var _loc5_:BattleRunner = battleService.getBattleRunner(); _loc5_.addLogicUnit(new ReadyToSpawnTask(getTimer() + param2,_loc4_)); super(); this.object = param1; this.impl = param2; } protected static function getTankModel(param1:IGameObject) : ITankModel { return ITankModel(param1.adapt(ITankModel)); } public function enablePause() : void { try { Model.object = this.object; this.impl.enablePause(); return; } finally { while(true) { Model.popObject(); } return; } break loop0; } public function disablePause() : void { try { Model.object = this.object; this.impl.disablePause(); return; } finally { while(true) { Model.popObject(); } return; } break loop0; } public function resetIdleKickTime() : void { try { Model.object = this.object; this.impl.resetIdleKickTime(); return; } finally { while(true) { Model.popObject(); } return; } break loop0; } } } Смещает положение добавляемой функции, добавляет в конец существующих функций, стоящих после смещённой добавленной "break loop0;". И в игре я наблюдаю такую ошибку: Скрытый текст Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость wzleonardo Опубликовано 6 ноября, 2017 Поделиться Опубликовано 6 ноября, 2017 Hi, i play tankiOnline too :), and also tryng to make hack by editing AOB, bro if you want try make it togheter add me on skype > el30n4d0 Ссылка на комментарий Поделиться на другие сайты Поделиться
ReWanet Опубликовано 6 ноября, 2017 Поделиться Опубликовано 6 ноября, 2017 В 06.11.2017 в 04:27, wzleonardo сказал: Hi, i play tankiOnline too Your message does not apply to the topic of the post. Therefore, we set the offtopic tag. // Поправьте его коммент а то я с телефона а тут нету тегов почему-то... Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 6 ноября, 2017 Поделиться Опубликовано 6 ноября, 2017 14 часа назад, HighByte сказал: И в игре я наблюдаю такую ошибку: Ты так и будешь выкладывать каждую ошибку без попытки самостоятельно с ней справиться? Он же тебе ясно говорит, что не может обратиться к методу или свойству объекта, так как ссылка на объек нулевая. То есть, объект у тебя не создался. Смотри выше по коду, где создается тот объект, к которому идет попытка обратиться в месте, где падает. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость HighByte Опубликовано 6 ноября, 2017 Поделиться Опубликовано 6 ноября, 2017 10 часов назад, Xipho сказал: Ты так и будешь выкладывать каждую ошибку без попытки самостоятельно с ней справиться? У меня знания практически нулевые, сейчас я даже с твоей подсказкой не понимаю что сделал не так. Теоретически оно может неправильно работать из-за того что при сохранении кода добавленная функция смещается ниже функции, в которой она вызывается, но это я исправить не могу. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения