#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
  
 | 
##@package PlayerTruck  
 | 
# ´ËÄ£¿éʵÏÖæô³µÂß¼  
 | 
#  
 | 
# @author eggxp  
 | 
# @date 2010-4-28  
 | 
# @version 3.2  
 | 
#  
 | 
# ÐÞ¸Äʱ¼ä ÐÞ¸ÄÈË ÐÞ¸ÄÄÚÈÝ  
 | 
# @change: "2013-03-13 17:00" wdb É¾³ý·â°ü  
 | 
# @change: "2013-04-17 20:35" Alee Í³Ò»BUFFɾ³ýº¯Êý  
 | 
# @change: "2013-04-25 13:30" Alee ×ªÒÆDelBuffBySkillID  
 | 
# @change: "2014-10-14 14:00" hxp »Ö¸´·â°ü£»ÐÞ¸ÄϵͳÌáʾ£»Ôö¼ÓÿÈÕ¿ÉÃâ·ÑË¢ÐÂïÚ³µ´ÎÊý  
 | 
# @change: "2014-10-17 17:00" hxp Ôö¼ÓÀïÚ»îÔ¾¶È£»Ð޸Ľ±ÀøÌáʾ²ÎÊý£»Ð޸Ĵò½ÙÏà¹ØÊýÖµ´æ´¢  
 | 
# @change: "2014-10-18 16:00" hxp Ôö¼ÓÍæ¼ÒËÀÍöïÚ³µ´¦Àí£»½±ÀøÌṩreExp¼°reMoney£»OnDayÖØÖýÙïÚ´ÎÊý  
 | 
# @change: "2014-10-21 09:20" Alee ïÚ³µ±¨´í¼òµ¥·À·¶  
 | 
# @change: "2014-11-12 16:30" hxp Ôö¼ÓÀïÚ/½ÙïÚ³É¾Í  
 | 
# @change: "2014-11-15 15:30" hxp È¥³ýïÚ³µbuffÂß¼  
 | 
# @change: "2014-11-15 17:30" Alee ÓÅ»¯ÀïÚËÙ¶ÈˢР 
 | 
# @change: "2015-01-12 17:40" ljd ÐÞ¸ÄïÚ³µµÈ¼¶Ë¢ÐÂ--¿É°ó×êˢР 
 | 
# @change: "2015-01-14 00:30" hxp Ôö¼Ó×êʯÏûºÄÀàÐÍ  
 | 
# @change: "2015-01-23 17:00" ljd Ð޸İó×ê¡¢×êʯˢиÅÂÊ·Ö¿ª  
 | 
# @change: "2015-03-19 16:50" ljd ¹ó×å¼Ó³É  
 | 
# @change: "2015-07-10 17:30" ljd ÅÅÐаñ¼ÓÍæ¼Òƽ̨²ÎÊýName2  
 | 
# @change: "2015-07-28 11:10" ljd ¹ó×å¼Ó³É »¹Ô  
 | 
# @change: "2016-06-13 10:30" hxp ïÚ³µÐÞ¸ÄΪÏÞʱÍê³É; Ôö¼ÓïÚ³µ½±ÀøÍ¨Öª  
 | 
# @change: "2016-07-04 15:00" hxp ïÚ³µË¢Ðµȼ¶Ö§³ÖÎïÆ·Ä£Ê½£» ´´½¨ïÚ³µÖ§³Ö¶îÍâ½±Àø  
 | 
# @change: "2016-07-18 19:00" hxp ïÚ³µÈÎÎñ״̬±ä¸üʼþ¼Ç¼µã  
 | 
# @change: "2016-09-06 11:00" xdh Ôö¼Ó¿ª·þÌ커ËÍË«±¶ÅäÖà  
 | 
# @change: "2016-09-06 20:30" hxp Ôö¼Ó×Ô¶¯ÔËïÚ״̬ÏÂÎ޵Р 
 | 
# @change: "2017-03-16 21:00" hxp ¾Ñé½±ÀøÊýÖµÖ§³Ö³¬¹ý20ÒÚ, ïÚ³µÖ÷È˵ȼ¶¼Ç¼֧³Ö4λÊý  
 | 
#---------------------------------------------------------------------  
 | 
#"""Version = 2017-03-16 21:00"""  
 | 
#------------------------------------------------------------------------------------------------------------   
 | 
#  
 | 
import IPY_GameWorld  
 | 
import GameMap  
 | 
import GameWorld  
 | 
import ChConfig  
 | 
import PlayerControl  
 | 
import EventShell  
 | 
import NPCCommon  
 | 
import ReadChConfig  
 | 
#import PlayerPrestigeSys  
 | 
import ChPyNetSendPack  
 | 
import NetPackCommon  
 | 
import SkillCommon  
 | 
import ShareDefine  
 | 
import DataRecordPack  
 | 
import PlayerBillboard  
 | 
import PlayerActivity  
 | 
import PlayerSuccess  
 | 
import PyMapTable  
 | 
import ItemCommon  
 | 
import ItemControler  
 | 
import QuestCommon  
 | 
import BuffSkill  
 | 
import GameObj  
 | 
#---------------------------------------------------------------------  
 | 
Def_TruckOwnerTeamID = "TeamID"  # NPC×Öµä¼Ç¼Ö÷È˶ÓÎéID  
 | 
Def_TruckOwnerFamilyID = "FamilyID"  # NPC×Öµä¼Ç¼Ö÷È˼Ò×åID  
 | 
Def_TruckOwnerNameColor = "NameColor"  # NPC×Öµä¼Ç¼Ö÷ÈËÃû×ÖÑÕÉ«  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# #Íæ¼Ò½øÈëæô³µ, Òª:  
 | 
# #1.Íæ¼ÒÊôÐÔÉèÖÃΪÒþ²Ø,   
 | 
# #2.ÉèÖÃÍæ¼ÒΪæô³µ×´Ì¬,  
 | 
# #3.ÉèÖÃÍæ¼ÒΪÎÞµÐ״̬   
 | 
# #4.ÉèÖÃÍæ¼ÒµÄæô³µSetTruck()  ÊäÈëΪÕÙ»½³öÀ´µÄSummonNPCÀàÐÍ  
 | 
#   
 | 
# #Íæ¼ÒÀ뿪æô³µ, Òª:  
 | 
# #1.Íæ¼ÒÊôÐÔÉèÖÃΪ²»Òþ²Ø  
 | 
# #2.ÉèÖÃÍæ¼ÒΪ¿ÕÏÐ״̬    
 | 
# #3.ÉèÖÃÍæ¼ÒΪ·ÇÎÞµÐ״̬  
 | 
# #4.ÉèÖÃÍæ¼ÒµÄæô³µSetTruck(None)  
 | 
#===============================================================================  
 | 
  
 | 
  
 | 
#===============================================================================  
 | 
# #Íæ¼Ò½øÈëг¡¾°, Òª:  
 | 
# #1. ¸ù¾Ýæô³µIDÕÒµ½×Ô¼ºµÄæô³µ  
 | 
# #------>Èç¹ûÕÒµ½ÁË,   
 | 
# #2. æô³µµÄSetOwnerΪ×Ô¼º  
 | 
# #3. Íæ¼ÒµÄSetTruckΪÕâ¸öæô³µ  
 | 
#===============================================================================  
 | 
  
 | 
  
 | 
#===============================================================================  
 | 
# #Íæ¼ÒÀ뿪±¾³¡¾°:  
 | 
# #----->Èç¹ûÓÐæô³µ,   
 | 
# #1. æô³µµÄSetOwnerΪNone  
 | 
# #2. Íæ¼ÒµÄSetTruckΪNone   
 | 
#===============================================================================  
 | 
  
 | 
  
 | 
# Ë¢ÐÂïÚ³µµÈ¼¶·½Ê½¶¨Òå  
 | 
(  
 | 
Def_RefreshTruckLVWay_Free,    # Ãâ·ÑË¢  
 | 
Def_RefreshTruckLVWay_Item,    # µÀ¾ßË¢  
 | 
Def_RefreshTruckLVWay_Money,   # »õ±ÒË¢  
 | 
Def_RefreshTruckLVWay_Max,  
 | 
) = range(4)  
 | 
  
 | 
## ¼ì²âÈÎÎñÔÚµØÍ¼ÖÐÊÇ·ñÓÐïÚ³µ  
 | 
#  @param curPlayer µ±Ç°Íæ¼Ò  
 | 
#  @return True or False  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def PlayerInMapHaveTruck(curPlayer):  
 | 
  
 | 
    if curPlayer.GetTruck() != None or GameWorld.GetAllFbNPCManager().FindTruckByID(curPlayer.GetTruckID()):  
 | 
        #Õâ¸öÈË»¹ÓÐæô³µ  
 | 
        return True  
 | 
      
 | 
    #2009.2.23  
 | 
    #bugʾÀý:  
 | 
    #1.Çå³ýÍæ¼Ò״̬  
 | 
    #2.Íæ¼Ò½Óæô³µÈÎÎñ      <- ÕâÀï»á¶ÏÑÔ, 2Á¾æô³µ  
 | 
    #3.ɾ³ýæô³µ  
 | 
    #ΪÁ˰²È«ÐÔ, ÕâÀïÔÙ´ÎУÑé, Íæ¼ÒûÓÐæô³µ  
 | 
    if GameWorld.GetAllFbNPCManager().FindTruckByID(curPlayer.GetID() * IPY_GameWorld.Def_Player_Truck_ID_Rate):  
 | 
        return True  
 | 
    return False  
 | 
  
 | 
  
 | 
## ´´½¨ïÚ³µ   
 | 
#  @param curPlayer µ±Ç°Íæ¼Ò,  
 | 
#  @param truckMoney ïÚ³µÑº½ð  
 | 
#  @param money_type Ñº½ðÀàÐÍ  
 | 
#  @param summonID ÕÙ»½ID,  
 | 
#  @param eventID Ê¼þID  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def  CreateTruck(curPlayer,truckMoney, money_type,summonID, eventID, tick):  
 | 
    # ¿ç·þ·þÎñÆ÷¹¦ÄÜÏÞÖÆ  
 | 
    if GameWorld.IsCrossServer():  
 | 
        return  
 | 
              
 | 
    #ÅжÏÊÇ·ñÒѾ´æÔÚïÚ³µ,´æÔÚÏûʧ  
 | 
#    if curPlayer.GetTruckID() != 0:  
 | 
#        GameWorld.Log("ÒѾÓÐæô³µ ID = %d"%curPlayer.GetTruckID())  
 | 
#        return  
 | 
  
 | 
#    if PlayerControl.GetSilver(curPlayer) < truckMoney:  
 | 
#        GameWorld.Log("Òø×Ó²»×ã Ñº½ð = %d"%truckMoney)  
 | 
