1. The forums will be archived and moved to a read only mode in about 2 weeks (mid march).

Glitch combat

Discussion in 'Development' started by AffanStarPure, Jun 25, 2017.

  1. AffanStarPure

    AffanStarPure Baby Zombie

    Messages:
    106
    GitHub:
    AffanStarPure
    Watch this video
    About glitch idk why people log out then die drop stuff and item keep back when u log on
    Can anyone help this?
     
  2. EdwardHamHam

    EdwardHamHam Skeleton

    Messages:
    962
    GitHub:
    edwardhamham
    I'm not having this glitch.
     
  3. AffanStarPure

    AffanStarPure Baby Zombie

    Messages:
    106
    GitHub:
    AffanStarPure
    Yes idk why I got glitch maybe plugin i guess
     
  4. Muqsit

    Muqsit Chicken

    Messages:
    1,548
    GitHub:
    muqsit
    Can you show us your combat logging code
     
    Last edited: Jun 30, 2017
  5. AffanStarPure

    AffanStarPure Baby Zombie

    Messages:
    106
    GitHub:
    AffanStarPure
    PHP:
    <?php

    namespace Lambo\CombatLogger;

    use 
    pocketmine\plugin\PluginBase;
    use 
    pocketmine\scheduler\PluginTask;
    use 
    pocketmine\Server;
    use 
    pocketmine\Player;
    use 
    pocketmine\entity\Entity;

    use 
    pocketmine\event\Event;
    use 
    pocketmine\event\EventPriority;
    use 
    pocketmine\event\Listener;
    use 
    pocketmine\event\TranslationContainer;

    use 
    pocketmine\event\entity\EntityDamageEvent;
    use 
    pocketmine\event\entity\EntityDamageByEntityEvent;
    use 
    pocketmine\event\player\PlayerDeathEvent;
    use 
    pocketmine\event\player\PlayerQuitEvent;
    use 
    pocketmine\event\player\PlayerCommandPreprocessEvent;

    class 
    Main extends PluginBase implements Listener{

        public 
    $players = array();
        public 
    $interval 10;
        public 
    $blockedcommands = array();

        public function 
    onEnable(){
            
    $this->saveDefaultConfig();
            
    $this->interval $this->getConfig()->get("interval");
            
    $cmds $this->getConfig()->get("blocked-commands");
            foreach(
    $cmds as $cmd){
                
    $this->blockedcommands[$cmd]=1;
            }
            
    $this->getServer()->getLogger()->info("CombatLogger enabled");
            
    $this->getServer()->getPluginManager()->registerEvents($this$this);
            
    $this->getServer()->getScheduler()->scheduleRepeatingTask(new Scheduler($this$this->interval), 20);
        }

        public function 
    onDisable(){
            
    $this->getServer()->getLogger()->info("CombatLogger disabled");
        }

        
    /**
         * @param EnityDamageEvent $event
         *
         * @priority MONITOR
         * @ignoreCancelled true
         */
        
    public function EntityDamageEvent(EntityDamageEvent $event){
            if(
    $event instanceof EntityDamageByEntityEvent){
                if(
    $event->getDamager() instanceof Player and $event->getEntity() instanceof Player){
                    foreach(array(
    $event->getDamager(),$event->getEntity()) as $players){
                        
    $this->setTime($players);
                    }
                }
            }
        }

        private function 
    setTime(Player $player){
            
    $msg "§7[§cWarning§7]§c Logging out now will cause you to die.\n§cPlease wait ".$this->interval." seconds.§r";
            if(isset(
    $this->players[$player->getName()])){
                if((
    time() - $this->players[$player->getName()]) > $this->interval){
                    
    $player->sendMessage($msg);
                }
            }else{
                
    $player->sendMessage($msg);
            }
            
    $this->players[$player->getName()] = time();
        }

        
    /**
         * @param PlayerDeathEvent $event
         *
         * @priority MONITOR
         * @ignoreCancelled true
         */
        
    public function PlayerDeathEvent(PlayerDeathEvent $event){
            if(isset(
    $this->players[$event->getEntity()->getName()])){
                unset(
    $this->players[$event->getEntity()->getName()]);
                
    /*$cause = $event->getEntity()->getLastDamageCause();
                if($cause instanceof EntityDamageByEntityEvent){
                    $e = $cause->getDamager();
                    if($e instanceof Player){
                        $message = "death.attack.player";
                        $params[] = $e->getName();
                        $event->setDeathMessage(new TranslationContainer($message, $params));
                    }
                }*/
            
    }
        }

        
    /**
         * @param PlayerQuitEvent $event
         *
         * @priority HIGH
         * @ignoreCancelled true
         */
        
    public function PlayerQuitEvent(PlayerQuitEvent $event){
            if(isset(
    $this->players[$event->getPlayer()->getName()])){
                
    $player $event->getPlayer();
                if((
    time() - $this->players[$player->getName()]) < $this->interval){
                    
    $player->kill();
                }
            }
        }

        
    /**
         * @param PlayerCommandPreprocessEvent $event
         *
         * @priority HIGH
         * @ignoreCancelled true
         */
        
    public function PlayerCommandPreprocessEvent(PlayerCommandPreprocessEvent $event){
            if(isset(
    $this->players[$event->getPlayer()->getName()])){
                
    $cmd strtolower(explode(' '$event->getMessage())[0]);
                if(isset(
    $this->blockedcommands[$cmd])){
                    
    $event->getPlayer()->sendMessage("§7[§6Blocked§7]§c You cannot use this command during combat.§r");
                    
    $event->setCancelled();
                }
            }
        }
    }
    @Muqsit hhmm what kind problem combat log is like dupe glitch combat log
     
  6. Muqsit

    Muqsit Chicken

    Messages:
    1,548
    GitHub:
    muqsit
    It might be something related to the recent PlayerDataSaveEvent update. Also, you forgot to unset the index from $players.
    Try this.
    PHP:
        public function onPlayerDataSave(PlayerDataSaveEvent $event){
            if(isset(
    $this->players[$k $event->getPlayerName()])){
                if((
    time() - $this->players[$k]) < $this->interval){
                    
    $nbt $event->getSaveData();
                    
    $nbt->Inventory = new ListTag("Inventory", []);//emptying player's inventory contents
                    
    $event->setSaveData($nbt);
                    unset(
    $this->players[$k]);//remove player from the combat log array.
                
    }
            }
        }
    Setting the priority of PlayerQuitEvent to LOWEST might also fix your problem.
     
    corytortoise and SalmonDE like this.
  7. AffanStarPure

    AffanStarPure Baby Zombie

    Messages:
    106
    GitHub:
    AffanStarPure
    I done put it code i just use 1 plugin but still glitch when click disconnect in PvP combat log
    Maybe is might pocket mine version glitch?
     
  8. EdwardHamHam

    EdwardHamHam Skeleton

    Messages:
    962
    GitHub:
    edwardhamham
    I can't reproduce this with bare PocketMine. What other plugins do you have?
     
    SalmonDE likes this.
  9. AffanStarPure

    AffanStarPure Baby Zombie

    Messages:
    106
    GitHub:
    AffanStarPure
    I only use this one https://poggit.pmmp.io/p/CombatLogger/0.0.2
    But still glitch i never see this before glitch so bad in PvP combat log
     
  10. EdwardHamHam

    EdwardHamHam Skeleton

    Messages:
    962
    GitHub:
    edwardhamham
  11. AffanStarPure

    AffanStarPure Baby Zombie

    Messages:
    106
    GitHub:
    AffanStarPure
    @Jack Noordhuis development this plugin combat logger
     
  12. SalmonDE

    SalmonDE Zombie Pigman

    Messages:
    739
    GitHub:
    SalmonDE
    I think you have a true point.
    I also encountered this issue when a server asked me for help on this one.

    My conclusion was that as you can see here the player data is saved before the event is called. That means everything plugins do when they receive the event actually doesn't get saved in the player file.

    I fixed this by adding
    PHP:
    $player->save();
    under
    PHP:
    $player->kill();
    Full example:
    PHP:
    public function PlayerQuitEvent(PlayerQuitEvent $event){
            if(isset(
    $this->players[$event->getPlayer()->getName()])){
                
    $player $event->getPlayer();
                if((
    time() - $this->players[$player->getName()]) < $this->interval){
                    
    $player->kill();
                    
    $player->save(); // notice this one
                
    }
            }
        }
    Tl;dr:
    When you die and the plugin kills you to make you drop your items, the server doesn't save the fact that this happened.
    Then when you join again it's like nothing happened.
     
    Last edited: Jul 1, 2017
    AffanStarPure likes this.
  13. AffanStarPure

    AffanStarPure Baby Zombie

    Messages:
    106
    GitHub:
    AffanStarPure
    Oh thanks you so much my Plugin not glitch anymore is save by glitch for now glad u help me :)
     
  14. SalmonDE

    SalmonDE Zombie Pigman

    Messages:
    739
    GitHub:
    SalmonDE
    I'm glad I could help you. :)
    Is it possible to mark this thread as "Solved"?
     
    jasonwynn10 likes this.
  15. AffanStarPure

    AffanStarPure Baby Zombie

    Messages:
    106
    GitHub:
    AffanStarPure
    Hey @SalmonDE i found this error i not sure how fix it
    Code:
     2017-07-05 [19:20:42] [Server thread/CRITICAL]: Could not pass event 'pocketmine\event\player\PlayerDataSaveEvent' to 'CombatLogger v1.3.3': Class Lambo\CombatLogger\ListTag not found on Lambo\CombatLogger\Main 2017-07-05 [19:20:42] [Server thread/CRITICAL]: ClassNotFoundException: "Class Lambo\CombatLogger\ListTag not found" (EXCEPTION) in "/src/spl/BaseClassLoader" at line 144 2017-07-05 [19:20:42] [Server thread/CRITICAL]: Could not pass event 'pocketmine\event\player\PlayerDataSaveEvent' to 'CombatLogger v1.3.3': Class Lambo\CombatLogger\ListTag not found on Lambo\CombatLogger\Main 2017-07-05 [19:20:42] [Server thread/CRITICAL]: ClassNotFoundException: "Class Lambo\CombatLogger\ListTag not found" (EXCEPTION) in "/src/spl/BaseClassLoader" at line 144 
    Can u help me fix this Everytime show this error
     
  16. SalmonDE

    SalmonDE Zombie Pigman

    Messages:
    739
    GitHub:
    SalmonDE
    @AffanStarPure Try to add
    PHP:
    use pocketmine\nbt\tag\ListTag;
    in the upper part of your file. Usually above the class keyword and under the namespace keyword.

    PHP:
    namespace example\namespace;

    //around here
    use pocketmine\plugin\PluginBase;

    class 
    ExamplePlugin extends PluginBase {

    }
     
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.