Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/LegionPE-Core/src/legionpe/games/kitpvp/PvpGame.php b/LegionPE-Core/src/legionpe/games/kitpvp/PvpGame.php
- index 8cc33f9..7b303f3 100644
- --- a/LegionPE-Core/src/legionpe/games/kitpvp/PvpGame.php
- +++ b/LegionPE-Core/src/legionpe/games/kitpvp/PvpGame.php
- @@ -7,7 +7,9 @@ use legionpe\games\Game;
- use legionpe\LegionPE;
- use legionpe\MysqlConnection;
- use legionpe\session\Session;
- +use pocketmine\block\Block;
- use pocketmine\command\Command;
- +use pocketmine\entity\Arrow;
- use pocketmine\entity\Egg;
- use pocketmine\entity\Snowball;
- use pocketmine\event\entity\EntityDamageByChildEntityEvent;
- @@ -192,6 +194,14 @@ class PvpGame implements Game{
- $origCancelled = $event->isCancelled();
- $event->setCancelled(false);
- if(!($event instanceof EntityDamageByEntityEvent)){
- + if($event->getCause() === EntityDamageEvent::CAUSE_FALL){
- + $fallCause = $victim->getLastDamageCause();
- + if($fallCause instanceof EntityDamageByEntityEvent){
- + if(isset($fallCause->_legionpeEta_timestamp) and microtime(true) - $fallCause->_legionpeEta_timestamp < 1){
- + $event->_legionpeEta_fallCause = $fallCause;
- + }
- + }
- + }
- return;
- }
- $victim = $event->getEntity();
- @@ -199,15 +209,15 @@ class PvpGame implements Game{
- if(!($victim instanceof Player) or !($damager instanceof Player)){
- return;
- }
- - $session = $this->main->getSessions()->getSession($damager);
- - if(!$session->inSession($this)){
- + $attackerSession = $this->main->getSessions()->getSession($damager);
- + if(!$attackerSession->inSession($this)){
- $event->setCancelled($origCancelled);
- return;
- }
- - $hitterData = $this->playerData[$session->getUID()];
- + $hitterData = $this->playerData[$attackerSession->getUID()];
- if(Settings::kitpvp_isSafeArea($victim) or Settings::kitpvp_isSafeArea($damager)){
- $event->setCancelled();
- - $session->tell("You may not attack players at/from spawn!");
- + $attackerSession->tell("You may not attack players at/from spawn!");
- }
- elseif($hitterData->isFriends($victimSession->getUID())){
- $event->setCancelled();
- @@ -218,6 +228,8 @@ class PvpGame implements Game{
- return;
- }
- $hitterData->hitCooldown = microtime(true);
- + $event->_legionpeEta_timestamp = microtime(true);
- + $event->_legionpeEta_isLadder = ($victim->getLevel()->getBlockIdAt($victim->getFloorX(), $victim->getFloorY(), $victim->getFloorZ()) === Block::LADDER);
- if($event instanceof EntityDamageByChildEntityEvent){
- $child = $event->getChild();
- if($child instanceof Snowball){
- @@ -238,12 +250,10 @@ class PvpGame implements Game{
- public function e_onDeath(PlayerDeathEvent $event){
- $victim = $event->getEntity();
- if($victim instanceof Player){
- - $this->getMain()->getLogger()->debug("PlayerDeathEvent passed to PvpGame::e_onDeath()");
- $session = $this->main->getSessions()->getSession($victim);
- if(!$session->inSession($this)){
- return;
- }
- - $this->getMain()->getLogger()->debug("{$victim->getName()} died");
- $this->i_onDead($victim);
- $cause = $victim->getLastDamageCause();
- if($cause instanceof EntityDamageByEntityEvent){
- @@ -252,6 +262,18 @@ class PvpGame implements Game{
- $this->i_onKill($killer, $victim);
- }
- }
- + elseif($cause->getCause() === EntityDamageEvent::CAUSE_FALL and isset($cause->_legionpeEta_fallCause)){
- + /** @var object $fallCause */
- + $fallCause = $cause->_legionpeEta_fallCause;
- + // $cause: fall event that led to death
- + // $fallCause: damageByEntity event that led to fall
- + /** @var bool $ladder */
- + $ladder = $fallCause->_legionpeEta_isLadder;
- + $shoot = $fallCause instanceof EntityDamageByChildEntityEvent and $fallCause->getChild() instanceof Arrow;
- + $damager = $fallCause->getDamager();
- + $this->i_onKill($damager, $victim, true, $ladder, $shoot);
- + unset($cause->_legionpeEta_fallCause);
- + }
- }
- }
- public function onRespawn(PlayerRespawnEvent $event, Session $session){
- @@ -272,13 +294,25 @@ class PvpGame implements Game{
- $data->streakCnt = 0;
- $s->tell("You died! Your number of deaths: %d", $data->getDeaths());
- }
- - private function i_onKill(Player $killer, Player $victim){
- - $this->getMain()->getLogger()->debug("{$killer->getName()} killed {$victim->getName()}");
- + private function i_onKill(Player $killer, Player $victim, $isFall = false, $isLadder = false, $isArrow = false){
- $killerSession = $this->main->getSessions()->getSession($killer);
- $killerData = $this->playerData[$killerSession->getUID()];
- $killerData->incrementKills();
- - $killerSession->tell("You killed %s! Your number of kills: %d", $victim->getNameTag(), $killerData->getKills());
- - $victim->sendMessage("You were killed by $killerSession!");
- + if($isFall){
- + $action = $isArrow ? "shot":"knocked";
- + if($isLadder){
- + $killerSession->tell("%s was $action off a ladder by you and fell to death! Your number of kills: %d", $victim->getNameTag(), $killerData->getKills());
- + $victim->sendMessage("You were $action off a ladder by $killerSession and fell to death!");
- + }
- + else{
- + $killerSession->tell("%s was doomed to fall by you! Your number of kills: %d", $victim->getNameTag(), $killerData->getKills());
- + $victim->sendMessage("You were doomed to fall by $killerSession!");
- + }
- + }
- + else{
- + $killerSession->tell("You killed %s! Your number of kills: %d", $victim->getNameTag(), $killerData->getKills());
- + $victim->sendMessage("You were killed by $killerSession!");
- + }
- $killerSession->setCoins($killerSession->getCoins() + 1);
- $killerSession->tell("Your number of coins +1. You now have %d coins.", $killerSession->getCoins());
- $killerData->streakCnt++;
- diff --git a/build/LegionPE_Eta.phar b/build/LegionPE_Eta.phar
- index b3cfd9a..4230219 100644
- Binary files a/build/LegionPE_Eta.phar and b/build/LegionPE_Eta.phar differ
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement