SCA Launcher

What is SCA Launcher?

– SCA which stands for StarCraft Archive, is a third-party utility that allows custom maps to save/load data online.

– This enables Starcraft UMS to become “online”, allowing you make maps such as Diablo in Starcraft.

-The data is saved in SCA servers, and a web admin interface is provided for map makers.

-The cost of using SCA is free, and there is a Patreon.com page if you want to support this project.

-SCA replaces SCDB Launcher, which shares the exact same functionality. However, SCDB was abandoned due to an infamous incident with Random Pyramid Defense. In short, people were manipulating the save file as the data were stored locally with SCDB. Although SCDB save files were encrypted, they eventually got cracked and the data manipulation was sold as a service at an avg. of $4-9 USD per file. 😂 The manipulation was sought after to earn the highest ranking title in Random Pyramid Defense without actually playing the game. It was indeed the most popular map in Korea Server at the time. To mitigate the save data manipulation, SCA was created – abandoning offline storage method completely.

How many maps support SCA Launcher?

-Currently, there is a map list that shows all maps that have SCA support.

-If you were to integrate SCA in your map, it gets automatically added to the list.

-To integrate SCA into your map, you have to use Eud Editor 3 and I’ve written a tutorial here specifically for that.

Where can I download SCA?

PW for zip file: “scarchive”

My Anti-Virus is detecting it as a virus.

-I spoke with the developer directly, and it appears that some anti-virus will pick it up as Trojan. Due to the networking nature of this program, you would have to disable anti-virus to use it. There are no Trojans in SCA as far as I am aware of.

Who created SCA and is it safe to use?

-The developer behind SCA Launcher is Lee Jung Hun (GitHub), and happens to be the same guy who created Eud Editor 1, 2, 3, and SCDB. He is a well known developer in the Korean Starcraft UMS scene, responsible for creating the latest map making tools we use today.

-Personally, I think it’s safe to use but then I wouldn’t use it on a business PC. If you are paranoid and want the absolute peace of mind, consider running SCA and StarCraft in virtual machine.

-How do I use SCA?

-First download SCA.

-Run StarCraft and get into US West. You will be prompted with the following:

This is asking you to create a password for SCA.
DO NOT put your Battle.net password in there.

Once you have set a password, you will be promoted to enter your e-mail address:

Enter your e-mail address, click the red button and it will send a verification code to your e-mail. Copy and paste the verification code, and you should be good to go.

Keep SCA running while you play StarCraft. It just works by itself.

-Lifebot

유즈맵에 SCA 세이브/로드 적용법

이 튜토리얼은 SCA 세이브/로드 기능을 맵에 적용하는 강좌입니다

미네랄을 저장하는 방법이며 이걸 응용해서 유닛 세이브/로드도 만들 수 있습니다

사용하지 않는 유닛 이름을 변경하여 총 6 개의 DC를 만드세요.

RUNSAVE

GAMESAVE

SAVETIME

DISCCHECK

LOADCHECK

MONEY

유닛을 위 이름으로 똑같이 변경해주세요

Terran의 * 섹션에있는 유닛을 사용하면 좋아요

유닛 이름 변경뒤 TrigEdt ++를 열고 다음 트리거를 삽입하십시오.

TrigEdit ++가 표시되어 있지 않다면 설치하지 않은 것입니다.

Trigger { -- No comment (31D979D9)
    players = {P8},
    conditions = {
        Deaths(CurrentPlayer, AtMost, 9000, "SAVETIME");
    },
    actions = {
        SetDeaths(CurrentPlayer, Add, 1, "SAVETIME");
        PreserveTrigger();
    },
}
 
Trigger { -- No comment (4D7C7DC7)
    players = {P8},
    conditions = {
        Deaths(CurrentPlayer, AtLeast, 9000, "SAVETIME");
    },
    actions = {
        SetDeaths(CurrentPlayer, SetTo, 0, "SAVETIME");
        SetDeaths(P1, Add, 1, "SAVEGAME");
        SetDeaths(P2, Add, 1, "SAVEGAME");
        SetDeaths(P3, Add, 1, "SAVEGAME");
        SetDeaths(P4, Add, 1, "SAVEGAME");
        SetDeaths(P5, Add, 1, "SAVEGAME");
        PreserveTrigger();
    },
}
 
