#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#
|
#
|
##@package PlayerTruck
|
#
|
# @todo: Íæ¼ÒïÚ³µ
|
#
|
# @author eggxp
|
# @date 2010-5-13
|
# @version 1.3
|
#
|
# @change: "2012-08-13 16:30" jiang Ôö¼ÓïÚ³µÂß¼¼ÓÅж¨Èç¹ûÒÑÓÐïÚ³µÉ¾³ý¾ÉµÄ
|
# @change: "2016-06-13 10:30" hxp ïÚ³µÐÞ¸ÄΪÏÞʱÍê³É
|
# @change: "2017-01-21 15:30" hxp ¿ªÊ¼ÔËïÚʱ¼ä¸ÄΪͬ²½Ê£Óàʱ¼ä£¬Ôö¼Ó³¬Ê±ÇëÇóʱ¼äÑéÖ¤
|
#---------------------------------------------------------------------
|
#"""Version = 2017-01-21 15:30"""
|
#------------------------------------------------------------------------------
|
|
import IPY_GameServer
|
import ChPyNetSendPack
|
import NetPackCommon
|
import ReadChConfig
|
import GameWorld
|
|
import time
|
#---------------------------------------------------------------------
|
|
#Íæ¼ÒÉÏÏßµÄʱºòÐèÒª×öµÄ:
|
#curPlayer.SetLogoffTick(0)
|
|
#Íæ¼Ò״̬´¦ÀíÐèÒª×öµÄ:
|
#¸ù¾ÝÍæ¼ÒµÄGetLogoffTick()µÃµ½Íæ¼ÒÏÂÏßʱ¼ä, ¼ÆËãæô³µÊÇ·ñÐèÒªÏûʧ
|
|
#·þÎñÆ÷Í£·þÐèÒª×öµÄ:
|
#°Ñæô³µÉèÖÃΪÖÐֹ״̬(Õý³£ÖÐÖ¹, »Ù»µÖÐÖ¹)
|
|
#class IPY_GAddTruck
|
#{
|
#public:
|
# //Íæ¼ÒID
|
# int GetPlayerID();
|
# //æô³µID
|
# int GetTruckID();
|
# //µØÍ¼ID
|
# int GetMapID();
|
#};
|
## ÎªÍæ¼ÒÔö¼ÓÒ»¸öïÚ³µ
|
# @param index Íæ¼ÒÔÚGameServerÖеÄindex
|
# @param tick µ÷ÓÃʱµÄtick
|
# @return ÎÞ·µ»ØÖµ
|
# @remarks º¯ÊýÏêϸ˵Ã÷£ºÎªÍæ¼ÒÔö¼ÓÒ»¸öïÚ³µ
|
def MapServer_TruckAppear(index, tick):
|
sendPack = IPY_GameServer.IPY_GAddTruck()
|
playerID = sendPack.GetPlayerID()
|
truckID = sendPack.GetTruckID()
|
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
|
curTruck = GameWorld.GetTruckMananger().FindTruckByTruckID(truckID)
|
if curPlayer and curTruck:
|
GameWorld.ErrLog("GameServerÒѾ´æÔÚïÚ³µ, MapServer֪ͨÔö¼Ó", sendPack.GetPlayerID())
|
|
#æô³µÏûʧ
|
curTruck.SetTruckState(IPY_GameServer.tusDisappear)
|
curTruck.Disappear()
|
|
truckMananger = GameWorld.GetTruckMananger()
|
curTruck = truckMananger.AddTruck(truckID, playerID)
|
curTruck.SetMapID(sendPack.GetMapID())
|
curTruck.SetCountry(sendPack.GetCountry())
|
curTruck.SetName(sendPack.GetName());
|
curTruck.SetTruckState(IPY_GameServer.tusNormal)
|
startTime = int(time.time())
|
curTruck.SetLogoffTick(startTime) # ÓÀºãÏîÄ¿ïÚ³µÖ÷ÈËÀëÏßʱ¼ä×÷Ϊ¿ªÊ¼Ê±¼äÓÃ
|
SyncPlayerTruckStartTime(curPlayer)
|
GameWorld.Log("%d ¿ªÊ¼æô³µ, startTime=%s" % (playerID, startTime), playerID)
|
return
|
|
## ͬ²½ïÚ³µ¿ªÊ¼Ê±¼ä
|
def SyncPlayerTruckStartTime(curPlayer):
|
curTruck = GameWorld.GetTruckMananger().FindTruckByOwner(curPlayer.GetPlayerID())
|
# ÎÞïÚ³µ
|
if curTruck == None:
|
return
|
|
curTime = int(time.time())
|
startTime = curTruck.GetLogoffTick()
|
truckTime = ReadChConfig.GetEvalChConfig("TruckTime") * 60
|
remainTime = max(0, truckTime - (curTime - startTime))
|
truckStartTime = ChPyNetSendPack.tagGCTruckStartTime()
|
truckStartTime.Clear()
|
truckStartTime.StartTime = remainTime
|
NetPackCommon.SendFakePack(curPlayer, truckStartTime)
|
return
|
|
|
#// AE 07 ÔËïÚʱ¼äµ¹¼ÆÊ±½áÊø #tagCGTruckTimeEnd
|
#
|
#struct tagCGTruckTimeEnd
|
#{
|
# tagHead Head;
|
#};
|
### ÓÉÓÚ·þÎñÆ÷¼ìË÷ïÚ³µ³¬Ê±ÆµÂÊΪ1·ÖÖÓ£¬¹Ê¿Í»§¶Ëµ¹¼ÆÊ±½áÊøºóÖ÷¶¯ÇëÇó´¥·¢·þÎñ¶ËÍæ¼Ò¸öÈËÔËïÚ³¬Ê±Âß¼
|
def OnTruckTimeEnd(index, clientData, tick):
|
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
if not curPlayer:
|
return
|
|
curTruck = GameWorld.GetTruckMananger().FindTruckByOwner(curPlayer.GetPlayerID())
|
# ÎÞïÚ³µ
|
if curTruck == None:
|
return
|
|
# GetLogoffTick
|
curTime = int(time.time())
|
startTime = curTruck.GetLogoffTick()
|
# ÓÉÓÚ·þÎñÆ÷¼ìË÷ïÚ³µ³¬Ê±ÆµÂÊΪ1·ÖÖÓ, ÕâÀï×ö¸öÈݲîʱ¼ä1·ÖÖÓ
|
truckTime = (ReadChConfig.GetEvalChConfig("TruckTime") - 1) * 60
|
if curTime - startTime < truckTime:
|
GameWorld.Log("¿Í»§¶ËÇëÇóÔËïÚ³¬Ê±½áËã, ʵ¼Êδ³¬Ê±!: curTime=%s,startTime=%s,truckTime=%s"
|
% (curTime, startTime, truckTime), curPlayer.GetPlayerID())
|
return
|
|
result = ""
|
curPlayer.MapServer_QueryPlayerResult(0, 0, "TruckTimeOut", result, len(result))
|
return
|
|
|
#class IPY_GTruckRefresh
|
#{
|
#public:
|
# //æô³µID
|
# int GetTruckID();
|
# //µØÍ¼ID
|
# int GetMapID();
|
# //æô³µ×´Ì¬
|
# int GetTruckState();
|
#};
|
## Íæ¼ÒïÚ³µË¢ÐÂ
|
# @param index Íæ¼ÒÔÚGameServerÖеÄindex
|
# @param tick µ÷ÓÃʱµÄtick
|
# @return ÎÞ·µ»ØÖµ
|
# @remarks º¯ÊýÏêϸ˵Ã÷£ºÍæ¼ÒïÚ³µË¢ÐÂ
|
def MapServer_TruckRefresh(index, tick):
|
sendPack = IPY_GameServer.IPY_GTruckRefresh()
|
truckID = sendPack.GetTruckID()
|
truckMananger = GameWorld.GetTruckMananger()
|
truckState = sendPack.GetTruckState()
|
curTruck = truckMananger.FindTruckByTruckID(truckID)
|
|
if curTruck == None:
|
return
|
|
playerID = curTruck.GetOwnerID()
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
|
|
GameWorld.Log("æô³µÐÅÏ¢ %d -> %d" %(truckID, truckState) , playerID)
|
|
if truckState == IPY_GameServer.tusNull:
|
#ɾ³ýæô³µ
|
curTruck = truckMananger.FindTruckByOwner(curPlayer.GetPlayerID())
|
curTruck.Disappear()
|
return
|
|
curTruck.SetMapID(sendPack.GetMapID())
|
state = sendPack.GetTruckState()
|
curTruck.SetTruckState(sendPack.GetTruckState())
|
|
#֪ͨµØÍ¼·þÎñÆ÷
|
|
if curPlayer == None:
|
GameWorld.Log("ÕÒ²»µ½æô³µÖ÷ÈËÍæ¼Ò: %d"%(playerID) , playerID)
|
return
|
|
curPlayer.MapServer_SetPlayerTruckState(state)
|
return
|
|
#class IPY_GTruckChangeMap
|
#{
|
#public:
|
# //æô³µID
|
# int GetTruckID();
|
# //NPCÀàÐÍID
|
# int GetNPCTypeID();
|
# //ÓµÓÐÕßID
|
# int GetPlayerID();
|
# //µ±Ç°ÉúÃü
|
# int GetHP();
|
#
|
# int GetMapID();
|
#
|
# int GetPosX();
|
#
|
# int GetPosY();
|
#};
|
## Íæ¼ÒïÚ³µË¢Ð Èç¹ûTruckIdΪ0ÔòÇåµôïÚ³µ ·ñÔòÕÒµ½²¢»»µØÍ¼
|
# @param index Íæ¼ÒÔÚGameServerÖеÄindex
|
# @param tick µ÷ÓÃʱµÄtick
|
# @return ÎÞ·µ»ØÖµ
|
# @remarks º¯ÊýÏêϸ˵Ã÷£ºÍæ¼ÒïÚ³µË¢Ð Èç¹ûTruckIdΪ0ÔòÇåµôïÚ³µ ·ñÔòÕÒµ½²¢»»µØÍ¼
|
def MapServer_TruckChangeMap(index, tick):
|
sendPack = IPY_GameServer.IPY_GTruckMapRefresh()
|
truckID = sendPack.GetTruckID()
|
truckMananger = GameWorld.GetTruckMananger()
|
|
if truckID == 0:
|
#ɾ³ýæô³µ
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
curTruck = truckMananger.FindTruckByOwner(curPlayer.GetPlayerID())
|
curTruck.Disappear()
|
return
|
|
GameWorld.Log("æô³µµØÍ¼ÐÅÏ¢ %d -> %d" %(truckID, sendPack.GetMapID()))
|
curTruck = truckMananger.FindTruckByTruckID(truckID)
|
curTruck.SetMapID(sendPack.GetMapID())
|
|
#class IPY_GTruckMsg
|
#public:
|
# //get×Ô¶¯Éú³É
|
# int GetHead();
|
# int GetMsg(); //1.Êܵ½¹¥»÷
|
# //set×Ô¶¯Éú³É
|
# void SetHead(int inputHead);
|
# void SetMsg(int inputMsg); //1.Êܵ½¹¥»÷
|
#};
|
## ïÚ³µÐÅÏ¢ Êܵ½¹¥»÷µÈ
|
# @param index Íæ¼ÒÔÚGameServerÖеÄindex
|
# @param tick µ÷ÓÃʱµÄtick
|
# @return ÎÞ·µ»ØÖµ
|
# @remarks º¯ÊýÏêϸ˵Ã÷£ºïÚ³µÐÅÏ¢ Êܵ½¹¥»÷µÈ
|
def MapServer_TruckMsg(index, tick):
|
sendPack = IPY_GameServer.IPY_GTruckMsg()
|
truckID = sendPack.GetTruckID()
|
truckMananger = GameWorld.GetTruckMananger()
|
curTruck = truckMananger.FindTruckByTruckID(truckID)
|
curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(curTruck.GetOwnerID())
|
|
GameWorld.Log("æô³µÐÅÏ¢ Msg = %d"%(sendPack.GetMsg()) , curPlayer.GetPlayerID())
|
curPlayer.Sync_TruckMsg(sendPack.GetMsg())
|
return
|
|
## Íæ¼ÒïÚ³µË¢ÐÂÇëÇó´¦Àí
|
# @param index Íæ¼ÒÔÚGameServerÖеÄindex
|
# @param tick µ÷ÓÃʱµÄtick
|
# @return ÎÞ·µ»ØÖµ
|
# @remarks º¯ÊýÏêϸ˵Ã÷£ºÍæ¼ÒïÚ³µË¢ÐÂÇëÇó´¦Àí
|
def MapServer_TruckRefreshReq(index, tick):
|
sendPack = IPY_GameServer.IPY_GTruckRefreshReq()
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
truckID = sendPack.GetTruckID()
|
GameWorld.Log("ÒªÇóæô³µË¢Ð id = %d"%(truckID) , curPlayer.GetPlayerID())
|
truckMananger = GameWorld.GetTruckMananger()
|
curTruck = truckMananger.FindTruckByTruckID(truckID)
|
if curTruck == None:
|
#ûÓÐæô³µ
|
curPlayer.MapServer_TruckRefreshAnswer(0, 0)
|
return
|
curPlayer.MapServer_TruckRefreshAnswer(truckID, curTruck.GetMapID())
|
|
curState = curTruck.GetTruckState()
|
if curState == IPY_GameServer.tusDestroy:
|
#Íæ¼Òæô³µÒѾËð»µ, Ë¢ÐÂæô³µ×´Ì¬
|
curPlayer.MapServer_SetPlayerTruckState(curState)
|
return
|
|
|
## ɾ³ýïÚ³µ
|
# @param curTruck ÄÚ²¿µôÓú¯Êý
|
# @return ÎÞ·µ»ØÖµ
|
# @remarks º¯ÊýÏêϸ˵Ã÷£ºÉ¾³ýïÚ³µ
|
def DelTruck( curTruck ):
|
curTruck.SetTruckState(IPY_GameServer.tusDisappear)
|
|
GameWorld.Log("æô³µÏûʧ, ID = %s MapID = %s"%(curTruck.GetTruckID(), curTruck.GetMapID()))
|
|
#֪ͨµØÍ¼·þÎñÆ÷
|
curTruck.SyncMapServer_TruckRefresh()
|
|
#æô³µÏûʧ
|
curTruck.Disappear()
|
return
|
|
#//////////////////////////////////////////////////////////////
|
#//03 06 æô³µÏûʧ#tagGDelTruck
|
#tagGDelTruck * GettagGDelTruck();
|
#
|
#class IPY_GDelTruck
|
#{
|
#public:
|
#
|
# int GetTruckID();
|
#};
|
## ɾ³ýÍæ¼ÒµÄæô³µ
|
# @param index Íæ¼ÒÔÚGameServerÖеÄindex
|
# @param tick µ÷ÓÃʱµÄtick
|
# @return ÎÞ·µ»ØÖµ
|
# @remarks º¯ÊýÏêϸ˵Ã÷£º#ɾ³ýÍæ¼ÒµÄæô³µ
|
def MapServer_TruckDelete(index, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
pack = IPY_GameServer.IPY_GDelTruck()
|
truckMananger = GameWorld.GetTruckMananger()
|
truckID = pack.GetTruckID()
|
curTruck = truckMananger.FindTruckByTruckID(truckID)
|
if curTruck == None:
|
return
|
|
#2009.2.23
|
#Ò»¶¨ÒªÏÈɾ³ýæô³µ, ÔÙÇå³ýÍæ¼Ò״̬
|
#·ñÔò:
|
#bugʾÀý:
|
#1.Çå³ýÍæ¼Ò״̬
|
#2.Íæ¼Ò½Óæô³µÈÎÎñ <- ÕâÀï»á¶ÏÑÔ, 2Á¾æô³µ
|
#3.ɾ³ýæô³µ
|
DelTruck(curTruck)
|
curPlayer.MapServer_SetPlayerTruckState(IPY_GameServer.tusNull)
|
return
|