Esempio n. 1
0
        private static ToolResult CopyUsedTexturesObj(string objFile, string outputDirectory, string textureDirectory)
        {
            bool    success = false;
            string  message = "";
            ObjData objData = ObjParser.TryParseObj(objFile);

            if (objData != null)
            {
                objData.UpdateMtlData();
                MtlData mtlData = objData.Mtl;

                if (mtlData != null)
                {
                    success = ObjModifier.CopyUsedTextures(mtlData, outputDirectory, textureDirectory);
                    message = MessageBoxConstants.GetMessageExecutionGeneric(success);
                }
                else
                {
                    message = MessageBoxConstants.MessageErrorCopyTextures + MessageBoxConstants.MessageMtlNotFound;
                }
            }
            else
            {
                message = MessageBoxConstants.GetMessageExecutionErrorParse(objFile);
            }
            return(new ToolResult(message, success));
        }
Esempio n. 2
0
    public void Load(ObjData obj)
    {
        if (CheckIsActive(obj.sUid) != null)
        {
            return;
        }
        if (!MoveToActive(obj))
        {
            SceneObj sceneObj = new SceneObj(obj);
            sceneObj.status = SceneObjStatus.New;

            GameObject   resObj = null;
            ResourcesObj resourceObj;
            if (ResourcesObjDic.TryGetValue(obj.resPath, out resourceObj))
            {
                resObj = resourceObj.obj;
                resourceObj.CreateIns();
            }
            else
            {
                resObj = Resources.Load <GameObject>(obj.resPath);
            }

            CreateObj(resObj, sceneObj);
            ActiveObjDic.Add(obj.sUid, sceneObj);
        }
    }
Esempio n. 3
0
        /// <summary>
        /// Rename every material from the obj and mtl to make them unique after the merge
        /// </summary>
        /// <param name="objData"></param>
        /// <param name="mtlData"></param>
        /// <param name="indexMaterial"></param>
        private static void SetUniqueMaterialsNames(ObjData objData, MtlData mtlData, IntWrapper indexMaterial)
        {
            // Dictionary that associate every material to a list of groups
            Dictionary <string, List <int> > dictMaterialGroups = ObjUtils.GetDictMaterialGroups(objData);

            if (mtlData == null) // Need to rename the Materials in obj only
            {
                foreach (KeyValuePair <string, List <int> > keyValue in dictMaterialGroups)
                {
                    SetUniqueMaterialsName(objData, keyValue.Value, indexMaterial);
                    indexMaterial.Value++;
                }
            }
            else // Need to rename the Materials in both obj and mtl
            {
                // Dictionary that associate every material of the mtl file to their index
                Dictionary <string, int> dictMaterialIndex = MtlUtils.GetDictMaterialIndex(mtlData);

                foreach (KeyValuePair <string, List <int> > keyValue in dictMaterialGroups)
                {
                    SetUniqueMaterialsName(objData, keyValue.Value, indexMaterial);

                    if (dictMaterialIndex.TryGetValue(keyValue.Key, out int index)) // We get the index of the material
                    {
                        MaterialMtl materialMtl = mtlData.MaterialsList[index];
                        if (materialMtl.NewMtl != null)
                        {
                            materialMtl.NewMtl = GenericUtils.MergeIndexStr(indexMaterial.Value, materialMtl.NewMtl);
                        }
                    }
                    indexMaterial.Value++;
                }
            }
        }
        private void CreateHeroPreview(uint heroId, int i)
        {
            CUIFormScript form = Singleton <CUIManager> .GetInstance().GetForm(HeroChooseLogic.s_heroInitChooseFormPath);

            if (form == null)
            {
                return;
            }
            string            name       = string.Format("RawImage{0}", i);
            GameObject        gameObject = form.transform.Find(name).gameObject;
            CUIRawImageScript component  = gameObject.GetComponent <CUIRawImageScript>();
            ObjData           hero3DObj  = CUICommonSystem.GetHero3DObj(heroId, true);

            if (hero3DObj.Object == null)
            {
                return;
            }
            component.AddGameObject(name, hero3DObj.Object, Vector3.zero, Quaternion.identity, hero3DObj.Object.transform.localScale);
            this.cacheObjList.Add(hero3DObj.Object);
            CUIEventScript cUIEventScript = gameObject.GetComponent <CUIEventScript>();

            if (cUIEventScript == null)
            {
                cUIEventScript = gameObject.AddComponent <CUIEventScript>();
                cUIEventScript.Initialize(form);
            }
            cUIEventScript.SetUIEvent(enUIEventType.Click, enUIEventID.Hero_Init_Select, new stUIEventParams
            {
                heroId = heroId
            });
        }
Esempio n. 5
0
        /// <summary>
        /// Try to parse the obj file to make the data useable. Return null if error during the parsing
        /// </summary>
        /// <param name="file">File to parse</param>
        /// <param name="parseMtl">Parse the mtl file directly</param>
        /// <returns>WrlData if successful, null otherwise</returns>
        public static ObjData TryParseObj(string file, bool parseMtl = true)
        {
            ObjData objData = null;

            try { objData = ParseObj(file, parseMtl); } catch { }
            return(objData);
        }
Esempio n. 6
0
    //this methode shades the objects in uv space
    //it's called by the Render(...) every frame for every object
    //Input:    obj:            ObjData, obj, for which the tilemask should be created
    //          renderContext:  ScriptableRenderContext
    //          camera:         Camera in scene
    void RunObjectSpaceComputeShader(ObjData obj)
    {
        //vertex location buffer
        Vector3[]     locPos         = GetVertices(obj.obj);
        ComputeBuffer locationBuffer = new ComputeBuffer(locPos.Length, sizeof(float) * 3);

        locationBuffer.SetData(locPos);

        //vertex normal buffer
        Vector3[]     normals      = GetNormals(obj.obj);
        ComputeBuffer normalBuffer = new ComputeBuffer(normals.Length, sizeof(float) * 3);

        normalBuffer.SetData(normals);

        //setup cs parameters
        worldPosShader.SetMatrix("localToWorldMatrix", obj.obj.GetComponent <Renderer>().localToWorldMatrix);
        worldPosShader.SetTexture(worldPosKernel, "tileMask", obj.tileMask);
        worldPosShader.SetTexture(worldPosKernel, "vertexIds", obj.obj.GetComponent <Renderer>().material.GetTexture("_VertexIDs"));
        worldPosShader.SetTexture(worldPosKernel, "objectTexture", obj.obj.GetComponent <Renderer>().material.GetTexture("_Texture"));
        worldPosShader.SetTexture(worldPosKernel, "baycentCoords", obj.obj.GetComponent <Renderer>().material.GetTexture("_BaycentCoords"));
        worldPosShader.SetBuffer(worldPosKernel, "vertexPositions", locationBuffer);
        worldPosShader.SetBuffer(worldPosKernel, "vertexNormals", normalBuffer);
        worldPosShader.SetTexture(worldPosKernel, "textureTiles", obj.obj.GetComponent <Renderer>().material.GetTexture("_TextureAtlas"));

        //Call compute shader
        worldPosShader.Dispatch(worldPosKernel, MAX_TEXTURE_SIZE * 2 / 8, MAX_TEXTURE_SIZE / 8, 1);

        //release buffer
        locationBuffer.Release();
        normalBuffer.Release();
    }
Esempio n. 7
0
            public bool CheckAndUpdateInfo()
            {
                VertsCount     = 0;
                PolygonsCount  = 0;
                SubMeshesCount = 0;
                bool fileExist = System.IO.File.Exists(Path);

                if (!fileExist)
                {
                    Info       = "missing file";
                    VertsCount = -1;
                    return(false);
                }
                else if (ObjData.GetObjInfo(Path, ref MeshName, ref VertsCount, ref PolygonsCount, ref SubMeshesCount))
                {
                    Info = string.Format("{0}.obj {1} verts, {2} polygons, {3} submeshes", MeshName, VertsCount, PolygonsCount, SubMeshesCount);
                    return(true);
                }
                else
                {
                    Info       = "not valid obj file";
                    VertsCount = -1;
                    return(false);
                }
            }
    void GatherRenderObject()
    {
        if (LRayMarchObjects == null)
        {
            return;
        }
        if (LRayMarchObjects.Length == 0)
        {
            Debug.Log("Zero Object");
            return;
        }


        MarchData.Clear();
        for (int i = 0; i < LRayMarchObjects.Length; i++)
        {
            ObjData OD = new ObjData();
            OD.ShType   = (int)LRayMarchobjProperties[i].ShType;
            OD.OpType   = (int)LRayMarchobjProperties[i].OpType;
            OD.material = LRayMarchobjProperties[i].baseColor;
            OD.origin   = LRayMarchObjects[i].transform.position;
            OD.upvector = LRayMarchObjects[i].transform.up;
            OD.size     = LRayMarchObjects[i].transform.localScale;
            OD.size     = LRayMarchObjects[i].transform.localScale;

            MarchData.Add(OD);
        }
    }
Esempio n. 9
0
        public void ReedResultServer()
        {
            string         data;
            string         url     = @"https://covid-api.com/api/reports?date=" + DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd") + "&q=egypt";
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                using (Stream stream = response.GetResponseStream())
                    using (StreamReader reader = new StreamReader(stream))
                    {
                        data = reader.ReadToEnd();
                    }

            ObjData dataObj = JsonConvert.DeserializeObject <ObjData>(data);

            if (dataObj.data[0] != null && !context.Corons.Any(c => c.Date.Equals(DateTime.Now)))
            {
                context.Add(new Coron {
                    Active    = dataObj.data[0].active,
                    Confirmed = dataObj.data[0].confirmed.ToString(),
                    Date      = dataObj.data[0].date,
                    Deaths    = dataObj.data[0].deaths,
                    Recovered = dataObj.data[0].recovered
                });
                context.SaveChanges();
            }
        }
Esempio n. 10
0
    void Awake()
    {
        if (instance == null)
        {
            instance = this;
        }

        Block = new GameObject[]
        {
            NONE,
            USER,
            DUPL,
            FINI
        };

        float fix = 1080f / Screen.width; // 0.5f
        float h   = (Screen.height * fix - Screen.width * fix) * 0.5f;

        if (h < 360f)
        {
            h = 360;
        }

        ButtonPanel.GetComponent <RectTransform>().sizeDelta = new Vector2(0, h);
        StagePanel.GetComponent <RectTransform>().sizeDelta  = new Vector2(0, h);
    }
Esempio n. 11
0
    public ObjData ConvertFileAsync(string objFilePath, bool useMtl, Material standardMaterial, Material transparentMaterial)
    {
        var objData = new ObjData();

        ConvertFile(objFilePath, useMtl, standardMaterial, transparentMaterial, objData);
        return(objData);
    }
Esempio n. 12
0
        /// <summary>
        /// Return a dictionary with each Material associated to the indexes of their Group
        /// </summary>
        /// <param name="objData"></param>
        /// <returns></returns>
        public static Dictionary <string, List <int> > GetDictMaterialGroups(ObjData objData)
        {
            var dict = new Dictionary <string, List <int> >();

            int i = 0;

            foreach (ObjectObj objectObj in objData.ObjectsList)
            {
                if (objectObj.MaterialName != null)
                {
                    if (dict.TryGetValue(objectObj.MaterialName, out List <int> groups))
                    {
                        groups.Add(i); // If the keyvalue already exists, we add the new index
                    }
                    else
                    {
                        dict.Add(objectObj.MaterialName, new List <int>()
                        {
                            i
                        });                                                      // Otherwise, we create the new keyvalue
                    }
                }
                i++;
            }
            return(dict);
        }
Esempio n. 13
0
        /// <summary>
        /// Merge the list of given ObjData into a single one and returns it
        /// </summary>
        /// <param name="objFiles"></param>
        /// <returns></returns>
        public static ObjData MergeObjFiles(List <ObjData> objFiles)
        {
            if (objFiles != null)
            {
                int length = objFiles.Count;
                if (length >= 1) // Should always be the case
                {
                    ObjData objData = objFiles[0];

                    if (length == 1) // Only one objData
                    {
                        return(objData);
                    }
                    else // More objData to merge with the first one
                    {
                        IntWrapper indexMaterial = new IntWrapper(0);
                        // Rename every materials to be unique
                        SetUniqueMaterialsNames(objData, objData.Mtl, indexMaterial);

                        for (int i = 1; i < length; i++)
                        {
                            ObjData nextObjData = objFiles[i];
                            SetUniqueMaterialsNames(nextObjData, nextObjData.Mtl, indexMaterial);
                            objData.MergeObjData(nextObjData);
                        }
                        return(objData);
                    }
                }
            }
            return(null);
        }
Esempio n. 14
0
        /// <summary>
        /// Extract each .bmp texture from the material or group and store it into the TextureName attributes
        /// </summary>
        /// <param name="objData">Data parsed from the obj file</param>
        public static void ParseTextures(ObjData objData)
        {
            foreach (ObjectObj objectObj in objData.ObjectsList)
            {
                if (objectObj.GroupName == null)
                {
                    if (objectObj.ObjectName != null)
                    {
                        objectObj.GroupName = objectObj.ObjectName;
                    }
                    else // Impossible to set a group name (unlikely to happen)
                    {
                        continue;
                    }
                }

                if (objectObj.MaterialName == null) // If no material
                {
                    objectObj.MaterialName = objectObj.GroupName;
                }

                if (objectObj.TextureName == null) // No texture assigned currently
                {
                    string textureName = GenericUtils.ExtractTextureNameFromMaterial(objectObj.MaterialName);
                    if (textureName == null) // No bmp found in the material
                    {
                        textureName = GenericUtils.ExtractTextureNameFromMaterial(objectObj.GroupName);
                    }
                    objectObj.TextureName = textureName;
                }
            }
        }