Trigger { -- No comment (5579B3D8)
    players = {Force1},
    conditions = {
        Deaths(CurrentPlayer, AtLeast, 1, "SAVEGAME");
        Accumulate(CurrentPlayer, Exactly, 0, Ore);
    },
    actions = {
        SetDeaths(CurrentPlayer, SetTo, 0, "SAVEGAME");
        SetDeaths(CurrentPlayer, SetTo, 1, "RUNSAVE");
        PreserveTrigger();
    },
}
 
Trigger { -- No comment (52AB5C5E)
    players = {Force1},
    conditions = {
        Deaths(CurrentPlayer, AtLeast, 1, "SAVEGAME");
        Accumulate(CurrentPlayer, AtLeast, 1, Ore);
        Accumulate(CurrentPlayer, AtMost, 9, Ore);
    },
    actions = {
        SetResources(CurrentPlayer, Subtract, 1, Ore);
        SetDeaths(CurrentPlayer, Add, 1, "MONEY");
        PreserveTrigger();
    },
}
 
Trigger { -- No comment (D61B8F0C)
    players = {Force1},
    conditions = {
        Deaths(CurrentPlayer, AtLeast, 1, "SAVEGAME");
        Accumulate(CurrentPlayer, AtLeast, 10, Ore);
        Accumulate(CurrentPlayer, AtMost, 99, Ore);
    },
    actions = {
        SetResources(CurrentPlayer, Subtract, 10, Ore);
        SetDeaths(CurrentPlayer, Add, 10, "MONEY");
        PreserveTrigger();
    },
}
 
Trigger { -- No comment (ADDF9844)
    players = {Force1},
    conditions = {
        Deaths(CurrentPlayer, AtLeast, 1, "SAVEGAME");
        Accumulate(CurrentPlayer, AtLeast, 100, Ore);
        Accumulate(CurrentPlayer, AtMost, 999, Ore);
    },
    actions = {
        SetResources(CurrentPlayer, Subtract, 100, Ore);
        SetDeaths(CurrentPlayer, Add, 100, "MONEY");
        PreserveTrigger();
    },
}
 
Trigger { -- No comment (B65FAEB1)
    players = {Force1},
    conditions = {
        Deaths(CurrentPlayer, AtLeast, 1, "SAVEGAME");
        Accumulate(CurrentPlayer, AtLeast, 1000, Ore);
        Accumulate(CurrentPlayer, AtMost, 9999, Ore);
    },
    actions = {
        SetResources(CurrentPlayer, Subtract, 1000, Ore);
        SetDeaths(CurrentPlayer, Add, 1000, "MONEY");
        PreserveTrigger();
    },
}
 
Trigger { -- No comment (23B6E20D)
    players = {Force1},
    conditions = {
        Deaths(CurrentPlayer, AtLeast, 1, "SAVEGAME");
        Accumulate(CurrentPlayer, AtLeast, 10000, Ore);
        Accumulate(CurrentPlayer, AtMost, 99999, Ore);
    },
    actions = {
        SetResources(CurrentPlayer, Subtract, 10000, Ore);
        SetDeaths(CurrentPlayer, Add, 10000, "MONEY");
        PreserveTrigger();
    },
}
 
Trigger { -- No comment (545BB1CE)
    players = {Force1},
    conditions = {
        Deaths(CurrentPlayer, AtLeast, 1, "SAVEGAME");
        Accumulate(CurrentPlayer, AtLeast, 100000, Ore);
        Accumulate(CurrentPlayer, AtMost, 999999, Ore);
    },
    actions = {
        SetResources(CurrentPlayer, Subtract, 100000, Ore);
        SetDeaths(CurrentPlayer, Add, 100000, "MONEY");
        PreserveTrigger();
    },
}
 
Trigger { -- No comment (2E46A336)
    players = {Force1},
    conditions = {
        Deaths(CurrentPlayer, AtLeast, 1, "SAVEGAME");
        Accumulate(CurrentPlayer, AtLeast, 1000000, Ore);
    },
    actions = {
        SetResources(CurrentPlayer, Subtract, 1000000, Ore);
        SetDeaths(CurrentPlayer, Add, 1000000, "MONEY");
        PreserveTrigger();
    },
}
 
