SCM player skins Line Up: [드래프트 강좌] 벙커에 회수 버튼을 만들어보자

2/17/2015

[드래프트 강좌] 벙커에 회수 버튼을 만들어보자


결과













요약

  • 벙커에 Carrier Stop 명령을 하는 버튼을 추가.
  • unit->mainOrderId : 유닛의 현재 주된 명령
  • resources->minerals[플레이어 ID] : 해당 플레이어의 미네랄량
  • resources->gas[플레이어 ID] : 해당 플레이어의 가스량
  • unit->playerId : 유닛의 소유 플레이어









내용

일단 먼저 Firegraft를 켜서 벙커에 버튼을 추가해줍니다. 저는 07 위치에 하나 추가했습니다. 버튼의 내용은 Carrier Stop이나 Reaver Stop처럼 적당한 것들로 적용합니다. 다르 버튼들을 적용해도 되는데 굳이 Carrier Stop같은 걸 하는 이유는 개그맨이야님의 GAG Mania Draft나 버닝그라운드의 플러그인 오픈소스(https://code.google.com/p/gptp/source/browse/)를 보면 Carrier Stop이나 Reaver Stop버튼을 사용해 새로운 기능이나 스킬을 만들길래 저도 똑같이 따라했습니다.ㅎㅎ.. 오픈소스니까 상관없겠죠 뭐...









그리고 Dat Requirements 탭으로 들어가셔서 [52]Carrier Stop 명령을 벙커도 사용할 수 있도록 설정합니다.










자, 이제 GPTP 프로젝트를 불러오고 코드를 작성합시다. 사용할 것들은 다음과 같습니다.

unit->mainOrderId : 유닛의 현재 주된 명령
unit->orderTo(명령, 타겟유닛) : 타겟 유닛에게 해당 유닛이 명령을 수행함
resources->minerals[플레이어 ID] : 해당 플레이어의 미네랄량
resources->gas[플레이어 ID] : 해당 플레이어의 가스량
units_dat::MineralCost[유닛 ID] : 해당 유닛의 미네랄 값
units_dat::GasCost[유닛 ID] : 해당 유닛의 가스 값
unit->playerId : 유닛의 소유 플레이어


이들을 이용해 코드를 작성합니다.
if (unit->id == UnitId::bunker && unit->mainOrderId == OrderId::CarrierStop) {
 resources->minerals[unit->playerId] += (int)(units_dat::MineralCost[unit->id] * 0.75);
 resources->gas[unit->playerId] += (int)(units_dat::GasCost[unit->id] * 0.75);
 unit->orderTo(OrderId::Unload, unit);   //이 부분은 딱히 없어도 됩니다.
 unit->mainOrderId = OrderId::Die;
}

벙커의 mainOrderId가 Carrier Stop일 때를 if문을 이용해 인식해줍니다. 그리고 유닛을 소유한 플레이어의 미네랄과 가스를 벙커의 75%만큼 회수시킵니다. 그 후, 벙커의 mainOrderId를 OrderId::Die로 설정하여 유닛을 자폭시킵니다.
여기서 unit->orderTo(OrderId::Unload, unit)은 벙커 안에 들어있는 유닛을 모두 내리게 하는데, 벙커가 터져도 어차피 안의 유닛은 살아있기 때문에 굳이 필요는 없습니다. 동영상에서는 이 부분을 넣지 않았습니다.








프로젝트를 빌드하고 'GPTP.qdp'파일을 Firegraft를 이용하여 플러그인 해줍니다. 그리고 드래프트를 실행하면 다음과 같이 정상적으로 작동함을 확인할 수 있습니다.



댓글 없음:

댓글 쓰기