public static void Process(ReceivablePacket packet)
    {
        // Server information.
        long objectId = packet.ReadLong();
        CharacterDataHolder npcTemplate   = NpcData.GetNpc(packet.ReadInt());
        CharacterDataHolder characterData = new CharacterDataHolder();

        characterData.SetX(packet.ReadFloat());
        characterData.SetY(packet.ReadFloat());
        characterData.SetZ(packet.ReadFloat());
        characterData.SetHeading(packet.ReadFloat());
        characterData.SetCurrentHp(packet.ReadLong());
        // Client information.
        characterData.SetName(npcTemplate.GetName());
        characterData.SetRace(npcTemplate.GetRace());
        characterData.SetHeight(npcTemplate.GetHeight());
        characterData.SetBelly(npcTemplate.GetBelly());;
        characterData.SetHairType(npcTemplate.GetHairType());
        characterData.SetHairColor(npcTemplate.GetHairColor());
        characterData.SetSkinColor(npcTemplate.GetSkinColor());
        characterData.SetEyeColor(npcTemplate.GetEyeColor());
        characterData.SetHeadItem(npcTemplate.GetHeadItem());
        characterData.SetChestItem(npcTemplate.GetChestItem());
        characterData.SetLegsItem(npcTemplate.GetLegsItem());
        characterData.SetHandsItem(npcTemplate.GetHandsItem());
        characterData.SetFeetItem(npcTemplate.GetFeetItem());
        characterData.SetLeftHandItem(npcTemplate.GetLeftHandItem());
        characterData.SetRightHandItem(npcTemplate.GetRightHandItem());
        characterData.SetMaxHp(npcTemplate.GetMaxHp());
        characterData.SetTargetable(npcTemplate.IsTargetable());

        WorldManager.Instance.UpdateObject(objectId, characterData);
    }
Esempio n. 2
0
    public void ShowQuestInfo(Quest quest)
    {
        // Show Quest Info Panel
        questWindow.gameObject.SetActive(true);

        // Show or Hide accept button dependinig on "do we have this quest?".
        questWindow.Find("Accept Button").gameObject.SetActive(!Character.activeQuests.ContainsKey(quest.id));

        // Remove previous functions from the Accept Button
        questWindow.Find("Accept Button").GetComponent <Button>().onClick.RemoveAllListeners();
        // Set functions on Accept Button
        questWindow.Find("Accept Button").GetComponent <Button>().onClick.AddListener(() => {
            Character.AddQuest(quest.id);
            questWindow.gameObject.SetActive(false);
            ShowActiveQuests();
        });

        questWindow.Find("Quest Name").GetComponent <TextMeshProUGUI>().text = quest.questName;
        questWindow.Find("Quest Name").GetComponent <TextMeshProUGUI>().text = questWindow.Find("Quest Name").GetComponent <TextMeshProUGUI>().text.Replace("[NpcName]", "<color=yellow>" + NpcName + "</color>");

        TextMeshProUGUI textMesh = questWindow.Find("Quest Description").GetComponent <TextMeshProUGUI>();

        textMesh.text = quest.questDescription;
        textMesh.text = textMesh.text.Replace("[CharacterName]", "<color=green>" + MainManager.Instance.selectedCharacterData.GetName() + "</color>");
        textMesh.text = textMesh.text.Replace("[NpcName]", "<color=yellow>" + NpcName + "</color>");

        // TASK
        string taskString = "Task:\n";

        if (quest.task.kills != null)
        {
            int killIndex = 0;
            foreach (Quest.QuestKill qk in quest.task.kills)
            {
                // Current kills in zero when we haven't taken the quest
                int currentKills = 0;
                if (Character.activeQuests.ContainsKey(qk.id) && Character.monstersKilled.ContainsKey(qk.id))
                {
                    // if we are showing the info during the progress of the quest (we took it already) show the progress
                    currentKills = Character.monstersKilled[qk.id].amount - Character.activeQuests[quest.id].kills[killIndex].initialAmount;
                }
                taskString += "Kill " + (currentKills) + " / " + qk.amount + " " + MonsterDatabase.monsters[qk.id] + "\n";
                killIndex++;
            }
        }

        if (quest.task.items != null)
        {
            foreach (Quest.QuestItem qi in quest.task.items)
            {
                taskString += "Bring " + qi.amount + " x " + ItemData.itemDB[qi.id].ItemName + ".\n";
            }
        }

        if (quest.task.talkTo != null)
        {
            foreach (int id in quest.task.talkTo)
            {
                taskString += "Go and talk with " + "<color=yellow>" + NpcData.GetNpc(id).GetName() + "</color>\n";
            }
        }
        questWindow.Find("Quest Task").GetComponent <TextMeshProUGUI>().text = taskString;

        // REWARD
        string rewardString = "Reward:\n";

        if (quest.reward.items != null)
        {
            foreach (Quest.QuestItem qi in quest.reward.items)
            {
                rewardString += qi.amount + " x " + ItemData.itemDB[qi.id].ItemName + "\n";
            }
        }
        questWindow.Find("Quest Reward").GetComponent <TextMeshProUGUI>().text = rewardString;
    }