Trigger { -- No comment (63A6792E)
    players = {Force1},
    conditions = {
        Deaths(CurrentPlayer, AtLeast, 1000000, "MONEY");
        Deaths(CurrentPlayer, Exactly, 0, "SAVEGAME");
    },
    actions = {
        SetDeaths(CurrentPlayer, Subtract, 1000000, "MONEY");
        SetResources(CurrentPlayer, Add, 1000000, Ore);
        PreserveTrigger();
    },
}
 
Trigger { -- No comment (7BB6A7A1)
    players = {Force1},
    conditions = {
        Deaths(CurrentPlayer, AtLeast, 100000, "MONEY");
        Deaths(CurrentPlayer, AtMost, 999999, "MONEY");
        Deaths(CurrentPlayer, Exactly, 0, "SAVEGAME");
    },
    actions = {
        SetDeaths(CurrentPlayer, Subtract, 100000, "MONEY");
        SetResources(CurrentPlayer, Add, 100000, Ore);
        PreserveTrigger();
    },
}
 
Trigger { -- No comment (F47BE628)
    players = {Force1},
    conditions = {
        Deaths(CurrentPlayer, AtLeast, 10000, "MONEY");
        Deaths(CurrentPlayer, AtMost, 99999, "MONEY");
        Deaths(CurrentPlayer, Exactly, 0, "SAVEGAME");
    },
    actions = {
        SetDeaths(CurrentPlayer, Subtract, 10000, "MONEY");
        SetResources(CurrentPlayer, Add, 10000, Ore);
        PreserveTrigger();
    },
}
 
Trigger { -- No comment (E6109ACC)
    players = {Force1},
    conditions = {
        Deaths(CurrentPlayer, AtLeast, 1000, "MONEY");
        Deaths(CurrentPlayer, AtMost, 9999, "MONEY");
        Deaths(CurrentPlayer, Exactly, 0, "SAVEGAME");
    },
    actions = {
        SetDeaths(CurrentPlayer, Subtract, 1000, "MONEY");
        SetResources(CurrentPlayer, Add, 1000, Ore);
        PreserveTrigger();
    },
}
 
Trigger { -- No comment (09045933)
    players = {Force1},
    conditions = {
        Deaths(CurrentPlayer, AtLeast, 100, "MONEY");
        Deaths(CurrentPlayer, AtMost, 999, "MONEY");
        Deaths(CurrentPlayer, Exactly, 0, "SAVEGAME");
    },
    actions = {
        SetDeaths(CurrentPlayer, Subtract, 100, "MONEY");
        SetResources(CurrentPlayer, Add, 100, Ore);
        PreserveTrigger();
    },
}
 
Trigger { -- No comment (7A550563)
    players = {Force1},
    conditions = {
        Deaths(CurrentPlayer, AtLeast, 10, "MONEY");
        Deaths(CurrentPlayer, AtMost, 99, "MONEY");
        Deaths(CurrentPlayer, Exactly, 0, "SAVEGAME");
    },
    actions = {
        SetDeaths(CurrentPlayer, Subtract, 10, "MONEY");
        SetResources(CurrentPlayer, Add, 10, Ore);
        PreserveTrigger();
    },
}
 
Trigger { -- No comment (2360655D)
    players = {Force1},
    conditions = {
        Deaths(CurrentPlayer, AtLeast, 1, "MONEY");
        Deaths(CurrentPlayer, AtMost, 9, "MONEY");
        Deaths(CurrentPlayer, Exactly, 0, "SAVEGAME");
    },
    actions = {
        SetDeaths(CurrentPlayer, Subtract, 1, "MONEY");
        SetResources(CurrentPlayer, Add, 1, Ore);
        PreserveTrigger();
    },
}

위 트리거가 추가 되었다면 맵을 저장하세요.

이제 SCM Draft는 종료해도됩니다

EUD 에디터 3을 열고 플러그인 탭으로 가세요

여기서 eudTurbo를 활성화 해주시고

Trigger Editor 쪽으로 가봅시다

새 epScript 파일을 만들고 영어로 이름을 바꿉니다. 전 “qorpg2” 로 변경 했습니다

변경후 오른쪽의 텍스트 필드에 아래 코드를 붙여 넣습니다.

import TriggerEditor.SCArchive as sca;
 
function luasca(){}
 
 
function onPluginStart(){
}
 