#        return   
 | 
    if PlayerInMapHaveTruck(curPlayer):  
 | 
        #Õâ¸öÈË»¹ÓÐæô³µ  
 | 
        raise Exception("CreateTruck, Player Already Have Truck")  
 | 
        return  
 | 
  
 | 
    #=========================================================================================================  
 | 
    # if truckMoney != 0 and money_type == 0:  
 | 
    #    GameWorld.Log("Ѻ½ðÀàÐͲ»¶Ô = %d"%(money_type) , curPlayer.GetPlayerID())  
 | 
    #    return  
 | 
    #=========================================================================================================  
 | 
      
 | 
    #ÉèÖÃÂíÆ¥µÈ¼¶  
 | 
    curPlayer.SetHorseLV(0)  
 | 
    #ÉèÖÃïÚ³µµ±Ç°×´Ì¬  
 | 
    curPlayer.SetTruckState(IPY_GameWorld.tusNormal)  
 | 
      
 | 
    #=========================================================================================================  
 | 
    # #ÉèÖÃïÚ³µÑº½ð  
 | 
    # curPlayer.SetTruckMoney(truckMoney)  
 | 
    # curPlayer.SetTruckMoneyType(money_type)  
 | 
    #=========================================================================================================  
 | 
      
 | 
    #ÉèÖÃïÚ³µÈÎÎñ¿ªÊ¼Ê±¼ä  
 | 
    curPlayer.SetTruckCalcStartTime(tick)  
 | 
    summonTruck = curPlayer.SummonTruck()  
 | 
    summonTruck.SetNPCTypeID(summonID)  
 | 
    #Ö»ÓÐÔÚÉèÖÃÁËNPCTypeIDºó,²ÅÄÜÉèÖÃÆäËûÊôÐÔ  
 | 
    summonTruck.SetTickTypeCount(ChConfig.TYPE_NPC_Tick_Count)  
 | 
      
 | 
    #ÉèÖÃïÚ³µµÈ¼¶  
 | 
    truckLv = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_TruckLV)  
 | 
      
 | 
    #¼Ç¼µ±Ç°Ñºïڵȼ¶, ÒòΪSetLVÔÚÇл»µØÍ¼ÒÔºó»á±»ÇåµôDef_Player_Dict_TruckLVÔÚÕÙ»½³öÀ´ÒÔºóɾ³ýÁË  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_PawnTruckLV, truckLv)  
 | 
    summonTruck.SetLV(truckLv)  
 | 
      
 | 
    summonTruck.SetOwner(curPlayer)  
 | 
    summonTruck.SetOwnerID(curPlayer.GetID())  
 | 
    summonTruck.SetCountry(curPlayer.GetCountry())  
 | 
    summonTruck.SetName(curPlayer.GetName())  
 | 
          
 | 
    curPlayer.SetTruck(summonTruck)  
 | 
    #ÉèÖÃïÚ³µIDΪÈËÎïID  
 | 
    curPlayer.SetTruckID(summonTruck.GetID())  
 | 
    curPlayer.SetTruckEventID(eventID)  
 | 
    summonPos = GameMap.GetEmptyPlaceInArea(curPlayer.GetPosX(), curPlayer.GetPosY(), ChConfig.Def_DropItemDist)  
 | 
      
 | 
    #ÉèÖÃïÚ³µÖ÷È˵ȼ¶  
 | 
    SetTruckOwnerLV(summonTruck, curPlayer.GetLV())  
 | 
      
 | 
    #¸ü¸ÄïÚ³µ¼Ç¼µÄ²¿·ÖÖ÷ÈËÐÅÏ¢  
 | 
    ChangeTruckNoteInfo(curPlayer)  
 | 
    #=========================================================================================================  
 | 
    # #ÔÚæô³µÉíÉÏÉèÖÃæô³µÑº½ð  
 | 
    # summonTruck.SetMoney(truckMoney)  
 | 
    # summonTruck.SetMoneyType(money_type)  
 | 
    #=========================================================================================================  
 | 
      
 | 
    #´´½¨ïÚ³µ  
 | 
    summonTruck.Reborn(summonPos.GetPosX(), summonPos.GetPosY())  
 | 
          
 | 
    #֪ͨGameServeræô³µ³öÏÖ  
 | 
    summonTruck.GameServer_Sync_TruckAppear()  
 | 
      
 | 
    #È«·þ¹ã²¥  
 | 
    #Truck_hgg_246653 XXXXX¿ªÊ¼»¤ËÍXXïÚ³µÀ²~´ó¼Ò¿ìÈ¥¡¾Î§¹Û¡¿°¡~  
 | 
    if truckLv in ReadChConfig.GetEvalChConfig("TruckWorldNotifyLv"):  
 | 
        PlayerControl.WorldNotify(0, "Truck_hgg_246653", [curPlayer.GetName(), truckLv])  
 | 
      
 | 
    #¿ÉÕÙ»½ïÚ³µµÈ¼¶ÉèÖóÉ0  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_TruckLV, 0)  
 | 
      
 | 
    #֪ͨ¿Í»§¶ËïÚ³µAIģʽ  
 | 
    Sync_TruckMode(curPlayer)  
 | 
      
 | 
    #ÉèÖÃïÚ³µÎ޵Р 
 | 
    SkillCommon.AddBuffBySkillType(summonTruck, ChConfig.Def_SkillID_LimitSuperBuff, tick)  
 | 
      
 | 
    #ÉèÖÃAIģʽbuff  
 | 
    AddTruckStateBuff(summonTruck, tick)  
 | 
      
 | 
    DataRecordPack.DR_Truck(curPlayer, "Star", {"LV":truckLv})  
 | 
      
 | 
    #¸üÐÂïÚ³µ½øÅÅÐаñ  
 | 
    PlayerBillboard.UpdateBillboardPlayerTruck(curPlayer.GetPlayerID(), curPlayer.GetName(), curPlayer.GetOperateInfo(),  
 | 
                                               curPlayer.GetLV(), truckLv, curPlayer.GetMapID())  
 | 
      
 | 
    #ÀïÚ»îÔ¾¶È  
 | 
    #PlayerActivity.AddActivityFinishCnt(curPlayer, ShareDefine.ActivityNum_Truck)  
 | 
              
 | 
    GameWorld.Log("´´½¨ïÚ³µ³É¹¦" , curPlayer.GetPlayerID())  
 | 
    return  
 | 
  
 | 
  
 | 
## ¸ü¸ÄïÚ³µ¼Ç¼µÄ²¿·ÖÖ÷ÈËÐÅÏ¢  
 | 
#  @param curPlayer: Íæ¼ÒʵÀý  
 | 
#  @return: None  
 | 
def ChangeTruckNoteInfo(curPlayer):  
 | 
    playerTeamID = curPlayer.GetTeamID()  
 | 
    playerFamilyID = curPlayer.GetFamilyID()  
 | 
    playerNameColor = curPlayer.GetPlayerNameColor()  
 | 
      
 | 
    curTruck = curPlayer.GetTruck()  
 | 
    if curTruck:  
 | 
        SetTruckTeamID(curTruck, playerTeamID)  
 | 
        SetTruckFamilyID(curTruck, playerFamilyID)  
 | 
        SetTruckNameColor(curTruck, playerNameColor)  
 | 
        return  
 | 
      
 | 
    #ÏòGameServerÇëÇó¼Ç¼ÐÅÏ¢  
 | 
    sysmsg = "%s"%([playerTeamID, playerFamilyID, playerNameColor])  
 | 
    curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_NoteTruckOwnerInfo,   
 | 
             curPlayer.GetID(), 'NoteTruckOwnerInfo', sysmsg, len(sysmsg))  
 | 
      
 | 
    return  
 | 
  
 | 
  
 | 
## »ñµÃ¼Ç¼ïÚ³µÉíÉϵÄÖ÷È˶ÓÎéID  
 | 
#  @param curTruck: µ±Ç°ïÚ³µ  
 | 
#  @return ¼Ç¼ïÚ³µÉíÉϵÄÖ÷È˶ÓÎéID  
 | 
def GetTruckTeamID(curTruck):  
 | 
    return curTruck.GetDictByKey(Def_TruckOwnerTeamID)  
 | 
  
 | 
  
 | 
## ÉèÖÃïÚ³µÖ÷È˶ÓÎéID  
 | 
#  @param curTruck: ïÚ³µÊµÀý  
 | 
#  @param teamID: ¶ÓÎéID  
 | 
#  @return:   
 | 
def SetTruckTeamID(curTruck, teamID):  
 | 
    #¼Ç¼Ö÷È˶ÓÎéID  
 | 
    if curTruck.GetDictByKey(Def_TruckOwnerTeamID) == teamID:  
 | 
        return  
 | 
      
 | 
    curTruck.SetDict(Def_TruckOwnerTeamID, teamID)  
 | 
    return  
 | 
  
 | 
  
 | 
## »ñµÃ¼Ç¼ïÚ³µÉíÉϵÄÖ÷ÈËÃû×ÖÑÕÉ«  
 | 
#  @param curTruck: µ±Ç°ïÚ³µ  
 | 
#  @return ¼Ç¼ïÚ³µÉíÉϵÄÖ÷È˶ÓÎéID  
 | 
def GetTruckNameColor(curTruck):  
 | 
    return curTruck.GetDictByKey(Def_TruckOwnerNameColor)  
 | 
  
 | 
  
 | 
## ÉèÖÃïÚ³µÉíÉϵÄÖ÷ÈËÃû×ÖÑÕÉ«  
 | 
#  @param curTruck: µ±Ç°ïÚ³µ  
 | 
#  @return ¼Ç¼ïÚ³µÉíÉϵÄÖ÷È˶ÓÎéID  
 | 
def SetTruckNameColor(curTruck, nameColor):  
 | 
    #¼Ç¼Ö÷ÈËÃû×ÖÑÕÉ«  
 | 
    if curTruck.GetDictByKey(Def_TruckOwnerNameColor) == nameColor:  
 | 
        return  
 | 
      
 | 
    curTruck.SetDict(Def_TruckOwnerNameColor, nameColor)  
 | 
    return  
 | 
  
 | 
  
 | 
## »ñµÃ¼Ç¼ïÚ³µÉíÉϵÄÖ÷È˶ÓÎéID  
 | 
#  @param curTruck: µ±Ç°ïÚ³µ  
 | 
#  @return ¼Ç¼ïÚ³µÉíÉϵÄÖ÷È˶ÓÎéID  
 | 
def GetTruckFamilyID(curTruck):  
 | 
    return curTruck.GetDictByKey(Def_TruckOwnerFamilyID)  
 | 
  
 | 
  
 | 
## ÉèÖÃïÚ³µÖ÷È˼Ò×åID  
 | 
#  @param curTruck: ïÚ³µÊµÀý  
 | 
#  @param teamID: ¶ÓÎéID  
 | 
#  @return:   
 | 
def SetTruckFamilyID(curTruck, familyID):  
 | 
    #¼Ç¼Ö÷È˼Ò×åID  
 | 
    if curTruck.GetDictByKey(Def_TruckOwnerFamilyID) == familyID:  
 | 
        return  
 | 
      
 | 
    curTruck.SetDict(Def_TruckOwnerFamilyID, familyID)  
 | 
    return  
 | 
  
 | 
  
 | 
## ÉèÖÃïÚ³µ½ðÇ®ÀàÐÍ  
 | 
#  @param curTagTruck: ïÚ³µÊµÀý  
 | 
#  @param moneyType: ½ðÇ®ÀàÐÍ  
 | 
#  @return: None  
 | 
def __SetTruckMoneyType(curTagTruck, moneyType):  
 | 
    curTagTruck.SetMoneyType(moneyType)  
 | 
    return  
 | 
  
 | 
  
 | 
## »ñÈ¡ïÚ³µ½ðÇ®ÀàÐÍ  
 | 
#  @param curTagTruck: ïÚ³µÊµÀý  
 | 
#  @return: ïÚ³µ½ðÇ®ÀàÐÍ  
 | 
def __GetTruckMoneyType(curTagTruck):  
 | 
    return curTagTruck.GetMoneyType()  
 | 
  
 | 
  
 | 
## ÉèÖÃѺïÚÍæ¼ÒµÈ¼¶  
 | 
#  @param curTagTruck: ïÚ³µÊµÀý  
 | 
#  @param ownerLV: µÈ¼¶  
 | 
#  @return: None  
 | 
def SetTruckOwnerLV(curTagTruck, ownerLV):  
 | 
    __SetTruckMoneyType(curTagTruck, ownerLV)  
 | 
    return  
 | 
  
 | 
  
 | 
## »ñȡѺïÚÍæ¼ÒµÈ¼¶  
 | 
#  @param curTagTruck: ïÚ³µÊµÀý  
 | 
#  @param ownerLV: µÈ¼¶  
 | 
#  @return: None  
 | 
def GetTruckOwnerLV(curTagTruck):  
 | 
    value = __GetTruckMoneyType(curTagTruck)  
 | 
    if len(str(value)) <= 4:  
 | 
        return value  
 | 
      
 | 
    return int(str(value)[:-4])  
 | 
  
 | 
  
 | 
## ÉèÖýÙïÚÍæ¼ÒµÈ¼¶  
 | 
#  @param curTagTruck: ïÚ³µÊµÀý  
 | 
#  @param destroyLV: ½ÙïÚÍæ¼ÒµÈ¼¶  
 | 
#  @return: None  
 | 
def SetTruckDestroyLV(curTagTruck, destroyLV):  
 | 
    value = "%0.4d%0.4d"%(GetTruckOwnerLV(curTagTruck), destroyLV)  
 | 
    __SetTruckMoneyType(curTagTruck, int(value))  
 | 
    return  
 | 
  
 | 
  
 | 
## »ñµÃ½ÙïÚÍæ¼ÒµÈ¼¶  
 | 
#  @param curTagTruck: ïÚ³µÊµÀý  
 | 
#  @return: None  
 | 
def GetTruckDestroyLV(curTagTruck):  
 | 
      
 | 
    value = __GetTruckMoneyType(curTagTruck)  
 | 
      
 | 
    if len(str(value)) <= 4:  
 | 
        return 0  
 | 
      
 | 
    return int(str(value)[-4:])  
 | 
  
 | 
  
 | 
#class   IPY_MTruckRefresh  
 | 
#{  
 | 
#public:  
 | 
#    //ÓµÓÐÕßID  
 | 
#    int      GetPlayerID();  
 | 
#    //æô³µID  
 | 
#    int      GetTruckID();  
 | 
#    //æô³µ×´Ì¬  
 | 
#    int      GetTruckState();  
 | 
#};  
 | 
  
 | 
## ÓÎÏ··þÎñÆ÷ïÚ³µË¢ÐÂ(·â°ü²ÎÊý)  
 | 
#  @param index Íæ¼ÒË÷Òý  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def  GameServer_TruckRefresh(index, tick):  
 | 
    sendPack = IPY_GameWorld.IPY_MTruckRefresh()  
 | 
    #GetAllFbNPCManager : µÃµ½ËùÓи±±¾ÖеÄNPC¹ÜÀíÆ÷, æô³µ´æÔÚÓÚËùÓÐÓи±±¾  
 | 
    curTruck = GameWorld.GetAllFbNPCManager().FindTruckByID(sendPack.GetTruckID())  
 | 
    if curTruck == None:  
 | 
        GameWorld.Log("ûÓÐҪˢÐÂµÄæô³µ id = %d"%sendPack.GetTruckID())  
 | 
        return  
 | 
      
 | 
    if (sendPack.GetTruckState() == IPY_GameWorld.tusDisappear):  
 | 
        #ÉèÖÃΪÏûʧ״̬, ÔÚAIÖд¦Àí×Ô¼ºµÄÏûʧÂß¼  
 | 
        #ÒòΪ·â°ü´¦ÀíÊÇÔÚ¸±±¾1ÖÐ, æô³µÓпÉÄÜÔÚ¸±±¾2,3,4...ÖÐ, ÏûʧÂß¼±ØÐëÔÚµ±Ç°¸±±¾´¦Àí  
 | 
        curTruck.SetIsDisappear(1)  
 | 
          
 | 
        ##ɾ³ýÅÅÐаñÉϵÄïÚ³µÐÅÏ¢  
 | 
        PlayerBillboard.UpdateBillboardPlayerTruck(curTruck.GetOwnerID(), "", "", "", "", 0)  
 | 
              
 | 
