playXP

서브 메뉴

Page. 1 / 246 [내 메뉴에 추가]
글쓰기
작성자 크르륵캬캬
작성일 2014-08-09 07:13:40 KST 조회 1,314
첨부
제목
유닛 부활이 잘 되지 않습니다..
파일포켓 이미지
안녕하세요, 프로토스 역장 연습맵이 없어서 직접 만드는
크르륵캬캬 입니다.

고수님들, 다들 스스로가 좋아하는 맵 만드느라 바쁨인줄 아오나, 입문자가 어디 배울 곳도 없어 말씀 여쭙고자합니다. 실례였다면 입문자이니, 지나가시옵고, 모쪼록 아신다면 답변 부탁드리겠습니다.

참고로, 이 게시글은 '유닛'과 '건물'을 따로 분류해 보았습니다. 읽으시면서 '유닛' 하시면, 광전사, 추적자 파수기 등등의 유닛이며 건물 이라 하면 '연결체, 수정탑 등등'입니다. 맵 에디터에선 유닛에 건물과 제가 칭했던 유닛이 동시에 포함되지만 좀더 간편하게 이야기 하고자 '유닛'과 '건물'을 따로 분류해 게시글을 적었습니다.

아래로 본문이 있습니다.
------------------------------------------------------------------------------------------------------
이번에는 건물 부활이 되지 않아서 문제입니다.

제가 만들고자 하는 바는, 특정 난이도가 되면 특정한 유닛이 생성되고, 특정한 유닛과 교전을 하고 나서 평가 시 '연결체의 생존 여부가 게임에서 영향을 미치는 상태' 입니다.

상대방 적군이 제 앞마당에 처들어 왔는데 연결체가 파괴되었다면, 상대 유닛을 전부 죽였다고 할지라도 이득이라 볼 수 없다고 생각했습니다. 그런 면에서 착안하여 모든 유닛(파수기, 추적자, 광전사 등)이 살아 상대 유닛을 전부 죽였다 할지라도 연결체가 파괴시당할 시에도(아군 유닛이 전부 죽는 것과 마찬가지로) 패배하는 것으로 만들어 보았습니다. 이 문단 안에 들어있는 트리거의 이름은 '게임 실패'트리거(제가 명명하였습니다. 후에, 게임 실패트리거로 부르겠습니다)입니다.

문제는 게임 실패 트리거의 충돌인지, 뭔지.. 어쨌든 원하는 대로 실행되지 않는 문제가 있습니다.

부활 트리거를 시험해본 결과, 건물이던 유닛이던 완전히 동작함은 알 수 있었습니다. 그에 해당했던 트리거는 아래와 같습니다.

시험생산
    이벤트
        유닛 - 아무 유닛 소멸
    지역 변수
    조건
    행동
        유닛 - 수정탑 [80.00, 68.00] 체력(을)를 1.0(으)로 설정
        유닛 - 수정탑 [80.00, 68.00] 보호막(을)를 1.0(으)로 설정
        유닛 - 융화소 [79.50, 62.50] 체력(을)를 1.0(으)로 설정
        유닛 - 융화소 [79.50, 62.50] 보호막(을)를 1.0(으)로 설정
        유닛 - (트리거 발동 유닛) 부활

수정탑과 융화소는, 맵 에디터 상에서 미리 건설해 두었습니다. 이는 아래, '캡처.JPG'를 참고하시면 감사하겠습니다.
수정탑과 융화소의 체력과 보호막을 줄여 둔 것은, 빨리 파괴되어서, 시험을 금방 확인하기 위함이었습니다.

결과, 건물 또는 유닛 부활시 체력은 무조건 1로, 또 모든 내역이 그대로 유지되었습니다. 예를 들어 처치 20짜리 파수기가 죽을 경우 부활 시 처치 20짜리 체력 1의 파수기가 생겨났습니다. 또, 융화소가 파괴되면 그 아래로 '베스핀 간혈천'이 생성되지만 그럼에도 불구하고 융화소가 부활됨을 보아, 융화소 또한 부활 트리거에 영향을 잘 받았었습니다.

