예제 #1
0
    /// <summary>
    /// 장비한 아이템의 정보를 서버로 저장한다.
    /// </summary>
    /// <param name="itemId">장비한 아이템의 id</param>
    /// <param name="type">장비한 아이템의 type</param>
    /// <returns></returns>
    public IEnumerator ISaveEquippedItemToServer(int itemId, EEquipmentItemType type)
    {
        yield return(StartCoroutine(IDeleteEquippedItemToServer(type)));

        WWWForm form = new WWWForm();

        form.AddField("Name", PlayerInformation.userData.name);
        form.AddField("Character_Type", (int)PlayerInformation.userData.characterType);
        form.AddField("Equipped_Item_Id", itemId);
        form.AddField("Equipment_Type", (int)type);

        UnityWebRequest www = UnityWebRequest.Post(SAVE_EQUIPPED_ITEM_URL, form);

        yield return(www.SendWebRequest());

        if (www.isDone)
        {
            if (www.downloadHandler.text == RESPONSE_SUCCESS_MESSAGE)
            {
                Debug.Log("현재 장비하고 있는 아이템을 서버로 저장했습니다." + www.downloadHandler.text);
            }
            else
            {
                Debug.LogWarning("저장하지 못했습니다!" + www.downloadHandler.text);
            }
        }
    }
예제 #2
0
    private IEnumerator IPurchaseEquipmentItem()
    {
        EquipmentItem      item;
        string             itemName           = "";
        int                imageNumber        = 0;
        int                reinforcementCount = 1;
        ETierType          tierType           = ETierType.unique;
        EEquipmentItemType itemType           = EEquipmentItemType.weapon; // default 값은 weapon

        // 아이템 생성
        for (int createCount = 0; createCount < currentChoicedItem.purchaseCount; ++createCount)
        {
            itemType = GetRandomEquipmentItem(out itemName, out imageNumber, itemType);
            Debug.Log("imageNumber : " + imageNumber + ", itemName : " + itemName + ", itemType : " + itemType.ToString());
            item = EventManager.MakeEquipmentItem(itemName, tierType, itemType, reinforcementCount, imageNumber);
            if (NetworkManager.instance != null)
            {
                yield return(StartCoroutine(NetworkManager.instance.ISaveEquipmentItemsToServer(item)));
            }
            else
            {
                Debug.LogWarning("NetworkManager가 없음 서버에 아이템을 저장 할 수 없다.");
            }
            PlayerInformation.inventory.equipmentItemDataList.Add(item);
        }
        UpdatePopup();
    }
예제 #3
0
    /// <summary>
    /// 장비한 아이템들의 정보를 서버로부터 가져온다.
    /// </summary>
    /// <returns></returns>
    public IEnumerator ILoadEquippedItemsFromServer()
    {
        WWWForm form = new WWWForm();

        form.AddField("Name", PlayerInformation.userData.name);
        form.AddField("Character_Type", (int)PlayerInformation.userData.characterType);

        UnityWebRequest www = UnityWebRequest.Post(LOAD_EQUIPPED_ITEMS_URL, form);

        yield return(www.SendWebRequest());

        if (www.isDone)
        {
            JSONArray jsonArray = (JSONArray)JSON.Parse(www.downloadHandler.text);

            for (int i = 0; i < jsonArray.Count; ++i)
            {
                EEquipmentItemType itemType = (EEquipmentItemType)(int)jsonArray[i]["Equipment_Type"];
                int itemId = jsonArray[i]["Equipped_Item_Id"];

                // id에 맞는 장비 아이템을 찾는다.
                int itemIndex = PlayerInformation.inventory.GetEquipmentItemId(itemId);
                if (itemIndex < 0)
                {
                    continue;
                }

                switch (itemType) // 타입별로 아이템 값 집어넣기
                {
                case EEquipmentItemType.armor:
                    PlayerInformation.inventory.currentEquippedArmorOrNull.CopyData(PlayerInformation.inventory.equipmentItemDataList[itemIndex]);
                    break;

                case EEquipmentItemType.helmet:
                    PlayerInformation.inventory.currentEquippedHelmetOrNull.CopyData(PlayerInformation.inventory.equipmentItemDataList[itemIndex]);
                    break;

                case EEquipmentItemType.shoes:
                    PlayerInformation.inventory.currentEquippedShoesOrNull.CopyData(PlayerInformation.inventory.equipmentItemDataList[itemIndex]);
                    break;

                case EEquipmentItemType.weapon:
                    PlayerInformation.inventory.currentEquippedWeaponOrNull.CopyData(PlayerInformation.inventory.equipmentItemDataList[itemIndex]);
                    break;

                default:
                    Debug.LogWarning("타입 범위 초과!!!!!!!!!!!!!");
                    break;
                }
                Debug.Log("Network manager : 장착한 아이템들의 정보를 서버로부터 가져온다." + PlayerInformation.inventory.currentEquippedArmorOrNull.name + ", " + PlayerInformation.inventory.currentEquippedHelmetOrNull.name + ", " + PlayerInformation.inventory.currentEquippedShoesOrNull.name + ", " + PlayerInformation.inventory.currentEquippedWeaponOrNull.name);
            }
        }
    }
