示例#1
0
文件: Quiz.cs 项目: epeshk/uLearn
        public override Component ToEdxComponent(string displayName, Slide slide, int componentIndex)
        {
            var items = Items.Select(x => new Choice {
                Correct = x.IsCorrect, Text = EdxTexReplacer.ReplaceTex(x.Description)
            }).ToArray();
            ChoiceResponse cr;

            if (Multiple)
            {
                var cg = new CheckboxGroup {
                    Label = Text, Direction = "vertical", Choices = items
                };
                cr = new ChoiceResponse {
                    ChoiceGroup = cg
                };
            }
            else
            {
                var cg = new MultipleChoiceGroup {
                    Label = Text, Type = "MultipleChoice", Choices = items
                };
                cr = new MultipleChoiceResponse {
                    ChoiceGroup = cg
                };
            }
            return(new MultipleChoiceComponent
            {
                UrlName = slide.NormalizedGuid + componentIndex,
                ChoiceResponse = cr,
                Title = EdxTexReplacer.ReplaceTex(Text)
            });
        }
示例#2
0
        public void SendChoiceResponse(Player sender, Card chosenCard, ChoiceResponse response)
        {
            string msg;

            switch (response)
            {
            case ChoiceResponse.Attacked:
                msg = "  - *" + chosenCard.Name + " has attacked, please choose another minion.*";
                break;

            case ChoiceResponse.NoEnemyMinionCanBeAttacked:
                msg = "  - *" + chosenCard.Name + " cannot attack anyone because they are disabled to be attacked.*";
                break;

            case ChoiceResponse.AttackAfterPuttingMinionsOnField:
                msg = "  - *You have put cards on field, you cannot choose a minion in hand to attack.*";
                break;

            case ChoiceResponse.FieldIsFull:
                msg = "  - *Field is full, you cannot put " + chosenCard.Name + " on field.*";
                break;

            case ChoiceResponse.DisabledToBeAttacked:
                msg = "  - *" + chosenCard.Name + " is disabled to be attack.*";
                break;

            case ChoiceResponse.LackOfCash:
                if (chosenCard is Minion)
                {
                    msg = "  - *You have no enough cash, you cannot put " + chosenCard.Name + " on field.*";
                }
                else
                {
                    msg = "  - *You have no enough cash, you cannot launch " + chosenCard.Name + ".*";
                }
                break;

            case ChoiceResponse.NotMyCard:
                msg = "  - *Please choose your card!*";
                break;

            case ChoiceResponse.NotCardOnEnemyField:
                msg = "  - *Please choose a card of your enemy!*";
                break;

            default:
                if (chosenCard is Player)
                {
                    msg = "  - " + sender.Name + " chooses a player: " + chosenCard.Name;
                }
                else
                {
                    msg = "  - " + sender.Name + " chooses a card: " + chosenCard.Player.Name + "'s " + chosenCard.Name;
                }
                break;
            }
            Console.WriteLine(msg);
        }
示例#3
0
        void HandlePlayerChoiceResponse(ChoiceResponse choiceResponse)
        {
            if (_player.PlayerTalkClass.GetInteractionData().PlayerChoiceId != choiceResponse.ChoiceID)
            {
                Log.outError(LogFilter.Player, $"Error in CMSG_CHOICE_RESPONSE: {GetPlayerInfo()} tried to respond to invalid player choice {choiceResponse.ChoiceID} (allowed {_player.PlayerTalkClass.GetInteractionData().PlayerChoiceId}) (possible packet-hacking detected)");
                return;
            }

            PlayerChoice playerChoice = Global.ObjectMgr.GetPlayerChoice(choiceResponse.ChoiceID);

            if (playerChoice == null)
            {
                return;
            }

            PlayerChoiceResponse playerChoiceResponse = playerChoice.GetResponse(choiceResponse.ResponseID);

            if (playerChoiceResponse == null)
            {
                Log.outError(LogFilter.Player, $"Error in CMSG_CHOICE_RESPONSE: {GetPlayerInfo()} tried to select invalid player choice response {choiceResponse.ResponseID} (possible packet-hacking detected)");
                return;
            }

            Global.ScriptMgr.OnPlayerChoiceResponse(GetPlayer(), (uint)choiceResponse.ChoiceID, (uint)choiceResponse.ResponseID);

            if (playerChoiceResponse.Reward.HasValue)
            {
                var reward = playerChoiceResponse.Reward.Value;
                if (reward.TitleId != 0)
                {
                    _player.SetTitle(CliDB.CharTitlesStorage.LookupByKey(reward.TitleId), false);
                }

                if (reward.PackageId != 0)
                {
                    _player.RewardQuestPackage((uint)reward.PackageId);
                }

                if (reward.SkillLineId != 0 && _player.HasSkill((SkillType)reward.SkillLineId))
                {
                    _player.UpdateSkillPro((uint)reward.SkillLineId, 1000, reward.SkillPointCount);
                }

                if (reward.HonorPointCount != 0)
                {
                    _player.AddHonorXP(reward.HonorPointCount);
                }

                if (reward.Money != 0)
                {
                    _player.ModifyMoney((long)reward.Money, false);
                }

                if (reward.Xp != 0)
                {
                    _player.GiveXP(reward.Xp, null, 0.0f);
                }

                foreach (PlayerChoiceResponseRewardItem item in reward.Items)
                {
                    List <ItemPosCount> dest = new();
                    if (_player.CanStoreNewItem(ItemConst.NullBag, ItemConst.NullSlot, dest, item.Id, (uint)item.Quantity) == InventoryResult.Ok)
                    {
                        Item newItem = _player.StoreNewItem(dest, item.Id, true, ItemEnchantmentManager.GenerateItemRandomBonusListId(item.Id), null, ItemContext.QuestReward, item.BonusListIDs);
                        _player.SendNewItem(newItem, (uint)item.Quantity, true, false);
                    }
                }

                foreach (PlayerChoiceResponseRewardEntry currency in reward.Currency)
                {
                    _player.ModifyCurrency((CurrencyTypes)currency.Id, currency.Quantity);
                }

                foreach (PlayerChoiceResponseRewardEntry faction in reward.Faction)
                {
                    _player.GetReputationMgr().ModifyReputation(CliDB.FactionStorage.LookupByKey(faction.Id), faction.Quantity);
                }
            }
        }
示例#4
0
 public void SendChoiceResponse(Player sender, Card chosenCard, ChoiceResponse response)
 {
     Debug.Log("Choice Response: " + response.ToString());
 }