public function onTouch(\pocketmine\event\player\PlayerInteractEvent $ev) { if ($ev->getBlock()->getID() === Block::CAKE_BLOCK) { if (!isset($this->lastEat[$ev->getPlayer()->getName()])) { $this->lastEat[$ev->getPlayer()->getName()] = 0; } if ($this->lastEat[$ev->getPlayer()->getName()] <= microtime(true)) { $e = new EntityRegainHealthEvent($ev->getPlayer(), 4, EntityRegainHealthEvent::CAUSE_EATING); $ev->getPlayer()->heal(4, $e); $this->lastEat[$ev->getPlayer()->getName()] = microtime(true) + ($this->skill[$ev->getPlayer()->getName()] === Skills::BIG_EATER ? 1.5 : 5); $ev->getPlayer()->sendMessage("[CrashBang] 체력이 회복되었습니다."); } else { $ev->getPlayer()->sendMessage("[CrashBang] 체력은 5초에 한 번만 회복이 가능합니다(식신은 1.5초)"); } } if ($this->status !== 2 or $ev->getItem()->getID() !== Item::BLAZE_ROD) { return; } $ev->setCancelled(); if ($this->cooldown[$ev->getPlayer()->getName()] > 0) { $ev->getPlayer()->sendMessage("[CrashBang] 아직 스킬을 사용할 수 없습니다."); return; } switch ($this->skill[$ev->getPlayer()->getName()]) { case Skills::ZOMBIE: $ev->getPlayer()->addEffect(Effect::getEffect(Effect::SLOWNESS)->setAmplifier(2)->setDuration(15 * 20)); $ev->getPlayer()->addEffect(Effect::getEffect(Effect::REGENERATION)->setAmplifier(4)->setDuration(10 * 20)); break; case Skills::EARTHQUAKE: $dirs = array(); foreach ($this->getServer()->getOnlinePlayers() as $p) { if ($p->getName() === $ev->getPlayer()->getName()) { continue; } $dirs[$p->getName()] = $p->distance($ev->getPlayer()); } asort($dirs); $i = 0; foreach ($dirs as $p => $d) { if (++$i >= 2) { break; } $p = $this->getServer()->getPlayerExact($p); $e = new EntityDamageByEntityEvent($ev->getPlayer(), $p, EntityDamageEvent::CAUSE_ENTITY_ATTACK, 12); $p->attack($ev->getFinalDamage(), $e); } break; case Skills::PLAGUE: foreach ($this->getServer()->getOnlinePlayers() as $p) { if ($p->getName() !== $ev->getPlayer()->getName()) { $p->addEffect(Effect::getEffect(Effect::NAUSEA)->setAmplifier(1)->setDuration(15 * 20)); $p->addEffect(Effect::getEffect(Effect::SLOWNESS)->setAmplifier(1)->setDuration(7 * 20)); } } break; case Skills::CREEPER: foreach ($this->getServer()->getOnlinePlayers() as $p) { if ($ev->getPlayer()->distanceSquared($p) > 25) { continue; } $e = new EntityDamageByEntityEvent($ev->getPlayer(), $p, EntityDamageEvent::CAUSE_ENTITY_ATTACK, 15); $p->attack($e->getFinalDamage(), $e); } break; case Skills::HEAL: $ev->getPlayer()->addEffect(Effect::getEffect(Effect::REGENERATION)->setAmplifier(5)->setDuration(3 * 20)); break; case Skills::STEALTH: $ev->getPlayer()->addEffect(Effect::getEffect(Effect::INVISIBILITY)->setAmplifier(1)->setDuration(5 * 20)); break; case Skills::EYE_FOR_EYE: $this->ps[$ev->getEntity()->getName()] += 3; break; case Skills::IGNITE: foreach ($this->getServer()->getOnlinePlayers() as $p) { $p->setOnFire(7); } break; case Skills::STORM: foreach ($this->getServer()->getOnlinePlayers() as $p) { if ($p->getName() === $ev->getPlayer()->getName() or $ev->getPlayer()->distanceSquared($p) > 22 ** 2) { continue; } $e = new EntityDamageByEntityEvent($ev->getPlayer(), $p, EntityDamageEvent::CAUSE_ENTITY_ATTACK, 4); $p->attack($e->getFinalDamage(), $e); $p->sendMessage("[CrashBang] 야 쓰레기! 폭풍저그 콩진호가 간다!"); $p->sendMessage("[CrashBang] 야 쓰레기! 폭풍저그 콩진호가 간다!"); } break; case Skills::EQUALITY: foreach ($this->getServer()->getOnlinePlayers() as $p) { $p->setHealth(8); } $this->getServer()->broadcastMessage("[CrashBang] 평등 스킬이 사용되었습니다."); break; case Skills::REBORN: $this->ps[$ev->getPlayer()->getName()] = 1; $ev->getPlayer()->kill(); $ev->getPlayer()->sendMessage("[CrashBang] 환생 시 추가 체력을 지급받습니다."); break; case Skills::INVINCIBLE: $this->ps[$ev->getPlayer()->getName()] = microtime(true) + 5; $ev->getPlayer()->sendMessage("[CrashBang] 5초간 무적 상태가 되어 모든 공격을 무시합니다."); $ev->getPlayer()->sendMessage("[CrashBang] 자신도 공격할 수 없습니다."); break; default: $ev->setCancelled(false); return; } $this->startCooldown($ev->getPlayer()); }