[스몬개발] 카드합성하기

in #sct9 months ago

안녕하세요 @realmankwon입니다.

간만에 스몬 관련 개발을 하였습니다.
거창한 것은 아니고 카드 보상을 받은 다음에 같은 종류의 카드가 여러장 있을때 이것을 합성할 때가 있습니다.
저같은 경우는 카드도 얼마 없고 있는 카드도 레벨이 낮아서 일단은 무조건 합성을 하고 있는데 이것도 귀찮을 때가 많습니다.
그래서 언젠가 이걸 자동으로 합성하도록 해야겠다 싶었는데 오늘이 그날입니다.

어제 시즌이 끝나면서 보상 받은 카드들이 있다보니 이거 또 합성할려면 시간 좀 걸리겠다 싶어서 막간을 이용해서 바로 합성하는 api를 작성했습니다.
일단 수동으로 합성을 시키고 steemd.com 에 가서 블럭 정보를 확인했습니다.

id = 'sm_combine_cards' 였고 json에 cards 에 합성할 카드의 uid 를 나열하면 되었습니다.
기존에 작성해 놓은 api를 기반으로 account, id 를 넘기면 해당 카드를 합성하는 api 를 먼저 만들었습니다.

async function cmdCombineCards(account, id){
return new Promise(async (resolve, reject) => {
    const key = await getKey(account, 'posting');
    let mycards = await getMyCards(account);

    mycards = mycards.filter(data => data.card_detail_id == id);
   
    let cards = [];

    for(const mycard of mycards){
        cards.push(mycard.uid);
    }

    steem.broadcast.customJson(
        key, 
        [], 
        [account], 
        "sm_combine_cards", 
        JSON.stringify({
            cards: cards,
            app: appName
        }),
        (err, result) => {
            if (err) {
                reject(err);
                return;
            }
            console.log(`Combine card (${id})  : ${cards}`);
            resolve(result);
        });
});

}

이 함수는 계정에 카드 id 까지 알아야 호출할 수 있습니다.
저 같은 경우는 개별 카드를 합성하지 않고 2장 이상이면 모두 합성할 것이라서 2장 이상인 것을 조회하여 모조리 합성하는 api도 작성하였습니다.

async function cmdAllCombineCards(account){
return new Promise(async (resolve, reject) => {
    let mycards = await getMyCards(account);

    let twoMoreCards = mycards.reduce((object, currentValue) =>{
        if(!object[currentValue.card_detail_id]){
            object[currentValue.card_detail_id] = 0;
        }
        object[currentValue.card_detail_id]++;
        return object;
    }, {});

    for(const id in twoMoreCards){
        if(twoMoreCards[id] > 1) 
            await cmdCombineCards(account, id);
    }
});

}

테스트로 한번 호출을 해보니 아주 잘 동작하였습니다.
본계와 부계 모두 합성을 완료하였고 이제 이걸 일퀘를 완료한 다음에 보상을 클레임한 후에 호출을 시키면 될 것 같습니다.
그런데 문제는 아직까지 클레임한 카드를 까는 api를 찾지 못했습니다.
카드를 까야지 그 카드를 합성할텐데 말입니다.
아무리 뒤져도 안 나오는데 아시는 분은 좀 알려주세요 ^^

Sort:  

Congratulations @realmankwon! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You received more than 6000 as payout for your posts. Your next target is to reach a total payout of 7000

You can view your badges on your Steem Board and compare to others on the Steem Ranking
If you no longer want to receive notifications, reply to this comment with the word STOP

To support your work, I also upvoted your post!

Vote for @Steemitboard as a witness to get one more award and increased upvotes!

제가 쓴 최근 글 참고하세요. 그리고 만랩까지만 합치는 코드도 있죠? 그렇지 않으면 불필요하게 많이 합쳐질 듯 합니다.

Posted using Partiko Android

아~ 안그래도 그 부분이 좀 걸렸는데 추가를 해야겠네요 ^^
트아님 최근 글 바로 보러 가야겠네요 ㅋ
감사합니다!!