예제 #4
0
 /// <summary>
 /// 리셋한다.
 /// </summary>
 public void Reset()
 {
     id   = -1;
     name = "";
     gold = 0;
     reinforcementCount = 0;
     atk         = 0;
     def         = 0;;
     moveSpeed   = 0;;
     attackSpeed = 0;;
     tier        = 0;
     tendency    = 0;;
     type        = EEquipmentItemType.none;
     imageNumber = -1;
 }
예제 #5
0
    private IEnumerator IPurchaseEquipmentItemPack()
    {
        EquipmentItem      item;
        int                imageNumber        = 0;
        int                reinforcementCount = 1;
        string             itemName           = "";
        ETierType          tierType;
        EEquipmentItemType itemType = EEquipmentItemType.weapon; // default 값은 weapon

        // 아이템 생성
        for (int createCount = 0; createCount < currentChoicedItem.purchaseCount; ++createCount)
        {
            switch (currentChoicedItem.shopItemType)
            {
            case EShopItemType.weaponPackage:
                itemType = EEquipmentItemType.weapon;
                break;

            case EShopItemType.defencePackage:
                itemType = (EEquipmentItemType)(UnityEngine.Random.Range(0, 3));     // 0: helmet, 1: armor, 2: shoes
                break;
            } // 아이템 타입을 정해준다.

            itemType = GetRandomEquipmentItem(out itemName, out imageNumber, itemType);

            if (createCount == 0)            // 전설 아이템은 하나만 생성되게 한다.
            {
                tierType = ETierType.legend; // 레전드 아이템으로 설정 변경
            }
            else
            {
                tierType = ETierType.unique; // 희귀 아이템으로 설정 변경
            }

            item = EventManager.MakeEquipmentItem(itemName, tierType, itemType, reinforcementCount, imageNumber);

            if (NetworkManager.instance != null)
            {
                yield return(StartCoroutine(NetworkManager.instance.ISaveEquipmentItemsToServer(item)));
            }
            else
            {
                Debug.LogWarning("NetworkManager가 없음 서버에 아이템을 저장 할 수 없다.");
            }
            PlayerInformation.inventory.equipmentItemDataList.Add(item);
        }
        UpdatePopup();
    }