function beforeTriggerExec(){
 
    EUDPlayerLoop()();
    sca.Exec();
    
     
    if(Deaths(CurrentPlayer, Exactly, 1, "RUNSAVE")){ // Data Save
            SetDeaths(CurrentPlayer, SetTo, 0, "RUNSAVE");
            sca.SaveData(0);
    }
 
     
    if(Deaths(P8, AtLeast, 8000, "SAVETIME")){ // Cheat Check
            switch(sca.ConnectStatus()){
        case 1:
            SetDeaths(CurrentPlayer, SetTo, 11, "DISCCHECK");
            break;
   
    }
    }
 
        if(Deaths(CurrentPlayer, AtLeast, 11, "DISCCHECK")){ // Cheat End
            switch(sca.GetLastMessage()){
        case 1:
            break;
        case 2:
            Defeat();
            break;
        case 3:
            break;
        case 4:
            break;
        case 5:
            break;
        case 6:
            break;
        case 7:
            break;
        case 8:
            break;
        case 9:
            break;
             
             
        default:
            sca.ResetLastMessage();
    }
    }
 
 
     
    if(Deaths(CurrentPlayer, Exactly, 0, "LOADCHECK") && Deaths(P8, AtLeast, 3000, "SAVETIME") && CountdownTimer(Exactly, 0)){ // Data Save
            SetDeaths(CurrentPlayer, SetTo, 1, "LOADCHECK");
            SetCountdownTimer(SetTo, 1);
            sca.LoadData(0);
    }
 
    EUDEndPlayerLoop();
}
 
 
function afterTriggerExec(){
 
}

위 트리거는 게임 내에서 6 분마다 미네랄을 DC 값으로 저장합니다.

또한 게임 시작시 DC 값을 로드하고 미네랄로 변환합니다.

DISCCHECK는 게임 중에 플레이어의 SCA 런처가 연결 해제되었는지 확인하고 감지되면 패배하는 트리거 입니다

거의 완료되었습니다. 이제 설정 아이콘을 클릭하고 SCArchive 탭으로 가보세요

배틀 코드, SCA런처 비번, 맵 이름, 이메일 주소 등 정보를 입력 하세요.

SCA런처 비번이 없는 경우 먼저 SCA런처를 실행해서 계정을 만들어야합니다.

버퍼 크기는 저장되는 DC 당 50 개를 설정하는 것이 좋습니다.

위 예제 맵은 하나의 DC 값만 저장하므로 기본 버퍼 크기 인 300으로 두겠습니다.

저걸 다 하셨으면 이제 DC를 추가해야합니다.

+ 아이콘을 클릭하고 전에 변경한 유닛 MONEY를 추가하세요

매우 중요한 단계입니다. 첫 번째 탭에서 epScript 파일을 설정해야합니다.

제 epScript 파일은 “qorpg2″로 이름이 변경되었으므로 그걸 선택하겠습니다.

컴파일이 성공되면

https://scarchive.kr/maker/main.php 페이지로 이동하세요.

SCA 제작자 관리자 기능입니다.

SCA 사이트에 맵이 표시되도록 설정했습니다.

마지막 단계는 실시간 순위표를 시하는 것입니다.

이 정보가 도움이 되셨기를 바랍니다.

보너스 팁 으로 SCMDraft 말고 TE3 으로 변환하는 방법입니다 (중급):

-Lifebot

SCA Save/Load Integration Tutorial

This a tutorial for integrating SCA functionality into your map.

Use this information to add SCA to an existing map you’ve already made.

To get started, create these 6 DC’s by renaming units that you don’t use.

RUNSAVE
GAMESAVE
SAVETIME
DISCCHECK
LOADCHECK
MONEY

Personally, I like to use the turret units under the * section of Terran for this purpose.

Once you have renamed 6 units to exactly as above, open TrigEdt++ above and insert the following triggers:

If you don’t have TrigEdit++ showing, it means you do not have it installed. You can download TrigEdit++ here: ttps://scrmaps.com/tools/

To install TrigEdit++, simply put the file inside the plugins folder of SCM Draft.

Trigger { -- No comment (31D979D9)
	players = {P8},
	conditions = {
		Deaths(CurrentPlayer, AtMost, 9000, "SAVETIME");
	},
	actions = {
		SetDeaths(CurrentPlayer, Add, 1, "SAVETIME");
		PreserveTrigger();
	},
}

