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"); }
public void PlayerDamage(sHit hit) // 플레이어가 피격 당했다는 정보 받음 { damaged = true; dmgAni = hit.dmgAni; atkType = hit.atkType; }
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); } }