/// <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); } } }
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(); }
/// <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); } } }
/// <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; }
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(); }
/// <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); }
/// <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); } }
/// <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); }
public void Receiveitem(EEquipmentItemType itemType) { }
public int imageNumber; // 0에서 시작 /// <summary> /// 데이터를 복사한다. /// </summary> /// <param name="data">복사할 데이터</param> public void CopyData(EquipmentItemData data) { name = data.name; type = data.type; imageNumber = data.imageNumber; }
/// <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); }