Trigger { -- No comment (4D7C7DC7)
	players = {P8},
	conditions = {
		Deaths(CurrentPlayer, AtLeast, 9000, "SAVETIME");
	},
	actions = {
		SetDeaths(CurrentPlayer, SetTo, 0, "SAVETIME");
		SetDeaths(P1, Add, 1, "SAVEGAME");
		SetDeaths(P2, Add, 1, "SAVEGAME");
		SetDeaths(P3, Add, 1, "SAVEGAME");
		SetDeaths(P4, Add, 1, "SAVEGAME");
		SetDeaths(P5, Add, 1, "SAVEGAME");
		PreserveTrigger();
	},
}

Trigger { -- No comment (5579B3D8)
	players = {Force1},
	conditions = {
		Deaths(CurrentPlayer, AtLeast, 1, "SAVEGAME");
		Accumulate(CurrentPlayer, Exactly, 0, Ore);
	},
	actions = {
		SetDeaths(CurrentPlayer, SetTo, 0, "SAVEGAME");
		SetDeaths(CurrentPlayer, SetTo, 1, "RUNSAVE");
		PreserveTrigger();
	},
}

Trigger { -- No comment (52AB5C5E)
	players = {Force1},
	conditions = {
		Deaths(CurrentPlayer, AtLeast, 1, "SAVEGAME");
		Accumulate(CurrentPlayer, AtLeast, 1, Ore);
		Accumulate(CurrentPlayer, AtMost, 9, Ore);
	},
	actions = {
		SetResources(CurrentPlayer, Subtract, 1, Ore);
		SetDeaths(CurrentPlayer, Add, 1, "MONEY");
		PreserveTrigger();
	},
}

Trigger { -- No comment (D61B8F0C)
	players = {Force1},
	conditions = {
		Deaths(CurrentPlayer, AtLeast, 1, "SAVEGAME");
		Accumulate(CurrentPlayer, AtLeast, 10, Ore);
		Accumulate(CurrentPlayer, AtMost, 99, Ore);
	},
	actions = {
		SetResources(CurrentPlayer, Subtract, 10, Ore);
		SetDeaths(CurrentPlayer, Add, 10, "MONEY");
		PreserveTrigger();
	},
}

Trigger { -- No comment (ADDF9844)
	players = {Force1},
	conditions = {
		Deaths(CurrentPlayer, AtLeast, 1, "SAVEGAME");
		Accumulate(CurrentPlayer, AtLeast, 100, Ore);
		Accumulate(CurrentPlayer, AtMost, 999, Ore);
	},
	actions = {
		SetResources(CurrentPlayer, Subtract, 100, Ore);
		SetDeaths(CurrentPlayer, Add, 100, "MONEY");
		PreserveTrigger();
	},
}

Trigger { -- No comment (B65FAEB1)
	players = {Force1},
	conditions = {
		Deaths(CurrentPlayer, AtLeast, 1, "SAVEGAME");
		Accumulate(CurrentPlayer, AtLeast, 1000, Ore);
		Accumulate(CurrentPlayer, AtMost, 9999, Ore);
	},
	actions = {
		SetResources(CurrentPlayer, Subtract, 1000, Ore);
		SetDeaths(CurrentPlayer, Add, 1000, "MONEY");
		PreserveTrigger();
	},
}

Trigger { -- No comment (23B6E20D)
	players = {Force1},
	conditions = {
		Deaths(CurrentPlayer, AtLeast, 1, "SAVEGAME");
		Accumulate(CurrentPlayer, AtLeast, 10000, Ore);
		Accumulate(CurrentPlayer, AtMost, 99999, Ore);
	},
	actions = {
		SetResources(CurrentPlayer, Subtract, 10000, Ore);
		SetDeaths(CurrentPlayer, Add, 10000, "MONEY");
		PreserveTrigger();
	},
}

Trigger { -- No comment (545BB1CE)
	players = {Force1},
	conditions = {
		Deaths(CurrentPlayer, AtLeast, 1, "SAVEGAME");
		Accumulate(CurrentPlayer, AtLeast, 100000, Ore);
		Accumulate(CurrentPlayer, AtMost, 999999, Ore);
	},
	actions = {
		SetResources(CurrentPlayer, Subtract, 100000, Ore);
		SetDeaths(CurrentPlayer, Add, 100000, "MONEY");
		PreserveTrigger();
	},
}

