public override void OnUse(Room room, CardUseStruct card_use) { Player source = card_use.From; List <Player> targets = new List <Player>(); if (card_use.To.Count == 0) { List <Player> all_players = room.GetOtherPlayers(card_use.From); foreach (Player player in all_players) { Skill skill = RoomLogic.IsProhibited(room, source, player, card_use.Card); if (skill != null) { skill = Engine.GetMainSkill(skill.Name); LogMessage log = new LogMessage { Type = "#SkillAvoid", From = player.Name, Arg = skill.Name, Arg2 = Name }; room.SendLog(log); if (RoomLogic.PlayerHasShownSkill(room, player, skill)) { room.NotifySkillInvoked(player, skill.Name); GeneralSkin gsk = RoomLogic.GetGeneralSkin(room, player, skill.Name); string genral = gsk.General; int skin_id = gsk.SkinId; string skill_name = skill.Name; int audio = -1; skill.GetEffectIndex(room, player, card_use.Card, ref audio, ref skill_name, ref genral, ref skin_id); if (audio >= -1) { room.BroadcastSkillInvoke(skill_name, "male", audio, genral, skin_id); } } else { int audio = -1; string skill_name = skill.Name; string genral = string.Empty; int skin_id = 0; skill.GetEffectIndex(room, null, card_use.Card, ref audio, ref skill_name, ref genral, ref skin_id); } } else { targets.Add(player); } } } else { targets = card_use.To; } card_use.To = targets; base.OnUse(room, card_use); }
public override bool Effect(TriggerEvent triggerEvent, Room room, Player player, ref object data, Player ask_who, TriggerStruct info) { if (triggerEvent == TriggerEvent.EventPhaseStart) { GeneralSkin gsk = RoomLogic.GetGeneralSkin(room, player, Name, info.SkillPosition); room.SendCompulsoryTriggerLog(ask_who, Name, true); room.BroadcastSkillInvoke(Name, "male", 1, gsk.General, gsk.SkinId); room.DrawCards(ask_who, 2, Name); } else { room.AskForDiscard(ask_who, Name, 1, 1, false, true, "@moqu", false, info.SkillPosition); GeneralSkin gsk = RoomLogic.GetGeneralSkin(room, player, Name, info.SkillPosition); room.BroadcastSkillInvoke(Name, "male", 2, gsk.General, gsk.SkinId); room.SendCompulsoryTriggerLog(ask_who, Name, true); } return(false); }
public override void OnUse(Room room, CardUseStruct card_use) { GeneralSkin gsk = RoomLogic.GetGeneralSkin(room, card_use.From, "shefu", card_use.Card.SkillPosition); room.BroadcastSkillInvoke("shefu", "male", 1, gsk.General, gsk.SkinId); int id = card_use.Card.GetEffectiveId(); string card_name = card_use.Card.UserString; room.AddToPile(card_use.From, "ambush", id, false); card_use.From.SetTag(string.Format("shefu_{0}", card_name), id); LogMessage log = new LogMessage { Type = "$ShefuRecord", From = card_use.From.Name, Card_str = id.ToString(), Arg = card_name }; room.SendLog(log, card_use.From); }
public override void OnUse(Room room, CardUseStruct card_use) { if (card_use.To.Count == 0) { DoRecast(room, card_use); } else { Player player = card_use.From; CardUseStruct use = new CardUseStruct(card_use.Card, player, new List <Player>()); List <Player> targets = new List <Player>(); Game3v3Camp camp = card_use.To[0].Camp; foreach (Player p in room.GetAlivePlayers()) { if (player.Camp == camp && p.Camp == camp && p.Chained) { targets.Add(p); } else if (player.Camp != camp && p.Camp == camp && !p.Chained) { targets.Add(p); } } foreach (Player p in targets) { Skill skill = Engine.IsProhibited(room, player, p, card_use.Card); if (skill != null) { skill = Engine.GetMainSkill(skill.Name); LogMessage log = new LogMessage { Type = "#SkillAvoid", From = p.Name, Arg = skill.Name, Arg2 = Name }; room.SendLog(log); if (RoomLogic.PlayerHasShownSkill(room, p, skill)) { room.NotifySkillInvoked(p, skill.Name); GeneralSkin gsk = RoomLogic.GetGeneralSkin(room, p, skill.Name); string genral = gsk.General; int skin_id = gsk.SkinId; string skill_name = skill.Name; int audio = -1; skill.GetEffectIndex(room, p, card_use.Card, ref audio, ref skill_name, ref genral, ref skin_id); if (audio >= -1) { room.BroadcastSkillInvoke(skill_name, "male", audio, genral, skin_id); } } } else { use.To.Add(p); } } room.SortByActionOrder(ref use); base.OnUse(room, use); } }
public override void OnNullified(Room room, Player target, WrappedCard card) { RoomThread thread = room.RoomThread; string card_str = RoomLogic.CardToString(room, card); bool move = false; Player p = null; if (movable) { List <Player> players = new List <Player>(); List <Player> count_players = new List <Player>(room.Players); Player starter = target; int index = count_players.IndexOf(starter); for (int i = index + 1; i < count_players.Count; i++) { if (count_players[i].Alive) { players.Add(count_players[i]); } } for (int i = 0; i <= index; i++) { if (count_players[i].Alive) { players.Add(count_players[i]); } } foreach (Player player in players) { if (RoomLogic.PlayerContainsTrick(room, player, Name) || !player.JudgingAreaAvailable) { continue; } Skill skill = RoomLogic.IsProhibited(room, null, player, card); if (skill != null) { skill = Engine.GetMainSkill(skill.Name); LogMessage log = new LogMessage { Type = "#SkillAvoid", From = player.Name, Arg = skill.Name, Arg2 = Name }; room.SendLog(log); if (RoomLogic.PlayerHasShownSkill(room, player, skill)) { room.NotifySkillInvoked(player, skill.Name); GeneralSkin gsk = RoomLogic.GetGeneralSkin(room, player, skill.Name); string genral = gsk.General; int skin_id = gsk.SkinId; string skill_name = skill.Name; int audio = -1; skill.GetEffectIndex(room, player, card, ref audio, ref skill_name, ref genral, ref skin_id); if (audio >= -1) { room.BroadcastSkillInvoke(skill_name, "male", audio, genral, skin_id); } } continue; } //if (player.HasFlag(card_str + "_delay_trick_cancel")) continue; /* * CardUseStruct use = new CardUseStruct(room.GetCard(card.GetEffectiveId()), null, player) * { * EffectCount = new List<CardBasicEffect> { FillCardBasicEffct(room, player) } * }; * object data = use; * thread.Trigger(TriggerEvent.TargetConfirming, room, player, ref data); * CardUseStruct new_use = (CardUseStruct)data; * if (new_use.To.Count == 0) * { * p = player; * player.SetFlags(card_str + "_delay_trick_cancel"); * break; * } * * thread.Trigger(TriggerEvent.TargetChosen, room, null, ref data); * thread.Trigger(TriggerEvent.TargetConfirmed, room, player, ref data); */ CardMoveReason reason = new CardMoveReason(MoveReason.S_REASON_TRANSFER, string.Empty) { Card = card }; room.MoveCardTo(card, null, player, Place.PlaceDelayedTrick, reason, true); move = true; break; } } if (p != null) { OnNullified(room, p, card); } else if (!move) { //foreach (Player player in room.GetAllPlayers()) //if (player.HasFlag(RoomLogic.CardToString(room, card) + "_delay_trick_cancel")) //player.SetFlags(string.Format("-{0}{1}", card_str, "_delay_trick_cancel")); CardMoveReason reason = new CardMoveReason(MoveReason.S_REASON_NATURAL_ENTER, string.Empty); room.MoveCardTo(card, null, Place.DiscardPile, reason, true); } }