#        curPlayer = NPCCommon.GetSummonNPCOwner(IPY_GameWorld.gotPlayer, curTruck)  
 | 
#  
 | 
#        if curPlayer:  
 | 
#            #æô³µÏûʧ  
 | 
#            if curPlayer.GetPlayerVehicle() == IPY_GameWorld.pvTruck:  
 | 
#                #Èç¹ûÍæ¼ÒµÄ½»Í¨¹¤¾ßΪæô³µµÄ»°, À뿪æô³µ  
 | 
#                PlayerTruckDown(curPlayer, curTruck)  
 | 
#      
 | 
#            curPlayer.SetTruckID(0)  
 | 
#            curPlayer.SetTruckState(IPY_GameWorld.tusNull)  
 | 
#            curPlayer.SetTruck(None)  
 | 
#              
 | 
#        curTruck.Disappear()  
 | 
        return  
 | 
  
 | 
    return  
 | 
  
 | 
  
 | 
#class       IPY_MTruckMsg  
 | 
#{  
 | 
#    //get×Ô¶¯Éú³É  
 | 
#    int      GetHead();  
 | 
#    int      GetType();                //1.±»¹¥»÷֪ͨ  
 | 
#  
 | 
#    //set×Ô¶¯Éú³É  
 | 
#    void                SetHead(int inputHead);  
 | 
#    void                SetType(int inputType);         //1.±»¹¥»÷֪ͨ  
 | 
#};  
 | 
## ÓÎÏ··þÎñÆ÷ïÚ³µÐÅÏ¢(·â°ü²ÎÊý)  
 | 
#  @param index Íæ¼ÒË÷Òý  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def  GameServer_TruckMsg(index, tick):  
 | 
    sendPack = IPY_GameWorld.IPY_MTruckMsg()  
 | 
    return  
 | 
  
 | 
  
 | 
## æô³µË¢Ð»ØÓ¦(·â°ü²ÎÊý)  
 | 
#  @param index Íæ¼ÒË÷Òý  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def GameServer_TruckRefreshAnswer(index, tick):  
 | 
    sendPack = IPY_GameWorld.IPY_MTruckRefreshAnswer()  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
      
 | 
    if sendPack.GetPlayerID() != curPlayer.GetID():  
 | 
        #²»ÊÇ×Ô¼ºµÄæô³µ  
 | 
        return   
 | 
      
 | 
    if curPlayer.GetTruckID() != 0 and sendPack.GetTruckID() == 0:  
 | 
        OnPlayerTruckDisappear(curPlayer)  
 | 
        return   
 | 
      
 | 
    curPlayer.SetTruckID(sendPack.GetTruckID())  
 | 
      
 | 
    #ÉèÖÃïÚ³µ×´Ì¬buff  
 | 
    curTruck = curPlayer.GetTruck()  
 | 
    if curTruck:  
 | 
        AddTruckStateBuff(curTruck, tick)  
 | 
          
 | 
    #֪ͨ¿Í»§¶ËïÚ³µAIģʽ  
 | 
    Sync_TruckMode(curPlayer)  
 | 
      
 | 
    GameWorld.Log("ÊÕµ½æô³µË¢Ð»ØÓ¦, id = %d, mapid = %d"%(sendPack.GetTruckID(), sendPack.GetMapID()) , curPlayer.GetPlayerID())  
 | 
    return  
 | 
  
 | 
## Íæ¼ÒïÚ³µÊ§°Ü¶ªÊ§  
 | 
def OnPlayerTruckDisappear(curPlayer):  
 | 
    #æô³µ¶ªÊ§, ´¥·¢æô³µ¶ªÊ§ÈÎÎñ  
 | 
    curPlayer.SetTruckID(0)  
 | 
    curPlayer.SetTruckState(IPY_GameWorld.tusDisappear)  
 | 
    curPlayer.SetTruck(None)  
 | 
      
 | 
    DataRecordPack.DR_Truck(curPlayer, "Disappear", {})  
 | 
      
 | 
    #Truck_hgg_149184:ÄúÒÑÀëÏß³¬¹ý5·ÖÖÓ,ïÚ³µ±»»ØÊÕ.  
 | 
    PlayerControl.NotifyCode(curPlayer, "Truck_hgg_149184")  
 | 
    EventShell.EventRespons_OnTruckDisappear(curPlayer, curPlayer.GetTruckEventID())  
 | 
    return  
 | 
  
 | 
## É¾³ýÍæ¼ÒµÄæô³µ  
 | 
#  @param curPlayer µ±Ç°Íæ¼Ò  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def DelTruck(curPlayer):  
 | 
    curTruck = curPlayer.GetTruck()  
 | 
    if curTruck == None:  
 | 
        GameWorld.Log("DelTruck -> Ã»ÓÐæô³µ¿Éɾ³ý!" , curPlayer.GetPlayerID())  
 | 
        curPlayer.GameServer_DelTruck()  
 | 
        return  
 | 
      
 | 
    if GetHaveAutoTruck(curPlayer):  
 | 
        #Èç¹ûÍæ¼ÒµÄ½»Í¨¹¤¾ßΪæô³µµÄ»°, À뿪æô³µ  
 | 
        PlayerTruckDown(curPlayer, curTruck)  
 | 
          
 | 
          
 | 
    curPlayer.SetTruckID(0)  
 | 
    curPlayer.SetTruckState(IPY_GameWorld.tusNull)  
 | 
    curPlayer.SetTruck(None)  
 | 
      
 | 
    curTruck.GameServer_Sync_TruckState(IPY_GameWorld.tusNull)  
 | 
    curTruck.Disappear()  
 | 
      
 | 
    #ɾ³ýÅÅÐаñÉϵÄïÚ³µÐÅÏ¢  
 | 
    PlayerBillboard.UpdateBillboardPlayerTruck(curPlayer.GetID(), "", "", "", "", 0)  
 | 
      
 | 
    GameWorld.Log("ɾ³ýÍæ¼Òæô³µ" , curPlayer.GetPlayerID())  
 | 
    #GameWorld.Log("֪ͨGameServeræô³µÏûʧ!")  
 | 
      
 | 
    return  
 | 
  
 | 
#Íæ¼Ò½øÈëæô³µ  
 | 
#//////////////////////////////////////////////////////////////  
 | 
#//0B 02 Íæ¼Ò½øÈëæô³µ#tagCGetOnTruck  
 | 
#tagCGetOnTruck       *   GettagCGetOnTruck();  
 | 
#  
 | 
#class   IPY_CGetOnTruck  
 | 
#{  
 | 
#public:  
 | 
#    //1:ϳµ 2:Éϳµ  
 | 
#    int      GetType();  
 | 
#};  
 | 
  
 | 
#Äܹ»¿ªÊ¼ÈËïÚºÏÒ»µÄ״̬  
 | 
Def_CanTruckCarryState = [IPY_GameWorld.paNull]  
 | 
  
 | 
## Ö´ÐÐÍæ¼Ò½øÈëïÚ³µÂß¼  
 | 
#  @param curPlayer µ±Ç°Íæ¼Ò  
 | 
#  @param curPlayerType µ±Ç°Íæ¼Ò״̬  
 | 
#  @param tick µ±Ç°Ê±¼ä   
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def DoPlayerEnterTruck(curPlayer, curPlayerType, tick):  
 | 
    #ïÚ³µ  
 | 
    curPlayerTruck = curPlayer.GetTruck()  
 | 
    #¸ÃÍæ¼ÒÎÞïÚ³µ  
 | 
    if curPlayerTruck == None :  
 | 
        GameWorld.Log("DoPlayerEnterTruck -> ÎÞ·¨ÕÒµ½ïÚ³µ" , curPlayer.GetPlayerID())  
 | 
        return  
 | 
      
 | 
#    if curPlayerTruck.GetHP() == 0:  
 | 
#        GameWorld.Log("ïÚ³µÒÑËÀÍö, ¾Ü¾ø")  
 | 
#        return  
 | 
      
 | 
    #ϳµÂß¼  
 | 
    if curPlayerType == 1:  
 | 
        if CheckTruckCarryerDown(curPlayer,curPlayerTruck) != True :  
 | 
            return  
 | 
        #ϳµ  
 | 
        PlayerTruckDown(curPlayer,curPlayerTruck)  
 | 
    #ÉϳµÂß¼  
 | 
    elif curPlayerType == 2:  
 | 
        #Åж¨Ìõ¼þ,ÎÞ·¨ÈËïÚºÏÒ»  
 | 
        if curPlayer.GetPlayerAction() not in Def_CanTruckCarryState:  
 | 
            #GameWorld.Log("ÉÏæô³µ×´Ì¬²»¶Ô")   
 | 
            return  
 | 
          
 | 
        if not CheckTruckCarryerUP(curPlayer,curPlayerTruck):  
 | 
            #GameWorld.Log("ÈËïÚºÏÒ»,ÎÞЧ¹û speed = %d"%curPlayerTruck.GetSpeed())  
 | 
            return  
 | 
          
 | 
        GameWorld.Log("×¼±¸ÈËïÚºÏÒ»¿ªÊ¼" , curPlayer.GetPlayerID() )  
 | 
        PlayerControl.Sync_PrepareBegin( curPlayer, ChConfig.Def_RidehorseTime, IPY_GameWorld.pstTruck )  
 | 
          
 | 
    else:  
 | 
        GameWorld.Log("ÈËïÚºÏÒ»,·â°üÀàÐÍ = %s´íÎó"%(curPlayerType) , curPlayer.GetPlayerID())  
 | 
          
 | 
    return  
 | 
  
 | 
## ÈËïÚºÏÒ»ÖÐ(·â°ü²ÎÊý)  
 | 
#  @param index Íæ¼ÒË÷Òý  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def OnPlayerEnterTruck(index, tick):  
 | 
#===============================================================================  
 | 
#    sendPack = IPY_GameWorld.IPY_CGetOnTruck()  
 | 
#    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
#    curPlayerType = sendPack.GetType()  
 | 
#    DoPlayerEnterTruck(curPlayer, curPlayerType, tick)  
 | 
#===============================================================================  
 | 
    return  
 | 
  
 | 
## ÉϳµÂß¼¼ì²é   
 | 
#  @param curPlayer µ±Ç°Íæ¼Ò  
 | 
#  @param curPlayerTruck Íæ¼ÒïÚ³µ  
 | 
#  @return True or False  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def CheckTruckCarryerUP(curPlayer,curPlayerTruck):  
 | 
    #¸ÃÍæ¼ÒÎÞïÚ³µ  
 | 
    if curPlayerTruck == None :  
 | 
        #GameWorld.Log("ÎÞ·¨ÕÒµ½ïÚ³µ")  
 | 
        return False  
 | 
      
 | 
    if curPlayer.GetPlayerVehicle() != IPY_GameWorld.pvNull :  
 | 
        PlayerControl.NotifyCode(curPlayer,"Old_hgg_874335")  
 | 
        #GameWorld.Log("curPlayer.GetPlayerVehicle()²»Îª¿Õ ×´Ì¬²»¶Ô")   
 | 
        return False  
 | 
      
 | 
    if not curPlayer.IsAlive():  
 | 
        #ËÀÍö״̬²»´¦Àí  
 | 
        #GameWorld.Log("ËÀÍö״̬²»´¦Àí")  
 | 
        return False  
 | 
      
 | 
    #Õ½¶·×´Ì¬·µ»Ø  
 | 
    if curPlayer.IsBattleState() :  
 | 
        PlayerControl.NotifyCode(curPlayer,"Old_hgg_287294")  
 | 
        #GameWorld.Log("ÈËïÚºÏһʧ°Ü, ÈËÎïÔÚÕ½¶·×´Ì¬")  
 | 
        return False  
 | 
      
 | 
    #ºìÃû²»ÄÜÉÏïÚ³µ  
 | 
    if curPlayer.GetPlayerNameColor() == IPY_GameWorld.pncRed :  
 | 
        #Old_hgg_772753 ¶Ô²»Æð£¬ºìÃûÍæ¼ÒÎÞ·¨ÉÏïÚ³µ  
 | 
        PlayerControl.NotifyCode(curPlayer,"Old_hgg_772753")  
 | 
        return False  
 | 
      
 | 
    #ÅжϾàÀë  
 | 
    #»ñµÃÍæ¼ÒºÍïÚ³µ¼äµÄ¾àÀë  
 | 
    dist = GameWorld.GetDist(curPlayerTruck.GetPosX(), curPlayerTruck.GetPosY(),  
 | 
                             curPlayer.GetPosX(),curPlayer.GetPosY())  
 | 
    #ÈËïÚºÏÒ»µÄ¾àÀë  
 | 
    if dist > ChConfig.Def_PlayerTruckCarryerDist:  
 | 
        PlayerControl.NotifyCode(curPlayer,"Old_hgg_976459")  
 | 
        #GameWorld.Log("ÈËïÚºÏһʧ°Ü,³¬³ö×î´ó¾àÀë")  
 | 
        return False  
 | 
      
 | 
    return True  
 | 
  
 | 
