DCMS

Dark Tornado     Developers' Blog     App     Download     Github     Main Page     Terms     API     Theme Download

  DCMS(Dark Cheater Modify Script)란, 블록런처에서 스크립트나 애드온 등을 적용하듯이, 다크 치터에서 DCMS를 적용하는 것이다. 관련 게시글 ModPE 스크립트를 기반으로 만들어졌으며, 확장자는 ".dcms"이다. DCMS는 기본적으로 ModPE 스크립트에 존재하는 모든 함수들을 사용할 수 있으나, 자유도는 ModPE가 더 높다. 기본적으로 제공되는 ModPE 스크립트에서의 함수들 말고도, DCMS 라이브러리를 적용하면, 해당 라이브러리에 있는 함수들도 사용할 수 있다. 주석 역시 ModPE 스크립트와 동일한 방법으로 넣을 수 있다? 이 페이지에서 설명하는 DCMS는 다크 치터 2.8.0부터 지원하는 DCMS 3.0에 대한 설명이다.

  전역변수는 다음과 같이 선언한다. 원래는 상수도 있었으나, 더 이상 지원하지 않는다.

function defineVar(){
    변수명 = 값;
}
전역변수를 사용할 때에는 앞에다가 @를 붙여야 한다.

  지역변수는 ModPE와 동일하게 사용하면 된다. 앞에 @같은건 안붙인다. 이후 php처럼 붙여야 하도록 수정될 가능성이 있다.

  if문과 같은 제어문들 및 연산자들 역시 ModPE와 동일하다

if (Level.getGameMode() == 0){
    Level.setGameMode(1);
} else {
    Level.setGameMode(0);
}

for (var  n = 0; n < 5; n++) {
    clientMessage("씐나는 채팅창 도배!");
}

switch(itemId) {
    case 261:
        print("활");
        break;
    case 262:
        print("화살");
        break;
    default:
        print("무언가");
}

