#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
#-------------------------------------------------------------------------------
|
#
|
##@package EventReport
|
#
|
# @todo:ʼþ»ã±¨
|
# @author hxp
|
# @date 2015-1-14
|
# @version 2.4
|
# @Note£º EventReport_EventReportÓ÷¨ µÚÒ»¸ö²ÎÊý´«postÄÚÈÝurlencode£¬µÚ2,3,4²»Ó㻵ÚÎå¸ö²ÎÊý0´ú±íget£¬1Ϊpost£»µÚÁù¸ö²ÎÊýΪurl
|
#
|
# @change: "2015-01-28 22:30" hxp ¹Ø±Õʼþ»ã±¨
|
# @change: "2015-02-06 20:40" Alee ʼþ»ã±¨·¢ËÍÖÁºÏ·þÖ÷·þ
|
# @change: "2015-06-08 20:30" hxp Ôö¼ÓchannelCode
|
# @change: "2015-07-13 14:00" hxp Ôö¼ÓpidÐÅÏ¢
|
# @change: "2016-07-18 19:00" hxp 9377¶À´úʼþ»ã±¨°æ
|
# @change: "2016-07-27 20:00" Alee Ð޸Ĵò¿ªÎļþ³¬Ê±¹Ø±Õ
|
# @change: "2016-07-30 11:30" hxp ¹Ø±ÕÎïÆ·¸ú×Ù
|
# @change: "2016-08-18 16:30" hxp ×Ô¶¨ÒåÈÎÎñʼþ
|
# @change: "2016-08-30 23:00" hxp ÁÄÌì¼à¿Ø
|
# @change: "2016-09-10 11:00" hxp ÁÄÌìÄÚÈÝÌæ»»»»ÐÐ
|
# @change: "2016-11-09 20:00" hxp Ôö¼Ó×Ô¶¨Òå¼Ç¼(×øÆï¡¢³á°ò¡¢³èÎï¡¢»õ±Ò½ø³ö¡¢³È×°)
|
# @change: "2017-06-08 19:30" hxp Ôö¼Ó×Ô¶¨Òå¼Ç¼(µãȯ¡¢Éñ±ø¡¢·ûÓ¡¡¢¸ÄÃû¡¢ÕæÆø)
|
# @change: "2017-07-01 15:30" hxp ƽ̨¸ÄΪ´ÓÍæ¼ÒÕ˺ÅÖÐÈ¡£¬Ö§³Ö»ì·þģʽ
|
# @change: "2017-07-04 15:00" hxp Ôö¼Ó»ì·þģʽÏ¿ÉÇø·Ö¸÷ƽ̨×ÔÉíÇø·þºÏ·þºóµÄƽ̨Ö÷·þID
|
# ÏêϸÃèÊö: ʼþ»ã±¨
|
#
|
#---------------------------------------------------------------------
|
#"""Version = 2017-07-04 15:00"""
|
#---------------------------------------------------------------------
|
|
import ChConfig
|
import TurnAttack
|
import PlayerControl
|
import IpyGameDataPY
|
import ReadChConfig
|
import ShareDefine
|
import GameWorld
|
|
import datetime
|
import urllib
|
import json
|
|
## ³õʼ»¯Ê¼þ
|
# @param None
|
# @return ÎÞ·µ»ØÖµ
|
def InitDllAppID():
|
|
appID = "mobile"
|
key = "mobile"
|
|
GameWorld.GetGameWorld().EventReport_SetEventReportParam(appID, key)
|
GameWorld.Log("³õʼ»¯Ê¼þ±¨¸æ: appID=%s,key=%s OK!" % (appID, key))
|
return
|
|
## ʼþ±¨¸æ¼Ç¼
|
# @param eventActionID ʼþid
|
# @param eventParam ʼþ²ÎÊý
|
# @param curPlayer
|
# @return None
|
def EventReport(eventActionID, eventParam, curPlayer=None, OperatorID=""):
|
# ×é³ÉÀý×Ó eventParam µÄ¸ñʽ±ØÐëÊÇ xx=yy&zz=cc
|
# "http://192.168.0.249:12000/event_receiver?EventID=3099&OperatorID=test&PlayerCount=102&Time=2018-02-08 18:30:30&ProductID=snxxz&RegionName=s1"
|
|
reportActionIDList = IpyGameDataPY.GetFuncEvalCfg("EventReport", 3)
|
if reportActionIDList and eventActionID not in reportActionIDList:
|
#GameWorld.DebugLog("·ÇÐèÒª»ã±¨µÄʼþID! %s" % eventActionID)
|
return
|
if eventActionID in IpyGameDataPY.GetFuncEvalCfg("EventReport", 1):
|
#GameWorld.DebugLog("²»ÐèÒª»ã±¨µÄʼþ! %s" % eventActionID)
|
return
|
|
if not curPlayer and not OperatorID:
|
return
|
|
ProductID = ReadChConfig.GetPyMongoConfig("EventReport", "ProductID")
|
ReportUrl = ReadChConfig.GetPyMongoConfig("EventReport", "ReportUrl")
|
|
playerInfo = ""
|
if curPlayer:
|
if not GameWorld.IsNormalPlayer(curPlayer):
|
return
|
playerInfo = {"RoleID": curPlayer.GetName(),
|
"AccountID": GameWorld.GetPlatformAccID(curPlayer.GetAccID()),
|
"IP": curPlayer.GetIP(),
|
"Level": curPlayer.GetLV(),
|
"DeviceFlag": curPlayer.GetAccountData().GetDeviceFlag(),
|
"Job": curPlayer.GetJob(),
|
"PlayerID": curPlayer.GetPlayerID(),
|
"CreateRoleTime": curPlayer.GetCreateRoleTime(),
|
"CTGRealTotal": curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGRealTotal),
|
"FightPower": PlayerControl.GetFightPower(curPlayer),
|
"MainTaskID": PlayerControl.GetMainTaskID(curPlayer),
|
"MainPassLVID": PlayerControl.GetPassMainLevelID(curPlayer),
|
"FamilyName": curPlayer.GetFamilyName(),
|
"ReamlLV":curPlayer.GetOfficialRank(),
|
"TreeLV":curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TreeLV),
|
"LineupHero":GetReportMainLineupInfo(curPlayer),
|
}
|
for mapID in ChConfig.ReportCenterMapIDList:
|
playerInfo["FBPass%s" % mapID] = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBPassLineID % mapID)
|
|
OperatorID = GameWorld.GetPlayerPlatform(curPlayer)
|
RegionName = GameWorld.GetPlayerServerSID(curPlayer)
|
playerInfo = "&%s" % urllib.urlencode(playerInfo) #UTF8 ÐèҪת³Éurl±àÂë²Å¿ÉÓÃ
|
|
else:
|
# ºÏ·þÇé¿ö£¬Íæ¼ÒÈ¡×Ô¼º·þ·¢ËÍ£¬·ÇÍæ¼ÒÊý¾Ý°´Ö¸¶¨Æ½Ì¨ÅäÖ÷¢
|
sid = GameWorld.GetPlayerMainServerID(OperatorID)
|
if not sid:
|
GameWorld.ErrLog("GetPlayerMainServerID: %s-%s"%(OperatorID, sid))
|
return
|
RegionName = 's%s'%sid
|
|
if eventParam:
|
eventParam = "&%s"%eventParam
|
|
|
getUrl = "%s?ProductID=%s&OperatorID=%s&RegionName=%s&EventID=%s%s&Time=%s%s"%(\
|
ReportUrl, ProductID, OperatorID, RegionName, eventActionID, playerInfo,
|
urllib.quote_plus(str(datetime.datetime.today()).split('.')[0]), eventParam)
|
GameWorld.DebugLog("EventReport: %s"%getUrl)
|
|
# µÚÎå¸ö²ÎÊý0´ú±íget·¢ËÍ 1´ú±ípost
|
GameWorld.GetGameWorld().EventReport_EventReport("", "", "", "", 0, getUrl)
|
return
|
|
def GetReportMainLineupInfo(curPlayer):
|
lineup = TurnAttack.GetPlayerLineup(curPlayer, ShareDefine.Lineup_Main)
|
if lineup.IsEmpty():
|
return {}
|
|
heroDict = {}
|
curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptHero)
|
for posNum in lineup.GetPosNumList():
|
hero = lineup.GetLineupHero(posNum)
|
heroID = hero.heroID
|
itemIndex = hero.itemIndex
|
heroLV = 1
|
star = 0
|
if itemIndex >= 0 and itemIndex < curPack.GetCount():
|
heroItem = curPack.GetAt(itemIndex)
|
if heroItem and not heroItem.IsEmpty():
|
heroLV = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroLV)
|
star = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroStar)
|
breakLV = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroBreakLV)
|
awakeLV = heroItem.GetUserAttr(ShareDefine.Def_IudetHeroAwakeLV)
|
heroDict[str(posNum)] = {
|
"HeroID":heroID,
|
"SkinID":hero.skinID,
|
"LV":heroLV,
|
"Star":star,
|
"BreakLV":breakLV,
|
"AwakeLV":awakeLV,
|
}
|
return json.dumps(heroDict, ensure_ascii=False).replace(" ", "")
|
|
## =================================================================================================
|
|
def WriteEvent_login(curPlayer):
|
if curPlayer.GetIP() == "127.0.0.1":
|
return
|
version = urllib.quote_plus(curPlayer.GetAccountData().GetClientVersion())
|
EventReport(ShareDefine.Def_UserAction_Login, "Job=%s&SessionID=%s&Version=%s"%(
|
curPlayer.GetJob(), GameWorld.GetSessionID(curPlayer),
|
version), curPlayer)
|
|
return
|
|
# ÀëÏßÊý¾Ý
|
def WriteEvent_session(curPlayer):
|
seconds = 0
|
logoffTimeStr = curPlayer.GetLogoffTime().strip()
|
loginTimeStr = curPlayer.GetLoginTime().strip()
|
if logoffTimeStr and loginTimeStr:
|
passTimes = GameWorld.GetDateTimeByStr(logoffTimeStr) - GameWorld.GetDateTimeByStr(loginTimeStr)
|
seconds = passTimes.seconds
|
EventReport(ShareDefine.Def_UserAction_Session, "OnlineTime=%s&SessionID=%s"%(seconds, GameWorld.GetSessionID(curPlayer)), curPlayer)
|
return
|
|
def WriteEvent_Entry(curPlayer, step):
|
EventReport(ShareDefine.Def_UserAction_LostModel, "Step=%s&Flag=%s"%(step, ShareDefine.Def_UserAction_CreateRole), curPlayer)
|