## Íæ¼ÒÉÏïÚ³µ  
 | 
#  @param curPlayer µ±Ç°Íæ¼Ò  
 | 
#  @param resetPos ÉϳµºóÊÇ·ñÖØÖÃ×Ô¼ºµÄλÖà  
 | 
#  @param checkState ÊÇ·ñ¼ì²âÍæ¼Òµ±Ç°×´Ì¬  
 | 
#  @param checkCanCarryerUp ÊÇ·ñÇ¿ÖÆÉϳµ  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def PlayerTruckUP(curPlayer, resetPos = True, checkState = True, checkCanCarryerUp = True):  
 | 
    #²»ÔÚ×¼±¸×´Ì¬  
 | 
    if checkState and curPlayer.GetPlayerAction() != IPY_GameWorld.paPreparing:  
 | 
        #GameWorld.Log("²»ÔÚ×¼±¸×´Ì¬")  
 | 
        return  
 | 
      
 | 
    curPlayerTruck = curPlayer.GetTruck()  
 | 
      
 | 
    if not curPlayerTruck:  
 | 
        return  
 | 
      
 | 
    if checkCanCarryerUp and not CheckTruckCarryerUP(curPlayer,curPlayerTruck):  
 | 
        #²»ÒªÓÃcurPlayerTruck, ÒòΪcurPlayerTruckÓпÉÄÜΪ¿Õ  
 | 
        #GameWorld.Log("ÈËïÚºÏÒ»,ÎÞЧ¹û")  
 | 
        return  
 | 
          
 | 
    #Ìí¼Ó±³¸ºÕß  
 | 
    curPlayerTruck.AddCarryPlayer(curPlayer)  
 | 
    #ÉèÖÃÍæ¼ÒΪÎÞµÐ״̬  
 | 
    curPlayer.SetCanAttack(False)  
 | 
    #ÉèÖÃΪ²»¿É¼û״̬  
 | 
    curPlayer.SetVisible(False)  
 | 
    #ÉèÖñ³¸ºÕß  
 | 
    curPlayer.SetCarryerNPC(curPlayerTruck)  
 | 
    #ÉèÖÃÍæ¼Ò×ø±êΪïÚ³µ×ø±ê  
 | 
    if resetPos:  
 | 
        GameWorld.ResetPlayerPos( curPlayer, curPlayerTruck.GetPosX(), curPlayerTruck.GetPosY() )  
 | 
          
 | 
    #ÉèÖÃÍæ¼Ò½»Í¨¹¤¾ß:ïÚ³µ  
 | 
    curPlayer.SetPlayerVehicle(IPY_GameWorld.pvTruck)  
 | 
      
 | 
    #֪ͨ¿Í»§¶Ë  
 | 
    curPlayer.Sync_GetOnTruck(1)  
 | 
    curPlayerTruck.StopMove()  
 | 
    GameWorld.Log("ÈËïÚºÏÒ»,³É¹¦" , curPlayer.GetPlayerID())  
 | 
    return  
 | 
  
 | 
## Ï³µÂß¼¼ì²é   
 | 
#  @param curPlayer µ±Ç°Íæ¼Ò  
 | 
#  @param curPlayerTruck µ±Ç°Íæ¼ÒïÚ³µ  
 | 
#  @return True or False  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def CheckTruckCarryerDown(curPlayer,curPlayerTruck) :  
 | 
    if curPlayer.GetPlayerVehicle() != IPY_GameWorld.pvTruck:  
 | 
        return False  
 | 
    return True  
 | 
  
 | 
## Ï³µ(²ÎÊý -> µ±Ç°Íæ¼Ò,µ±Ç°Íæ¼ÒïÚ³µ)  
 | 
#  @param curPlayer µ±Ç°Íæ¼Ò  
 | 
#  @param curPlayerTruck µ±Ç°Íæ¼ÒïÚ³µ  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def PlayerTruckDown(curPlayer,curPlayerTruck) :  
 | 
    return  
 | 
  
 | 
    #жϱ³¸ºÕß  
 | 
    curPlayerTruck.PutDownPlayer(curPlayer)  
 | 
    #ÉèÖÃÍæ¼ÒΪ·ÇÎÞµÐ״̬  
 | 
    curPlayer.SetCanAttack(True)  
 | 
    #ÉèÖÃΪ¿É¼û  
 | 
    curPlayer.SetVisible(True)  
 | 
    #ÉèÖñ³¸ºÕß  
 | 
    curPlayer.SetCarryerNPC(None)  
 | 
    #ÉèÖý»Í¨¹¤¾ß  
 | 
    curPlayer.SetPlayerVehicle(IPY_GameWorld.pvNull)  
 | 
      
 | 
    #֪ͨ¿Í»§¶Ë  
 | 
    curPlayer.Sync_GetOnTruck(0)  
 | 
    curPlayerTruck.StopMove()  
 | 
    return   
 | 
  
 | 
## ïÚ³µÏú»ÙÂß¼   
 | 
#  @param curPlayer µ±Ç°Íæ¼Ò  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def DoPlayerTruckDestroy(curPlayer):  
 | 
    GameWorld.Log( "Íæ¼Òæô³µ»Ù»µ!" , curPlayer.GetPlayerID() )  
 | 
      
 | 
    EventShell.EventRespons_OnTruckDestroy( curPlayer, curPlayer.GetTruckEventID() )  
 | 
      
 | 
#===============================================================================  
 | 
#    2009.05.10 ÒòÆÆËðµÄïÚ³µÇл»µØÍ¼½«µ÷Óõ½ÕâÀï,µ¼ÖÂÍæ¼Ò½øÈëÆÆïÚ³µÇеØÍ¼Ï³µ,ϳµÂß¼Ð޸ĵ½Íæ¼Ò±»¹¥»÷ʱ  
 | 
#    if curPlayer.GetPlayerVehicle() == IPY_GameWorld.pvTruck:  
 | 
#        #Èç¹ûÍæ¼ÒÔÚÈËïÚºÏһ״̬, ÏÂæô³µ  
 | 
#        #GameWorld.Log("Èç¹ûÍæ¼ÒÔÚÈËïÚºÏһ״̬, ÏÂæô³µ")  
 | 
#        curPlayerTruck = curPlayer.GetTruck()  
 | 
#        #¸ÃÍæ¼ÒÎÞïÚ³µ  
 | 
#        if curPlayerTruck == None :  
 | 
#            GameWorld.Log("DoPlayerTruckDestroy -> ÎÞ·¨ÕÒµ½ïÚ³µ" , curPlayer.GetPlayerID())  
 | 
#            return  
 | 
#          
 | 
#        PlayerTruckDown(curPlayer,curPlayerTruck)  
 | 
#===============================================================================  
 | 
  
 | 
## GameServerÍ¨ÖªÍæ¼Òæô³µË¢ÐÂ(·â°ü²ÎÊý)  
 | 
#  @param index Íæ¼ÒË÷Òý  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def GameServer_PlayerTruckStateRefresh(index, tick):  
 | 
    sendPack = IPY_GameWorld.IPY_MPlayerTruckStateRefresh()  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
      
 | 
    if curPlayer == None:  
 | 
        #ÎÞ´ËÍæ¼ÒÁË  
 | 
        return  
 | 
      
 | 
    if sendPack.GetPlayerID() != curPlayer.GetID():  
 | 
        #²»ÊÇ×Ô¼ºµÄ·â°ü  
 | 
        return   
 | 
    curState = sendPack.GetState()  
 | 
    curPlayer.SetTruckState(curState)  
 | 
    if curState == IPY_GameWorld.tusDestroy:   
 | 
        DoPlayerTruckDestroy(curPlayer)  
 | 
        return  
 | 
      
 | 
    if curState == IPY_GameWorld.tusNull:  
 | 
        #æô³µÏûʧ  
 | 
              
 | 
        curPlayer.SetTruckID(0)  
 | 
        curPlayer.SetTruck(None)  
 | 
        return  
 | 
      
 | 
############################################´òÀÃÂß¼#######################      
 | 
## Ö´ÐÐïÚ³µË𻵠 
 | 
#  @param curTruck µ±Ç°ïÚ³µ  
 | 
#  @return None  
 | 
#  @remarks æô³µ±»´òÀÃÁË, Í¨ÖªÔ¶ÔÚµØÍ¼ÁíÍâÒ»¶ËµÄÖ÷ÈËÕâ¸ö±¯Í´µÄÐÅÏ¢  
 | 
def DoTruckDestroy(curTruck):  
 | 
      
 | 
    if not curTruck.GetCanAttack():  
 | 
        #ÒѾִÐйýïÚ³µ±»´ò»µ½±Àø  
 | 
        return  
 | 
      
 | 
    #æô³µ»Ù»µ  
 | 
    curTruck.GameServer_Sync_TruckState(IPY_GameWorld.tusDestroy)  
 | 
    curTruck.SetCanAttack(0)  
 | 
    curTruck.StopMove()  
 | 
      
 | 
    #æô³µ±»Íæ¼ÒɱËÀ¸øÍæ¼ÒÇ®  
 | 
    DoTruckKilledGiveKillerPlayerMoney(curTruck)  
 | 
      
 | 
    #ïÚ³µÖ÷ÈËID  
 | 
    truckOwnerID = curTruck.GetOwnerID()  
 | 
      
 | 
    #ÒѾ±»´ò½Ùϰñ  
 | 
    PlayerBillboard.UpdateBillboardPlayerTruck(truckOwnerID, "", "", "", "", 0)  
 | 
    #-----------------------  
 | 
      
 | 
    #»ñÈ¡ïÚ³µÖ÷ÈË  
 | 
    curTagPlayer = NPCCommon.GetSummonNPCOwner(IPY_GameWorld.gotPlayer, curTruck)  
 | 
    killTruckPlayer = GetKillTruckPlayer(curTruck)  
 | 
    if killTruckPlayer:  
 | 
        killTruckPlayerName = killTruckPlayer.GetName()  
 | 
    else:  
 | 
        killTruckPlayerName = ""  
 | 
          
 | 
    exp, zhenQi, prestige, moneyCnt, moneyType, truckState, isDoubleAward = __GetTruckAwack(curTagPlayer, curTruck, 1)  
 | 
    if not curTagPlayer:  
 | 
        #µ±Ç°µØÍ¼ÕÒ²»µ½ïÚ³µµÄÖ÷ÈË, ÇëÇóGameServer֪ͨ  
 | 
        sendMsg = str([killTruckPlayerName, exp, zhenQi, prestige, moneyCnt, moneyType])  
 | 
        GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(truckOwnerID, 0, 0,   
 | 
                                              'NotifyTruckDestroy', sendMsg, len(sendMsg))  
 | 
        return  
 | 
      
 | 
    if killTruckPlayerName:  
 | 
        #Truck_hgg_492527 ÄúµÄïÚ³µ±»XXXX´ò½Ù,ËðʧXXX¾Ñé,XXX½ð±Ò,xxxħ»ê  
 | 
        PlayerControl.NotifyCode(curTagPlayer, "Truck_hgg_492527", [killTruckPlayerName, exp,   
 | 
                                                                    moneyCnt, zhenQi])  
 | 
    else:  
 | 
        #Truck_hgg_887936 ÄúµÄïÚ³µ²ÒÔâÏ´½Ù,ËðʧXXX¾Ñé,XXX½ð±Ò,xxxħ»ê  
 | 
        PlayerControl.NotifyCode(curTagPlayer, "Truck_hgg_887936", [exp, moneyCnt, zhenQi])  
 | 
      
 | 
    DataRecordPack.DR_Truck(curTagPlayer, "Destroy", {"MoneyCount":moneyCnt, "ZhenQi":zhenQi, "Prestige":prestige})  
 | 
    GameWorld.Log("æô³µ±»´òÀÃÁË, Í¨ÖªÔ¶ÔÚµØÍ¼ÁíÍâÒ»¶ËµÄÖ÷ÈËÕâ¸ö±¯Í´µÄÐÅÏ¢ = %s"%(curTruck.GetID()))  
 | 
    return  
 | 
  
 | 
  
 | 
## »ñÈ¡½ÙïÚÍæ¼Ò  
 | 
#  @param curTruck: ïÚ³µÊµÀý  
 | 
#  @return: ½ÙïÚÍæ¼Ò  
 | 
def GetKillTruckPlayer(curTruck):  
 | 
    npcHurtList = curTruck.GetPlayerHurtList()  
 | 
    maxHurtObj = npcHurtList.GetLastTimeHurtValue()  # ×îºó²¹µ¶Õß  
 | 
      
 | 
    if  maxHurtObj.GetValueType() == ChConfig.Def_NPCHurtTypeNPC:  
 | 
        #×îºó²¹µ¶ÕßÊÇNPC  
 | 
        curNPC = GameWorld.GetObj(maxHurtObj.GetValueID(), IPY_GameWorld.gotNPC)  
 | 
        return NPCCommon.GetNpcObjOwnerDetail(curNPC)  
 | 
      
 | 
    if maxHurtObj.GetValueType() == ChConfig.Def_NPCHurtTypePlayer:  
 | 
        #×îºó²¹µ¶ÕßÊÇÍæ¼Ò  
 | 
        return GameWorld.GetObj(maxHurtObj.GetValueID(), IPY_GameWorld.gotPlayer)  
 | 
      
 | 
    return None  
 | 
  
 | 
  
 | 
