Esempio n. 1
0
    public void HitSucc(int atkType)
    {//맞은 경우 애니메이션 재생하고 서버에 정보 전송
        int  randDmgAni = Random.Range(0, 1);
        sHit hit        = new sHit(randDmgAni, atkType, 0);

        if (randDmgAni == 0)
        {
            aniCon.PlayAtkDmg("GetDamage01");
        }
        else if (randDmgAni == 1)
        {
            aniCon.PlayAtkDmg("GetDamage02");
        }
        SocketServer.SingleTonServ().SendMsg(hit);

        //무기에 따라 효과음 다르게 재생
        if (playerWeapon == (int)eWEAPON.em_SWORDANDSHIELD)
        {
            if (randDmgAni == 0)
            {
                enemyScript.effSound.PlayEff((int)eEFFSOUND.em_SWORD1);
            }
            else if (randDmgAni == 1)
            {
                enemyScript.effSound.PlayEff((int)eEFFSOUND.em_SWORD2);
            }
        }
        else if (playerWeapon == (int)eWEAPON.em_GREATESWORD)
        {
            if (randDmgAni == 0)
            {
                enemyScript.effSound.PlayEff((int)eEFFSOUND.em_SWORD3);
            }
            else if (randDmgAni == 1)
            {
                enemyScript.effSound.PlayEff((int)eEFFSOUND.em_SWORD4);
            }
        }
        else if (playerWeapon == (int)eWEAPON.em_BOW)
        {
            enemyScript.effSound.PlayEff((int)eEFFSOUND.em_ARROWHIT);
        }
        else if (enemyScript.weaponType == (int)eWEAPON.em_WAND)
        {
            enemyScript.effSound.PlayEff((int)eEFFSOUND.em_MAGIHIT);
        }

        Debug.Log("Hit");
    }
Esempio n. 2
0
 public void PlayerDamage(sHit hit) // 플레이어가 피격 당했다는 정보 받음
 {
     damaged = true;
     dmgAni  = hit.dmgAni;
     atkType = hit.atkType;
 }
