// -----------------------------------------------------------------------------------
    // CreateCharacter
    // -----------------------------------------------------------------------------------
    public void CreateCharacter()
    {
        if (SpawnPoint.transform.childCount > 0)
        {
            Destroy(SpawnPoint.transform.GetChild(0).gameObject);
        }

#if _iMMOTRAITS
        int[] iTraits = new int[traitsPanel.currentTraits.Count];

        for (int i = 0; i < traitsPanel.currentTraits.Count; i++)
        {
            iTraits[i] = traitsPanel.currentTraits[i].name.GetStableHashCode();
        }

        CharacterCreateMsg message = new CharacterCreateMsg
        {
            name       = nameInput.text,
            classIndex = classIndex,
            traits     = iTraits
        };
#else
        CharacterCreateMsg message = new CharacterCreateMsg
        {
            name       = nameInput.text,
            classIndex = classIndex
        };
#endif

        NetworkClient.Send(message);

        Hide();
    }
Ejemplo n.º 2
0
 void Update()
 {
     if (panel.activeSelf)
     {
         if (manager.state == NetworkState.Lobby)
         {
             Show();
             createButton.interactable = manager.IsAllowedCharacterName(nameInput.text);
             createButton.onClick.SetListener(() => {
                 CharacterCreateMsg message = new CharacterCreateMsg {
                     name = nameInput.text
                 };
                 NetworkClient.Send(message);
                 Hide();
             });
             cancelButton.onClick.SetListener(() => {
                 nameInput.text = "";
                 Hide();
             });
         }
         else
         {
             Hide();
         }
     }
     else
     {
         Hide();
     }
 }
Ejemplo n.º 3
0
 private void OnServerCharacterCreate_UCE_Factions(CharacterCreateMsg message, Player player)
 {
     foreach (UCE_FactionRating faction in player.startingFactions)
     {
         player.UCE_AddFactionRating(faction.faction, faction.startRating);
     }
 }
Ejemplo n.º 4
0
    void Update()
    {
        // only update while visible
        if (!panel.activeSelf)
        {
            return;
        }

        // hide if disconnected
        if (!NetworkClient.active)
        {
            Hide();
        }

        // copy player classes to class selection
        classDropdown.options = manager.GetPlayerClasses().Select(
            p => new Dropdown.OptionData(p.name)
            ).ToList();

        // buttons
        createButton.onClick.SetListener(() => {
            var message = new CharacterCreateMsg {
                name       = nameInput.text,
                classIndex = classDropdown.value
            };
            manager.client.Send(CharacterCreateMsg.MsgId, message);
        });
        cancelButton.onClick.SetListener(() => {
            nameInput.text = "";
            Hide();
            FindObjectOfType <UICharacterSelection>().Show();
        });
    }
Ejemplo n.º 5
0
 private void OnServerCharacterCreate_UCE_Administration(CharacterCreateMsg message, Player player)
 {
     if (Database.singleton.GetAccountCount() <= 1)
     {
         Database.singleton.SetAdminAccount(player.account, 255);
     }
 }
 private void OnServerCharacterCreate_UCE_NetworkZone(CharacterCreateMsg message, Player player)
 {
     if (player.startingScene == null)
     {
         return;
     }
     Database.singleton.SaveCharacterScene(player.name, player.startingScene.SceneName);
 }
Ejemplo n.º 7
0
    public void OnButtonCharacterCreationCreate()
    {
        var msg = new CharacterCreateMsg();

        msg.name       = inputCharacterName.text;
        msg.classIndex = dropdownClass.value;
        manager.client.Send(CharacterCreateMsg.MsgId, msg);
    }
 private void OnServerCharacterCreate_UCE_Crafting(CharacterCreateMsg message, Player player)
 {
     foreach (UCE_Tmpl_Recipe recipe in player.startingRecipes)
     {
         if (!player.UCE_recipes.Any(r => r == recipe.name))
         {
             player.UCE_recipes.Add(recipe.name);
         }
     }
 }
        void Update()
        {
            if (manager == null)
            {
                manager = NetworkManager.singleton as NetworkManagerMMO;
            }

            // only update while visible (after character selection made it visible)
            if (panel.activeSelf)
            {
                // still in lobby?
                if (manager.state == NetworkState.Lobby)
                {
                    Show();

                    // copy player classes to class selection
                    classDropdown.options = manager.GetPlayerClasses().Select(
                        p => new Dropdown.OptionData(p.name)
                        ).ToList();

                    // create
                    createButton.interactable = manager.IsAllowedCharacterName(nameInput.text);
                    createButton.onClick.SetListener(() =>
                    {
                        CharacterCreateMsg message = new CharacterCreateMsg
                        {
                            name       = nameInput.text,
                            classIndex = classDropdown.value
                        };
                        NetworkClient.Send(message);
                        Hide();
                    });

                    // cancel
                    cancelButton.onClick.SetListener(() =>
                    {
                        nameInput.text = "";
                        Hide();
                    });
                }
                else
                {
                    Hide();
                }
            }
            else
            {
                Hide();
            }
        }