Esempio n. 15
0
    private IEnumerator IELoad(ObjData obj)
    {
        SceneObj sceneObj = new SceneObj(obj);

        sceneObj.status = SceneObjStatus.Loading;
        ActiveObjDic.Add(obj.sUid, sceneObj);
        GameObject   resObj = null;
        ResourcesObj resourceObj;

        if (ResourcesObjDic.TryGetValue(obj.resPath, out resourceObj))
        {
            resObj = resourceObj.obj;
            resourceObj.CreateIns();
        }
        else
        {
            ResourceRequest request = Resources.LoadAsync <GameObject>(obj.resPath);
            yield return(request);

            resObj = request.asset as GameObject;
        }

        CreateObj(resObj, sceneObj);
        sceneObj.status = SceneObjStatus.New;
    }
Esempio n. 16
0
        private static ToolResult ConvertObjToSmd(string objFile, string smdOutput, bool useTextureName)
        {
            bool    success = false;
            string  message = "";
            ObjData objData = ObjParser.TryParseObj(objFile);

            if (objData != null)
            {
                objData.UpdateMtlData();
                MtlData mtlData = objData.Mtl;

                if (mtlData == null)
                {
                    // No MTL means the SMD will use a default material name for all objects
                    useTextureName = false;
                }
                success = SmdExporter.WriteSmd(objData, mtlData, smdOutput, useTextureName);
                message = MessageBoxConstants.GetMessageExecutionCreation(success, smdOutput);
            }
            else
            {
                message = MessageBoxConstants.GetMessageExecutionErrorParse(objFile);
            }
            return(new ToolResult(message, success));
        }
Esempio n. 17
0
        private static ToolResult MergeObjFiles(List <string> fileList, string objOutput)
        {
            bool          success = false;
            StringBuilder sb      = new StringBuilder();

            if (fileList != null)
            {
                List <ObjData> objDatas = ObjParser.ParseObjs(fileList);
                ObjData        objData  = ObjModifier.MergeObjFiles(objDatas);
                if (objData != null)
                {
                    success = ObjExporter.WriteObj(objData, objData.Mtl, objOutput, makeMtl: true, useExistingMtl: true);
                    sb.AppendLine($"Merged {objDatas.Count} obj files into one");
                    sb.Append(MessageBoxConstants.GetMessageExecutionCreation(success, objOutput));
                }
                else
                {
                    sb.Append(MessageBoxConstants.MessageErrorMergeObj + MessageBoxConstants.MessageErrorExecution);
                }
            }
            else
            {
                sb.Append(MessageBoxConstants.MessageErrorMergeObj + MessageBoxConstants.MessageNoFilesMerge);
            }
            return(new ToolResult(sb.ToString(), success));
        }
