package ObjectIdGenerator import NoWurst import ErrorHandling import Preloader public constant UNIT_ID_GEN = new IdGenerator('x000') public constant HERO_ID_GEN = new IdGenerator('HM00') public constant ABIL_ID_GEN = new IdGenerator('AM00') public constant BUFF_ID_GEN = new IdGenerator('BM00') public constant ITEM_ID_GEN = new IdGenerator('IM00') public constant UPGD_ID_GEN = new IdGenerator('RM00') public class IdGenerator private int i1 private int i2 private int i3 private int i4 construct(int start) i1 = start mod 256 i2 = (start mod 65536) div 256 i3 = (start mod 16777216) div 65536 i4 = start div 16777216 function isInvalid(int char) returns boolean return (char < 48 or (char > 57 and char < 97)) function next() returns int if i1 < '~' i1++ while isInvalid(i1) i1++ else if i2 < '~' i1 = '!' i2++ while isInvalid(i2) i2++ else if i3 < '~' i1 = '!' i2 = '!' i3++ while isInvalid(i3) i3++ else if i4 < '~' i1 = '!' i2 = '!' i3 = '!' i4++ while isInvalid(i4) i4++ else error("No vaild id left") return 0 let id = i1 + (i2 * 256) + (i3 * 65536) + (i4 * 16777216) if not compiletime preloadAbility(id) return id