#!/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 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 GameObj.GetHP(curPlayerTruck) == 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(GameObj.GetMaxHP(curTruck) * 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, 0, [IPY_GameWorld.rptItem, IPY_GameWorld.rptAnyWhere])
|
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
|