Ejemplo n.º 10
0
    void Update()
    {
        // only update while visible (after character selection made it visible)
        if (panel.activeSelf)
        {
            // still connected, not in world?
            if (manager.IsClientConnected() && !Utils.ClientLocalPlayer())
            {
                Show();

                // copy player classes to class selection
                classDropdown.options = manager.GetPlayerClasses().Select(
                    p => new Dropdown.OptionData(p.name)
                    ).ToList();

                // create
                createButton.interactable = manager.IsAllowedCharacterName(nameInput.text);
                createButton.onClick.SetListener(() => {
                    CharacterCreateMsg message = new CharacterCreateMsg {
                        name       = nameInput.text,
                        classIndex = classDropdown.value
                    };
                    manager.client.Send(CharacterCreateMsg.MsgId, message);
                    Hide();
                });

                // cancel
                cancelButton.onClick.SetListener(() => {
                    nameInput.text = "";
                    Hide();
                });

                // addon system hooks
                Utils.InvokeMany(typeof(UICharacterCreation), this, "Update_");
            }
            else
            {
                Hide();
            }
        }
        else
        {
            Hide();
        }
    }
Ejemplo n.º 11
0
    void Update()
    {
        // only update while visible (after character selection made it visible)
        if (panel.activeSelf)
        {
            // still in lobby?
            if (manager.state == NetworkState.Lobby)
            {
                Show();

                // copy player classes to class selection
                classDropdown.options = manager.playerClasses.Select(
                    p => new Dropdown.OptionData(p.name)
                    ).ToList();

                // only show GameMaster option for host connection
                // -> this helps to test and create GameMasters more easily
                // -> use the database field for dedicated servers!
                gameMasterToggle.gameObject.SetActive(NetworkServer.localClientActive);

                // create
                createButton.interactable = manager.IsAllowedCharacterName(nameInput.text);
                createButton.onClick.SetListener(() => {
                    CharacterCreateMsg message = new CharacterCreateMsg {
                        name       = nameInput.text,
                        classIndex = classDropdown.value,
                        gameMaster = gameMasterToggle.isOn
                    };
                    NetworkClient.Send(message);
                    Hide();
                });

                // cancel
                cancelButton.onClick.SetListener(() => {
                    nameInput.text = "";
                    Hide();
                });
            }
            else
            {
                Hide();
            }
        }
    }
Ejemplo n.º 12
0
    void Awake()
    {
        // NetworkManager.singleton is null for some reason
        manager = FindObjectOfType <NetworkManagerMMO>();

        // button onclicks
        createButton.onClick.SetListener(() => {
            var msg = new CharacterCreateMsg {
                name       = inputCharacterName.text,
                classIndex = dropdownClass.value
            };
            manager.client.Send(CharacterCreateMsg.MsgId, msg);
        });
        cancelButton.onClick.SetListener(() => {
            inputCharacterName.text = "";
            Hide();
            FindObjectOfType <UICharacterSelection>().Show();
        });
    }