Trigger { -- No comment (2E46A336)
	players = {Force1},
	conditions = {
		Deaths(CurrentPlayer, AtLeast, 1, "SAVEGAME");
		Accumulate(CurrentPlayer, AtLeast, 1000000, Ore);
	},
	actions = {
		SetResources(CurrentPlayer, Subtract, 1000000, Ore);
		SetDeaths(CurrentPlayer, Add, 1000000, "MONEY");
		PreserveTrigger();
	},
}

Trigger { -- No comment (63A6792E)
	players = {Force1},
	conditions = {
		Deaths(CurrentPlayer, AtLeast, 1000000, "MONEY");
		Deaths(CurrentPlayer, Exactly, 0, "SAVEGAME");
	},
	actions = {
		SetDeaths(CurrentPlayer, Subtract, 1000000, "MONEY");
		SetResources(CurrentPlayer, Add, 1000000, Ore);
		PreserveTrigger();
	},
}

Trigger { -- No comment (7BB6A7A1)
	players = {Force1},
	conditions = {
		Deaths(CurrentPlayer, AtLeast, 100000, "MONEY");
		Deaths(CurrentPlayer, AtMost, 999999, "MONEY");
		Deaths(CurrentPlayer, Exactly, 0, "SAVEGAME");
	},
	actions = {
		SetDeaths(CurrentPlayer, Subtract, 100000, "MONEY");
		SetResources(CurrentPlayer, Add, 100000, Ore);
		PreserveTrigger();
	},
}

Trigger { -- No comment (F47BE628)
	players = {Force1},
	conditions = {
		Deaths(CurrentPlayer, AtLeast, 10000, "MONEY");
		Deaths(CurrentPlayer, AtMost, 99999, "MONEY");
		Deaths(CurrentPlayer, Exactly, 0, "SAVEGAME");
	},
	actions = {
		SetDeaths(CurrentPlayer, Subtract, 10000, "MONEY");
		SetResources(CurrentPlayer, Add, 10000, Ore);
		PreserveTrigger();
	},
}

Trigger { -- No comment (E6109ACC)
	players = {Force1},
	conditions = {
		Deaths(CurrentPlayer, AtLeast, 1000, "MONEY");
		Deaths(CurrentPlayer, AtMost, 9999, "MONEY");
		Deaths(CurrentPlayer, Exactly, 0, "SAVEGAME");
	},
	actions = {
		SetDeaths(CurrentPlayer, Subtract, 1000, "MONEY");
		SetResources(CurrentPlayer, Add, 1000, Ore);
		PreserveTrigger();
	},
}

Trigger { -- No comment (09045933)
	players = {Force1},
	conditions = {
		Deaths(CurrentPlayer, AtLeast, 100, "MONEY");
		Deaths(CurrentPlayer, AtMost, 999, "MONEY");
		Deaths(CurrentPlayer, Exactly, 0, "SAVEGAME");
	},
	actions = {
		SetDeaths(CurrentPlayer, Subtract, 100, "MONEY");
		SetResources(CurrentPlayer, Add, 100, Ore);
		PreserveTrigger();
	},
}

Trigger { -- No comment (7A550563)
	players = {Force1},
	conditions = {
		Deaths(CurrentPlayer, AtLeast, 10, "MONEY");
		Deaths(CurrentPlayer, AtMost, 99, "MONEY");
		Deaths(CurrentPlayer, Exactly, 0, "SAVEGAME");
	},
	actions = {
		SetDeaths(CurrentPlayer, Subtract, 10, "MONEY");
		SetResources(CurrentPlayer, Add, 10, Ore);
		PreserveTrigger();
	},
}

Trigger { -- No comment (2360655D)
	players = {Force1},
	conditions = {
		Deaths(CurrentPlayer, AtLeast, 1, "MONEY");
		Deaths(CurrentPlayer, AtMost, 9, "MONEY");
		Deaths(CurrentPlayer, Exactly, 0, "SAVEGAME");
	},
	actions = {
		SetDeaths(CurrentPlayer, Subtract, 1, "MONEY");
		SetResources(CurrentPlayer, Add, 1, Ore);
		PreserveTrigger();
	},
}

Save your map. You are done with SCM Draft now.

Open EUD Editor 3 and go to the plugins tab.

Add eudTurbo as shown above.

Now open the Trigger Editor:

