전략게시판

전략게시판 [스튜디오]
버니맵 제작자를 위한 루아 텔레포트 설정....
2019.05.24 18:40 조회 : 2903
Lv. 349ServerName 래인지로버 작성자 게시물 더보기




버니맵 텔레포트를 루아로 구현해보자


원리는 플레이어 좌표가 특정수치 이하로 떨어지면(발판에서 아래로 떨어지면) 
정해진 스폰구역으로 텔레포트 되는 방식이다
이렇게 해두면 귀찮게 텔포넣고 커넥터로 연결하는 짓 안해도됨
대신 구간마다 트리거랑 함수 추가해야하는 귀찮음이 있지만 뭐 텔포 직접 넣는건보단 덜 귀찮더라





보는거처럼 아래쪽엔 아무것도 없다

각 단계에 있는 트리거에 닿으면 그 플레이어의 다음 스폰위치가 바뀌는 방식









↓ sauce



game.lua


-- 단계별 스폰될 위치

  savePoints={
 {x=-5,y=4,z=3},
 {x=-4,y=16,z=3},
 {x=11,y=19,z=3}
}

--플레이별로 레벨 저장할 변수
 
 playerLevels={}
 for i=1,24 do
 playerLevels[i]=nil
 end

--단계별로 다음 스폰위치 바꿀 트리거 설정

level1=Game.EntityBlock:Create ({x=-5,y=4,z=3})
level2=Game.EntityBlock:Create ({x=-4,y=16,z=3})
level3=Game.EntityBlock:Create ({x=8,y=19,z=3})

function level1:OnTouch( player )
 setPoint(player.index,1)
end

function level2:OnTouch( player )
 setPoint(player.index,2)
end

function level3:OnTouch( player )
 setPoint(player.index,3) 
end


--실질적으로 텔레포트 실행할 무한루프 함수

function Game.Rule:OnPlayerSignal (player, signal)
 teleport(player)
end

--플레이어가 나가면 그 플레이어 레벨 정보 삭제

function Game.Rule:OnPlayerDisconnect(player)
 playerLevels[player.index]=nil
end

--텔포함수

function teleport( player  )                -- 플레이어 z 좌표가 1이하로 떨어지면,
 local level=playerLevels[player.index]  --플레이어 단계확인후 그 단계에 맞는 위치로 텔포시킴
 if player.position.z < 1 then
 player.position={x=savePoints[level].x,y=savePoints[level].y,z=savePoints[level].z}
 end
end

function setPoint( index,level )           --플레이어 단계를 수정하는 함수
 playerLevels[index]=level               --위 트리거에 닿으면 이함수가 실행되면 그 플레이어 단계가 바뀜
end

===========================================


ui.lua

function UI.Event:OnUpdate (time)
 UI.Signal(1)
end


===========================================





사람 여러명인 방에서도 각자 단계별로 따로 텔포 되는거 확인함






스튜디오에 예제맵 가져가기 공개 해놓음
버그 있으면 제보좀
추천 : 0
댓글을 남기시려면 로그인 해주세요
댓글 : 7
  • 오 시그널 무한적으로 1신호 보내고 player 매개변수 포함되어 있는 시그널 이벤트콜백 무한루프로 실행되는거 꿀팁 얻고감 ㅋㅋ Lv. 439모바일에서 등록로빈 2019.07.25
  • 루아 씹고인물 집합소네 Lv. 594한심 2019.06.23
  • 아 이제 이해 되네요 ㅋㅋ 잘 안읽어 봐서 이해가 잘 안됬는데.. 감사합니다! Lv. 651모바일에서 등록전지전능 2019.05.26
  • 슈바 먼소린지 모르겠다 루아 진입장벽 너무 높앙 Lv. 6모바일에서 등록1236656 2019.05.26
  • 그렇다면 setPoint(player.index, savePoints[1]) 이 맞지 않나요? 1만 넣으면 어디서 정보를 가져올지 모를텐데.. Lv. 650모바일에서 등록전지전능 2019.05.26
  • 두번째 넘기는게 레벨 맞음 savePoints에 있는게 단계별로 이동할 좌표들이고 setPoint에 숫자 넘기면 그 숫자가 다음에 텔포될 좌표 Lv. 350ServerName 2019.05.25
  • function level1:OnTouch( player ) setPoint(player.index,1) end 이 부분이 약간 이해가 안되는데요, setPoint(player.index,1) 에서 1 이 무엇이죠? 제가 생각하는거로는 level1 으로 이해를 하고 있는데 정확한지는 모르겠네요. 나머지는 다 좋아 보여요! Lv. 649전지전능 2019.05.25