Ошибка плуга помогите 39



WEGO-RANK.zip (2.1 КБ)

Хочешь пользоватся ивентами? но не знаешь как /pishow nahui

1 лайк

Как исправить помоги

Окей, самый простой способ - удалить плагин “Ranks”, но я бы пошёл дальше и удалил весь сервер

1 лайк

Нет если не можешь не чем помочь жду других

нет не помогу

События... Собыыыытиииииииия! Одну минуточку...

1 лайк

Ок

Не факт, что сработает, но попробуй на строке 39 - $p = $cause->getDamager();, вместо переменной $cause поставить $e.

Не сработает

Если способ не помог, верни $cause, и вместо getDamager() сделай getFinalDamage()

Я не знаю, может быть в ядре LiteCore по какой-то причине нет такого метода, хотя это глупо, почему его там нет, не понятно…

Может по тому что урон в EntityDamageEvent не подразумевает урон от “Damager”?

Я бы помог но мне в лом качать плуг, скинь кодом

<?php

namespace Ranks;

use pocketmine\plugin\PluginBase;
use pocketmine\event\Listener;
use pocketmine\Player;
use pocketmine\event\{
	player\PlayerDeathEvent,
	player\PlayerJoinEvent, 
	entity\EntityDamageByEntityEvent
}; 
use pocketmine\utils\Config; 

Class Main extends PluginBase implements Listener {

	/*/
	|*| $db \SQLite
	/*/
	public $db; 
	public $ranks = []; 

	public function onEnable(){
		$this->getServer()->getPluginManager()->registerEvents($this, $this); 
		$path = $this->getDataFolder(); 
		@mkdir($path); 
		$this->db = new \SQLite3($path."data.db"); 
		$this->db->exec("CREATE TABLE IF NOT EXISTS USERS (
			`nickname` TEXT NOT NULL, 
			`kills` INTEGER DEFAULT 0 NOT NULL
			)"); 
		$config = new Config($path."ranks.yml", Config::YAML, ["0" => 0, "1" => 50, "2" => 100]); 
		$this->ranks = $config->getAll(); 
		unset($config); 
	}

	public function onDeath(PlayerDeathEvent $e){
		$cause = $e->getPlayer()->getLastDamageCause(); 
		$p = $cause->getDamager(); 
		$this->addKill($p->getName()); 
	}

	public function createUser($nick){
		$nick = strtolower($nick); 
		$this->db->query("INSERT INTO USERS (`nickname`) VALUES ('{$nick}')"); 
	}
	
	public function onJoin(PlayerJoinEvent $e){
		$p = $e->getPlayer(); 
		$n = $p->getName(); 
		if(!$this->issetUser($n)){
			$this->createUser($n); 
			}
		}
	
	public function issetUser($nick){
		$nick = strtolower($nick); 
		$query = $this->db->query("SELECT * FROM USERS WHERE `nickname` = '{$nick}'"); 
		return $query->fetchArray(SQLITE3_ASSOC) != false; 
	}

	public function addKill($nick){
		$nick = strtolower($nick); 
		$this->db->query("UPDATE `users` SET `kills` = kills + 1 WHERE `nickname` = '{$nick}'"); 
	}
	
	public function getKills($nick){
		$nick = strtolower($nick); 
		$kills = $this->db->query("SELECT * FROM USERS WHERE `nickname` = '{$nick}'")->fetchArray(SQLITE3_ASSOC)["kills"]; 
		return $kills; 
		}

	public function getRank($nick){
		$nick = strtolower($nick); 
		$kills = $this->getKills($nick); 
		$endRank = "null"; 
		foreach($this->ranks as $rank => $needKills){
			if($kills >= $needKills) $endRank = $rank; 
		}
		return $endRank; 
	}

}

Всё просто, в EntityDamageEvent нету метода getDamager(), этот метод есть в EntityDamageByEntityEvent

Ну тогда, скорее всего, может сработать использование getFinalDamage()

Я вас читаю мне очень нравится как вы помогайте

public function onDeath(PlayerDeathEvent $e){
  $cause = $e->getPlayer()->getLastDamageCause(); 
  if($cause instanceof \pocketmine\event\entity\EntityDamageByEntityEvent){
    $p = $cause->getDamager(); 
    $this->addKill($p->getName()); 
  }
}

Ой че жа хуйня, сорян я сонный, 5сек