Перейти к содержанию

Вызов респа


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

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

 

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

В ‎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 сказал:

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

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

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

×
×
  • Создать...

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

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