コメント

このコメントは、『スクリプト 汎用関数』 ゲーム起動から...へのコメントです。

コメントの内容

Cdv30200 aoi icon mini aoihikawa(投稿日:2014/04/08 08:04/08/14)
#----- 0埋め -----
def addZero(n, b)
  l = 0; c = n; r = ""; b = b - 1
  while c > 9
    c = floor(c / 10); l = l + 1
  end
  while l < b
    r = r + "0"; l = l + 1
  end
  r = r + n
  return r
end
#----- 時間測定 -----
#うるう年の判定
def getUruuflg(y)
  return (y % 4) == 0 && (y % 100) != 0 || (y % 400) == 0
end
#経過時間の計算
def deffTimeS(t)
  mi = 0
  d_li = createArray()
  d_li = splitString("0,31,59,90,120,151,181,212,243,273,304,334,365",",")
  i = 0
  while i < getArrayLength(d_li)
    d_li[i] = toNumber(d_li[i])
    i = i + 1
  end
  j = t[0] - 1
  while j > 1999
    if getUruuflg(j)
      mi = mi + 527040
    else
      mi = mi + 525600
    end
    j = j - 1
  end
  if getUruuflg(t[0]) && (t[1] > 2)
    mi = mi + 1440
  end
  mi = mi + ((d_li[(t[1] - 1)] + (t[2] - 1)) * 1440)
  mi = mi + (t[3] - 1) * 60 + t[4]
  mi = mi * 60 + t[5]
  return mi
end

上記deffTimeS関数に
時間関連関数(getServerCurrentDate関数など)で
取得した時間配列の値を引数で渡すと、
数値(秒単位)に起こした値で取得できます


つまり目的とする、累計のプレイ時間を取得するためには、
汎用関数記事内、viewPlayingTime関数内で処理している通り、

getServerCurrentDate関数とgetServerGameStartDate関数で取得した
時間配列をdeffTimeS関数で数値に起こした後差分を行い、
これをプレイ時間数値とし保存します

次回起動時には、この前回プレイ時間数値と
再び今回分の差分を算出し、加算することで
累計プレイ時間数値を求めることが出来ます


最後にこの数値を
時間として表示したいときだけ
floor(プレイ時間数値 / (60 * 60)) + ":" +
 addZero(floor((プレイ時間数値 % (60 * 60)) / 60),2) + "'" +
 addZero((プレイ時間数値 % 60),2)

と計算することで、「時:分'秒」の文字列が
求められます

コメントの内容(一番最初の投稿)

Cdv30200 aoi icon mini aoihikawa(投稿日:2014/04/08 08:04/08/14)
#----- 0埋め -----
def addZero(n, b)
  l = 0; c = n; r = ""
  while c > 9
    c = floor(c / 10); l = l + 1
  end
  while l < b
    r = r + "0"; l = l + 1
  end
  r = r + n
  return r
end
#----- 時間測定 -----
#うるう年の判定
def getUruuflg(y)
  return (y % 4) == 0 && (y % 100) != 0 || (y % 400) == 0
end
#経過時間の計算
def deffTimeS(t)
  mi = 0
  d_li = createArray()
  d_li = splitString("0,31,59,90,120,151,181,212,243,273,304,334,365",",")
  i = 0
  while i < getArrayLength(d_li)
    d_li[i] = toNumber(d_li[i])
    i = i + 1
  end
  j = t[0] - 1
  while j > 1999
    if getUruuflg(j)
      mi = mi + 527040
    else
      mi = mi + 525600
    end
    j = j - 1
  end
  if getUruuflg(t[0]) && (t[1] > 2)
    mi = mi + 1440
  end
  mi = mi + ((d_li[(t[1] - 1)] + (t[2] - 1)) * 1440)
  #if f
    mi = mi + (t[3] - 1) * 60 + t[4]
    mi = mi * 60 + t[5]
  #end
  return mi
end

上記deffTimeS関数に
時間関連関数(getServerCurrentDate関数など)で
取得した時間配列の値を引数で渡すと、
数値(秒単位)に起こした値で取得できます


つまり目的とする、累計のプレイ時間を取得するためには、
汎用関数記事内、viewPlayingTime関数内で処理している通り、

getServerCurrentDate関数とgetServerGameStartDate関数で取得した
時間配列をdeffTimeS関数で数値に起こした後差分を行い、
これをプレイ時間数値とし保存します

次回起動時には、このプレイ時間数値と
再び時間配列をdeffTimeS関数で数値に起こした後差分を加算することで
累計プレイ時間数値を算出することが出来ます

最後にこの数値を
floor(プレイ時間数値 / (60 * 60)) + ":" + addZero(floor(プレイ時間数値 / 60),2) + "'" + addZero((プレイ時間数値 % 60),2)

と計算することで、時:分'秒が
求められるます