Пример #1
0
    public void startQuest(Quest quest)
    {
        QuestJson qJson = lookUpQuest(quest);

        if (qJson != null)
        {
            quest.start(qJson);
        }
    }
Пример #2
0
    public void checkValidQuest(Quest quest, int connectionId, PlayerServer playerServer)
    {
        QuestJson qJson = lookUpQuest(quest);

        if (qJson != null)
        {
            quest.start(qJson);
            server.addOrUpdateQuestStatusToDatabase(quest, playerServer, true, PacketTypes.QUEST_START);
            playerServer.questList.Add(quest);
        }
    }
Пример #3
0
        public Quest.Quest AddQuest(QuestJson quest)
        {
            if (_quests.ContainsKey(quest.Id))
            {
                return(null);
            }
            var temp = new Quest.Quest
            {
                Id        = quest.Id,
                QuestData = quest,
            };

            return(_quests.TryAdd(quest.Id, temp) ? temp : null);
        }
Пример #4
0
    public void start(/*int[] requirementData,*/ QuestJson questJson)
    {
        //this.requirementData = requirementData;
        this.questJson   = questJson;
        this.description = questJson.description;
        this.status      = e_QuestStatus.STARTED;

        for (int i = 0; i < questJson.completionData.completionId.Count; i++)
        {
            if (isCompletionIdMobId(i))
            {
                Debug.Log("MOB_KILLS: " + mobKills);
                this.mobKills.Add(questJson.completionData.completionId[i], 0);
            }
            if (isCompletionIdItemId(i))
            {
                setItemCount(questJson.completionData.completionId[i], 0);
            }
        }
        this.expReward = questJson.expReward;
        checkForCompletion();
    }
Пример #5
0
        public override void Convert()
        {
            using (var stream = new BinaryReader(File.OpenRead(Path), Encode))
            {
                var    size = stream.BaseStream.Length;
                ushort i    = 0;

                var list = new List <QuestJson>();
                // 2696 bytes each
                while (stream.BaseStream.Position < size)
                {
                    var temp = new QuestJson();
                    temp.LoopId           = i;
                    temp.Id               = stream.ReadUInt16();
                    temp.Unk              = stream.ReadInt16();
                    temp.StartNpc         = stream.ReadInt32();
                    temp.EndNpc           = stream.ReadInt32();
                    temp.Unk2             = stream.ReadInt32();
                    temp.Name             = Encode.GetString(stream.ReadBytes(64)).Trim('\u0000');
                    temp.StartDialog      = stream.ReadInt16();
                    temp.UnfinishedDialog = stream.ReadInt16();
                    temp.EndDialog        = stream.ReadInt16();
                    temp.Summary          = stream.ReadInt16();
                    stream.ReadBytes(1155);
                    temp.Level         = stream.ReadByte();
                    temp.Unk3          = stream.ReadInt16();
                    temp.Unk4          = stream.ReadInt16();
                    temp.Unk5          = stream.ReadInt32();
                    temp.Unk6          = stream.ReadInt32();
                    temp.PreConditions = new List <QuestData>();
                    temp.Requires      = new List <QuestData>();
                    temp.Rewards       = new List <QuestData>();
                    temp.Removes       = new List <QuestData>();
                    temp.Choices       = new List <QuestData>();
                    temp.Misc          = new List <QuestData>();

                    for (var j = 0; j < 30; j++) // 0-4
                    {
                        var temp2 = new QuestData
                        {
                            TypeId    = stream.ReadInt32(),
                            Quantity1 = stream.ReadInt32(),
                            Quantity2 = stream.ReadInt32(),
                            Unk1      = stream.ReadInt32(),
                            ItemId1   = stream.ReadUInt16(),
                            ItemId2   = stream.ReadUInt16(),
                            Unk2      = stream.ReadInt32(),
                            Unk3      = stream.ReadInt16(),
                            Unk8      = stream.ReadInt16(),
                            Unk4      = stream.ReadInt32(),
                            Quantity3 = stream.ReadInt32(),
                            Unk5      = stream.ReadInt32(),
                            Unk6      = stream.ReadInt32(),
                            Unk7      = stream.ReadInt32(),
                        };
                        if (temp2.TypeId <= 0)
                        {
                            continue;
                        }

                        if (j >= 0 && j < 5) // 5
                        {
                            temp.PreConditions.Add(temp2);
                        }
                        else if (j >= 5 && j < 10) // 5
                        {
                            temp.Requires.Add(temp2);
                        }
                        else if (j >= 10 && j < 18) // 8
                        {
                            temp.Rewards.Add(temp2);
                        }
                        else if (j >= 18 && j < 23) // 5
                        {
                            temp.Removes.Add(temp2);
                        }
                        else if (j >= 23 && j < 26) // 3
                        {
                            temp.Choices.Add(temp2);
                        }
                        else if (j >= 26 && j < 30) // 4
                        {
                            temp.Misc.Add(temp2);
                        }
                    }

                    i++;

                    if (temp.Id != 0)
                    {
                        list.Add(temp);
                    }
                }

                JsonData = JsonConvert.SerializeObject(list, Formatting.Indented);
            }
        }
Пример #6
0
        public QuestState IsQuestAvailable(QuestJson quest, Character.Character character)
        {
            if (quest == null || character == null || quest.Level > character.Level)
            {
                return(QuestState.NotAvailable);
            }

            var charQuest = character.Quests.GetQuest(quest.Id);

            if (charQuest != null)
            {
                return(charQuest.IsCompleted
                    ? charQuest.IsDone ? QuestState.GotReward : QuestState.Completed
                    : QuestState.OnProgress);
            }

            var isAvailable = quest.PreConditions.Count;

            foreach (var preCondition in quest.PreConditions)
            {
                switch (preCondition.TypeId)
                {
                case Quest.Const.GetType.Item:
                    break;

                case Quest.Const.GetType.LevelRange:
                    if (character.Level >= preCondition.Quantity2 && character.Level <= preCondition.ItemId1)
                    {
                        isAvailable--;
                    }
                    break;

                case Quest.Const.GetType.Class:
                    var cP = character.Profession;
                    switch ((ProfessionBaseType)preCondition.Quantity2)
                    {
                    case ProfessionBaseType.Warrior:
                        if (cP == Profession.Warrior || cP == Profession.Conquerer || cP == Profession.Warrior3)
                        {
                            isAvailable--;
                        }
                        break;

                    case ProfessionBaseType.Paladin:
                        if (cP == Profession.Paladin || cP == Profession.Templar || cP == Profession.Paladin3)
                        {
                            isAvailable--;
                        }
                        break;

                    case ProfessionBaseType.DualGunner:
                        if (cP == Profession.DualGunner || cP == Profession.Pistoleer || cP == Profession.DualGunner3)
                        {
                            isAvailable--;
                        }
                        break;

                    case ProfessionBaseType.Rifleman:
                        if (cP == Profession.Rifleman || cP == Profession.Sniper || cP == Profession.Rifleman3)
                        {
                            isAvailable--;
                        }
                        break;

                    case ProfessionBaseType.Warlock:
                        if (cP == Profession.Warlock || cP == Profession.Arcanist || cP == Profession.Warlock3)
                        {
                            isAvailable--;
                        }
                        break;

                    case ProfessionBaseType.Cleric:
                        if (cP == Profession.Cleric || cP == Profession.Saint || cP == Profession.Cleric3)
                        {
                            isAvailable--;
                        }
                        break;
                    }

                    break;

                case Quest.Const.GetType.Unk6:
                    break;

                case Quest.Const.GetType.QuestRequire:
                case Quest.Const.GetType.AfterMission:
                    var cQuest = character.Quests.GetQuest(quest.Id);
                    if (cQuest != null && cQuest.IsCompleted)
                    {
                        isAvailable--;
                    }
                    break;

                case Quest.Const.GetType.Unk10:
                    break;

                case Quest.Const.GetType.Unk29:
                    break;

                case Quest.Const.GetType.Unk32:
                    break;

                case Quest.Const.GetType.Unk42:
                    break;

                case Quest.Const.GetType.Unk55:
                    break;

                case Quest.Const.GetType.Unk63:
                    break;

                case Quest.Const.GetType.Unk64:
                    break;

                case Quest.Const.GetType.Unk67:
                    break;

                case Quest.Const.GetType.Unk79:
                    break;

                case Quest.Const.GetType.Unk85:
                    break;

                case Quest.Const.GetType.Unk95:
                    break;

                case Quest.Const.GetType.Unk98:
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }

            return(isAvailable > 0 ? QuestState.NotAvailable : QuestState.Available);
        }
Пример #7
0
 public QuestManager(Server server)
 {
     this.server = server;
     root        = JsonManager.readJson <QuestJson>(e_Paths.JSON_QUESTS);
 }
Пример #8
0
    void onLoadCharacter(NetworkMessage msg)
    {
        Debug.Log("Character pre- loaded");
        PlayerInfo m = msg.ReadMessage <PlayerInfo>();

        PlayerNetworkObject[] otherPlayers = (PlayerNetworkObject[])Tools.byteArrayToObject(m.otherPlayers);
        equipOtherPlayers(otherPlayers);
        PlayerStats stats = (PlayerStats)Tools.byteArrayToObject(m.stats);

        this.player.updateStats(stats);
        List <Equip>  equipments = (List <Equip>)(Tools.byteArrayToObject(m.equipment));
        List <Item>   inventory  = (List <Item>)(Tools.byteArrayToObject(m.items));
        List <string> color      = (List <string>)(Tools.byteArrayToObject(m.color));

        this.player.setInventory(inventory);
        this.player.setEquips(equipments);
        this.player.setColor(color);
        for (int i = 0; i < equipments.Count; i++)
        {
            if (equipments[i] == null)
            {
                continue;
            }
            if (equipments[i].getID().isItemType(e_itemTypes.HATS) || equipments[i].getID().isItemType(e_itemTypes.WEAPON))
            {
                this.player.setEquipModel(equipments[i]);
            }
            else
            {
                this.player.setClothesModel(equipments[i]);
            }
        }
        GameObject playerObj = ClientScene.FindLocalObject(m.id);
        Player     player;

        if (playerObj != null)
        {
            player = playerObj.GetComponent <Player>();
        }
        else
        {
            player = this.GetComponent <Player>();
        }
        Quest[]   questArray = (Quest[])Tools.byteArrayToObjectArray(m.questClasses);
        QuestJson clientJson = JsonManager.readJson <QuestJson>(e_Paths.JSON_QUESTS);

        foreach (Quest quest in questArray)
        {
            startQuest(quest);
        }

        GameObject[] objects = GameObject.FindGameObjectsWithTag("NPC");
        foreach (GameObject o in objects)
        {
            NPCMain main = o.GetComponent <NPCMain>();
            main.setQuestMarker(this.player);
        }

        //Initilize skill tree
        List <Skill> skillsToVerifyFromServer = new List <Skill>();

        for (int i = 2; i < m.skillProperties.Length; i += 3)
        {
            Skill tempSkill = new Skill();
            tempSkill.id            = m.skillProperties[i - 2]; //skillId
            tempSkill.currentPoints = m.skillProperties[i - 1]; //currentPoints
            tempSkill.maxPoints     = m.skillProperties[i];     //maxPoints
            this.player.skillsToVerifyWithFromServer.Add(tempSkill);
        }
        foreach (Skill s in skillsToVerifyFromServer)
        {
            this.player.stats.increment(s.str, s.dex, s.intell, 0, 0, 0, 0, 0, 0, 0, this.player.uiStats);
        }
        Debug.Log("Character loaded");
        skillTree = Instantiate(skillTreePrefab).GetComponent <SkillTree> ();
        skillTree.initilize(player);
        this.transform.position = new Vector3(-30, 0, 16);
    }