#!/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