Esempio n. 3
0
    private static void ReceiveCallBack(IAsyncResult ar)    //서버에게 신호를 받았을 때
    {
        RecvData recvData = (RecvData)ar.AsyncState;        //리시브된 데이터
        int      receive  = recvData.socket.EndReceive(ar); //리시브된 정보가 있는지 체크

        if (receive <= 0)                                   //서버 종료
        {
            recvData.socket.Close();                        //소켓을 닫음
            Application.Quit();
            return;
        }
        IntPtr buff = Marshal.AllocHGlobal(recvData.buffer.Length); //받은 byte 데이터를 struct로 변환

        Marshal.Copy(recvData.buffer, 0, buff, recvData.buffer.Length);
        Type type = typeof(sGameRoom);

        room = (sGameRoom)Marshal.PtrToStructure(buff, type);

        if (room.flag == (int)eMSG.em_LOGIN)
        {
            Type   m_type    = typeof(sLogin);
            sLogin loginInfo = (sLogin)Marshal.PtrToStructure(buff, m_type);
            userScript.LoginResult(loginInfo.nick, loginInfo.loginSucc);
        }
        else if (room.flag == (int)eMSG.em_LOGINCHECK)
        {
            Type        m_type   = typeof(sLoginCheck);
            sLoginCheck loginChk = (sLoginCheck)Marshal.PtrToStructure(buff, m_type);
            fScript.FriendAccCheck(loginChk.nick, loginChk.loginChk);
        }
        else if (room.flag == (int)eMSG.em_MATCHREQUEST)
        {
            Type      m_type   = typeof(sMatchReq);
            sMatchReq matchReq = (sMatchReq)Marshal.PtrToStructure(buff, m_type);
            fScript.MatchReqResult(matchReq.sendUserNick, matchReq.matchSucc);
        }
        else if (room.flag == (int)eMSG.em_ENTER) //매칭 버튼을 눌렀다는 정보
        {
            if (room.userNum == 0)                //상대가 없음
            {
                gScript.Matching();
            }
            else //상대가 접속
            {
                enterNum = room.userNum;
                gScript.MatchSucc();
            }
        }
        else if (room.flag == (int)eMSG.em_CHARINFO) //아이템 선택이 끝났다는 정보
        {
            Type      m_type   = typeof(sCharInfo);
            sCharInfo charInfo = (sCharInfo)Marshal.PtrToStructure(buff, m_type);
            if (enterNum == 1) //내가 먼저 입장
            {
                sScript.SpawnInfo("Spawn1", "Spawn2", charInfo);
            }
            else if (enterNum == 2) //상대가 먼저 입장
            {
                sScript.SpawnInfo("Spawn2", "Spawn1", charInfo);
            }
        }
        else if (room.flag == (int)eMSG.em_READY) //두 유저 모두 준비되었다는 정보
        {
            sScript.SpawnReady();
        }
        else if (eScript != null && room.flag == (int)eMSG.em_MOVE) //적의 좌표, 회전 정보
        {
            Type       m_type   = typeof(sMove);
            sMove      move     = (sMove)Marshal.PtrToStructure(buff, m_type);
            Vector3    enemyPos = new Vector3(move.x, move.y, move.z);
            Quaternion enemyRot = new Quaternion(move.rotX, move.rotY, move.rotZ, move.rotW);
            eScript.EnemyMove(enemyPos, enemyRot);
        }
        else if (room.flag == (int)eMSG.em_ATK) //적이 공격했다는 정보
        {
            Type m_type = typeof(sAtk);
            sAtk atk    = (sAtk)Marshal.PtrToStructure(buff, m_type);
            eScript.EnemyAtk(atk.atkAni);
        }
        else if (room.flag == (int)eMSG.em_HIT) //내가 공격을 성공함
        {
            Type m_type = typeof(sHit);
            sHit hit    = (sHit)Marshal.PtrToStructure(buff, m_type);
            pScript.ChangePlayerHp(hit.hp);
            pScript.PlayerDamage(hit);
        }
        else if (room.flag == (int)eMSG.em_INFO) //적의 hp정보가 변한경우
        {
            Type        m_type = typeof(sChangeInfo);
            sChangeInfo hpInfo = (sChangeInfo)Marshal.PtrToStructure(buff, m_type);
            eScript.ChangeEnemyHp(hpInfo.hp);
        }
        else if (room.flag == (int)eMSG.em_ITEMSPAWN)
        {
            Type       m_type    = typeof(sItemSpawn);
            sItemSpawn itemSpawn = (sItemSpawn)Marshal.PtrToStructure(buff, m_type);
            pScript.passOnItemSpawnInfo(itemSpawn.itemKind);
            pScript.GetAtkMgrFromServer(true);
        }
        else if (room.flag == (int)eMSG.em_USEITEM) //아이템 사용
        {
            Type     m_type  = typeof(sUseItem);
            sUseItem useItem = (sUseItem)Marshal.PtrToStructure(buff, m_type);
            pScript.ChangeItemImg(useItem.itemNum, true);
            pScript.ChangePlayerHp(useItem.hp);
            pScript.ChangePlayerSpeed(useItem.speed);
        }
        else if (room.flag == (int)eMSG.em_ENDITEM) //아이템 시간 끝
        {
            Type     m_type  = typeof(sEndItem);
            sEndItem endItem = (sEndItem)Marshal.PtrToStructure(buff, m_type);
            pScript.ChangeItemImg(endItem.itemNum, false);
            pScript.ChangePlayerSpeed(endItem.speed);
        }
        else if (room.flag == (int)eMSG.em_GETOBJ) //던질 물건 잡기
        {
            Type    m_type = typeof(sGetObj);
            sGetObj getObj = (sGetObj)Marshal.PtrToStructure(buff, m_type);
            Debug.Log("from server get succ");
            eScript.GetThrowObj(getObj.itemNum);
        }
        else if (room.flag == (int)eMSG.em_THROWOBJ) //물건 던지기
        {
            eScript.ThrowObj();
            Debug.Log("from server throw succ");
        }
        else if (room.flag == (int)eMSG.em_END) //게임이 종료되었을 경우
        {
            Type m_type = typeof(sEnd);
            sEnd esc    = (sEnd)Marshal.PtrToStructure(buff, m_type);
            gameResult = esc.result;
            enemyNick  = esc.enemyNick;
            if (pScript == null)
            {
                sScript.GameEndTrue();
            }
            else
            {
                pScript.GameEndTrue();
            }
        }
        else if (room.flag == (int)eMSG.em_CHAT) //채팅
        {
            Type   m_type  = typeof(sChat);
            sChat  chat    = (sChat)Marshal.PtrToStructure(buff, m_type);
            string nowChat = new string(chat.chat);
            chatScript.ChatRecv(nowChat);
        }
    }