Esempio n. 18
0
        public static void AddView(ushort id, netvrkView view, GameObject go)
        {
            MonoBehaviour[] scripts = go.GetComponents <MonoBehaviour>();
            ObjData         data    = objList[id];

            data.netObj = view;

            foreach (MonoBehaviour script in scripts)
            {
                Type         type         = script.GetType();
                MethodInfo[] objectFields = type.GetMethods(BindingFlags.Instance | BindingFlags.Public);
                for (int i = 0; i < objectFields.Length; i++)
                {
                    netvrkRpc attribute = Attribute.GetCustomAttribute(objectFields[i], typeof(netvrkRpc)) as netvrkRpc;
                    if (attribute != null)
                    {
                        data.methods.Add(objectFields[i].Name);
                        data.scripts.Add(script);
                        data.rpcMethods.Add(objectFields[i]);
                    }
                }
                MethodInfo info = type.GetMethod("OnNetvrkReadSyncStream", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
                if (info != null)
                {
                    data.syncMethod = info;
                    data.syncScript = script;
                }
            }
        }
Esempio n. 19
0
        private static ToolResult DeleteUnusedMaterialsObj(string objFile, string objOutput)
        {
            bool    success = false;
            string  message = "";
            ObjData objData = ObjParser.TryParseObj(objFile);

            if (objData != null)
            {
                objData.UpdateMtlData();
                MtlData mtlData = objData.Mtl;
                if (mtlData != null)
                {
                    ObjModifier.DeleteUnusedMaterials(objData, mtlData);
                    success = ObjExporter.WriteObj(objData, mtlData, objOutput, makeMtl: true, useExistingMtl: true);
                    message = MessageBoxConstants.GetMessageExecutionCreation(success, objOutput);
                }
                else
                {
                    message = MessageBoxConstants.MessageErrorDeleteUnusedMaterials +
                              MessageBoxConstants.MessageMtlNotFound;
                }
            }
            else
            {
                message = MessageBoxConstants.GetMessageExecutionErrorParse(objFile);
            }
            return(new ToolResult(message, success));
        }
Esempio n. 20
0
        private void CreateHeroPreview(uint heroId, int i)
        {
            CUIFormScript form = Singleton <CUIManager> .GetInstance().GetForm(s_heroInitChooseFormPath);

            if (form != null)
            {
                string            name       = string.Format("RawImage{0}", i);
                GameObject        gameObject = form.transform.Find(name).gameObject;
                CUIRawImageScript component  = gameObject.GetComponent <CUIRawImageScript>();
                ObjData           data       = CUICommonSystem.GetHero3DObj(heroId, true);
                if (data.Object != null)
                {
                    component.AddGameObject(name, data.Object, Vector3.zero, Quaternion.identity, data.Object.transform.localScale);
                    this.cacheObjList.Add(data.Object);
                    CUIEventScript script3 = gameObject.GetComponent <CUIEventScript>();
                    if (script3 == null)
                    {
                        script3 = gameObject.AddComponent <CUIEventScript>();
                        script3.Initialize(form);
                    }
                    stUIEventParams eventParams = new stUIEventParams {
                        heroId = heroId
                    };
                    script3.SetUIEvent(enUIEventType.Click, enUIEventID.Hero_Init_Select, eventParams);
                }
            }
        }
Esempio n. 21
0
        public static void SendRpc(ushort objId, string method, object[] data, netvrkTargets targets, int channel = 0)
        {
            if (!isConnected)
            {
                Debug.LogWarning("netVRk: Can not send RPCs when not connected!");
                return;
            }
            int methodId = GetObjMethodId(objId, method);

            if (methodId < 0)
            {
                Debug.LogError("netVRk: Rpc method: " + method + " not found!");
                return;
            }

            byte[] bytes = netvrkSerialization.SerializeRpc(objId, (byte)methodId, data);
            for (int i = 0; i < playerList.Count; i++)
            {
                SteamNetworking.SendP2PPacket(playerList[i].SteamId, bytes, (uint)bytes.Length, EP2PSend.k_EP2PSendReliable, channel);
            }
            if (targets == netvrkTargets.All)
            {
                ObjData objData = objList[objId];
                objData.rpcMethods[methodId].Invoke(objData.scripts[methodId], data);
            }
        }
Esempio n. 22
0
    int _sortNameReverse(ObjData a, ObjData b)
    {
        string aname = a.obj == null ? "" : a.obj.name;
        string bname = b.obj == null ? "" : b.obj.name;

        return(string.Compare(bname, aname));
    }
Esempio n. 23
0
    int _sortNameForward(ObjData a, ObjData b)
    {
        string aname = a.obj == null ? "" : a.obj.name;
        string bname = b.obj == null ? "" : b.obj.name;

        return(string.Compare(aname, bname));
    }
        public static byte[] AlchemyResponse(bool isSuccess, ObjData.slotItem sItem, byte type, byte totalblue)
        {
            PacketWriter Writer = new PacketWriter();
            Writer.Create(OperationCode.SERVER_ALCHEMY);
            Writer.Byte(1);
            Writer.Byte(2);
            Writer.Bool(isSuccess);
            Writer.Byte(sItem.Slot);
            if (!isSuccess) { Writer.Byte(0); }
            Writer.DWord(0);
            Writer.DWord(sItem.ID);
            Writer.Byte(sItem.PlusValue);
            Writer.LWord(0);
            Writer.DWord(sItem.Durability);
            Writer.Byte(ObjData.Manager.ItemBlue[sItem.dbID].totalblue);
            for (int i = 0; i <= ObjData.Manager.ItemBlue[sItem.dbID].totalblue - 1; i++)
            {
                Writer.DWord(ObjData.Manager.MagicOptions.Find(mg => (mg.Name == Convert.ToString(ObjData.Manager.ItemBlue[sItem.dbID].blue[i]))).ID);
                Writer.DWord(ObjData.Manager.ItemBlue[sItem.dbID].blueamount[i]);
            }
            Writer.Word(1);
            Writer.Word(2);
            Writer.Word(3);

            return Writer.GetBytes();
        }
Esempio n. 25
0
        /// <summary>
        /// Delete every unused material the obj file
        /// </summary>
        /// <param name="objData">Data parsed from the obj file</param>
        /// <param name="mtlData">Data parsed from the mtl file</param>
        public static bool DeleteUnusedMaterials(ObjData objData, MtlData mtlData)
        {
            if (mtlData == null)
            {
                return(false);
            }

            // Dictionary that associate every material to a list of groups
            Dictionary <string, List <int> > dictMaterialGroups = ObjUtils.GetDictMaterialGroups(objData);

            // Dictionary that associate every material of the mtl file to their index
            Dictionary <string, int> dictMaterialIndex = MtlUtils.GetDictMaterialIndex(mtlData);

            List <MaterialMtl> newMaterialsList = new List <MaterialMtl>();

            foreach (KeyValuePair <string, List <int> > keyValue in dictMaterialGroups)
            {
                if (dictMaterialIndex.TryGetValue(keyValue.Key, out int index)) // We get the index of the material
                {
                    MaterialMtl materialMtl = mtlData.MaterialsList[index];
                    newMaterialsList.Add(materialMtl);
                }
            }

            // Every material that wasnt used in a group was not added to the list
            mtlData.MaterialsList = newMaterialsList;
            return(true);
        }
Esempio n. 26
0
        private void UnpackRpc(byte[] buffer)
        {
            netvrkSerialization.unpackOutput output = netvrkSerialization.UnserializeRpc(buffer);
            ObjData data = objList[output.objectId];
            int     id   = output.methodId;

            data.rpcMethods[id].Invoke(data.scripts[id], output.data);
        }
Esempio n. 27
0
 /// <summary>
 /// Delete every material from each object
 /// </summary>
 /// <param name="objData">Data parsed from the obj file</param>
 public static void DeleteMaterials(ObjData objData)
 {
     foreach (ObjectObj objectObj in objData.ObjectsList)
     {
         objectObj.MaterialName = null;
         objectObj.TextureName  = null;
     }
 }
Esempio n. 28
0
    public void Action(GameObject scanObj)
    {
        scanObject = scanObj;
        ObjData objData = scanObject.GetComponent <ObjData>();

        Talk(objData.id, objData.isNpc);

        talkPanel.SetBool("isShow", isAction);
    }
Esempio n. 29
0
        private void AddInternals()
        {
            ObjData data = new ObjData();

            data.methods = new List <string>();
            string[] enumNames = Enum.GetNames(typeof(InternalMethod));
            data.methods.AddRange(enumNames);
            objList.Add(0, data);
        }
Esempio n. 30
0
    public void Action(GameObject scanObj)
    {
        scanObject = scanObj;
        ObjData objData = scanObject.GetComponent <ObjData>();

        Talk(objData.id, objData.isNPC);

        talkPanel.SetActive(isAction);
    }
Esempio n. 31
0
        private void InitializePage()
        {
            DataSet ds          = ObjData.GetlistTop10();
            int     recordCount = 10;// ObjData.GetOrdersCount();

            gvLogList.DataSource     = ds;
            logListPager.RecordCount = recordCount;
            gvLogList.DataBind();
        }
 public static double gamedistance(ObjData.vektor p1, ObjData.vektor p2)
 {
     // Nukei: for test with range checking on objects, maybe faster than only calculating distance
     if ((p1.xSec >= p2.xSec - 1) && (p1.xSec <= p2.xSec + 1) && (p1.ySec >= p2.ySec - 1) && (p1.ySec <= p2.ySec + 1))
     {
         return gamedistance(p1.x, p1.y, p2.x, p2.y);
     }
     else
     {
         return 99999999999999;
     }
 }
 public static byte[] StopMovement(ObjData.vektor p)
 {
     PacketWriter Writer = new PacketWriter();
     Writer.Create(OperationCode.SERVER_PICKUPITEM_MOVE);
     Writer.DWord(p.ID);
     Writer.Byte(p.xSec);
     Writer.Byte(p.ySec);
     Writer.Float(p.x);
     Writer.Float(p.z);
     Writer.Float(p.y);
     Writer.Word(0/*p.Angle*/); // Angle
     return Writer.GetBytes();
 }
        public static byte[] Movement(ObjData.vektor p)
        {
            PacketWriter Writer = new PacketWriter();
                Writer.Create(OperationCode.SERVER_MOVEMENT);     //Select opcode
                Writer.DWord(p.ID);                         //Player ID
                Writer.Bool(true);                          //Bool 1
                Writer.Byte(p.xSec);                        //Player X Sector
                Writer.Byte(p.ySec);                        //Player Y Sector
                if (!FileDB.CheckCave(p.xSec, p.ySec))
                {
                Writer.Word(p.x);                    //Player X Location
                Writer.Word(p.z);                    //Player Z Location
                Writer.Word(p.y);                    //Player Y Location
                }
                else
                {
                    if (p.x < 0)
                    {
                        Writer.Word(p.x);
                        Writer.Word(0xFFFF);
                    }
                    else
                    {
                        Writer.DWord(p.x);
                    }
                    Writer.DWord(p.z);

                    if (p.y < 0)
                    {
                        Writer.Word(p.y);
                        Writer.Word(0xFFFF);
                    }
                    else
                    {
                        Writer.DWord(p.y);
                    }
                }
                Writer.Bool(false);
                /* ReSearch this is ext packets
                Writer.Byte(p.xSec);                        //Player X Sector
                Writer.Byte(p.ySec);                        //Player Y Sector
                Writer.Word(p.x);                    //Player X Location
                Writer.DWord(p.z);                    //Player Z Location
                Writer.Word(p.y);         */           //Player Y Location
                return Writer.GetBytes();
        }
 public void Add(ObjData.slotItem objects)
 {
     if (item.Count < 5)
     {
         item.Add(objects);
     }
     else
     {
         if (item.Count >= 5)
         {
             item[0] = item[1];
             item[1] = item[2];
             item[2] = item[3];
             item[3] = item[4];
             item[4] = objects;
         }
     }
 }
Esempio n. 36
0
    private IEnumerator GetTexturesAsync(string mtlFile, LinesRef linesRef, string filePath, Dictionary<string, Texture2D> textures, ObjData objData, BoolRef loadError)
    {
        Texture2D diffuseTexture = null;
        string[] lines = mtlFile.Split ('\n');

        int numberOfTextures = 0;

        // See how many textures there are (to use for progress)
        for (int i = 0; i < lines.Length; i++) {
            var line = lines[i];
            CleanLine (ref line);
            lines[i] = line;

            if (line.Length < 7 || line[0] == '#') {
                continue;
            }

            if (IsTextureLine (line) && filePath != "") {
                numberOfTextures++;
            }
        }

        float progress = .5f;
        for (int i = 0; i < lines.Length; i++) {
            if (lines[i].Length < 7 || lines[i][0] == '#') {
                continue;
            }

            // Get diffuse/bump texture
            if (IsTextureLine (lines[i]) && filePath != "") {
                var textureFilePath = GetFileName (lines[i], GetToken (lines[i]));
                if (textureFilePath != "") {
                    var completeFilePath = filePath + textureFilePath;
                    var www = new WWW(completeFilePath);
                    while (!www.isDone) {
                        objData.SetProgress (progress + (www.progress / numberOfTextures) * .5f);
                        if (objData.cancel) {
                            loadError.b = true;
                            yield break;
                        }
                        yield return null;
                    }
                    if (www.error != null) {
                        Debug.LogError ("Error loading " + completeFilePath + ": " + www.error);
                        loadError.b = true;
                        objData.SetDone();
                        yield break;
                    }
                    progress += (1.0f / numberOfTextures) * .5f;
                    diffuseTexture = new Texture2D (4, 4);
                    www.LoadImageIntoTexture (diffuseTexture);
                    if (lines[i].StartsWith ("map_bump") || lines[i].StartsWith ("bump")) {
                        ConvertToNormalmap (diffuseTexture);
                    }
                    textures[textureFilePath] = diffuseTexture;
                }
            }
        }
        linesRef.lines = lines;
    }
Esempio n. 37
0
    private GameObject[] CreateObjects(ref string objFile, bool useMtl, Dictionary<string, Material> materials, Material standardMaterial, ObjData objData, string fileName)
    {
        // Set up obj file
        string[] fileLines = objFile.Split ('\n');

        int totalVertices = 0;
        int totalUVs = 0;
        int totalNormals = 0;

        var foundF = false;
        var foundGroupStart = false;
        int firstFCount = 0;
        int groupCount = 0;
        var originalGroupIndices = new List<int>();
        int faceCount = 0;
        maxPoints = Mathf.Clamp (maxPoints, 0, 65534);

        // Find number of groups in file; also find total number of vertices, normals, and uvs
        for (int i = 0; i < fileLines.Length; i++) {
            if (fileLines[i].Length < 2) continue;

            char char1 = System.Char.ToLower(fileLines[i][0]);
            char char2 = System.Char.ToLower(fileLines[i][1]);
            if (char1 == 'f' && char2 == ' ') {
                if (!foundF) {
                    firstFCount = faceCount;
                }
                faceCount++;
                if (foundGroupStart && !foundF) {
                    groupCount++;
                    originalGroupIndices.Add (firstFCount);
                    foundGroupStart = false;
                }
                foundF = true;
            }
            else if ((char1 == 'o' && char2 == ' ') || (char1 == 'g' && char2 == ' ') || (char1 == 'u' && char2 == 's')) {	// "us" == "usemtl"
                foundGroupStart = true;
                foundF = false;
            }
            else if (char1 == 'v' && char2 == ' ') {
                totalVertices++;
            }
            else if (char1 == 'v' && char2 == 't') {
                totalUVs++;
            }
            else if (useSuppliedNormals && char1 == 'v' && char2 == 'n') {
                totalNormals++;
            }
        }

        if (groupCount == 0) {
            originalGroupIndices.Add (firstFCount);
            groupCount = 1;
        }

        if (totalVertices == 0) {
            Debug.LogError ("No vertices found in file");
            return null;
        }
        if (faceCount == 0) {
            Debug.LogError ("No face data found in file");
            return null;
        }

        originalGroupIndices.Add (-1);

        int verticesCount = 0;
        int uvsCount = 0;
        int normalsCount = 0;

        var objVertices = new Vector3[totalVertices];
        var objUVs = new Vector2[totalUVs];
        var objNormals = new Vector3[totalNormals];
        var triData = new List<string>();
        var quadWarning = false;
        var polyWarning = false;
        var objectNames = new string[groupCount];
        var materialNames = new string[groupCount];
        int index = 0;
        var lineInfo = new string[0];
        var groupIndices = new int[groupCount+1];
        int numberOfGroupsUsed = 0;
        faceCount = 0;
        groupCount = 0;
        int mtlCount = 0;
        int objectNamesCount = 0;

        try {
            while (index < fileLines.Length) {
                var line = fileLines[index++];

                // Skip over comments and short lines
                if (line.Length < 3 || line[0] == '#') continue;

                // Remove excess whitespace
                CleanLine (ref line);
                // Skip over short lines (again, in the off chance the above line made this line too short)
                if (line.Length < 3) continue;

                // If line ends with "\" then combine with the next line, assuming there is one (should be, but just in case)
                while (line[line.Length-1] == '\\' && index < fileLines.Length) {
                    line = line.Substring (0, line.Length-1) + " " + fileLines[index++].TrimEnd();
                    CleanLine (ref line);
                }

                char char1 = System.Char.ToLower(line[0]);
                char char2 = System.Char.ToLower(line[1]);
                // Get material name from usemtl line, plus object name if it doesn't have one from g or o lines
                if (char1 == 'u' && char2 == 's') {
                    if (useMtl && line.StartsWith ("usemtl") && mtlCount++ == 0) {
                        lineInfo = line.Split (' ');
                        if (lineInfo.Length > 1) {
                            materialNames[groupCount] = lineInfo[1];
                            if (objectNamesCount++ == 0) {
                                if (useFileNameAsObjectName && fileName != "") {
                                    objectNames[groupCount] = fileName;
                                }
                                else {
                                    objectNames[groupCount] = lineInfo[1];
                                }
                            }
                        }
                    }
                }
                // Get object name
                else if (((char1 == 'o' && char2 == ' ') || (char1 == 'g' && char2 == ' ')) && objectNamesCount++ == 0) {
                    if (useFileNameAsObjectName && fileName != "") {
                        objectNames[groupCount] = fileName;
                    }
                    else {
                        objectNames[groupCount] = line.Substring (2, line.Length-2);
                    }
                }
                // Read vertices
                else if (char1 == 'v' && char2 == ' ') {
                    lineInfo = line.Split (' ');
                    if (lineInfo.Length != 4) {
                        throw new System.Exception ("Incorrect number of points while trying to read vertices:\n" + line + "\n");
                    }
                    else {
                        // Invert x value so it works properly in Unity (left-handed)
                        objVertices[verticesCount++] = new Vector3(-float.Parse (lineInfo[1], CultureInfo.InvariantCulture), float.Parse (lineInfo[2], CultureInfo.InvariantCulture), float.Parse (lineInfo[3], CultureInfo.InvariantCulture));
                    }
                }
                // Read UVs
                else if (char1 == 'v' && char2 == 't') {
                    lineInfo = line.Split (' ');
                    if (lineInfo.Length > 4 || lineInfo.Length < 3) {
                        throw new System.Exception ("Incorrect number of points while trying to read UV data:\n" + line + "\n");
                    }
                    else {
                        objUVs[uvsCount++] = new Vector2(float.Parse (lineInfo[1], CultureInfo.InvariantCulture), float.Parse (lineInfo[2], CultureInfo.InvariantCulture));
                    }
                }
                // Read normals
                else if (useSuppliedNormals && char1 == 'v' && char2 == 'n') {
                    lineInfo = line.Split (' ');
                    if (lineInfo.Length != 4) {
                        throw new System.Exception ("Incorrect number of points while trying to read normals:\n" + line + "\n");
                    }
                    else {
                        // Invert x value so it works properly in Unity
                        objNormals[normalsCount++] = new Vector3(-float.Parse (lineInfo[1], CultureInfo.InvariantCulture), float.Parse (lineInfo[2], CultureInfo.InvariantCulture), float.Parse (lineInfo[3], CultureInfo.InvariantCulture));
                    }
                }
                // Read triangle face info
                else if (char1 == 'f' && char2 == ' ') {
                    lineInfo = line.Split (' ');
                    if (lineInfo.Length >= 4 && lineInfo.Length <= 5) {
                        // If data is relative offset, dissect it and replace it with calculated absolute data
                        if (lineInfo[1].Substring (0, 1) == "-") {
                            for (int i = 1; i < lineInfo.Length; i++) {
                                var lineInfoParts = lineInfo[i].Split ('/');
                                lineInfoParts[0] = (verticesCount - -int.Parse (lineInfoParts[0])+1).ToString();
                                if (lineInfoParts.Length > 1) {
                                    if (lineInfoParts[1] != "") {
                                        lineInfoParts[1] = (uvsCount - -int.Parse (lineInfoParts[1])+1).ToString();
                                    }
                                    if (lineInfoParts.Length == 3) {
                                        lineInfoParts[2] = (normalsCount - -int.Parse (lineInfoParts[2])+1).ToString();
                                    }
                                }
                                lineInfo[i] = System.String.Join ("/", lineInfoParts);
                            }
                        }
                        // Triangle
                        for (int i = 1; i < 4; i++) {
                            triData.Add (lineInfo[i]);
                        }
                        // Quad -- split by adding another triangle
                        if (lineInfo.Length == 5) {
                            quadWarning = true;
                            triData.Add (lineInfo[1]);
                            triData.Add (lineInfo[3]);
                            triData.Add (lineInfo[4]);
                        }
                    }
                    // Line describes polygon containing more than 4 or fewer than 3 points, which are not supported
                    else {
                        polyWarning = true;
                    }
                    // Store index for face group start locations
                    if (++faceCount == originalGroupIndices[groupCount+1]) {
                        groupIndices[++groupCount] = triData.Count;
                        mtlCount = 0;
                        objectNamesCount = 0;
                    }
                }
            }
        }
        catch (System.Exception err) {
            GameObject.Find("Canvas").transform.FindChild("PanelPopupLoad").gameObject.SetActive(false);
            Debug.LogError (err.Message);
            return null;
        }

        if (combineMultipleGroups && !useSubmeshesWhenCombining) {
            numberOfGroupsUsed = 1;
            groupIndices[1] = triData.Count;
        }
        else {
            groupIndices[groupCount+1] = triData.Count;
            numberOfGroupsUsed = groupIndices.Length-1;
        }

        // Parse vert/uv/normal index data from triangle face lines
        var triVerts = new int[triData.Count];
        var triUVs = new int[triData.Count];
        var triNorms = new int[triData.Count];
        var lengthCount = 3;
        for (int i = 0; i < triData.Count; i++) {
            string triString = triData[i];
            lineInfo = triString.Split ('/');

            triVerts[i] = int.Parse (lineInfo[0])-1;
            if (lineInfo.Length > 1) {
                if (lineInfo[1] != "") {
                    triUVs[i] = int.Parse (lineInfo[1])-1;
                }
                if (lineInfo.Length == lengthCount && useSuppliedNormals) {
                    triNorms[i] = int.Parse (lineInfo[2])-1;
                }
            }
        }

        var objVertList = new List<Vector3>(objVertices);
        if (totalUVs > 0) {
            SplitOnUVs (triData, triVerts, triUVs, objVertList, objUVs, objVertices, ref verticesCount);
        }

        // Warnings
        if (quadWarning && !suppressWarnings) {
            Debug.LogWarning ("At least one object uses quads...automatic triangle conversion is being used, which may not produce best results");
        }
        if (polyWarning && !suppressWarnings) {
            Debug.LogWarning ("Polygons which are not quads or triangles have been skipped");
        }
        if (totalUVs == 0 && !suppressWarnings) {
            Debug.LogWarning ("At least one object does not seem to be UV mapped...any textures used will appear as a solid color");
        }
        if (totalNormals == 0 && !suppressWarnings) {
            Debug.LogWarning ("No normal data found for at least one object...automatically computing normals instead");
        }

        // Errors
        if (totalVertices == 0 && triData.Count == 0) {
            Debug.LogError ("No objects seem to be present...possibly the .obj file is damaged or could not be read");
            return null;
        }
        else if (totalVertices == 0) {
            Debug.LogError ("The .obj file does not contain any vertices");
            return null;
        }
        else if (triData.Count == 0) {
            Debug.LogError ("The .obj file does not contain any polygons");
            return null;
        }

        // Set up GameObject array...only 1 object if combining groups
        var gameObjects = new GameObject[combineMultipleGroups? 1 : numberOfGroupsUsed];
        for (int i = 0; i < gameObjects.Length; i++) {
            gameObjects[i] = new GameObject(objectNames[i], typeof(MeshFilter), typeof(MeshRenderer));
        }

        // --------------------------------
        // Create meshes from the .obj data
        GameObject go = null;
        Mesh mesh = null;
        Vector3[] newVertices = null;
        Vector2[] newUVs = null;
        Vector3[] newNormals = null;
        int[] newTriangles = null;
        var useSubmesh = (combineMultipleGroups && useSubmeshesWhenCombining && numberOfGroupsUsed > 1)? true : false;
        Material[] newMaterials = null;
        if (useSubmesh) {
            newMaterials = new Material[numberOfGroupsUsed];
        }
        int lastUsedMaterialIndex = 0;
        bool hasUsedMaterial = false;

        for (int i = 0; i < numberOfGroupsUsed; i++) {
            if (!useSubmesh || (useSubmesh && i == 0)) {
                go = gameObjects[i];
                mesh = new Mesh();

                // Find the number of unique vertices used by this group, also used to map original vertices into 0..thisVertices.Count range
                var vertHash = new Dictionary<int, int>();
                var thisVertices = new List<Vector3>();
                int counter = 0;
                int vertHashValue = 0;
                int triStart = groupIndices[i];
                int triEnd = groupIndices[i + 1];
                if (useSubmesh) {
                    triStart = groupIndices[0];
                    triEnd = groupIndices[numberOfGroupsUsed];
                }

                for (int j = triStart; j < triEnd; j++) {
                    if (!vertHash.TryGetValue (triVerts[j], out vertHashValue)) {
                        vertHash[triVerts[j]] = counter++;
                        thisVertices.Add (objVertList[triVerts[j]]);
                    }
                }

                if (thisVertices.Count > maxPoints) {
                    Debug.LogError ("The number of vertices in the object " + objectNames[i] + " exceeds the maximum allowable limit of " + maxPoints);
                    return null;
                }

                newVertices = new Vector3[thisVertices.Count];
                newUVs = new Vector2[thisVertices.Count];
                newNormals = new Vector3[thisVertices.Count];
                newTriangles = new int[triEnd - triStart];

                // Copy .obj mesh data for vertices and triangles to arrays of the correct size
                if (scaleFactor == Vector3.one && objRotation == Vector3.zero && objPosition == Vector3.zero) {
                    for (int j = 0; j < thisVertices.Count; j++) {
                        newVertices[j] = thisVertices[j];
                    }
                }
                else {
                    transform.eulerAngles = objRotation;
                    transform.position = objPosition;
                    transform.localScale = scaleFactor;
                    var thisMatrix = transform.localToWorldMatrix;
                    for (int j = 0; j < thisVertices.Count; j++) {
                        newVertices[j] = thisMatrix.MultiplyPoint3x4 (thisVertices[j]);
                    }
                    transform.position = Vector3.zero;
                    transform.rotation = Quaternion.identity;
                    transform.localScale = Vector3.one;
                }

                // Arrange UVs and normals so they match up with vertices
                if (uvsCount > 0 && normalsCount > 0 && useSuppliedNormals) {
                    for (int j = triStart; j < triEnd; j++) {
                        newUVs[vertHash[triVerts[j]]] = objUVs[triUVs[j]];
                        // Needs to be normalized or lighting is whacked (especially with specular), and some apps don't output normalized normals
                        newNormals[vertHash[triVerts[j]]] = objNormals[triNorms[j]].normalized;
                    }
                }
                else {
                    // Arrange UVs so they match up with vertices
                    if (uvsCount > 0) {
                        for (int j = triStart; j < triEnd; j++) {
                            newUVs[vertHash[triVerts[j]]] = objUVs[triUVs[j]];
                        }
                    }
                    // Arrange normals so they match up with vertices
                    if (normalsCount > 0 && useSuppliedNormals) {
                        for (int j = triStart; j < triEnd; j++) {
                            newNormals[vertHash[triVerts[j]]] = objNormals[triNorms[j]];
                        }
                    }
                }

                // Since we flipped the normals, swap triangle points 2 & 3
                counter = 0;
                for (int j = triStart; j < triEnd; j += 3) {
                    newTriangles[counter  ] = vertHash[triVerts[j  ]];
                    newTriangles[counter+1] = vertHash[triVerts[j+2]];
                    newTriangles[counter+2] = vertHash[triVerts[j+1]];
                    counter += 3;
                }

                mesh.vertices = newVertices;
                mesh.uv = newUVs;

                if (autoCenterOnOrigin) {
                    var offset = mesh.bounds.center;
                    int end = newVertices.Length;
                    for (int j = 0; j < end; j++) {
                        newVertices[j] -= offset;
                    }
                    mesh.vertices = newVertices;
                }

                if (useSuppliedNormals) {
                    mesh.normals = newNormals;
                }
                if (useSubmesh) {
                    mesh.subMeshCount = numberOfGroupsUsed;
                }
            }

            if (useSubmesh) {
                int thisLength = groupIndices[i + 1] - groupIndices[i];
                var thisTriangles = new int[thisLength];
                System.Array.Copy (newTriangles, groupIndices[i], thisTriangles, 0, thisLength);
                mesh.SetTriangles (thisTriangles, i);
                if (materialNames[i] != null) {
                    if (useMtl && materials.ContainsKey (materialNames[i])) {
                        newMaterials[i] = materials[materialNames[i]];
                        if (materials[materialNames[i]]) {

                        }
                        hasUsedMaterial = true;
                        lastUsedMaterialIndex = i;
                    }
                }
                else {
                    if (hasUsedMaterial) {
                        newMaterials[i] = materials[materialNames[lastUsedMaterialIndex]];
                    }
                    else {
                        newMaterials[i] = standardMaterial;
                    }
                }
            }
            else {
                mesh.triangles = newTriangles;
            }

            // Stuff that's done for each object, or at the end if using submeshes
            if (!useSubmesh || (useSubmesh && i == numberOfGroupsUsed-1) ) {
                if (normalsCount == 0 || !useSuppliedNormals) {
                    mesh.RecalculateNormals();
                    if (computeTangents) {
                        newNormals = mesh.normals;
                    }
                }
                if (computeTangents) {
                    var newTangents = new Vector4[newVertices.Length];
                    CalculateTangents (newVertices, newNormals, newUVs, newTriangles, newTangents);
                    mesh.tangents = newTangents;
                }

                mesh.RecalculateBounds();
                go.GetComponent<MeshFilter>().mesh = mesh;
                if (!useSubmesh) {
                    if (materialNames[i] != null) {
                        if (useMtl && materials.ContainsKey (materialNames[i])) {
                            go.GetComponent<Renderer>().material = materials[materialNames[i]];
                            hasUsedMaterial = true;
                            lastUsedMaterialIndex = i;
                        }
                    }
                    else {
                        if (hasUsedMaterial) {
                            go.GetComponent<Renderer>().material = materials[materialNames[lastUsedMaterialIndex]];
                        }
                        else {
                            go.GetComponent<Renderer>().material = standardMaterial;
                        }
                    }
                }
                else {
                    go.GetComponent<Renderer>().materials = newMaterials;
                }
            }
        }

        if (objData != null) {
            objData.SetDone();
            objData.gameObjects = gameObjects;
            return null;
        }

        return gameObjects;
    }
 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 // Update Player Slot / Do not remove item
 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 void HandleUpdateSlotn(byte slot, ObjData.slotItem item, int packet)
 {
     try
     {
         client.Send(Packet.Player_HandleUpdateSlot(slot, (ushort)item.Amount, packet));
         Send(Packet.Player_HandleEffect(Character.Information.UniqueID, item.ID));
     }
     catch (Exception ex)
     {
         Log.Exception(ex);
     }
 }
 /////////////////////////////////////////////////////////////////////////////////
 // Update Item Count
 /////////////////////////////////////////////////////////////////////////////////
 void ItemUpdateAmount(ObjData.slotItem sItem, int owner)
 {
     #region Item Update Amount
     if (sItem.Amount <= 0)
         DB.query("delete from char_items where slot='" + sItem.Slot + "' AND owner='" + owner + "'");
     else
         DB.query("UPDATE char_items SET quantity='" + Math.Abs(sItem.Amount) + "' WHERE slot='" + sItem.Slot + "' AND owner='" + owner + "'");
     client.Send(Packet.ItemUpdate_Quantity(sItem.Slot, sItem.Amount));
     #endregion
 }
Esempio n. 40
0
    //-----------------------------------------------------
    public void setLibToShow(ObjData od)
    {
        //Determination de la lib a afficher
        //int type=0,brand=0;

        //ObjData _objectData = interacteur.getSelected().GetComponent<ObjData>();

        bkupSelTyp = od.selTyp;
        bkupSelFab = od.selFab;
        bkupSelObj = od.selObj;

        //Sauvergarde Type et marque de l'objet
        /*if(oslo.getCategory().GetParentCategory() == null) // que un type
        {
            brand = -1;
            int typeID = oslo.getCategory().GetId();
            foreach(OSLibCategory cat in _library.GetCategoryList())
            {
                if(cat.GetId() == typeID)
                    break;
                else
                    type ++;
            }

            //bkupSelM = 0;
            bkupSelTyp = type;
            bkupSelFab = -1;
        }
        else // type plus marque
        {
            int brandID = oslo.getCategory().GetId();
            int typeID = oslo.getCategory().GetParentCategory().GetId();

            bkupSelTyp = _secondCategory[oslo.getCategory().GetBrandId()];
            bkupSelFab = _firstCategory[oslo.getCategory().GetParentCategory().GetBrandId()];
            //bkupSelM = 0;
        //	bkupSelTyp = type;
        //	bkupSelFab = brand;

        }*/
        setMenuState();
        showMenu = true;
        //ulActive = true;
    }
Esempio n. 41
0
        /// <summary>
        /// Does the conversion
        /// </summary>
        /// <param name="data">The obj data to convert</param>
        /// <returns>The constructed Scene</returns>
        public static Scene Convert(ObjData data)
        {
            Scene s = new Scene();
            Dictionary<string, Material> materials = new Dictionary<string, Material>();
            Dictionary<string, Bitmap> bitmaps = new Dictionary<string, Bitmap>();

            foreach (var mat in data.materials)
            {
                LoadBitmap(mat.AlphaTextureMap, bitmaps);
                LoadBitmap(mat.AmbientTextureMap, bitmaps);
                LoadBitmap(mat.BumpMap, bitmaps);
                LoadBitmap(mat.DiffuseTextureMap, bitmaps);
                LoadBitmap(mat.DisplacementMap, bitmaps);
                LoadBitmap(mat.SpecularCoefficientMap, bitmaps);
                LoadBitmap(mat.SpecularTextureMap, bitmaps);

                Material m = new Material();
                m.AlphaMap = bitmaps[mat.AlphaTextureMap];
                m.AmbientMap = bitmaps[mat.AmbientTextureMap];
                m.BumpMap = bitmaps[mat.AmbientTextureMap];
                m.DiffuseMap = bitmaps[mat.AmbientTextureMap];
                m.DisplacementMap = bitmaps[mat.AmbientTextureMap];
                m.SpecularCoefficientMap = bitmaps[mat.AmbientTextureMap];
                m.SpecularMap = bitmaps[mat.AmbientTextureMap];
                m.Texture = bitmaps[mat.DiffuseTextureMap];

                m.AmbientColor = mat.Ambient;
                m.DiffuseColor = mat.Diffuse;
                m.SpecularCoefficient = mat.SpecularCoefficient;
                m.SpecularColor = mat.Specular;
                m.Transparency = mat.Transparency;
                m.Name = mat.Name;
                materials[m.Name] = m;
            }

            foreach (var f in data.faces)
            {
                Vertex v1 = new Vertex();
                Vertex v2 = new Vertex();
                Vertex v3 = new Vertex();

                v1.Position = data.vertices[f.Vert1.vertex - 1];
                v2.Position = data.vertices[f.Vert2.vertex - 1];
                v3.Position = data.vertices[f.Vert3.vertex - 1];

                v1.Normal = data.normals[f.Vert1.normal - 1];
                v2.Normal = data.normals[f.Vert2.normal - 1];
                v3.Normal = data.normals[f.Vert3.normal - 1];

                // Only set the texture coordinates if they were set
                if (f.Vert1.texCoord > 0 && f.Vert2.texCoord > 0 && f.Vert3.texCoord > 0)
                {
                    v1.TexCoord = data.texCoords[f.Vert1.texCoord - 1];
                    v2.TexCoord = data.texCoords[f.Vert2.texCoord - 1];
                    v3.TexCoord = data.texCoords[f.Vert3.texCoord - 1];
                }

                Triangle t = new Triangle(v1, v2, v3);

                if (!string.IsNullOrEmpty(f.Material))
                {
                    t.Material = materials[f.Material];
                }
                
                s.Triangles.Add(t);
            }
            
            return s;
        }
        public static bool lineSegmentIntersection(ObjData.vektor Line1_A, ObjData.vektor Line1_B, ObjData.vektor Line2_A, ObjData.vektor Line2_B, ref List<ObjData.vektor> CollisionPoints)
        {
            //  Fail if either line segment is zero-length.
            if (Line1_A.x == Line1_B.x && Line1_A.y == Line1_B.y || Line2_A.x == Line2_B.x && Line2_A.y == Line2_B.y) return false;

            //  Translate the system so that point A is on the origin.
            Line1_B.x -= Line1_A.x; Line1_B.y -= Line1_A.y;
            Line2_A.x -= Line1_A.x; Line2_A.y -= Line1_A.y;
            Line2_B.x -= Line1_A.x; Line2_B.y -= Line1_A.y;

            //  Discover the length of segment A-B.
            float distAB = (float)Math.Sqrt(Line1_B.x * Line1_B.x + Line1_B.y * Line1_B.y);

            //  Rotate the system so that point B is on the positive X axis.
            float theCos = Line1_B.x / distAB;
            float theSin = Line1_B.y / distAB;
            float newX = Line2_A.x * theCos + Line2_A.y * theSin;
            Line2_A.y = Line2_A.y * theCos - Line2_A.x * theSin; Line2_A.x = newX;
            newX = Line2_B.x * theCos + Line2_B.y * theSin;
            Line2_B.y = Line2_B.y * theCos - Line2_B.x * theSin; Line2_B.x = newX;

            //  Fail if segment C-D doesn't cross line A-B.
            if (Line2_A.y < 0.0f && Line2_B.y < 0.0f || Line2_A.y >= 0.0f && Line2_B.y >= 0.0f) return false;

            //  Discover the position of the intersection point along line A-B.
            float ABpos = Line2_B.x + (Line2_A.x - Line2_B.x) * Line2_B.y / (Line2_B.y - Line2_A.y);

            //  Fail if segment C-D crosses line A-B outside of segment A-B.
            if (ABpos < 0.0f || ABpos > distAB) return false;

            //  Apply the discovered position to line A-B in the original coordinate system.
            ObjData.vektor cp = new ObjData.vektor();
            cp.x = Line1_A.x + ABpos * theCos;
            cp.y = Line1_A.y + ABpos * theSin;
            CollisionPoints.Add(cp);

            return true;
        }
        /////////////////////////////////////////////////////////////////////////////////
        // Equiped items
        /////////////////////////////////////////////////////////////////////////////////
        public void ItemEquiped(ObjData.slotItem item, byte slot)
        {
            #region Equiped items
            try
            {
                if (Character.Information.Level >= ObjData.Manager.ItemBase[item.ID].Level)
                {
                    if (slot <= 5)
                    {
                        Character.Stat.MagDef += ObjData.Manager.ItemBase[item.ID].Defans.MinMagDef + (item.PlusValue * (double)ObjData.Manager.ItemBase[item.ID].Defans.MagDefINC);
                        Character.Stat.PhyDef += ObjData.Manager.ItemBase[item.ID].Defans.MinPhyDef + (item.PlusValue * (double)ObjData.Manager.ItemBase[item.ID].Defans.PhyDefINC);
                        Character.Stat.Parry += ObjData.Manager.ItemBase[item.ID].Defans.Parry;
                        if (ObjData.Manager.ItemBlue[item.dbID].totalblue != 0) AddRemoveBlues(this, item, true);
                        client.Send(Packet.PlayerStat(Character));
                    }
                    if (slot == 6)
                    {
                        Character.Stat.MinPhyAttack += ObjData.Manager.ItemBase[item.ID].Attack.Min_LPhyAttack + (item.PlusValue * (double)ObjData.Manager.ItemBase[item.ID].Attack.PhyAttackInc);
                        Character.Stat.MaxPhyAttack += ObjData.Manager.ItemBase[item.ID].Attack.Min_HPhyAttack + (item.PlusValue * (double)ObjData.Manager.ItemBase[item.ID].Attack.PhyAttackInc);
                        Character.Stat.MinMagAttack += ObjData.Manager.ItemBase[item.ID].Attack.Min_LMagAttack + (item.PlusValue * (double)ObjData.Manager.ItemBase[item.ID].Attack.MagAttackINC);
                        Character.Stat.MaxMagAttack += ObjData.Manager.ItemBase[item.ID].Attack.Min_HMagAttack + (item.PlusValue * (double)ObjData.Manager.ItemBase[item.ID].Attack.MagAttackINC);
                        Character.Stat.Hit += ObjData.Manager.ItemBase[item.ID].Attack.MinAttackRating;
                        Character.Information.Item.wID = item.ID;
                        if (ObjData.Manager.ItemBlue[item.dbID].totalblue != 0) AddRemoveBlues(this, item, true);
                        client.Send(Packet.PlayerStat(Character));
                    }
                    if (slot == 7)
                    {
                        if (ObjData.Manager.ItemBase[item.ID].Itemtype == ObjData.item_database.ItemType.CH_SHIELD || ObjData.Manager.ItemBase[item.ID].Itemtype == ObjData.item_database.ItemType.EU_SHIELD)
                        {
                            Character.Stat.MagDef += ObjData.Manager.ItemBase[item.ID].Defans.MinMagDef + (item.PlusValue * (double)ObjData.Manager.ItemBase[item.ID].Defans.MagDefINC);
                            Character.Stat.PhyDef += ObjData.Manager.ItemBase[item.ID].Defans.MinPhyDef + (item.PlusValue * (double)ObjData.Manager.ItemBase[item.ID].Defans.PhyDefINC);
                            if (ObjData.Manager.ItemBlue[item.dbID].totalblue != 0) AddRemoveBlues(this, item, true);
                        }
                        Character.Information.Item.sAmount = item.Amount;
                        Character.Information.Item.sID = item.ID;
                        client.Send(Packet.PlayerStat(Character));
                    }
                    if (slot == 8)
                    {
                        //Teleport user back to binded location
                        Send(Packet.StatePack(Character.Information.UniqueID, 0x0B, 0x01, false));
                        Character.Information.Scroll = true;
                        StartScrollTimer(0);//Set to job time info
                        DB.query("UPDATE character_jobs SET job_state='1' WHERE character_name='" + Character.Information.Name + "'");
                        Character.Job.state = 1;
                        SavePlayerReturn();
                    }
                    if (slot >= 9 && slot <= 12)
                    {
                        Character.Stat.MagDef += (short)(ObjData.Manager.ItemBase[item.ID].Defans.MagAbsorb + (item.PlusValue * (double)ObjData.Manager.ItemBase[item.ID].Defans.AbsorbINC) * 10);
                        Character.Stat.PhyDef += (short)(ObjData.Manager.ItemBase[item.ID].Defans.PhyAbsorb + (item.PlusValue * (double)ObjData.Manager.ItemBase[item.ID].Defans.AbsorbINC) * 10);
                        client.Send(Packet.PlayerStat(Character));
                        if (ObjData.Manager.ItemBlue[item.dbID].totalblue != 0) AddRemoveBlues(this, item, true);
                    }
                    Send(Packet.MoveItemEnquipEffect(Character.Information.UniqueID, item.Slot, item.ID, item.PlusValue));
                    SavePlayerInfo();
                }
                else
                    return;
            }

            catch (Exception ex)
            {
                Log.Exception("Item equip error: ", ex);
            }
            #endregion
        }
Esempio n. 44
0
 public ObjData ConvertFileAsync(string objFilePath, bool useMtl, Material standardMaterial, Material transparentMaterial)
 {
     var objData = new ObjData();
     ConvertFile (objFilePath, useMtl, standardMaterial, transparentMaterial, objData);
     return objData;
 }
        // collision detection 2D - /With Linear Algebra/
        public static bool isCollided_onMovement(ObjData.vektor fromPos, ObjData.vektor toPos, ref ObjData.vektor CollisionPoint)
        {
            try
            {
                fromPos.x = packetx(fromPos.x, fromPos.xSec) / 20.0f;
                fromPos.y = packety(fromPos.y, fromPos.ySec) / 20.0f;
                toPos.x = packetx(toPos.x, toPos.xSec) / 20.0f;
                toPos.y = packety(toPos.y, toPos.ySec) / 20.0f;

                // iterated line
                ObjData.vektor Line_A = new ObjData.vektor();
                ObjData.vektor Line_B = new ObjData.vektor();

                List<ObjData.vektor> CollisionPoints = new List<ObjData.vektor>();

                // get current region to filter out the objects
                short region = makeRegion(fromPos.xSec, fromPos.ySec);
                int say = 0;
                foreach (var item in ObjData.Manager.MapObject)
                {
                    if (item.Key == region)
                    {
                        say++;
                    }
                }
                if (say == 0)
                {
                    Console.WriteLine("Pozisyon bulunamadı");
                }
                // get all entitys in this region and try to cut them with our movement line
                foreach (ObjData.SectorObject.n7nEntity obj in ObjData.Manager.MapObject[region].entitys)
                {
                    foreach (ObjData.SectorObject.n7nEntity.sLine line in obj.OutLines)
                    {
                        // if not passable
                        if (line.flag != 0)
                        {
                            Line_A.x = obj.Points[line.PointA].x + obj.Position.x;
                            Line_A.y = obj.Points[line.PointA].y + obj.Position.y;
                            Line_B.x = obj.Points[line.PointB].x + obj.Position.x;
                            Line_B.y = obj.Points[line.PointB].y + obj.Position.y;

                            if (lineSegmentIntersection(fromPos, toPos, Line_A, Line_B, ref CollisionPoints))
                            {

                                Console.WriteLine("x:{0} y:{1}", gamex(CollisionPoints[0].x, fromPos.xSec), gamey(CollisionPoints[0].y, fromPos.ySec));
                            }
                        }
                    }
                }
                if (CollisionPoints.Count == 0) return false;

                // set the nearest collision point for return point
                double minDistance = gamedistance(fromPos.x, fromPos.y, CollisionPoints[0].x, CollisionPoints[0].y);
                foreach (ObjData.vektor cp in CollisionPoints)
                {
                    //double currentDistance = gamedistance(fromPos.x, fromPos.y, cp.x, cp.y);
                    double currentDistance = gamedistance(fromPos, cp);

                    if (currentDistance <= minDistance)
                    {
                        CollisionPoint.x = cp.x;
                        CollisionPoint.y = cp.y;
                    }
                }

                // translate the collision point on the movement line to get real coordinates (not the exact point of collision)
                double sin_alpha = Math.Abs(CollisionPoints[0].y - fromPos.y) / minDistance;
                double cos_alpha = Math.Abs(CollisionPoints[0].x - fromPos.x) / minDistance;

                CollisionPoints[0].y = (float)(sin_alpha * (minDistance - 3));
                CollisionPoints[0].x = (float)(cos_alpha * (minDistance - 3));
            }
            catch (Exception ex)
            {
                CLFramework.Log.Exception("Collision detection failed: ", ex);
            }
            return true;
        }
Esempio n. 46
0
    private IEnumerator GetWWWFiles(string objFilePath, bool useMtl, Material standardMaterial, Material transparentMaterial, ObjData objData)
    {
        var www = new WWW(objFilePath);
        while (!www.isDone) {
            objData.SetProgress (www.progress * (useMtl? .5f : 1.0f));
            if (objData.cancel) {
                yield break;
            }
            yield return null;
        }
        if (www.error != null) {
            Debug.LogError ("Error loading " + objFilePath + ": " + www.error);
            objData.SetDone();
            yield break;
        }

        string objFile = www.text;
        string filePath = "";
        Dictionary<string, Material> materials = null;

        if (useMtl) {
            string mtlFileName = GetMTLFileName (ref objFilePath, ref objFile, ref filePath);
            if (mtlFileName != "") {
                // Read in mtl file
                www = new WWW(filePath + mtlFileName);
                while (!www.isDone) {
                    if (objData.cancel) {
                        yield break;
                    }
                    yield return null;
                }
                if (www.error != null) {
                    if (!useMTLFallback) {
                        Debug.LogError ("Error loading " + (filePath + mtlFileName) + ": " + www.error);
                        objData.SetDone();
                        yield break;
                    }
                    else {
                        useMtl = false;
                    }
                }
                if (useMtl && www.text != "") {
                    // Get textures and parse MTL file
                    var linesRef = new LinesRef();
                    var textures = new Dictionary<string, Texture2D>();
                    var loadError = new BoolRef(false);
                    yield return StartCoroutine (GetTexturesAsync (www.text, linesRef, filePath, textures, objData, loadError));
                    if (loadError.b == true) {
                        yield break;
                    }
                    materials = ParseMTL (linesRef.lines, standardMaterial, transparentMaterial, filePath, textures);
                    if (materials == null) {
                        useMtl = false;
                    }
                }
            }
            else {
                useMtl = false;
            }
        }

        CreateObjects (ref objFile, useMtl, materials, standardMaterial, objData, Path.GetFileNameWithoutExtension (objFilePath));
    }
Esempio n. 47
0
    private IEnumerator GetTexturesAsync(string mtlFile, LinesRef linesRef, string filePath, Dictionary<string, Texture2D> textures, ObjData objData)
    {
        Texture2D diffuseTexture = null;
        string[] lines = SplitLines (ref mtlFile);
        int numberOfTextures = 0;

        // See how many textures there are (to use for progress)
        for (int i = 0; i < lines.Length; i++) {
            var line = lines[i];
            CleanLine (ref line);
            lines[i] = line;

            if (line.Length < 7 || line[0] == '#') {
                continue;
            }

            if (line.StartsWith ("map_Kd") && filePath != "") {
                numberOfTextures++;
            }
        }

        float progress = .5f;
        for (int i = 0; i < lines.Length; i++) {
            if (lines[i].Length < 7 || lines[i][0] == '#') {
                continue;
            }

            // Get diffuse texture
            if (lines[i].StartsWith ("map_Kd") && filePath != "") {
                var lineInfo = lines[i].Split (' ');
                if (lineInfo.Length > 1) {
                    var textureFilePath = filePath + lineInfo[1];
                    var www = new WWW(textureFilePath);
                    while (!www.isDone) {
                        objData.SetProgress (progress + (www.progress / numberOfTextures) * .5f);
                        yield return null;
                    }
                    if (www.error != null) {
                        Debug.Log (www.error);
                        objData.SetDone();
                        yield break;
                    }
                    progress += (1.0f / numberOfTextures) * .5f;
                    diffuseTexture = new Texture2D (4, 4);
                    www.LoadImageIntoTexture (diffuseTexture);
                    textures[lineInfo[1]] = diffuseTexture;
                }
                continue;
            }
        }
        linesRef.lines = lines;
    }
Esempio n. 48
0
        void Update(ObjData obj)
        {
            if (_table == null)
                this.Initialize();

            for (int i = 0; i < _table.Controls.Count; i++)
            {
                if (!(_table.Controls[i] is TextBox))
                    continue;

                TextBox textBox = (TextBox)_table.Controls[i];
                Binding b = textBox.DataBindings[0];
                b.ReadValue();

                //label.Text = property.Name;
                //label.Text = LanguagePack.GetNm(obj.GetType(), row);
                //if(label.Text=="")
                //    label.Text = LanguagePack.GetNm(obj.GetType(), row);

                //textBox.Location = new System.Drawing.Point(0, 0);
                //textBox.Name = "textBox_" + property.Name;
                //textBox.Size = new System.Drawing.Size(50, 30);

                //Binding b = new Binding("Text", obj, property.Name);
                //textBox.DataBindings.Add(b);

                //_table.Controls.Add(label, 0, row);
                //_table.Controls.Add(textBox, 1, row);
            }

            // PropertyInfo[] properties = obj.GetType().GetProperties();
            //List<PropertyInfo> showList= new List<PropertyInfo>();

            //foreach (PropertyInfo property in properties)
            //{

            //    System.Attribute[] attrs =
            //        System.Attribute.GetCustomAttributes(property);

            //    bool isShowable = false;
            //    foreach (Attribute attr in attrs)
            //        isShowable |= (attr is MyShowProperty) ?
            //                true : false;

            //    if (!isShowable)
            //        continue;

            //    if
            //    (showList.Exists(
            //        delegate(PropertyInfo matcher)
            //        {

            //            return matcher.Name == property.Name ? true : false;

            //        })
            //    )
            //        continue;

            //    showList.Add(property);

            //}
        }
Esempio n. 49
0
    private IEnumerator GetWWWFiles(string objFilePath, bool useMtl, Material standardMaterial, Material transparentMaterial, ObjData objData)
    {
        var www = new WWW(objFilePath);
        while (!www.isDone) {
            objData.SetProgress (www.progress * (useMtl? .5f : 1.0f));
            yield return null;
        }
        if (www.error != null) {
            Debug.Log (www.error);
            objData.SetDone();
            yield break;
        }

        string objFile = www.text;
        string filePath = "";
        Dictionary<string, Material> materials = null;

        if (useMtl) {
            string mtlFileName = GetMTLFileName (ref objFilePath, ref objFile, ref filePath);
            if (mtlFileName != "") {
                // Read in mtl file
                www = new WWW(filePath + mtlFileName);
                yield return www;
                if (www.error != null) {
                    Debug.Log (www.error);
                    objData.SetDone();
                    yield break;
                }
                if (www.text != "") {
                    // Get textures and parse MTL file
                    var linesRef = new LinesRef();
                    var textures = new Dictionary<string, Texture2D>();
                    yield return StartCoroutine (GetTexturesAsync (www.text, linesRef, filePath, textures, objData));
                    materials = ParseMTL (linesRef.lines, standardMaterial, transparentMaterial, filePath, textures);
                    if (materials == null) {
                        useMtl = false;
                    }
                }
            }
            else {
                useMtl = false;
            }
        }

        CreateObjects (ref objFile, useMtl, materials, standardMaterial, objData);
    }
 /////////////////////////////////////////////////////////////////////////////////
 // Unequip Items
 /////////////////////////////////////////////////////////////////////////////////
 public void ItemUnEquiped(ObjData.slotItem item)
 {
     #region Unequip items
     LoadBluesid(item.dbID);
     try
     {
         if (item.Slot <= 5)
         {
             Character.Stat.MagDef -= ObjData.Manager.ItemBase[item.ID].Defans.MinMagDef + (item.PlusValue * (double)ObjData.Manager.ItemBase[item.ID].Defans.MagDefINC);
             Character.Stat.PhyDef -= ObjData.Manager.ItemBase[item.ID].Defans.MinPhyDef + (item.PlusValue * (double)ObjData.Manager.ItemBase[item.ID].Defans.PhyDefINC);
             Character.Stat.Parry -= ObjData.Manager.ItemBase[item.ID].Defans.Parry;
             if (ObjData.Manager.ItemBlue[item.dbID].totalblue != 0) AddRemoveBlues(this, item, false);
             client.Send(Packet.PlayerStat(Character));
         }
         if (item.Slot == 6)
         {
             Character.Stat.MinPhyAttack -= ObjData.Manager.ItemBase[item.ID].Attack.Min_LPhyAttack + (item.PlusValue * (double)ObjData.Manager.ItemBase[item.ID].Attack.PhyAttackInc);
             Character.Stat.MaxPhyAttack -= ObjData.Manager.ItemBase[item.ID].Attack.Min_HPhyAttack + (item.PlusValue * (double)ObjData.Manager.ItemBase[item.ID].Attack.PhyAttackInc);
             Character.Stat.MinMagAttack -= ObjData.Manager.ItemBase[item.ID].Attack.Min_LMagAttack + (item.PlusValue * (double)ObjData.Manager.ItemBase[item.ID].Attack.MagAttackINC);
             Character.Stat.MaxMagAttack -= ObjData.Manager.ItemBase[item.ID].Attack.Min_HMagAttack + (item.PlusValue * (double)ObjData.Manager.ItemBase[item.ID].Attack.MagAttackINC);
             Character.Stat.Hit -= ObjData.Manager.ItemBase[item.ID].Attack.MinAttackRating;
             if (ObjData.Manager.ItemBlue[item.dbID].totalblue != 0) AddRemoveBlues(this, item, false);
             client.Send(Packet.PlayerStat(Character));
             Character.Information.Item.wID = 0;
         }
         if (item.Slot == 7)
         {
             if (ObjData.Manager.ItemBase[item.ID].Itemtype == ObjData.item_database.ItemType.CH_SHIELD || ObjData.Manager.ItemBase[item.ID].Itemtype == ObjData.item_database.ItemType.EU_SHIELD)
             {
                 Character.Stat.MagDef -= ObjData.Manager.ItemBase[item.ID].Defans.MinMagDef + (item.PlusValue * (double)ObjData.Manager.ItemBase[item.ID].Defans.MagDefINC);
                 Character.Stat.PhyDef -= ObjData.Manager.ItemBase[item.ID].Defans.MinPhyDef + (item.PlusValue * (double)ObjData.Manager.ItemBase[item.ID].Defans.PhyDefINC);
                 if (ObjData.Manager.ItemBlue[item.dbID].totalblue != 0) AddRemoveBlues(this, item, false);
             }
             client.Send(Packet.PlayerStat(Character));
             Character.Information.Item.sAmount = 0;
             Character.Information.Item.sID = 0;
         }
         if (item.Slot == 8)
         {
             if (Character.Job.Jobname != "0" && Character.Job.state == 1)
             {
                 //Teleport user back to binded location
                Send(Packet.StatePack(Character.Information.UniqueID, 0x0B, 0x01, false));
                 Character.Information.Scroll = true;
                 StartScrollTimer(0);
                 DB.query("UPDATE character_jobs SET job_state='0' WHERE character_name='" + Character.Information.Name + "'");
                 Character.Job.state = 0;
                 SavePlayerReturn();
             }
         }
         if (item.Slot >= 9 && item.Slot <= 12)
         {
             Character.Stat.MagDef -= (short)(ObjData.Manager.ItemBase[item.ID].Defans.MagAbsorb + (item.PlusValue * (double)ObjData.Manager.ItemBase[item.ID].Defans.AbsorbINC) * 10);
             Character.Stat.PhyDef -= (short)(ObjData.Manager.ItemBase[item.ID].Defans.PhyAbsorb + (item.PlusValue * (double)ObjData.Manager.ItemBase[item.ID].Defans.AbsorbINC) * 10);
             client.Send(Packet.PlayerStat(Character));
             if (ObjData.Manager.ItemBlue[item.dbID].totalblue != 0) AddRemoveBlues(this, item, false);
         }
         Send(Packet.MoveItemUnequipEffect(Character.Information.UniqueID, item.Slot, item.ID));
         SavePlayerInfo();
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex);
     }
     #endregion
 }
 public static bool GetSurroundRange(ObjData.vektor obj, ObjData.vektor origo, int range)
 {
     if (obj.x >= (origo.x - range) && obj.x <= ((origo.x - range) + range * 2) && obj.y >= (origo.y - range) && obj.y <= ((origo.y - range) + range * 2))
     {
         return true;
     }
     return false;
 }
 /////////////////////////////////////////////////////////////////////////////////
 // Slot update packet
 /////////////////////////////////////////////////////////////////////////////////
 void GetUpdateSlot(ObjData.slotItem item, byte toSlot, int toItemID, short quantity)
 {
     #region Send item move packet
     client.Send(Packet.MoveItem(0, item.Slot, toSlot, quantity, 0, "MOVE_INSIDE_INVENTORY"));
     #endregion
 }
