Home Play Support Products Blog Volunteer

CTF suggestions

#1
  1. Get rid of the can’t build over the void rule it makes the game feel so clunky and gets rid of creativity.

  2. Fix the arrows. It is so pathetic how bad the arrows are on CTF. They have like a second delay, they fly so slow, and you can’t even fire a full power arrow. Hitting someone who is moving is impossible, jump shooting doesn’t work, it’s embarrassing. I’ve seen better arrows on leet.cc servers, their is no excuse for a server as big as lifeboat to lagging behind. These hinderences all make the bow pointless aswell as frustrating.

  3. Decrease the grace period to 2 mins oppose to 3, even in my original suggestion I literally said 2 yet it was made 3. 3 mins is just a little to much. Also put an invisible barrier between the halves so it just doesn’t turn into who can miss more arrows.

1 Like

#2
  • Good Suggestions
  • Ok Suggestions
  • Bad Suggestions
  • I Don’t Care

0 voters

0 Likes

#3

That’s just an unfair thing tbh… also an advantage to some hackers.

0 Likes

#4

I transparently agree with 2 of the starting points.

0 Likes

#5

um
you do realize you’re not the only person to suggest the grace period.

0 Likes

#6

Yeah I noticed

0 Likes

#7

Every since the new update came out, I notice there were a lot of CTF players quit because the new update.

3 Likes

#8

player counts went up wth are you talking about

0 Likes

#10

The players still plays CTF but most of the older players quit CTF just because of these new updates. Lmao

0 Likes

#11

Upvote

1 Like

#12

i mean they’re not the only people who matter

0 Likes

#13

Adding on to this their are a couple glutches that impede gameplay that should be ironed out:

  1. The crafting glitch still exists even though it’s existed for like a year now. Funnily enough it’s even worse now, if you craft even remotely fast you will waste items and get nothing.

  2. The building straight up glitch still exists, so if you build up fast you get pushed off which just makes the game so clunky especially when your building up to say get a flag then you fall and get killed. This glitch has also existed for more than a year.

0 Likes

#14

can you stop complaining about ctf once in a while. it doesn’t have to be perfect. This revamp brought everything we wanted

0 Likes

#15

I would agree with this for points #1 and #3, but the glitches he pointed out need to be fixed.

2 Likes

#16

Pointing out glitches that have existed for this long and have probably been reported multiple times is not complaining, they should be fixed as they hinder aspects of the game an have for more than a year.

0 Likes

#17

Same.

0 Likes

#18

At least it’s not as bad as me falling down several times in Treasure Wars of Hive by disappearing blocks… But it definitely needs a fix.

> piggy: I could care. Less.

0 Likes

#19

From Steadfast source (master)
Player.php-line 4550
protected function releaseUseItem() {
$itemInHand = $this->inventory->getItemInHand();
if ($this->startAction > -1 && $itemInHand->getId() === Item::BOW) {
$bow = $this->inventory->getItemInHand();
if ($this->isSurvival() and !$this->inventory->contains(Item::get(Item::ARROW, 0, 1))) {
$this->inventory->sendContents($this);
return;
}
$yawRad = $this->yaw / 180 * M_PI;
$pitchRad = $this->pitch / 180 * M_PI;
$nbt = new Compound("", [
“Pos” => new Enum(“Pos”, [
new DoubleTag("", $this->x),
new DoubleTag("", $this->y + $this->getEyeHeight()),
new DoubleTag("", $this->z)
]),
“Motion” => new Enum(“Motion”, [
new DoubleTag("", -sin($yawRad) * cos($pitchRad)),
new DoubleTag("", -sin($pitchRad)),
new DoubleTag("", cos($yawRad) * cos($pitchRad))
]),
“Rotation” => new Enum(“Rotation”, [
new FloatTag("", $this->yaw),
new FloatTag("", $this->pitch)
]),
“Fire” => new ShortTag(“Fire”, $this->isOnFire() ? 45 * 60 : 0)
]);
$diff = ($this->server->getTick() - $this->startAction);
$p = $diff / 20;
$f = min((($p ** 2) + $p * 2) / 3, 1) * 2;
$ev = new EntityShootBowEvent($this, $bow, Entity::createEntity(“Arrow”, $this->chunk, $nbt, $this, $f == 2 ? true : false), $f);
if ($f < 0.1 or $diff < 5) {
$ev->setCancelled();
}
$this->server->getPluginManager()->callEvent($ev);
$projectile = $ev->getProjectile();
if ($ev->isCancelled()) {
$projectile->kill();
$this->inventory->sendContents($this);
} else {
$projectile->setMotion($projectile->getMotion()->multiply($ev->getForce()));
if ($this->isSurvival()) {
if (!$bow->hasEnchantments(Enchantment::TYPE_BOW_INFINITY)) {
$this->inventory->removeItemWithCheckOffHand(Item::get(Item::ARROW, 0, 1));
}
$bow->setDamage($bow->getDamage() + 1);
if ($bow->getDamage() >= 385) {
$this->inventory->setItemInHand(Item::get(Item::AIR, 0, 0));
} else {
$this->inventory->setItemInHand($bow);
}
}
if ($projectile instanceof Projectile) {
$this->server->getPluginManager()->callEvent($projectileEv = new ProjectileLaunchEvent($projectile));
if ($projectileEv->isCancelled()) {
$projectile->kill();
} else {
$projectile->spawnToAll();
$recipients = $this->hasSpawned;
$recipients[$this->id] = $this;
$pk = new LevelSoundEventPacket();
$pk->eventId = LevelSoundEventPacket::SOUND_BOW;
$pk->x = $this->x;
$pk->y = $this->y;
$pk->z = $this->z;
$pk->blockId = -1;
$pk->entityType = 1;
Server::broadcastPacket($recipients, $pk);
}
} else {
$projectile->spawnToAll();
}
}
} else if ($itemInHand->getId() === Item::BUCKET && $itemInHand->getDamage() === 1) { //Milk!
$this->server->getPluginManager()->callEvent($ev = new PlayerItemConsumeEvent($this, $itemInHand));
if ($ev->isCancelled()) {
$this->inventory->sendContents($this);
return;
}
$pk = new EntityEventPacket();
$pk->eid = $this->getId();
$pk->event = EntityEventPacket::USE_ITEM;
$viewers = $this->getViewers();
$viewers[] = $this;
Server::broadcastPacket($viewers, $pk);
if ($this->isSurvival()) {
–$itemInHand->count;
$this->inventory->setItemInHand($itemInHand);
$this->inventory->addItem(Item::get(Item::BUCKET, 0, 1));
}
$this->removeAllEffects();
} else {
$this->inventory->sendContents($this);
}
}