예제 #6
0
 /// <summary>
 /// 값을 복사한다.
 /// </summary>
 /// <param name="data">복사할 장비 아이템</param>
 public void CopyData(EquipmentItem data)
 {
     id   = data.id;
     name = data.name;
     gold = data.gold;
     reinforcementCount = data.reinforcementCount;
     atk         = data.atk;
     def         = data.def;
     moveSpeed   = data.moveSpeed;
     attackSpeed = data.attackSpeed;
     tier        = data.tier;
     tendency    = data.tendency;
     type        = data.type;
     imageNumber = data.imageNumber;
     //Debug.Log("Copied -> id : " + id + ", name : " + name + ", gold : " + gold + ", reinforcementCount : " + reinforcementCount + ", atk : " + atk + ", def : " + def + ", moveSpeed : " + moveSpeed + ", attackSpeed : " + attackSpeed + ", tier : " + tier + ", tendency : " + tendency + ", type : " + type + ", imageNumber : " + imageNumber + ", icon : " + icon);
 }
예제 #7
0
    /// <summary>
    /// 장착 해제 한 아이템의 정보를 서버로 보내 서버에서 삭제하게 한다.
    /// </summary>
    /// <param name="itemId">삭제할 장비 아이템의 id</param>
    /// <param name="type">삭제할 장비 아이템의 type</param>
    /// <returns></returns>
    public IEnumerator IDeleteEquippedItemToServer(EEquipmentItemType type)
    {
        WWWForm form = new WWWForm();

        form.AddField("Name", PlayerInformation.userData.name);
        form.AddField("Character_Type", (int)PlayerInformation.userData.characterType);
        form.AddField("Equipment_Type", (int)type);

        UnityWebRequest www = UnityWebRequest.Post(DELETE_EQUIPPED_ITEM_URL, form);

        yield return(www.SendWebRequest());

        if (www.isDone)
        {
            Debug.Log("delete equipmentItem ::: " + www.downloadHandler.text);
        }
    }
예제 #8
0
    /// <summary>
    /// 장비 아이템을 생성한다.
    /// </summary>
    /// <param name="itemName">아이템의 이름</param>
    /// <param name="tier">아이템의 등급</param>
    /// <param name="itemType">아이템의 타입</param>
    /// <param name="reinforcementCount">아이템 강화 횟수(범위는 0~9)</param>
    /// <param name="imageNumber">아이템 이미지 번호</param>
    /// <returns>공식에 의해 설정된 아이템</returns>
    public static EquipmentItem MakeEquipmentItem(string itemName, ETierType tier, EEquipmentItemType itemType, int reinforcementCount, int imageNumber = 0)
    {
        reinforcementCount = Mathf.Clamp(reinforcementCount, 0, 9); // 0에서 9까지 강화 횟수 숫자 제한을 둠.

        EquipmentItem item = new EquipmentItem();

        float defaultAttackPower  = 30.0f; // 기본 공격력
        float defaultDefencePower = 10.0f; // 기본 방어력

        /// TODO (장현명) : 무기 강화값을 이용하여 뭔가 해야 함.
        // 무기 강화 값
        float weaponItemReinforcementValue = (int)tier * defaultAttackPower + UnityEngine.Random.Range(0, defaultAttackPower + 1) * reinforcementCount * 0.1f;
        // 방어구 강화 값
        float defenceItemReinforcementValue = (int)tier * defaultDefencePower + UnityEngine.Random.Range(5, defaultDefencePower + 1) * reinforcementCount * 0.1f;

        // 값 설정
        item.name = itemName;
        item.tier = tier;
        item.reinforcementCount = reinforcementCount;
        item.gold        = (int)tier * 1000;
        item.type        = itemType;
        item.imageNumber = imageNumber;

        switch (itemType) // Item Type에 따라 수치 값을 다르게 넣어준다.
        {
        case EEquipmentItemType.helmet:
            item.def         = (int)item.tier * defaultDefencePower + UnityEngine.Random.Range(5, 11) + reinforcementCount; // 방어력
            item.atk         = defaultAttackPower;
            item.attackSpeed = 0;
            item.moveSpeed   = 0;
            item.tendency    = ETendency.defensive;  // 방어적인 성향
            break;

        case EEquipmentItemType.armor:
            item.def         = (int)item.tier * defaultDefencePower + UnityEngine.Random.Range(5, 11) + reinforcementCount; // 방어력
            item.atk         = defaultAttackPower;
            item.attackSpeed = 0;
            item.moveSpeed   = 0;
            item.tendency    = ETendency.defensive;  // 방어적인 성향
            break;

        case EEquipmentItemType.shoes:
            item.def         = (int)item.tier * defaultDefencePower + UnityEngine.Random.Range(5, 11) + reinforcementCount; // 방어력
            item.atk         = defaultAttackPower;
            item.attackSpeed = 0;
            item.moveSpeed   = 0;                // FIXED (장현명) :  움직임 속도를 향상 할 수 있게 해야 함.
            item.tendency    = ETendency.speedy; // 빠른 성향
            break;

        case EEquipmentItemType.weapon:
            item.def         = 10;
            item.atk         = (int)item.tier * defaultAttackPower + UnityEngine.Random.Range(5, 11) + reinforcementCount; // 공격력
            item.attackSpeed = 0;
            item.moveSpeed   = 0;
            item.tendency    = ETendency.aggressive;  // 공격적인 성향
            break;

        default:
            Debug.Assert(false, "아이템 타입의 범위를 넘어갔다.");
            break;
        }
        return(item);
    }
