Хочешь пользоватся ивентами? но не знаешь как /pishow nahui
Как исправить помоги
Окей, самый простой способ - удалить плагин “Ranks”, но я бы пошёл дальше и удалил весь сервер
Нет если не можешь не чем помочь жду других
нет не помогу
События... Собыыыытиииииииия! Одну минуточку...
Ок
Не факт, что сработает, но попробуй на строке 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сек

