Skip to content

Commit

Permalink
Merge pull request #35 from hx-w/dev-1.4.3
Browse files Browse the repository at this point in the history
upload utility path when submit
  • Loading branch information
hx-w authored Aug 31, 2021
2 parents 4e35d38 + e61d7a8 commit 504de2f
Show file tree
Hide file tree
Showing 7 changed files with 105 additions and 37 deletions.
Binary file modified plugins/csgowiki-pack.smx
Binary file not shown.
1 change: 1 addition & 0 deletions scripting/csgowiki-pack.sp
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ public OnMapStart() {

EnforceDirExists("data/csgowiki");
EnforceDirExists("data/csgowiki/replays");
EnforceDirExists("data/csgowiki/path");
}

public OnMapEnd() {
Expand Down
12 changes: 4 additions & 8 deletions scripting/csgowiki/menus/menu_wiki.sp
Original file line number Diff line number Diff line change
Expand Up @@ -118,19 +118,15 @@ void Menu_UtilityWiki_v3(client) {
SetMenuTitle(menuhandle, "=== 查询到的道具 ===");

for (new idx = 0; idx < g_aUtFilterCollection[client].Length; idx ++) {
JSONArray arrval = view_as<JSONArray>(g_aUtFilterCollection[client].Get(idx));
JSONObject arrval = view_as<JSONObject>(g_aUtFilterCollection[client].Get(idx));
char utId[LENGTH_UTILITY_ID], utTitle[LENGTH_NAME], utType[LENGTH_UTILITY_TINY];
int specFlag = 0;
char utNameZh[LENGTH_UTILITY_ZH];
arrval.GetString(0, utId, LENGTH_UTILITY_ID);
arrval.GetString(1, utTitle, LENGTH_NAME);
arrval.GetString(2, utType, LENGTH_UTILITY_TINY);
specFlag = arrval.GetInt(3);
arrval.GetString("id", utId, LENGTH_UTILITY_ID);
arrval.GetString("name", utTitle, LENGTH_NAME);
arrval.GetString("type", utType, LENGTH_UTILITY_TINY);
Utility_TinyName2Zh(utType, "%s", utNameZh);
char msg[LENGTH_NAME + LENGTH_UTILITY_ZH + 8];
Format(msg, sizeof(msg), "[%s] %s", utNameZh, utTitle);
if (specFlag == 1) Format(msg, sizeof(msg), "%s *走投*", msg);
else if (specFlag == 2) Format(msg, sizeof(msg), "%s *跑投*", msg);
AddMenuItem(menuhandle, utId, msg);
delete arrval;
}
Expand Down
12 changes: 7 additions & 5 deletions scripting/csgowiki/utility_modify.sp
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,13 @@ public Action:Command_Modify(client, args) {
GetClientAbsOrigin(client, g_aStartPositions[client]);
GetClientEyeAngles(client, g_aStartAngles[client]);
g_aPlayerStatus[client] = e_cM_ThrowReady;
g_aPlayerUtilityPath[client] = new JSONArray();
if (g_aPlayerUtilityPath[client] == null) {
g_aPlayerUtilityPath[client] = new ArrayList();
}
if (g_aPlayerUtilityPath[client] == null) {
g_aPlayerUtilityPath[client] = new ArrayList();
}
g_aPlayerUtilityPath[client].Clear();
}

public Action:Command_Velocity(client, args) {
Expand Down Expand Up @@ -95,10 +101,6 @@ void TriggerWikiModify(client) {
postData.SetFloat("velocity_x", g_aUtilityVelocity[client][0]);
postData.SetFloat("velocity_y", g_aUtilityVelocity[client][1]);
postData.SetFloat("velocity_z", g_aUtilityVelocity[client][2]);
// char path[302400];
// g_aPlayerUtilityPath[client].ToString(path, sizeof(path));
// PrintToChat(client, "len: %d", strlen(path));
// postData.SetString("path", path);

httpRequest.Post(postData, WikiModifyResponseCallback, client);

Expand Down
109 changes: 92 additions & 17 deletions scripting/csgowiki/utility_submit.sp
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,11 @@ public Action:Command_Submit(client, args) {
GetClientAbsOrigin(client, g_aStartPositions[client]);
GetClientEyeAngles(client, g_aStartAngles[client]);
g_aPlayerStatus[client] = e_cThrowReady;
g_aPlayerUtilityPath[client] = new JSONArray();

if (g_aPlayerUtilityPath[client] == null) {
g_aPlayerUtilityPath[client] = new ArrayList();
}
g_aPlayerUtilityPath[client].Clear();
}

public Action:Command_SubmitAbort(client, args) {
Expand Down Expand Up @@ -48,15 +52,10 @@ void OnPlayerRunCmdForUtilitySubmit(client, &buttons) {
if (e_cAlreadyThrown == g_aPlayerStatus[client] || e_cM_AlreadyThrown == g_aPlayerStatus[client]) {
if (g_iUtilityEntityId[client] != 0 && g_iPlayerUtilityPathFrameCount[client] % g_iUtilityPathInterval == 0) {
float position[3];
JSONArray pos = new JSONArray();
GetEntPropVector(g_iUtilityEntityId[client], Prop_Send, "m_vecOrigin", position);
// pos.PushFloat(float_reserve(position[0]));
// pos.PushFloat(float_reserve(position[1]));
// pos.PushFloat(float_reserve(position[2]));
pos.PushFloat(position[0]);
pos.PushFloat(position[1]);
pos.PushFloat(position[2]);
g_aPlayerUtilityPath[client].Push(pos);
g_aPlayerUtilityPath[client].Push(position[0]);
g_aPlayerUtilityPath[client].Push(position[1]);
g_aPlayerUtilityPath[client].Push(position[2]);
}
g_iPlayerUtilityPathFrameCount[client] ++;
}
Expand Down Expand Up @@ -117,7 +116,10 @@ void ResetSingleClientSubmitState(client) {
g_aActionRecord[client] = 0;
g_iPlayerUtilityPathFrameCount[client] = 0;
g_iUtilityEntityId[client] = 0;
delete g_aPlayerUtilityPath[client];
if (g_aPlayerUtilityPath[client] == null) {
g_aPlayerUtilityPath[client] = new ArrayList();
}
g_aPlayerUtilityPath[client].Clear();
}

void ResetUtilitySubmitState() {
Expand Down Expand Up @@ -147,31 +149,28 @@ void UtilityDetonateStat(Handle:event, GrenadeType utCode) {
}
g_iPlayerUtilityPathFrameCount[client] = 0;
g_iUtilityEntityId[client] = 0;
delete g_aPlayerUtilityPath[client];
if (g_aPlayerUtilityPath[client] == null) {
g_aPlayerUtilityPath[client] = new ArrayList();
}
g_aPlayerUtilityPath[client].Clear();
}
}

void TriggerWikiPost(client) {
// post api
// url = "https://api.csgowiki.top/api/utility/submit/"

// param define
char token[LENGTH_TOKEN] = "";
char steamid[LENGTH_STEAMID64] = "";
char utTinyName[LENGTH_UTILITY_TINY] = "";
bool wikiAction[CSGOWIKI_ACTION_NUM] = {}; // init all false
char tickTag[LENGTH_STATUS] = "";
// char path[302400];
// param fix
GetConVarString(g_hCSGOWikiToken, token, LENGTH_TOKEN);
GetClientAuthId(client, AuthId_SteamID64, steamid, LENGTH_STEAMID64);
GrenadeType_2_Tinyname(g_aUtilityType[client], utTinyName);
Action_Int2Array(client, wikiAction);
TicktagGenerate(tickTag, wikiAction);
// g_aPlayerUtilityPath[client].Encode(path, sizeof(path));

// PrintToChat(client, "total frame: %d; sampled frame: %d", g_iPlayerUtilityPathFrameCount[client], g_iPlayerUtilityPathFrameCount[client] / g_iUtilityPathInterval);
// g_aPlayerUtilityPath[client].ToString(path, sizeof(path));

// request
char url[LENGTH_MESSAGE];
Expand Down Expand Up @@ -223,6 +222,10 @@ void WikiPostResponseCallback(HTTPResponse response, int client) {
if (StrEqual(status, "ok")) {
char utId[LENGTH_UTILITY_ID];
json_obj.GetString("code", utId, LENGTH_UTILITY_ID);
// upload path
SaveUtilityPath(client, utId);
UploadUtilityPath(client, utId);

ShowResult(client, utId);
}
else {
Expand Down Expand Up @@ -251,4 +254,76 @@ void ShowResult(client, char[] utId) {
PrintToChat(client, "%s 该道具记录的唯一标识为<\x04%s\x01>", PREFIX, utId);
PrintToChat(client, "%s 请在\x02尽快\x01登陆网站补全道具信息(图片和文字描述)", PREFIX);
PrintToChat(client, "\x09 ------------------------------------- ");
}

void SaveUtilityPath(int client, char filename[LENGTH_UTILITY_ID]) {
// 检查count
if (g_aPlayerUtilityPath[client].Length / 3 != g_iPlayerUtilityPathFrameCount[client] / g_iUtilityPathInterval) {
PrintToChat(client, "%s \x02道具路径数据记录错误:理论采样数 %d / 实际采样数 %d", PREFIX, g_iPlayerUtilityPathFrameCount[client] / g_iUtilityPathInterval, g_aPlayerUtilityPath[client].Length / 3);
return;
}

char filepath[PLATFORM_MAX_PATH];
BuildPath(Path_SM, filepath, sizeof(filepath), "data/csgowiki/path/%s.path", filename);
File hFile = OpenFile(filepath, "wb");
if(hFile == null) {
LogError("Can't open the record file for writing! (%s)", filepath);
return;
}
hFile.WriteInt32(g_aPlayerUtilityPath[client].Length / 3);

float pos[3];
for (int idx = 0; idx < g_aPlayerUtilityPath[client].Length; idx++) {
pos[idx % 3] = view_as<float>(g_aPlayerUtilityPath[client].Get(idx));
if (idx % 3 == 2) {
hFile.Write(pos, 3, 4);
}
}

delete hFile;
}

void UploadUtilityPath(int client, char utid[LENGTH_UTILITY_ID]) {
char filepath[PLATFORM_MAX_PATH];
BuildPath(Path_SM, filepath, sizeof(filepath), "data/csgowiki/path/%s.path", utid);
if (!FileExists(filepath)) {
PrintToChat(client, "%s \x02待上传文件不存在", PREFIX);
return;
}

char apiHost[LENGTH_TOKEN];
char token[LENGTH_TOKEN];
char url[LENGTH_URL];
GetConVarString(g_hApiHost, apiHost, sizeof(apiHost));
GetConVarString(g_hCSGOWikiToken, token, LENGTH_TOKEN);
PrintToChat(client, "%s \x04开始上传路径文件:%s", PREFIX, utid);
Format(url, sizeof(url), "%s/v2/utility/upload-path-put/%s/?token=%s", apiHost, utid, token);
HTTPRequest request = new HTTPRequest(url);

DataPack pack = new DataPack();
pack.WriteCell(client);
pack.WriteString(utid);

request.UploadFile(filepath, UploadUtilityPathCallback, pack);
}

void UploadUtilityPathCallback(HTTPStatus status, DataPack pack) {
pack.Reset();
int client = pack.ReadCell();
char utid[LENGTH_UTILITY_ID];
pack.ReadString(utid, sizeof(utid));

// filepath
char filepath[PLATFORM_MAX_PATH];
BuildPath(Path_SM, filepath, sizeof(filepath), "data/csgowiki/path/%s.path", utid);

if (status != HTTPStatus_OK) {
PrintToChat(client, "%s \x02路径文件上传失败:%d", PREFIX, status);
}
else {
PrintToChat(client, "%s \x0A路径文件已上传CSGOLab", PREFIX);
}
if (FileExists(filepath)) {
DeleteFile(filepath);
}
}
6 changes: 0 additions & 6 deletions scripting/csgowiki/utility_wiki.sp
Original file line number Diff line number Diff line change
Expand Up @@ -170,12 +170,6 @@ void AllCollectionResponseCallback(HTTPResponse response, int client) {
}

g_jaUtilityCollection = view_as<JSONArray>(resp_json.Get("utility_collection"));
// g_jaUtilityCollection = new JSONArray();
// JSONArray arr = view_as<JSONArray>(resp_json.Get("utility_collection"));
// for (int idx = 0; idx < arr.Length; idx++) {
// JSONObject t = view_as<JSONObject>(arr.Get(idx));
// g_jaUtilityCollection.Push(t);
// }
// show menu for Command_Wiki
if (IsPlayer(client)) {
Menu_UtilityWiki_v1(client);
Expand Down
2 changes: 1 addition & 1 deletion scripting/include/csgowiki.inc
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ char g_sLatestInfo[LENGTH_MESSAGE];
// 道具路径
const int g_iUtilityPathInterval = 2; // 间隔Frame采样
int g_iPlayerUtilityPathFrameCount[MAXPLAYERS + 1];
JSONArray g_aPlayerUtilityPath[MAXPLAYERS + 1];
ArrayList g_aPlayerUtilityPath[MAXPLAYERS + 1];

// --------- steam_bind.sp define -----------
enum StateBind {
Expand Down

0 comments on commit 504de2f

Please sign in to comment.