public override void step() { if (destroyable == false) { if (minionState == MinionState.ALIVE) { if (stats.health <= 0) { onDeath(); } else { walk(); if (remainingSpawnCount > 0) { // gerekli dead minionlari sec. ICollection <Minion> targets = minionSelector.selectTargetsFromBoard(position.board, getWorldPosition(), requiredDeadCount, 0, DEAD_CAPTURE_RANGE, MinionStateSelection.DEAD); foreach (Minion minion in targets) { minion.onDestroy(); // oluleri yerden temizle. } requiredDeadCount -= targets.Count; if (targets.Count != 0) { Messages.OutgoingMessages.Game.GMinion_FrankenScientist_stackChanged.sendMessage(this.position.board.player.game.players, this, REQUIRED_DEAD_MINION_COUNT - requiredDeadCount); } if (requiredDeadCount == 0) // yeteri kadar olu topladik mi? { ScrapGolemMinion fish = createNewGolem(game, ownerPlayer); position.board.AddMinionSpecificPosition(fish, position.pathPosition, false); fish.moveCustomDistance((new Random().Next(101)) / 200f - 0.25f); Science_Wars_Server.Messages.OutgoingMessages.Game.GMinion_FrankenScientist_spawn.sendMessage(game.players, this, fish); remainingSpawnCount--; requiredDeadCount = REQUIRED_DEAD_MINION_COUNT; Messages.OutgoingMessages.Game.GMinion_FrankenScientist_stackChanged.sendMessage(this.position.board.player.game.players, this, 0); } } } } else if (minionState == MinionState.DEAD && isReadyToDestroy()) // minionState i tekrar kontrol ettim. ne olur ne olmaz yeni bir state eklersek patlamasin. { onDestroy(); } } }
public static void sendMessage(ICollection<Player> receiverPlayers, FrankenScientistMinion parentMinion, ScrapGolemMinion spawnedMinion) { RawMessage msg = new RawMessage(); msg.putInt("id", TypeIdGenerator.getMessageId(typeof(GMinion_FrankenScientist_spawn))); if (receiverPlayers != null && receiverPlayers.Count != 0) { msg.putInt("iid", parentMinion.instanceId); if(spawnedMinion.ownerPlayer != null) msg.putInt("uid", spawnedMinion.ownerPlayer.id); else msg.putInt("uid", -1); msg.putInt("sid", spawnedMinion.instanceId); msg.putInt("bid", spawnedMinion.position.board.instanceId); msg.putInt("cid", spawnedMinion.position.pathPosition.pointIndex); msg.putFloat("t", spawnedMinion.position.pathPosition.ratio); foreach (var receiverPlayer in receiverPlayers) receiverPlayer.user.session.client.SendMessage(msg); } }