## æô³µ±»Íæ¼ÒɱËÀ, ¸øÍæ¼ÒÇ®   
 | 
#  @param curTruck µ±Ç°ïÚ³µ  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def DoTruckKilledGiveKillerPlayerMoney(curTruck):  
 | 
    curPlayer = GetKillTruckPlayer(curTruck)  
 | 
    if not curPlayer:  
 | 
        #µ±Ç°µØÍ¼ÕÒ²»µ½½ÙïÚµÄÍæ¼Ò  
 | 
        return  
 | 
      
 | 
    #Truck_hgg_279029 XXXXXµÄXXïÚ³µ±»OOOOÇÀ½ÙÁË  
 | 
    truckLV = curTruck.GetLV()  
 | 
    if truckLV in ReadChConfig.GetEvalChConfig("TruckWorldNotifyLv"):  
 | 
        PlayerControl.WorldNotify(0, "Truck_hgg_279029", [curTruck.GetName(), truckLV, curPlayer.GetName()])  
 | 
      
 | 
    if not CanAttackTruck(curPlayer):  
 | 
        #Truck_hgg_481766 XXXµÄïÚ³µÒѾ±»ÄúÆÆ»µ,µ«ÊÇÄú½ñÈÕÊ£Óà½ÙïÚ´ÎÊýΪ0,ËùÒÔÎÞ·¨»ñµÃÊÕÒæ.  
 | 
        PlayerControl.NotifyCode(curPlayer, "Truck_hgg_481766", [curTruck.GetName()])   
 | 
        return  
 | 
      
 | 
    #ÉèÖýÙïÚÍæ¼ÒµÈ¼¶  
 | 
    SetTruckDestroyLV(curTruck, curPlayer.GetLV())  
 | 
      
 | 
    #¸øÓèïÚ³µ½±Àø  
 | 
    GiveTruckAward(curPlayer, curTruck, 1)  
 | 
      
 | 
    #ÉèÖýÙïÚ´ÎÊý+1  
 | 
    destroyTruckCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_DestroyTruckCnt)  
 | 
    SetDestroyTruckCnt(curPlayer, destroyTruckCnt + 1)  
 | 
      
 | 
  
 | 
## ÉèÖýÙïÚ´ÎÊý  
 | 
#  @param curPlayer: Íæ¼ÒʵÀý  
 | 
#  @param count: ½ÙïÚ´ÎÊý  
 | 
#  @return: None  
 | 
def SetDestroyTruckCnt(curPlayer, count):  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_DestroyTruckCnt, count)  
 | 
      
 | 
    #֪ͨ¿Í»§¶Ë½ÙïÚ´ÎÊý  
 | 
    Sync_DestroyTruckCnt(curPlayer)  
 | 
    return  
 | 
  
 | 
  
 | 
## »ñÈ¡ïÚ³µ½±Àø(½ÙïÚºÍÔËïÚ)  
 | 
#  @param curPlayer: Íæ¼ÒʵÀý  
 | 
#  @param curTruck: ½ÙµÄïÚ³µÊµÀý  
 | 
#  @param awardType: ½±ÀøÀàÐÍ: 0:ÔËïÚ½±Àø, 1:½ÙïÚ½±Àø  
 | 
#  @return: ½±ÀøµÄ¾Ñé, ÕæÆø, ÍþÍû, ½ðÇ®, ½ðÇ®ÀàÐÍ  
 | 
def __GetTruckAwack(curPlayer, curTruck, awardType=0, isTimeOut=False):  
 | 
    #¸øÓè½±Àø  
 | 
    baseExp = GetTruckBaseExp(curTruck)  # »ù´¡¾Ñé  
 | 
    baseZhenQi = GetTruckBaseZhenQi(curTruck)  # »ù´¡ÕæÆø  
 | 
    basePrestige = GetTruckBasePrestige(curTruck)  # »ù´¡ÍþÍû  
 | 
    baseMoney, moneyType = GetTruckBaseMoney(curTruck)  # »ù´¡½ðÇ®  
 | 
    truckLv = curTruck.GetLV()  # ïÚ³µµÈ¼¶  
 | 
    truckOwnerLV = GetTruckOwnerLV(curTruck)  # ÑºïÚÍæ¼ÒµÈ¼¶  
 | 
    truckDestroyLV = GetTruckDestroyLV(curTruck)  # ½ÙïÚÍæ¼ÒµÈ¼¶  
 | 
    reExp = 0  
 | 
    reMoney = 0  
 | 
    if truckDestroyLV <= 0:  
 | 
        truckDestroyLV = truckOwnerLV  
 | 
          
 | 
    truckState = IsTruckDestroy(curTruck)  # ïÚ³µ×´Ì¬(ÍêºÃ»ò±»½Ù)  
 | 
      
 | 
    if awardType == 1:  
 | 
        truckAwardDict = ReadChConfig.GetEvalChConfig("TruckDestroyAward")  
 | 
    else:  
 | 
        truckAwardDict = ReadChConfig.GetEvalChConfig("TruckOverAward")  
 | 
        awardKey = 1 if (truckState or isTimeOut) else 0 # ±»½ÙºÍ³¬Ê±½±ÀøÒ»Ñù  
 | 
        truckAwardDict = truckAwardDict.get(awardKey, {})  
 | 
      
 | 
    exp = int(eval(truckAwardDict.get("Exp", "0")))  # ¾Ñé  
 | 
    zhenQi = int(eval(truckAwardDict.get("ZhenQi", "0")))  # ÕæÆø  
 | 
    prestige = int(eval(truckAwardDict.get("Prestige", "0")))  # ÍþÍû  
 | 
    moneyCnt = int(eval(truckAwardDict.get("Money", "0")))  # ½ðÇ®  
 | 
      
 | 
    #Èç¹ûÔÚË«±¶½±ÀøÊ±¼ä¶ÎÄÚ,½±Àø·±¶  
 | 
    isDoubleAward = CheckDoubleAward()  
 | 
    if isDoubleAward:  
 | 
        exp, zhenQi, prestige, moneyCnt = exp*2, zhenQi*2, prestige*2, moneyCnt*2  
 | 
          
 | 
    if curPlayer and awardType == 0:  
 | 
        # ¹ó×å¼Ó³É  
 | 
        pass  
 | 
      
 | 
    return exp, zhenQi, prestige, moneyCnt, moneyType, truckState, isDoubleAward  
 | 
  
 | 
  
 | 
## ¸øÓèïÚ³µ½±Àø  
 | 
#  @param curPlayer: Íæ¼ÒʵÀý  
 | 
#  @param curTruck: ½ÙµÄïÚ³µÊµÀý  
 | 
#  @param awardType: ½±ÀøÀàÐÍ: 0:ÔËïÚ½±Àø, 1:½ÙïÚ½±Àø  
 | 
#  @return: None  
 | 
def GiveTruckAward(curPlayer, curTruck, awardType=0, isTimeOut=False):  
 | 
    exp, zhenQi, prestige, moneyCnt, moneyType, truckState, isDoubleAward = __GetTruckAwack(curPlayer, curTruck, awardType, isTimeOut)  
 | 
    if awardType == 1:  
 | 
        #Truck_hgg_827276 Äú´ò½ÙÁËXXXµÄïÚ³µ,Ò»¹²»ñµÃXXX¾Ñé,XXX½ð±Ò,xxxħ»ê  
 | 
        PlayerControl.NotifyCode(curPlayer, "Truck_hgg_827276", [curTruck.GetName(), exp, moneyCnt, zhenQi])  
 | 
          
 | 
        DataRecordPack.DR_Truck(curPlayer, "Kill", {"MoneyCount":moneyCnt, "ZhenQi":zhenQi, "Prestige":prestige})  
 | 
          
 | 
        #ÇëÇó¼Ç¼½ÙïÚÐÅÏ¢¹©¿Í»§¶ËÏÔʾ  
 | 
        GameWorld.AddUniversalGameRec(curPlayer.GetPlayerID(), ShareDefine.Def_UniversalGameRecType_HijackTruck,   
 | 
                                      [curTruck.GetLV(), exp, moneyCnt, zhenQi], [curPlayer.GetName(), curTruck.GetName(), ""])  
 | 
    else:  
 | 
        #Truck_hgg_20296 ÄúÔÚ±¾´Î»¤ËÍïÚ³µµÄÈÎÎñÖÐÒ»¹²»ñµÃXXX¾Ñé,XXX½ð±Ò,xxxħ»ê  
 | 
        #PlayerControl.NotifyCode(curPlayer, "Truck_hgg_20296", [exp, moneyCnt, zhenQi])  
 | 
        DataRecordPack.DR_Truck(curPlayer, "End", {"MoneyCount":moneyCnt, "ZhenQi":zhenQi, "Prestige":prestige})  
 | 
      
 | 
    #¾Ñé  
 | 
    if exp > 0:  
 | 
        playerControl = PlayerControl.PlayerControl(curPlayer)  
 | 
        playerControl.AddExp(exp)  
 | 
      
 | 
    #ÕæÆø  
 | 
    if zhenQi > 0:  
 | 
        PlayerControl.PlayerAddZhenQi(curPlayer, zhenQi, True, True, "Truck")  
 | 
      
 | 
#    #ÍþÍû  
 | 
#    if prestige > 0:  
 | 
#        PlayerPrestigeSys.AddPrestigeOffcialLV(curPlayer, prestige, ChConfig.Def_AddPrestige_Truck)  
 | 
          
 | 
    #½ðÇ®  
 | 
    if moneyCnt > 0:  
 | 
        addDataDict = {ChConfig.Def_Give_Reason_SonKey:awardType}  
 | 
        PlayerControl.GiveMoney(curPlayer, moneyType, moneyCnt, ChConfig.Def_GiveMoney_Truck, addDataDict)  
 | 
          
 | 
    #Á÷Ïò¼Ç¼  
 | 
      
 | 
    # ³É¾Í  
 | 
#    if awardType == 0:  
 | 
#        #ѺïÚ´ÎÊýÀÛ¼ÆÈÎÎñ  
 | 
#        EventShell.EventRespons_TruckCnt(curPlayer)  
 | 
#          
 | 
#        succType = ShareDefine.SuccType_Truck  
 | 
#    else:  
 | 
#        succType = ShareDefine.SuccType_TruckRob  
 | 
#    PlayerSuccess.DoAddSuccessProgress(curPlayer, succType, 1)  
 | 
      
 | 
    truckAward = ChPyNetSendPack.tagMCTruckAward()  
 | 
    truckAward.Clear()  
 | 
    truckAward.AwardType = awardType  
 | 
    truckAward.Exp = exp % ChConfig.Def_PerPointValue  
 | 
    truckAward.ExpPoint = exp / ChConfig.Def_PerPointValue  
 | 
    truckAward.ZhenQi = zhenQi  
 | 
    truckAward.Prestige = prestige  
 | 
    truckAward.MoneyType = moneyType  
 | 
    truckAward.MoneyCnt = moneyCnt  
 | 
    truckAward.IsDestroy = truckState  
 | 
    truckAward.IsDouble = isDoubleAward  
 | 
    truckAward.IsTimeOut = isTimeOut  
 | 
    NetPackCommon.SendFakePack(curPlayer, truckAward)  
 | 
    GameWorld.DebugLog("GiveTruckAward exp=%s, zhenQi=%s, prestige=%s, moneyCnt=%s, moneyType=%s, truckState=%s, isDoubleAward=%s, isTimeOut=%s"   
 | 
                       % (exp, zhenQi, prestige, moneyCnt, moneyType, truckState, isDoubleAward, isTimeOut))  
 | 
    return  
 | 
  
 | 
###########################################################################   
 | 
  
 | 
## æô³µÊܵ½¹¥»÷µÄÏìÓ¦   
 | 
#  @param curTruck µ±Ç°ïÚ³µ  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def DoTruckUndeaAttackNotify(curTruck, tick):  
 | 
    if tick - curTruck.GetLastUnderAttackNotifyTick() < ChConfig.Def_TruckNotifyToOwnerTick:  
 | 
        #֪ͨʱ¼äδµ½  
 | 
        return  
 | 
      
 | 
    curTruck.SetLastUnderAttackNotifyTick(tick)  
 | 
    curPlayer = curTruck.GetOwner()  
 | 
    if curPlayer == None:  
 | 
        #ÐèÒª·¢Ë͸øGameServer֪ͨ  
 | 
        curPlayer.GameServer_TruckMsg(IPY_GameWorld.ttmUnderAttack)  
 | 
        return  
 | 
      
 | 
    curPlayer.Sync_TruckMsg(IPY_GameWorld.ttmUnderAttack)  
 | 
    return  
 | 
  
 | 
## ¿Í»§¶Ë·¢À´Íæ¼ÒÉèÖÃæô³µÄ£Ê½(·â°ü²ÎÊý)  
 | 
