mirror of
https://github.com/DaKerboul/perun.git
synced 2026-08-09 22:25:40 +02:00
Compare commits
42 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d591da2c43 | ||
|
|
a4ce9ed254 | ||
|
|
ff268a47e4 | ||
|
|
37fd76c8ae | ||
|
|
167f3e9021 | ||
|
|
4723702d28 | ||
|
|
f6d1ec82d5 | ||
|
|
fd6b0a65ab | ||
|
|
78310771c3 | ||
|
|
18b6d8b0ce | ||
|
|
dcb9510802 | ||
|
|
d35ceafab2 | ||
|
|
84e1d97c8e | ||
|
|
9f22b0e4df | ||
|
|
699787c00e | ||
|
|
403b3df59a | ||
|
|
c2fa89e364 | ||
|
|
5b96f2387e | ||
|
|
52891a19e7 | ||
|
|
466171a756 | ||
|
|
d8a38059da | ||
|
|
57583c3501 | ||
|
|
d41495a8ab | ||
|
|
4bceb1b944 | ||
|
|
a2ac6cfcd8 | ||
|
|
c5fd25d996 | ||
|
|
fdd1f72edf | ||
|
|
b054ebc59f | ||
|
|
85260cb98a | ||
|
|
66b4702954 | ||
|
|
a1253d8057 | ||
|
|
bba09a9158 | ||
|
|
4c52f91fbb | ||
|
|
18e03947f3 | ||
|
|
7b75eba79b | ||
|
|
8e4f60649a | ||
|
|
c68a0aecd1 | ||
|
|
fc9c976387 | ||
|
|
a3c1fecae3 | ||
|
|
e37b73a4f1 | ||
|
|
1540615814 | ||
|
|
d700430333 |
@@ -9,7 +9,7 @@ package.cpath = package.cpath..";"..lfs.currentdir().."/LuaSocket/?.dll"
|
|||||||
|
|
||||||
Perun.RefreshStatus = 15 -- (int) [default: 60] Base refresh rate in seconds to send status update
|
Perun.RefreshStatus = 15 -- (int) [default: 60] Base refresh rate in seconds to send status update
|
||||||
Perun.RefreshMission = 60 -- (int) [default: 120] Refresh rate in seconds to send mission information
|
Perun.RefreshMission = 60 -- (int) [default: 120] Refresh rate in seconds to send mission information
|
||||||
Perun.TCPTargetPort = 48620 -- (int) [default: 48621] TCP port to send data to
|
Perun.TCPTargetPort = 48621 -- (int) [default: 48621] TCP port to send data to
|
||||||
Perun.TCPPerunHost = "localhost" -- (string) [default: "localhost"] IP adress of the Perun instance or "localhost"
|
Perun.TCPPerunHost = "localhost" -- (string) [default: "localhost"] IP adress of the Perun instance or "localhost"
|
||||||
Perun.Instance = 1 -- (int) [default: 1] Id number of instance (if multiple DCS instances are to run at the same PC)
|
Perun.Instance = 1 -- (int) [default: 1] Id number of instance (if multiple DCS instances are to run at the same PC)
|
||||||
Perun.JsonStatusLocation = "Scripts\\Json\\" -- (string) [default: "Scripts\\Json\\"] Folder relative do user's SaveGames DCS folder -> status file updated each RefreshMission
|
Perun.JsonStatusLocation = "Scripts\\Json\\" -- (string) [default: "Scripts\\Json\\"] Folder relative do user's SaveGames DCS folder -> status file updated each RefreshMission
|
||||||
@@ -22,7 +22,7 @@ Perun.MOTD_L2 = "Wymagamy obecnosci DCS SRS oraz TeamSpeak - szczegoly na forum"
|
|||||||
-- ###################### END OF SETTINGS - DO NOT MODIFY OUTSIDE THIS SECTION ######################
|
-- ###################### END OF SETTINGS - DO NOT MODIFY OUTSIDE THIS SECTION ######################
|
||||||
|
|
||||||
-- Variable init
|
-- Variable init
|
||||||
Perun.Version = "v0.9.3"
|
Perun.Version = "v0.11.0"
|
||||||
Perun.StatusData = {}
|
Perun.StatusData = {}
|
||||||
Perun.SlotsData = {}
|
Perun.SlotsData = {}
|
||||||
Perun.MissionData = {}
|
Perun.MissionData = {}
|
||||||
@@ -138,7 +138,11 @@ end
|
|||||||
|
|
||||||
Perun.GetCategory = function(id)
|
Perun.GetCategory = function(id)
|
||||||
-- Helper function returns object category basing on https://pastebin.com/GUAXrd2U
|
-- Helper function returns object category basing on https://pastebin.com/GUAXrd2U
|
||||||
local _killed_target_category = DCS.getUnitTypeAttribute(id, "category")
|
local _killed_target_category = "Other"
|
||||||
|
|
||||||
|
-- Sometimes we get empty object id (seems like DCS API bug)
|
||||||
|
if id ~= nil and id ~= "" then
|
||||||
|
_killed_target_category = DCS.getUnitTypeAttribute(id, "category")
|
||||||
|
|
||||||
-- Below, simple hack to get the propper category when DCS API is not returning correct value
|
-- Below, simple hack to get the propper category when DCS API is not returning correct value
|
||||||
if _killed_target_category == nil then
|
if _killed_target_category == nil then
|
||||||
@@ -152,6 +156,8 @@ Perun.GetCategory = function(id)
|
|||||||
_killed_target_category = "Helicopters"
|
_killed_target_category = "Helicopters"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
return _killed_target_category
|
return _killed_target_category
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -163,7 +169,11 @@ Perun.SideID2Name = function(id)
|
|||||||
[2] = 'BLUE',
|
[2] = 'BLUE',
|
||||||
[3] = 'NEUTRAL', -- TBD check once this is released in DCS
|
[3] = 'NEUTRAL', -- TBD check once this is released in DCS
|
||||||
}
|
}
|
||||||
|
if id > 0 then
|
||||||
return _sides[id]
|
return _sides[id]
|
||||||
|
else
|
||||||
|
return "?"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
Perun.AddLog = function(text,LogLevel)
|
Perun.AddLog = function(text,LogLevel)
|
||||||
@@ -488,6 +498,7 @@ Perun.LogStatsCount = function(argPlayerID,argAction,argTimer)
|
|||||||
_TempData['ps_kills_infantry'] = 0
|
_TempData['ps_kills_infantry'] = 0
|
||||||
_TempData['ps_kills_ships'] = 0
|
_TempData['ps_kills_ships'] = 0
|
||||||
_TempData['ps_kills_fortification'] = 0
|
_TempData['ps_kills_fortification'] = 0
|
||||||
|
_TempData['ps_kills_artillery'] = 0
|
||||||
_TempData['ps_kills_other'] = 0
|
_TempData['ps_kills_other'] = 0
|
||||||
_TempData['ps_airfield_takeoffs'] = 0
|
_TempData['ps_airfield_takeoffs'] = 0
|
||||||
_TempData['ps_airfield_landings'] = 0
|
_TempData['ps_airfield_landings'] = 0
|
||||||
@@ -546,6 +557,8 @@ Perun.LogStatsCount = function(argPlayerID,argAction,argTimer)
|
|||||||
Perun.StatData[_player_hash]['ps_kills_infantry']=Perun.StatData[_player_hash]['ps_kills_infantry']+1
|
Perun.StatData[_player_hash]['ps_kills_infantry']=Perun.StatData[_player_hash]['ps_kills_infantry']+1
|
||||||
elseif argAction == "kill_Fortification" then
|
elseif argAction == "kill_Fortification" then
|
||||||
Perun.StatData[_player_hash]['ps_kills_fortification']=Perun.StatData[_player_hash]['ps_kills_fortification']+1
|
Perun.StatData[_player_hash]['ps_kills_fortification']=Perun.StatData[_player_hash]['ps_kills_fortification']+1
|
||||||
|
elseif argAction == "kill_Artillery" then
|
||||||
|
Perun.StatData[_player_hash]['ps_kills_artillery']=Perun.StatData[_player_hash]['ps_kills_artillery']+1
|
||||||
elseif argAction == "kill_Other" then
|
elseif argAction == "kill_Other" then
|
||||||
Perun.StatData[_player_hash]['ps_kills_other']=Perun.StatData[_player_hash]['ps_kills_other']+1
|
Perun.StatData[_player_hash]['ps_kills_other']=Perun.StatData[_player_hash]['ps_kills_other']+1
|
||||||
elseif argAction == "kill_PvP" then
|
elseif argAction == "kill_PvP" then
|
||||||
@@ -782,6 +795,7 @@ end
|
|||||||
Perun.onGameEvent = function (eventName,arg1,arg2,arg3,arg4,arg5,arg6,arg7)
|
Perun.onGameEvent = function (eventName,arg1,arg2,arg3,arg4,arg5,arg6,arg7)
|
||||||
-- Game event has occured
|
-- Game event has occured
|
||||||
Perun.AddLog("Event handler for ".. eventName .. " started",2)
|
Perun.AddLog("Event handler for ".. eventName .. " started",2)
|
||||||
|
|
||||||
if eventName == "friendly_fire" then
|
if eventName == "friendly_fire" then
|
||||||
--"friendly_fire", playerID, weaponName, victimPlayerID
|
--"friendly_fire", playerID, weaponName, victimPlayerID
|
||||||
if arg2 == "" then
|
if arg2 == "" then
|
||||||
@@ -828,6 +842,8 @@ Perun.onGameEvent = function (eventName,arg1,arg2,arg3,arg4,arg5,arg6,arg7)
|
|||||||
_temp_event_type="kill_Infantry"
|
_temp_event_type="kill_Infantry"
|
||||||
elseif _temp_category == "Fortification" then
|
elseif _temp_category == "Fortification" then
|
||||||
_temp_event_type="kill_Fortification"
|
_temp_event_type="kill_Fortification"
|
||||||
|
elseif _temp_category == "Artillery" or _temp_category == "MissilesSS" then
|
||||||
|
_temp_event_type="kill_Artillery"
|
||||||
else
|
else
|
||||||
_temp_event_type="kill_Other"
|
_temp_event_type="kill_Other"
|
||||||
end
|
end
|
||||||
@@ -848,7 +864,12 @@ Perun.onGameEvent = function (eventName,arg1,arg2,arg3,arg4,arg5,arg6,arg7)
|
|||||||
arg7 = "Cannon"
|
arg7 = "Cannon"
|
||||||
end
|
end
|
||||||
|
|
||||||
Perun.LogEvent(eventName,Perun.SideID2Name(arg3) .. _temp_killers .. " in " .. arg2 .. " killed " .. Perun.SideID2Name(arg6) .. _temp_victims .. " in " .. arg5 .. " using " .. arg7 .. " [".. Perun.GetCategory(arg5).."]",arg7,Perun.GetCategory(arg5));
|
local victim_vehicle = arg5
|
||||||
|
if victim_vehicle == "" then
|
||||||
|
victim_vehicle = "?"
|
||||||
|
end
|
||||||
|
|
||||||
|
Perun.LogEvent(eventName,Perun.SideID2Name(arg3) .. _temp_killers .. " in " .. arg2 .. " killed " .. Perun.SideID2Name(arg6) .. _temp_victims .. " in " .. victim_vehicle .. " using " .. arg7 .. " [".. Perun.GetCategory(arg5).."]",arg7,Perun.GetCategory(arg5));
|
||||||
|
|
||||||
elseif eventName == "self_kill" then
|
elseif eventName == "self_kill" then
|
||||||
--"self_kill", playerID
|
--"self_kill", playerID
|
||||||
|
|||||||
@@ -8,13 +8,19 @@ EndProject
|
|||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Debug|x64 = Debug|x64
|
||||||
Release|Any CPU = Release|Any CPU
|
Release|Any CPU = Release|Any CPU
|
||||||
|
Release|x64 = Release|x64
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{5A710507-92E9-4664-9B91-918B8B82F107}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{5A710507-92E9-4664-9B91-918B8B82F107}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{5A710507-92E9-4664-9B91-918B8B82F107}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{5A710507-92E9-4664-9B91-918B8B82F107}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{5A710507-92E9-4664-9B91-918B8B82F107}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{5A710507-92E9-4664-9B91-918B8B82F107}.Debug|x64.Build.0 = Debug|x64
|
||||||
{5A710507-92E9-4664-9B91-918B8B82F107}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{5A710507-92E9-4664-9B91-918B8B82F107}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{5A710507-92E9-4664-9B91-918B8B82F107}.Release|Any CPU.Build.0 = Release|Any CPU
|
{5A710507-92E9-4664-9B91-918B8B82F107}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{5A710507-92E9-4664-9B91-918B8B82F107}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{5A710507-92E9-4664-9B91-918B8B82F107}.Release|x64.Build.0 = Release|x64
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ public class DatabaseController
|
|||||||
SQLQueryTxt += "UPDATE `pe_DataPlayers` SET `pe_DataPlayers_updated`=" + TCPFrameTimestamp + " WHERE `pe_DataPlayers_ucid`='" + TCPFrame.payload.stat_ucid + "';";
|
SQLQueryTxt += "UPDATE `pe_DataPlayers` SET `pe_DataPlayers_updated`=" + TCPFrameTimestamp + " WHERE `pe_DataPlayers_ucid`='" + TCPFrame.payload.stat_ucid + "';";
|
||||||
SQLQueryTxt += "INSERT INTO `pe_DataTypes` (`pe_DataTypes_name`) SELECT '" + TCPFrame.payload.stat_data_type + "' FROM DUAL WHERE NOT EXISTS (SELECT * FROM `pe_DataTypes` where `pe_DataTypes_name` = '" + TCPFrame.payload.stat_data_type + "');";
|
SQLQueryTxt += "INSERT INTO `pe_DataTypes` (`pe_DataTypes_name`) SELECT '" + TCPFrame.payload.stat_data_type + "' FROM DUAL WHERE NOT EXISTS (SELECT * FROM `pe_DataTypes` where `pe_DataTypes_name` = '" + TCPFrame.payload.stat_data_type + "');";
|
||||||
SQLQueryTxt += "INSERT INTO `pe_LogStats` (`pe_LogStats_playerid`,`pe_LogStats_missionhash_id`,`pe_LogStats_typeid`) SELECT (SELECT `pe_DataPlayers_id` from `pe_DataPlayers` WHERE `pe_DataPlayers_ucid` = '" + TCPFrame.payload.stat_ucid + "'), (SELECT `pe_DataMissionHashes_id` FROM `pe_DataMissionHashes` WHERE `pe_DataMissionHashes_hash` = '" + TCPFrame.payload.stat_missionhash + "'), (SELECT pe_DataTypes_id FROM `pe_DataTypes` where `pe_DataTypes_name` = '" + TCPFrame.payload.stat_data_type + "') FROM DUAL WHERE NOT EXISTS (SELECT * FROM `pe_LogStats` WHERE `pe_LogStats_missionhash_id`=(SELECT `pe_DataMissionHashes_id` FROM `pe_DataMissionHashes` WHERE `pe_DataMissionHashes_hash` = '" + TCPFrame.payload.stat_missionhash + "') AND `pe_LogStats_playerid` = (SELECT `pe_DataPlayers_id` from `pe_DataPlayers` WHERE `pe_DataPlayers_ucid` = '" + TCPFrame.payload.stat_ucid + "') AND `pe_LogStats_typeid`= (SELECT pe_DataTypes_id FROM `pe_DataTypes` where `pe_DataTypes_name` = '" + TCPFrame.payload.stat_data_type + "'));";
|
SQLQueryTxt += "INSERT INTO `pe_LogStats` (`pe_LogStats_playerid`,`pe_LogStats_missionhash_id`,`pe_LogStats_typeid`) SELECT (SELECT `pe_DataPlayers_id` from `pe_DataPlayers` WHERE `pe_DataPlayers_ucid` = '" + TCPFrame.payload.stat_ucid + "'), (SELECT `pe_DataMissionHashes_id` FROM `pe_DataMissionHashes` WHERE `pe_DataMissionHashes_hash` = '" + TCPFrame.payload.stat_missionhash + "'), (SELECT pe_DataTypes_id FROM `pe_DataTypes` where `pe_DataTypes_name` = '" + TCPFrame.payload.stat_data_type + "') FROM DUAL WHERE NOT EXISTS (SELECT * FROM `pe_LogStats` WHERE `pe_LogStats_missionhash_id`=(SELECT `pe_DataMissionHashes_id` FROM `pe_DataMissionHashes` WHERE `pe_DataMissionHashes_hash` = '" + TCPFrame.payload.stat_missionhash + "') AND `pe_LogStats_playerid` = (SELECT `pe_DataPlayers_id` from `pe_DataPlayers` WHERE `pe_DataPlayers_ucid` = '" + TCPFrame.payload.stat_ucid + "') AND `pe_LogStats_typeid`= (SELECT pe_DataTypes_id FROM `pe_DataTypes` where `pe_DataTypes_name` = '" + TCPFrame.payload.stat_data_type + "'));";
|
||||||
SQLQueryTxt += "UPDATE `pe_LogStats` SET `ps_time`=" + TCPFrame.payload.stat_data_perun.ps_time + ",`pe_LogStats_seat`=" + TCPFrame.payload.stat_data_subslot + ",`pe_LogStats_masterslot`=" + TCPFrame.payload.stat_data_masterslot + ",`ps_kills_fortification`=" + TCPFrame.payload.stat_data_perun.ps_kills_fortification + ",`ps_other_landings`=" + TCPFrame.payload.stat_data_perun.ps_other_landings + ",`ps_other_takeoffs`=" + TCPFrame.payload.stat_data_perun.ps_other_takeoffs + ",`ps_pvp`=" + TCPFrame.payload.stat_data_perun.ps_pvp + ",`ps_deaths`=" + TCPFrame.payload.stat_data_perun.ps_deaths + ",`ps_ejections`=" + TCPFrame.payload.stat_data_perun.ps_ejections + ",`ps_crashes`=" + TCPFrame.payload.stat_data_perun.ps_crashes + ",`ps_teamkills`=" + TCPFrame.payload.stat_data_perun.ps_teamkills + ",`ps_kills_planes`=" + TCPFrame.payload.stat_data_perun.ps_kills_planes + ",`ps_kills_helicopters`=" + TCPFrame.payload.stat_data_perun.ps_kills_helicopters + ",`ps_kills_air_defense`=" + TCPFrame.payload.stat_data_perun.ps_kills_air_defense + ",`ps_kills_armor`=" + TCPFrame.payload.stat_data_perun.ps_kills_armor + ",`ps_kills_unarmed`=" + TCPFrame.payload.stat_data_perun.ps_kills_unarmed + ",`ps_kills_infantry`=" + TCPFrame.payload.stat_data_perun.ps_kills_infantry + ",`ps_kills_ships`=" + TCPFrame.payload.stat_data_perun.ps_kills_ships + ",`ps_kills_other`=" + TCPFrame.payload.stat_data_perun.ps_kills_other + ",`ps_airfield_takeoffs`=" + TCPFrame.payload.stat_data_perun.ps_airfield_takeoffs + ",`ps_airfield_landings`=" + TCPFrame.payload.stat_data_perun.ps_airfield_landings + ",`ps_ship_takeoffs`=" + TCPFrame.payload.stat_data_perun.ps_ship_takeoffs + ",`ps_ship_landings`=" + TCPFrame.payload.stat_data_perun.ps_ship_landings + ",`ps_farp_takeoffs`=" + TCPFrame.payload.stat_data_perun.ps_farp_takeoffs + ",`ps_farp_landings`=" + TCPFrame.payload.stat_data_perun.ps_farp_landings + ", `pe_LogStats_datetime`='" + TCPFrame.payload.stat_datetime + "',`pe_LogStats_playerid` = (SELECT `pe_DataPlayers_id` from `pe_DataPlayers` WHERE `pe_DataPlayers_ucid` = '" + TCPFrame.payload.stat_ucid + "'),`pe_LogStats_missionhash_id`=(SELECT `pe_DataMissionHashes_id` FROM `pe_DataMissionHashes` WHERE `pe_DataMissionHashes_hash` = '" + TCPFrame.payload.stat_missionhash + "') WHERE `pe_LogStats_missionhash_id`=(SELECT `pe_DataMissionHashes_id` FROM `pe_DataMissionHashes` WHERE `pe_DataMissionHashes_hash` = '" + TCPFrame.payload.stat_missionhash + "') AND `pe_LogStats_playerid` = (SELECT `pe_DataPlayers_id` from `pe_DataPlayers` WHERE `pe_DataPlayers_ucid` = '" + TCPFrame.payload.stat_ucid + "') AND `pe_LogStats_typeid`=(SELECT pe_DataTypes_id FROM `pe_DataTypes` where `pe_DataTypes_name` = '" + TCPFrame.payload.stat_data_type + "');";
|
SQLQueryTxt += "UPDATE `pe_LogStats` SET `ps_time`=" + TCPFrame.payload.stat_data_perun.ps_time + ",`pe_LogStats_seat`=" + TCPFrame.payload.stat_data_subslot + ",`pe_LogStats_masterslot`=" + TCPFrame.payload.stat_data_masterslot + ",`ps_kills_fortification`=" + TCPFrame.payload.stat_data_perun.ps_kills_fortification +",`ps_kills_artillery`=" + TCPFrame.payload.stat_data_perun.ps_kills_artillery + ",`ps_other_landings`=" + TCPFrame.payload.stat_data_perun.ps_other_landings + ",`ps_other_takeoffs`=" + TCPFrame.payload.stat_data_perun.ps_other_takeoffs + ",`ps_pvp`=" + TCPFrame.payload.stat_data_perun.ps_pvp + ",`ps_deaths`=" + TCPFrame.payload.stat_data_perun.ps_deaths + ",`ps_ejections`=" + TCPFrame.payload.stat_data_perun.ps_ejections + ",`ps_crashes`=" + TCPFrame.payload.stat_data_perun.ps_crashes + ",`ps_teamkills`=" + TCPFrame.payload.stat_data_perun.ps_teamkills + ",`ps_kills_planes`=" + TCPFrame.payload.stat_data_perun.ps_kills_planes + ",`ps_kills_helicopters`=" + TCPFrame.payload.stat_data_perun.ps_kills_helicopters + ",`ps_kills_air_defense`=" + TCPFrame.payload.stat_data_perun.ps_kills_air_defense + ",`ps_kills_armor`=" + TCPFrame.payload.stat_data_perun.ps_kills_armor + ",`ps_kills_unarmed`=" + TCPFrame.payload.stat_data_perun.ps_kills_unarmed + ",`ps_kills_infantry`=" + TCPFrame.payload.stat_data_perun.ps_kills_infantry + ",`ps_kills_ships`=" + TCPFrame.payload.stat_data_perun.ps_kills_ships + ",`ps_kills_other`=" + TCPFrame.payload.stat_data_perun.ps_kills_other + ",`ps_airfield_takeoffs`=" + TCPFrame.payload.stat_data_perun.ps_airfield_takeoffs + ",`ps_airfield_landings`=" + TCPFrame.payload.stat_data_perun.ps_airfield_landings + ",`ps_ship_takeoffs`=" + TCPFrame.payload.stat_data_perun.ps_ship_takeoffs + ",`ps_ship_landings`=" + TCPFrame.payload.stat_data_perun.ps_ship_landings + ",`ps_farp_takeoffs`=" + TCPFrame.payload.stat_data_perun.ps_farp_takeoffs + ",`ps_farp_landings`=" + TCPFrame.payload.stat_data_perun.ps_farp_landings + ", `pe_LogStats_datetime`='" + TCPFrame.payload.stat_datetime + "',`pe_LogStats_playerid` = (SELECT `pe_DataPlayers_id` from `pe_DataPlayers` WHERE `pe_DataPlayers_ucid` = '" + TCPFrame.payload.stat_ucid + "'),`pe_LogStats_missionhash_id`=(SELECT `pe_DataMissionHashes_id` FROM `pe_DataMissionHashes` WHERE `pe_DataMissionHashes_hash` = '" + TCPFrame.payload.stat_missionhash + "') WHERE `pe_LogStats_missionhash_id`=(SELECT `pe_DataMissionHashes_id` FROM `pe_DataMissionHashes` WHERE `pe_DataMissionHashes_hash` = '" + TCPFrame.payload.stat_missionhash + "') AND `pe_LogStats_playerid` = (SELECT `pe_DataPlayers_id` from `pe_DataPlayers` WHERE `pe_DataPlayers_ucid` = '" + TCPFrame.payload.stat_ucid + "') AND `pe_LogStats_typeid`=(SELECT pe_DataTypes_id FROM `pe_DataTypes` where `pe_DataTypes_name` = '" + TCPFrame.payload.stat_data_type + "');";
|
||||||
}
|
}
|
||||||
else if (TCPFrameType == "53")
|
else if (TCPFrameType == "53")
|
||||||
{
|
{
|
||||||
@@ -90,9 +90,41 @@ public class DatabaseController
|
|||||||
|
|
||||||
|
|
||||||
SQLQueryTxt = "INSERT INTO `pe_DataRaw` (`pe_dataraw_type`,`pe_dataraw_instance`) SELECT '" + TCPFrameType + "','" + TCPFrameInstance + "' FROM DUAL WHERE NOT EXISTS (SELECT * FROM `pe_DataRaw` WHERE `pe_dataraw_type` = '" + TCPFrameType + "' AND `pe_dataraw_instance` = " + TCPFrameInstance + ");";
|
SQLQueryTxt = "INSERT INTO `pe_DataRaw` (`pe_dataraw_type`,`pe_dataraw_instance`) SELECT '" + TCPFrameType + "','" + TCPFrameInstance + "' FROM DUAL WHERE NOT EXISTS (SELECT * FROM `pe_DataRaw` WHERE `pe_dataraw_type` = '" + TCPFrameType + "' AND `pe_dataraw_instance` = " + TCPFrameInstance + ");";
|
||||||
SQLQueryTxt += "UPDATE `pe_DataRaw` SET `pe_dataraw_payload` = JSON_QUOTE(@PAR_TCPFramePayload), `pe_dataraw_updated`=" + TCPFrameTimestamp + " WHERE `pe_dataraw_type`=" + TCPFrameType + " AND `pe_dataraw_instance` = " + TCPFrameInstance + ";";
|
SQLQueryTxt += "UPDATE `pe_DataRaw` SET `pe_dataraw_payload` = @PAR_TCPFramePayload, `pe_dataraw_updated`=" + TCPFrameTimestamp + " WHERE `pe_dataraw_type`=" + TCPFrameType + " AND `pe_dataraw_instance` = " + TCPFrameInstance + ";";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handling of special data (like parsing JSONs to DB)
|
||||||
|
switch (Int32.Parse(TCPFrameType))
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
// General status information
|
||||||
|
SQLQueryTxt += "INSERT INTO `pe_OnlineStatus` (`pe_OnlineStatus_instance`) SELECT '" + Int32.Parse(TCPFrameInstance) + "' FROM DUAL WHERE NOT EXISTS(SELECT * FROM `pe_OnlineStatus` WHERE `pe_OnlineStatus_instance` = '" + Int32.Parse(TCPFrameInstance) + "');";
|
||||||
|
SQLQueryTxt += "UPDATE `pe_OnlineStatus` SET `pe_OnlineStatus_perunversion_winapp` = '" + TCPFrame.payload.v_win + "', `pe_OnlineStatus_perunversion_dcshook` ='" + TCPFrame.payload.v_dcs_hook + "' WHERE `pe_OnlineStatus_instance` = '" + Int32.Parse(TCPFrameInstance) + "' ;";
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
// SRS Data
|
||||||
|
SQLQueryTxt += "DELETE FROM pe_OnlinePlayers WHERE pe_OnlinePlayers_instance = " + Int32.Parse(TCPFrameInstance) +";";
|
||||||
|
|
||||||
|
int player_count = 0;
|
||||||
|
foreach (var record_player in TCPFrame.payload.players)
|
||||||
|
{
|
||||||
|
SQLQueryTxt += "INSERT INTO `pe_OnlinePlayers` (`pe_OnlinePlayers_id`, `pe_OnlinePlayers_instance`, `pe_OnlinePlayers_ping`, `pe_OnlinePlayers_side`, `pe_OnlinePlayers_slot`, `pe_OnlinePlayers_ucid`) VALUES ("+ record_player.id + ", '"+ Int32.Parse(TCPFrameInstance) + "', '" + record_player.ping + "', '" + record_player.side + "', '" + record_player.slot + "', '" + record_player.ucid + "');";
|
||||||
|
player_count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
//SQLQueryTxt += "DELETE FROM pe_OnlineStatus WHERE pe_OnlineStatus_instance = " + Int32.Parse(TCPFrameInstance) + ";";
|
||||||
|
SQLQueryTxt += "INSERT INTO `pe_OnlineStatus` (`pe_OnlineStatus_instance`) SELECT '" + Int32.Parse(TCPFrameInstance) + "' FROM DUAL WHERE NOT EXISTS(SELECT * FROM `pe_OnlineStatus` WHERE `pe_OnlineStatus_instance` = '" + Int32.Parse(TCPFrameInstance) + "');";
|
||||||
|
SQLQueryTxt += "UPDATE `pe_OnlineStatus` SET `pe_OnlineStatus_theatre` = '" + TCPFrame.payload.mission.theatre + "', `pe_OnlineStatus_name` = '" + TCPFrame.payload.mission.name + "' , `pe_OnlineStatus_pause` = '" + TCPFrame.payload.mission.pause + "', `pe_OnlineStatus_multiplayer` = '" + TCPFrame.payload.mission.multiplayer + "', `pe_OnlineStatus_realtime` = '" + TCPFrame.payload.mission.realtime + "', `pe_OnlineStatus_modeltime` = '" + TCPFrame.payload.mission.modeltime + "', `pe_OnlineStatus_players` = " + player_count + " WHERE `pe_OnlineStatus_instance` = '" + Int32.Parse(TCPFrameInstance) + "';";
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Connect to mysql and execute sql
|
// Connect to mysql and execute sql
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -77,6 +77,7 @@
|
|||||||
this.con_img_dcs = new System.Windows.Forms.PictureBox();
|
this.con_img_dcs = new System.Windows.Forms.PictureBox();
|
||||||
this.con_img_db = new System.Windows.Forms.PictureBox();
|
this.con_img_db = new System.Windows.Forms.PictureBox();
|
||||||
this.con_Button_Add_Marker = new System.Windows.Forms.Button();
|
this.con_Button_Add_Marker = new System.Windows.Forms.Button();
|
||||||
|
this.TIM_Autostart = new System.Windows.Forms.Timer(this.components);
|
||||||
this.con_GroupBox_1.SuspendLayout();
|
this.con_GroupBox_1.SuspendLayout();
|
||||||
this.con_GroupBox_2.SuspendLayout();
|
this.con_GroupBox_2.SuspendLayout();
|
||||||
this.con_GroupBox_3.SuspendLayout();
|
this.con_GroupBox_3.SuspendLayout();
|
||||||
@@ -524,6 +525,10 @@
|
|||||||
this.con_Button_Add_Marker.UseVisualStyleBackColor = true;
|
this.con_Button_Add_Marker.UseVisualStyleBackColor = true;
|
||||||
this.con_Button_Add_Marker.Click += new System.EventHandler(this.con_Button_Add_Marker_Click);
|
this.con_Button_Add_Marker.Click += new System.EventHandler(this.con_Button_Add_Marker_Click);
|
||||||
//
|
//
|
||||||
|
// TIM_Autostart
|
||||||
|
//
|
||||||
|
this.TIM_Autostart.Interval = 500;
|
||||||
|
//
|
||||||
// form_Main
|
// form_Main
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
@@ -573,7 +578,10 @@
|
|||||||
((System.ComponentModel.ISupportInitialize)(this.con_img_db)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.con_img_db)).EndInit();
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
this.PerformLayout();
|
this.PerformLayout();
|
||||||
|
// TIM_Autostart
|
||||||
|
//
|
||||||
|
this.TIM_Autostart.Tick += new System.EventHandler(this.TIM_Autostart_Tick);
|
||||||
|
//
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@@ -625,6 +633,7 @@
|
|||||||
private System.Windows.Forms.Label label13;
|
private System.Windows.Forms.Label label13;
|
||||||
private System.Windows.Forms.Label label14;
|
private System.Windows.Forms.Label label14;
|
||||||
private System.Windows.Forms.Button con_Button_Add_Marker;
|
private System.Windows.Forms.Button con_Button_Add_Marker;
|
||||||
|
private System.Windows.Forms.Timer TIM_Autostart;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,36 +36,65 @@ namespace Perun_v1
|
|||||||
{
|
{
|
||||||
// Get argument server port
|
// Get argument server port
|
||||||
if (args[1] != null)
|
if (args[1] != null)
|
||||||
|
{
|
||||||
|
if (args[1] != "-1")
|
||||||
{
|
{
|
||||||
con_txt_dcs_server_port.Text = args[1];
|
con_txt_dcs_server_port.Text = args[1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (args.Length > 2)
|
if (args.Length > 2)
|
||||||
{
|
{
|
||||||
// Get argument instance id
|
// Get argument instance id
|
||||||
if (args[2] != null)
|
if (args[2] != null)
|
||||||
|
{
|
||||||
|
if (args[2] != "-1")
|
||||||
{
|
{
|
||||||
con_txt_dcs_instance.Text = args[2];
|
con_txt_dcs_instance.Text = args[2];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (args.Length > 3)
|
if (args.Length > 3)
|
||||||
{
|
{
|
||||||
// Get argument DCS SRS file path
|
// Get argument DCS SRS file path
|
||||||
if (args[3] != null)
|
if (args[3] != null)
|
||||||
|
{
|
||||||
|
if (args[3] != "-1")
|
||||||
{
|
{
|
||||||
con_txt_3rd_srs.Text = args[3];
|
con_txt_3rd_srs.Text = args[3];
|
||||||
con_check_3rd_srs.Checked = true;
|
con_check_3rd_srs.Checked = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (args.Length > 4)
|
if (args.Length > 4)
|
||||||
{
|
{
|
||||||
// Get argument lotATC file path
|
// Get argument lotATC file path
|
||||||
if (args[4] != null)
|
if (args[4] != null)
|
||||||
|
{
|
||||||
|
if (args[4] != "-1")
|
||||||
{
|
{
|
||||||
con_txt_3rd_lotatc.Text = args[4];
|
con_txt_3rd_lotatc.Text = args[4];
|
||||||
con_check_3rd_lotatc.Checked = true;
|
con_check_3rd_lotatc.Checked = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args.Length > 5)
|
||||||
|
{
|
||||||
|
// Get argument lotATC file path
|
||||||
|
if (args[5] != null)
|
||||||
|
{
|
||||||
|
if (args[5] == "1")
|
||||||
|
{
|
||||||
|
if (args[5] != "-1")
|
||||||
|
{
|
||||||
|
TIM_Autostart.Enabled = true;
|
||||||
|
PerunHelper.AddLog(ref Globals.AppLogHistory, "Autostart parameter provided", 0, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Initialize controls
|
// Initialize controls
|
||||||
con_img_db.Image = (Image)Properties.Resources.ResourceManager.GetObject("status_disconnected");
|
con_img_db.Image = (Image)Properties.Resources.ResourceManager.GetObject("status_disconnected");
|
||||||
@@ -197,6 +226,7 @@ namespace Perun_v1
|
|||||||
// Send initial data
|
// Send initial data
|
||||||
Tim_MySQL_Tick(null, null);
|
Tim_MySQL_Tick(null, null);
|
||||||
tim_3rdparties_Tick(null, null);
|
tim_3rdparties_Tick(null, null);
|
||||||
|
TIM_Autostart.Enabled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void con_Button_Listen_OFF_Click(object sender, EventArgs e)
|
private void con_Button_Listen_OFF_Click(object sender, EventArgs e)
|
||||||
@@ -515,25 +545,12 @@ namespace Perun_v1
|
|||||||
int temp = raw_lotatc.Clients[i].RadioInfo.radios.Count - 1;
|
int temp = raw_lotatc.Clients[i].RadioInfo.radios.Count - 1;
|
||||||
for (int j = temp; j >= 0; j--)
|
for (int j = temp; j >= 0; j--)
|
||||||
{
|
{
|
||||||
raw_lotatc.Clients[i].RadioInfo.radios[j].enc.Parent.Remove();
|
|
||||||
raw_lotatc.Clients[i].RadioInfo.radios[j].encKey.Parent.Remove();
|
|
||||||
raw_lotatc.Clients[i].RadioInfo.radios[j].encMode.Parent.Remove();
|
|
||||||
raw_lotatc.Clients[i].RadioInfo.radios[j].freqMax.Parent.Remove();
|
|
||||||
raw_lotatc.Clients[i].RadioInfo.radios[j].freqMin.Parent.Remove();
|
|
||||||
raw_lotatc.Clients[i].RadioInfo.radios[j].modulation.Parent.Remove();
|
|
||||||
raw_lotatc.Clients[i].RadioInfo.radios[j].freqMode.Parent.Remove();
|
|
||||||
raw_lotatc.Clients[i].RadioInfo.radios[j].volMode.Parent.Remove();
|
|
||||||
raw_lotatc.Clients[i].RadioInfo.radios[j].expansion.Parent.Remove();
|
|
||||||
raw_lotatc.Clients[i].RadioInfo.radios[j].channel.Parent.Remove();
|
|
||||||
raw_lotatc.Clients[i].RadioInfo.radios[j].simul.Parent.Remove();
|
|
||||||
|
|
||||||
if (raw_lotatc.Clients[i].RadioInfo.radios[j].name == "No Radio")
|
if (raw_lotatc.Clients[i].RadioInfo.radios[j].name == "No Radio")
|
||||||
{
|
{
|
||||||
raw_lotatc.Clients[i].RadioInfo.radios[j].Remove();
|
raw_lotatc.Clients[i].RadioInfo.radios[j].Remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
raw_lotatc.Clients[i].ClientChannelId.Parent.Remove();
|
|
||||||
raw_lotatc.Clients[i].RadioInfo.simultaneousTransmission.Parent.Remove();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -636,5 +653,12 @@ namespace Perun_v1
|
|||||||
// Added user marker
|
// Added user marker
|
||||||
PerunHelper.AddLog(ref Globals.AppLogHistory, "User Marker", 0, 1);
|
PerunHelper.AddLog(ref Globals.AppLogHistory, "User Marker", 0, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void TIM_Autostart_Tick(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
// Handle autostart parameter from command line
|
||||||
|
TIM_Autostart.Enabled = false; // Disable timer
|
||||||
|
con_Button_Listen_ON_Click(sender,e); // Simulate button click
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -419,6 +419,9 @@
|
|||||||
<metadata name="tim_MySQL.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="tim_MySQL.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>687, 19</value>
|
<value>687, 19</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
|
<metadata name="TIM_Autostart.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>800, 4</value>
|
||||||
|
</metadata>
|
||||||
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
<value>26</value>
|
<value>26</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
<SuiteName>Perun</SuiteName>
|
<SuiteName>Perun</SuiteName>
|
||||||
<WebPage>Perun.htm</WebPage>
|
<WebPage>Perun.htm</WebPage>
|
||||||
<ApplicationRevision>0</ApplicationRevision>
|
<ApplicationRevision>0</ApplicationRevision>
|
||||||
<ApplicationVersion>0.9.3.%2a</ApplicationVersion>
|
<ApplicationVersion>0.11.0.%2a</ApplicationVersion>
|
||||||
<UseApplicationTrust>false</UseApplicationTrust>
|
<UseApplicationTrust>false</UseApplicationTrust>
|
||||||
<CreateDesktopShortcut>true</CreateDesktopShortcut>
|
<CreateDesktopShortcut>true</CreateDesktopShortcut>
|
||||||
<PublishWizardCompleted>true</PublishWizardCompleted>
|
<PublishWizardCompleted>true</PublishWizardCompleted>
|
||||||
@@ -48,6 +48,7 @@
|
|||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
<CodeAnalysisRuleSet>SecurityRules.ruleset</CodeAnalysisRuleSet>
|
<CodeAnalysisRuleSet>SecurityRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
@@ -86,6 +87,28 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ApplicationManifest>Properties\app.manifest</ApplicationManifest>
|
<ApplicationManifest>Properties\app.manifest</ApplicationManifest>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<OutputPath>bin\x64\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
|
<LangVersion>7.3</LangVersion>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<CodeAnalysisRuleSet>SecurityRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<Prefer32Bit>true</Prefer32Bit>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||||
|
<OutputPath>bin\x64\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
|
<LangVersion>7.3</LangVersion>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<Prefer32Bit>true</Prefer32Bit>
|
||||||
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="BouncyCastle.Crypto, Version=1.8.3.0, Culture=neutral, PublicKeyToken=0e99375e54769942">
|
<Reference Include="BouncyCastle.Crypto, Version=1.8.3.0, Culture=neutral, PublicKeyToken=0e99375e54769942">
|
||||||
<HintPath>..\packages\BouncyCastle.1.8.3.1\lib\BouncyCastle.Crypto.dll</HintPath>
|
<HintPath>..\packages\BouncyCastle.1.8.3.1\lib\BouncyCastle.Crypto.dll</HintPath>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ using System.Runtime.InteropServices;
|
|||||||
[assembly: AssemblyConfiguration("")]
|
[assembly: AssemblyConfiguration("")]
|
||||||
[assembly: AssemblyCompany("Szymon Porwolik")]
|
[assembly: AssemblyCompany("Szymon Porwolik")]
|
||||||
[assembly: AssemblyProduct("Perun for DCS World")]
|
[assembly: AssemblyProduct("Perun for DCS World")]
|
||||||
[assembly: AssemblyCopyright("Copyright © 2019")]
|
[assembly: AssemblyCopyright("Copyright © 2019-2020")]
|
||||||
[assembly: AssemblyTrademark("")]
|
[assembly: AssemblyTrademark("")]
|
||||||
[assembly: AssemblyCulture("")]
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
@@ -33,7 +33,7 @@ using System.Runtime.InteropServices;
|
|||||||
// Możesz określić wszystkie wartości lub użyć domyślnych numerów kompilacji i poprawki
|
// Możesz określić wszystkie wartości lub użyć domyślnych numerów kompilacji i poprawki
|
||||||
// przy użyciu symbolu „*”, tak jak pokazano poniżej:
|
// przy użyciu symbolu „*”, tak jak pokazano poniżej:
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
[assembly: AssemblyVersion("0.9.3.0")]
|
[assembly: AssemblyVersion("0.11.0.0")]
|
||||||
[assembly: AssemblyFileVersion("0.9.3.0")]
|
[assembly: AssemblyFileVersion("0.11.0.0")]
|
||||||
[assembly: NeutralResourcesLanguage("en")]
|
[assembly: NeutralResourcesLanguage("en")]
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ CREATE TABLE IF NOT EXISTS `pe_Config` (
|
|||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
INSERT INTO `pe_Config` (`pe_Config_id`, `pe_Config_payload`) VALUES
|
INSERT INTO `pe_Config` (`pe_Config_id`, `pe_Config_payload`) VALUES
|
||||||
(1, 'v0.9.3');
|
(1, 'v0.11.0');
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `pe_DataMissionHashes`;
|
DROP TABLE IF EXISTS `pe_DataMissionHashes`;
|
||||||
CREATE TABLE IF NOT EXISTS `pe_DataMissionHashes` (
|
CREATE TABLE IF NOT EXISTS `pe_DataMissionHashes` (
|
||||||
@@ -28,7 +28,7 @@ CREATE TABLE IF NOT EXISTS `pe_DataMissionHashes` (
|
|||||||
PRIMARY KEY (`pe_DataMissionHashes_id`),
|
PRIMARY KEY (`pe_DataMissionHashes_id`),
|
||||||
UNIQUE KEY `UNIQUE_hash` (`pe_DataMissionHashes_hash`),
|
UNIQUE KEY `UNIQUE_hash` (`pe_DataMissionHashes_hash`),
|
||||||
KEY `pe_DataMissionHashes_instance` (`pe_DataMissionHashes_instance`)
|
KEY `pe_DataMissionHashes_instance` (`pe_DataMissionHashes_instance`)
|
||||||
ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `pe_DataPlayers`;
|
DROP TABLE IF EXISTS `pe_DataPlayers`;
|
||||||
CREATE TABLE IF NOT EXISTS `pe_DataPlayers` (
|
CREATE TABLE IF NOT EXISTS `pe_DataPlayers` (
|
||||||
@@ -41,7 +41,6 @@ CREATE TABLE IF NOT EXISTS `pe_DataPlayers` (
|
|||||||
UNIQUE KEY `UNIQUE_UCID` (`pe_DataPlayers_ucid`)
|
UNIQUE KEY `UNIQUE_UCID` (`pe_DataPlayers_ucid`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `pe_DataRaw`;
|
DROP TABLE IF EXISTS `pe_DataRaw`;
|
||||||
CREATE TABLE IF NOT EXISTS `pe_DataRaw` (
|
CREATE TABLE IF NOT EXISTS `pe_DataRaw` (
|
||||||
`pe_dataraw_type` tinyint(4) NOT NULL,
|
`pe_dataraw_type` tinyint(4) NOT NULL,
|
||||||
@@ -116,6 +115,7 @@ CREATE TABLE IF NOT EXISTS `pe_LogStats` (
|
|||||||
`pe_LogStats_typeid` int(11) DEFAULT NULL,
|
`pe_LogStats_typeid` int(11) DEFAULT NULL,
|
||||||
`pe_LogStats_masterslot` int(11) DEFAULT NULL,
|
`pe_LogStats_masterslot` int(11) DEFAULT NULL,
|
||||||
`pe_LogStats_seat` int(10) DEFAULT NULL,
|
`pe_LogStats_seat` int(10) DEFAULT NULL,
|
||||||
|
`ps_kills_X` int(11) UNSIGNED NOT NULL DEFAULT '0',
|
||||||
`ps_pvp` int(11) UNSIGNED NOT NULL DEFAULT '0',
|
`ps_pvp` int(11) UNSIGNED NOT NULL DEFAULT '0',
|
||||||
`ps_deaths` int(11) UNSIGNED NOT NULL DEFAULT '0',
|
`ps_deaths` int(11) UNSIGNED NOT NULL DEFAULT '0',
|
||||||
`ps_ejections` int(11) UNSIGNED NOT NULL DEFAULT '0',
|
`ps_ejections` int(11) UNSIGNED NOT NULL DEFAULT '0',
|
||||||
@@ -129,6 +129,7 @@ CREATE TABLE IF NOT EXISTS `pe_LogStats` (
|
|||||||
`ps_kills_infantry` int(11) UNSIGNED NOT NULL DEFAULT '0',
|
`ps_kills_infantry` int(11) UNSIGNED NOT NULL DEFAULT '0',
|
||||||
`ps_kills_ships` int(11) UNSIGNED NOT NULL DEFAULT '0',
|
`ps_kills_ships` int(11) UNSIGNED NOT NULL DEFAULT '0',
|
||||||
`ps_kills_fortification` int(10) UNSIGNED NOT NULL DEFAULT '0',
|
`ps_kills_fortification` int(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||||
|
`ps_kills_artillery` int(10) NOT NULL DEFAULT '0',
|
||||||
`ps_kills_other` int(11) UNSIGNED NOT NULL DEFAULT '0',
|
`ps_kills_other` int(11) UNSIGNED NOT NULL DEFAULT '0',
|
||||||
`ps_airfield_takeoffs` int(11) UNSIGNED NOT NULL DEFAULT '0',
|
`ps_airfield_takeoffs` int(11) UNSIGNED NOT NULL DEFAULT '0',
|
||||||
`ps_airfield_landings` int(11) UNSIGNED NOT NULL DEFAULT '0',
|
`ps_airfield_landings` int(11) UNSIGNED NOT NULL DEFAULT '0',
|
||||||
@@ -149,7 +150,6 @@ CREATE TABLE IF NOT EXISTS `pe_LogStats` (
|
|||||||
KEY `pe_LogStats_mstatus` (`pe_LogStats_mstatus`),
|
KEY `pe_LogStats_mstatus` (`pe_LogStats_mstatus`),
|
||||||
KEY `pe_LogStats_seat` (`pe_LogStats_seat`)
|
KEY `pe_LogStats_seat` (`pe_LogStats_seat`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
DROP TRIGGER IF EXISTS `pe_LogStats_UPDATE`;
|
DROP TRIGGER IF EXISTS `pe_LogStats_UPDATE`;
|
||||||
DELIMITER $$
|
DELIMITER $$
|
||||||
CREATE TRIGGER `pe_LogStats_UPDATE` BEFORE UPDATE ON `pe_LogStats` FOR EACH ROW BEGIN
|
CREATE TRIGGER `pe_LogStats_UPDATE` BEFORE UPDATE ON `pe_LogStats` FOR EACH ROW BEGIN
|
||||||
|
|||||||
BIN
04_Misc/01_Logo/PaganWinterPoster.png
Normal file
BIN
04_Misc/01_Logo/PaganWinterPoster.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 446 KiB |
BIN
04_Misc/01_Logo/Perun_logo.png
Normal file
BIN
04_Misc/01_Logo/Perun_logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 7.1 KiB |
BIN
04_Misc/01_Logo/Perun_logo.xcf
Normal file
BIN
04_Misc/01_Logo/Perun_logo.xcf
Normal file
Binary file not shown.
183
04_Misc/05_PHP_Example/index.php
Normal file
183
04_Misc/05_PHP_Example/index.php
Normal file
@@ -0,0 +1,183 @@
|
|||||||
|
<!-- This is integration example for https://github.com/szporwolik/perun - please keep the code as simple and straightforward as possible -->
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Perun - Example of PHP Integration</title>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="description" content="Example of PHP integration of Perun for DCS World">
|
||||||
|
<meta name="keywords" content="dcs world perun">
|
||||||
|
<meta name="author" content="VladMordock">
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
background-color: #eeeeee;
|
||||||
|
padding: 0 20px 0 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1,h2,h3 {
|
||||||
|
color: navy;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#header{
|
||||||
|
padding: 10px 0 10px 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#content{
|
||||||
|
border-top: 1px solid navy;
|
||||||
|
border-bottom: 1px solid navy;
|
||||||
|
padding: 10px 0 10px 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#footer{
|
||||||
|
padding: 10px 0 10px 0px;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
table, td{
|
||||||
|
border: 1px solid navy;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="header">
|
||||||
|
<h1>Perun Integration Example</h2>
|
||||||
|
<h2>PHP Integration example for Perun for DCS World</h2>
|
||||||
|
<h3>Get support at our <a href="https://discord.gg/MTahREx">Discord</a>
|
||||||
|
</div>
|
||||||
|
<div id="content">
|
||||||
|
<?php
|
||||||
|
// Configure database connection - put your database address and credentials here
|
||||||
|
$config_db_username="CHANGE_ME"; // <<=== CHANGE TO YOUR MYSQL SERVER USERNAME
|
||||||
|
$config_db_password="CHANGE_ME"; // <<=== CHANGE TO YOUR MYSQL SERVER PASSWORD
|
||||||
|
$config_db_host="CHANGE_ME"; // <<=== CHANGE TO YOUR MYSQL SERVER ADDRESS
|
||||||
|
$config_db_database="CHANGE_ME"; // <<=== CHANGE TO YOUR MYSQL DATABASE
|
||||||
|
|
||||||
|
// Try to connect to the database
|
||||||
|
$mysqli = new mysqli($config_db_host, $config_db_username, $config_db_password, $config_db_database);
|
||||||
|
|
||||||
|
// Check connection
|
||||||
|
if ($mysqli->connect_errno) {
|
||||||
|
printf("Connect failed: %s\n", $mysqli->connect_error);
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Some Examples
|
||||||
|
// List last 5 missions at the server
|
||||||
|
echo "<h3>List last 5 missions at the server</h3>";
|
||||||
|
if ($result = $mysqli->query("SELECT * FROM `pe_DataMissionHashes` ORDER BY `pe_DataMissionHashes`.`pe_DataMissionHashes_datetime` DESC LIMIT 5")) {
|
||||||
|
echo "<table>";
|
||||||
|
while($row = mysqli_fetch_array($result))
|
||||||
|
{
|
||||||
|
echo "<tr>";
|
||||||
|
echo "<td>" . $row['pe_DataMissionHashes_id'] . "</td>";
|
||||||
|
echo "<td>" . $row['pe_DataMissionHashes_hash'] . "</td>";
|
||||||
|
echo "<td>" . $row['pe_DataMissionHashes_datetime'] . "</td>";
|
||||||
|
echo "</tr>";
|
||||||
|
}
|
||||||
|
echo "</table>";
|
||||||
|
|
||||||
|
$result->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
// List last 5
|
||||||
|
echo "<h3>List last 5 players known server </h3>";
|
||||||
|
if ($result = $mysqli->query("SELECT * FROM `pe_DataPlayers` ORDER BY `pe_DataPlayers`.`pe_DataPlayers_updated` DESC LIMIT 5")) {
|
||||||
|
echo "<table>";
|
||||||
|
while($row = mysqli_fetch_array($result))
|
||||||
|
{
|
||||||
|
echo "<tr>";
|
||||||
|
echo "<td>" . $row['pe_DataPlayers_id'] . "</td>";
|
||||||
|
echo "<td>" . $row['pe_DataPlayers_ucid'] . "</td>";
|
||||||
|
echo "<td>" . $row['pe_DataPlayers_lastname'] . "</td>";
|
||||||
|
echo "<td>" . $row['pe_DataPlayers_updated'] . "</td>";
|
||||||
|
echo "</tr>";
|
||||||
|
}
|
||||||
|
echo "</table>";
|
||||||
|
|
||||||
|
$result->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
// List last 5 chat messages
|
||||||
|
echo "<h3>List last 5 chat messages (note: INNER JOIN is used to pull the player's name from other table)</h3>";
|
||||||
|
if ($result = $mysqli->query("SELECT * FROM `pe_LogChat` INNER JOIN `pe_DataPlayers` on `pe_LogChat`.pe_LogChat_playerid = `pe_DataPlayers`.pe_DataPlayers_id ORDER BY `pe_LogChat`.`pe_LogChat_datetime` DESC LIMIT 5")) {
|
||||||
|
echo "<table>";
|
||||||
|
while($row = mysqli_fetch_array($result))
|
||||||
|
{
|
||||||
|
echo "<tr>";
|
||||||
|
echo "<td>" . $row['pe_LogChat_datetime'] . "</td>";
|
||||||
|
echo "<td>" . $row['pe_DataPlayers_lastname'] . "</td>";
|
||||||
|
echo "<td>" . $row['pe_LogChat_msg'] . "</td>";
|
||||||
|
echo "</tr>";
|
||||||
|
}
|
||||||
|
echo "</table>";
|
||||||
|
|
||||||
|
$result->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// List last 5 events
|
||||||
|
echo "<h3>List last 5 events</h3>";
|
||||||
|
if ($result = $mysqli->query("SELECT * FROM `pe_LogEvent` ORDER BY `pe_LogEvent_datetime` DESC LIMIT 5")) {
|
||||||
|
echo "<table>";
|
||||||
|
while($row = mysqli_fetch_array($result))
|
||||||
|
{
|
||||||
|
echo "<tr>";
|
||||||
|
echo "<td>" . $row['pe_LogEvent_datetime'] . "</td>";
|
||||||
|
echo "<td>" . $row['pe_LogEvent_content'] . "</td>";
|
||||||
|
echo "</tr>";
|
||||||
|
}
|
||||||
|
echo "</table>";
|
||||||
|
|
||||||
|
$result->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
// List last statistics
|
||||||
|
echo "<h3>List last statistics (note: multiple INNER JOINs is used to pull information from other table)</h3>";
|
||||||
|
if ($result = $mysqli->query("SELECT * FROM `pe_LogStats` INNER JOIN `pe_DataMissionHashes` ON `pe_LogStats`.pe_LogStats_missionhash_id = `pe_DataMissionHashes`.pe_DataMissionHashes_id INNER JOIN `pe_DataPlayers` ON `pe_LogStats`.pe_LogStats_playerid = `pe_DataPlayers`.pe_DataPlayers_id INNER JOIN `pe_DataTypes` ON `pe_LogStats`.pe_LogStats_typeid = `pe_DataTypes`.pe_DataTypes_id ORDER BY pe_LogStats_datetime desc LIMIT 5")) {
|
||||||
|
echo "<table>";
|
||||||
|
while($row = mysqli_fetch_array($result))
|
||||||
|
{
|
||||||
|
echo "<tr>";
|
||||||
|
echo "<td>" . $row['pe_LogStats_datetime'] . "</td>";
|
||||||
|
echo "<td>" . $row['pe_DataPlayers_lastname'] . "</td>";
|
||||||
|
echo "<td>" . $row['pe_DataTypes_name'] . "</td>";
|
||||||
|
echo "<td>" . $row['ps_crashes'] . "</td>";
|
||||||
|
echo "<td>" . $row['ps_kills_planes'] . "</td>";
|
||||||
|
echo "<td>" . $row['ps_kills_armor'] . "</td>";
|
||||||
|
// TIP: See documentation there is many more counted events which can be displayed here
|
||||||
|
echo "<td>" . $row['pe_LogStats_mstatus'] . "</td>";
|
||||||
|
echo "</tr>";
|
||||||
|
}
|
||||||
|
echo "</table>";
|
||||||
|
|
||||||
|
$result->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get JSON objects with actual server information including LotATC and DCS SRS information
|
||||||
|
echo "<h3>Get JSON objects with actual server information including LotATC and DCS SRS information</h3>";
|
||||||
|
if ($result = $mysqli->query("SELECT * FROM `pe_DataRaw`")) {
|
||||||
|
echo "<table>";
|
||||||
|
while($row = mysqli_fetch_array($result))
|
||||||
|
{
|
||||||
|
echo "<tr>";
|
||||||
|
echo "<td>" . $row['pe_dataraw_updated'] . "</td>";
|
||||||
|
echo "<td>" . $row['pe_dataraw_payload'] . "</td>";
|
||||||
|
echo "</tr>";
|
||||||
|
}
|
||||||
|
echo "</table>";
|
||||||
|
|
||||||
|
$result->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close database connection
|
||||||
|
$mysqli->close();
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
|
<div id="footer">
|
||||||
|
<a href="https://github.com/szporwolik/perun">
|
||||||
|
<img src="https://camo.githubusercontent.com/50a1df184e069b36f3ddf9223bf16582f49aa16c/68747470733a2f2f692e696d6775722e636f6d2f5072496b714e412e706e67" alt="Perun_Logo">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
16
README.md
16
README.md
@@ -2,8 +2,9 @@
|
|||||||

|

|
||||||

|

|
||||||

|

|
||||||
|
[](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=ZBW8R5L25A8QW¤cy_code=EUR&source=url)
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
# Perun for DCS World
|
# Perun for DCS World
|
||||||
Included lua script extracts data from DCS World multiplayer server and sends information to TCP port for further processing.
|
Included lua script extracts data from DCS World multiplayer server and sends information to TCP port for further processing.
|
||||||
@@ -47,8 +48,9 @@ Windows app supports command line arguments, what may be handy in case of multip
|
|||||||
The following arguments are accepted (keep the order!):
|
The following arguments are accepted (keep the order!):
|
||||||
* server port (shall be the same as in the lua file!)
|
* server port (shall be the same as in the lua file!)
|
||||||
* instance ID (shall be the same as in the lua file!)
|
* instance ID (shall be the same as in the lua file!)
|
||||||
* path to SRS client-list.json
|
* path to SRS client-list.json OR put -1 if you do not want to use DCS SRS
|
||||||
* path to LotATC stats.json
|
* path to LotATC stats.json OR put -1 if you do not want to use LotATC
|
||||||
|
* numeric value (without quotes), set 1 for Autostart (Perun will start within 500ms after starting up)
|
||||||
|
|
||||||
Example for windows shortcut:
|
Example for windows shortcut:
|
||||||
```
|
```
|
||||||
@@ -60,6 +62,8 @@ Data displaying and handling is not in the current scope of this project. Since
|
|||||||

|

|
||||||
Due to resource limitations, "Perun for DCS World" will focus on pulling the data from DCS (and external modules) and pushing it to MySQL server, but if anyone would like to develop open sourced PHP applets for data/statistics displaying we're willing to cooperate and support such projects. Unfortunetly it's not possible to share the hardcoded code from forum.gildia.org.
|
Due to resource limitations, "Perun for DCS World" will focus on pulling the data from DCS (and external modules) and pushing it to MySQL server, but if anyone would like to develop open sourced PHP applets for data/statistics displaying we're willing to cooperate and support such projects. Unfortunetly it's not possible to share the hardcoded code from forum.gildia.org.
|
||||||
|
|
||||||
|
Basic example was provided [HERE](/04_Misc/05_PHP_Example/index.php) , support is available via Perun community at our [Discord](https://discord.gg/MTahREx).
|
||||||
|
|
||||||
## Troubleshooting - FAQ
|
## Troubleshooting - FAQ
|
||||||
- [I keep getting 1305 MySQL error](#i-keep-getting-1305-mysql-error)
|
- [I keep getting 1305 MySQL error](#i-keep-getting-1305-mysql-error)
|
||||||
- [Carrier landing are not tracked correctly](#carrier-landing-are-not-tracked-correctly)
|
- [Carrier landing are not tracked correctly](#carrier-landing-are-not-tracked-correctly)
|
||||||
@@ -84,6 +88,8 @@ DCS API does not track carrier or FARP operations natively, so there is a trick
|
|||||||
* table: pe_LogLogins - holds login to server event history
|
* table: pe_LogLogins - holds login to server event history
|
||||||
* table: pe_LogStats - holds static information
|
* table: pe_LogStats - holds static information
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
## Data packets - send from lua to TCP port
|
## Data packets - send from lua to TCP port
|
||||||
* ```ID: 1```, contains version/diagnostic information
|
* ```ID: 1```, contains version/diagnostic information
|
||||||
* perun version - for server administration usage
|
* perun version - for server administration usage
|
||||||
@@ -127,6 +133,10 @@ See also the list of [contributors](https://github.com/szporwolik/perun/contribu
|
|||||||
## License
|
## License
|
||||||
This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details
|
This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details
|
||||||
|
|
||||||
|
## Donation
|
||||||
|
This software is provide "as it is" without any warranties, but if you would like to thank me for development/support please
|
||||||
|
[](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=ZBW8R5L25A8QW¤cy_code=EUR&source=url)
|
||||||
|
|
||||||
## Acknowledgments
|
## Acknowledgments
|
||||||

|

|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user