2013-01-13 2 views
1

저는 (애플릿 형태로) 2D MMORPG 게임을 만들고 있는데 간단한 질문이 있습니다.데이터, 네트워킹, 씬 클라이언트 및 MMORPG

일반적인 해킹 방지 기술로 보안을 위해 클라이언트는 최대한 적은 양의 논리적 데이터를 포함해야하므로 (조작 및 악용 될 수 없음) 이해합니다.

내 질문은 : 서버에서 클라이언트로 데이터를 전송한다고 가정 해 봅니다 (매우 자주 발생합니다). 패킷을받은 클라이언트 코드에서 패킷을 "청크 (chunks)"로 구문 분석하고 해당 데이터를 논리적으로 정확한 counter-parted 변수에 저장합니다. 변수 중 하나에 플레이어의 건강 상태가 저장되어 있다고 가정 해 보겠습니다. 즉,이 변수는 계산에 실제로 사용할 수 없다는 것을 의미합니다. 즉, 데이터가 논리적 인 데이터이므로 (클라이언트에 저장되기 때문에 조작 될 수 있기 때문에) 유일한 대안은 데이터를 포함하는 패킷을 읽는 것입니다 내가 건강 양을 요구한다면 건강과 관련된 정보?

제 질문을 읽어 주셔서 감사합니다. -Bryan

답변

1

나는 당신이 그것을 사용하고있는 계산에 달려 있다고 말할 것입니다. UI 표시와 같이 중요하지 않은 경우 로컬 변수를 안전하게 사용할 수 있습니다. 플레이어가 죽었는지 아닌지를 결정하는 데 서버를 사용한다면 서버가 그 결정을 내릴 수 있도록해야합니다. 높은 대기 시간에 서버가 클라이언트를 업데이트 할 때까지 일시적으로 로컬 변수를 사용할 수 있습니다. 클라이언트의 버전은 이 아니며이 표준 버전이되어야합니다.

정교하게 : 영향을받는 사람 만 플레이어이므로 로컬 변수를 사용하십시오. 따라서 자신의 데이터를 조작하는지는 중요하지 않습니다. 다른 모든 상황에서는 서버 변수를 사용하십시오.

+0

크리스 감사합니다. 내가 생각했던 것도 그 때문입니다. 저는 플레이어가 "장비를 갖춘"물건을 다루는 현재의 과정에 있습니다. 이것이 맞는 접근이라고 생각하십니까? : 1) 서버가 클라이언트에게 장비 아이템을 부여합니다 (괴물 약탈자는 말합니다). 2) 클라이언트가 아이템을 장비 할 수있는 권한을 요청합니다. 3) 부여 된 경우 해당 아이템 슬롯은 아이템을 취하고 아무것도 그 아이템 슬롯이 출시 될 때까지 장착 할 수 있습니다. 4) 서버가 클라이언트에 업데이트 된 통계를 보내고 클라이언트 변수에 "표시"통계 만 사용됩니다. – mcw

+0

저에게 의미가 있습니다. 나는 많은 현대 게임들이 클라이언트가 아닌 모든 입력을 서버에 보내어 해석함으로써 초기 FPS 게임에서 흔히 발생하는 해킹과 같은 것을 피하기 위해 접근한다는 것을 알고 있습니다. 유사한 접근법이 여기에서 잘 작동해야합니다. –

0

서버에서 클라이언트에서 수행 한 작업을 기반으로 계산을 수행하는 방식입니다. 클라이언트는 동일한 작업을 수행하여 클라이언트에 더 빨리 업데이트 할 수 있지만 서버는 발생한 일의 신뢰할 수있는 결정자 여야합니다. 즉, 발생하는 모든 사항을 다시 확인하기 위해 클라이언트와 서버간에 많은 상호 작용이 필요하지 않습니다.

+1

퀘이크에서 4 배의 데미지를 생각 나게합니다. 당신이 그것을 가로 질렀을 때, 클라이언트는 그것을 집어 들고 행복하게 "Quad!"라고 발표했습니다. 스피커를 통해 그런 다음 서버는 사용자가 실제로 처음으로 가져 왔는지 결정했습니다. 그렇지 않은 경우 쿼드를 무효화하고 클라이언트가 "거부 됨"을 추가합니다. – flup

관련 문제