while (true){
    //신나는 무한 반복이다!
}

  이벤트 리스너는 다음과 같다. ModPE와 동일하게 더 이상 매개변수들의 이름이 정해져 있지 않으며, 따라서 이벤트 리스너의 () 안에 매개변수들을 더 이상 생략할 수 없다.

  • function blockTouch(x, y, z, itemId, blockId, side, itemDamage, blockDamage) 블록을 터치하면 호출된다. 각 매개변수들는 각각 터치한 곳의 x좌표, y좌표, z좌표, 아이템 아이디, 블록 아이디, 블록의 면, 아이템 데미지, 아이템 데미지이며, ModPE 스크립트의 useItem에 대응된다.
  • function entityHit(attacker, victim) 엔티티를 때리면 호출된다. 각 매개변수들는 각각 때린 엔티티와 맞은 엔티티이며, ModPE 스크립트의 attackHook에 대응된다.
  • function entityDie(murderer, victim) 엔티티가 죽으면 호출된다. 각 매개변수들는 각각 죽인 엔티티와 죽은 엔티티이며, ModPE 스크립트의 deathHook에 대응된다.
  • function modSecond() 1초마다 호출된다. 매개변수는 없다. ModPE 스크립트의 modTick에 약간 대응된다.
  • function chatSend(str로) 채팅을 하면 호출된다. 서버원의 채팅은 인식하지 않는다. 매개변수는 채팅 내용을 의미하며, ModPE 스크립트의 chatHook에 대응된다.
  • function selectMap(worldName) 맵에 들어가면 호출된다. 매개변수는 들어간 맵의 이름을 의미하며, ModPE 스크립트의 newLevel에 대응된다.
  • function selectServer(ip, port) 서버에 연결하면 호출된다. 각 매개변수들는 각각 연결된 서버의 IP와 포트를 의미하며, ModPE 스크립트의 이벤트 리스너들 중에 대응되는 것이 없다.
  • function quitToTitle() 맵이나 서버에서 매인 화면으로 나오면 호출된다. 매개변수는 없다. ModPE 스크립트의 leaveGame에 대응된다.

  다음은 DCMS Basic Library에 들어있는 함수들 목록이다.

  • sendMessage(내용); 채팅창에 메시지를 출력한다. clientMessage();와는 달리, 서버원에게도 보인다.
  • teleport(엔티티 x좌표, y좌표, z좌표); 해당 엔티티를 해당 위치로 이동시킨다. 서버원 포함.
  • checkInternet(); 인터넷 연결 여부를 반환한다. 연결되어 있으면 true, 아니면 false.
  • nightCheck(); 밤이면 true, 낮이면 false를 반환한다.
  • toast(내용); 토스트 메시지를 출력한다. print();와는 달리, 앞에 스크립트의 이름이 뜨지 않는다.
  • openUrl(url); 해당 url로 이동한다.
  • showDialog(제목, 내용); 다이얼로그를 출력한다.
  • getRealTime(날짜표함여부); 현실세계에서의 현재 시간을 가져온다. 날짜 표함 여부에는 true 또는 false를 넣으면 된다.
  • getBatteryLevel(); 현재 베터리의 잔량이 몇 %인지 반환한다.

  다음은 ModPE Expension Library에 들어있는 함수들 목록이다.

  • Level.spawnSpiderJoky(x좌표, y좌표, z좌표); 해당 위치에 스파이더 조키를 소환한다.
  • Level.spawnChickenJoky(x좌표, y좌표, z좌표); 해당 위치에 치킨 조키를 소환한다.
  • Level.isNight(); 밤인지 확인한다. 밤이면 true, 낮이면 false 반환. nightCheck();와 동일
  • Player.getHealth(); 플레이어의 체력을 반환한다.
  • Player.removeEnchant(); 플레이어가 들고 있는 아이템의 인첸트를 해제한다.
  • Entity.linkWithParticle(엔티티1, 엔티티2); 엔티티1과 엔티티2 사이를 파티클로 연결한다.
  • Entity.getNearEntities(엔티티, 반경, 기타_엔티티_포함_여부); 해당 엔티티를 기준으로 해당 반경 내에 있는 엔티티들을 배열로 반환한다. 기타 엔티티 포함 여부가 false거나 생략한 경우, 화살, 눈덩이, 활성화된 TNT 등은 포함하지 않는다.
  • Entity.removeNameTag(엔티티); 해당 엔티티의 이름표를 지운다.
  • Entity.makeBaby(엔티티, 참/거짓); 해당 엔티티를 아기로 만든다. 좀비와 좀비 피그맨에게만 사용 가능. true일 시 아기로, 거짓일 시 어른(?)으로 만든다.
  • Entity.startBattle(엔티티1, 엔티티2); 엔티티1과 엔티티2가 싸우도록 만든다.
  • Entity.removeEntities(엔티티_타입_아이디); 특정 종류의 엔티티들을 전부 삭제한다.
  • Item.getAllItemIds(블록_포함_여부); 존재하는 모든 아이템의 아이템 아이디를 배열로 반환한다.
  • ModPE.getBlocklauncherVersion(참/거짓); 블록런처의 버전을 가져온다. 참이면 블록런처 프로, 거짓이면 블록런처 무료의 버전을 가져온다.
  • ModPE.getMyIp(); 현재 나의 IP를 가져온다.
  • ModPE.getUserName(); 현재 나의 닉네임을 가져온다.
  • ModPE.checkBlocklauncherIsPro(); 현재 사용중이 블록런처가 프로 버전인지 확인한다. 프로 버전이면 true, 무료 버전이면 false 반환.
  • ModPE.setWindow10Ui(참/거짓); 마크의 UI를 윈도우 10 에디션의 UI로 변경한다. 바로 적용되지는 않으며, 완전히 바뀌는 것도 아니다.
  • Server.kickAllPlayers(); 서버에 접속한 모든 플레이어를 강제로 내보낸다.
  • Server.getPlayerByName(닉네임); 해당 닉네임을 가진 플레이어의 엔티티값을 반환한다.

  DCMS 3.0부터는 사용자 정의 함수를 지원한다. 사용자 정의 함수를 호출할 때는 함수의 이름 앞에 #을 붙여야 한다.

  다음은 터치한 아이템의 정보를 변수에 저장한 뒤, 채팅창에 "아이템"이라고 치면 터치할 때 들고 있었던 아이템의 이름을 채팅창에 출력하는 예제이다. 귀찮은 관계로, 주석은 생략하였다?

function defineVar(){
    item = null;
    itemData = null;
}

function blockTouch(x, y, z, itemId, blockId, side, itemDamage, blockDamage) {
    @item = itemId;
    @itemData = itemDamage;
}

function chatSend(str) {
    if (str == "아이템") {
        if (@item == null) {
            #printf("아직 블록을 터치하지 않았습니다.");  //사용자 정의 함수 사용
        } else {
            clientMessage("아이템 이름 : "+Item.getName(@item, @itemData));  //기존의 함수 사용
        }
    }
}

function printf(str) {
    clientMessage("[DCMS] "+str);
}



© 2015-2017 Dark Tornado, All rights reserved.