|
2006-11-09 05:21
조회: 4,468
추천: 0
아이템 인첸트에 관련된 확실한 정보많은 분들이 아이템 인첸 관련으로 많은 의견이 오갔습니다.
앞으로 제가 말씀드릴 내용은 프리섭을 운영하기 위해 많은 프로그램을 접해본 유저로써의 글이 되겠고, 여러종류의 게임이나 기타 플래시 게임에도 동일하게 적용이 되는 내용을 바탕으로 이야기를 진행해 보려 합니다 긴 글이 될것 같아서 미리 이점을 확인 시켜 드리고 진행을 하려 합니다. 또한 본 게시물에 이의가 있으신 분은 가차없이 지적을 해 주셨으면 감사하겠습니다. ------------------------------------------------------------------------------------------------------------ 보통 서버측에서 아이템업글에 관련된 내용을 찾아보면 해당 서버의 데이터베이스의 프로시져란곳에서 처리를 하게끔 작성되어 있는 경우가 대부분입니다. 이것의 이유는 당연한 결과겠지만 클라이언트에서 이러한 아이템 업글 확률을 정해 놓는다면 이미 많이 알려진 치트엔진이나 기타 핵 제작관련 프로그램에서 확률을 일정하게 수정하여 업그레이드를 100%까지 끌어올릴 수 있는 요지가 충분하기 때문에 사용자가 게임도중 아이템 업글을 시도하게 되면 이 내용은 서버측의 데이터베이스에서 결과(확률)을 도출하여 반대로 클라이언트쪽으로 데이터를 전송한 후 클라이언트에서 이 확률에 따라 성장과 실패를 정하게끔(0,1) 하게 되어 있습니다. 여기서 주목할 점은 확률은 서버에서 전송해 주고 클라이언트에서 확률에 따라 성장과 실패를 정하게끔한다고 했는데 그렇다면 클라이언트에서 이 성장과 실패를 정하는 proc를 수정하여 업글을 시전하면 어떻게 될까.. 하는점인데 이역시 그러한 구문을 찾을 확률이 매우 적기 때문에 뭐라 단정지어 말씀 드릴 수는 없습니다. 보통은 게임사에서 게임을 개발할때 이러한 구문을 특정 위치에 넣어 사용하는 기법이 아닌 포인트라는 개념을 사용하기 때문에(동적으로 변경되는 수치) 이 구문을 클라이언트에서 찾기란 하늘의 별따기 정도가 될듯 합니다. 그렇다면 서버측의 업글 확률에 관련된 내용은 어떠한것인가 하는것이 궁금해 지는데, 모 게임의 아이템 업글에 관련된 데이터베이스 프로시져를 예를 들도록 하겠습니다. --------------------------------------------------------------------------------------------------------------- select @ItemCountLimit = ItemCountLimit from RedMoon.dbo.tblSpecialItemLimit1 where ItemKind = 6 and ItemIndex = 66 (시전할 수 있는 아이템을 제한합니다 ItemKind = 6번이고 ItemIndex = 66번이라는 아이템을 제한합니다) set @RandomNumber=RAND() * 100000000 (확률을 정합니다) set @RandomNumber=@RandomNumber%100 (정한 확률을 100으로 나누어 1%~100%까지 도출합니다) if @Level1000User > 0 (레벨이 1000보다 클 경우 - 이게임은 특성상 렙 1000이 넘어야 다음의 구문을 실행할 수 있습니다) begin (구문 시작) if (@WindowKind = 1 and @WindowIndex >= 0 and @WindowIndex < 100) or (@WindowKind = 3 and @WindowIndex >= 0 and @WindowIndex < 8) (아이템 창이 인벤창이거나 퀵슬롯창이고, 해당 아이템의 위치가 아이템창 어디에 위치해 있는지를 찾게 되고 만일 그것이 존재한다면) begin (구문시작) declare @MakeMysteryPillError int (단약이라는 아이템 설명부입니다. 아이템 시전이 실패할경우의 선언부) set @MakeMysteryPillError = 1 ( 아이템 시전이 실패할 경우) update tblGameID1 set SBonus = SBonus - 1, STotalBonus = STotalBonus - 1 where GameID = @GameID and SBonus >= 1 and STotalBonus >= 1 (케릭터의 보너스 포인트 1감소시키고 케릭터의 보너스 포인트가 1 이하인지의 에러여부 확인) if @@ROWCOUNT = 1 and @@ERROR = 0 (에러가 없을 경우) begin (구문 시작) insert RedMoon.dbo.tblSpecialItem1 (ItemKind, ItemIndex, Position, Map, X, Y, TileKind, GameID, WindowKind, WindowIndex) values (6, 66, 1, 1, 100, 100, 0, @GameID, @WindowKind, @WindowIndex) (케릭에 관련된 여러 변수를 업데이트 하고 해당 케릭의 아이템창에 성공된 아이템을 추가 등록) end -------------------------------------------------------------------------------------------------------------- 위의 프로시져는 x드문 이라는 게임에서 발췌한 내용입니다. 이런것을 올려도 될지 모르겠습니다. 위의 구문을 보고 정신 없어 하실 분도 있을겁니다. 그래서 위의 구문 내용은 중요하게 보실 필요는 없고 중요한 내용은 "프로시져에서 확률을 정해준다" 라는겁니다. 아이템 업글에 관련된 여러가지 설이 나오고 있지만 정작 게임에서 운용되는 업글에 관련된 내용은 모두 데이터베이스에서 처리가 되고 이로 인해 서버측에서는 보안을 제공받고 보다 안정적인 게임 운용을 할 수 있다라는 겁니다. 결과적으로 여러분이 하시는 게임의 아이템 인첸 확률은 전적으로 운에 바탕을 두고 있고 있다고 볼 수 있겠지요. 한가지 아이템을 업글 할때 연속으로 계속 뜰 수도 있고 1번 띄우는데 없어질 수도 있는 확률이 바로 그것입니다. 또다른 아이템 인첸 언급에 관한 내용을 보면 "특정 +인첸된 아이템의 포화를 막기 위해 특정 수량 이상이 되면 아이템 업글 확률이 줄어든다"라는 내용이 있는데 이 역시 충분히 가능성 있는 글입니다. 왜냐하면 데이트베이스의 특정 테이블에 해당 아이템의 수량을 기입할 수 있도록 해놓고 이 수량이 만일 100개 이상이 되면 확률을 %만큼 낮춰라 라는 체크 구문을 넣어 둘 수도 있는 문제입니다. 아이템 포화를 막기 위한 수단이 될 수도 있겠지요. 이상으로 아이템 인첸에 관련된 제가 아는 한도내의 확실한 답변입니다. 분명 이의가 있는분도 있을거라고 생각합니다. 이의가 있는분은 언제든지 질타를 해 주십시오. 정보 공유를 위해 질타 받는것쯤은 충분히 감수 하고 있습니다. 쓸데없이 길게 쓴 글을 읽어 주셔서 감사합니다.
EXP
1,270
(35%)
/ 1,401
|
쿠엑