저는 이러하여, 부활 트리거는 제대로 작동할 것이라고 생각하였습니다.

그리고 만들어낸 트리거는 아래와 같습니다.

2.5 - 장소 3 게임 실패
    이벤트
        유닛 - 아무 유닛 소멸
    지역 변수
    조건
        장소 == 3
        (연결체 [93.50, 24.50] 살아 있음) == 거짓
        알고리즘 단계 == 2.6
    행동
        유닛 그룹 - 아군 유닛의 각 유닛을 선정하여 (행동) 실행
            행동
                유닛 - 게임에서 (선정된 유닛) 제거
        유닛 그룹 - 적 유닛의 각 유닛을 선정하여 (행동) 실행
            행동
                유닛 - 게임에서 (선정된 유닛) 제거
        유닛 - 융화소 [89.50, 17.50] 부활
        유닛 - 융화소 [100.50, 27.50] 부활
        유닛 - 연결체 [93.50, 24.50] 부활
        유닛 - 연결체 [93.50, 24.50] 보호막 (백분율)(을)를 100.0(으)로 설정
        유닛 - 연결체 [93.50, 24.50] 체력 (백분율)(을)를 100.0(으)로 설정
        유닛 - 융화소 [89.50, 17.50] 보호막 (백분율)(을)를 100.0(으)로 설정
        유닛 - 융화소 [89.50, 17.50] 체력 (백분율)(을)를 100.0(으)로 설정
        유닛 - 융화소 [100.50, 27.50] 보호막 (백분율)(을)를 100.0(으)로 설정
        유닛 - 융화소 [100.50, 27.50] 체력 (백분율)(을)를 100.0(으)로 설정
        변수 - 알고리즘 단계 = 3.0 설정
        변수 - 게임 실패 = 1 설정

이는 맨 첫번째 문단에 설명드린 '게임 실패' 트리거입니다. 이 트리거가 실행은 되었으나, 융화소와 연결체가 파괴될 경우 가장 맨 마지막에 파괴되는 연결체만 부활할 뿐, 융화소는 부활되지 않았습니다.

거기서 착안하여, 유닛그룹을 만들고 그 안에서 부활되도록 만들어 보았습니다.

시험생산
    이벤트
        유닛 - 아무 유닛 소멸
    지역 변수
        사망한 유닛 = (비어 있는 유닛 그룹) <유닛 그룹>
    조건
    행동
        유닛 그룹 - 사망한 유닛에 (트리거 발동 유닛) 추가
        유닛 - 수정탑 [80.00, 68.00] 체력(을)를 1.0(으)로 설정
        유닛 - 수정탑 [80.00, 68.00] 보호막(을)를 1.0(으)로 설정
        유닛 - 융화소 [79.50, 62.50] 체력(을)를 1.0(으)로 설정
        유닛 - 융화소 [79.50, 62.50] 보호막(을)를 1.0(으)로 설정
        일반 - If (조건) then (행동) else (행동)
            If
                (융화소 [79.50, 62.50] 살아 있음) == 거짓
                (수정탑 [80.00, 68.00] 살아 있음) == 거짓
                (파수기 [79.39, 65.43] 살아 있음) == 거짓
            Then
                유닛 그룹 - 사망한 유닛의 각 유닛을 선정하여 (행동) 실행
                    행동
                        유닛 - (선정된 유닛) 부활
            Else

맨 처음 소개하였던, 시험생산을 수정하여 만들었습니다.

수정탑과 융화소는, 맵 에디터 상에서 미리 건설해 두었습니다. 이는 아래, '캡처.JPG'를 참고하시면 감사하겠습니다.
수정탑과 융화소의 체력과 보호막을 줄여 둔 것은, 빨리 파괴되어서, 시험을 금방 확인하기 위함이었습니다.

이는 유닛그룹안 모든 유닛이 부활되는 줄알았으나, 그렇지 아니하고 일부 유닛만 부활 되었습니다. 예를 들어 파수기를 죽이고 수정탑을 파괴 후 융화소를 파괴하면(파수기 첫번째, 수정탑 두번째, 융화소 세번째) 융화소만 부활되었습니다. 

