2012-09-18 4 views
-3

나는 설계하고있는 온라인 게임을위한 PHP 전투 시스템을 작성하려고합니다.PHP 전투 시스템 무결성

요약하면 MMORPG가 될 것이며 플레이어의 통계는 몬스터 데이터처럼 두 개의 MySQL 테이블에 저장됩니다.

간단히 말해서 나는 괴물의 HP를 편집하여 무언가를하는 사람들에 대해 걱정하고있다. 그래서 괴물을 죽이고 컴퓨터에서 HP 최대치를 유지한다고 말한다. 매순간마다 MySQL 항목을 업데이트 하시겠습니까?), 아니면 뭔가 다른 것입니다.

저는 여전히 PHP에서만 중급이므로, 사용자가 변경하지 못하도록 숨겨진 값을 어떻게 가질 수 있는지, 공격이있을 때마다 MySQL 테이블을 업데이트하여 심각한 서버 정체를 만들지는 모르겠습니다.

누군가가 나에게 다음 중 하나 이상을 알려 주시기 바랍니다 수 :

  1. 부정 행위를 할 수 있도록 편집되는 이러한 활성 변수를 숨길 혼자 PHP에서 방법이 있나요?

  2. 그렇지 않거나 매우 서버 친화적이지 않은 경우 비교적 간단한 애플릿이 Java에 있습니까? 아니면 비교적 간단한 방식으로 프로그래밍 할 수있는 호스트 변수를 제어하는 ​​앱입니까?

지금 몬스터는 일반 공격 만 할 것이고 플레이어는 공격을받을 것입니다.하지만 플레이어의 기술 공격을 먼저 확장 할 계획입니다.

+1

여기에 진짜 질문이 없으므로 downvoted가 나타납니다. 이 질문의 3/4를 자르고 여전히 메시지를 전달할 수 있습니다. 당신이 묻고있는 것을 다시 생각해보고 다시 시도해 보시기 바랍니다. –

+0

먼저 PHP (서버 측 변수)는 사용자가 편집 할 수 없습니다. 둘째, 일반적으로 게임이 일반적으로 부정 행위를 방지하기 위해 노력하는 방식으로 무언가를하고 실제 계산 서버 측을 처리하라는 요청이 있습니다. EX : 클라이언트의 공격 요청, 서버가 가능한지 여부 및 얼마나 많은 피해가 있는지 확인한 다음 클라이언트에게보고합니다. 서버는 클라이언트의 모습을 이미 보여 주었고 서버가 동의하지 않으면 변경해야합니다. –

+0

@Alex Lunix 고맙습니다. PHP 자체는 사용자가 편집 할 수 없습니다. 내 질문은, 당신이 치트 엔진에 대해 아는 경우 브라우저의 속성을 변경할 수 있다는 것입니다. 내 두려움은 사용자가 항상 브라우저에 최대 HP가 있다고 생각하게하고 서버에 그 값을 돌려 주도록 정렬하는 것입니다. 제 질문은 어떻게하면 효율적으로 마지막으로? MP 예제를 사용하면, 매순간 MP를 지속적으로 업데이트하기 위해 대역폭을 먹지 않을까요? – Reidmere

답변

4

브라우저가 서버에 제공하는 것을 신뢰해서는 안됩니다. 브라우저는 원하는 모든 요청을 할 수 있지만 (예 : 5000 피트 앞으로 이동), 서버가 요청을보고 "와우, 그렇게 할 수는 없습니다! 최대 속도는 2 피트/초"입니다. 그런 다음 구현 요청에 따라 "이동 요청"을 거부하거나 무시합니다.

예를 들어, 클라이언트 (브라우저 또는 데스크탑의 응용 프로그램)는 원하는 모든 데이터를 저장할 수 있습니다. HP와 자원을 저장할 수 있습니다. 서버에는 이것들의 복사본이 있습니다. 누군가 치트 엔진과 같은 메모리 변경 도구를 사용한다면 클라이언트의 데이터를 수정할 수 있습니다 (예 : 100 ~ 1,000,000 달러). 그러나 클라이언트가 50,000 달러짜리 항목을 구매하도록 요청하면 서버가 요청을 확인하기 때문에 아무런 의미가 없습니다. 클라이언트가 아니라 서버에서 돈을 조사하고 사용자에게 충분한 자금이 없다는 사실을 알립니다. 사용자에게 "불충분 한 돈"이라고 말하면 npo 거래가 이루어집니다.

클라이언트가 클라이언트의 내부 메모리를 사용하려고하면 클라이언트가 더 이상 제대로 작동하지 않는다고 걱정하지 않아도됩니다. 서버가 게임 상태 수정에 대한 모든 요청을 승인하고 모든 것이 정상적으로 작동하는지 확인하십시오.

네트워크 스팸을 방지하고 사용자의 동작을 계속 유지하려는 경우 클라이언트는 서버가 요청을 승인한다는 가정을 할 수 있습니다. 따라서 사용자가 특정 거리를 이동하고 몇 초 후에 하나의 요청을 보내거나 서버가 요청을 승인하기를 기다리는 동안 여러 요청을 보내고 문자 이동을 표시 할 수 있습니다. 여러 요청을하고 서버가 응답하는 데 시간이 걸리는 경우 클라이언트에 대해 서버와의 비동기 문제가 발생합니다.

일반적으로 많은 요청을 보내야하며 다른 사용자가 자신이하는 일을 볼 수 있기를 원하기 때문에 사용자가 무언가를 할 때마다 요청을 보내야합니다.이 문제를 해결할 방법은 없지만 클라이언트가보다 원활하게 작동 할 수 있도록 영리한 압축 및 지연 전술을 사용할 수 있습니다.

항상 SQL 서버를 사용하지 않으려면 Memcache과 같은 캐싱 도구를 사용하면 편리합니다.이 도구는 PHP에서 편리하게 지원됩니다. Memcache는 필요한 모든 것을 매우 빠른 데이터 저장을 위해 메모리에 저장할 수 있습니다. 물론 캐시와 데이터베이스를 동기화해야하므로주의해야합니다. 반대의 경우도 마찬가지입니다.

+0

알렉스의 말처럼 고맙습니다.하지만 데이터베이스 쿼리를 넘치게하지 않고 어떻게 할 수 있습니까? 귀하의 예를 들어, 3 초 동안 1 초에 2 피트를 이동하도록 업데이트하지 않고 서버가 이미 6 피트를 움직 였다는 것을 서버가 알고있는 곳에 어떻게 설정할 수 있습니까? 내 생각에 여러 사람이 그 일을한다면 연결에 부담을주지 않을까요? 내 서버 컴퓨터는 강력하지만 대역폭이 너무 덥지는 않아서 대역폭이 가장 가벼운 방법을 찾아 내려하고 있습니다. – Reidmere

+0

나는 나의 대답을 업데이트했다 – kurtzbot

+0

@ Reidmere, 위의 다른 사람들은 옳다 : 그래서 일반적으로보다 구체적인 질문에 맞추어진다. 나는이 질문에 답하는 것이 당신을 좀 더 구체적인 것으로 이끌 수 있다고 생각했습니다. – kurtzbot