-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathfunctions.gs
292 lines (227 loc) · 7.03 KB
/
functions.gs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
////////////////////////////////////////
// 共通関数
////////////////////////////////////////
// outputtypeをみて出力先を判断
function getOutputTo(tmpName) {
if(OUTPUT_TIMELINE == tmpName || OUTPUT_SKILL == tmpName || OUTPUT_LOG == tmpName) {
return OUTPUTTO_TIMELINE;
} else {
return OUTPUTTO_BUFF;
}
}
// outputtypeをみてstartrowを判断
function getStartRow(tmpName) {
if(OUTPUT_ALLBUFF == tmpName) {
return allStartRow;
} else if ([OUTPUT_TIMELINE, OUTPUT_LOG].indexOf(tmpName) >= 0) {
return oStartRow;
} else {
return jStartRow;
}
}
// タイムライン式のデータを返す
function getTlValue(datas) {
var data = {
"time" : null,
"type" : null,
"who": "",
"whom" : "",
"event": "",
"count": 1,
"damage": null,
"log" : ""
};
for(var key in datas) {
if (datas[key] != undefined) data[key] = datas[key];
}
return data;
}
// ジョブ別バフを返すのか
function booOutputTypeJob(outputType) {
var obj = new Job_OutputBuff(outputType, "", "", "", "");
obj.getoutputTypeJob();
return obj.jobName;
}
// Petかどうか
function booPet(who) {
if (typeof who != "string" || who == null || who == "") return false;
return who.match(/(カーバンクル・|オートタレット・|・エギ|フェアリー|デミ・|セラフィム|英雄の影身|オートマトン・クイーン|分身)/);
}
// 敵かどうか
function booEnemy(who) {
if (typeof who != "string" || who == null || who == "") return false;
return !who.match(/\s/) && !booPet(who) && !who.match(/アーサリースター/);
}
// オートアタックか
function booAA(event) {
if(event == "攻撃" || event == "ショット" || event == "光の癒し") return true;
return false;
}
// 召喚を出力
function SMN_EnagyValue(event) {
var value = null;
if(event == "エナジードレイン") {
value = 1;
} else if(event == "エナジーサイフォン") {
value = 2;
}
return value;
}
function SMN_FlowValue(event) {
var value = null;
if(event == "ミアズマバースト") {
value = 1;
} else if(event == "ペインフレア") {
value = 2;
}
return value;
}
// 秒に変換
function time2Sec(time, startTime) {
time = time.split(".");
time = time[0].split(":");
if (startTime != null && startTime > 82800 && time[0] == 0) {
// 23:00 - 0:00 をまたがる場合は0時を24時として計算
time[0] = 24;
}
return (Number(time[0]) * 60 * 60) + (Number(time[1]) * 60) + Number(time[2]);
}
// 時間に変換
function sec2Time(time) {
if (time < 0) time = 0;
var minute = Math.floor(time/ 60);
var second = time % 60;
if(minute < 10) minute = "0" + minute;
if(second < 10) second = "0" + second;
return ("00:" + minute + ":" + second);
}
// シート検索
function booSheet(sheetName) {
var sheets = SpreadsheetApp.getActiveSpreadsheet();
var sheet = sheets.getSheetByName(sheetName);
if (sheet == null) {
return false;
}
return true;
}
// セルに名前をセットするか
function booName2Cell(event) {
return SET_TARGET_SKILLS.indexOf(event) >= 0 ? true: false;
}
// 無視するデバフ
function booSkipDebuff(event) {
if(event == "衰弱" || event == "衰弱[強]") return true;
return false;
}
// 出力するタイムラインタイプはスキル回しか
function booOutputTlSkill() {
var sheet = SpreadsheetApp.getActive().getSheetByName(SHEET_SETTING);
var val = sheet.getRange(COL_OUTPUT_SKILL).getValue();
return val == 1 ? true : false;
}
// FFLogsのAPIキー
function getLogsKey() {
var sheet = SpreadsheetApp.getActive().getSheetByName(SHEET_SETTING);
return sheet.getRange(COL_API_KEY).getValue();
}
// タイムラインか
function booTL(outputType) {
if(outputType == OUTPUT_TIMELINE || outputType == OUTPUT_LOG ) {
return true;
}
return false;
}
// 出力先はタイムライン欄か
function booOutputToTL(outputType) {
if(booTL(outputType) || outputType == OUTPUT_SKILL) {
return true;
}
return false;
}
// テンプレートシートをコピー
function copyTempSheets_ (sheetName, toName) {
// ID からスプレッドシートを取得
var bookFrom = SpreadsheetApp.openById(TMP_SHEET_ID);
var fromSheets = bookFrom.getSheets();
var bookTo = SpreadsheetApp.getActiveSpreadsheet();
var toSheets = bookTo.getSheets();
var logSheet = bookTo.getSheetByName(SHEET_IMPORT);
if (toName == undefined) toName = SHEET_TIMELINE;
// bookに1枚もシートがないとエラーになるためlogsシートの確認
if (!booSheet(SHEET_IMPORT)) logSheet = bookTo.insertSheet(SHEET_IMPORT);
bookTo.setActiveSheet(logSheet);
// 前のシートは削除
var oldSheet = bookTo.getSheetByName(toName);
if (oldSheet != null) bookTo.deleteSheet(oldSheet);
// テンプレートシートをコピー
if (fromSheets.length >= 1) {
for(var i = 0;i < fromSheets.length; i++)
{
if (sheetName == fromSheets[i].getName()) {
var copySheet = fromSheets[i].copyTo(bookTo);
copySheet.setName(toName);
bookTo.setActiveSheet(copySheet);
copySheet.showSheet();
break;
}
}
}
}
// Logsパラメータ設定ダイアログ
function dialogFflogs() {
var message = "https://www.fflogs.com/reports/【???????/#fight=数字】\nの【】の部分を入力";
var dialog = Browser.inputBox(message, Browser.Buttons.OK_CANCEL);
if (dialog != "cancel") return dialog;
return false;
}
// LogsAPI設定ダイアログ
function dialogApiKey() {
var message = "FFlogsのWeb API V1クライアントキーを入力";
var dialog = Browser.inputBox(message, Browser.Buttons.OK_CANCEL);
if (dialog != "cancel") return dialog;
return false;
}
// ジョブ選択ダイアログ
function dialogJob(friendries) {
var message = "出力対象のジョブを以下から選択\\n\\n";
var job = "";
for (var i in friendries) {
if (friendries[i]["type"] == "LimitBreak") continue;
var type = friendries[i]["type"];
job += type + "\\n";
}
message = message + job + "\\n";
message = message + "選択しない場合は【" + type + "】で出力"
var dialog = Browser.inputBox(message, Browser.Buttons.OK_CANCEL);
if (dialog != "cancel") return getFriendryName(dialog, friendries, type);
return false;
}
// logsのfriendriesから名前を返す
function getFriendryName(job, friendries, jobDef) {
if (job == "") job = jobDef;
for (var i in friendries) {
if (friendries[i]["type"] == job) {
return friendries[i]["name"];
}
}
return false;
}
// FFLogsAPIへアクセス
function getResponse(path, key) {
if (path.match(/\?/)) {
path = path + "&api_key=" + key;
} else {
path = path + "?api_key=" + key;
}
try {
var response = UrlFetchApp.fetch(LOGS_HOST + path);
var responseCode = response.getResponseCode();
} catch(e) {
var responseCode = -1;
}
if (responseCode != 200) {
Browser.msgBox(ERR_NO_URL);
return false;
}
return response;
}