#  @param index Íæ¼ÒË÷Òý  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def OnPlayerSetTruckMode(index, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    curTruck = curPlayer.GetTruck()  
 | 
    if not curTruck:  
 | 
        GameWorld.Log("OnPlayerSetTruckMode -> Ã»ÓÐæô³µ¿ÉÉèÖÃ!" , curPlayer.GetPlayerID())  
 | 
        return  
 | 
       
 | 
    if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_SetTruckMode) <= ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_SetTruckMode]:  
 | 
        #Old_hgg_141056 ¶Ô²»Æð,ÄãÉèÖÃïÚ³µÄ£Ê½¼ä¸ôÌ«¶Ì,ÇëÉÔºóÔÙÊÔ!  
 | 
        PlayerControl.NotifyCode(curPlayer, "Old_hgg_141056")  
 | 
        return  
 | 
      
 | 
    curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_SetTruckMode, tick)  
 | 
      
 | 
    pack = IPY_GameWorld.IPY_CSetTruckMode()  
 | 
    mode = pack.GetMode()  
 | 
      
 | 
    if mode not in [IPY_GameWorld.trmStop , IPY_GameWorld.trmDefault]:  
 | 
        return  
 | 
      
 | 
    if curTruck.GetMode() == mode:  
 | 
        return  
 | 
      
 | 
    curTruck.SetMode(mode)  
 | 
      
 | 
    #֪ͨ¿Í»§¶ËïÚ³µAIģʽ  
 | 
    Sync_TruckMode(curPlayer)  
 | 
      
 | 
    #ÉèÖÃAIģʽbuff  
 | 
    AddTruckStateBuff(curTruck, tick)  
 | 
    return  
 | 
  
 | 
## Í¨ÖªÍæ¼ÒïÚ³µ×ø±ê   
 | 
#  @param curPlayer µ±Ç°Íæ¼Ò  
 | 
#  @param tick µ±Ç°Ê±¼ä   
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def NotifyPosInfoToPlayer(curPlayer, tick):  
 | 
    curTruck = curPlayer.GetTruck()  
 | 
    if curTruck == None:  
 | 
        return  
 | 
      
 | 
    if curPlayer.CanSeeOther(curTruck) == True:  
 | 
        #Äܹ»¿´µ½æô³µ, ²»Í¨Öª  
 | 
        return  
 | 
      
 | 
    curPlayer.Sync_TruckPosInfo()   
 | 
      
 | 
      
 | 
#------------------------------------------------------------------------------------------------------------   
 | 
## »ñµÃïÚ³µµÄ»ù´¡½±Àø  
 | 
#  @param curTruck: ïÚ³µÊµÀý  
 | 
#  @return: µ±Ç°ïÚ³µµÈ¼¶»ù´¡½±Àø×Öµä  
 | 
def __GetTruckBaseAward(curTruck):  
 | 
    if not curTruck:  
 | 
        return {}  
 | 
      
 | 
    curTruckLv = curTruck.GetLV()  
 | 
    baseAwardDict = ReadChConfig.GetEvalChConfig("TruckBaseAward")  
 | 
    return baseAwardDict.get(curTruckLv, {})  
 | 
  
 | 
  
 | 
## »ñµÃïÚ³µµÄ»ù´¡¾Ñé½±Àø  
 | 
#  @param curTruck: ïÚ³µÊµÀý  
 | 
#  @return: »ù´¡¾Ñé½±Àø  
 | 
def GetTruckBaseExp(curTruck):  
 | 
    return __GetTruckBaseAward(curTruck).get("baseExp", 0)  
 | 
  
 | 
  
 | 
## »ñµÃïÚ³µµÄ»ù´¡ÕæÆø½±Àø  
 | 
#  @param curTruck: ïÚ³µÊµÀý  
 | 
#  @return: »ù´¡ÕæÆø½±Àø  
 | 
def GetTruckBaseZhenQi(curTruck):  
 | 
    return __GetTruckBaseAward(curTruck).get("baseZhenQi", 0)  
 | 
  
 | 
  
 | 
## »ñµÃïÚ³µµÄ»ù´¡ÍþÍû½±Àø  
 | 
#  @param curTruck: ïÚ³µÊµÀý  
 | 
#  @return: »ù´¡ÍþÍû½±Àø  
 | 
def GetTruckBasePrestige(curTruck):  
 | 
    return __GetTruckBaseAward(curTruck).get("basePrestige", 0)  
 | 
  
 | 
  
 | 
## »ñµÃïÚ³µµÄ»ù´¡½ðÇ®½±Àø  
 | 
#  @param curTruck: ïÚ³µÊµÀý  
 | 
#  @return: »ù´¡½ðÇ®½±Àø[½ðÇ®ÊýÁ¿, ½ðÇ®ÀàÐÍ]  
 | 
def GetTruckBaseMoney(curTruck):  
 | 
    return __GetTruckBaseAward(curTruck).get("baseMoney", [0, IPY_GameWorld.TYPE_Price_Silver_Money])  
 | 
  
 | 
  
 | 
## ¿É·ñ½ÙïÚ  
 | 
#  @param curPlayer: Íæ¼ÒʵÀý  
 | 
#  @return ¿É·ñ½ÙïÚ  
 | 
def CanAttackTruck(curPlayer):  
 | 
    destroyTruckCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_DestroyTruckCnt)  
 | 
    destroyTruckMaxCnt = ReadChConfig.GetEvalChConfig("TruckDestroyCnt")  
 | 
      
 | 
    return destroyTruckCnt < destroyTruckMaxCnt  
 | 
  
 | 
## »ñÈ¡×î´ó½ÙïÚ´ÎÊý  
 | 
#  @param None  
 | 
#  @return  
 | 
def GetDestroyTruckMaxCnt():  
 | 
    return ReadChConfig.GetEvalChConfig("TruckDestroyCnt")  
 | 
  
 | 
## ÊÇ·ñËð»µïÚ³µ  
 | 
#  @param curTruck: ïÚ³µÊµÀý  
 | 
#  @return: ÊÇ·ñËð»µïÚ³µ  
 | 
def IsTruckDestroy(curTruck):  
 | 
      
 | 
    curTagPlayer = NPCCommon.GetSummonNPCOwner(IPY_GameWorld.gotPlayer, curTruck)  
 | 
    if curTagPlayer :  
 | 
        if curTagPlayer.GetTruckState() == IPY_GameWorld.tusDestroy:  
 | 
            return True  
 | 
      
 | 
    minHP = GetTruckDestroyMinHP(curTruck)  
 | 
    if GameObj.GetHP(curTruck) <= minHP:  
 | 
        return True  
 | 
      
 | 
    return False  
 | 
  
 | 
  
 | 
## Ëð»µïÚ³µ×îСѪÁ¿  
 | 
#  @param curTruck: µ±Ç°ïÚ³µ  
 | 
#  @return: Ëð»µïÚ³µ×îСѪÁ¿  
 | 
def GetTruckDestroyMinHP(curTruck):  
 | 
    destroyMinHPRate = ReadChConfig.GetEvalChConfig("TruckDestroyMinHPRate")  
 | 
    minHP = max(0, int(curTruck.GetMaxHP() * destroyMinHPRate/float(ChConfig.Def_MaxRateValue)))  
 | 
    return minHP  
 | 
  
 | 
  
 | 
## ÊÇ·ñ×Ô¶¯ÔËïÚ  
 | 
#  @param# curPlayer:Íæ¼ÒʵÀý  
 | 
#  @return: ÊÇ·ñ×Ô¶¯ÔËïÚ  
 | 
def GetHaveAutoTruck(curPlayer):  
 | 
    return curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_AutoTruck) == ShareDefine.Def_Enter_Truck  
 | 
  
 | 
  
 | 
## ÉèÖÃ×Ô¶¯ÔËïÚ״̬  
 | 
#  @param curPlayer: Íæ¼ÒʵÀý  
 | 
#  @return: None  
 | 
def SetAutoTruckState(curPlayer, state):  
 | 
    curState = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_AutoTruck)  
 | 
    if curState == state:  
 | 
        return  
 | 
      
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_AutoTruck, state)  
 | 
      
 | 
    tick = GameWorld.GetGameWorld().GetTick()  
 | 
    if state == ShareDefine.Def_Enter_Truck:  
 | 
        SkillCommon.AddBuffBySkillType_NoRefurbish(curPlayer, ShareDefine.Def_SkillID_AutoTruck, tick)  
 | 
    else:  
 | 
        BuffSkill.DelBuffBySkillID(curPlayer, ShareDefine.Def_SkillID_AutoTruck, tick)  
 | 
      
 | 
    #ˢнÇÉ«ÊôÐÔ  
 | 
    playerControl = PlayerControl.PlayerControl(curPlayer)  
 | 
    playerControl.RefreshPlayerAttrByBuff()  
 | 
    return  
 | 
  
 | 
#------------------------------------------------------------------------------------------------------------  
 | 
#=============================================================================================================  
 | 
#// AE 01 Ë¢ÐÂïÚ³µµÈ¼¶#tagPyRefurbishTruckLV  
 | 
#  
 | 
#struct     tagPyRefurbishTruckLV  
 | 
#{  
 | 
#    tagHead        Head;  
 | 
#    BYTE        CostType;    //ÏûºÄÀàÐÍ: 0-Ãâ·ÑË¢ÐÂ; 1-µÀ¾ß; 2-»õ±Ò  
 | 
#    BYTE        MoneyType;    //»¨·Ñ½ðÇ®ÀàÐÍ  
 | 
#    DWORD        ItemID;        //ʹÓõĵÀ¾ßID  
 | 
#    BYTE        IsAutoBuy;    //µÀ¾ßË¢ÐÂʱÊÇ·ñ×Ô¶¯¹ºÂò; 0-·ñ£»1-ÊÇ  
 | 
#};  
 | 
## Íæ¼ÒË¢ÐÂïÚ³µµÈ¼¶  
 | 
#  @param index:Íæ¼ÒË÷Òý  
 | 
#  @param clientData:·â°ü½á¹¹Ìå  
 | 
#  @param tick:ʱ¼ä´Á  
 | 
#  @return: None  
 | 