어찌하여야, 한번에 사망한 유닛이나 건물을 부활시킬 수 있을까요? 아무리 고심하여도 문제가 해결되지 않아 고수님들의 말씀 여쭙습니다.

제가 Q&A에서 발견하지 못하였더라면, 게시글 위치를 알려주시면 감사하겠습니다.

지속적인 허위 신고시 신고자가 제재를 받을 수 있습니다.
신고 사유를 입력하십시오:

발도장 찍기
앗앗앗 (2014-08-09 08:03:39 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
변수설정을 하시면 훨씬 수월하게 해결 되실거에요. 보아하니 아직 변수 설정을 모르시는거 같은데 변수설정을 하게되면 유닛 한마리한마리를 변수에 저장하는것이 가능하기에 유닛들 관리하기가 훨씬 수월하실거에요. 가령 방금 죽은 유닛을 부활시키고자 할때도 말이죠. 변수로 불러오면 되니까요. 혼자 테스트 하시는맵 같은데 파일 보내주시면 제가 아는대로 도와드릴게요
크르륵캬캬 (2014-08-09 12:39:08 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
앗앗앗님, 안녕하세요? 답글 달아주셔서 감사합니다. 우선, 제가 지금까지 만들어 왔던 맵을 올려두었습니다.. 맨 처음 만드는거라, 잘 만들진 못했습니다. 한번 실행하여 보시고, 여러가지 문제점들이 아직도 남아있긴 합니다만 의견 있으시면 들려주심 감사하겠습니다.

맨 처음에는 간결하게 만들어 질 줄 알았는데, 느낌보다 시간이 오래걸리는 군요.. 맵 자체를 몰라서 그런가.... ㅎㅎㅎ

제가 아는것도 없고, 계속 배워가는 과정상에 같이 맵 하나 만드는 과정이라서, 자세잡고 배우기는 부족한점이 많습니다. 가끔 궁금한게 있으면 여기에 한두 개시글 올리는 정도입니다.

어쨌든 앗앗앗님, 제가 만든 맵 파일 받으셔서 실행하여 보시고, 궁금한점 있으시면 이곳에 댓글 남겨 주심 감사하겠습니다. 성심껏 배우겠습니다.

----

맵 여시면, 주요 내용은 '진행' 안에 전부 들어있습니다. 알고리즘순서로 만들어서 0~4까지 진행되는데 실수인 변수를 이용하여 단계별로 진행됩니다. 예를 들어, 알고리즘 단계가 0이면 초기화가 완성된 상태에서 게임을 진행하기 시작하고, 2단계에서 본격적으로 유닛생성과 주요 내용들이 눈 앞에 보여집니다. 3단계에서 평가(게임에서 승리인지 패배인지 확인)를 합니다. 4단계에서는 초기화를 진행합니다. 4단계는 승리 후 맵을 승리로 표현할지, 아니면 단계를 하나 높여 재시작할지 결정합니다. 4.5단계는 패배 후 게임을 완전히 초기화하여 재시작할지 또는 맵 자체를 종료할지 결정합니다.
아이콘 크더기 (2014-08-09 13:15:36 KST)
0↑ ↓0
센스 이미지
폰이라 자세한 답변은 달 수 없지만, "사망한 유닛" 변수는 지역 변수로써 해당 트리거, 함수 또는 행동이 종료되면 파괴됩니다. 계속 유지시키려면 전역 변수를 만들어야 합니다.

시험 생산 트리거를 보면 사망한 유닛을 지역 유닛 그룹 변수에 넣는군요.

한 번 보죠. 파수기가 죽어요. "사망한 유닛" 변수에 파수기가 들어가고, if문은 충족하지 못하므로 트리거가 종료되어 "사망한 유닛" 변수도 파괴되죠.
다음으로 수정탑이 파괴되요. "사망한 유닛" 변수가 만들어지고 그 안엔 수정탑밖에 없겠죠? if문은 여전히 충족하지 못하는군요. 끝.
마지막으로 융화소가 파괴되요. "사망한 유닛" 이 만들어지고 융화소가 들어가요. 어?! If문을 만족하네요. "사망한 유닛" 내 유닛들을 부활시켜요. 그런데 그 안엔 융화소밖에 없네요. 융화소만 부활되요.

한 번 전역 변수를 이용해서 짜 보세요.
크르륵캬캬 (2014-08-09 16:39:48 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
크더기님 안녕하세요. 답변 감사드립니다. 우선 놀랍다는 말씀부터 드리려 합니다.. 제가 몰랐던 사실입니다. 변수는 초기화되지 않고, 매번 이전값이 그대로 저장되어있는 상태가 기본이라고 생각했었습니다.

확실히 이해가 갔습니다. 전역변수로 만들어 보겠습니다.

전역변수로 만들어본 결과, 아직 해결이 되지 않았습니다만 변수가 초기화 된다는 점에 착안하여 지속적으로 변수가 갱신된다면 가능하리라 생각됩니다.

참고로, 전역변수로 만든 트리거는 위 '시험 변수' 트리거에 존재하는 지역변수를 전역변수로 수정만 하였습니다. 결과값은 둘 다 똑같았습니다.
아이콘 크더기 (2014-08-09 16:51:55 KST)
0↑ ↓0
센스 이미지
사실 부활은 많은 것들을 설정해줘야 하는 것들이라 꼭 트리거에 문제가 있는 것만은 아닙니다. 유닛 데이터에 플래그 안 "부활 가능" 이라는 필드가 있는 걸로 기억이 나네요. 게다가 유닛 데이터에 "능력치 - 소멸 시간" 필드 값을 -1로 설정해야 부활이 되더군요.
크르륵캬캬 (2014-08-09 17:19:26 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
크더기님 안녕하세요. 답변 감사드립니다.

데이터 플래그 안 "부활 가능" 필드를 "부활 가능" 으로 바꾸었으며 "능력치 - 소멸시간" 필드의 값을 "-1"로 수정하니 트리거가 정상적으로 작동하였습니다!!!

트리거 자체에는 문제가 없음은 이미 다른 트리거가 정상작동하면서 알고 있었습니다. 오직 '부활'만 트리거가 이상하게 작동해서, 이벤트란 이벤트는 전부다 발동시켜보면서 시험해 보았습니다. 그럼에도 되지 않자 문의를 올린거였는데.. 감사합니다!
앗앗앗 (2014-08-09 17:38:28 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
위에 질문 주신거 답해드릴게요. 그냥 변수없이 그 트리거만 추려서요

이벤트 - 아무 유닛 소멸
조건 - 또는
ㄴ 트리거 발동유닛 = 수정탑 [80.00, 68.00]
ㄴ 트리거 발동유닛 = 융화소 [79.50, 62.50]
행동 - 트리거 발동유닛 체력을 1로 설정
- 트리거 발동유닛 보호막을 1로 설정
- 트리거 발동 유닛 부활

딱히 이 부분에선 '이것만' 쓰실거면 변수가 필요 없어요.
트리거 발동 유닛 이라는 편리한 함수가 있기 때문이죠
운영운영운영 (2014-08-09 20:14:00 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
나도 예전에 소멸시간 -1몰라서 화났었듬
크르륵캬캬 (2014-08-10 11:01:25 KST)
0↑ ↓0
센스 이미지를 등록해 주세요
앗앗앗님 안녕하세요? 답변감사드립니다. 확실히, 트리거로만 따지면 그렇게 되는군요! 감사합니다.
댓글을 등록하려면 로그인 하셔야 합니다. 로그인 하시려면 [여기]를 클릭하십시오.
롤토체스 TFT - 롤체지지 LoLCHESS.GG
소환사의 협곡부터 칼바람, 우르프까지 - 포로지지 PORO.GG
배그 전적검색은 닥지지(DAK.GG)에서 가능합니다
  • (주)플레이엑스피
  • 대표: 윤석재
  • 사업자등록번호: 406-86-00726

© PlayXP Inc. All Rights Reserved.