336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

요즘들어 취미로 시작한 RunUO 스크립팅,
JACOB 님 으로부터 서버 크래시 발생 신고 접수
내 컴퓨터로 일단 돌려본 결과, 문제 발생안함,

상황은 대충 이렇다.
Bounty System 관련 스크립트를 적용 후 서버를 돌리면 세이브 타이밍에 크래시가 남,
메시지는...



Core: Using dual save strategy
World: Saving...Error:
System.Exception: World Save event threw an exception.  Save failed! ---> System.NullReferenceException: Object reference not set to an instance of an object
  at System.Data.XmlSchemaDataImporter.CreateChildColumn (System.Data.DataColumn parentColumn, System.Data.DataTable childTable) [0x00000]
  at System.Data.XmlSchemaDataImporter.GenerateRelationship (System.Data.RelationStructure rs) [0x00000]
  at System.Data.XmlSchemaDataImporter.Process () [0x00000]
  at System.Data.DataSet.ReadXmlSchema (System.Xml.XmlReader reader) [0x00000]
  at System.Data.DataSet.ReadXmlSchema (System.String fileName) [0x00000]
  at Server.BountySystem.BountyBoard.saveGlobalList (Server.WorldSaveEventArgs e) [0x00000]
  at (wrapper delegate-invoke) Server.WorldSaveEventHandler:invoke_void__this___WorldSaveEventArgs (Server.WorldSaveEventArgs)
  at (wrapper delegate-invoke) Server.WorldSaveEventHandler:invoke_void__this___WorldSaveEventArgs (Server.WorldSaveEventArgs)
  at (wrapper delegate-invoke) Server.WorldSaveEventHandler:invoke_void__this___WorldSaveEventArgs (Server.WorldSaveEventArgs)
  at Server.EventSink.InvokeWorldSave (Server.WorldSaveEventArgs e) [0x00000]
  at Server.World.Save (Boolean message) [0x00000]
  --- End of inner exception stack trace ---
  at Server.World.Save (Boolean message) [0x00000]
  at Server.World.Save () [0x00000]
  at Server.Misc.AutoSave.Save () [0x00000]
  at Server.Timer+DelayCallTimer.OnTick () [0x00000]
  at Server.Timer.Slice () [0x00000]
  at Server.Core.Main (System.String[] args) [0x00000]
Crash: Backing up...done
Crash: Generating report...done
Crash: Restarting...done





대충 이렇다...
리눅스용 C# 실행기(Mono) 에서 XSD 파일만 만나면 저런 오류를 뱉어내더라
결국 JACOB 님께 해당문제가 수정된 버전의 업그레이드를 제안...
하지만, 설치되어있는 버전은 이미 해당문제가 수정된 버전......

고심끝에 나중을 위해서라도 XML 로 되어있는 부분을 뜯어고치기로 결심...
회사일이 너무 바빠 구현은 힘들고 일단 생각만 정리해둔다.

Bounty System 의 경우 BountyBoard.cs 파일 안의 BountyBoard 클래스에서 현상금 정보를 관리한다..

m_Entries 정적변수 안에는 모든 현상금 정보가 기록되어 있으며, ArrayList 형태로 구성되어있다.
m_Entries ArrayList 안에 들어가는 객체 타입은 BountyBoardEntry 객체로, 현상금정보, 가해자, 피해자 정보 구성

크래시가 일어났던 부분은 BountyBoard 객체 안의 saveGlobalList 정적함수로 xsd 파일에 접근, xml 스키마를 읽어들이는 부분에서 나는것으로 확인되었다.

2010년 4월 7일 현재, XML 대신 DB 로 저장하여 관리하는게 차후 랭킹 시스템 구현에서 용이함을 가져오고, 해당 크래시 문제를 해결할 수 있으리라고 본다.

DB 로 구현할때 필요한건 다음과 같다.

테이블 : (Owner Name, Owner Serial, Wanted Name, Wanted Serial, Price) 컬럼 필요
저장함수 기능 : Bounty 일괄추가, Bounty 일괄삭제, 유저별 합산 Bounty 및 순위 매기기

회사 일이 조금 한가해 지는대로 작업 시작한다.
블로그 이미지

캡틴토마스

그저 걷고 있는거지...

,