def PlayerRefurbishTruckLV(index, clientData, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
      
 | 
    if PlayerInMapHaveTruck(curPlayer):  
 | 
        #Íæ¼ÒÔÚµØÍ¼ÖÐÓÐæô³µ  
 | 
        GameWorld.ErrLog("PlayerBuyTruckLV player have truck ")  
 | 
        return  
 | 
      
 | 
    curTruckLV = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_TruckLV)  # µ±Ç°ïÚ³µµÈ¼¶  
 | 
      
 | 
    refurbishTruckLVDict = ReadChConfig.GetEvalChConfig("RefurbishTruckLV")  
 | 
    if not refurbishTruckLVDict:  
 | 
        return  
 | 
      
 | 
    if curTruckLV >= max(refurbishTruckLVDict):  
 | 
        GameWorld.DebugLog("ïÚ³µÒÑÂú¼¶!")  
 | 
        return  
 | 
      
 | 
    upTruckLvInfoList = refurbishTruckLVDict.get(curTruckLV, [])  
 | 
    if not upTruckLvInfoList or len(upTruckLvInfoList) != Def_RefreshTruckLVWay_Max:  
 | 
        #ÕÒ²»µ½Ë¢Ðµ±Ç°ïÚ³µµÈ¼¶µÄÏûºÄ»òÒѾÊÇ×î¸ßµÈ¼¶  
 | 
        GameWorld.ErrLog("PlayerRefurbishTruckLV, curTruckLV=%s not in RefurbishTruckLV.txt! or config Len err!" % (curTruckLV))  
 | 
        return  
 | 
      
 | 
    costType = clientData.CostType  
 | 
    moneyType = clientData.MoneyType  
 | 
    costItemID = clientData.ItemID  
 | 
    isAutoBuy = clientData.IsAutoBuy  
 | 
    GameWorld.DebugLog("Ë¢ÐÂïÚ³µµÈ¼¶: costType=%s,moneyType=%s,costItemID=%s,isAutoBuy=%s,curTruckLV=%s"   
 | 
                       % (costType, moneyType, costItemID, isAutoBuy, curTruckLV), curPlayer.GetPlayerID())  
 | 
    autoBuyGostGold = 0  
 | 
    drDict = {"LV":curTruckLV}  
 | 
      
 | 
    # ÏûºÄÑéÖ¤¼ì²é  
 | 
    if costType == Def_RefreshTruckLVWay_Free:  
 | 
        upLvRate, upLv, downLv = upTruckLvInfoList[costType]  
 | 
        freeCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FreeRefurbishTruckCnt)  
 | 
        maxFreeCnt = ReadChConfig.GetEvalChConfig("RefurbishTruckLVFreeCnt")  
 | 
        if freeCnt >= maxFreeCnt:  
 | 
            GameWorld.DebugLog("    Ã»ÓÐÃâ·Ñ´ÎÊý! freeCnt=%s >= maxFreeCnt=%s" % (freeCnt, maxFreeCnt))  
 | 
            return  
 | 
          
 | 
    elif costType == Def_RefreshTruckLVWay_Item:  
 | 
        costItemInfoDict = upTruckLvInfoList[costType]  
 | 
        if costItemID not in costItemInfoDict:  
 | 
            GameWorld.DebugLog("    curTruckLV=%s,costItemID=%s not configuration!!!" % (curTruckLV, costItemID))  
 | 
            return  
 | 
        upLvRate, costItemCnt, upLv, downLv = costItemInfoDict[costItemID]  
 | 
          
 | 
        itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)  
 | 
        lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList([(costItemID, costItemCnt)], itemPack)  
 | 
        if lackItemDict:  
 | 
            if not isAutoBuy:  
 | 
                GameWorld.DebugLog("    costItem not enough! curTruckLV=%s,costItemID=%s,costItemCnt=%s,isAutoBuy=%s"   
 | 
                                   % (curTruckLV, costItemID, costItemCnt, isAutoBuy))  
 | 
                return  
 | 
            autoBuyGostGold = ItemCommon.GetAutoBuyItemNeedGold(lackItemDict)  
 | 
            if autoBuyGostGold <= 0:  
 | 
                return  
 | 
            if not PlayerControl.HaveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, autoBuyGostGold):  
 | 
                return  
 | 
            drDict["lackItemDict"] = lackItemDict   
 | 
              
 | 
    elif costType == Def_RefreshTruckLVWay_Money:  
 | 
        costMoneyInfoDict = upTruckLvInfoList[costType]  
 | 
        if moneyType not in costMoneyInfoDict:  
 | 
            GameWorld.DebugLog("    curTruckLV=%s,moneyType=%s not configuration!!!" % (curTruckLV, moneyType))  
 | 
            return  
 | 
        upLvRate, moneyCnt, upLv, downLv = costMoneyInfoDict[moneyType]  
 | 
          
 | 
        if not PlayerControl.HaveMoney(curPlayer, moneyType, moneyCnt):  
 | 
            return  
 | 
    else:  
 | 
        return  
 | 
      
 | 
    refreshTotalCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_TruckRefreshTotalCnt)  # Íæ¼Ò×ÜË¢ÐÂïÚ³µµÈ¼¶´ÎÊý  
 | 
    if refreshTotalCnt <= 0:  
 | 
        firstTimeRefreshList = ReadChConfig.GetEvalChConfig("RefurbishTruckLVFirstTime")  
 | 
        truckLv = GameWorld.GetResultByRandomList(firstTimeRefreshList, 0)  
 | 
        GameWorld.DebugLog("    Ê×´ÎË¢ÐÂïÚ³µµÈ¼¶: truckLv=%s" % truckLv)  
 | 
    else:  
 | 
        if GameWorld.CanHappen(upLvRate, ChConfig.Def_MaxRateValue):  
 | 
            truckLv = upLv  
 | 
        else:  
 | 
            truckLv = downLv  
 | 
      
 | 
    if truckLv < 0 or truckLv >= len(refurbishTruckLVDict):  
 | 
        #ˢкóïÚ³µµÈ¼¶´íÎó  
 | 
        GameWorld.ErrLog("    PlayerRefurbishTruckLV After truckLv = %s error! refreshTotalCnt=%s" % (truckLv, refreshTotalCnt))  
 | 
        return  
 | 
  
 | 
    # ÏûºÄ¿Û³ý´¦Àí  
 | 
    if costType == Def_RefreshTruckLVWay_Free:  
 | 
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FreeRefurbishTruckCnt, freeCnt + 1)  
 | 
      
 | 
    elif costType == Def_RefreshTruckLVWay_Item:  
 | 
        ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "RefurbishTruckLV")  
 | 
        if autoBuyGostGold > 0:  
 | 
            drDict[ChConfig.Def_Cost_Reason_SonKey] = costItemID  
 | 
            PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, autoBuyGostGold,   
 | 
                                     ChConfig.Def_Cost_BuyStoreItem, drDict, lackItemDict.get(costItemID, 0))  
 | 
                  
 | 
    elif costType == Def_RefreshTruckLVWay_Money:  
 | 
        drDict[ChConfig.Def_Cost_Reason_SonKey] = "Refresh"  
 | 
        PlayerControl.PayMoney(curPlayer, moneyType, moneyCnt, ChConfig.Def_Cost_RefreshTruck, drDict)  
 | 
      
 | 
    #ÉèÖÃïÚ³µµÈ¼¶  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_TruckLV, truckLv)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_TruckRefreshTotalCnt, refreshTotalCnt + 1)  
 | 
              
 | 
    if truckLv > curTruckLV:  
 | 
        PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_781545")  
 | 
    elif truckLv == curTruckLV:  
 | 
        PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_16722")  
 | 
      
 | 
    #Ë¢ÐÂïÚ³µ¶îÍâ½±Àø  
 | 
    TruckCreatAwardDict = ReadChConfig.GetEvalChConfig("TruckCreatAward")  
 | 
    if truckLv in TruckCreatAwardDict:  
 | 
        for itemID, itemCount, isBind in TruckCreatAwardDict[truckLv]:  
 | 
            ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isBind, [IPY_GameWorld.rptItem, IPY_GameWorld.rptAnyWhere], showEff=True)  
 | 
            PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_366028", [itemID, itemCount])  
 | 
            PlayerControl.WorldNotify(0, "GeRen_liubo_161795", [curPlayer.GetPlayerName(), itemID, itemCount])  
 | 
          
 | 
    #֪ͨ¿Í»§¶Ë¿ÉÕÙ»½ïÚ³µµÈ¼¶  
 | 
    Sync_TruckLv(curPlayer)  
 | 
    GameWorld.DebugLog("    Ë¢Ð½á¹û: upLvRate=%s,updTruckLv=%s,autoBuyGostGold=%s,refreshTotalCnt=%s,drDict=%s"   
 | 
                       % (upLvRate, truckLv, autoBuyGostGold, refreshTotalCnt, drDict), curPlayer.GetPlayerID())  
 | 
    return  
 | 
  
 | 
  
 | 
#=============================================================================================================  
 | 
# //A4 02 ¹ºÂòïÚ³µµÈ¼¶#tagPyBuyTruckLV  
 | 
# //AE 02 ¹ºÂòïÚ³µµÈ¼¶#tagPyBuyTruckLV  
 | 
#   
 | 
# struct tagPyBuyTruckLV  
 | 
# {  
 | 
#    tagHead        Head;  
 | 
#    BYTE        TruckLV;        //ïÚ³µµÈ¼¶  
 | 
# };  
 | 
#=============================================================================================================  
 | 
## Íæ¼Ò¹ºÂòïÚ³µµÈ¼¶  
 | 
#  @param index:Íæ¼ÒË÷Òý  
 | 
#  @param clientData:·â°ü½á¹¹Ìå  
 | 
#  @param tick:ʱ¼ä´Á  
 | 
#  @return: None  
 | 
def PlayerBuyTruckLV(index, clientData, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
      
 | 
    if PlayerInMapHaveTruck(curPlayer):  
 | 
        #Íæ¼ÒÔÚµØÍ¼ÖÐÓÐæô³µ  
 | 
        GameWorld.ErrLog("PlayerBuyTruckLV player have truck ")  
 | 
        return  
 | 
      
 | 
    buyTruckLv = clientData.TruckLV  
 | 
      
 | 
    buyTruckLVDict = ReadChConfig.GetEvalChConfig("BuyTruckLV")  
 | 
    moneyList = buyTruckLVDict.get(buyTruckLv, [])  
 | 
    if moneyList == []:  
 | 
        #ÕÒ²»µ½¹ºÂòµ±Ç°ïÚ³µµÈ¼¶µÄÏûºÄ  
 | 
        GameWorld.ErrLog("PlayerBuyTruckLV, buyTruckLV=%s not %s has_key"  
 | 
                         (buyTruckLv, buyTruckLVDict))  
 | 
        return  
 | 
      
 | 
    #canBuyLv = PlayerVip.GetVIPCanBuyTruckLv(curPlayer)  # µ±Ç°vip¿É¹ºÂòµÄïÚ³µµÈ¼¶  
 | 
    #if buyTruckLv > canBuyLv:  
 | 
    #    #µ±Ç°vipµÈ¼¶²»ÄܹºÂò  
 | 
    #    GameWorld.ErrLog("PlayerBuyTruckLV, buyTruckLV=%s, canBuyLv=%s "%(buyTruckLv, canBuyLv))  
 | 
    #    return  
 | 
      
 | 
    moneyType= moneyList[1]  
 | 
    moneyCnt = moneyList[0]  
 | 
    infoDict = {"LV":buyTruckLv, ChConfig.Def_Cost_Reason_SonKey:buyTruckLv}  
 | 
    if not PlayerControl.PayMoney(curPlayer, moneyType, moneyCnt, ChConfig.Def_Cost_RefreshTruck, infoDict):  
 | 
        return  
 | 
      
 | 
    #ÉèÖÃïÚ³µµÈ¼¶  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_TruckLV, buyTruckLv)  
 | 
      
 | 
    #֪ͨ¿Í»§¶Ë¿ÉÕÙ»½ïÚ³µµÈ¼¶  
 | 
    Sync_TruckLv(curPlayer)  
 | 
    return  
 | 
  
 | 
  
 | 
#=============================================================================================================  
 | 
# //A4 03 ²éѯïÚ³µµÈ¼¶#tagPyQueryTruckLV  
 | 
# //AE 03 ²éѯïÚ³µµÈ¼¶#tagPyQueryTruckLV  
 | 
#   
 | 
# struct tagPyQueryTruckLV  
 | 
# {  
 | 
#    tagHead        Head;  
 | 
# };  
 | 
#=============================================================================================================  
 | 
## ²éѯïÚ³µµÈ¼¶  
 | 
#  @param index:Íæ¼ÒË÷Òý  
 | 
#  @param clientData:·â°ü½á¹¹Ìå  
 | 
#  @param tick:ʱ¼ä´Á  
 | 
#  @return: None  
 | 
def QueryTruckLV(index, clientData, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
      
 | 
    #֪ͨ¿Í»§¶Ë¿ÉÕÙ»½ïÚ³µµÈ¼¶  
 | 
    Sync_TruckLv(curPlayer)  
 | 
    return  
 | 
  
 | 
  
 | 
## Í¨Öª¿Í»§¶Ë¿ÉÕÙ»½ïÚ³µµÈ¼¶  
 | 
#  @param curPlayer: Íæ¼ÒʵÀý  
 | 
#  @return: None  
 | 
def Sync_TruckLv(curPlayer):  
 | 
    canSummonTruckLV = ChPyNetSendPack.tagPyCanSummonTruckLV()  
 | 
    canSummonTruckLV.Clear()  
 | 
    canSummonTruckLV.TruckLV = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_TruckLV)  
 | 
    canSummonTruckLV.FreeCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FreeRefurbishTruckCnt)  
 | 
    NetPackCommon.SendFakePack(curPlayer, canSummonTruckLV)  
 | 
    return  
 | 
  
 | 
#=============================================================================================================  
 | 
# //A4 04 ²éѯ½ÙïÚ´ÎÊý#tagPyQueryDestroyTruckCnt  
 | 
# //AE 04 ²éѯ½ÙïÚ´ÎÊý#tagPyQueryDestroyTruckCnt  
 | 
#   
 | 
# struct     tagPyQueryDestroyTruckCnt  
 | 
# {  
 | 
#    tagHead        Head;  
 | 
# };  
 | 
#=============================================================================================================  
 | 
## ²éѯ½ÙïÚ´ÎÊý  
 | 
#  @param index:Íæ¼ÒË÷Òý  
 | 
#  @param clientData:·â°ü½á¹¹Ìå  
 | 
#  @param tick:ʱ¼ä´Á  
 | 
#  @return: None  
 | 
def QueryDestroyTruckCnt(index, clientData, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
      
 | 
    #֪ͨ¿Í»§¶Ë½ÙïÚ´ÎÊý  
 | 
    Sync_DestroyTruckCnt(curPlayer)  
 | 
    return  
 | 
  
 | 
  
 | 
## Í¨Öª¿Í»§¶Ë½ÙïÚ´ÎÊý  
 | 
#  @param curPlayer: Íæ¼ÒʵÀý  
 | 
#  @return: None  
 | 
def Sync_DestroyTruckCnt(curPlayer):  
 | 
    canSummonTruckLV = ChPyNetSendPack.tagPyDestroyTruckCnt()  
 | 
    canSummonTruckLV.Clear()  
 | 
    canSummonTruckLV.Count = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_DestroyTruckCnt)  
 | 
    NetPackCommon.SendFakePack(curPlayer, canSummonTruckLV)  
 | 
    return  
 | 
  
 | 
  
 | 
## Í¨Öª¿Í»§¶ËïÚ³µAIģʽ  
 | 
#  @param curPlayer: Íæ¼ÒʵÀý  
 | 
#  @return: None  
 | 
def Sync_TruckMode(curPlayer):  
 | 
    curTruck = curPlayer.GetTruck()  
 | 
    if not curTruck:  
 | 
        mode = IPY_GameWorld.trmStop  
 | 
    else:  
 | 
        mode = curTruck.GetMode()  
 | 
          
 | 
    truckMode = ChPyNetSendPack.tagPyTruckMode()  
 | 
    truckMode.Clear()  
 | 
    truckMode.TruckMode = mode  
 | 
    NetPackCommon.SendFakePack(curPlayer, truckMode)  
 | 
    return  
 | 
  
 | 
  
 | 