Arrow.php (Entire class)

<?php /* * * ____ _ _ __ __ _ __ __ ____ * | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \ * | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) | * | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/ * |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_| * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * @author PocketMine Team * @link http://www.pocketmine.net/ * * */ namespace pocketmine\entity; use pocketmine\level\format\FullChunk; use pocketmine\level\particle\CriticalParticle; use pocketmine\nbt\tag\Compound; use pocketmine\network\protocol\AddEntityPacket; use pocketmine\Player; use pocketmine\level\Level; use pocketmine\math\Vector3; use pocketmine\block\Lava; class Arrow extends Projectile { const NETWORK_ID = 80; public $width = 0.5; public $length = 0.5; public $height = 0.5; protected $gravity = 0.03; protected $drag = 0.01; protected $damage = 2; public $isCritical; public function __construct(FullChunk $chunk, Compound $nbt, Entity $shootingEntity = null, $critical = false) { $this->isCritical = (bool) $critical; parent::__construct($chunk, $nbt, $shootingEntity); } public function onUpdate($currentTick) { if ($this->closed) { return false; } $hasUpdate = parent::onUpdate($currentTick); if (!$this->hadCollision and $this->isCritical) { $this->level->addParticle(new CriticalParticle($this->add( $this->width / 2 + mt_rand(-100, 100) / 500, $this->height / 2 + mt_rand(-100, 100) / 500, $this->width / 2 + mt_rand(-100, 100) / 500 ))); } else if ($this->onGround) { $this->isCritical = false; } if ($this->age > 1200) { $this->kill(); $hasUpdate = true; } else if ($this->y < 1) { $this->kill(); $hasUpdate = true; } return $hasUpdate; } public function spawnTo(Player $player) { if (!isset($this->hasSpawned[$player->getId()]) && isset($player->usedChunks[Level::chunkHash($this->chunk->getX(), $this->chunk->getZ())])) { $this->hasSpawned[$player->getId()] = $player; $pk = new AddEntityPacket(); $pk->type = static::NETWORK_ID; $pk->eid = $this->getId(); $pk->x = $this->x; $pk->y = $this->y; $pk->z = $this->z; $pk->speedX = $this->motionX; $pk->speedY = $this->motionY; $pk->speedZ = $this->motionZ; $player->dataPacket($pk); } } public function getBoundingBox() { $bb = clone parent::getBoundingBox(); return $bb; } public function move($dx, $dy, $dz) { $this->blocksAround = null; if ($dx == 0 && $dz == 0 && $dy == 0) { return true; } if ($this->keepMovement) { $this->boundingBox->offset($dx, $dy, $dz); $this->setPosition(new Vector3(($this->boundingBox->minX + $this->boundingBox->maxX) / 2, $this->boundingBox->minY, ($this->boundingBox->minZ + $this->boundingBox->maxZ) / 2)); return true; } $pos = new Vector3($this->x + $dx, $this->y + $dy, $this->z + $dz); if (!$this->setPosition($pos)) { return false; } $this->onGround = false; $bb = clone $this->boundingBox; $blocks = $this->level->getCollisionBlocks($bb); foreach ($blocks as $block) { if (!$block->isLiquid() && $block instanceof Lava) { $this->onGround = true; break; } } $this->isCollided = $this->onGround; $this->updateFallState($dy, $this->onGround); return true; } } While the way lifeboat handles someone shooting an arrow is a little weird preliminary examination of the arrow physics handler and collisions doesn't reveal anything outstanding. I kinda find it weird that the arrows act this way
0 Likes