Created
November 20, 2014 15:56
-
-
Save keewon/588fb09d9df9ca6b17db to your computer and use it in GitHub Desktop.
AION 하우징 스크립트 - 경마 게임
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- 아이온 하우징 스크립트 경마 게임 | |
-- 최종수정일: 2011-12-17 | |
-- 자유롭게 수정 배포 가능함 | |
-- 한번에 이동할 거리 | |
STEP = 0.18; | |
-- 최대 20회 움직임 | |
RUN = 20; | |
-- 결승점 지정 | |
GOAL = 45; | |
-- 말 개수, 최대 9개까지만 | |
COUNT = 5; | |
-- 시상식 횟수 | |
RESULT = RUN+9; | |
-- 이동한 거리를 저장할 변수 | |
value = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; | |
-- 사용자 선택을 저장할 변수 | |
choice = 0; | |
-- state | |
ST_BET = 0; | |
ST_READY = 1; | |
state = ST_BET; | |
function OnInit() | |
-- 말 몇 마리 쓸지 지정 | |
H.SetOutletCount(COUNT); | |
-- 메뉴 등록 | |
H.RegisterMenu("경마 ", 7); | |
end | |
-- 메뉴 등록 | |
function OnMenu(menuNum) | |
if (menuNum == 7) then | |
Main("경마"); | |
end | |
end | |
-- 사용자가 채팅을 하면 호출됩니다. | |
function OnUserSay(str) | |
Main(str); | |
end | |
function Main(str) | |
-- "경마" 라고 말하면 베팅 시작 | |
-- "1" ~ "9" 라고 말하면 게임 시작 | |
if string.find(str, "경마") then | |
Bet(); | |
state = ST_READY; | |
elseif string.find("123456789", string.sub(str, 1, 1)) then | |
if state == ST_READY then | |
choice = tonumber( string.sub(str, 1, 1) ); | |
if choice <= COUNT then | |
-- 매번 다른 결과가 나오도록 랜덤 초기화 | |
math.randomseed(os.time()); | |
-- 게임 실행 | |
Game(); | |
state = ST_BET; | |
else | |
H.PlaySound(0, "r[1]"); | |
H.StartAnimation(0, 1, H.Emotion.no); | |
H.Say(1, "1에서 " .. COUNT .. " 중 하나를 선택해서 채팅 창에 입력하세요~"); | |
end | |
end | |
end | |
end | |
function Bet() | |
text = ""; | |
for label=1,COUNT+1 do | |
text = text .. "r1[" .. label .. "]"; | |
end | |
H.PlaySound(0, text); | |
for label=1,COUNT do | |
H.Glow(label, label, 1, 255, 0, 0); | |
H.Say(label, label .. "번말~"); | |
H.StartAnimation(0, label, H.Emotion.point); | |
end | |
H.Say(COUNT+1, "저 앞에 상자로 된 1번말에서 " .. | |
COUNT .. "번말까지 보이시죠? " .. | |
"1에서 " .. COUNT .. " 중 하나를 선택하세요~"); | |
end | |
function Game() | |
-- 경기 결과 초기화 | |
for outlet=1,COUNT do | |
value[outlet] = 0; | |
end | |
track = ""; | |
-- 경기에 대한 label 설정 | |
for i=1,RUN do | |
track = track .. "r0.5[" .. i .. "] " | |
end | |
-- 시상에 대한 label 설정 | |
for i=RUN+1, RESULT do | |
track = track .. "r0.5[" .. i .. "]" | |
end | |
-- 경기/시상 label 설정 | |
H.PlaySound(0, track); | |
-- 경주 | |
reach = false; | |
RUN1 = RUN; | |
for label =1,RUN do | |
for outlet=1,COUNT do | |
value[outlet] = value[outlet] + Dice(); | |
if value[outlet] >= GOAL then | |
reach = true; | |
end | |
H.SetPos(outlet, label, | |
STEP * value[outlet], 0, 0, 1); | |
end | |
if reach == true then | |
RUN1 = label; | |
break; | |
end | |
end | |
-- 등수 매기기 | |
rank = {}; | |
for i=1, COUNT do | |
rank[i] = i; | |
end | |
table.sort(rank, CompareValue); | |
-- 집사는 춤을 춘다 | |
H.StartAnimation(0, 1, H.Emotion.dance); | |
-- 등수를 집사의 대화로 | |
rankstr = ""; | |
for i = 1, COUNT do | |
rankstr = rankstr .. i .. "등 " .. rank[i] .. | |
"번말 " ; | |
-- 디버그 하려면 다음 문장 사용 | |
-- rankstr = rankstr .. i .. "등 " .. rank[i] .. | |
-- "번말 " .. value[rank[i]] .. "m" ; | |
if 1 <= i and i <= 4 then | |
rankstr = rankstr .. ","; | |
end | |
end | |
-- 집사 말하기 | |
H.Say(RUN1+1, rankstr); | |
if rank[1] == choice then | |
H.Say(RUN1+2, "축하합니다~~~"); | |
H.StartAnimation(0, RUN1+2, H.Emotion.victory); | |
end | |
-- 시상식: 반짝이기, 점프 | |
H.Glow(rank[1], RUN1, RESULT-RUN1, 255, 255, 255); | |
for label=RUN+1, RESULT do | |
H.SetPos(rank[1], label, | |
STEP * value[rank[1]], 0, label , 1); | |
end | |
end | |
-- sort 에 사용하는 함수 | |
function CompareValue(v1, v2) | |
return value[v1] >= value[v2]; | |
end | |
-- 주사위 함수 | |
function Dice() | |
return math.random(4); | |
end | |
---------------------- 여기까지 넣으시면 됩니다~ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment