현재 MMORPG를 만들고 있습니다.
현재 게임의 통화 부분을 작업 중이지만 생성 된 통화의 모든 단위에 고유 한 일련 번호를 할당해야하는지 혼란스러워합니다.
이 시스템을 사용하여 가상 화폐의 오용을 추적하고 싶지만 이것이 일반적인 관행입니까? 그렇지 않은 경우 운영 및 / 또는 성능 관점에서 좋은 아이디어입니까?
답변
이치에 맞지 않을 것입니다.
플레이어 A에서 100 개의 Zorkmids와 플레이어 B에서 100 개의 Zorkmids를 받으면 200 개의 Zorkmid가 있습니다.
그런 다음 플레이어 C에게 50 개의 Zorkmid를 지불 할 때 C는 내가 A 형을 얻은 Zorkmids 또는 B에서 얻은 Zorkmids로부터 그것들을 얻을 수 있습니까? 이것을 제어 할 수 있습니까? 중요합니까? Zorkmid는 Zorkmid입니다.
개별 통화 단위의 거래 내역이 아닌 계좌의 거래 내역을 모두 추적하는 실제 은행 및 회계사에게는 중요하지 않습니다. 그런 식으로 오용을 식별하는 것은 여전히 가능합니다.
즉, 개별 동전을 재고 품목으로 취급하는 게임을 상상할 수 있으므로 누군가와 거래 할 때 여분의 변화가 있는지 확인해야합니다. 이것은 동전 마킹, 마법 또는 위조와 같은 흥미로운 기능을 허용합니다. 이 경우 각 동전을 개별적으로 추적하는 것이 좋습니다. 그러나 실제로 그렇게하는 게임은 생각할 수 없습니다.
답변
아닙니다.
통화 거래를 추적 할 수있는 시스템을 구축해야하지만 (특히 해당 통화가 실제 화폐 난 독자 인 경우) 해당 통화의 모든 개별 단위 를 추적 할 필요는 없습니다 . 추적에 관심이있는 것은 특히 대량의 자금의 총 이동입니다 (잠재적 인 외부 / 제재되지 않은 실질 거래의 지표 일 수 있음). 개별 통화 단위를 추적해도 도움이되지 않으며 (실제로 상처를 입을 수 있음) 많은 ID를 생성하고 데이터베이스에 비교적 많은 양의 정보를 저장하도록 요구함으로써 관련 데이터를 유지하는 것만 복잡하게 만듭니다.
실제 돈 난 독자 통화 (즉, Guild Wars 2 의 보석 과 같은 게임 내 콘텐츠를 구매하는 데 사용되는 실제 돈으로 구매하는 것)에는이 아이디어에 가치가 있습니다 . 특히, “자유”를 위해 경제에 도입 된 통화 단위와 실제 거래를 통해 도입 된 통화 단위를 명확하게하기 위해 이러한 요구가 발생할 수 있습니다. 일반적으로 후자에 대한 수익 만 궁극적으로 인식 할 수 있으므로이를 명확하게 유지하는 것이 중요합니다.
그러나 통화의 ‘무료’및 ‘유료’인스턴스에 대해 총 단위 수, 총 단위 수를 집계하여 숫자를 간단히 저장하여 필요한 정보를 추적 할 수 있습니다. 이것은 당신이 집계에서 이러한 것들을 일반적으로 트랙하려는 일반적인 생각과 함께가는 트랜잭션 이 같은 두 트랙, 당신이 정말로 필요한 데이터를 수준이 아니라 현재의 수준 과 그들이 분산으로 자금의 큰 덩어리를 추적하기가 쉬워집니다 시스템 전체에
답변
작성자 참고 사항 :이 답변은 네트워크 외부에서 거래를하지 않고 서버와 다시 동기화한다는 가정하에 이루어졌습니다.
개별 플레이어 간의 트랜잭션은 반드시 서버를 통해 이루어져야하기 때문에 개별 일련 번호의 통화를 추적 할 필요는 없습니다. 다시 말해, 귀하의 서버는 계정 잔액에 대한 권위있는 소스입니다. 서버는 사용자에게 얼마의 돈이 있는지 묻지 않습니다. 서버에 연결된 클라이언트는 API 호출을 통해 서버에 “내 플레이어의 돈이 얼마나 있는지”묻습니다. 이것은 플레이어가 네트워크를 벗어난 상태에서 거래를하지 않고 서버와 다시 동기화하지 않는다는 가정을하고 있습니다. ].
정부 통화의 예에서 유일한 권위있는 출처는 계정에 첨부되지 않은 통화입니다. [남자는 $ 200를 꺼내고, 각 청구서에는 일련 번호가 “서명되어”다른 사람이 실제 통화인지 확인할 수 있습니다. 그들은 그것을하기 위해 번거 로움을 겪었다). 청구서가 은행에 입금되면 일련 번호가 유통되지 않은 것으로 표시되었는지 여부를 결정하는 방법이 있습니다]. 그러나 거래는 통화를 보지 않고 계정간에 자금을 이체하는 단일 지점의 여러 사용자와 더 유사합니다.
설명 할 주된 이야기는 누가 당신의 권위있는 출처인지에 대한 것입니다. 나는 설명하려고 노력할 것입니다 : 사용자는 현금 지급기에서 돈을 꺼내고 싶어합니다. 사용자는 지점으로 가지 않고 “500 달러를 가지고 있습니다. 나를 믿으십시오. 이것들은 연재물입니다”라고 선언하십시오. 대신 그는 키 [계좌 번호 / 키]를 넘기고 지점 / 서버는 사용자에게 자신의 자금을 알리고 잔액을 줄이면서 통화를 할 수 있습니다. 신뢰할 수있는 출처 (서버)가 잔액을 확인하지 않는 한 사용자가 은행에 “정말로 500 달러를 받았습니다”라고 설득하려고하더라도 아무 일도 일어나지 않습니다.
건배.
답변
실제 환경의 작동 방식에 따라 게임 시뮬레이션을 프로그래밍하려고하면 컴퓨터가 처리 할 수있는 정보의 양과 관련하여 몇 가지 큰 문제가 발생합니다.
모래 알갱이에 몇 개의 원자가 있는지 계산하는 다음 페이지를 예로 들어 보겠습니다.
http://www.thenakedscientists.com/forum/index.php?topic=6447.0
나는 화학과 물리학을 공부하면서 이와 같은 많은 문제를 보았습니다.이 페이지의 사람이 온 엄청나게 높은 숫자는 다양한 교사와 교과서가 나온 볼 파크에 있습니다. -> 78 000 000 000 000 000 000
이것이 꺼져 있고 그 중 6을 제거하더라도 평균 컴퓨터가 대화 형 속도로 처리하기에는 너무 큰 숫자를 갖게됩니다. 특히 1000 개의 트랜잭션이 주어진 시간에 발생하는 경우.
하나의 곡물에 78 000 000 000 000 000 000 개별 구성 요소가있는 경우 해변의 모든 모래 곡물에있는 모든 원자의 운동량, 위치, 속도, 순간 가속, 전계 전하 등을 어떻게 계산하고 추적 할 수 있습니까? 하위 원자 구성 요소를 고려할 경우 더 많은 정보를 얻을 수 있습니다.
한 번 다음과 같은 내용의 nVidia 그래픽 프로그래밍 문서를 읽었습니다.
시뮬레이션이 100 % 정확하지 않은지 아무도 알 수 없기 때문에 가장 근사한 근사치가 좋은 것을하십시오. 효율성을 고려해야합니다.
그래픽과 관련이없는 경우에도 모든 유형의 게임 시뮬레이션에 동일하게 적용됩니다. 작업을 수행하는 데 필요한 최소한의 작업 만 수행해야합니다. 여기서 모두 나가면 처리 할 수없는 복잡한 컴퓨터를 묻게됩니다.
또한이 복잡한 코드를 작성하고 유지 관리해야합니다.
모든 통화 단위에 고유 한 일련 번호를 부여 할 수 있지만이 세부 정보만으로 모든 컴퓨터 리소스를 사용하게됩니다.
어쩌면 이것을 처리하는 더 좋은 방법은 각 트랜잭션에 대해 하나의 고유 식별 만 제공하는 것입니다.
따라서 1 번 플레이어는 2 번 $ 1000000을 지불합니다.
각 달러에 고유 한 식별자를 부여하면 많은 사람들의 컴퓨터가 모든 네트워크 트래픽과 이로 인한 지연을 언급하지 않고 큰 문제를 일으키기 시작합니다.
또는 전체 트랜잭션을 나타내는 하나의 값을 만들 수도 있습니다.
uint transferFunds_Player1ToPlayer2 = 1000000;
20 년 된 포켓 계산기조차도 이와 같은 것을 처리 할 수 있습니다.