Skip to content

Commit

Permalink
3.3.7
Browse files Browse the repository at this point in the history
머더 미스터리
  - 겹쳐있는 금을 주울 때 금이 여러 개 얻어지도록 변경
  - 암살자(머더 직업)가 시민을 죽일 때 머더 팀원에게만 킬 메시지가 공유되도록 버프
  - 의사(시민 직업)가 범위 내에서 시민만 살리도록 버프, 및 범위와 지속 시간 버프
  - MurderEvent 생성자 private에서 public으로 변경

Signed-off-by: Daybreak365 <[email protected]>
  • Loading branch information
Daybreak365 committed Aug 14, 2023
1 parent b9676c9 commit 27dd25b
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -442,8 +442,9 @@ private void onPickupItem(EntityPickupItemEvent e) {
e.setCancelled(true);
Participant participant = getParticipant(e.getEntity().getUniqueId());
if (getGold(participant) < 64 && e.getItem().getItemStack().isSimilar(Items.GOLD.getStack())) {
final int amount = e.getItem().getItemStack().getAmount();
e.getItem().remove();
addGold(participant);
addGold(participant, amount);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ public static HandlerList getHandlerList() {
private final AbstractMurderer murderer;
private final Participant target;

private MurderEvent(final AbstractMurderer murderer, final Participant target) {
public MurderEvent(final AbstractMurderer murderer, final Participant target) {
this.murderer = murderer;
this.target = target;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,14 @@
import daybreak.abilitywar.game.list.murdermystery.MurderMystery;
import daybreak.abilitywar.game.list.murdermystery.MurderMystery.ArrowKillEvent;
import daybreak.abilitywar.game.list.murdermystery.ability.AbstractInnocent;
import daybreak.abilitywar.game.list.murdermystery.ability.AbstractMurderer;
import daybreak.abilitywar.game.list.murdermystery.ability.AbstractMurderer.MurderEvent;
import daybreak.abilitywar.game.module.DeathManager;
import daybreak.abilitywar.utils.base.color.RGB;
import daybreak.abilitywar.utils.base.concurrent.TimeUnit;
import daybreak.abilitywar.utils.base.math.geometry.Circle;
import daybreak.abilitywar.utils.base.minecraft.nms.NMS;
import daybreak.abilitywar.utils.library.ParticleLib;
import daybreak.abilitywar.utils.base.color.RGB;
import org.bukkit.Location;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
Expand All @@ -28,8 +29,8 @@

@AbilityManifest(name = "시민: 의사", rank = Rank.SPECIAL, species = Species.HUMAN, explain = {
"금 우클릭으로 금 8개를 소모해 활과 화살을 얻을 수 있습니다.",
"금 좌클릭으로 금 6개를 소모해 2.5초간 y에 상관 없이 주변 5칸 이내에서",
"플레이어가 죽지 못하게 합니다."
"금 좌클릭으로 금 6개를 소모해 4초간 y에 상관 없이 주변 7칸 이내에서",
"시민이 죽지 못하게 합니다."
})
public class Doctor extends AbstractInnocent {

Expand Down Expand Up @@ -67,34 +68,40 @@ protected void onEnd() {

@SubscribeEvent
private void onArrowKill(final ArrowKillEvent e) {
if (duration.isRunning() && e.getTarget().getPlayer().getLocation().distanceSquared(getPlayer().getLocation()) <= 25) {
e.setCancelled(true);
new BukkitRunnable() {
@Override
public void run() {
NMS.broadcastEntityEffect(e.getTarget().getPlayer(), (byte) 35);
}
}.runTaskLater(AbilityWar.getPlugin(), 3L);
if (duration.isRunning() && e.getTarget().getPlayer().getLocation().distanceSquared(getPlayer().getLocation()) <= 49) {
final Participant target = getGame().getParticipant(e.getTarget().getPlayer());
if (!(target.getAbility() instanceof AbstractMurderer)) {
e.setCancelled(true);
new BukkitRunnable() {
@Override
public void run() {
NMS.broadcastEntityEffect(e.getTarget().getPlayer(), (byte) 35);
}
}.runTaskLater(AbilityWar.getPlugin(), 3L);
}
}
}

@SubscribeEvent
private void onArrowKill(final MurderEvent e) {
if (duration.isRunning() && e.getTarget().getPlayer().getLocation().distanceSquared(getPlayer().getLocation()) <= 25) {
e.setCancelled(true);
new BukkitRunnable() {
@Override
public void run() {
NMS.broadcastEntityEffect(e.getTarget().getPlayer(), (byte) 35);
}
}.runTaskLater(AbilityWar.getPlugin(), 3L);
if (duration.isRunning() && e.getTarget().getPlayer().getLocation().distanceSquared(getPlayer().getLocation()) <= 49) {
final Participant target = e.getTarget();
if (!(target.getAbility() instanceof AbstractMurderer)) {
e.setCancelled(true);
new BukkitRunnable() {
@Override
public void run() {
NMS.broadcastEntityEffect(e.getTarget().getPlayer(), (byte) 35);
}
}.runTaskLater(AbilityWar.getPlugin(), 3L);
}
}
}

private static final Circle CIRCLE = Circle.of(5, 60);
private static final RGB color = RGB.of(0, 0, 0);

private final Duration duration = new Duration(15) {
private final Duration duration = new Duration(20) {
@Override
protected void onDurationProcess(int count) {
for (final Location loc : CIRCLE.toLocations(getPlayer().getLocation()).floor(getPlayer().getLocation().getY())) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,26 @@
import daybreak.abilitywar.game.list.murdermystery.MurderMystery;
import daybreak.abilitywar.game.list.murdermystery.ability.AbstractMurderer;
import daybreak.abilitywar.utils.base.concurrent.TimeUnit;
import daybreak.abilitywar.utils.base.language.korean.KoreanUtil;
import daybreak.abilitywar.utils.base.language.korean.KoreanUtil.Josa;
import daybreak.abilitywar.utils.base.math.FastMath;
import daybreak.abilitywar.utils.base.math.LocationUtil;
import daybreak.abilitywar.utils.base.minecraft.nms.NMS;
import daybreak.abilitywar.utils.library.ParticleLib;
import daybreak.abilitywar.utils.library.SoundLib;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.EventPriority;
import org.bukkit.event.block.Action;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerToggleSneakEvent;

@AbilityManifest(name = "머더: 암살자", rank = Rank.SPECIAL, species = Species.HUMAN, explain = {
"모든 시민을 죽이세요!",
"살인자의 검으로 상대를 죽일 경우 5초간 투명 효과를 받습니다.",
"금 우클릭으로 금 8개를 소모해 활과 화살을 얻을 수 있습니다.",
"암살자가 시민을 죽일 때 킬 메시지가 뜨지 않습니다.",
"웅크리면 투명해지고, 웅크리지 않으면 불투명해집니다."
})
public class AssassinMurderer extends AbstractMurderer {
Expand Down Expand Up @@ -95,6 +101,19 @@ private void onInteract(PlayerInteractEvent e) {
}
}

@SubscribeEvent(eventPriority = EventPriority.HIGHEST)
private void onPlayerDeath(final PlayerDeathEvent e) {
final Player dead = e.getEntity();
if (getPlayer().equals(dead.getKiller())) {
e.setDeathMessage(null);
for (Participant participant : getGame().getParticipants()) {
if (participant.getAbility() instanceof AbstractMurderer) {
participant.getPlayer().sendMessage("§8" + dead.getName() + "§7" + KoreanUtil.getJosa(dead.getName(), Josa.이가) + " 죽었습니다.");
}
}
}
}

@SubscribeEvent(onlyRelevant = true)
private void onToggleSneak(final PlayerToggleSneakEvent e) {
if (e.isSneaking() && !skill.isRunning() && !cooldown.isRunning()) {
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
<java.version>1.8</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<revision>3.3.6</revision>
<revision>3.3.7</revision>
<bukkit-api.version>1.15.2-R0.1-SNAPSHOT</bukkit-api.version>
<guava.version>30.1-jre</guava.version>
<kotlin.version>1.5.20</kotlin.version>
Expand Down

0 comments on commit 27dd25b

Please sign in to comment.