Esempio n. 53
0
    GameObject[] ConvertFile(string objFilePath, bool useMtl, Material standardMaterial, Material transparentMaterial, ObjData objData)
    {
        objFilePath = objFilePath.Replace ('\\', '/');

        string objFile = "";
        if (objData == null) {
        #if !UNITY_WEBPLAYER && !UNITY_WEBGL
            if (!File.Exists (objFilePath)) {
                Debug.LogError ("File not found: " + objFilePath);
                return null;
            }
            objFile = File.ReadAllText (objFilePath);
            if (objFile == null) {
                Debug.LogError ("File not usable: " + objFilePath);
                return null;
            }

        #else
            Debug.LogWarning ("ConvertFile is not supported in the web player. Use ConvertFileAsync, or switch to a different platform.");
            return null;
        #endif
        }
        else {
            if (objFilePath.StartsWith("http://") || objFilePath.StartsWith("https://") || objFilePath.StartsWith("file://") || objFilePath.StartsWith("ftp://")) {
                StartCoroutine (GetWWWFiles (objFilePath, useMtl, standardMaterial, transparentMaterial, objData));
            }
            else {
                Debug.LogError ("File path must start with http://, https://, ftp://, or file://");
            }
            return null;
        }

        string mtlFile = "";
        string filePath = "";
        if (useMtl) {
        #if !UNITY_WEBPLAYER && !UNITY_WEBGL
            string mtlFileName = GetMTLFileName (ref objFilePath, ref objFile, ref filePath);
            // Read in mtl file
            if (File.Exists (filePath + mtlFileName)) {
                mtlFile = File.ReadAllText (filePath + mtlFileName);
            }
            else {
                Debug.LogWarning ("MTL file not found: " + (filePath + mtlFileName));
            }
        #endif
        }
        return Convert (ref objFile, ref mtlFile, standardMaterial, transparentMaterial, filePath, useMtl, Path.GetFileNameWithoutExtension (objFilePath));
    }
        public void AddRemoveBlues(PlayerMgr ch, ObjData.slotItem item, bool add)
        {
            try
            {
                LoadBluesid(item.dbID);
                string name;
                if (ObjData.Manager.ItemBlue.ContainsKey(item.dbID))
                {
                    for (int k = 0; k < ObjData.Manager.ItemBlue[item.dbID].totalblue; k++)
                    {
                        name = Convert.ToString(ObjData.Manager.ItemBlue[item.dbID].blue[k]);
                        switch (name)
                        {
                            case "MATTR_INT":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_INT"))
                                {
                                    if (add)
                                    {
                                        ch.Character.Stat.Intelligence += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateIntelligenceInfo(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateMp();
                                    }
                                    else
                                    {
                                        ch.Character.Stat.Intelligence -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateIntelligenceMinus(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateMp();
                                    }
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_STR":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_STR"))
                                {

                                    if (add)
                                    {
                                        ch.Character.Stat.Strength += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateStrengthInfo(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateHp();
                                    }
                                    else
                                    {
                                        ch.Character.Stat.Strength -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateStrengthMinus(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateHp();
                                    }

                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_LUCK":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_LUCK"))
                                {

                                    if (add)
                                        ch.Character.Blues.Luck += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    else
                                        ch.Character.Blues.Luck -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                }
                                break;
                            case "MATTR_HP":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_HP"))
                                {

                                    if (add)
                                        ch.Character.Stat.Hp += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    else
                                        ch.Character.Stat.Hp -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);

                                    ch.client.Send(Packet.PlayerStat(ch.Character));
                                    ch.UpdateHp();
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_MP":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_MP"))
                                {

                                    if (add)
                                        ch.Character.Stat.Mp += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    else
                                        ch.Character.Stat.Mp -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);

                                    ch.client.Send(Packet.PlayerStat(ch.Character));
                                    ch.UpdateMp();
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_REGENHPMP": // hp/mp regen inc(%)
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_REGENHPMP"))
                                {
                                    if (add)
                                    {
                                        ch.Character.Blues.mpregen += Convert.ToDouble(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.Character.Blues.hpregen += Convert.ToDouble(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    }
                                    else
                                    {
                                        ch.Character.Blues.mpregen -= Convert.ToDouble(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.Character.Blues.hpregen -= Convert.ToDouble(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    }
                                }
                                break;
                            case "MATTR_RESIST_FROSTBITE":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_RESIST_FROSTBITE"))
                                {

                                    if (add)
                                        ch.Character.Blues.Resist_Frostbite += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    else
                                        ch.Character.Blues.Resist_Frostbite -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                }
                                break;
                            case "MATTR_RESIST_ESHOCK":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_RESIST_ESHOCK"))
                                {

                                    if (add)
                                        ch.Character.Blues.Resist_Eshock += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    else
                                        ch.Character.Blues.Resist_Eshock -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                }
                                break;
                            case "MATTR_RESIST_BURN":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_RESIST_BURN"))
                                {

                                    if (add)
                                        ch.Character.Blues.Resist_Burn += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    else
                                        ch.Character.Blues.Resist_Burn -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                }
                                break;
                            case "MATTR_RESIST_POISON":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_RESIST_POISON"))
                                {

                                    if (add)
                                        ch.Character.Blues.Resist_Poison += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    else
                                        ch.Character.Blues.Resist_Poison -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                }
                                break;
                            case "MATTR_RESIST_ZOMBIE":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_RESIST_ZOMBIE"))
                                {

                                    if (add)
                                        ch.Character.Blues.Resist_Zombie += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    else
                                        ch.Character.Blues.Resist_Zombie -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                }
                                break;
                            case "MATTR_STR_3JOB":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_STR_3JOB"))
                                {

                                    if (add)
                                    {
                                        ch.Character.Stat.Strength += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateStrengthInfo(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateHp();
                                    }
                                    else
                                    {
                                        ch.Character.Stat.Strength -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateStrengthMinus(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateHp();
                                    }
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_INT_3JOB":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_INT_3JOB"))
                                {
                                    if (add)
                                    {
                                        ch.Character.Stat.Intelligence += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateIntelligenceInfo(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateMp();
                                    }
                                    else
                                    {
                                        ch.Character.Stat.Intelligence -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateIntelligenceMinus(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateMp();
                                    }
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_STR_AVATAR":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_STR_AVATAR"))
                                {
                                    if (add)
                                    {
                                        ch.Character.Stat.Strength += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateStrengthInfo(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateHp();
                                    }
                                    else
                                    {
                                        ch.Character.Stat.Strength -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateStrengthMinus(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateHp();
                                    }
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_INT_AVATAR":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_INT_AVATAR"))
                                {

                                    if (add)
                                    {
                                        ch.Character.Stat.Intelligence += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateIntelligenceInfo(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateMp();
                                    }
                                    else
                                    {
                                        ch.Character.Stat.Intelligence -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateIntelligenceMinus(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateMp();
                                    }
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_AVATAR_STR":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_AVATAR_STR"))
                                {

                                    if (add)
                                    {
                                        ch.Character.Stat.Strength += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateStrengthInfo(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateHp();
                                    }
                                    else
                                    {
                                        ch.Character.Stat.Strength -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateStrengthMinus(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateHp();
                                    }
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_AVATAR_INT":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_AVATAR_INT"))
                                {
                                    if (add)
                                    {
                                        ch.Character.Stat.Intelligence += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateIntelligenceInfo(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateMp();
                                    }
                                    else
                                    {
                                        ch.Character.Stat.Intelligence -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateIntelligenceMinus(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateMp();
                                    }
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_AVATAR_HR":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_AVATAR_HR"))
                                {
                                    if (add)
                                    {
                                        ch.Character.Blues.UpdatedStats[item.dbID].Hit = (ch.Character.Stat.Hit / 100) * Convert.ToDouble(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.Character.Stat.Hit += ch.Character.Blues.UpdatedStats[item.dbID].Hit;
                                    }
                                    else
                                    {
                                        ch.Character.Stat.Hit -= ch.Character.Blues.UpdatedStats[item.dbID].Hit;
                                        ch.Character.Blues.UpdatedStats[item.dbID].Hit = 0;
                                    }
                                    ch.client.Send(Packet.PlayerStat(ch.Character));
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_AVATAR_ER":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_AVATAR_ER"))
                                {
                                    if (add)
                                    {
                                        ch.Character.Blues.UpdatedStats[item.dbID].Parry = (ch.Character.Stat.Parry / 100) * Convert.ToDouble(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.Character.Stat.Parry += ch.Character.Blues.UpdatedStats[item.dbID].Parry;
                                    }
                                    else
                                    {
                                        ch.Character.Stat.Parry -= ch.Character.Blues.UpdatedStats[item.dbID].Parry;
                                        ch.Character.Blues.UpdatedStats[item.dbID].Parry = 0;
                                    }
                                    ch.client.Send(Packet.PlayerStat(ch.Character));
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_ER": //parry rate inc
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_ER"))
                                {
                                    if (add)
                                    {
                                        ch.Character.Blues.UpdatedStats[item.dbID].Parry = (ch.Character.Stat.Parry / 100) * Convert.ToDouble(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.Character.Stat.Parry += ch.Character.Blues.UpdatedStats[item.dbID].Parry;
                                    }
                                    else
                                    {
                                        ch.Character.Stat.Parry -= ch.Character.Blues.UpdatedStats[item.dbID].Parry;
                                        ch.Character.Blues.UpdatedStats[item.dbID].Parry = 0;
                                    }
                                    ch.client.Send(Packet.PlayerStat(ch.Character));
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_HR": //attack rate inc (%)
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_HR"))
                                {
                                    if (add)
                                    {
                                        ch.Character.Blues.UpdatedStats[item.dbID].Hit = (ch.Character.Stat.Hit / 100) * Convert.ToDouble(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.Character.Stat.Hit += ch.Character.Blues.UpdatedStats[item.dbID].Hit;
                                    }
                                    else
                                    {
                                        ch.Character.Stat.Hit -= ch.Character.Blues.UpdatedStats[item.dbID].Hit;
                                        ch.Character.Blues.UpdatedStats[item.dbID].Hit = 0;
                                    }
                                    ch.client.Send(Packet.PlayerStat(ch.Character));
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_AVATAR_HP":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_AVATAR_HP"))
                                {

                                    if (add)
                                        ch.Character.Stat.Hp += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    else
                                        ch.Character.Stat.Hp -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);

                                    ch.client.Send(Packet.PlayerStat(ch.Character));
                                    ch.UpdateHp();
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_AVATAR_MP":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_AVATAR_MP"))
                                {

                                    if (add)
                                        ch.Character.Stat.Mp += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    else
                                        ch.Character.Stat.Mp -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);

                                    ch.client.Send(Packet.PlayerStat(ch.Character));
                                    ch.UpdateMp();
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_AVATAR_DRUA": // damage increase
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_AVATAR_DRUA"))
                                {
                                    if (add)
                                    {
                                        ch.Character.Blues.UpdatedStats[item.dbID].MinPhyAttack = (ch.Character.Stat.MinPhyAttack / 100) * Convert.ToDouble(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.Character.Blues.UpdatedStats[item.dbID].MaxPhyAttack = (ch.Character.Stat.MaxPhyAttack / 100) * Convert.ToDouble(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.Character.Blues.UpdatedStats[item.dbID].MinMagAttack = (ch.Character.Stat.MinMagAttack / 100) * Convert.ToDouble(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.Character.Blues.UpdatedStats[item.dbID].MaxMagAttack = (ch.Character.Stat.MaxMagAttack / 100) * Convert.ToDouble(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);

                                        ch.Character.Stat.MinPhyAttack += ch.Character.Blues.UpdatedStats[item.dbID].MinPhyAttack;
                                        ch.Character.Stat.MaxPhyAttack += ch.Character.Blues.UpdatedStats[item.dbID].MaxPhyAttack;
                                        ch.Character.Stat.MinMagAttack += ch.Character.Blues.UpdatedStats[item.dbID].MinMagAttack;
                                        ch.Character.Stat.MaxMagAttack += ch.Character.Blues.UpdatedStats[item.dbID].MaxMagAttack;
                                    }
                                    else
                                    {
                                        ch.Character.Stat.MinPhyAttack -= ch.Character.Blues.UpdatedStats[item.dbID].MinPhyAttack;
                                        ch.Character.Stat.MaxPhyAttack -= ch.Character.Blues.UpdatedStats[item.dbID].MaxPhyAttack;
                                        ch.Character.Stat.MinMagAttack -= ch.Character.Blues.UpdatedStats[item.dbID].MinMagAttack;
                                        ch.Character.Stat.MaxMagAttack -= ch.Character.Blues.UpdatedStats[item.dbID].MaxMagAttack;
                                        ch.Character.Blues.UpdatedStats[item.dbID].MinPhyAttack = 0;
                                        ch.Character.Blues.UpdatedStats[item.dbID].MaxPhyAttack = 0;
                                        ch.Character.Blues.UpdatedStats[item.dbID].MinMagAttack = 0;
                                        ch.Character.Blues.UpdatedStats[item.dbID].MaxMagAttack = 0;
                                    }
                                    ch.client.Send(Packet.PlayerStat(ch.Character));
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_AVATAR_DARA": // damage absorption
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_AVATAR_DARA"))
                                {
                                    if (add)
                                    {
                                        //ch.Character.Stat.phy_Absorb += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        //ch.Character.Stat.mag_Absorb += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    }
                                    else
                                    {
                                        //ch.Character.Stat.phy_Absorb -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        //ch.Character.Stat.mag_Absorb -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    }
                                }
                                break;
                            case "MATTR_AVATAR_MDIA": // ignore monster defense
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_AVATAR_MDIA"))
                                {
                                    if (add)
                                    {
                                        ch.Character.Blues.MonsterIgnorance += Convert.ToInt32(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    }
                                    else
                                    {
                                        ch.Character.Blues.MonsterIgnorance -= Convert.ToInt32(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    }
                                }
                                break;
                            case "MATTR_AVATAR_HPRG": //hp recovery increase
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_AVATAR_HPRG"))
                                {
                                    if (add)
                                    {
                                        ch.Character.Blues.hpregen += Convert.ToDouble(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    }
                                    else
                                    {
                                        ch.Character.Blues.hpregen -= Convert.ToDouble(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    }
                                }
                                break;
                            case "MATTR_AVATAR_MPRG": //mp recovery increase
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_AVATAR_MPRG"))
                                {
                                    if (add)
                                    {
                                        ch.Character.Blues.mpregen += Convert.ToDouble(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    }
                                    else
                                    {
                                        ch.Character.Blues.mpregen -= Convert.ToDouble(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    }
                                }
                                break;
                            case "MATTR_RESIST_STUN":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_RESIST_STUN"))
                                {
                                    if (add)
                                        ch.Character.Blues.Resist_Stun += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    else
                                        ch.Character.Blues.Resist_Stun -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                }
                                break;
                            case "MATTR_RESIST_CSMP":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_RESIST_CSMP"))
                                {

                                    if (add)
                                        ch.Character.Blues.Resist_CSMP += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    else
                                        ch.Character.Blues.Resist_CSMP -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                }
                                break;
                            case "MATTR_RESIST_DISEASE":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_RESIST_DISEASE"))
                                {

                                    if (add)
                                        ch.Character.Blues.Resist_Disease += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    else
                                        ch.Character.Blues.Resist_Disease -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                }
                                break;
                            case "MATTR_RESIST_SLEEP":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_RESIST_SLEEP"))
                                {

                                    if (add)
                                        ch.Character.Blues.Resist_Sleep += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    else
                                        ch.Character.Blues.Resist_Sleep -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                }
                                break;
                            case "MATTR_RESIST_FEAR":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_RESIST_FEAR"))
                                {

                                    if (add)
                                        ch.Character.Blues.Resist_Fear += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    else
                                        ch.Character.Blues.Resist_Fear -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                }
                                break;
                            case "MATTR_NASRUN_UMDU": //damage increase(only @ uniques)
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_NASRUN_UMDU"))
                                {
                                    if (add)
                                    {
                                        ch.Character.Blues.UniqueDMGInc += Convert.ToInt32(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    }
                                    else
                                    {
                                        ch.Character.Blues.UniqueDMGInc += Convert.ToInt32(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    }
                                }
                                break;
                            case "MATTR_NASRUN_HPNA": //maximum hp increase
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_NASRUN_HPNA"))
                                {
                                    if (add)
                                    {
                                        ch.Character.Stat.Hp += Convert.ToInt32(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.Character.Stat.SecondHp += Convert.ToInt32(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    }
                                    else
                                    {
                                        ch.Character.Stat.Hp -= Convert.ToInt32(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.Character.Stat.SecondHp -= Convert.ToInt32(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    }
                                    ch.UpdateHp();
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_NASRUN_MPNA": //maximum mp increase
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_NASRUN_MPNA"))
                                {
                                    if (add)
                                    {
                                        ch.Character.Stat.Mp += Convert.ToInt32(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.Character.Stat.SecondMP += Convert.ToInt32(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    }
                                    else
                                    {
                                        ch.Character.Stat.Mp -= Convert.ToInt32(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.Character.Stat.SecondMP -= Convert.ToInt32(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    }
                                    ch.UpdateMp();
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_NASRUN_BLOCKRATE": //blocking rate increase
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_NASRUN_BLOCKRATE"))
                                {
                                    if (add)
                                    {
                                        ch.Character.Stat.BlockRatio += Convert.ToInt32(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    }
                                    else
                                    {
                                        ch.Character.Stat.BlockRatio -= Convert.ToInt32(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    }
                                    ch.client.Send(Packet.PlayerStat(ch.Character));
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_STR_SET":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_STR_SET"))
                                {

                                    if (add)
                                    {
                                        ch.Character.Stat.Strength += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateStrengthInfo(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateHp();
                                    }
                                    else
                                    {
                                        ch.Character.Stat.Strength -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateStrengthMinus(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateHp();
                                    }
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_INT_SET":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_INT_SET"))
                                {

                                    if (add)
                                    {
                                        ch.Character.Stat.Intelligence += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateIntelligenceInfo(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateMp();
                                    }
                                    else
                                    {
                                        ch.Character.Stat.Intelligence -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateIntelligenceMinus(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateMp();
                                    }
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_ER_SET":
                                break;
                            case "MATTR_HP_SET":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_HP_SET"))
                                {

                                    if (add)
                                        ch.Character.Stat.Hp += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    else
                                        ch.Character.Stat.Hp -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);

                                    ch.client.Send(Packet.PlayerStat(ch.Character));
                                    ch.UpdateHp();
                                    ch.SavePlayerInfo();

                                }
                                break;
                            case "MATTR_MP_SET":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_MP_SET"))
                                {

                                    if (add)
                                        ch.Character.Stat.Mp += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    else
                                        ch.Character.Stat.Mp -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);

                                    ch.client.Send(Packet.PlayerStat(ch.Character));
                                    ch.UpdateMp();
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_LUCK_SET":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_LUCK_SET"))
                                {

                                    if (add)
                                        ch.Character.Blues.Luck += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    else
                                        ch.Character.Blues.Luck -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                }
                                break;
                            case "MATTR_AVATAR_STR_2":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_AVATAR_STR_2"))
                                {

                                    if (add)
                                    {
                                        ch.Character.Stat.Strength += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateStrengthInfo(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateHp();
                                    }
                                    else
                                    {
                                        ch.Character.Stat.Strength -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateStrengthMinus(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateHp();
                                    }
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_AVATAR_STR_3":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_AVATAR_STR_3"))
                                {

                                    if (add)
                                    {
                                        ch.Character.Stat.Strength += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateStrengthInfo(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateHp();
                                    }
                                    else
                                    {
                                        ch.Character.Stat.Strength -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateStrengthMinus(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateHp();
                                    }
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_AVATAR_STR_4":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_AVATAR_STR_4"))
                                {
                                    if (add)
                                    {
                                        ch.Character.Stat.Strength += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateStrengthInfo(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateHp();
                                    }
                                    else
                                    {
                                        ch.Character.Stat.Strength -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateStrengthMinus(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateHp();
                                    }
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_AVATAR_INT_2":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_AVATAR_INT_2"))
                                {
                                    if (add)
                                    {
                                        ch.Character.Stat.Intelligence += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateIntelligenceInfo(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateMp();
                                    }
                                    else
                                    {
                                        ch.Character.Stat.Intelligence -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateIntelligenceMinus(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateMp();
                                    }
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_AVATAR_INT_3":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_AVATAR_INT_3"))
                                {
                                    if (add)
                                    {
                                        ch.Character.Stat.Intelligence += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateIntelligenceInfo(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateMp();
                                    }
                                    else
                                    {
                                        ch.Character.Stat.Intelligence -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateIntelligenceMinus(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateMp();
                                    }
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_AVATAR_INT_4":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_AVATAR_INT_4"))
                                {

                                    if (add)
                                    {
                                        ch.Character.Stat.Intelligence += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateIntelligenceInfo(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateMp();
                                    }
                                    else
                                    {
                                        ch.Character.Stat.Intelligence -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateIntelligenceMinus(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateMp();
                                    }
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_AVATAR_MDIA_2":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_AVATAR_MDIA_2"))
                                {
                                    if (add)
                                    {
                                        ch.Character.Blues.MonsterIgnorance += Convert.ToInt32(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    }
                                    else
                                    {
                                        ch.Character.Blues.MonsterIgnorance -= Convert.ToInt32(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    }
                                }
                                break;
                            case "MATTR_AVATAR_MDIA_3":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_AVATAR_MDIA_3"))
                                {
                                    if (add)
                                    {
                                        ch.Character.Blues.MonsterIgnorance += Convert.ToInt32(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    }
                                    else
                                    {
                                        ch.Character.Blues.MonsterIgnorance -= Convert.ToInt32(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    }
                                }
                                break;
                            case "MATTR_AVATAR_MDIA_4":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_AVATAR_MDIA_4"))
                                {
                                    if (add)
                                    {
                                        ch.Character.Blues.MonsterIgnorance += Convert.ToInt32(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    }
                                    else
                                    {
                                        ch.Character.Blues.MonsterIgnorance -= Convert.ToInt32(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    }
                                }
                                break;
                            case "MATTR_AVATAR_LUCK":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_AVATAR_LUCK"))
                                {

                                    if (add)
                                        ch.Character.Blues.Luck += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    else
                                        ch.Character.Blues.Luck -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                }
                                break;
                            case "MATTR_AVATAR_LUCK_2":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_AVATAR_LUCK_2"))
                                {

                                    if (add)
                                        ch.Character.Blues.Luck += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    else
                                        ch.Character.Blues.Luck -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                }
                                break;
                            case "MATTR_AVATAR_LUCK_3":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_AVATAR_LUCK_4"))
                                {

                                    if (add)
                                        ch.Character.Blues.Luck += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    else
                                        ch.Character.Blues.Luck -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                }
                                break;
                            case "MATTR_AVATAR_LUCK_4":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_AVATAR_LUCK_4"))
                                {

                                    if (add)
                                        ch.Character.Blues.Luck += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    else
                                        ch.Character.Blues.Luck -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                }
                                break;
                            case "MATTR_RESIST_ALL_SET":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_RESIST_ALL_SET"))
                                {

                                    if (add)
                                        ch.Character.Blues.Resist_All += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    else
                                        ch.Character.Blues.Resist_All -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                }
                                break;
                            case "MATTR_TRADE_STR":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_TRADE_STR"))
                                {

                                    if (add)
                                    {
                                        ch.Character.Stat.Strength += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateStrengthInfo(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateHp();
                                    }
                                    else
                                    {
                                        ch.Character.Stat.Strength -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateStrengthMinus(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateHp();
                                    }
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_TRADE_STR_2":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_TRADE_STR_2"))
                                {

                                    if (add)
                                    {
                                        ch.Character.Stat.Strength += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateStrengthInfo(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateHp();
                                    }
                                    else
                                    {
                                        ch.Character.Stat.Strength -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateStrengthMinus(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateHp();
                                    }
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_TRADE_STR_3":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_TRADE_STR_3"))
                                {

                                    if (add)
                                    {
                                        ch.Character.Stat.Strength += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateStrengthInfo(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateHp();
                                    }
                                    else
                                    {
                                        ch.Character.Stat.Strength -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateStrengthMinus(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateHp();
                                    }
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_TRADE_INT":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_TRADE_INT"))
                                {
                                    if (add)
                                    {
                                        ch.Character.Stat.Intelligence += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateIntelligenceInfo(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateMp();
                                    }
                                    else
                                    {
                                        ch.Character.Stat.Intelligence -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateIntelligenceMinus(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateMp();
                                    }
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_TRADE_INT_2":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_TRADE_INT_2"))
                                {
                                    if (add)
                                    {
                                        ch.Character.Stat.Intelligence += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateIntelligenceInfo(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateMp();
                                    }
                                    else
                                    {
                                        ch.Character.Stat.Intelligence -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateIntelligenceMinus(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateMp();
                                    }
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_TRADE_INT_3":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_TRADE_INT_3"))
                                {
                                    if (add)
                                    {
                                        ch.Character.Stat.Intelligence += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateIntelligenceInfo(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateMp();
                                    }
                                    else
                                    {
                                        ch.Character.Stat.Intelligence -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                        ch.UpdateIntelligenceMinus(Convert.ToSByte(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]));
                                        ch.SetStat();
                                        ch.UpdateMp();
                                    }
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_TRADE_HP":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_TRADE_HP"))
                                {

                                    if (add)
                                        ch.Character.Stat.Hp += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    else
                                        ch.Character.Stat.Hp -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);

                                    ch.client.Send(Packet.PlayerStat(ch.Character));
                                    ch.UpdateHp();
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_TRADE_HP_2":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_TRADE_HP_2"))
                                {

                                    if (add)
                                        ch.Character.Stat.Hp += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    else
                                        ch.Character.Stat.Hp -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);

                                    ch.client.Send(Packet.PlayerStat(ch.Character));
                                    ch.UpdateHp();
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_TRADE_HP_3":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_TRADE_HP_3"))
                                {

                                    if (add)
                                        ch.Character.Stat.Hp += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    else
                                        ch.Character.Stat.Hp -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);

                                    ch.client.Send(Packet.PlayerStat(ch.Character));
                                    ch.UpdateHp();
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_TRADE_MP":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_TRADE_MP"))
                                {

                                    if (add)
                                        ch.Character.Stat.Mp += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    else
                                        ch.Character.Stat.Mp -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);

                                    ch.client.Send(Packet.PlayerStat(ch.Character));
                                    ch.UpdateMp();
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_TRADE_MP_2":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_TRADE_MP_2"))
                                {

                                    if (add)
                                        ch.Character.Stat.Mp += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    else
                                        ch.Character.Stat.Mp -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);

                                    ch.client.Send(Packet.PlayerStat(ch.Character));
                                    ch.UpdateMp();
                                    ch.SavePlayerInfo();
                                }
                                break;
                            case "MATTR_TRADE_MP_3":
                                if (ObjData.Manager.ItemBlue[item.dbID].blue.Contains("MATTR_TRADE_MP_3"))
                                {

                                    if (add)
                                        ch.Character.Stat.Mp += Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);
                                    else
                                        ch.Character.Stat.Mp -= Convert.ToInt16(ObjData.Manager.ItemBlue[item.dbID].blueamount[k]);

                                    ch.client.Send(Client.Packet.PlayerStat(ch.Character));
                                    ch.UpdateMp();
                                    ch.SavePlayerInfo();
                                }
                                break;
                        }
                    }
                }
                else
                {
                    Console.WriteLine("[BlueSystem] ItemBlue for ID {0} not found", item.dbID);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Blue add/remove error {0}", ex);
                Log.Exception(ex);
            }
        }
 void HandleUpdateSlotChange(byte slot, ObjData.slotItem item, int packet)
 {
     DB.query("UPDATE char_items SET itemid='" + packet + "' WHERE owner='" + Character.Information.CharacterID + "' AND itemnumber='item" + item.Slot + "' AND id='" + item.dbID + "'");
     //Need to be defined per item type (potion or private item)
     Send(Packet.Player_HandleEffect(Character.Information.UniqueID, item.ID));
 }
 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 // Update Player Slot / Remove item
 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 void HandleUpdateSlot(byte slot, ObjData.slotItem item, int packet)
 {
     try
     {
         item.Amount--;
         client.Send(Packet.Player_HandleUpdateSlot(slot, (ushort)item.Amount, packet));
         if (item.Amount > 0)
         {
             DB.query("UPDATE char_items SET quantity='" + Math.Abs(item.Amount) + "' WHERE owner='" + Character.Information.CharacterID + "' AND itemnumber='item" + item.Slot + "' AND id='" + item.dbID + "'");
         }
         else
         {
             DB.query("delete from char_items where id='" + item.dbID + "'");
         }
         //Need to be defined per item type (potion or private item)
         Send(Packet.Player_HandleEffect(Character.Information.UniqueID, item.ID));
     }
     catch (Exception ex)
     {
         Log.Exception(ex);
     }
 }
 /////////////////////////////////////////////////////////////////////////////////
 // Get degree information
 /////////////////////////////////////////////////////////////////////////////////
 public int GetItemDegree(ObjData.slotItem item)
 {
     try
     {
         if (1 <= ObjData.Manager.ItemBase[item.ID].Level && ObjData.Manager.ItemBase[item.ID].Level < 8)
             return 1;
         else if (8 <= ObjData.Manager.ItemBase[item.ID].Level && ObjData.Manager.ItemBase[item.ID].Level < 16)
             return 2;
         else if (16 <= ObjData.Manager.ItemBase[item.ID].Level && ObjData.Manager.ItemBase[item.ID].Level < 24)
             return 3;
         else if (24 <= ObjData.Manager.ItemBase[item.ID].Level && ObjData.Manager.ItemBase[item.ID].Level < 32)
             return 4;
         else if (32 <= ObjData.Manager.ItemBase[item.ID].Level && ObjData.Manager.ItemBase[item.ID].Level < 42)
             return 5;
         else if (42 <= ObjData.Manager.ItemBase[item.ID].Level && ObjData.Manager.ItemBase[item.ID].Level < 52)
             return 6;
         else if (52 <= ObjData.Manager.ItemBase[item.ID].Level && ObjData.Manager.ItemBase[item.ID].Level < 64)
             return 7;
         else if (64 <= ObjData.Manager.ItemBase[item.ID].Level && ObjData.Manager.ItemBase[item.ID].Level < 76)
             return 8;
         else if (76 <= ObjData.Manager.ItemBase[item.ID].Level && ObjData.Manager.ItemBase[item.ID].Level < 90)
             return 9;
         else if (90 <= ObjData.Manager.ItemBase[item.ID].Level && ObjData.Manager.ItemBase[item.ID].Level < 101)
             return 10;
         else if (101 <= ObjData.Manager.ItemBase[item.ID].Level && ObjData.Manager.ItemBase[item.ID].Level < 110)
             return 11;
         else
         {
             return 1;
         }
     }
     catch (Exception ex)
     {
         Log.Exception(ex);
     }
     return 1;
 }