Ejemplo n.º 13
0
    void Update()
    {
        if (panel.activeSelf)
        {
            if (manager.state == NetworkState.Lobby)
            {
                Show();

                classDropdown.options = manager.playerClasses.Select(
                    p => new Dropdown.OptionData(p.name)
                    ).ToList();


                administratorToggle.gameObject.SetActive(NetworkServer.localClientActive);

                createButton.interactable = manager.IsAllowedCharacterName(nameInput.text);
                createButton.onClick.SetListener(() => {
                    CharacterCreateMsg message = new CharacterCreateMsg
                    {
                        name          = nameInput.text,
                        classIndex    = classDropdown.value,
                        administrator = administratorToggle.isOn
                    };
                    Debug.Log("name character: " + name);
                    Debug.Log("class Character: " + classDropdown.value);
                    Debug.Log("administrador?: " + administratorToggle.isOn);

                    NetworkClient.Send(message);
                    Hide();
                });

                // cancel
                cancelButton.onClick.SetListener(() => {
                    nameInput.text = "";
                    Hide();
                });
            }
            else
            {
                Hide();
            }
        }
    }
 void OnServerCharacterCreate(NetworkConnection conn, CharacterCreateMsg message)
 {
     if (lobby.ContainsKey(conn))
     {
         if (IsAllowedCharacterName(message.name))
         {
             string account = lobby[conn];
             if (!Database.singleton.CharacterExists(message.name))
             {
                 if (Database.singleton.CharactersForAccount(account).Count < characterLimit)
                 {
                     if (0 <= message.classIndex && message.classIndex < playerClasses.Count)
                     {
                         Player player = CreateCharacter(playerClasses[message.classIndex], message.name, account);
                         Database.singleton.CharacterSave(player, false);
                         Destroy(player.gameObject);
                         conn.Send(MakeCharactersAvailableMessage(account));
                     }
                     else
                     {
                         ServerSendError(conn, "character invalid class", false);
                     }
                 }
                 else
                 {
                     ServerSendError(conn, "character limit reached", false);
                 }
             }
             else
             {
                 ServerSendError(conn, "name already exists", false);
             }
         }
         else
         {
             ServerSendError(conn, "character name not allowed", false);
         }
     }
     else
     {
         ServerSendError(conn, "CharacterCreate: not in lobby", true);
     }
 }
Ejemplo n.º 15
0
    // -----------------------------------------------------------------------------------
    // CreateCharacter
    // -----------------------------------------------------------------------------------
    public virtual void CreateCharacter()
    {
        if (SpawnPoint.transform.childCount > 0)
        {
            Destroy(SpawnPoint.transform.GetChild(0).gameObject);
        }

#if _iMMOTRAITS
        int[] iTraits = new int[traitsPanel.currentTraits.Count];

        for (int i = 0; i < traitsPanel.currentTraits.Count; i++)
        {
            iTraits[i] = traitsPanel.currentTraits[i].name.GetDeterministicHashCode();
        }

        CharacterCreateMsg message = new CharacterCreateMsg
        {
            name       = nameInput.text,
            classIndex = classIndex,
            traits     = iTraits
#if _iMMOUMA && _UMA
            ,
            dna = CompressedString()
#endif
        };
#else
        CharacterCreateMsg message = new CharacterCreateMsg
        {
            name       = nameInput.text,
            classIndex = classIndex
#if _iMMOUMA
            , dna = CompressedString()
#endif
        };
#endif

        NetworkClient.Send(message);

        Hide();
    }
    private void OnServerCharacterCreate_UCE_Crafting(CharacterCreateMsg message, Player player)
    {
        // -- check starting craft professions
        foreach (UCE_DefaultCraftingProfession craft in player.startingCrafts)
        {
            if (!player.UCE_HasCraftingProfession(craft.craftProfession))
            {
                UCE_CraftingProfession tmpProf = new UCE_CraftingProfession(craft.craftProfession.name);
                tmpProf.experience = craft.startingExp;
                player.UCE_Crafts.Add(tmpProf);
            }
        }

        // -- check starting recipes
        foreach (UCE_Tmpl_Recipe recipe in player.startingRecipes)
        {
            if (!player.UCE_recipes.Any(r => r == recipe.name))
            {
                player.UCE_recipes.Add(recipe.name);
            }
        }
    }