예제 #9
0
 public void Receiveitem(EEquipmentItemType itemType)
 {
 }
예제 #10
0
    public int imageNumber;             // 0에서 시작

    /// <summary>
    /// 데이터를 복사한다.
    /// </summary>
    /// <param name="data">복사할 데이터</param>
    public void CopyData(EquipmentItemData data)
    {
        name        = data.name;
        type        = data.type;
        imageNumber = data.imageNumber;
    }
예제 #11
0
    /// <summary>
    /// 현재 선택된 아이템의 타입에 따라 미리 데이터의 값이 저장되어있는 아이템으로 설정해준다.
    /// </summary>
    /// <param name="itemName">아이템 이름</param>
    /// <param name="imageNumber">이미지 번호</param>
    /// <param name="itemType">아이템 타입</param>
    /// <returns>설정 한 아이템 타입</returns>
    private EEquipmentItemType GetRandomEquipmentItem(out string itemName, out int imageNumber, EEquipmentItemType itemType)
    {
        switch (currentChoicedItem.shopItemType)
        {
        case EShopItemType.weapon:
        case EShopItemType.weaponPackage:
            itemType = EEquipmentItemType.weapon;
            switch (PlayerInformation.userData.characterType)
            {
            case EPlayerCharacterType.archer:
                randomItemData.CopyData(randomBowItems[Random.Range(0, randomBowItems.Length)]);
                break;

            case EPlayerCharacterType.warrior:
                randomItemData.CopyData(randomSwordItems[Random.Range(0, randomSwordItems.Length)]);
                break;

            default:
                Debug.Assert(false, "캐릭터 타입이 설정되어있지 않습니다.");
                break;
            }
            break;

        case EShopItemType.defence:
        case EShopItemType.defencePackage:
            itemType = (EEquipmentItemType)(UnityEngine.Random.Range(0, 3));     // 0: helmet, 1: armor, 2: shoes
            switch (itemType)
            {
            case EEquipmentItemType.armor:
                randomItemData.CopyData(randomArmorItems[Random.Range(0, randomArmorItems.Length)]);
                break;

            case EEquipmentItemType.helmet:
                randomItemData.CopyData(randomHelmetItems[Random.Range(0, randomHelmetItems.Length)]);
                break;

            case EEquipmentItemType.shoes:
                randomItemData.CopyData(randomShoesItems[Random.Range(0, randomShoesItems.Length)]);
                break;

            default:
                Debug.Assert(false);
                break;
            }
            break;
        }

        imageNumber = randomItemData.imageNumber;
        itemName    = randomItemData.name;
        return(itemType);
    }