#=============================================================================================================  
 | 
# //A4 05 ×Ô¶¯ÔËïÚ #tagPyAutoTruck  
 | 
# //AE 05 ×Ô¶¯ÔËïÚ #tagPyAutoTruck  
 | 
#   
 | 
# struct     tagPyAutoTruck  
 | 
# {  
 | 
#    tagHead        Head;  
 | 
#    BYTE        Type;  
 | 
# };  
 | 
#=============================================================================================================  
 | 
## ×Ô¶¯ÔËïÚ  
 | 
#  @param index:Íæ¼ÒË÷Òý  
 | 
#  @param clientData:·â°ü½á¹¹Ìå  
 | 
#  @param tick:ʱ¼ä´Á  
 | 
#  @return: None  
 | 
def AutoTruck(index, clientData, tick):  
 | 
      
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    state = clientData.Type  
 | 
      
 | 
    if not CanAutoTruck(curPlayer):  
 | 
        SetAutoTruckState(curPlayer, state)  
 | 
        Sync_AutoTruckState(curPlayer, state, False)  
 | 
        return  
 | 
      
 | 
    if state not in [ShareDefine.Def_Out_Truck, ShareDefine.Def_Enter_Truck]:  
 | 
        SetAutoTruckState(curPlayer, state)  
 | 
        Sync_AutoTruckState(curPlayer, state, False)  
 | 
        return  
 | 
      
 | 
    #ÉèÖÃ×Ô¶¯ÔËïÚ  
 | 
    SetAutoTruckState(curPlayer, state)  
 | 
      
 | 
    #֪ͨ×Ô¶¯ÔËïڳɹ¦   
 | 
    Sync_AutoTruckState(curPlayer, state, True)  
 | 
    return  
 | 
  
 | 
  
 | 
## ¿É·ñ×Ô¶¯ÔËïÚ  
 | 
#  @param curPlayer: Íæ¼ÒʵÀý  
 | 
#  @return ¿É·ñ×Ô¶¯ÔËïÚ  
 | 
def CanAutoTruck(curPlayer):  
 | 
      
 | 
    curTruck = curPlayer.GetTruck()  
 | 
    if not curTruck:  
 | 
        #ûÓÐïÚ³µ  
 | 
        return False  
 | 
      
 | 
    if not curPlayer.IsAlive():  
 | 
        #ËÀÍö״̬²»´¦Àí  
 | 
        return False  
 | 
          
 | 
    #»ñµÃÍæ¼ÒºÍïÚ³µ¼äµÄ¾àÀë  
 | 
    dist = GameWorld.GetDist(curTruck.GetPosX(), curTruck.GetPosY(),  
 | 
                             curPlayer.GetPosX(),curPlayer.GetPosY())  
 | 
    #×Ô¶¯ÔËïڵľàÀë  
 | 
    if dist > ChConfig.Def_PlayerTruckMoveDist:  
 | 
        return False      
 | 
      
 | 
    return True  
 | 
  
 | 
  
 | 
## Í¨Öª×Ô¶¯ÔËïÚ״̬  
 | 
#  @param curPlayer: Íæ¼ÒʵÀý  
 | 
#  @param state: ×´Ì¬  
 | 
#  @param result: ½á¹û(³É¹¦/ʧ°Ü)  
 | 
#  @return: None  
 | 
def Sync_AutoTruckState(curPlayer, state, result):  
 | 
      
 | 
    autoTruckState = ChPyNetSendPack.tagPyAutoTruckState()  
 | 
    autoTruckState.Clear()  
 | 
    autoTruckState.State = state  
 | 
    autoTruckState.Result = result  
 | 
    NetPackCommon.SendFakePack(curPlayer, autoTruckState)  
 | 
    return  
 | 
  
 | 
  
 | 
## ÉèÖÃïÚ³µ×´Ì¬buff  
 | 
#  @param curTruck: ïÚ³µÊµÀý  
 | 
#  @param tick: Ê±¼ä´Á  
 | 
#  @return: None  
 | 
def AddTruckStateBuff(curTruck, tick):  
 | 
#    mode = curTruck.GetMode()  
 | 
#    if mode == IPY_GameWorld.trmStop:  
 | 
#        #ɾ³ý״̬buff  
 | 
#        BuffSkill.DelBuffBySkillID(curTruck, ChConfig.Def_SkillID_TruckAiMode, tick)  
 | 
#    else:  
 | 
#        #Ìí¼Ó״̬buff  
 | 
#        SkillCommon.AddBuffBySkillType_NoRefurbish(curTruck , ChConfig.Def_SkillID_TruckAiMode , tick)  
 | 
      
 | 
    npcControl = NPCCommon.NPCControl(curTruck)  
 | 
    npcControl.RefreshNPCAttrState()  
 | 
    return  
 | 
  
 | 
  
 | 
#=============================================================================================================  
 | 
#//A4 06 Á¢¼´Íê³ÉÔËïÚ #tagPyOverTruck  
 | 
#//AE 06 Á¢¼´Íê³ÉÔËïÚ #tagPyOverTruck  
 | 
#  
 | 
#struct     tagPyOverTruck  
 | 
#{  
 | 
#    tagHead        Head;  
 | 
#};  
 | 
#=============================================================================================================  
 | 
## Á¢¼´Íê³ÉÔËïÚ  
 | 
#  @param index:Íæ¼ÒË÷Òý  
 | 
#  @param clientData:·â°ü½á¹¹Ìå  
 | 
#  @param tick:ʱ¼ä´Á  
 | 
#  @return: None  
 | 
def OverTruck(index, clientData, tick):  
 | 
      
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    if curPlayer == None:  
 | 
        #ÎÞ´ËÍæ¼ÒÁË  
 | 
        return  
 | 
  
 | 
    #Õ½¶·×´Ì¬·µ»Ø  
 | 
    if curPlayer.IsBattleState() :  
 | 
        PlayerControl.NotifyCode(curPlayer,"GeRen_hgg_143504")  
 | 
        #GameWorld.Log("Õ½¶·×´Ì¬Öв»ÄÜÁ¢¼´Íê³ÉÔËïÚ!")  
 | 
        return   
 | 
      
 | 
    curTruck = curPlayer.GetTruck()  
 | 
    if not curTruck:  
 | 
        PlayerControl.NotifyCode(curPlayer,"GeRen_hgg_500807")  
 | 
        #GameWorld.Log("ÄúÓë°®³µÈ˳µÁ½¸ô,ÇëÏȻص½°®³µÉíÅÔÔÙÁ¢¼´Íê³É!")  
 | 
        return  
 | 
      
 | 
    #¸ù¾ÝÍæ¼ÒµÈ¼¶ºÍïÚ³µÆ·½×¿Û³ýÔª±¦  
 | 
    playerLV = curPlayer.GetLV()  
 | 
    truckLV = curTruck.GetLV()  
 | 
    overTruckCost = eval(ReadChConfig.GetEvalChConfig("OverTruckCost"))  
 | 
    moneyType = IPY_GameWorld.TYPE_Price_Gold_Money  
 | 
      
 | 
    infoDict = {"truckLV":truckLV, ChConfig.Def_Cost_Reason_SonKey:truckLV}  
 | 
    if not PlayerControl.PayMoney(curPlayer, moneyType, overTruckCost, ChConfig.Def_Cost_FinishTruck, infoDict):  
 | 
        return  
 | 
      
 | 
    #½øÐÐÍê³ÉïÚ³µÈÎÎñÂß¼  
 | 
    DoLogic_FinishTruck(curPlayer)  
 | 
    return  
 | 
  
 | 
  
 | 
## ¼ì²é¿É·ñ»ñµÃË«±¶½±Àø  
 | 
#  @param curPlayer µ±Ç°Íæ¼Ò  
 | 
#  @return True or False  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def CheckDoubleAward():  
 | 
    curTime = GameWorld.GetCurrentTime()  
 | 
    curTimeStr = str(curTime)  
 | 
    curTimeStr = curTimeStr.split(".")[0].split()[1]  
 | 
  
 | 
    #Àý:[['03:00:00', '05:30:00'], ['13:00:00', '15:30:00']]  
 | 
    DoubleAwardOpenDayList, DoubleAwardTimeList = ReadChConfig.GetEvalChConfig("TruckDoubleAwardTime")  
 | 
    if DoubleAwardOpenDayList:  
 | 
        openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(  
 | 
                                             ShareDefine.Def_Notify_WorldKey_ServerDay)  
 | 
        if openServerDay in DoubleAwardOpenDayList:  
 | 
            return True  
 | 
          
 | 
    for doubleAwardTime in DoubleAwardTimeList:  
 | 
          
 | 
        if len(doubleAwardTime) != 2:  
 | 
            #ʱ¼ä¶ÎÅäÖôíÎó  
 | 
            GameWorld.ErrLog("curTimeStr = %s error"%str(doubleAwardTime))  
 | 
            continue  
 | 
              
 | 
        if doubleAwardTime[0] <= curTimeStr < doubleAwardTime[1]:  
 | 
            return True  
 | 
      
 | 
    return False  
 | 
  
 | 
  
 | 
## Íê³ÉÈÎÎñÂß¼  
 | 
#  @param curPlayer µ±Ç°Íæ¼Ò  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def DoLogic_FinishTruck(curPlayer, isTimeOut=False):  
 | 
      
 | 
    #»ñÈ¡ïÚ³µ½±Àø  
 | 
    curTruck = curPlayer.GetTruck()  
 | 
    if curTruck:  
 | 
        GiveTruckAward(curPlayer, curTruck, isTimeOut=isTimeOut)  
 | 
      
 | 
    #ɾ³ýïÚ³µ  
 | 
    DelTruck(curPlayer)  
 | 
  
 | 
    #ÉèÖÃÈÎÎñ״̬  
 | 
    mission = curPlayer.FindMission(ChConfig.Def_ConvoyTruckMissionID)  
 | 
    #Íæ¼ÒÎÞ´ËÈÎÎñ  
 | 
    if mission == None:  
 | 
        #Ìí¼Ó´ËÈÎÎñ  
 | 
        mission = QuestCommon.AddNewMission(curPlayer, ChConfig.Def_ConvoyTruckMissionID)  
 | 
  
 | 
    #ÉèÖÃÈÎÎñ״̬  
 | 
    isFinish = int(not isTimeOut)  
 | 
    failReason = "" if not isTimeOut else "»¤Ëͳ¬Ê±"  
 | 
    QuestCommon.SetPlayerMissionState(curPlayer, mission, ChConfig.Def_Mission_State_NoAccept, isFinish, failReason)  
 | 
    EventShell.NotifyOneMission(curPlayer, mission)  
 | 
    return  
 | 
  
 | 
## Íæ¼ÒÔËïÚ³¬Ê±  
 | 
def OnPlayerTruckTimeOut(curPlayer):  
 | 
    GameWorld.DebugLog("ÔËïÚ³¬Ê± ...")  
 | 
    DoLogic_FinishTruck(curPlayer, True)  
 | 
    return  
 | 
  
 | 
## ïÚ³µOnDayÂß¼  
 | 
#  @param curPlayer µ±Ç°Íæ¼Ò  
 | 
#  @return None  
 | 
def DoTruckOnDay(curPlayer):  
 | 
    SetDestroyTruckCnt(curPlayer, 0)  
 | 
    # Ã¿ÈÕÃâ·ÑˢдÎÊýÖØÖà  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FreeRefurbishTruckCnt, 0)  
 | 
    return  
 | 
  
 | 
## Íæ¼ÒËÀÍöïÚ³µ´¦Àí  
 | 
#  @param curPlayer µ±Ç°Íæ¼Ò  
 | 
#  @return None  
 | 
def DoPlayerDead(curPlayer):  
 | 
    # Ã»ÓÐïÚ³µ£¬²»´¦Àí  
 | 
    #if not PlayerInMapHaveTruck(curPlayer):  
 | 
    #    return  
 | 
    # ÕâÀïÖ»ÄÜ´ÓÍæ¼Ò½Ó¿ÚÅж¨ïÚ³µ£¬²»È»»á±¨´í  
 | 
    if curPlayer.GetTruck() == None:  
 | 
        return False  
 | 
      
 | 
    # ¸ü¸ÄïÚ³µÄ£Ê½  
 | 
    truck = curPlayer.GetTruck()  
 | 
    #ïÚ³µÓëÍæ¼ÒµÄ¾àÀ볬³ö, Í£Ö¹Òƶ¯, ïÚ³µ×´Ì¬ÉèÖÃΪ²»¸úËæ  
 | 
    truck.SetCurAction(IPY_GameWorld.laNPCNull)  
 | 
    truck.SetMode(IPY_GameWorld.trmStop)  
 | 
      
 | 
    #֪ͨ¿Í»§¶ËïÚ³µAIģʽ  
 | 
    Sync_TruckMode(curPlayer)  
 | 
      
 | 
    #ÉèÖÃAIģʽbuff  
 | 
    tick = GameWorld.GetGameWorld().GetTick()  
 | 
    AddTruckStateBuff(truck, tick)  
 | 
  
 | 
    #ïÚ³µ¸úËæ¶ªÊ§, Í˳ö×Ô¶¯ÔËïÚ  
 | 
    SetAutoTruckState(curPlayer, 0)  
 | 
    return  
 |