Exemplo n.º 1
0
    public void SaveCharacterData()
    {
        Godot.Collections.Dictionary jsonDictionary   = this.GetParent().GetParent().Call("ReadData", "Character") as Godot.Collections.Dictionary;
        Godot.Collections.Dictionary charaData        = jsonDictionary["chara" + characterSelected] as Godot.Collections.Dictionary;
        Godot.Collections.Dictionary equipTypeData    = charaData["equip_types"] as Godot.Collections.Dictionary;
        Godot.Collections.Dictionary initialEquipData = charaData["initial_equip"] as Godot.Collections.Dictionary;
        Godot.Collections.Array      effectList       = new Godot.Collections.Array();

        charaData["faceImage"]  = facePath;
        charaData["charaImage"] = "";
        charaData["name"]       = GetNode <LineEdit>("NameLabel/NameText").Text;
        GetNode <OptionButton>("CharacterButton").SetItemText(characterSelected, GetNode <LineEdit>("NameLabel/NameText").Text);
        charaData["class"]        = GetNode <OptionButton>("ClassLabel/ClassText").Selected;
        charaData["description"]  = GetNode <TextEdit>("DescLabel/DescText").Text;
        charaData["initialLevel"] = GetNode <SpinBox>("InitLevelLabel/InitLevelText").Value;
        charaData["maxLevel"]     = GetNode <SpinBox>("MaxLevelLabel/MaxLevelText").Value;

        equipTypeData.Clear();
        int equip_items = GetNode <ItemList>("EquipLabel/EquipContainer/EquipContainer/EquipList").GetItemCount();

        for (int i = 0; i < equip_items; i++)
        {
            string kind = GetNode <ItemList>("EquipLabel/EquipContainer/EquipContainer/EquipList").GetItemText(i)[0].ToString();
            switch (kind)
            {
            case "W":
                equipTypeData["w" + i] = equipIdArray[i];
                break;

            case "A":
                equipTypeData["a" + i] = equipIdArray[i];
                break;
            }
        }

        charaData["equip_types"] = equipTypeData;

        int slotItems = GetNode <ItemList>("InitialEquipLabel/PanelContainer/TypeContainer/EquipList").GetItemCount();

        for (int i = 0; i < slotItems; i++)
        {
            initialEquipData[i.ToString()] = Convert.ToInt32(initialEquipIdArray[i]);
        }

        charaData["initial_equip"] = initialEquipData;

        int effectSize = GetNode <ItemList>("EffectLabel/PanelContainer/VBoxContainer/HBoxContainer/EffectNames").GetItemCount();

        for (int i = 0; i < effectSize; i++)
        {
            Godot.Collections.Dictionary effectData = new Godot.Collections.Dictionary();
            effectData["name"]    = GetNode <ItemList>("EffectLabel/PanelContainer/VBoxContainer/HBoxContainer/EffectNames").GetItemText(i);
            effectData["data_id"] = GetNode <ItemList>("EffectLabel/PanelContainer/VBoxContainer/HBoxContainer/DataType").GetItemText(i);
            effectData["value1"]  = GetNode <ItemList>("EffectLabel/PanelContainer/VBoxContainer/HBoxContainer/EffectValue1").GetItemText(i);
            effectData["value2"]  = GetNode <ItemList>("EffectLabel/PanelContainer/VBoxContainer/HBoxContainer/EffectValue2").GetItemText(i);
            effectList.Add(effectData);
        }
        charaData["effects"] = effectList;

        this.GetParent().GetParent().Call("StoreData", "Character", jsonDictionary);
    }
Exemplo n.º 2
0
    public void SyncInventoryState(String state, InventoryDatabase inventoryDatabase)
    {
        String[] stateInfo  = state.Split(";");
        int      stateIndex = 0;

        // Set the current inventory count
        int inventoryCount = int.Parse(stateInfo[stateIndex]);

        _availableCapacity = _items.Count - inventoryCount;

        stateIndex++;

        // Clean up the inventory
        for (int index = 0; index < _items.Count; index++)
        {
            _items[index] = null;
        }

        for (int index = 0; index < inventoryCount; index++)
        {
            int inventoryInex = int.Parse(stateInfo[stateIndex]);
            stateIndex++;
            _items[inventoryInex] = inventoryDatabase.GetItemByID(stateInfo[stateIndex]);
            stateIndex++;
        }

        // sync used item
        int usedIndex = int.Parse(stateInfo[stateIndex]);

        stateIndex++;

        // Clean up the used index
        _usedIndex.Clear();

        for (int index = 0; index < usedIndex; index++)
        {
            _usedIndex.Add(int.Parse(stateInfo[stateIndex]));
            stateIndex++;
        }

        int equipCount = int.Parse(stateInfo[stateIndex]);

        stateIndex++;

        _equipmentIndex.Clear();

        for (int index = 0; index < equipCount; index++)
        {
            String weaponKey = stateInfo[stateIndex];
            stateIndex++;

            int itemIndex = int.Parse(stateInfo[stateIndex]);
            stateIndex++;

            int ammo = int.Parse(stateInfo[stateIndex]);
            stateIndex++;

            Weapon.WeaponOrder weaponOrder = (Weapon.WeaponOrder) int.Parse(weaponKey.Split("_")[0]);
            int weaponIndex = int.Parse(weaponKey.Split("_")[1]);

            if (itemIndex != -1)
            {
                _equipmentIndex.Add(weaponKey, itemIndex);

                if (_agent.GetWeapons(weaponOrder)[weaponIndex] == null || _agent.GetWeapons(weaponOrder)[weaponIndex].ItemResourceID != _items[itemIndex].ItemID)
                {
                    // Client is not equip same as server, try to enforced it
                    _agent.UnequipWeapon(weaponOrder, weaponIndex);
                    _agent.EquipWeapon(_items[itemIndex].ReferencePackedScene, weaponOrder, weaponIndex);
                    _agent.GetWeapons(weaponOrder)[weaponIndex].SetAmmo(ammo);
                    EmitSignal(nameof(WeaponChangeSignal), weaponOrder, weaponIndex);
                }
            }
            else
            {
                if (_agent.GetWeapons(weaponOrder)[weaponIndex] != null)
                {
                    // Client is equip while server does not, try to enforced it
                    _agent.UnequipWeapon(weaponOrder, weaponIndex);
                    EmitSignal(nameof(WeaponChangeSignal), weaponOrder, weaponIndex);
                }
            }
        }

        EmitSignal(nameof(InventoryChangeSignal));
    }