Create a new epScript file, and rename it into something in English. I renamed mine to qorpg2.

In the text box to the right, coy and paste the below code:

import TriggerEditor.SCArchive as sca;

function luasca(){}


function onPluginStart(){
}

function beforeTriggerExec(){

    EUDPlayerLoop()();
    sca.Exec();
   
    
    if(Deaths(CurrentPlayer, Exactly, 1, "RUNSAVE")){ // Data Save
            SetDeaths(CurrentPlayer, SetTo, 0, "RUNSAVE");
            sca.SaveData(0);
    }

    
    if(Deaths(P8, AtLeast, 8000, "SAVETIME")){ // Cheat Check
            switch(sca.ConnectStatus()){
        case 1:
            SetDeaths(CurrentPlayer, SetTo, 11, "DISCCHECK");
            break;
  
    }
    }

        if(Deaths(CurrentPlayer, AtLeast, 11, "DISCCHECK")){ // Cheat End
            switch(sca.GetLastMessage()){
        case 1:
            break;
        case 2:
            Defeat();
            break;
        case 3:
            break;
        case 4:
            break;
        case 5:
            break;
        case 6:
            break;
        case 7:
            break;
        case 8:
            break;
        case 9:
            break;
            
            
        default:
            sca.ResetLastMessage();
    }
    }


    
    if(Deaths(CurrentPlayer, Exactly, 0, "LOADCHECK") && Deaths(P8, AtLeast, 3000, "SAVETIME") && CountdownTimer(Exactly, 0)){ // Data Save
            SetDeaths(CurrentPlayer, SetTo, 1, "LOADCHECK");
            SetCountdownTimer(SetTo, 1);
            sca.LoadData(0);
    }

    EUDEndPlayerLoop();
}


function afterTriggerExec(){

}


This code basically converts your mineral and stores it as a death value every 6 minutes in-game.

It also loads the death value at the start of the game, and converts into mineral.

You would need to have SCA running before the game starts, or you will miss the load instance.

You can tweak this code to have your map load units instead of minerals, or do both.

The DISCCHECK checks if the player’s SCA launcher was disconnected during game and triggers defeat if detected.

I recommend leaving that on there to prevent cheating if you don’t understand what that means.

You’re almost there. Now click the settings icon, and go to the SCArchive tab.

Fill out the information, which would be your Battle Code, SCA Launcher PW, Map Name, e-mail address, and description.

If you don’t have a SCA Launcher PW, you have to first download SCA Launcher and create an account.

There is also a link for thumbnail image, which has to be hosted externally on something like imgur.

As for the 300 buffer size, I recommend setting 50 per DC being saved.

Since this map saves one death value only, I’ll just leave it at 300 which is the default buffer size.

ATIA World RPG uses 8000 buffer size, and Warbible RPG uses 2000 buffer just to give you an idea.

Once you’ve completed those fields above, you would have to add the actual DC you want SCA to be saving/loading.

Click the plus icon, and find the unit MONEY, which was one of the unit you renamed earlier.

Now add it as “money” again. This is the new name that will be shown on SCarchive.kr Leaderboard for your map.

Last but very important step. You have to set the epScript file under the first tab.

Again, my epScript file was renamed earlier to “qorpg2” so I am going to select that.

Now, hit compile. If successful, head over to the link: https://scarchive.kr/maker/main.php

This is your web interface for all your SCA compiled maps.

What you want to do is click the third 관리 button which will open the settings page.

Click the highlighted button below which will now SHOW your map in SCA website under https://scarchive.kr/maplist.php

You have enabled your map to be shown on SCA website.

Last step would be displaying the real-time leaderboard.

Scroll down a little more, and toggle the first button highlighted which is enabling leaderboard.

Now, under the dropdown menu set it as money, which is the DC value we are saving/loading for this map.

Click 적용, which means [Apply].

You’re finished. Now your map is SCA enabled and will be ready to be used by other people.

Make sure to change the description to include the download links to your map, so people who come across your map through SCA map listing page can try your map without having clues as to where to look for it. I recommend putting a link to a Google Drive Folder, where the latest version of your map is contained.

You should probably bookmark the following page, which shows how many players are currently actively playing which map:

http://scarchive.kr/getCCU.php

If you have any questions or run into errors, comment on this page I will try to get back to you soon. I hope you found this information to be useful.

-Lifebot