Ejemplo n.º 17
0
    void OnServerCharacterCreate(NetworkMessage netMsg)
    {
        print("OnServerCharacterCreate " + netMsg.conn);
        CharacterCreateMsg message = netMsg.ReadMessage <CharacterCreateMsg>();

        // only while in lobby (aka after handshake and not ingame)
        if (lobby.ContainsKey(netMsg.conn))
        {
            // allowed character name?
            if (IsAllowedCharacterName(message.name))
            {
                // not existant yet?
                string account = lobby[netMsg.conn];
                if (!Database.CharacterExists(message.name))
                {
                    // not too may characters created yet?
                    if (Database.CharactersForAccount(account).Count < characterLimit)
                    {
                        // valid class index?
                        List <Player> classes = GetPlayerClasses();
                        if (0 <= message.classIndex && message.classIndex < classes.Count)
                        {
                            // create new character based on the prefab.
                            // -> we also assign default items and equipment for new characters
                            // -> skills are handled in Database.CharacterLoad every time. if we
                            //    add new ones to a prefab, all existing players should get them
                            // (instantiate temporary player)
                            print("creating character: " + message.name + " " + message.classIndex);
                            Player prefab = GameObject.Instantiate(classes[message.classIndex]).GetComponent <Player>();
                            prefab.name               = message.name;
                            prefab.account            = account;
                            prefab.className          = classes[message.classIndex].name;
                            prefab.transform.position = GetStartPositionFor(prefab.className).position;
                            for (int i = 0; i < prefab.inventorySize; ++i)
                            {
                                // add empty slot or default item if any
                                prefab.inventory.Add(i < prefab.defaultItems.Length ? new ItemSlot(new Item(prefab.defaultItems[i])) : new ItemSlot());
                            }
                            for (int i = 0; i < prefab.equipmentInfo.Length; ++i)
                            {
                                // add empty slot or default item if any
                                EquipmentInfo info = prefab.equipmentInfo[i];
                                prefab.equipment.Add(info.defaultItem != null ? new ItemSlot(new Item(info.defaultItem)) : new ItemSlot());
                            }
                            prefab.health = prefab.healthMax; // after equipment in case of boni
                            prefab.mana   = prefab.manaMax;   // after equipment in case of boni

                            // addon system hooks
                            Utils.InvokeMany(typeof(NetworkManagerMMO), this, "OnServerCharacterCreate_", message, prefab);

                            // save the player
                            Database.CharacterSave(prefab, false);
                            GameObject.Destroy(prefab.gameObject);

                            // send available characters list again, causing
                            // the client to switch to the character
                            // selection scene again
                            CharactersAvailableMsg reply = MakeCharactersAvailableMessage(account);
                            netMsg.conn.Send(CharactersAvailableMsg.MsgId, reply);
                        }
                        else
                        {
                            print("character invalid class: " + message.classIndex);
                            ClientSendPopup(netMsg.conn, "character invalid class", false);
                        }
                    }
                    else
                    {
                        print("character limit reached: " + message.name);
                        ClientSendPopup(netMsg.conn, "character limit reached", false);
                    }
                }
                else
                {
                    print("character name already exists: " + message.name);
                    ClientSendPopup(netMsg.conn, "name already exists", false);
                }
            }
            else
            {
                print("character name not allowed: " + message.name);
                ClientSendPopup(netMsg.conn, "character name not allowed", false);
            }
        }
        else
        {
            print("CharacterCreate: not in lobby");
            ClientSendPopup(netMsg.conn, "CharacterCreate: not in lobby", true);
        }
    }
