Перейти к содержанию
Авторизация  
HighByte

Вызов респа

Рекомендуемые сообщения

Добрый день.
Есть 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_));

 

 

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

Скрытый текст

yecxzdqNQIS001eTIh4IEQ.png

 

Что я делаю не так? Возможна ли ошибка из-за неправильного сохраниения библиотеки через FFDEC? Возможно ли реализовать это каким либо другим путём, например создав свой пакет, в котором установить хоткей и каким-то образом его подключить к библиотеке?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ругается он на переменную getTankModel, которая, видимо, на момент вызова респа неопределена. Предполагаю, что во время загрузки объекта танка грузится и его модель, которая не найдена, отсюда и вылет. Ищи, где определяется упомянутая переменная, и переноси в свой код.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ошибку понял, я пропустил некоторые части кода, а именно:

Скрытый текст

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;".
И в игре я наблюдаю такую ошибку:

Скрытый текст

zRNA2dIYSiaMj7gD9a2_iQ.png

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В ‎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.

// Поправьте его коммент а то я с телефона а тут нету тегов почему-то...

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
14 часа назад, HighByte сказал:

И в игре я наблюдаю такую ошибку:

Ты так и будешь выкладывать каждую ошибку без попытки самостоятельно с ней справиться? Он же тебе ясно говорит, что не может обратиться к методу или свойству объекта, так как ссылка на объек нулевая. То есть, объект у тебя не создался. Смотри выше по коду, где создается тот объект, к которому идет попытка обратиться в месте, где падает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
10 часов назад, Xipho сказал:

Ты так и будешь выкладывать каждую ошибку без попытки самостоятельно с ней справиться?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

×

Важная информация

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