public override void MinionEffects(Player player, Vector2 position, int damage, float knockBack, int number) { EntrogicPlayer ePlayer = player.GetModPlayer <EntrogicPlayer>(); for (int i = 0; i < ePlayer.CardReadyType.Length; i++) { bool hasCard = false; if (ePlayer.CardReadyType[i] == 0) { for (int j = 0; j < ePlayer.CardGraveType.Length; j++) { if (ePlayer.CardGraveType[j] != 0) { ePlayer.CardReadyType[i] = ePlayer.CardGraveType[j]; Item item = new Item(); item.SetDefaults(ePlayer.CardGraveType[j]); ModCard card = (ModCard)item.modItem; ePlayer.CardReadyCost[i] = card.costMana; ePlayer.CardGraveType[j] = 0; hasCard = true; break; } } if (!hasCard) { break; } } ePlayer.CardReadyCost[i]++; } }
public bool TheCardEffectThatICantDoInACSharpFile(Player player, EntrogicPlayer ePlayer, ModCard card) { if (ePlayer.IsDestroyNextCard_InnerRage) { ePlayer.IsDestroyNextCard_InnerRage = false; List <int> elementCardNumber = new List <int>(); for (int i = 0; i < ePlayer.CardReadyType.Length; i++) { if (ePlayer.CardReadyType[i] == 0) { continue; } Item item = new Item(); item.SetDefaults(ePlayer.CardReadyType[i]); ModItem modItem = item.modItem; ModCard modCard = (ModCard)modItem; if (modCard.series == CardSeriesID.Element) { elementCardNumber.Add(i); } } if (elementCardNumber.Count > 0) { int chooseCard = Main.rand.Next(0, elementCardNumber.Count); ePlayer.CardSetToGrave(ePlayer.CardHandType[number], number, true, 1, true); ePlayer.CardHandType[number] = ePlayer.CardReadyType[elementCardNumber[chooseCard]]; ePlayer.CardHandCost[number] = ePlayer.CardReadyCost[elementCardNumber[chooseCard]]; ePlayer.CardReadyType[elementCardNumber[chooseCard]] = 0; ePlayer.CardReadyCost[elementCardNumber[chooseCard]] = 0; return(false); } return(true); } return(true); }
public override void SpecialEffects(Player player, Vector2 position, int damage, float knockBack, int number, int packType, bool special, bool drawCard) { if (!special) { return; } EntrogicPlayer ePlayer = player.GetModPlayer <EntrogicPlayer>(); int gotCard = 0; List <int> organismCardNumber = new List <int>(); for (int i = 0; i < ePlayer.CardReadyType.Length; i++) { if (ePlayer.CardReadyType[i] == 0 || (i == number && packType == 2)) { continue; } Item it = new Item(); it.SetDefaults(ePlayer.CardReadyType[i]); ModItem modItem = it.modItem; ModCard modCard = (ModCard)modItem; if (modCard.series == CardSeriesID.Organism) { organismCardNumber.Add(i); } } if (organismCardNumber.Count > 0) { if (packType != 1) { for (int i = 0; i < ePlayer.CardHandType.Length; i++) { if (ePlayer.CardHandType[i] == 0) { int chooseCard = Main.rand.Next(0, organismCardNumber.Count); ePlayer.CardHandType[i] = ePlayer.CardReadyType[organismCardNumber[chooseCard]]; ePlayer.CardHandCost[i] = ePlayer.CardReadyCost[organismCardNumber[chooseCard]]; ePlayer.CardReadyType[organismCardNumber[chooseCard]] = 0; ePlayer.CardReadyCost[organismCardNumber[chooseCard]] = 0; gotCard++; break; } } } else { int chooseCard = Main.rand.Next(0, organismCardNumber.Count); ePlayer.CardHandType[number] = ePlayer.CardReadyType[organismCardNumber[chooseCard]]; ePlayer.CardHandCost[number] = ePlayer.CardReadyCost[organismCardNumber[chooseCard]]; ePlayer.CardReadyType[organismCardNumber[chooseCard]] = 0; ePlayer.CardReadyCost[organismCardNumber[chooseCard]] = 0; gotCard++; } } ePlayer.NewRecentCardMessage(Language.GetTextValue("Mods.Entrogic.CardDrawCard", item.Name, gotCard, Language.GetTextValue("Mods.Entrogic.SeriesOrganism"), ""), true); }
public override void UpdateArmorSet(Player player) { player.setBonus = "\n原版及本Mod的凝胶类召唤物只占0.75个召唤位\n所有生物系列卡牌费用为1\n无摔落伤害"; // 无摔落伤害 player.noFallDmg = true; // 所有生物系列卡牌费用为1 EntrogicPlayer ePlayer = EntrogicPlayer.ModPlayer(player); for (int a = 0; a < ePlayer.CardHandCost.Length; a++) { if (ePlayer.CardHandType[a] != 0) { Item item = new Item(); item.SetDefaults(ePlayer.CardHandType[a]); ModCard card = (ModCard)item.modItem; if (card.series == CardSeriesID.Organism) { ePlayer.CardHandCost[a] = Math.Min(1, ePlayer.CardHandCost[a]); } } } for (int a = 0; a < ePlayer.CardReadyCost.Length; a++) { if (ePlayer.CardReadyType[a] != 0) { Item item = new Item(); item.SetDefaults(ePlayer.CardReadyType[a]); ModCard card = (ModCard)item.modItem; if (card.series == CardSeriesID.Organism) { ePlayer.CardReadyCost[a] = Math.Min(1, ePlayer.CardReadyCost[a]); } } } // 凝胶类召唤物只占0.75个召唤位 float[] i = new float[1001]; foreach (Projectile proj in Main.projectile) { if (proj.minion && proj.active && proj.owner == player.whoAmI && proj.minionSlots > 0.75f && (proj.type == ProjectileID.BabySlime /* || proj.type == ProjectileType<Projectiles.衰落魔像.Stoneslime>()*/)) { i[proj.whoAmI] = proj.minionSlots; } } float MoreMinionSlots = 0; foreach (Projectile proj in Main.projectile) { if (i[proj.whoAmI] != 0) { MoreMinionSlots += i[proj.whoAmI] - 0.75f; } } player.maxMinions += (int)MoreMinionSlots; }
public override bool HaveDrawCard(Player player, int number, int a, ref int type, ref int cost) { NPC target = null; float distanceMax = 128000f; foreach (NPC npc in Main.npc) { if (npc.active && !npc.friendly) { // 计算与玩家的距离 float currentDistance = Vector2.Distance(npc.Center, Main.MouseWorld); if (currentDistance < distanceMax) { distanceMax = currentDistance; target = npc; } } } Item i = new Item(); i.SetDefaults(type); ModCard card = (ModCard)i.modItem; EntrogicPlayer ePlayer = EntrogicPlayer.ModPlayer(player); float power = 1f; if (ePlayer.GetHoldItem() != null) { power = ePlayer.GetHoldItem().shootSpeed * 0.8f; } if (target != null) { Vector2 vec = (target.Center - player.Center).ToRotation().ToRotationVector2() * i.shootSpeed; card.AttackEffects(player, i.shoot, player.Center, target.Center, vec.X, vec.Y, player.GetWeaponDamage(i), player.GetWeaponKnockback(i, 0.5f), i.shootSpeed + power); } else { card.AttackEffects(player, i.shoot, player.Center, player.Center, Main.rand.NextFloat(-10f, 10f), Main.rand.NextFloat(-10f, 10f), player.GetWeaponDamage(i), player.GetWeaponKnockback(i, 0.5f), i.shootSpeed + power); } return(true); }
public void Update() { if (Main.dedServ) { return; } Player clientPlayer = Main.LocalPlayer; EntrogicPlayer clientModPlayer = EntrogicPlayer.ModPlayer(clientPlayer); if (clientModPlayer.CardGameNPCIndex == -1) { return; } NPC npc = Main.npc[clientModPlayer.CardGameNPCIndex]; CardFightableNPC fightNPC = (CardFightableNPC)npc.modNPC; if (StartAnimation) { Vector2 TargetPosition = new Vector2(274f, 252f); AnimationTimer++; if (AnimationTimer <= 15f) { AnimationPosition = (TargetPosition - uiPosition) / 15f * AnimationTimer + uiPosition; } else if (AnimationTimer >= 25f) { // 出击 if (inventoryItem.modItem is ModCard) { ModCard card = (ModCard)inventoryItem.modItem; Vector2 drawPosition = new Vector2(274f, 314f) + new Vector2(17f, 28f); // 元件在UI中的位置 drawPosition = CardGameUI.ToPlaygroundPos(drawPosition); card.CardGameAttack(clientPlayer, npc, drawPosition, new Vector2(292f, 64f), PanelPos); clientModPlayer.CardGameType[Index] = 0; } StartAnimation = false; } } }
//**************************************************************************************************** //显示数据 private void showData() { DataTable dt = new ModCard().getSelect(); if (dt == null) { btnUpdate.Enabled = false; } else { btnUpdate.Enabled = true; int intIndex = 0; if (grd.Rows.Count > 0) { intIndex = grd.CurrentRow.Index; } grd.AutoGenerateColumns = false; grd.DataSource = dt; grd.Rows[intIndex].Cells[1].Selected = true; } }
public override void OnGloveUseCard(Player player) { EntrogicPlayer ePlayer = player.GetModPlayer <EntrogicPlayer>(); for (int i = 0; i < ePlayer.CardHandType.Length; i++) { if (ePlayer.CardHandType[i] == 0) { Item item = new Item(); item.SetDefaults(ItemType <ArcaneMissle>()); ModCard card = (ModCard)item.modItem; ePlayer.CardHandType[i] = ItemType <ArcaneMissle>(); ePlayer.CardHandCost[i] = card.costMana; if (Main.hardMode) { item.SetDefaults(ItemType <ArcaneMissle_Electromagnetism>()); card = (ModCard)item.modItem; ePlayer.CardHandType[i] = ItemType <ArcaneMissle_Electromagnetism>(); ePlayer.CardHandCost[i] = card.costMana; } break; } } }
internal void UseThisCard() { bool Active = false; if (Main.LocalPlayer.inventory[Main.LocalPlayer.selectedItem] != null && Main.LocalPlayer.inventory[Main.LocalPlayer.selectedItem].type != ItemID.None) { if (Main.LocalPlayer.inventory[Main.LocalPlayer.selectedItem].GetGlobalItem <EntrogicItem>().glove) { Active = true; } } if (Main.mouseItem != null && Main.mouseItem.type != ItemID.None) { if (Main.mouseItem.GetGlobalItem <EntrogicItem>().glove) { Active = true; } } if (!Active) { return; } Player player = Main.LocalPlayer; EntrogicPlayer ePlayer = player.GetModPlayer <EntrogicPlayer>(); CardBuffPlayer cPlayer = player.GetModPlayer <CardBuffPlayer>(); if (ePlayer.CardHandType[number] != 0) { Item item = new Item(); item.SetDefaults(ePlayer.CardHandType[number]); ModItem mItem = item.modItem; ModCard card = (ModCard)mItem; if (card.special || !card.CanUseCard() || !TheCardEffectThatICantDoInACSharpFile(player, ePlayer, card)) { return; } if (ePlayer.ManaLeft < ePlayer.CardHandCost[number]) { return; } if (ePlayer.IsTwoCards_CryptTreasure) { if (ePlayer.TwoCardsCount_CryptTreasure <= 0) { return; } ePlayer.TwoCardsCount_CryptTreasure--; } if (Main.mouseItem != null && Main.mouseItem.type != ItemID.None) // 手套使用物品 { if (Main.mouseItem.GetGlobalItem <EntrogicItem>().glove) { ((ModCard)Main.mouseItem.modItem).OnGloveUseCard(player); } } // 手套使用物品 if (player.inventory[player.selectedItem] != null && player.inventory[player.selectedItem].type != ItemID.None) // 手套使用物品 { if (player.inventory[player.selectedItem].GetGlobalItem <EntrogicItem>().glove) { ((ModCard)player.inventory[player.selectedItem].modItem).OnGloveUseCard(player); } } // 手套使用物品 if (card.minion) { card.MinionEffects(player, player.Center, item.damage, item.knockBack, number); ePlayer.ManaLeft -= ePlayer.CardHandCost[number]; goto End; } ePlayer.ManaLeft -= ePlayer.CardHandCost[number]; cPlayer.attackCardRemainingTimes = card.attackCardRemainingTimes; cPlayer.attackCardRemainingTimesMax = card.attackCardRemainingTimes; cPlayer.card = item; cPlayer.mCard = card; End: ePlayer.CardUseCount++; if (item.buffType != -1) { player.AddBuff(item.buffType, item.buffTime); } int manaHealAmount = (int)MathHelper.Min(card.healMana, EntrogicPlayer.ManaTrueMax - ePlayer.ManaLeft); ePlayer.ManaLeft += manaHealAmount; #region Draw Cards bool[] series = new bool[4]; bool[] style = new bool[3]; // 0-攻击, 1-仆从, 2-特殊 string eventMessageSeries = ""; string eventMessageStyle = ""; int amount = card.DrawCardAmount(player, number, ref series, ref style); #region Find String bool firstSeries = false; for (int i = 0; i < series.Length; i++) { if (!series[i]) { goto FindSeries; } } eventMessageSeries += Language.GetTextValue("Mods.Entrogic.All"); goto FindStyle; FindSeries: if (series[0]) { eventMessageSeries += Language.GetTextValue("Mods.Entrogic.SeriesNone"); firstSeries = true; } if (series[1]) { if (firstSeries) { eventMessageSeries += "、"; } eventMessageSeries += Language.GetTextValue("Mods.Entrogic.SeriesElement"); firstSeries = true; } if (series[2]) { if (firstSeries) { eventMessageSeries += "、"; } eventMessageSeries += Language.GetTextValue("Mods.Entrogic.SeriesOrganism"); firstSeries = true; } if (series[3]) { if (firstSeries) { eventMessageSeries += "、"; } eventMessageSeries += Language.GetTextValue("Mods.Entrogic.SeriesUndead"); } FindStyle: for (int i = 0; i < style.Length; i++) { if (!style[i]) { goto StillFindingStyle; } } goto EndFinding; StillFindingStyle: if (style[0]) { eventMessageStyle += Language.GetTextValue("Mods.Entrogic.CardAttack"); } if (style[1] || style[2]) { eventMessageStyle += Language.GetTextValue("Mods.Entrogic.CardMinion"); } EndFinding: #endregion if (amount != 0 && ePlayer.LibNum > 0) { int cardGot = 0; for (int a = 0; a < amount; a++) { List <int> canChooseCards = new List <int>(); for (int i = 0; i < ePlayer.CardReadyType.Length; i++) { if (ePlayer.CardReadyType[i] == 0) { continue; } Item iI = new Item(); iI.SetDefaults(ePlayer.CardReadyType[i]); ModCard cI = (ModCard)iI.modItem; bool meetsRequirements = false; if (!cI.minion && !cI.special && style[0] || cI.minion && !cI.special && style[1] || !cI.minion && cI.special && style[2]) { for (int j = 0; j < series.Length; j++) { if (cI.series == j && series[j]) { meetsRequirements = true; break; } } } if (meetsRequirements) { canChooseCards.Add(i); } } if (canChooseCards.Count > 0) { if (a != 0) { for (int i = 0; i < ePlayer.CardHandType.Length; i++) { if (ePlayer.CardHandType[i] == 0) { int chooseCard = Main.rand.Next(0, canChooseCards.Count); int type = ePlayer.CardReadyType[canChooseCards[chooseCard]], cost = ePlayer.CardReadyCost[canChooseCards[chooseCard]]; if (card.HaveDrawCard(player, number, a, ref type, ref cost)) { cardGot++; ePlayer.CardHandType[i] = type; ePlayer.CardHandCost[i] = cost; ePlayer.CardReadyType[canChooseCards[chooseCard]] = 0; ePlayer.CardReadyCost[canChooseCards[chooseCard]] = 0; } break; } } } else { int chooseCard = Main.rand.Next(0, canChooseCards.Count); int type = ePlayer.CardReadyType[canChooseCards[chooseCard]], cost = ePlayer.CardReadyCost[canChooseCards[chooseCard]]; if (!card.HaveDrawCard(player, number, a, ref type, ref cost)) { continue; } ePlayer.CardSetToGrave(ePlayer.CardHandType[number], number, false, 1, true); cardGot++; ePlayer.CardHandType[number] = type; ePlayer.CardHandCost[number] = cost; ePlayer.CardReadyType[canChooseCards[chooseCard]] = 0; ePlayer.CardReadyCost[canChooseCards[chooseCard]] = 0; } } } string text = Language.GetTextValue("Mods.Entrogic.CardDrawCard", item.Name, cardGot, eventMessageSeries, eventMessageStyle); if (!card.HaveDrawCardMessage(player, ref text, cardGot, eventMessageSeries, eventMessageStyle, number)) { return; } ePlayer.NewRecentCardMessage(text, true); return; } #endregion if (!card.NoUseNormalDelete) { int type = ePlayer.CardHandType[number]; ePlayer.CardHandType[number] = 0; ePlayer.CardSetToGrave(type, number); ePlayer.CardHandCost[number] = 0; } } }
public override void Click(UIMouseEvent evt) { EntrogicPlayer player = Main.LocalPlayer.GetModPlayer <EntrogicPlayer>(); Item mouseItem = Main.mouseItem; if (mouseItem.type != ItemID.None) // 特殊判断:如果手上物品不是卡牌就return { if (!mouseItem.GetGlobalItem <EntrogicItem>().card) { return; } } // 特殊判断:如果手上物品不是卡牌就return if (mouseItem.type == ItemID.None && player.CardType[number] == 0) { return; } if (mouseItem.type != ItemID.None) { ModCard card = (ModCard)mouseItem.modItem; if (card.rare == CardRareID.GrandUnified) { for (int i = 0; i < player.CardType.Length; i++) { if (player.CardType[i] != 0) { Item item = new Item(); item.SetDefaults(player.CardType[i]); ModCard mCard = (ModCard)item.modItem; if (mCard.rare == CardRareID.GrandUnified) { return; } } } } else { List <int> maxStacks = new List <int> { 6, 3, 2, 1 }; int theAmountOfCardsLikeMe = 0; for (int i = 0; i < player.CardType.Length; i++) { if (player.CardType[i] != 0) { Item item = new Item(); item.SetDefaults(player.CardType[i]); ModCard mCard = (ModCard)item.modItem; if (player.CardType[i] == mouseItem.type) { theAmountOfCardsLikeMe++; if (theAmountOfCardsLikeMe >= maxStacks[mCard.rare]) { return; } } } } } } Main.PlaySound(SoundID.Grab, -1, -1, 1, 1f, 0.0f); if (player.CardType[number] != 0 && mouseItem.type == ItemID.None) { Item item = new Item(); item.SetDefaults(player.CardType[number]); Main.mouseItem = item; player.CardType[number] = 0; return; } if (!mouseItem.GetGlobalItem <EntrogicItem>().card || mouseItem.GetGlobalItem <EntrogicItem>().glove) { return; } else if (player.CardType[number] == mouseItem.type && mouseItem.stack < mouseItem.maxStack) { player.CardType[number] = 0; Main.mouseItem.stack++; return; } if (player.CardType[number] != 0) { if (mouseItem.stack <= 1) { Item item = new Item(); item.SetDefaults(player.CardType[number]); player.CardType[number] = mouseItem.type; Main.mouseItem = item; } } else { Main.mouseItem.stack--; player.CardType[number] = mouseItem.type; } }
//**************************************************************************************************** //加载 private void FrmCardEdit_Load(object sender, EventArgs e) { if (intId == 0) { ParseCombobox.setUserLevel(cmbUserLevelId); ParseCombobox.setRegisterType(cmbRegisterTypeId); ParseCombobox.setSex(cmbSex); ParseCombobox.setCertificateType(cmbCertificateTypeId); ParseCombobox.setNation(cmbNation); ParseCombobox.setUserType(cmbUserTypeId); ParseCombobox.setJobType(cmbJobTypeId); ParseCombobox.setBlood(cmbBlood); ParseCombobox.setMarital(cmbMarital); ParseCombobox.setRelation(cmbLinkmanRelationId); ParseCombobox.setUserSource(cmbUserSourceId); ParseCombobox.setWorker(cmbHospitalWorkerId); ParseCombobox.setWorker(cmbReserverWorkerId); ParseCombobox.setDepartment(cmbReserverDepartmentId); } else { DataRow dr = new ModCard().getFind(intId); if (dr == null) { Function.showMessage("记录为空"); } else { txtCardCode.Text = dr["cardCode"].ToString(); txtUserCode.Text = dr["userCode"].ToString(); txtRealname.Text = dr["realname"].ToString(); txtCertificateCode.Text = dr["certificateCode"].ToString(); dtpBirthday.Value = Function.getDate(dr["birthday"]); nudAge.Value = Convert.ToInt32(dr["age"].ToString()); txtTel.Text = dr["tel"].ToString(); txtPost.Text = dr["post"].ToString(); txtLinkman.Text = dr["linkman"].ToString(); txtLinkmanTel.Text = dr["linkmanTel"].ToString(); //Province //City //County txtAddress.Text = dr["address"].ToString(); txtHospitalWorkerContent.Text = dr["hospitalWorkerContent"].ToString(); txtReserverCode.Text = dr["reserverCode"].ToString(); txtAllergicHistory.Text = dr["allergicHistory"].ToString(); txtContent.Text = dr["content"].ToString(); ParseCombobox.setUserLevel(cmbUserLevelId, dr["userLevelId"]); ParseCombobox.setRegisterType(cmbRegisterTypeId, dr["registerTypeId"]); ParseCombobox.setSex(cmbSex, dr["sex"]); ParseCombobox.setCertificateType(cmbCertificateTypeId, dr["certificateTypeId"]); ParseCombobox.setNation(cmbNation, dr["nation"]); ParseCombobox.setUserType(cmbUserTypeId, dr["userTypeId"]); ParseCombobox.setJobType(cmbJobTypeId, dr["jobTypeId"]); ParseCombobox.setBlood(cmbBlood, dr["blood"]); ParseCombobox.setMarital(cmbMarital, dr["marital"]); ParseCombobox.setRelation(cmbLinkmanRelationId, dr["linkmanRelationId"]); ParseCombobox.setUserSource(cmbUserSourceId, dr["userSourceId"]); ParseCombobox.setWorker(cmbHospitalWorkerId, dr["hospitalWorkerId"]); ParseCombobox.setWorker(cmbReserverWorkerId, dr["reserverWorkerId"]); ParseCombobox.setDepartment(cmbReserverDepartmentId, dr["reserverDepartmentId"]); } } }
public override void MinionEffects(Player player, Vector2 position, int damage, float knockBack, int number) { EntrogicPlayer ePlayer = player.GetModPlayer <EntrogicPlayer>(); int[] StayForWhile = new int[250]; while (true) { for (int j = 0; j < ePlayer.CardReadyType.Length; j++) { if (ePlayer.CardReadyType[j] != 0 && Main.rand.NextBool(4)) { bool hasGrid = false; for (int i = 0; i < ePlayer.CardHandType.Length; i++) { if (ePlayer.CardHandType[i] == 0) { ePlayer.CardHandType[i] = ePlayer.CardReadyType[j]; ePlayer.CardHandCost[i] = ePlayer.CardReadyCost[j] - 1; ePlayer.CardHandCost[i] = Math.Max(ePlayer.CardHandCost[i], 0); ePlayer.CardReadyType[j] = 0; ePlayer.CardReadyCost[j] = 0; hasGrid = true; break; } } if (!hasGrid) { StayForWhile[j] = ePlayer.CardReadyType[j]; ePlayer.CardReadyType[j] = 0; ePlayer.CardReadyCost[j] = 0; } } } if (ePlayer.LibNum <= 0) { break; } } for (int i = 0; i < ePlayer.CardReadyType.Length; i++) { if (ePlayer.CardReadyType[i] == 0) { for (int j = 0; j < ePlayer.CardGraveType.Length; j++) { if (ePlayer.CardGraveType[j] != 0) { ePlayer.CardReadyType[i] = ePlayer.CardGraveType[j]; Item item = new Item(); item.SetDefaults(ePlayer.CardGraveType[j]); ModCard card = (ModCard)item.modItem; ePlayer.CardReadyCost[i] = card.costMana; ePlayer.CardGraveType[j] = 0; break; } } } } for (int i = 0; i < ePlayer.CardGraveType.Length; i++) { if (ePlayer.CardGraveType[i] == 0) { for (int j = 0; j < StayForWhile.Length; j++) { if (StayForWhile[j] != 0) { ePlayer.CardGraveType[i] = StayForWhile[j]; StayForWhile[j] = 0; break; } } } } }
internal static bool AllowPutin(Item inventoryItem, Item itemToPut, int Index) { EntrogicPlayer player = Main.LocalPlayer.GetModPlayer <EntrogicPlayer>(); if (itemToPut.type != ItemID.None) { if (!itemToPut.GetGlobalItem <EntrogicItem>().card) { return(false); } } // 特殊判断:如果手上物品不是卡牌就return if (itemToPut.type == ItemID.None && player.CardType[Index] == 0) { return(false); } if (itemToPut.type != ItemID.None) { if (!itemToPut.GetGlobalItem <EntrogicItem>().card || itemToPut.GetGlobalItem <EntrogicItem>().glove) { return(false); } ModCard card = (ModCard)itemToPut.modItem; if (card.rare == CardRareID.GrandUnified) { // 如果本框牌也是大统一,让你过 if (inventoryItem.type != ItemID.None && inventoryItem.GetGlobalItem <EntrogicItem>().card&& ((ModCard)inventoryItem.modItem).rare == CardRareID.GrandUnified) { return(true); } for (int i = 0; i < player.CardType.Length; i++) { if (player.CardType[i] != 0) { Item item = new Item(); item.SetDefaults(player.CardType[i]); ModCard mCard = (ModCard)item.modItem; if (mCard.rare == CardRareID.GrandUnified) { return(false); } } } } else { List <int> maxStacks = new List <int> { 6, 3, 2, 1 }; int theAmountOfCardsLikeMe = 0; for (int i = 0; i < player.CardType.Length; i++) { if (player.CardType[i] != 0) { Item item = new Item(); item.SetDefaults(player.CardType[i]); ModCard mCard = (ModCard)item.modItem; if (player.CardType[i] == itemToPut.type) { theAmountOfCardsLikeMe++; if (theAmountOfCardsLikeMe >= maxStacks[mCard.rare]) { return(false); } } } } } } return(true); }