Ejemplo n.º 18
0
 void OnServerCharacterCreate_Example(CharacterCreateMsg message, Player player)
 {
 }
    private void OnServerCharacterCreate_UCE_Traits(CharacterCreateMsg netMsg, Player player)
    {
        if (netMsg == null || netMsg.traits == null || netMsg.traits.Length == 0) return;

        foreach (int traitId in netMsg.traits)
        {
            if (traitId != 0)
            {
                UCE_TraitTemplate trait;
                if (UCE_TraitTemplate.dict.TryGetValue(traitId, out trait))
                {
                    player.UCE_Traits.Add(new UCE_Trait(trait));
					
					
#if _iMMOATTRIBUTES
					foreach (UCE_AttributeTemplate template in player.playerAttributes.UCE_AttributeTypes)
					{
						if (template == null) continue;
						UCE_Attribute attr = new UCE_Attribute(template);
						player.playerAttributes.UCE_Attributes.Add(attr);
					}
#endif
									
                    // ----------------------------------------------------------------------
                    foreach (UCE_SkillRequirement startSkill in trait.startingSkills)
                    {
                        for (int i = 0; i < player.skills.skills.Count; ++i)
                        {
                            if (player.skills.skills[i].data == startSkill.skill)
                            {
                                Skill skill = player.skills.skills[i];
                                skill.level += startSkill.level;
                                player.skills.skills[i] = skill;
                            }
                        }
                    }

                    // ----------------------------------------------------------------------
                    foreach (UCE_ItemModifier startItem in trait.startingItems)
                    {
                        player.inventory.Add(new Item(startItem.item), startItem.amount);
                    }

#if _iMMOPRESTIGECLASSES
                    if (trait.startingPrestigeClass != null)
                        player.UCE_prestigeClass = trait.startingPrestigeClass;
#endif
#if _iMMOHONORSHOP
                    foreach (UCE_HonorShopCurrencyCost currency in trait.startingHonorCurrency)
                        player.UCE_AddHonorCurrency(currency.honorCurrency, currency.amount);
#endif
#if _iMMOFACTIONS
                    foreach (UCE_FactionRating faction in trait.startingFactions)
                        player.UCE_AddFactionRating(faction.faction, faction.startRating);
#endif
#if _iMMOCRAFTING
                    foreach (UCE_CraftingProfessionRequirement prof in trait.startingCraftingProfession)
                    {
                        if (player.UCE_HasCraftingProfession(prof.template))
                        {
                            var tmpProf = player.UCE_getCraftingProfession(prof.template);
                            tmpProf.experience += prof.level;
                            player.UCE_setCraftingProfession(tmpProf);
                        }
                        else
                        {
                            UCE_CraftingProfession tmpProf = new UCE_CraftingProfession(prof.template.name);
                            tmpProf.experience += prof.level;
                            player.UCE_Crafts.Add(tmpProf);
                        }
                    }
#endif
#if _iMMOHARVESTING
                    foreach (UCE_HarvestingProfessionRequirement prof in trait.startingHarvestingProfession)
                    {
                        if (player.HasHarvestingProfession(prof.template))
                        {
                            var tmpProf = player.getHarvestingProfession(prof.template);
                            tmpProf.experience += prof.level;
                            player.SetHarvestingProfession(tmpProf);
                        }
                        else
                        {
                            UCE_HarvestingProfession tmpProf = new UCE_HarvestingProfession(prof.template.name);
                            tmpProf.experience += prof.level;
                            player.UCE_Professions.Add(tmpProf);
                        }
                    }
#endif
#if _iMMOPVP
                    player.UCE_setRealm(trait.changeRealm, trait.changeAlliedRealm);
#endif
					
					// ------------ Recalculate all Maxes here again (in case of bonusses)
					
					player.health.current = player.health.max;
					player.mana.current = player.mana.max;
#if _iMMOSTAMINA
					player.stamina = player.staminaMax;
#endif
					
					// ----------------------------------------------------------------------
					
                }
            }
        }
    }
Ejemplo n.º 20
0
    void OnServerCharacterCreate(NetworkConnection conn, CharacterCreateMsg message)
    {
        //print("OnServerCharacterCreate " + conn);

        // only while in lobby (aka after handshake and not ingame)
        if (lobby.ContainsKey(conn))
        {
            // allowed character name?
            if (IsAllowedCharacterName(message.name))
            {
                // not existent yet?
                string account = lobby[conn];
                if (!Database.singleton.CharacterExists(message.name))
                {
                    // not too may characters created yet?
                    if (Database.singleton.CharactersForAccount(account).Count < characterLimit)
                    {
                        // valid class index?
                        if (0 <= message.classIndex && message.classIndex < playerClasses.Count)
                        {
                            // game master can only be requested by the host.
                            // DO NOT allow regular connections to create GMs!
                            if (message.gameMaster == false ||
                                conn == NetworkServer.localConnection)
                            {
                                // create new character based on the prefab.
                                Player player = CreateCharacter(playerClasses[message.classIndex].gameObject, message.name, account, message.gameMaster);

                                // addon system hooks
                                onServerCharacterCreate.Invoke(message, player);

                                // save the player
                                Database.singleton.CharacterSave(player, false);
                                Destroy(player.gameObject);

                                // send available characters list again, causing
                                // the client to switch to the character
                                // selection scene again
                                conn.Send(MakeCharactersAvailableMessage(account));
                            }
                            else
                            {
                                //print("character insufficient permissions for GM request: " + conn);  <- don't show on live server
                                ServerSendError(conn, "insufficient permissions", false);
                            }
                        }
                        else
                        {
                            //print("character invalid class: " + message.classIndex);  <- don't show on live server
                            ServerSendError(conn, "character invalid class", false);
                        }
                    }
                    else
                    {
                        //print("character limit reached: " + message.name); <- don't show on live server
                        ServerSendError(conn, "character limit reached", false);
                    }
                }
                else
                {
                    //print("character name already exists: " + message.name); <- don't show on live server
                    ServerSendError(conn, "name already exists", false);
                }
            }
            else
            {
                //print("character name not allowed: " + message.name); <- don't show on live server
                ServerSendError(conn, "character name not allowed", false);
            }
        }
        else
        {
            //print("CharacterCreate: not in lobby"); <- don't show on live server
            ServerSendError(conn, "CharacterCreate: not in lobby", true);
        }
    }