#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#---------------------------------------------------------------------  
 | 
#  
 | 
#---------------------------------------------------------------------  
 | 
##@package EventShell  
 | 
# @todo: Ê¼þ¹ÜÀíÆ÷  
 | 
#  
 | 
# @author: eggxp  
 | 
# @date 2010-4-20  
 | 
# @version 6.8  
 | 
#  
 | 
# @note: ¹ÜÀíËùÓÐNPCʼþ´¥·¢½Ó¿Ú  
 | 
#---------------------------------------------------------------------  
 | 
# @change: "2013-04-15 11:00" wdb ½«ComparePlayerLV_UseItem¸üÃûΪCheckItemUseLV£¬·ÅÈëItemControler  
 | 
# @change: "2013-04-18 17:00" wdb ÎïÆ·ÑÕɫʹÓÃÐÞ¸Ä  
 | 
# @change: "2013-05-03 17:00" wdb npcÉ̵êÐÞ¸Ä  
 | 
# @change: "2013-05-07 15:30" wdb ²Ö¿âÐÞ¸Ä  
 | 
# @change: "2013-05-20 11:00" wdb Ôö¼Ó¸±±¾É¨µ´  
 | 
# @change: "2013-05-29 11:55" Alee ÐÂÔöɱµÈ¼¶·¶Î§µÄÈÎÎñÂß¼(дËÀ)  
 | 
# @change: "2013-05-30 10:30" wdb ×°±¸±¦Ê¯ÏâǶµ÷Õû  
 | 
# @change: "2013-06-06 21:30" Alee Õ½¶·×´Ì¬²»¿É½øÈëÈÎÎñ¶Ô»°£¬µ¼Ö¶ÔÏó±ä¸üµÈÎÊÌâ  
 | 
# @change: "2013-07-08 15:00" Alee Ìí¼ÓÆÕͨǿ»¯´¥·¢ÈÎÎñ  
 | 
# @change: "2013-07-09 15:30" Alee ÒѽÓÈÎÎñÉý¼¶´¥·¢Âß¼  
 | 
# @change: "2013-07-19 20:00" Alee Ìí¼Ó»Ø¹º  
 | 
# @change: "2013-07-26 17:00" Alee VIP´ò¿ªÔ¶³Ì²Ö¿â  
 | 
# @change: "2013-09-10 20:10" Alee ÏµÍ³Ìáʾ³åÍ»  
 | 
# @change: "2013-09-18 17:00" Alee Í˳öËø¶¨Í˳ö½»Ò×  
 | 
# @change: "2013-09-23 19:30" Alee ºìÃûÌáʾÐÞ¸Ä  
 | 
# @change: "2013-11-15 20:20" hxp ¹Ø±Õ07 3A¹ºÂò±³°ü·â°ü¹¦ÄÜ£¬Ôö¼Ó±³°ü³É¹¦ÏµÍ³Ìáʾ  
 | 
# @change: "2013-12-12 14:30" hxp Ôö¼Ó×êʯ¹ºÂò±³°ü¼Æ·Ñµãʼþͬ²½  
 | 
# @change: "2013-12-13 12:20" hxp ÐÞ¸ÄÊ×µÇÎïÆ·°ó¶¨ÉèÖà  
 | 
# @change: "2013-12-27 16:00" Alee É¾³ý¶àÓà´úÂë  
 | 
# @change: "2014-01-08 13:20" hxp ÐÞ¸Ä×êʯ¹ºÂò±³°ü»¨·Ñ×êʯ¼Æ·Ñµãʼþͬ²½£¬ÔÚPayMoneyÄڲ㴦Àí  
 | 
# @change: "2014-02-17 17:30" hxp Ôö¼Ó¹ºÂò·ûÎı³°ü¸ñ×Ó  
 | 
# @change: "2014-03-18 19:00" hxp Ê×µÇÔùËÍÎïÆ·¸ÄΪÅäÖÃÎļþÅäÖà  
 | 
# @change: "2014-03-27 19:30" hxp Ôö¼Ó×øÆï»»×°  
 | 
# @change: "2014-04-04 20:00" hxp Ôö¼Ó×øÆï»»¼¼ÄÜ£¬¹Ù¾ô¼¼ÄÜ  
 | 
# @change: "2014-04-07 12:30" hxp ³á°òÏà¹Ø±³°üÎïÆ·½»»»  
 | 
# @change: "2014-04-17 20:30" hxp ÉñÆ÷ʱװ»»×°  
 | 
# @change: "2014-04-22 17:50" xcc Ôö¼ÓÔÚÏßʱ¼äÃâ·Ñ¿ªÆô±³°ü¹¦ÄÜ  
 | 
# @change: "2014-04-26 19:30" hxp ÁìµØÕ½ÇÅ  
 | 
# @change: "2014-04-28 14:00" Alee É¾³ý²âÊÔ×Ê½ð   
 | 
# @change: "2014-05-23 14:30" xcc Ôö¼Óħ·½±³°üÎïÆ··ÅÈë½ÇÉ«±³°üµÄ½Ó¿Ú   
 | 
# @change: "2014-05-23 15:40" xcc ÐÞ¸´È«²¿·ÅÈë·ÅÈëʧ°ÜµÄbug  
 | 
# @change: "2014-06-06 17:00" hxp Ôö¼Ó¿ìËÙÍê³ÉÈÎÎñʼþ  
 | 
# @change: "2014-06-23 14:30" Alee ¹Ø±ÕÊä³ö  
 | 
# @change: "2014-07-24 21:30" hxp Ôö¼ÓÉèÖÃÅÜ»·ÈÎÎñÐǼ¶£¬Ò»¼üÍê³ÉËùÓÐÅÜ»·ÈÎÎñ  
 | 
# @change: "2014-07-31 21:30" hxp È¡ÏûºìÃû²»ÄÜÓëNPC¶Ô»°ÏÞÖÆ  
 | 
# @change: "2014-08-26 11:00" hxp NotifyOneMissionÔö¼Ó²ÎÊýÑ¡ÔñÊÇ·ñͬ²½¸ÃÈÎÎñÈ«²¿×ÖµäÐÅÏ¢  
 | 
# @change: "2014-12-25 16:10" ljd Í¬²½ÉÏÒ»´Î±³°ü¿ª¸ñʱ¼ä  
 | 
# @change: "2015-01-10 23:00" hxp ²Ö¿â¹ºÂòÌØÊâ´¦Àí  
 | 
# @change: "2015-01-14 00:30" hxp Ôö¼Óʼþ»ã±¨  
 | 
# @change: "2015-01-22 15:00" hxp ¾«¼òlogÊä³ö  
 | 
# @change: "2015-03-20 15:00" hxp Ôö¼ÓÊÕ»ñ¹ûʵ£¬¸±±¾²É¼¯Ê¼þ£»Ôö¼Ó½øÈë¼ÒÔ°´«ËÍÃÅÈë¿Ú  
 | 
# @change: "2015-03-23 11:00" Alee ¼Ò×åÉý¼¶Ê¼þ¸ÄΪ´¥·¢ËùÓÐ½Úµã  
 | 
# @change: "2015-03-28 11:40" ljd Ôö¼ÓÈÎÎñ°ëСʱ´¥·¢Ê¼þ×¢²á¡¢¹ºÂòÈÕ³£ÈÎÎñÉÏÏÞ  
 | 
# @change: "2015-04-09 15:00" hxp ¸±±¾ÖÐÎÞ·¨É¾³ýÈÎÎñÌáʾÐÞ¸Ä  
 | 
# @change: "2015-06-15 23:00" hxp Ê±×°»»×°  
 | 
# @change: "2015-07-13 14:00" hxp Á÷ÏòÔö¼ÓÍæ¼Ò²ÎÊý  
 | 
# @change: "2015-07-16 15:00" zqx Ôö¼ÓµÀ¾ß¿ªÆô±³°ü¸ñ×Ó  
 | 
# @change: "2015-08-10 14:00" zqx Ð޸Ŀª¸ñ¿ÛµÀ¾ßÂß¼  
 | 
# @change: "2015-12-08 18:00" hxp Ôö¼Ó²»ÊÇͨ¹ýNPC¶Ô»°½çÃæ½øÈëµØÍ¼IDÅäÖà  
 | 
# @change: "2016-05-17 18:00" hxp Ôö¼Ó·ÇNPC¶Ô»°Íê³ÉÈÎÎñÁìÈ¡½±Àø  
 | 
# @change: "2016-07-27 10:40" xdh Ê״εǼ¼¤»îÅå´÷³ÆºÅ  
 | 
# @change: "2016-10-28 10:40" xdh ×øÆï¡¢³á°ò¡¢³È×°ÊýÁ¿´¥·¢ÈÎÎñ  
 | 
# @change: "2016-12-26 21:00" xdh ¾ôλÉý½×¡¢²¿Î»Ç¿»¯ÐǼ¶´¥·¢ÈÎÎñ  
 | 
#---------------------------------------------------------------------  
 | 
#"""Version = 2016-12-26 21:00"""  
 | 
#---------------------------------------------------------------------  
 | 
import IPY_GameWorld  
 | 
import GameWorld  
 | 
import EventSrc  
 | 
import ChConfig  
 | 
import QuestManager  
 | 
import QuestRunner  
 | 
import PlayerControl  
 | 
import FunctionNPCCommon  
 | 
import FBLogic  
 | 
import ItemControler  
 | 
import ItemCommon  
 | 
import QuestCommon  
 | 
import copy  
 | 
import GameLogInfo  
 | 
import time  
 | 
import GameServerRefresh  
 | 
import PlayerMissionCollect  
 | 
import ReadChConfig  
 | 
import PlayerFamily  
 | 
import ShareDefine  
 | 
import Operate_PlayerBuyZhenQi  
 | 
import Func_6  
 | 
import DataRecordPack  
 | 
import PlayerCoin  
 | 
import PlayerTrade  
 | 
import PlayerExpandPackCfgMgr  
 | 
import EventReport  
 | 
import PlayerCoat  
 | 
import PlayerGatherSoul  
 | 
#import PlayerArrestTask  
 | 
import PlayerRune  
 | 
import IpyGameDataPY  
 | 
import FormulaControl  
 | 
import GameFuncComm  
 | 
import ChPyNetSendPack  
 | 
import NetPackCommon  
 | 
import NPCCommon  
 | 
import PlayerVip  
 | 
  
 | 
import math  
 | 
import random  
 | 
#---------------------------------------------------------------------  
 | 
  
 | 
#ÿÈÕÈÎÎñ×îС´¥·¢µÈ¼¶  
 | 
Day_Event_Trig_Min_LV = 21  
 | 
  
 | 
#ÈÎÎñ´¥·¢Ä£Ê½  
 | 
Def_RunQuestType_Normal = 1     #ÆÕͨ  
 | 
#Def_RunQuestType_NoAnswer = 2   #²»ÐèÒª»ØÓ¦(LVUp)  
 | 
Def_RunQuestType_RunAll = 3     #ÔËÐÐËùÓÐ(OnDay), Ã¿ÈÕÅж¨(²»ÄÜÖ»ÔÚonLVUPµÄʱºòÅж¨, ÒòÎªÍæ¼Ò¿ÉÄÜÅѹú, Åѹúºó, Èç¹ûÖ»ÔÚonLVUPµÄʱºòд, ÄÇôÅѹúºó½Ó²»µ½Ã¿ÈÕÈÎÎñ)  
 | 
Def_RunQuest_ChangeMap_Tick = 1000  
 | 
  
 | 
Def_Warehouse_FuncName = "Func_6"  # ²Ö¿âÏà¹Ø¹¦ÄÜpyÃû  
 | 
############################################################  
 | 
#def QuestRunner_GetFunc(name):  
 | 
#    return    GameWorld.GetExecFunc(EventSrc, "QuestRunner.%s"%name)  
 | 
#---------------------------------------------------------------------  
 | 
#µ¼ÈëËùÓеÄNPCAI  
 | 
GameWorld.ImportAll("Script\\Event\\" , "EventSrc")  
 | 
GameWorld.ImportAll("Script\\Event\\" , "")  
 | 
#---------------------------------------------------------------------  
 | 
##C++´¥·¢·â°üÖØ¶ÁËùÓÐʼþ  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks C++´¥·¢·â°üÖØ¶ÁËùÓÐʼþ  
 | 
def ReloadEvent(tick):  
 | 
    scriptPath = ChConfig.GetAppPath() + "Script\\Event\\EventSrc"  
 | 
    GameWorld.ReloadScript(scriptPath, "EventSrc")  
 | 
      
 | 
    scriptPath = ChConfig.GetAppPath() + "Script\\Event"  
 | 
    GameWorld.ReloadScript(scriptPath, "")  
 | 
      
 | 
    #ÖØÐ¶Áȡʼþ  
 | 
    QuestManager.ReloadQuests(tick)  
 | 
    DoReloadRefresh()  
 | 
    return  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //08 01 Ê¼þ´¥·¢#tagCNPCTalk  
 | 
# tagCNPCTalk       *   GettagCNPCTalk();  
 | 
#   
 | 
# class   IPY_CNPCTalk  
 | 
# {  
 | 
# public:  
 | 
#   
 | 
#    int      GetNPCID();  
 | 
#   
 | 
#    int      GetPosX();  
 | 
#   
 | 
#    int      GetPosY();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë//08 01·â°üÏìÓ¦ Ê¼þ´¥·¢#tagCNPCTalk  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë//08 01·â°üÏìÓ¦ Ê¼þ´¥·¢#tagCNPCTalk  
 | 
def BeginEvent(index, tick):  
 | 
    GameWorld.GetPsycoFunc(__Func_BeginEvent)(index, tick)  
 | 
    return  
 | 
  
 | 
##¿Í»§¶Ë//08 01·â°üÏìÓ¦ Ê¼þ´¥·¢#tagCNPCTalk  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë//08 01·â°üÏìÓ¦ Ê¼þ´¥·¢#tagCNPCTalk  
 | 
def __Func_BeginEvent(index, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
  
 | 
    if curPlayer.GetPlayerAction() != IPY_GameWorld.paNull:  
 | 
        #Íæ¼Ò״̬²»ÊÇ¿ÕÏÐ״̬  
 | 
        return  
 | 
      
 | 
    #·À³ÁÃÔ  
 | 
    if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_Wallow_LV) > ChConfig.Def_GameWallow_LV_First:  
 | 
        PlayerControl.NotifyCode(curPlayer, "AvoidSink09")  
 | 
        return  
 | 
      
 | 
#===============================================================================  
 | 
#    #ÒÆ¶¯Öв»Ö´Ðд˲Ù×÷  
 | 
#    if curPlayer.IsMoving():  
 | 
#        PlayerControl.NotifyCode(curPlayer, "GeRen_lhs_0")  
 | 
#        return  
 | 
#===============================================================================  
 | 
      
 | 
    if tick - curPlayer.GetResetWorldPosAskTick() < Def_RunQuest_ChangeMap_Tick:  
 | 
        #[bug]2009.4.25  
 | 
        #1. Íæ¼Ò½øÈë·ÙÌìÈܶ´(ÈÎÎñ״̬ÉèÖÃΪ2)  
 | 
        #2. ÔڵȴýÇл»µØÍ¼»ØÓ¦Ö®Ç°, ÆÕͨÁÄÌì(ÈÎÎñ״̬ÉèÖÃΪ1)  
 | 
        #3. ½øÈëµØÍ¼ÁË  
 | 
        #ÕâÑù¾Í¿ÉÒÔË¢·ÙÌìÈܶ´  
 | 
        GameWorld.GodLog(curPlayer, "BeginEvent, ResetWorldPosAskTick")  
 | 
        return  
 | 
       
 | 
    #Íæ¼Ò´¥·¢Ê¼þ   
 | 
    sendPack = IPY_GameWorld.IPY_CNPCTalk()  
 | 
      
 | 
    sendPack_EventNPCID = sendPack.GetNPCID()  
 | 
    sendPack_NPCPosX = sendPack.GetPosX()  
 | 
    sendPack_NPCPosY = sendPack.GetPosY()  
 | 
      
 | 
    if sendPack_EventNPCID == 0:  
 | 
        #Ŀǰ²»´¦ÀíµØµã´¥·¢Ààʼþ  
 | 
        return  
 | 
      
 | 
    #2010/5/6 Òƶ¯ÖнÓÊܿͻ§¶Ë·â°ü(Òò¿Í»§¶ËÒÆ³ýStopmove), Ð£ÑéÎó²î, ÀÛ¼Ó  
 | 
    #===========================================================================  
 | 
    # if not PlayerControl.PlayerRefreshPos(curPlayer, curPlayer, sendPack_NPCPosX, sendPack_NPCPosY):  
 | 
    #    #Íæ¼Òµ±Ç°Î»ÖÃË¢ÐÂʧ°Ü  
 | 
    #    #GameWorld.Log(' CheckUseSkill RefreshPosErr packPos = ( %s, %s ), playerPos = ( %s, %s )'%( posX, posY, curPlayer.GetPosX(), curPlayer.GetPosY() ), curPlayerID )  
 | 
    #    return  
 | 
    #===========================================================================  
 | 
      
 | 
    #Ö´ÐжԻ°Âß¼  
 | 
    EventLogic(curPlayer, sendPack_EventNPCID, tick)  
 | 
    return  
 | 
  
 | 
#// C1 06 ¿ç·þNPC¶Ô»° #tagCMCrossNPCTalk  
 | 
#  
 | 
#struct    tagCMCrossNPCTalk  
 | 
#{  
 | 
#    tagHead        Head;  
 | 
#    WORD        ObjID;  
 | 
#    DWORD        NPCID;  
 | 
#    WORD        PosX;  
 | 
#    WORD        PosY;  
 | 
#};  
 | 
def OnCrossNPCTalk(index, clientData, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
      
 | 
    objID = clientData.ObjID  
 | 
    npcID = clientData.NPCID  
 | 
    #posX = clientData.PosX  
 | 
    #posY = clientData.PosY  
 | 
    if GameWorld.IsCrossServer():  
 | 
        return  
 | 
      
 | 
    lastTick = curPlayer.GetDictByKey("CrossNPCTalkTick")  
 | 
    if tick - lastTick < 2000:  
 | 
        return  
 | 
    curPlayer.SetDict("CrossNPCTalkTick", tick)  
 | 
      
 | 
    npcData = GameWorld.GetGameData().FindNPCDataByID(npcID)  
 | 
    if not npcData:  
 | 
        GameWorld.ErrLog("¿ç·þNPCID²»´æÔÚ! npcID=%s" % npcID)  
 | 
        return  
 | 
          
 | 
    # Ä¿Ç°ÔÝÖ§³Ö¿ç·þ²É¼¯  
 | 
    if npcData.GetType() not in [IPY_GameWorld.ntCollection, IPY_GameWorld.ntMissionCollect]:  
 | 
        return  
 | 
      
 | 
    collectNPCIpyData = IpyGameDataPY.GetIpyGameData("CollectNPC", npcID)  
 | 
    if collectNPCIpyData:  
 | 
        if not NPCCommon.CheckCanCollectByNPCID(curPlayer, npcID, collectNPCIpyData):  
 | 
            return  
 | 
          
 | 
        msgDict = {"PlayerID":curPlayer.GetPlayerID(), "ObjID":objID, "NPCID":npcID}  
 | 
        GameWorld.SendMsgToCrossServer(ShareDefine.ClientServerMsg_CollectNPC, msgDict)  
 | 
          
 | 
    return  
 | 
  
 | 
def ClientServerMsg_CollectNPC(curPlayer, msgData, serverGroupID, tick):  
 | 
    ## ÊÕµ½×Ó·þͬ²½µÄ²É¼¯NPC  
 | 
    objID = msgData["ObjID"]  
 | 
    npcID = msgData["NPCID"]  
 | 
    curNPC = GameWorld.FindNPCByID(objID)  
 | 
    if not curNPC:  
 | 
        return  
 | 
    if npcID !=  curNPC.GetNPCID():  
 | 
        GameWorld.ErrLog("²É¼¯¿ç·þNPC´íÎó!npcID=%s != curNPCID=%s" % (npcID, curNPC.GetNPCID()))  
 | 
        return  
 | 
    EventLogic(curPlayer, objID, tick)  
 | 
    return  
 | 
  
 | 
##¿Í»§¶Ë//08 01·â°üÏìÓ¦ ×Ô¶¨Ò庯Êý: Ê¼þ´¦Àí  
 | 
#@param curPlayer µ±Ç°Íæ¼Ò  
 | 
#@param eventNPCID Ê¼þNPCID  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë//08 01·â°üÏìÓ¦ ×Ô¶¨Ò庯Êý: Ê¼þ´¦Àí  
 | 
def EventLogic(curPlayer, eventNPCID, tick):  
 | 
    #¼ì²éÍæ¼ÒºÍNPCµÄ¾àÀëÔÚ²»ÔÚ¶Ô»°·¶Î§ÄÚ  
 | 
    curNPC = GameWorld.GetNPCManager().FindNPCByID(eventNPCID)  
 | 
      
 | 
    #ûÓÐÕâ¸öNPC  
 | 
    if curNPC == None :  
 | 
        return  
 | 
  
 | 
    #¿É½øÈëʼþÀàÐÍNPC  
 | 
    eventNPCType = [IPY_GameWorld.ntFunctionNPC, IPY_GameWorld.ntCollection, IPY_GameWorld.ntMissionCollect]  
 | 
      
 | 
    if curNPC.GetType() not in eventNPCType:  
 | 
        GameWorld.Log("²»ÊǶԻ°NPC, ²»ÄܶԻ° %d"%(curNPC.GetType()) , curPlayer.GetPlayerID())  
 | 
        return   
 | 
      
 | 
    dist = GameWorld.GetDist(curPlayer.GetPosX(), curPlayer.GetPosY(), curNPC.GetPosX(), curNPC.GetPosY())  
 | 
      
 | 
    if dist > ChConfig.Def_EventDist:  
 | 
        #Íæ¼Ò¾àÀë¹ýÔ¶, ²»ÄÜ´¥·¢  
 | 
        curPlayer.ResetPos(curPlayer.GetPosX(), curPlayer.GetPosY())  
 | 
        return  
 | 
      
 | 
    if curNPC.GetType() == IPY_GameWorld.ntCollection:  
 | 
        #¼Ò×åÕ½µÄËþºÍÆå, ¶Ô»°»á¿ªÊ¼¶Á½ø¶ÈÌõ  
 | 
        __BeginCollect(curPlayer, curNPC, tick)  
 | 
        return  
 | 
      
 | 
    #ÈÎÎñ²É¼¯NPC  
 | 
    if curNPC.GetType() == IPY_GameWorld.ntMissionCollect:  
 | 
        PlayerMissionCollect.QueryMissionCollect(curPlayer, curNPC, tick)  
 | 
        return  
 | 
      
 | 
    #Çå¿ÕÍæ¼Ò´«Ë͵ØÍ¼´ø×ßµÄNPC  
 | 
    #ÒòΪ¸±±¾ÈÎÎñÖÐ, Èç¹û¸±±¾ÈËÂú²»Äܽø, »á´«ËÍÒ»´Î¶àÒ»Ö»NPC...  
 | 
    curPlayer.ClearChangeMapTakeCreateNPC()  
 | 
      
 | 
    #ÔÚXML±íÖÐÕÒµ½Õâ¸öNPCµÄ½Å±¾  
 | 
    EventRespons_OnVisit(curPlayer, curNPC)  
 | 
    return  
 | 
  
 | 
##¿Í»§¶Ë//08 01·â°üÏìÓ¦ ×Ô¶¨Ò庯Êý: ¿ªÊ¼¼Ò×åÕ½ÖеÄËþºÍÆÚÀ½ø¶ÈÌõ  
 | 
#@param curPlayer µ±Ç°Íæ¼Ò  
 | 
#@param curNPC Ê¼þNPCʵÀý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë//08 01·â°üÏìÓ¦ ×Ô¶¨Ò庯Êý: ¿ªÊ¼¼Ò×åÕ½ÖеÄËþºÍÆÚÀ½ø¶ÈÌõ  
 | 
def __BeginCollect(curPlayer, curNPC, tick):  
 | 
    result = FBLogic.OnCanCollect(curPlayer, curNPC, tick)  
 | 
    if not result:  
 | 
        #²»¿É²É¼¯  
 | 
        return  
 | 
      
 | 
    curPlayer.SetActionObj(curNPC)  
 | 
    PlayerControl.ChangePlayerAction(curPlayer, IPY_GameWorld.paNull)  
 | 
      
 | 
    if NPCCommon.OnCollectNPCBegin(curPlayer, curNPC, tick):  
 | 
        return  
 | 
      
 | 
    prepareTime = FBLogic.GetFBPrepareTime(curPlayer, curNPC)  
 | 
      
 | 
    collTimeReduceRate = PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_CollTimeReduceRate)  
 | 
    if collTimeReduceRate:  
 | 
        prepareTime = max(1000, int(prepareTime * (ShareDefine.Def_MaxRateValue - collTimeReduceRate) / float(ShareDefine.Def_MaxRateValue)))  
 | 
          
 | 
    PlayerControl.Sync_PrepareBegin(curPlayer, prepareTime, IPY_GameWorld.pstCollecting, prepareID = curNPC.GetID())  
 | 
      
 | 
    ##Ìí¼ÓÕâ¸öNPCµÄÉËѪÁÐ±í£¬ÓÃÓÚ¶à¸öÈËÒ»ÆðÇÀÆå£¬Ò»È˳ɹ¦ºó£¬ÆäËûÈË´ò¶Ï  
 | 
    curNPC_HurtList = curNPC.GetPlayerHurtList()  
 | 
    import AttackCommon  
 | 
    AttackCommon.AddHurtValue(curNPC, curPlayer.GetPlayerID(), ChConfig.Def_NPCHurtTypePlayer, 1)  
 | 
    return  
 | 
#---------------------------------------------------------------------  
 | 
  
 | 
#===============================================================================  
 | 
# //08 02 Ê¼þ»ØÓ¦#tagCNPCAnswer  
 | 
# tagCNPCAnswer       *   GettagCNPCAnswer();  
 | 
#   
 | 
# class   IPY_CNPCAnswer  
 | 
# {  
 | 
# public:  
 | 
#   
 | 
#    int      GetAnswerLen();  
 | 
#    //size = AnswerLen  
 | 
#    char *      GetAnswer();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë//08 02·â°üÏìÓ¦ Ê¼þ»ØÓ¦#tagCNPCAnswer  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë//08 02·â°üÏìÓ¦ Ê¼þ»ØÓ¦#tagCNPCAnswer  
 | 
def EventAnswer(index, tick):  
 | 
    GameWorld.GetPsycoFunc(__Func_EventAnswer)(index, tick)  
 | 
    return  
 | 
  
 | 
##¿Í»§¶Ë//08 02·â°üÏìÓ¦ Ê¼þ»ØÓ¦#tagCNPCAnswer  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë//08 02·â°üÏìÓ¦ Ê¼þ»ØÓ¦#tagCNPCAnswer  
 | 
def __Func_EventAnswer(index, tick):  
 | 
    timeClock = time.clock()  
 | 
      
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
      
 | 
#    if curPlayer.GetPlayerAction() != IPY_GameWorld.paEvent:  
 | 
#        #Íæ¼Ò²»ÔÚʼþÖÐ,·µ»Ø  
 | 
#        GameWorld.Log("EventAnswer, Íæ¼Ò²»ÔÚʼþÖÐ", curPlayer.GetID())  
 | 
#        return  
 | 
      
 | 
    if tick - curPlayer.GetResetWorldPosAskTick() < Def_RunQuest_ChangeMap_Tick:  
 | 
        #[bug]2009.4.25  
 | 
        #1. Íæ¼Ò½øÈë·ÙÌìÈܶ´(ÈÎÎñ״̬ÉèÖÃΪ2)  
 | 
        #2. ÔڵȴýÇл»µØÍ¼»ØÓ¦Ö®Ç°, ÆÕͨÁÄÌì(ÈÎÎñ״̬ÉèÖÃΪ1)  
 | 
        #3. ½øÈëµØÍ¼ÁË  
 | 
        #ÕâÑù¾Í¿ÉÒÔË¢·ÙÌìÈܶ´  
 | 
        GameWorld.GodLog(curPlayer, "EventAnswer, ResetWorldPosAskTick")  
 | 
        return  
 | 
      
 | 
    sendPack = IPY_GameWorld.IPY_CNPCAnswer()  
 | 
    answer = sendPack.GetAnswer()  
 | 
    if answer == "":  
 | 
        #Íæ¼Ò»Ø´ðΪ¿Õ  
 | 
        GameWorld.Log("Íæ¼Ò»Ø´ðΪ¿Õ" , curPlayer.GetPlayerID())  
 | 
        return  
 | 
      
 | 
    answerBase = copy.deepcopy(answer)  
 | 
    answer = answer.lower()  
 | 
    if answer == "cancel":  
 | 
        #GameWorld.Log("Íæ¼ÒÇ¿ÖÆ½áÊøÊ¼þ" , curPlayer.GetPlayerID())  
 | 
        DoExitEvent(curPlayer)  
 | 
        return  
 | 
      
 | 
    funcHead = "fc_"  
 | 
    xmlFuncHead = "evt_"  
 | 
      
 | 
    curNPC = QuestRunner.GetPlayerTalkNPC(curPlayer)  
 | 
    #ºìÃûÍæ¼ÒÎÞ·¨½Ó,½»ÈÎÎñ  
 | 
#    if curPlayer.GetPlayerNameColor() == IPY_GameWorld.pncRed and __Check_FunctionNPC_Talk_RedName(curNPC):  
 | 
#        PlayerControl.NotifyCode(curPlayer, "PK_lhs_161795")  
 | 
#        #½áÊøÊ¼þ  
 | 
#        DoExitEvent(curPlayer)  
 | 
#        return  
 | 
      
 | 
    if curNPC != None and not GameWorld.IsSameCountry(curPlayer, curNPC) :  
 | 
        #PK_lhs_372238   <n color="255,0,0">ÎÒ²»»á¸øµÐÈËÌṩÈκΰïÖúµÄ!</n>  
 | 
        #²»Í¬¹ú¼®, ²»ÄܺÍNPC¶Ô»°  
 | 
        #PlayerControl.NotifyCode(curPlayer, "PK_lhs_372238")  
 | 
        DoExitEvent(curPlayer)  
 | 
        return  
 | 
      
 | 
    GameWorld.DebugLog("%s(%d) ·ÃÎÊNPC»ØÓ¦: %s"%(curPlayer.GetName(), curPlayer.GetID(), answerBase) , curPlayer.GetPlayerID())  
 | 
      
 | 
    if answer.find(funcHead) == 0:  
 | 
        #ÊÇʼþÏìÓ¦  
 | 
        if curNPC == None:  
 | 
            #ûÓÐÕâ¸öNPC  
 | 
            GameWorld.Log("funcHeadûÓÐÕâ¸öNPC" , curPlayer.GetPlayerID())  
 | 
            return  
 | 
          
 | 
        #µÃµ½Íæ¼ÒµÄ¶ÔÏó  
 | 
        funcAnswer = answerBase.replace(funcHead, "")  
 | 
        responseType="Func_%d"%curNPC.GetFunctionType()  
 | 
        callFunc = GameWorld.GetExecFunc(EventSrc, "%s.%s"%(responseType, funcAnswer))  
 | 
          
 | 
        if callFunc == None:  
 | 
            #º¯Êýµ÷Óò»¿ÉʹÓà  
 | 
            GameWorld.Log("»ØÓ¦Ê¼þÏìÓ¦ %s %s²»¿ÉʹÓÃ"%(responseType, funcAnswer) , curPlayer.GetPlayerID())  
 | 
            return  
 | 
          
 | 
        callFunc(curPlayer, tick)  
 | 
        return  
 | 
      
 | 
    elif answer.find(xmlFuncHead) == 0:  
 | 
        #ÔËÐÐFuncĿ¼ÏµÄXMLÎļþ  
 | 
        #ʼþ¶Ô»°(¿ªÍ¨²Ö¿â, ¹ºÂòæô³µÂíÆ¥Ê¹ÓÃʱ¼äµÈ  
 | 
        funcAnswer = answer.replace(xmlFuncHead, "")  
 | 
        QuestsEvent = QuestManager.GetAllQuestsEvents()  
 | 
        curNPC = QuestRunner.GetPlayerTalkNPC(curPlayer)  
 | 
          
 | 
        if curNPC == None:  
 | 
            #ûÓÐÕâ¸öNPC  
 | 
            GameWorld.Log("GetPlayerTalkNPCûÓÐÕâ¸öNPC" , curPlayer.GetPlayerID())  
 | 
            return  
 | 
          
 | 
        #µÃµ½NPCµÄTypeID  
 | 
        funcType = curNPC.GetFunctionType()  
 | 
        key = ("function_npc", "%d_%s.xml"%(funcType, funcAnswer))  
 | 
          
 | 
        if QuestsEvent.has_key(key):  
 | 
            for event in QuestsEvent[key]:  
 | 
                nodeList = event[1].GetXMLEventLoader().GetNodeList()  
 | 
                #ÔËÐÐfunction_npcĿ¼ÏµÄ[funcType].xmlÎļþ  
 | 
                if QuestRunner.RunFunctionQuest(curPlayer, nodeList) != True:  
 | 
                    GameWorld.Log("ÈÎÎñʼþ¶Ô»°Ö´ÐÐʧ°Ü" , curPlayer.GetPlayerID())  
 | 
                    DoExitEvent(curPlayer)  
 | 
        else:  
 | 
            GameWorld.Log("¹þÏ¸ÌØËøÂðÀû(¾«Áé×åÓï) %s"%(str(key)) , curPlayer.GetPlayerID())  
 | 
            DoExitEvent(curPlayer)  
 | 
              
 | 
        return  
 | 
      
 | 
    else:  
 | 
  
 | 
        #ÆÕͨ¶Ô»°  
 | 
        QuestRunner.RunPlayerAnswer(curPlayer, answer)  
 | 
      
 | 
    #¼Ç¼ÈÎÎñÏà¹ØÐÅÏ¢  
 | 
    GameLogInfo.LogInfo_MissionTime(timeClock)  
 | 
    GameLogInfo.LogInfo_MissionCount(1)  
 | 
    return  
 | 
#---------------------------------------------------------------------  
 | 
  
 | 
##ÈÎÎñ´¥·¢Æ÷×°±¸ÆÕͨǿ»¯Ê¹ÓôÎÊý  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@param curNPC NPCʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_OnKillById »÷ɱָ¶¨IDµÄ¹ÖÎï  
 | 
def EventRespons_OnEquipNormalPlus(curPlayer, itemID):  
 | 
    RunQuestEvent(curPlayer, "on_equip_normal_plus", itemID, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
  
 | 
## ÈÎÎñ´¥·¢Æ÷_OnVisit ºÍNPC¶Ô»°  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@param curNPC NPCʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_OnVisit ºÍNPC¶Ô»°  
 | 
def EventRespons_OnVisit(curPlayer, curNPC):  
 | 
    #GameWorld.Log("·ÃÎÊNPCËø×¡" , curPlayer.GetPlayerID())  
 | 
    curPlayer.BeginEvent()  
 | 
    curPlayer.SetActionObj(curNPC)  
 | 
          
 | 
    #µÃµ½NPCµÄTypeID  
 | 
    npcTypeID = curNPC.GetNPCID()  
 | 
    #GameWorld.Log("%s(%d) ·ÃÎÊNPC %d"%(curPlayer.GetName(), curPlayer.GetID(),npcTypeID) , curPlayer.GetPlayerID())  
 | 
    if QuestRunner.RunQuestOnVisit(curPlayer, npcTypeID) != True:  
 | 
        GameWorld.Log("%sÈÎÎñ¶Ô»°Ö´ÐÐʧ°Ü"%(npcTypeID) , curPlayer.GetPlayerID())  
 | 
        DoExitEvent(curPlayer)  
 | 
      
 | 
    return  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ_ÿÈÕÈÎÎñ //0.xml, º¯Êýµ÷ÓàQuestRunner.RunQuest Ö´ÐÐÂß¼  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@param eventName Ê¼þ×ÖµäÃû  
 | 
#@param trigID Ê¼þ×ÖµäÖµ  
 | 
#@param eventDictName Ëæ»úʼþ×ÖµäÃû£¬´¢´æID  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ_ÿÈÕÈÎÎñ //0.xml, º¯Êýµ÷ÓàQuestRunner.RunQuest Ö´ÐÐÂß¼  
 | 
def RunDayEvent(curPlayer, eventName, trigID, eventDictName):  
 | 
    QuestsEvent = QuestManager.GetAllQuestsEvents()  
 | 
    key = (eventName, "0.xml")  
 | 
    #ÒòΪÿÈÕÈÎÎñɱ¹ÖËæ»ú, ËùÒÔÖ»ÓÐÓÃ0.xmlÀ´¶ÁÈ¡  
 | 
    if not QuestsEvent.has_key(key) :  
 | 
        return  
 | 
      
 | 
    curQuestList = QuestsEvent[key]  
 | 
    if len(curQuestList) == 0:  
 | 
        GameWorld.Log("%s Ã»Óд¥·¢!"%str(key) , curPlayer.GetPlayerID())  
 | 
        return  
 | 
      
 | 
    for event in curQuestList:  
 | 
        questID = event[0]  
 | 
        curMission = curPlayer.FindMission(questID)  
 | 
        if curMission == None:  
 | 
            continue  
 | 
          
 | 
        killRangeName = "killrangenpclv"  
 | 
        #Ö¸¶¨NPCµÈ¼¶·¶Î§  
 | 
        killRangeLV = curMission.GetProperty(killRangeName)  
 | 
        #´ÓÒ»¸ö·¶Î§Ëæ»ú³öÒ»¸öÖ¸¶¨Öµ  
 | 
        eventID = curMission.GetProperty(eventDictName)  
 | 
        #ɱÈÎÒâ¹Ö  
 | 
        anyKill = curMission.GetProperty(QuestCommon.Def_Day_Event_Any_Kill)  
 | 
          
 | 
        #·ûºÏÒ»Ñù¼´¿ÉÖ´ÐÐ  
 | 
        if anyKill == 0 and eventID != trigID and killRangeLV == 0:  
 | 
            continue  
 | 
          
 | 
        if killRangeLV > 0:  
 | 
            curMission.SetProperty(killRangeName, trigID, False)  
 | 
          
 | 
        QuestRunner.RunQuest(curPlayer, questID, event[1].GetXMLEventLoader().GetNodeList())  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ_ÈÎÎñʼþ  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@param eventName Ê¼þ×ÖµäÃû  
 | 
#@param fileID Ê¼þXMLÎļþÃû  
 | 
#@param runType Ö´Ðз½Ê½ Def_RunQuestType_  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ_ÈÎÎñʼþ  
 | 
def RunQuestEvent(curPlayer, eventName, fileID, runType):  
 | 
    eventName = eventName.lower()  
 | 
    QuestsEvent = QuestManager.GetAllQuestsEvents()  
 | 
    key = (eventName, "%s.xml"%str(fileID))  
 | 
      
 | 
    if not QuestsEvent.has_key(key) :  
 | 
        #GameWorld.DebugLog("RunQuestEvent Ã»ÓÐkey = %s  !" % str(key), curPlayer.GetPlayerID())  
 | 
        return False  
 | 
      
 | 
    curQuestList = QuestsEvent[key]  
 | 
    if len(curQuestList) == 0:  
 | 
        GameWorld.Log("%s Ã»Óд¥·¢!"%str(key) , curPlayer.GetPlayerID())  
 | 
        return  
 | 
      
 | 
    for event in curQuestList:  
 | 
        questID = event[0]  
 | 
  
 | 
        #δ¼¤»îµÄÈÎÎñÒ²ÐèÒª´¥·¢, ÔÒò: ÈÎÎñδ¼¤»î, µ«ÊÇ»¹Êǻᱣ´æÔÚÍæ¼ÒÉíÉÏ  
 | 
        #ÔÒò: Íæ¼ÒÒ»ÌìÖ»ÄÜÁìȡһ´Î»î¶¯, ²»¹Ü»î¶¯¿ªÆô¶àÉÙ´Î  
 | 
        #ËùÒÔÒªÈ÷Ǽ¤»î״̬´¥·¢onday  
 | 
          
 | 
        #2009.2.15      ¸üÐÂ, Î´¼¤»îµÄ»î¶¯²»»á´¥·¢, ²»¿¼Âǻɾ³ý  
 | 
        curQuestData = QuestManager.FindQuest(questID)  
 | 
        curMission = curPlayer.FindMission(questID)  
 | 
          
 | 
        if curQuestData != None and curQuestData.Type == QuestCommon.Def_GM_Active_Mission_Type:  
 | 
            #¼ì²éÓÐûÓм¤»î  
 | 
            #ûÓ줻î, Ìø¹ý      
 | 
            if not GameWorld.GetGameWorld().IsEventActive(questID):  
 | 
                if curMission == None:  
 | 
                    continue  
 | 
                #ÊÇÍê³ÉµÄÈÎÎñ  
 | 
                if curMission.GetState() == ChConfig.Def_Mission_State_Over:  
 | 
                    continue  
 | 
              
 | 
        #GameWorld.Log("Íæ¼Ò´¥·¢ÈÎÎñ: %s  - %d"%(str(key), questID) , curPlayer.GetPlayerID())      
 | 
        if runType == Def_RunQuestType_RunAll:  
 | 
            #ÔËÐÐËùÓÐ½Úµã  
 | 
            QuestRunner.RunAllQuest(curPlayer, questID, event[1].GetXMLEventLoader().GetNodeList())  
 | 
            continue  
 | 
#        elif runType == Def_RunQuestType_NoAnswer:  
 | 
#            QuestRunner.RunQuestNoAnswer(curPlayer, questID, event[1].GetXMLEventLoader().GetNodeList())  
 | 
#            continue  
 | 
          
 | 
#        curMission = curPlayer.FindMission(questID)  
 | 
        if curMission == None:  
 | 
            continue  
 | 
          
 | 
        if runType != Def_RunQuestType_RunAll and curMission.GetState() == ChConfig.Def_Mission_State_Over:  
 | 
            #ÈÎÎñÒѾÍê³É  
 | 
            continue  
 | 
  
 | 
        if runType == Def_RunQuestType_Normal:  
 | 
            QuestRunner.RunQuest(curPlayer, questID, event[1].GetXMLEventLoader().GetNodeList())  
 | 
  
 | 
    return True  
 | 
#---------------------------------------------------------------------  
 | 
def Event_OnKillByID(curPlayer, npcID):  
 | 
    #ÔËÐÐon_kill_by_idĿ¼ÏµÄ[NPCTypeID].xmlÎļþ  
 | 
    RunQuestEvent(curPlayer, "on_kill_by_id", npcID, Def_RunQuestType_Normal)  
 | 
    #´¥·¢Ã¿ÈÕÈÎÎñɱ¹Ö  
 | 
    RunDayEvent(curPlayer, "on_kill_by_id", npcID, QuestCommon.Def_Kill_Npc_ID)  
 | 
    return  
 | 
  
 | 
##ÈÎÎñ´¥·¢Æ÷_OnKillById »÷ɱָ¶¨IDµÄ¹ÖÎï  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@param curNPC NPCʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_OnKillById »÷ɱָ¶¨IDµÄ¹ÖÎï  
 | 
def EventRespons_OnKillById(curPlayer, curNPC):  
 | 
    #µÃµ½NPCµÄTypeID  
 | 
    npcTypeID = curNPC.GetNPCID()  
 | 
    QuestRunner.SetKillNPC(curNPC)  
 | 
      
 | 
    Event_OnKillByID(curPlayer, npcTypeID)  
 | 
      
 | 
    #´¥·¢°´µÈ¼¶É±¹Ö  
 | 
    EventRespons_OnKillByLv(curPlayer, curNPC)  
 | 
    return  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_OnKillByLv »÷ɱָ¶¨µÈ¼¶µÄ¹ÖÎï  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@param curNPC NPCʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_OnKillByLv »÷ɱָ¶¨µÈ¼¶µÄ¹ÖÎï  
 | 
def EventRespons_OnKillByLv(curPlayer, curNPC):  
 | 
    if GameWorld.GetMap().GetMapFBType() != IPY_GameWorld.fbtNull:  
 | 
        return  
 | 
      
 | 
    #µÃµ½NPCµÄTypeID  
 | 
    npcLV = curNPC.GetLV()       
 | 
      
 | 
    #ÔËÐÐon_kill_by_lvĿ¼ÏµÄ[NPCTypeID].xmlÎļþ  
 | 
    #QuestRunner.SetKillNPC(curNPC)  
 | 
      
 | 
    RunQuestEvent(curPlayer, "on_kill_by_lv", npcLV, Def_RunQuestType_Normal)  
 | 
      
 | 
    #´¥·¢Ã¿ÈÕÈÎÎñɱ¹Ö  
 | 
    RunDayEvent(curPlayer, "on_kill_by_lv", npcLV, QuestCommon.Def_Kill_Npc_LV)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_Íê³ÉijÊÖ»úÈÎÎñ  
 | 
# @param curPlayer£ºÍæ¼ÒʵÀý  
 | 
# @param curTaskType£º('1_MissionId'£ºÓÎÀú½ºþ£»'2_MissionId'£ºÐ¦¶÷¼£»)  
 | 
# @return None  
 | 
def EventRespons_OnPhoneAchieveTask(curPlayer, curTaskType):  
 | 
      
 | 
    RunQuestEvent(curPlayer, "on_phone_achieve_task", curTaskType, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
  
 | 
  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_OnGet Íæ¼ÒʰȡÎïÆ·  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@param itemTypeID ÎïÆ·ID  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_OnGet Íæ¼ÒʰȡÎïÆ·  
 | 
def EventRespons_OnGet(curPlayer, itemTypeID):  
 | 
    RunQuestEvent(curPlayer, "on_get", itemTypeID, Def_RunQuestType_Normal)  
 | 
    #´¥·¢Ã¿ÈÕÈÎÎñµÃµ½ÎïÆ·  
 | 
    RunDayEvent(curPlayer, "on_get", itemTypeID, QuestCommon.Def_Item_ID)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_OnTruckDisappear ïÚ³µ¶ªÊ§´¥·¢ÈÎÎñ  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@param taskID ïÚ³µÊ¼þID  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_OnTruckDisappear ïÚ³µ¶ªÊ§´¥·¢ÈÎÎñ  
 | 
def EventRespons_OnTruckDisappear(curPlayer, taskID):  
 | 
    GameWorld.Log("æô³µ¶ªÊ§, ´¥·¢æô³µ¶ªÊ§ÈÎÎñ %d"%(taskID), curPlayer.GetPlayerID())  
 | 
    RunQuestEvent(curPlayer, "on_truck_disappear", taskID, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_OnTruckDestroy ïÚ³µ´òÀô¥·¢ÈÎÎñ  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@param taskID ïÚ³µÊ¼þID  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_OnTruckDestroy ïÚ³µ´òÀô¥·¢ÈÎÎñ  
 | 
def EventRespons_OnTruckDestroy(curPlayer, taskID):  
 | 
    GameWorld.Log("æô³µ´òÀÃ, ´¥·¢æô³µ´òÀÃÈÎÎñ %d"%(taskID), curPlayer.GetPlayerID())  
 | 
    RunQuestEvent(curPlayer, "on_truck_destroy", taskID, Def_RunQuestType_Normal)  
 | 
    return  
 | 
#---------------------------------------------------------------------  
 | 
##×Ô¶¨Ò庯Êý:OnEnter Íæ¼ÒÉÏÏß´¥·¢GM¿ª¹ØµÄ»î¶¯  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ×Ô¶¨Ò庯Êý:OnEnter Íæ¼ÒÉÏÏß´¥·¢GM¿ª¹ØµÄ»î¶¯  
 | 
def PlayerGMEventTrig(curPlayer):  
 | 
    gameWorld = GameWorld.GetGameWorld()  
 | 
    #¼ì²éÍæ¼Ò´¥·¢GMʼþ(´¥·¢on_activeºÍon_deactive)  
 | 
    #QuestManager.FindQuest  
 | 
      
 | 
    delQuestList = []  
 | 
    for i in range(0, curPlayer.GetMissionCount()):  
 | 
        curMission = curPlayer.GetMissionByIndex(i)  
 | 
        missionID = curMission.GetMissionID()  
 | 
        missionData = QuestManager.FindQuest(missionID)  
 | 
        if missionData == None:  
 | 
            continue  
 | 
          
 | 
        if missionData.Type != QuestCommon.Def_GM_Active_Mission_Type:  
 | 
            continue  
 | 
          
 | 
        #¼ì²é½ÚÇìÈÎÎñ  
 | 
        if not gameWorld.IsEventActive(missionID):  
 | 
            #Íæ¼ÒÓнÚÇìÈÎÎñ, µ«ÊÇÈÎÎñÒѾ¹Ø±ÕÁË  
 | 
            #×¢Òâ: ÕâÀïÊÇÔÚforÖÐɾ³ý!!!  
 | 
            delQuestList.append(missionID)  
 | 
            #EventResponse_OnDeActive(curPlayer, missionID)  
 | 
              
 | 
    for missionID in delQuestList:  
 | 
        EventResponse_OnDeActive(curPlayer, missionID)  
 | 
      
 | 
    for i in range(gameWorld.GetActiveEventCount()):  
 | 
        missionID = gameWorld.GetActiveEventByIndex(i)  
 | 
        if curPlayer.FindMission(missionID):  
 | 
            #Íæ¼ÒÓÐÕâ¸öÈÎÎñ  
 | 
            continue  
 | 
          
 | 
        #Íæ¼ÒûÓÐÕâ¸ö½ÚÇìÈÎÎñ, ÐèÒª´¥·¢  
 | 
        EventResponse_OnActive(curPlayer, missionID)  
 | 
          
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##´¥·¢ËùÓÐËûÈË·¢²¼µÄÈÎÎñ  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ×Ô¶¨Ò庯Êý:´¥·¢ËùÓÐËûÈË·¢²¼µÄÈÎÎñ  
 | 
def PlayerMissionPubEventTrig(curPlayer):  
 | 
    #¼ì²éÍæ¼Ò´¥·¢GMʼþ(´¥·¢on_activeºÍon_deactive)  
 | 
    #QuestManager.FindQuest  
 | 
    missionPubManager = GameWorld.GetGameWorld().GetDBMissionPubManager()      
 | 
    for i in range(missionPubManager.GetCount()):  
 | 
        curMissionPub = missionPubManager.GetAt(i)  
 | 
        missionID = curMissionPub.GetMissionID()  
 | 
        if curPlayer.FindMission(missionID):  
 | 
            #Íæ¼ÒÓÐÕâ¸öÈÎÎñ  
 | 
            continue  
 | 
          
 | 
        #´¥·¢ËûÈË·¢²¼µÄÈÎÎñ  
 | 
        CheckTrigMissionPub(curPlayer, curMissionPub)  
 | 
          
 | 
    return  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_OnEnter ÈÎÎñDZ¹æÔò,Íæ¼ÒµÚÒ»´ÎµÇ½ÓÎÏ·ÒªÌí¼ÓÈÎÎñ1¸øÍæ¼Ò  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_OnEnter ÈÎÎñDZ¹æÔò,Íæ¼ÒµÚÒ»´ÎµÇ½ÓÎÏ·ÒªÌí¼ÓÈÎÎñ1¸øÍæ¼Ò  
 | 
def EventResponse_OnEnter(curPlayer):  
 | 
    curPlayerID = curPlayer.GetID()  
 | 
    #quests = QuestManager.GetQuests()  
 | 
    addMission = QuestCommon.GetCommonMission(curPlayer)  
 | 
      
 | 
    if addMission == None:  
 | 
        #Ö´ÐеÚÒ»´ÎµÇ½Âß¼  
 | 
        __FirstLoginOnEnter(curPlayer)  
 | 
          
 | 
        addMission = QuestCommon.GetCommonMission(curPlayer)  
 | 
          
 | 
        if addMission == None:  
 | 
            GameWorld.ErrLog('EventResponse_OnEnter, Íæ¼Ò = %sÎÞ·¨»ñµÃ¹«¹²ÈÎÎñ'%(curPlayer.GetName()), curPlayer.GetID())  
 | 
            return  
 | 
      
 | 
    if addMission.GetState() != ChConfig.Def_Mission_State_NoAccept:  
 | 
        return   
 | 
      
 | 
    #Íæ¼ÒµÚÒ»¸öÈÎÎñûÓÐ×ö,Ëø×¡  
 | 
    GameWorld.Log("Íæ¼ÒµÚÒ»¸öÈÎÎñûÓÐ×ö, Ëø×¡", curPlayerID)  
 | 
    #curPlayer.BeginEvent()  
 | 
    curPlayer.SetDict(ChConfig.Def_PlayerKey_Frist_Lock, 1)  
 | 
    #µ÷ÓÃÖ´ÐÐÐÂÊÖÈÎÎñ  
 | 
    RunQuestEvent(curPlayer, "on_enter", ChConfig.Def_XML_FirstLogin, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##Íæ¼ÒµÚÒ»´ÎµÇ½ÓÎÏ·Âß¼, ÈçÈÎÎñ¼ÓÔØÂß¼, ×Ô¶¯Ñ§Ï°¼¼ÄÜ  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ×Ô¶¨Ò庯Êý:Íæ¼ÒµÚÒ»´ÎµÇ½ÓÎÏ·Âß¼, ÈçÈÎÎñ¼ÓÔØÂß¼, ×Ô¶¯Ñ§Ï°¼¼ÄÜ  
 | 
def __FirstLoginOnEnter(curPlayer):  
 | 
    playerID = curPlayer.GetID()  
 | 
      
 | 
    GameWorld.Log('Íæ¼ÒÊǵÚÒ»´Î½øÈëÓÎÏ·', playerID)  
 | 
    # ÌØÊâ˵Ã÷£º Èç¹ûµØÍ¼Ã»ÓÐÍêÈ«³õʼ»¯ºÃ£¬¿Í»§¶Ë¶Ï¿ª»òÕßÒì³£µÈÇé¿ö»á´¥·¢RunGateGameServerMapServerKickOutPlayerNoSave  
 | 
    # ÄÇôÔÚDoPlayerLogin ÖÐÉèÖõÄÊý¾Ý½«²»»á±»±£´æ£¬ Èç»áµ¼ÖµÚÒ»¸öÈÎÎñÖØ¸´´¥·¢ÎÊÌ⣬¼Ç¼¶à´Î·¢ËÍ  
 | 
    EventReport.WriteEvent_Entry(curPlayer, 4)  
 | 
    #EventReport.EventReport(ShareDefine.Def_UserAction_FirstLogin, "", curPlayer)  
 | 
    #---¸øÍæ¼ÒÐÂÊÖÈÎÎñ---  
 | 
    addMission = QuestCommon.AddNewMission(curPlayer, ChConfig.Def_MissionID_FirstLogin)  
 | 
    #¹ã²¥ÐÂÔöÈÎÎñ  
 | 
    NotifyOneMission(curPlayer, addMission)  
 | 
      
 | 
    #---²¹ÂúѪÂúħ---  
 | 
    curPlayer.SetHP(curPlayer.GetMaxHP())  
 | 
    curPlayer.SetMP(curPlayer.GetMaxMP())  
 | 
      
 | 
    #---¸øÓèÍæ¼ÒÐÂÊÖÎïÆ·---  
 | 
      
 | 
    #---³õʼ»¯×°±¸ÏÔÒþ µÚ1Ì×*10+ûÓÐÌ××°  
 | 
    curPlayer.SetEquipShowSwitch(10)  
 | 
    PlayerControl.SetFaceEquipIndex(curPlayer, 11012014)  
 | 
      
 | 
    #ĬÈÏ´¥·¢Ò»´Î¹¦ÄÜ¿ªÆô  
 | 
    if curPlayer.GetLV() == 1:  
 | 
        GameFuncComm.DoFuncOpenLogic(curPlayer)  
 | 
          
 | 
    #³õʼ»¯×é¶Ó״̬  
 | 
    PlayerControl.SetTeamCheckStateEx(curPlayer, 0, 1)  
 | 
      
 | 
    #°´Æ½Ì¨¸øÊ׸ö³ÆºÅ  
 | 
    #PlayerDienstgrad.GiveFirstLoginDienstgrad(curPlayer)  
 | 
  
 | 
# 2012-04-12 Íæ¼Ò³õʼ»¯Ê±ÒѸøÓè¸ñ×Ó  
 | 
#    #---ÐÂÊÖ¸ø²Ö¿â---  
 | 
#    if ChConfig.Def_FirstLogin_OpenWareHouseCnt > 0:  
 | 
#        ResetWarehouse(curPlayer, ChConfig.Def_FirstLogin_OpenWareHouseCnt, False)  
 | 
      
 | 
    #Íæ¼ÒĬÈ϶ñÃûÖµ  
 | 
    curPlayer.SetInfamyValue(ChConfig.Def_FirstLogin_InfamyValue)  
 | 
      
 | 
    #±ê¼ÇÒѵǽ¹ý£¬ÓÃÓÚ·ÇͬһÌì¶þ´ÎµÇ½  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_OtherDayLogin, 1)  
 | 
      
 | 
    #curPlayer.SetDict("ThunderLogin", 1)  
 | 
    #¼Ç¼µÚÒ»´ÎµÇ½  
 | 
    DataRecordPack.DR_FirstLogin(curPlayer.GetAccID(), curPlayer.GetIP(), curPlayer)  
 | 
      
 | 
    #ÄÚ²¿ºÅ¸øÓèÔª±¦  
 | 
    #PlayerCoin.GiveGoldByCreate(curPlayer)  
 | 
    return  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_OnLogin Íæ¼ÒµÇ½ÓÎÏ·´¥·¢  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_OnLogin Íæ¼ÒµÇ½ÓÎÏ·´¥·¢  
 | 
def EventResponse_OnLogin(curPlayer):  
 | 
    #´¥·¢GM¿ª¹Ø»î¶¯  
 | 
#    PlayerGMEventTrig(curPlayer)  
 | 
    #´¥·¢ËûÈË·¢²¼»î¶¯  
 | 
#    PlayerMissionPubEventTrig(curPlayer)  
 | 
      
 | 
    RunQuestEvent(curPlayer, "on_login", "on_login", Def_RunQuestType_RunAll)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_On_GameServer_Login ´ËʼþÐèÒªGameServer³õʼ»¯Íæ¼Òºó£¬·µ»ØÊǼÒ×峤ºó´¥·¢  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_On_GameServer_Login ´ËʼþÐèÒªGameServer³õʼ»¯Íæ¼Òºó£¬·µ»ØÊǼÒ×峤ºó´¥·¢  
 | 
def EventResponse_On_GameServer_Login(curPlayer):  
 | 
    #ÉèÖÃΪ¼Ò×峤£¨GameServerÒÑÑéÖ¤£¬MapServer»¹Ã»Ë¢Ð£©  
 | 
    curPlayer.SetFamilyMemberLV(IPY_GameWorld.fmlLeader)  
 | 
    RunQuestEvent(curPlayer, "on_gs_login", "on_gs_login", Def_RunQuestType_RunAll)  
 | 
    return  
 | 
#===============================================================================  
 | 
#   
 | 
# #³ÇÃŻ¿ªÊ¼´¥·¢ÈÎÎñʼþ  
 | 
# def EventResponse_On_Open_Gate_War(curPlayer):  
 | 
#    if not curPlayer.GetGameServerInitOK():  
 | 
#        GameServerRefresh.Set_Mission_No_ID_On_Open_Gate_War( curPlayer , 1 )  
 | 
#        return  
 | 
#      
 | 
#    RunQuestEvent(curPlayer, "on_open_gate_war", "on_open_gate_war", Def_RunQuestType_RunAll)  
 | 
#    return  
 | 
#   
 | 
# #³ÇÃŻ½áÊø´¥·¢ÈÎÎñʼþ  
 | 
# def EventResponse_On_Close_Gate_War(curPlayer):  
 | 
#    if not curPlayer.GetGameServerInitOK():  
 | 
#        GameServerRefresh.Set_Mission_No_ID_On_Close_Gate_War( curPlayer , 1 )  
 | 
#        return  
 | 
#      
 | 
#    RunQuestEvent(curPlayer, "on_close_gate_war", "on_close_gate_war", Def_RunQuestType_RunAll)  
 | 
#    return  
 | 
#   
 | 
# #³ÇÃŻÖеǽ´¥·¢ÈÎÎñʼþ  
 | 
# def EventResponse_On_Gate_War_Login(curPlayer):  
 | 
#    RunQuestEvent(curPlayer, "on_gate_war_login", "on_gate_war_login", Def_RunQuestType_RunAll)  
 | 
#    return  
 | 
#   
 | 
# #³ÇÃŻºóµÇ½´¥·¢ÈÎÎñʼþ  
 | 
# def EventResponse_Not_Gate_War_Login(curPlayer):  
 | 
#    RunQuestEvent(curPlayer, "not_gate_war_login", "not_gate_war_login", Def_RunQuestType_RunAll)  
 | 
#    return  
 | 
#===============================================================================  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_OnGameEvent ÌøÎèµöÓã½ø¶ÈÌõ½áÊøºó´¥·¢  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_OnGameEvent ÌøÎèµöÓã½ø¶ÈÌõ½áÊøºó´¥·¢  
 | 
def EventRespons_OnGameEvent(curPlayer):  
 | 
    RunQuestEvent(curPlayer, "on_game_event", "on_game_event", Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_OnMap Íæ¼ÒµÇ½µØÍ¼  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_OnMap Íæ¼ÒµÇ½µØÍ¼  
 | 
def EventResponse_OnMap(curPlayer):  
 | 
    RunQuestEvent(curPlayer, "on_map", "on_map", Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
  
 | 
##ÈÎÎñ´¥·¢Æ÷_OnMapEx Íæ¼ÒµÇ½µØÍ¼  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@return None  
 | 
def EventResponse_OnMapEx(curPlayer):  
 | 
    RunQuestEvent(curPlayer, "on_map_ex", "on_map_ex", Def_RunQuestType_RunAll)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_LVUp µ±Íæ¼ÒÉý¼¶µÄʱºò´¥·¢  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_LVUp µ±Íæ¼ÒÉý¼¶µÄʱºò´¥·¢  
 | 
def EventResponse_LVUp(curPlayer):  
 | 
    #ÒѽÓÈÎÎñÉý¼¶´¥·¢Âß¼  
 | 
    RunQuestEvent(curPlayer, "on_lv_up", "on_lv_up", Def_RunQuestType_Normal)  
 | 
      
 | 
    #2010/5/18 LvUp´¥·¢ÓɶÁÈ¡XMLÐÞ¸ÄΪ¶ÁÈ¡ÅäÖñíLvUpTrigMissionID  
 | 
    #Éý¼¶´¥·¢ÈÎÎñ·Ö2ÖÖ: 1.Ìí¼ÓÈÎÎñ²¢ÇÒ´¥·¢ÈÎÎñXMLÂß¼£¬ÈÎÎñÒÑ´æÔÚÔòÖ»´¥·¢XMLÂß¼  
 | 
    #                2.²»Ìí¼ÓÈÎÎñ£¬Èç¹ûÈÎÎñ´æÔڲŴ¥·¢XMLÂß¼  
 | 
      
 | 
    #{ Ö°Òµ:{{µÈ¼¶:[ ´¥·¢ÈÎÎñIDÁбí] } }  
 | 
    missionDist = ReadChConfig.GetEvalChConfig('LvUpTrigMissionID')  
 | 
    #¸ù¾ÝÌõ¼þ¹ýÂË×Öµä  
 | 
    missionJobDist = missionDist.get(curPlayer.GetJob())  
 | 
      
 | 
    if not missionJobDist:  
 | 
        #GameWorld.ErrLog('EventResponse_LVUp, job = %s'%(curPlayer.GetJob()), curPlayer.GetID())  
 | 
        return  
 | 
      
 | 
    missionIDList = missionJobDist.get(curPlayer.GetLV())  
 | 
      
 | 
    if not missionIDList:  
 | 
        #GameWorld.ErrLog('EventResponse_LVUp, lv = %s'%(curPlayer.GetLV()), curPlayer.GetID())  
 | 
          
 | 
        # Éý¼¶Ö»´¥·¢ÈÎÎñXML£¬²»Ìí¼ÓÈÎÎñ  
 | 
        __LVUpNoAddMission(curPlayer)  
 | 
        return  
 | 
      
 | 
    #¸øÓèÈÎÎñ±ê־λ  
 | 
    isGiveMission = False  
 | 
      
 | 
    for missionID in missionIDList:  
 | 
        if curPlayer.FindMission(missionID):  
 | 
            GameWorld.ErrLog('EventResponse_LVUp, hasSameMissionID = %s'%(missionID), curPlayer.GetID())  
 | 
            continue  
 | 
          
 | 
        isGiveMission = True  
 | 
          
 | 
        #Ìí¼ÓÐÂÈÎÎñ¸øÍæ¼Ò  
 | 
        addMission = QuestCommon.AddNewMission(curPlayer, missionID)  
 | 
        NotifyOneMission(curPlayer, addMission)  
 | 
      
 | 
    if isGiveMission:  
 | 
        #LvUp_Get_Task <n color="0,255,0" BKCOLOR="0,0,0">µÈ¼¶ÌáÉý,ÄúÓÐеÄÈÎÎñ¿É½ÓÊÜ!</n>  
 | 
        PlayerControl.NotifyCode(curPlayer , "LvUp_Get_Task")  
 | 
      
 | 
    RunQuestEvent(curPlayer, "on_lv_up", curPlayer.GetLV(), Def_RunQuestType_RunAll)  
 | 
#===============================================================================  
 | 
#    #ÄÜ·ñ´¥·¢³ÇÃŻ  
 | 
#    __IsGateWar(curPlayer)  
 | 
#===============================================================================  
 | 
    return True  
 | 
  
 | 
## Éý¼¶Ö»´¥·¢ÈÎÎñXML£¬²»Ìí¼ÓÈÎÎñ  
 | 
#  @param curPlayer Íæ¼ÒʵÀý  
 | 
#  @return None  
 | 
def __LVUpNoAddMission(curPlayer):  
 | 
    missionDist = ReadChConfig.GetEvalChConfig('LvUpTrigMissionNotAdd')  
 | 
    #¸ù¾ÝÌõ¼þ¹ýÂË×Öµä  
 | 
    lvTrigMissionList = missionDist.get(curPlayer.GetJob())  
 | 
      
 | 
    if lvTrigMissionList == None:  
 | 
        return  
 | 
      
 | 
    if curPlayer.GetLV() not in lvTrigMissionList:  
 | 
        return  
 | 
  
 | 
    RunQuestEvent(curPlayer, "on_lv_up", curPlayer.GetLV(), Def_RunQuestType_RunAll)  
 | 
      
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_ͨÓûÏìÓ¦, µ¥¸öÍæ¼Ò  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@param eventName Ê¼þ×ÖµäÃû  
 | 
#@param fileID Ê¼þXMLÎļþÃû  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks   
 | 
def EventResponse_OnAction(curPlayer, eventName, fileID):  
 | 
    RunQuestEvent(curPlayer, eventName, fileID, Def_RunQuestType_RunAll)  
 | 
    return  
 | 
  
 | 
##ÈÎÎñ´¥·¢Æ÷_ͨÓûÏìÓ¦, È«·þÍæ¼Ò  
 | 
#@param eventName Ê¼þ×ÖµäÃû  
 | 
#@param fileID Ê¼þXMLÎļþÃû  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks   
 | 
def EventResponse_OnActionAllMapPlayer(eventName, fileID):  
 | 
    playerManager = GameWorld.GetPlayerManager()  
 | 
  
 | 
    for i in range(0, playerManager.GetPlayerCount()):  
 | 
        curPlayer = playerManager.GetPlayerByIndex(i)  
 | 
          
 | 
        if not curPlayer or curPlayer.IsEmpty():  
 | 
            continue  
 | 
  
 | 
        EventResponse_OnAction(curPlayer, eventName, fileID)  
 | 
  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_OnHalfHour Ã¿°ëСʱ´¥·¢Ò»´Î  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_OnHour Ã¿Ð¡Ê±´¥·¢Ò»´Î  
 | 
def EventResponse_OnHalfHour(curPlayer):  
 | 
    RunQuestEvent(curPlayer, "on_halfhour", "on_halfhour", Def_RunQuestType_RunAll)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_OnHour Ã¿Ð¡Ê±´¥·¢Ò»´Î  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_OnHour Ã¿Ð¡Ê±´¥·¢Ò»´Î  
 | 
def EventResponse_OnHour(curPlayer):  
 | 
    RunQuestEvent(curPlayer, "on_hour", "on_hour", Def_RunQuestType_RunAll)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_OnDay Ã¿Ìì´¥·¢Ò»´Î  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_OnDay Ã¿Ìì´¥·¢Ò»´Î  
 | 
def EventResponse_OnDay(curPlayer):  
 | 
    RunQuestEvent(curPlayer, "on_day", "on_day", Def_RunQuestType_RunAll)  
 | 
    RunQuestEvent(curPlayer, "on_day", "on_dayex", Def_RunQuestType_Normal)  
 | 
      
 | 
    #ÇåÉͽðÈÎÎñ½±Àø  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RunTaskAwardState % QuestCommon.Def_Mission_Type_RunDaily, 0)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RunTaskAwardRecord % QuestCommon.Def_Mission_Type_RunDaily, 0)  
 | 
    NotifyRunEndAward(curPlayer, QuestCommon.Def_Mission_Type_RunDaily)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_OnWeek Ã¿ÖÜ´¥·¢Ò»´Î  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_OnWeek Ã¿ÖÜ´¥·¢Ò»´Î  
 | 
def EventResponse_OnWeek(curPlayer):  
 | 
    RunQuestEvent(curPlayer, "on_week", "on_week", Def_RunQuestType_RunAll)  
 | 
      
 | 
    #ÇåÏÉÃËÈÎÎñ½±Àø  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RunTaskAwardState % QuestCommon.Def_Mission_Type_RunFamily, 0)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RunTaskAwardRecord % QuestCommon.Def_Mission_Type_RunFamily, 0)  
 | 
    NotifyRunEndAward(curPlayer, QuestCommon.Def_Mission_Type_RunFamily)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_OnLeaveFamily Íæ¼ÒÀ뿪¼Ò×å´¥·¢( ×Ô¶¯/±»¶¯ )  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_OnLeaveFamily Íæ¼ÒÀ뿪¼Ò×å´¥·¢( ×Ô¶¯/±»¶¯ )  
 | 
def EventResponse_OnLeaveFamily(curPlayer):  
 | 
    if not curPlayer.GetGameServerInitOK():  
 | 
        GameServerRefresh.Set_Mission_No_ID_OnLeaveFamily(curPlayer , 1)  
 | 
        return  
 | 
      
 | 
    RunQuestEvent(curPlayer, "on_leave_family", "on_leave_family", Def_RunQuestType_RunAll)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_OnMemberChange ¼Ò×峤±ä¸ü  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_OnMemberChange ¼Ò×峤±ä¸ü  
 | 
def EventResponse_OnMemberChange(curPlayer):  
 | 
    if not curPlayer.GetGameServerInitOK():  
 | 
        GameServerRefresh.Set_Mission_No_ID_OnMemberChange(curPlayer , 1)  
 | 
        return  
 | 
      
 | 
    GameWorld.Log('EventResponse_OnMemberChange' , curPlayer.GetID())  
 | 
    RunQuestEvent(curPlayer, 'on_member_change', 'on_member_change', Def_RunQuestType_RunAll)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_OnFamily ½øÈë¼Ò×å  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_OnFamily ½øÈë¼Ò×å  
 | 
def EventResponse_OnFamily(curPlayer):  
 | 
    RunQuestEvent(curPlayer, "on_family", "on_family", Def_RunQuestType_RunAll)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_OnCreateFamily ´´½¨¼Ò×å  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_OnCreateFamily ´´½¨¼Ò×å  
 | 
def EventResponse_OnCreateFamily(curPlayer):  
 | 
    RunQuestEvent(curPlayer, "on_create_family", "on_create_family", Def_RunQuestType_RunAll)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_OnFamilyAdd ¼ÓÈë¼Ò×å  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
def EventResponse_OnFamilyAdd(curPlayer):  
 | 
    RunQuestEvent(curPlayer, "on_add_family", "on_add_family", Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_OnFamilyLVUp ¼Ò×åÉý¼¶  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
def EventResponse_OnFamilyLVUp(curPlayer):  
 | 
    RunQuestEvent(curPlayer, "on_lv_up_family", "on_lv_up_family", Def_RunQuestType_RunAll)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_OnLeaveMap À뿪µØÍ¼  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_OnLeaveMap À뿪µØÍ¼  
 | 
def EventResponse_OnLeaveMap(curPlayer):  
 | 
    RunQuestEvent(curPlayer, "on_leave_map", "on_leave_map", Def_RunQuestType_Normal)  
 | 
    return  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_OnFBTimeOut ¸±±¾Ê±¼ä½áÊø  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_OnFBTimeOut ¸±±¾Ê±¼ä½áÊø  
 | 
def EventResponse_OnFBTimeOut(curPlayer):  
 | 
    RunQuestEvent(curPlayer, "on_fb_timeout", "on_fb_timeout", Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
#===============================================================================  
 | 
# #¹¥»÷³ÇÃÅʼþ´¥·¢  
 | 
# def EventResponse_OnAttackGate(curPlayer):  
 | 
#    RunQuestEvent(curPlayer, "on_attack_gate", "on_attack_gate", Def_RunQuestType_Normal)  
 | 
#    return  
 | 
#===============================================================================  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_OnKillEnemy »÷É±Íæ¼Òʼþ´¥·¢  
 | 
#@param attackPlayer ¹¥»÷Õß  
 | 
#@param deadPlayer ËÀÍöµÄÍæ¼Ò  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_OnKillEnemy »÷É±Íæ¼Òʼþ´¥·¢  
 | 
def EventResponse_OnKillEnemy(attackPlayer, deadPlayer):  
 | 
    RunQuestEvent(attackPlayer, "on_kill_enemy", "on_kill_enemy", Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_OnEnemyKill ±»Íæ¼Ò»÷ɱʼþ´¥·¢  
 | 
#@param deadPlayer ËÀÍöµÄÍæ¼Ò  
 | 
#@param attackPlayer ¹¥»÷Õß  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_OnEnemyKill ±»Íæ¼Ò»÷ɱʼþ´¥·¢  
 | 
def EventResponse_OnEnemyKill(deadPlayer, attackPlayer):  
 | 
    RunQuestEvent(deadPlayer, "on_enemy_kill", "on_enemy_kill", Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷vipµÈ¼¶¸Ä±ä  
 | 
#@param curPlayer Íæ¼Ò  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷vipµÈ¼¶¸Ä±ä´¥·¢  
 | 
def EventResponse_OnVipLvUp(curPlayer, vipLV):  
 | 
    RunQuestEvent(curPlayer, "on_viplv_up", vipLV, Def_RunQuestType_RunAll)  
 | 
    return  
 | 
  
 | 
##ÈÎÎñ´¥·¢Æ÷¹ºÂòvipÀñ°ü  
 | 
#@param curPlayer Íæ¼Ò  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷vipµÈ¼¶¸Ä±ä´¥·¢  
 | 
def EventResponse_BuyVIPItem(curPlayer, vipLV):  
 | 
    RunQuestEvent(curPlayer, "buyvipitem", "buyvipitem", Def_RunQuestType_Normal)  
 | 
    return  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_Active ÒѾÎÞʹÓÃÁË  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@param typeName ÀàÐÍ  
 | 
#@param missionID ÈÎÎñID  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_Active ÒѾÎÞʹÓÃÁË  
 | 
def __EventResponse_Active(curPlayer, typeName, missionID):  
 | 
    eventName = typeName  
 | 
    fileID = typeName  
 | 
    QuestsEvent = QuestManager.GetAllQuestsEvents()  
 | 
    key = (eventName, "%s.xml"%str(fileID))  
 | 
    if not QuestsEvent.has_key(key) :  
 | 
        return False  
 | 
      
 | 
    curQuestList = QuestsEvent[key]  
 | 
    if len(curQuestList) == 0:  
 | 
        GameWorld.Log("%s Ã»Óд¥·¢!"%str(key) , curPlayer.GetPlayerID())  
 | 
        return  
 | 
      
 | 
    for event in curQuestList:  
 | 
        questID = event[0]  
 | 
        if questID != missionID:  
 | 
            continue  
 | 
  
 | 
        #GameWorld.Log("Íæ¼Ò´¥·¢ÈÎÎñ: %s  - %d"%(str(key), questID) , curPlayer.GetPlayerID())      
 | 
        #ÔËÐÐËùÓÐ½Úµã  
 | 
        QuestRunner.RunAllQuest(curPlayer, questID, event[1].GetXMLEventLoader().GetNodeList())  
 | 
        break  
 | 
  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##´¥·¢µ¥¸öËûÈË·¢²¼µÄÈÎÎñ  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@param curMissionPub ·¢²¼µÄÈÎÎñÊý¾Ý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ×Ô¶¨Ò庯Êý:´¥·¢µ¥¸öËûÈË·¢²¼µÄÈÎÎñ  
 | 
def CheckTrigMissionPub(curPlayer, curMissionPub):  
 | 
    missionID = curMissionPub.GetMissionID()  
 | 
    if curPlayer.FindMission(missionID):  
 | 
        #Íæ¼ÒÓÐÕâ¸öÈÎÎñ  
 | 
        return  
 | 
      
 | 
    missinoPubType = curMissionPub.GetMissinoPubType()  
 | 
      
 | 
    #¼ì²é´¥·¢ÈÎÎñ·¢²¼  
 | 
    if missinoPubType == IPY_GameWorld.mptFamily:  
 | 
        #¼Ò×å·¢²¼  
 | 
        if curPlayer.GetFamilyID() == 0:  
 | 
            return  
 | 
          
 | 
        if curPlayer.GetFamilyID() != curMissionPub.GetPubID():  
 | 
            return   
 | 
          
 | 
        EventResponse_OnMissionPub(curPlayer, missionID)  
 | 
          
 | 
    elif missinoPubType == IPY_GameWorld.mptCountry:  
 | 
        #¼Ò×å·¢²¼  
 | 
        if curPlayer.GetCountry() != curMissionPub.GetPubID():  
 | 
            return   
 | 
          
 | 
        EventResponse_OnMissionPub(curPlayer, missionID)  
 | 
          
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_OnMissionPub ËûÈË·¢²¼ÈÎÎñ  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@param missionID ÈÎÎñID  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_OnMissionPub ËûÈË·¢²¼ÈÎÎñ  
 | 
def EventResponse_OnMissionPub(curPlayer, missionID):  
 | 
    if not curPlayer.GetGameServerInitOK():  
 | 
        GameServerRefresh.Set_Mission_Have_ID_OnMissionPub(curPlayer , missionID)  
 | 
        return  
 | 
      
 | 
    RunQuestEvent(curPlayer, 'on_pub', missionID, Def_RunQuestType_RunAll)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_OnActive ´¥·¢GM¿ª¹ØÈÎÎñ  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@param missionID ÈÎÎñID  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_OnActive ´¥·¢GM¿ª¹ØÈÎÎñ  
 | 
def EventResponse_OnActive(curPlayer, missionID):  
 | 
    if not curPlayer.GetGameServerInitOK():  
 | 
        GameServerRefresh.Set_Mission_Have_ID_OnActive(curPlayer , missionID)  
 | 
        return  
 | 
      
 | 
    RunQuestEvent(curPlayer, 'on_active', missionID, Def_RunQuestType_RunAll)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_OnDeActive ¹Ø±ÕGM¿ª¹ØÈÎÎñ  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@param missionID ÈÎÎñID  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_OnDeActive ¹Ø±ÕGM¿ª¹ØÈÎÎñ  
 | 
def EventResponse_OnDeActive(curPlayer, missionID):  
 | 
    if not curPlayer.GetGameServerInitOK():  
 | 
        GameServerRefresh.Set_Mission_Have_ID_OnDeActive(curPlayer , missionID)  
 | 
        return  
 | 
      
 | 
    RunQuestEvent(curPlayer, 'on_deactive', missionID, Def_RunQuestType_RunAll)  
 | 
    return  
 | 
  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_OnDig ÍÚ±¦½ø¶ÈÌõ½áÊøºó´¥·¢  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_OnDig ÍÚ±¦½ø¶ÈÌõ½áÊøºó´¥·¢  
 | 
def EventResponse_OnDig(curPlayer):      
 | 
    #Íæ¼ÒÍڵش¥·¢  
 | 
    QuestRunner.InitTreasureNotifyContentList()  
 | 
    #GameWorld.Log("¿ªÊ¼ÍÚµØ")  
 | 
      
 | 
    for i in range(0, curPlayer.GetMissionCount()):  
 | 
        curMission = curPlayer.GetMissionByIndex(i)  
 | 
        #Õâ¸öÈÎÎñÒѾ×öÍêÁË(-1)  »òÕß   Õâ¸öÈÎÎñ»¹Ã»ÓнÓ(0)  
 | 
        if curMission.GetState() in [ChConfig.Def_Mission_State_NoAccept, ChConfig.Def_Mission_State_Over]:  
 | 
            continue  
 | 
  
 | 
        RunQuestEvent(curPlayer, "on_dig", curMission.GetMissionID(), Def_RunQuestType_Normal)  
 | 
              
 | 
    treasureNotifyList = QuestRunner.GetTreasureNotifyContentList()  
 | 
    #µÃµ½ÌáʾµÄ×î¸ßµÈ¼¶  
 | 
    minLV = 0  
 | 
    minIndex = -1  
 | 
    for i in range(0, len(treasureNotifyList)):  
 | 
        if minLV == 0:  
 | 
            minLV = treasureNotifyList[i].LV  
 | 
            minIndex = i  
 | 
            continue  
 | 
        if treasureNotifyList[i].LV < minLV:  
 | 
            minLV = treasureNotifyList[i].LV   
 | 
            minIndex = i  
 | 
              
 | 
    if minIndex == -1:  
 | 
        #ûÓÐÍÚ±¦ÈÎÎñ  
 | 
        curPlayer.Notify(0, "n")  
 | 
        return  
 | 
      
 | 
    missionID = treasureNotifyList[minIndex].MissionID  
 | 
    #Í¨ÖªÍæ¼Ò  
 | 
    curPlayer.Notify(missionID, treasureNotifyList[minIndex].Content)  
 | 
    #curPlayer.NotifyMiddle(missionID, QuestRunner.TreasureNotifyContentList[minIndex].Content)              
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_LVFull µ±Ç°µÈ¼¶Âú¼¶µÄʱºò´¥·¢  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_LVFull µ±Ç°µÈ¼¶Âú¼¶µÄʱºò´¥·¢  
 | 
def EventResponse_LVFull(curPlayer):  
 | 
    #µÃµ½NPCµÄTypeID  
 | 
    #ÔËÐÐon_visitĿ¼ÏµÄ[NPCTypeID].xmlÎļþ  
 | 
    questID = curPlayer.GetLV() * 100  
 | 
      
 | 
    return RunQuestEvent(curPlayer, "on_lv_full", questID, Def_RunQuestType_RunAll)  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_MisCollectTime Ñ¯ÎÊÊÇ·ñ¿É²É¼¯¸ÃNPC  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@param curNPC NPCʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_MisCollectTime Ñ¯ÎÊÊÇ·ñ¿É²É¼¯¸ÃNPC  
 | 
def EventRespons_MisCollectTime(curPlayer, curNPC):  
 | 
    #µÃµ½NPCµÄTypeID  
 | 
    npcTypeID = curNPC.GetNPCID()  
 | 
      
 | 
    #GameWorld.Log("ѯÎÊÊÇ·ñ¿É²É¼¯¸ÃNPC, NPCID %d"%(npcTypeID))  
 | 
      
 | 
    #ÔËÐÐon_coltime_by_idĿ¼ÏµÄ[NPCTypeID].xmlÎļþ  
 | 
    RunQuestEvent(curPlayer, "on_coltime_by_id", npcTypeID, Def_RunQuestType_Normal)  
 | 
      
 | 
    #ÅÜ»·ÈÎÎñËæ»ú²É¼¯Ê±£¬ÎÞNPCID ÔËÐÐon_coltime_by_idĿ¼ÏµÄ0.xmlÎļþ  
 | 
    RunQuestEvent(curPlayer, "on_coltime_by_id", 0, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷_MisCollectSuccess ²É¼¯½ø¶ÈÌõ½áÊøºó´¥·¢  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@param curNPC NPCʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÈÎÎñ´¥·¢Æ÷_MisCollectSuccess ²É¼¯½ø¶ÈÌõ½áÊøºó´¥·¢  
 | 
def EventRespons_MisCollectSuccess(curPlayer, curNPC):  
 | 
    #µÃµ½NPCµÄTypeID  
 | 
    npcTypeID = curNPC.GetNPCID()  
 | 
      
 | 
    #GameWorld.Log("²É¼¯¸ÃNPC³É¹¦, NPCID %d"%(npcTypeID))  
 | 
      
 | 
    #ÔËÐÐon_collect_by_idĿ¼ÏµÄ[NPCTypeID].xmlÎļþ  
 | 
    RunQuestEvent(curPlayer, "on_collect_by_id", npcTypeID, Def_RunQuestType_Normal)  
 | 
      
 | 
    #Ëæ»ú²É¼¯  
 | 
    RunDayEvent(curPlayer, "on_collect_by_id", npcTypeID, QuestCommon.Def_Collect_Npc_ID)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ÈÎÎñ´¥·¢Æ÷CatchPetOK, ×¥³è³É¹¦.  
 | 
# @param curPlayer Íæ¼ÒʵÀý  
 | 
# @param curNPC NPCʵÀý  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
# @remarks ×¥³è³É¹¦  
 | 
def EventRespons_CatchPetOK(curPlayer, curNPC):  
 | 
    #ÔËÐÐon_catch_pet_ok_by_idĿ¼ÏµÄ[NPCTypeID].xmlÎļþ  
 | 
    #RunQuestEvent(curPlayer, "on_catch_pet_ok_by_id", curNPC.GetNPCID(), Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_LearnSkill(curPlayer, skillTypeID):  
 | 
    # Ñ§Ï°¼¼ÄÜ  
 | 
    RunQuestEvent(curPlayer, "on_learnskill", skillTypeID, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
##ÈÎÎñ´¥·¢Æ÷ ÅÜ»·ÈÎÎñ´¥·¢ÏÂÒ»¸öÅÜ»·ÈÎÎñ´¥·¢Ïà¹ØÊ¼þ  
 | 
# @param curPlayer Íæ¼ÒʵÀý  
 | 
# @param missionID ÏÂÒ»¸öÅÜ»·ÈÎÎñID  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
# @remarks ÈÎÎñ´¥·¢Æ÷ ÅÜ»·ÈÎÎñ´¥·¢ÏÂÒ»¸öÅÜ»·ÈÎÎñ´¥·¢Ïà¹ØÊ¼þ  
 | 
def EventRespons_SetRunAround(curPlayer, missionID):  
 | 
    RunQuestEvent(curPlayer, "on_run_around", missionID, Def_RunQuestType_Normal)  
 | 
  
 | 
##FBʼþ´¥·¢  
 | 
# @param curPlayer Íæ¼ÒʵÀý  
 | 
# @param eventName Ê¼þÃû  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
def EventRespons_FBEvent(curPlayer, eventName):  
 | 
    RunQuestEvent(curPlayer, "fb_event", eventName, Def_RunQuestType_Normal)  
 | 
  
 | 
  
 | 
##Ìí¼ÓºÃÓѳɹ¦´¥·¢  
 | 
# @param curPlayer Íæ¼ÒʵÀý  
 | 
# @param eventName Ê¼þÃû  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
def EventRespons_AddFriendSucceed(curPlayer, eventName):  
 | 
    RunQuestEvent(curPlayer, "add_friend_succeed", eventName, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
  
 | 
##buffÏûʧ´¥·¢  
 | 
# @param curPlayer Íæ¼ÒʵÀý  
 | 
# @param eventName Ê¼þÃû  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
def EventRespons_BuffDisappear(curPlayer, eventName):  
 | 
    RunQuestEvent(curPlayer, "buff_disappear", eventName, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
  
 | 
##Ãëcd´¥·¢  
 | 
# @param curPlayer Íæ¼ÒʵÀý  
 | 
# @param eventName Ê¼þÃû  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
def EventRespons_ClearCDTime(curPlayer, eventName):  
 | 
    RunQuestEvent(curPlayer, "clear_cd_time", eventName, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
  
 | 
##³åѨ  
 | 
# @param curPlayer Íæ¼ÒʵÀý  
 | 
# @param eventName Ê¼þÃû  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
def EventRespons_OpenXueWei(curPlayer, eventName):  
 | 
    RunQuestEvent(curPlayer, "open_xuewei", eventName, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
  
 | 
##Íæ¼Òʼþ  
 | 
# @param curPlayer Íæ¼ÒʵÀý  
 | 
# @param eventName Ê¼þÃû  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
def EventRespons_PlayerEvent(curPlayer, eventName):  
 | 
    RunQuestEvent(curPlayer, "player_event", eventName, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
  
 | 
##ʹÓÃÔ¶³Ì¹¦ÄÜʼþ  
 | 
# @param curPlayer Íæ¼ÒʵÀý  
 | 
# @param eventName Ê¼þÃû  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
def EventRespons_DirectFuncEvent(curPlayer, eventName):  
 | 
    RunQuestEvent(curPlayer, "direct_event", eventName, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
  
 | 
##¹ÙÖ°(ÍþÍû)Ïà¹Ø´¥·¢  
 | 
# @param curPlayer Íæ¼ÒʵÀý  
 | 
# @param eventName Ê¼þÃû  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
def EventRespons_PlayerPrestige(curPlayer, eventName):  
 | 
    RunQuestEvent(curPlayer, "player_prestige", eventName, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
## É̵깺ÂòÎïÆ·´¥·¢  
 | 
#  @param curPlayer Íæ¼ÒʵÀý  
 | 
#  @param itemID ÎïÆ·ID  
 | 
#  @param itemCnt ÎïÆ·ÊýÁ¿  
 | 
#  @return None  
 | 
def EventRespons_BuyItem(curPlayer, itemID, itemCnt):  
 | 
    curPlayer.SetDict(ChConfig.Def_PlayerKey_BuyItemCnt, itemCnt)  
 | 
    RunQuestEvent(curPlayer, "buy_item", "buy_item_%s"%itemID, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
## NPCËÀÍöÃþ¹ÖÂß¼  
 | 
#  @param curPlayer Íæ¼ÒʵÀý  
 | 
#  @param curNPC npcʵÀý  
 | 
#  @return None  
 | 
def EventRespons_OnKillByFeel(curPlayer, curNPC):  
 | 
      
 | 
    #µÃµ½NPCµÄTypeID  
 | 
    npcTypeID = curNPC.GetNPCID()  
 | 
      
 | 
    #ÔËÐÐon_kill_by_feelĿ¼ÏµÄ[NPCTypeID].xmlÎļþ  
 | 
    QuestRunner.SetKillNPC(curNPC)  
 | 
      
 | 
    RunQuestEvent(curPlayer, "on_kill_by_feel", npcTypeID, Def_RunQuestType_Normal)  
 | 
      
 | 
    #´¥·¢Ã¿ÈÕÈÎÎñɱ¹Ö  
 | 
    RunDayEvent(curPlayer, "on_kill_by_feel", npcTypeID, QuestCommon.Def_Kill_Npc_ID)  
 | 
    EventRespons_OnKillByLv(curPlayer, curNPC)  
 | 
    return  
 | 
  
 | 
## Íê³ÉÈÎÎñ  
 | 
#  @param curPlayer Íæ¼ÒʵÀý  
 | 
#  @param taskID ÈÎÎñid  
 | 
#  @param rewardPer ½±Àø±¶Öµ°Ù·Ö±È, Èç150Ϊ1.5±¶½±Àø  
 | 
#  @return None  
 | 
def EventRespons_OnFinishTask(curPlayer, taskID, rewardPer=100):  
 | 
    curMission = curPlayer.FindMission(taskID)  
 | 
    if curMission == None:  
 | 
        GameWorld.ErrLog("Íæ¼ÒÎÞ¸ÃÈÎÎñ: %s" % taskID, curPlayer.GetPlayerID())  
 | 
        return  
 | 
      
 | 
    missionState = curMission.GetState()  
 | 
      
 | 
    if missionState != ChConfig.Def_Mission_State_CanComplete:  
 | 
        GameWorld.DebugLog("ÈÎÎñ״̬(%s)²»¿ÉÌá½»£¬²»ÄÜÍê³ÉÈÎÎñ£¡taskID=%s" % (missionState, taskID))  
 | 
        return  
 | 
      
 | 
    curQuestData = QuestManager.FindQuest(taskID)  
 | 
      
 | 
    rewardPer = 100 if rewardPer <= 0 else rewardPer  
 | 
    moneyType, moneyCnt = 0, 0  
 | 
    # »·ÈÎÎñÖ§³Ö¶à±¶½±ÀøÁìÈ¡  
 | 
    if curQuestData != None and curQuestData.Type in QuestCommon.Def_RunTask_Type_List:  
 | 
        if rewardPer != 100:  
 | 
            rewardCostDict = ReadChConfig.GetEvalChConfig("RunAround_MulRewardCost")  
 | 
            if rewardPer not in rewardCostDict:  
 | 
                GameWorld.ErrLog("²»Ö§³Ö¸Ã¶à±¶½±Àø±ÈÀý: taskID=%s,rewardPer=%s" % (taskID, rewardPer), curPlayer.GetPlayerID())  
 | 
                return  
 | 
              
 | 
            moneyType, moneyCnt = rewardCostDict[rewardPer]  
 | 
            if not PlayerControl.HaveMoney(curPlayer, moneyType, moneyCnt):  
 | 
                return  
 | 
              
 | 
        curMission.SetProperty(QuestRunner.Def_Task_Reward_Per, rewardPer, False)  
 | 
      
 | 
    isOK = RunQuestEvent(curPlayer, "on_finish", taskID, Def_RunQuestType_Normal)  
 | 
      
 | 
    if not isOK:  
 | 
        GameWorld.DebugLog("OnFinishTask Ê§°Ü£¡")  
 | 
        return  
 | 
      
 | 
    if moneyCnt > 0:  
 | 
        PlayerControl.PayMoney(curPlayer, moneyType, moneyCnt, ChConfig.Def_Cost_MissionDel,   
 | 
                               {"taskID":taskID, "rewardPer":rewardPer, ChConfig.Def_Cost_Reason_SonKey:taskID})  
 | 
    return  
 | 
  
 | 
## ¿ìËÙÍê³ÉÈÎÎñ  
 | 
#  @param curPlayer Íæ¼ÒʵÀý  
 | 
#  @param missionID ÈÎÎñid  
 | 
#  @return None  
 | 
def EventRespons_OnQuickFinishTask(curPlayer, missionID):  
 | 
    RunQuestEvent(curPlayer, "quick_finish_task", missionID, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
## Ò»¼üÍê³ÉËùÓл·ÈÎÎñ  
 | 
#  @param curPlayer Íæ¼ÒʵÀý  
 | 
#  @param missionID ÈÎÎñid  
 | 
#  @return None  
 | 
def EventRespons_OnQuickFinishAllAround(curPlayer, missionID):  
 | 
    RunQuestEvent(curPlayer, "on_quick_finish_all_around", missionID, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
## ÉèÖÃÈÎÎñÐǼ¶  
 | 
#  @param curPlayer Íæ¼ÒʵÀý  
 | 
#  @param missionID ÈÎÎñid  
 | 
#  @return None  
 | 
def EventRespons_OnSetMissionStar(curPlayer, missionID):  
 | 
    RunQuestEvent(curPlayer, "on_set_mission_star", missionID, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
## ÊÕ»ñ¹ûʵ  
 | 
#  @param curPlayer Íæ¼ÒʵÀý  
 | 
#  @param eventName   
 | 
#  @return None  
 | 
def EventRespons_OnPlantHarvest(curPlayer, eventName):  
 | 
    RunQuestEvent(curPlayer, "on_plant_harvest", eventName, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
## ¸±±¾²É¼¯NPC  
 | 
#  @param curPlayer Íæ¼ÒʵÀý  
 | 
#  @param eventName   
 | 
#  @return None  
 | 
def EventRespons_OnFBCollect(curPlayer, eventName):  
 | 
    RunQuestEvent(curPlayer, "on_fb_collect", eventName, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
## ¹ºÂòÈÕ³£ÈÎÎñ´ÎÊýÉÏÏÞ  
 | 
#  @param curPlayer Íæ¼ÒʵÀý  
 | 
#  @param eventName   
 | 
#  @return None  
 | 
def EventRespons_OnBuyDayMissionSum(curPlayer, buyNum):  
 | 
    RunQuestEvent(curPlayer, "on_buy_mission_sum", buyNum, Def_RunQuestType_RunAll)  
 | 
    return  
 | 
  
 | 
  
 | 
## ´©×°±¸´¥·¢ÅжÏËù´©³È×°ÊýÁ¿  
 | 
#  @param curPlayer Íæ¼ÒʵÀý  
 | 
#  @param eventName   
 | 
#  @return None  
 | 
def EventRespons_OrangeQualityCnt(curPlayer, equipcnt):  
 | 
    RunQuestEvent(curPlayer, "quality_orange_cnt", equipcnt, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
## ²¿Î»Ç¿»¯ÐǼ¶  
 | 
#  @param curPlayer Íæ¼ÒʵÀý  
 | 
#  @param eventName   
 | 
#  @return None  
 | 
def EventRespons_OnEquipPartStarUp(curPlayer, upstar):  
 | 
    RunQuestEvent(curPlayer, "on_equippartstarup", "on_equippartstarup", Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
## ¾ôλÉý½×  
 | 
#  @param curPlayer Íæ¼ÒʵÀý  
 | 
#  @param eventName  
 | 
#  @return None  
 | 
def EventRespons_OnOfficialUp(curPlayer, officialLV, starIndex):  
 | 
    #ÐǼ¶*100+½×¼¶  
 | 
    RunQuestEvent(curPlayer, "on_officialup", starIndex*100+officialLV, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
## Í¨¹ØÊÔÁ¶Ö®ËþµÚX²ã  
 | 
#  @param curPlayer Íæ¼ÒʵÀý  
 | 
#  @param eventName   
 | 
#  @return None  
 | 
def EventRespons_TrialTowerCnt(curPlayer, cnt):  
 | 
    RunQuestEvent(curPlayer, "on_trialtowercnt", cnt, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
## Í¨¹ØÌìÐÇËþµÚX²ã  
 | 
#  @param curPlayer Íæ¼ÒʵÀý  
 | 
#  @param eventName   
 | 
#  @return None  
 | 
def EventRespons_SkyTowerCnt(curPlayer, cnt):  
 | 
    RunQuestEvent(curPlayer, "skytowerpass", cnt, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
##»¤ËÍX´ÎÃÀÅ®   
 | 
# @param curPlayer Íæ¼ÒʵÀý  
 | 
# @param eventName Ê¼þÃû  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
def EventRespons_TruckCnt(curPlayer):  
 | 
    RunQuestEvent(curPlayer, "on_truckcnt", "on_truckcnt", Def_RunQuestType_Normal)  
 | 
      
 | 
##·Ö½âÈÎÒâX¼þ³È×°   
 | 
# @param curPlayer Íæ¼ÒʵÀý  
 | 
# @param eventName Ê¼þÃû  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
def EventRespons_EquipDecompose(curPlayer):  
 | 
    RunQuestEvent(curPlayer, "on_equipdecompose", "on_equipdecompose", Def_RunQuestType_Normal)  
 | 
    return  
 | 
      
 | 
def EventRespons_OnBuyNobleVIP(curPlayer, nobleType):  
 | 
    # ¹ºÂò¹ó×å  
 | 
    RunQuestEvent(curPlayer, "on_buy_noblevip", "on_buy_noblevip", Def_RunQuestType_Normal)  
 | 
    RunQuestEvent(curPlayer, "on_buy_noblevip", nobleType, Def_RunQuestType_Normal)  
 | 
    return  
 | 
      
 | 
def EventRespons_OnGoldInvest(curPlayer, investType):  
 | 
    # °ó×êͶ×Ê  
 | 
    RunQuestEvent(curPlayer, "on_goldinvest", "on_goldinvest", Def_RunQuestType_Normal)  
 | 
    RunQuestEvent(curPlayer, "on_goldinvest", investType, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_OnActivatePet(curPlayer, petID):  
 | 
    # ¼¤»î³èÎï  
 | 
    RunQuestEvent(curPlayer, "on_activatepet", "on_activatepet", Def_RunQuestType_Normal)  
 | 
    RunQuestEvent(curPlayer, "on_activatepet", petID, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_MagicWeaponLV(curPlayer, mwID, lv):  
 | 
    # ·¨±¦½âËø½ø¶È  
 | 
    RunQuestEvent(curPlayer, "magicweaponlv", '%s_%s'%(mwID, lv), Def_RunQuestType_RunAll)  
 | 
    return  
 | 
  
 | 
def EventRespons_MagicWeaponFBPassLV(curPlayer, mwID, lv):  
 | 
    # Ä§×å·¨±¦¹Ø¿¨½ø¶È  
 | 
    RunQuestEvent(curPlayer, "mwfbpasslv", '%s_%s'%(mwID, lv), Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_SuccessFinish(curPlayer, succID):  
 | 
    # ÁìÈ¡Íê³É¾Í  
 | 
    RunQuestEvent(curPlayer, "successfinish", succID, Def_RunQuestType_RunAll)  
 | 
    return  
 | 
  
 | 
def EventRespons_KillWorldBoss(curPlayer):  
 | 
    # »÷ɱÊÀ½çBOSS  
 | 
    RunQuestEvent(curPlayer, "killworldboss", 'killworldboss', Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_KillWorldBossByFeel(curPlayer):  
 | 
    #ÃþÊÀ½çBOSS  
 | 
    RunQuestEvent(curPlayer, "killworldbossbyfeel", 'killworldbossbyfeel', Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_SealDemon(curPlayer):  
 | 
    # »ñµÃ·âħ̳110¼¶ÒÔÉÏBOSSÉ˺¦ÅÅÃûµÚÒ»  
 | 
    RunQuestEvent(curPlayer, "sealdemon", "sealdemon", Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_HorseMultiple(curPlayer, multiple):  
 | 
    #×øÆïÎ¹ÑøX±¶±©»÷Ò»´Î  
 | 
    RunQuestEvent(curPlayer, "horsemultiple", multiple, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_HorseLV(curPlayer, horselv):  
 | 
    #ÈÎÒâ×øÆïµ½X¼¶  
 | 
    RunQuestEvent(curPlayer, "horselv", horselv, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_FBEncourage(curPlayer, mapid):  
 | 
    #¸±±¾¹ÄÎ輸´Î  
 | 
    RunQuestEvent(curPlayer, "fbencourage", mapid, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_AddFriend(curPlayer, cnt):  
 | 
    #ºÃÓÑÊýÁ¿  
 | 
    RunQuestEvent(curPlayer, "addfriend", cnt, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_DujieFBHelp(curPlayer):  
 | 
    #ÏÉÃË»¤·¨  
 | 
    RunQuestEvent(curPlayer, "dujiehelp", "dujiehelp", Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_DujieFBHelpPass(curPlayer):  
 | 
    #¶É½ÙÖúÕ½  
 | 
    RunQuestEvent(curPlayer, "dujiehelppass", "dujiehelppass", Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_PassiveSet(curPlayer):  
 | 
    #±»¶¯¼¼ÄÜÉèÖà  
 | 
    RunQuestEvent(curPlayer, "passiveset", "passiveset", Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_PlusGodWeapon(curPlayer, weaponType):  
 | 
    #Éñ±ø´¸Á¶  
 | 
    RunQuestEvent(curPlayer, "plusgodweapon", "plusgodweapon", Def_RunQuestType_Normal)  
 | 
    RunQuestEvent(curPlayer, "plusgodweapon", weaponType, Def_RunQuestType_Normal)  
 | 
    return  
 | 
def EventRespons_GodWeaponUp(curPlayer, weaponType, attrLV):  
 | 
    # Éñ±øÉý¼¶  
 | 
    RunQuestEvent(curPlayer, "godweaponup", "%s_%s"%(weaponType, attrLV), Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_RefineItem(curPlayer, alchemyLV, alchemyItemID):  
 | 
    #°ËØÔ¯Á¶µ¤  
 | 
    #ÕâÁ½¸ö½Ó¿Ú²ß»®ÔÝʱ²»Óã¬ÏÈ×¢ÊÍ£¬Ê¹ÓÃеÄÁ¬Ä³¸öµ¤Ò©½Ó¿Ú  
 | 
    #RunQuestEvent(curPlayer, "refineitem", alchemyLV, Def_RunQuestType_Normal)  
 | 
    #RunQuestEvent(curPlayer, "refineitem", "refineitem", Def_RunQuestType_Normal)  
 | 
    RunQuestEvent(curPlayer, "refineitem", alchemyItemID, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_RefineStoveUp(curPlayer, alchemyLV):  
 | 
    #°ËØÔ¯ÉýÖÁX¼¶  
 | 
    RunQuestEvent(curPlayer, "refinestoveup", alchemyLV, Def_RunQuestType_RunAll)  
 | 
    return  
 | 
  
 | 
def EventRespons_GetRealmPoint(curPlayer):  
 | 
    #»ñµÃÐÞÐÐµã  
 | 
    RunQuestEvent(curPlayer, "getrealmpoint", "getrealmpoint", Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_MWSkillUp(curPlayer):  
 | 
    #·¨±¦¼¼ÄÜÉý¼¶  
 | 
    RunQuestEvent(curPlayer, "mwskillup", "mwskillup", Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_ShopBuy(curPlayer, shopid):  
 | 
    #Ö¸¶¨É̵êÂò¶«Î÷  
 | 
    RunQuestEvent(curPlayer, "shopbuy", shopid, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_GetLastRunTaskAward(curPlayer, taskType):  
 | 
    #ÅÜ»·×îÖÕ½±ÀøÁìÈ¡  
 | 
    RunQuestEvent(curPlayer, "on_lastruntask_award", taskType, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_RunTaskAllCnt(curPlayer, tastType, allcnt):  
 | 
    #µ±ÌìÒÑÍê³ÉÅÜ»·Êý  
 | 
    RunQuestEvent(curPlayer, "runtaskallcnt", '%s_%s'%(tastType, allcnt), Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_RealmUp(curPlayer, realmlv):  
 | 
    #¾³½çÉý¼¶  
 | 
    RunQuestEvent(curPlayer, "realmup", realmlv, Def_RunQuestType_RunAll)  
 | 
    return  
 | 
  
 | 
  
 | 
def EventRespons_PassQueenRelecs(curPlayer, lineID, grade):  
 | 
    #X¼¶Í¨¹ØX²ãæ´»ÊÒż£  
 | 
    RunQuestEvent(curPlayer, "passqueenrelecs", '%s_%s'%(lineID, grade), Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_HorseUp(curPlayer):  
 | 
    #×øÆïÉý¼¶  
 | 
    RunQuestEvent(curPlayer, "horseup", "horseup", Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_SuitPlus(curPlayer, cnt):  
 | 
    #2½×Ç¿»¯·À¾ßÌ××°X¼þ  
 | 
    RunQuestEvent(curPlayer, "suitplus", cnt, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_TrialExchange(curPlayer, costItemID):  
 | 
    #×ÚÃÅÊÔÁ¶¶Ò»»×°±¸  
 | 
    RunQuestEvent(curPlayer, "trialexange", costItemID, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_EquipByPlace(curPlayer, itemClassLV, equipplace):  
 | 
    #´©´÷ij²¿Î»×°±¸(·ÇʱЧ)  
 | 
    RunQuestEvent(curPlayer, "equipbyplace", '%s_%s'%(itemClassLV, equipplace), Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_CompoundEquip(curPlayer, itemColor, itemQuality):  
 | 
    #×°±¸ºÏ³ÉijƷÖÊijÐǼ¶  
 | 
    RunQuestEvent(curPlayer, "compoundequip", '%s_%s'%(itemColor, itemQuality), Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_EquipWash(curPlayer, washType, washLV):  
 | 
    #×°±¸Ï´Á·ÖÁX¼¶  
 | 
    RunQuestEvent(curPlayer, "equipwash", '%s_%s'%(washType, washLV), Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_AddBourseItem(curPlayer):  
 | 
    #Éϼܼ¯ÊÐÎïÆ·  
 | 
    RunQuestEvent(curPlayer, "addbourseitem", "addbourseitem", Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_StoreDonate(curPlayer):  
 | 
    #¾èÏ×ÏÉÃË×°±¸  
 | 
    RunQuestEvent(curPlayer, "storedonate", "storedonate", Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_EquipPlus(curPlayer, classLV, partPlusLV):  
 | 
    #Ç¿»¯µÈ¼¶±ä»¯  
 | 
    RunQuestEvent(curPlayer, "equipplus", "equipplus", Def_RunQuestType_Normal)  
 | 
    RunQuestEvent(curPlayer, "equipplus", '%s_%s'%(classLV, partPlusLV), Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_EquipPlusEvolve(curPlayer, nextEvolveLV):  
 | 
    #Ç¿»¯½ø»¯  
 | 
    RunQuestEvent(curPlayer, "equipplusevolve", "equipplusevolve", Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_Talk(curPlayer, eventName):  
 | 
    #ƵµÀ·¢ÑÔ  
 | 
    RunQuestEvent(curPlayer, "talk", eventName, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_FairyDomain(curPlayer, eventType):  
 | 
    #Íê³ÉçÎç¿ÏÉÓòʼþ  
 | 
    RunQuestEvent(curPlayer, "fairydomain", 'fairydomain', Def_RunQuestType_Normal)  
 | 
    RunQuestEvent(curPlayer, "fairydomain", eventType, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_AroundMission(curPlayer, missionType):  
 | 
    #Íê³ÉÅÜ»·ÈÎÎñ  
 | 
    RunQuestEvent(curPlayer, "aroundfinish", missionType, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_Pray(curPlayer, prayType):  
 | 
    #Íê³ÉÆíÔ¸  
 | 
    RunQuestEvent(curPlayer, "pray", prayType, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_ThinkMagicWeapon(curPlayer):  
 | 
    #¸ÐÓ¦·¨±¦  
 | 
    RunQuestEvent(curPlayer, "thinkfabao", 'thinkfabao', Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_ElementSkill(curPlayer, mainSkillID, skillElementType, updSelectSkillLV):  
 | 
    #¼¤»îÎåÐÐר¾« Ö÷¼¼ÄÜID_ר¾«ÀàÐÍ_¼¤»îµÈ¼¶.xml  
 | 
    RunQuestEvent(curPlayer, "elementskill", '%s_%s_%s'%(mainSkillID, skillElementType, updSelectSkillLV), Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_EquipStarUp(curPlayer):  
 | 
    #×°±¸ÉýÐÇ  
 | 
    RunQuestEvent(curPlayer, "equipstarup", 'equipstarup', Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_InlayStone(curPlayer):  
 | 
    #±¦Ê¯ÏâǶ  
 | 
    RunQuestEvent(curPlayer, "inlaystone", 'inlaystone', Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_StoneChange(curPlayer):  
 | 
    # ±¦Ê¯±ä¸ü  
 | 
    RunQuestEvent(curPlayer, "stonechange", 'stonechange', Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_EquipItem(curPlayer):  
 | 
    #´©ÍÑ×°±¸  
 | 
    RunQuestEvent(curPlayer, "equipitem", 'equipitem', Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_SkillUp(curPlayer, FuncType, skillLV):  
 | 
    #Éý¼¶¼¼ÄÜ  
 | 
    RunQuestEvent(curPlayer, "skillup", FuncType, Def_RunQuestType_Normal)  
 | 
    RunQuestEvent(curPlayer, "skillup", '%s_%s' % (FuncType, skillLV), Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_LingGenQualityUP(curPlayer, attrID, qualityLV):  
 | 
    #Áé¸ùÉýÆ·  
 | 
    RunQuestEvent(curPlayer, "linggenqualityup", '%s_%s' % (attrID, qualityLV), Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_AddPoint(curPlayer):  
 | 
    #Áé¸ù¼Óµã  
 | 
    RunQuestEvent(curPlayer, "addpoint", '0', Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_ActivityAward(curPlayer, awardIndex):  
 | 
    #»îÔ¾Áì½±  
 | 
    RunQuestEvent(curPlayer, "activityaward", awardIndex, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_AddActivityValue(curPlayer):  
 | 
    # Ôö¼Ó»îÔ¾¶È  
 | 
    RunQuestEvent(curPlayer, "addactivity", "addactivity", Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_HorsePetBoss(curPlayer):  
 | 
    #²Î¼ÓÆï³èBOSS  
 | 
    RunQuestEvent(curPlayer, "horsepetboss", 'horsepetboss', Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_LingGenReset(curPlayer):  
 | 
    #Áé¸ùÖØÖà  
 | 
    RunQuestEvent(curPlayer, "linggenreset", 'linggenreset', Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_UseMissionItem(curPlayer, missionID):  
 | 
    # Ê¹ÓÃÎïÆ·´¥·¢ÈÎÎñ  
 | 
    RunQuestEvent(curPlayer, "usemissionitem", missionID, Def_RunQuestType_RunAll)  
 | 
    return  
 | 
  
 | 
def EventRespons_XBXZ(curPlayer, MWID):  
 | 
    # Ïɱ¦Ñ°Ö÷Áì½±  
 | 
    RunQuestEvent(curPlayer, "xbxz", MWID, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_AddAuctionEquip(curPlayer, color):  
 | 
    # ÉϼÜ×°±¸ÅÄÆ·  
 | 
    RunQuestEvent(curPlayer, "addauctionequip", color, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_BuyAuctionEquip(curPlayer, color):  
 | 
    # ¹ºÂò×°±¸ÅÄÆ·  
 | 
    RunQuestEvent(curPlayer, "buyauctionequip", color, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_OnMoneyChange(curPlayer, moneyType):  
 | 
    # »õ±Ò±ä¸üʱ  
 | 
      
 | 
    # ÔÝ¿ª·ÅÁéʯ  
 | 
    if moneyType not in [IPY_GameWorld.TYPE_Price_Gold_Paper]:  
 | 
        return  
 | 
    RunQuestEvent(curPlayer, "onmoneychange", moneyType, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
def EventRespons_ActivityPlace(curPlayer, event, runall=False):  
 | 
    ''' »îÔ¾·ÅÖÃʼþ  
 | 
    @param event: ¿ÉÆô¶¯ canstart¡¢Æô¶¯ start¡¢¿ÉÁì½± cangetreward¡¢Áì½± getreward  
 | 
    '''  
 | 
    RunQuestEvent(curPlayer, "activityplace", event, Def_RunQuestType_RunAll if runall else Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
  
 | 
#================================================================================  
 | 
#===============================================================================  
 | 
# //08 07 Íæ¼ÒÇл»µØÍ¼#tagCChangeMap  
 | 
# tagCChangeMap       *   GettagCChangeMap();  
 | 
#   
 | 
# class   IPY_CChangeMap  
 | 
# {  
 | 
# public:  
 | 
#    //´«Ë͵ãID  
 | 
#    int      GetTransportID();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//08 07 Íæ¼ÒÇл»µØÍ¼#tagCChangeMap  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//08 07 Íæ¼ÒÇл»µØÍ¼#tagCChangeMap  
 | 
def ChangeMap(index, tick):  
 | 
    GameWorld.GetPsycoFunc(__Func_ChangeMap)(index, tick)  
 | 
    return  
 | 
  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//08 07 Íæ¼ÒÇл»µØÍ¼#tagCChangeMap  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//08 07 Íæ¼ÒÇл»µØÍ¼#tagCChangeMap  
 | 
def __Func_ChangeMap(index, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    changeMapPack = IPY_GameWorld.IPY_CChangeMap()  
 | 
      
 | 
    if PlayerChangeMap(curPlayer, changeMapPack.GetTransportID(), tick):  
 | 
        return  
 | 
      
 | 
    #´«ËÍʧ°Ü, ÉèÖÃÍæ¼Ò¿ÉÒÔÒÆ¶¯  
 | 
    curPlayer.SetCanMove(True)  
 | 
    return  
 | 
#---------------------------------------------------------------------  
 | 
##Íæ¼Òͨ¹ý´«Ë͵ã, ´«Ë͵ØÍ¼  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@param transportID ´«Ë͵ãID  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ²¼¶ûÖµ  
 | 
#@remarks Íæ¼Òͨ¹ý´«Ë͵ã, ´«Ë͵ØÍ¼  
 | 
def PlayerChangeMap(curPlayer, transportID, tick):  
 | 
    transport = GameWorld.GetGameData().FindTransportByID(transportID)  
 | 
    if transport == None:  
 | 
        #GameWorld.Log("ûÓдËÇл»µã = %s"%(transportID) , curPlayer.GetPlayerID())  
 | 
        return False  
 | 
  
 | 
    #Çл»µØÍ¼×ø±ê¾àÀë  
 | 
    dist = GameWorld.GetDist(curPlayer.GetPosX(), curPlayer.GetPosY(), transport.GetPosX(), transport.GetPosY())  
 | 
    #²»ÔÚÇл»µã·¶Î§ÄÚ  
 | 
    if dist > transport.GetRange() + 16:  
 | 
#    if curPlayer.GetPosX() < transport.GetPosX()-dist or curPlayer.GetPosX() > transport.GetPosX()+dist or curPlayer.GetPosY() < transport.GetPosY()-dist or curPlayer.GetPosY() > transport.GetPosY()+dist:  
 | 
        #GameWorld.Log("Íæ¼Ò²»ÔÚÇл»µãÄÚ" , curPlayer.GetPlayerID())  
 | 
        curPlayer.ResetPos(curPlayer.GetPosX(), curPlayer.GetPosY())  
 | 
        GameWorld.GodLog(curPlayer, '´«Ë͵ã¾àÀë¹ýÔ¶ = %s, Range = %s'%(dist, transport.GetRange()))  
 | 
        return False  
 | 
  
 | 
    #ÔÚÇл»µã·¶Î§ÄÚ£¬Çл»µØÍ¼  
 | 
    mapID = transport.GetTargetMapID()  
 | 
    targetPosX = transport.GetTargetPosX()  
 | 
    targetPosY = transport.GetTargetPosY()  
 | 
      
 | 
    if not PlayerControl.CanEnterMap(curPlayer, mapID):  
 | 
        #Íæ¼Ò²»¿É½øÈë¸Ã³¡¾°  
 | 
        return False  
 | 
  
 | 
#    #Ìí¼ÓÓÐÏÞÎÞµÐBUFF  
 | 
#    SkillCommon.AddBuffBySkillType(curPlayer, ChConfig.Def_SkillID_LimitSuperBuff, tick)  
 | 
    #2. Íæ¼ÒÇл»µØÍ¼£¨µØÍ¼ID£¬X£¬Y£©  
 | 
    curTruck = curPlayer.GetTruck()  
 | 
    if curTruck:  
 | 
        isTakeTruck = curTruck.GetMode() != IPY_GameWorld.trmStop  
 | 
    else:  
 | 
        isTakeTruck = False  
 | 
          
 | 
    PlayerControl.PlayerResetWorldPos(curPlayer, mapID, targetPosX, targetPosY, isTakeTruck, canLock = False)  
 | 
    return True  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //08 0A ½áÊøÊ¼þ#tagCCancelEvent  
 | 
# tagCCancelEvent       *   GettagCCancelEvent();  
 | 
#   
 | 
# class   IPY_CCancelEvent  
 | 
# {  
 | 
# public:  
 | 
#   
 | 
#    int      GetType();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//08 0A ½áÊøÊ¼þ#tagCCancelEvent  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//08 0A ½áÊøÊ¼þ#tagCCancelEvent  
 | 
def ExitEvent(index, tick):  
 | 
    GameWorld.GetPsycoFunc(__Func_ExitEvent)(index, tick)  
 | 
    return  
 | 
  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//08 0A ½áÊøÊ¼þ#tagCCancelEvent  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//08 0A ½áÊøÊ¼þ#tagCCancelEvent  
 | 
def __Func_ExitEvent(index, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
      
 | 
    DoExitEvent(curPlayer)  
 | 
    #¸±±¾À뿪ʼþ  
 | 
    FBLogic.OnExitEvent(curPlayer, tick)  
 | 
    return  
 | 
#---------------------------------------------------------------------  
 | 
#°Ñµ±Ç°ÈÎÎñ֪ͨ¸ø¿Í»§¶Ë  
 | 
#/**ÈÎÎñ״̬¶¨Òå*/  
 | 
#enum        TMissionState  
 | 
#{  
 | 
#    msNoMission = 0,    ///<δ½Ó  
 | 
#    msProcessing,       ///<½øÐÐÖÐ  
 | 
#    msCanComplete,      ///<¿ÉÌá½»  
 | 
#    msComplete,         ///<ÒÑÍê³É  
 | 
#    msFail,             ///<ʧ°Ü  
 | 
#    msNoExist,          ///<æô³µ²»´æÔÚ  
 | 
#};  
 | 
#ÌØÊâÈÎÎñ״̬¶¨Òå:   
 | 
#0 : Î´½Ó  
 | 
#-1: ÒÑÍê³É  
 | 
#-2: æô³µ¶ªÊ§  
 | 
#-3: æô³µ±»´òÀÃ  
 | 
#-4: ÈÎÎñδ´ïµ½¿É½Ó״̬  
 | 
#-5: ÈÎÎñ¿ÉÌá½»  
 | 
          
 | 
##ˢе¥¶ÀµÄÈÎÎñ  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@param curMission ÈÎÎñʵÀý  
 | 
#@param isFirstLogin ÊÇ·ñµÚÒ»´ÎµÇ½  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks Ë¢Ðµ¥¶ÀµÄÈÎÎñ  
 | 
def NotifyOneMission(curPlayer, curMission, isFirstLogin = False, isNotifyAll = True):  
 | 
    #state = curMission.GetState()  
 | 
      
 | 
    #֪ͨÈÎÎñ×Öµä  
 | 
    if isNotifyAll:  
 | 
        curMission.Notify_AllProperty()  
 | 
      
 | 
    #з½Ê½: Ë¢ÐÂÕâ¸ö  
 | 
    QuestRunner.RefreshMission(curPlayer, curMission)  
 | 
          
 | 
#    GameWorld.Log("state = %d"%state)  
 | 
#    missionState = curMission.GetMissionState()  
 | 
#    lastMissionState = missionState  
 | 
#    taskID = curMission.GetMissionID()  
 | 
#      
 | 
#    if QuestManager.FindQuest(taskID) == None:  
 | 
#        GameWorld.Log("ÈÎÎñID = %d Ã»ÓÐÈÎÎñÃèÊö!"%taskID)  
 | 
#        return  
 | 
#  
 | 
#    questData = QuestManager.FindQuest(taskID)  
 | 
#    taskName = questData.Name  
 | 
#      
 | 
#    if taskName == "":  
 | 
#        #GameWorld.Log("ÈÎÎñÃû³Æ = ¿Õ")  
 | 
#        return  
 | 
#      
 | 
#    parentID = 0  
 | 
#    if state == -1:  
 | 
#        missionState = IPY_GameWorld.msComplete  
 | 
#    if state == -4:  
 | 
#        missionState = IPY_GameWorld.msNoExist  
 | 
#          
 | 
#    if missionState == IPY_GameWorld.msNoMission and state != 0:  
 | 
#        missionState = IPY_GameWorld.msProcessing  
 | 
#          
 | 
#    curMission.SetMissionState(missionState)  
 | 
#      
 | 
#    if questData.Type == 8 and state == 0:  
 | 
#        #ÈÎÎñÀàÐÍ:8 ÎªÓÂÕßÈÎÎñ(¾íÖáÈÎÎñ), ²»Í¨Öª¸ø¿Í»§¶Ë  
 | 
#        return  
 | 
#      
 | 
#      
 | 
#      
 | 
#    if state == 0:  
 | 
#        #״̬µÈÓÚ0, Ö»ÏÔʾµÆ  
 | 
##        GameWorld.Log("״̬µÈÓÚ0, Ö»ÏÔʾµÆ")  
 | 
#        QuestRunner.ShowMissionLight(curPlayer, curMission)  
 | 
#          
 | 
#        #ÔÚÈÎÎñ²éѯÖÐÌí¼ÓÕâ¸öÈÎÎñ  
 | 
#        QuestRunner.NotifyNewQuestInfo(curPlayer, curMission)  
 | 
#        return  
 | 
#      
 | 
#    if not isFirstLogin and lastMissionState == missionState:  
 | 
#        #GameWorld.Log("lastMissionState = %d  curMissionState = %s"%(lastMissionState, missionState))  
 | 
#        GameWorld.Log("Íæ¼Òµ±Ç°ÈÎÎñ¸üÐÂ, ÃèÊö²»±ä")  
 | 
#        return  
 | 
#    GameWorld.Log("Íæ¼Òµ±Ç°ÈÎÎñ: %s, state = %d"%(taskName, state))  
 | 
#      
 | 
#      
 | 
#    #if questData.Invisible == 0 or missionState !=:  
 | 
#    #    #Èç¹ûÈÎÎñΪÒþ²ØÈÎÎñ, Ôò²»ÏÔʾ¸ø¿Í»§¶Ë¿´µ½  
 | 
#    taskType = QuestManager.FindQuest(taskID).Type  
 | 
#    curPlayer.NotifyTaskInfo(taskType, questData.NameCode, taskID, parentID, missionState)  
 | 
#      
 | 
#          
 | 
#    if state == -1 or state == -4:  
 | 
#        #ÈÎÎñIDΪ-1»òÕß-4, ±íʾÈÎÎñÒѾÍê³É, ²»ÐèÒª½øÒ»²½ÏÔʾÈÎÎñÏêϸÇé¿ö  
 | 
#        curPlayer.Sync_ClearMapMissionLight(taskID)  
 | 
#        return  
 | 
#          
 | 
#  
 | 
#      
 | 
#    #·¢ËÍËùÓÐÈÎÎñ×·×ÙÐÅÏ¢  
 | 
#    QuestRunner.ShowMissionInfo(curPlayer, curMission, -1)  
 | 
#  
 | 
#    #·¢ËÍËùÓеƵÄÐÅÏ¢  
 | 
#    QuestRunner.ShowMissionLight(curPlayer, curMission)  
 | 
  
 | 
#---------------------------------------------------------------------      
 | 
##°ÑÍæ¼Òµ±Ç°µÄËùÓÐÈÎÎñ·¢Ë͸ø¿Í»§¶Ë, Èç¹ûÍæ¼ÒÊǵÚÒ»´ÎµÇ¼, °ÑËùÓÐÈÎÎñ·¢¸ø¿Í»§¶Ë     
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@param isFirstLogin ÊÇ·ñµÚÒ»´ÎµÇ½  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks °ÑÍæ¼Òµ±Ç°µÄËùÓÐÈÎÎñ·¢Ë͸ø¿Í»§¶Ë, Èç¹ûÍæ¼ÒÊǵÚÒ»´ÎµÇ¼, °ÑËùÓÐÈÎÎñ·¢¸ø¿Í»§¶Ë     
 | 
def NotifyAllQuestDetail(curPlayer, isFirstLogin = False):  
 | 
    notifyMissionList = []  
 | 
    for i in range(0, curPlayer.GetMissionCount()):  
 | 
        curMission = curPlayer.GetMissionByIndex(i)  
 | 
        notifyMissionList.append(curMission)  
 | 
      
 | 
    for curMission in notifyMissionList:  
 | 
        #ÔÚ֪ͨÈÎÎñµÄʱºò, »áɾ³ýÈÎÎñ, ËùÒÔÒªÖØ½¨Ò»´ÎÁÐ±í  
 | 
        NotifyOneMission(curPlayer, curMission, isFirstLogin)  
 | 
          
 | 
    return  
 | 
  
 | 
#ÈÎÎñÃèÊö  
 | 
#def GetTaskDetail(index, tick):  
 | 
#    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
#    sendPack = IPY_GameWorld.IPY_CGetTaskDetail()  
 | 
#    sendTaskID = sendPack.GetTaskID()  
 | 
#    curTask = curPlayer.FindMission(sendTaskID)  
 | 
#    if curTask == None:  
 | 
#        GameWorld.Log("ûÓÐÕâ¸öÈÎÎñ%d"%sendTaskID)  
 | 
#        return   
 | 
#  
 | 
#    descriptionIndex = 0  
 | 
#    state = curTask.GetState()  
 | 
#    questDescriptionList = QuestManager.FindQuest(sendTaskID).QuestDescriptionList  
 | 
#      
 | 
#    rewardNode = None  
 | 
#    if state == -1 or state ==0:  
 | 
#        #ÈÎÎñÒѾÍê³É/ûÓнӣ¬ Ã»Óн±Àø½Úµã  
 | 
#        descriptionIndex = len(questDescriptionList) - 1  
 | 
#        questDescs = QuestManager.GetQuestDescriptions()  
 | 
#        if questDescs.has_key(sendTaskID):  
 | 
#            detail = questDescs[sendTaskID]  
 | 
#    else:  
 | 
#        descriptionIndex = curTask.GetDescriptionIndex()  
 | 
#        #µÃµ½ÈÎÎñ½±Àø, Æ´½Ó  
 | 
#        rewardNode = QuestRunner.GetRewardNode(curPlayer, curTask)  
 | 
#        #ÈÎÎñÃèÊöÌæ»»  
 | 
#        detail = questDescriptionList[descriptionIndex].Msg   
 | 
#        if detail == "":  
 | 
#            return  
 | 
#          
 | 
#          
 | 
#        if rewardNode != None:  
 | 
#            #ÈÎÎñÃèÊöÓëÈÎÎñ½±ÀøÌæ»»  
 | 
#            #detail = detail + QuestRunner.ReplaceNPCTalkText(curPlayer, curTask, rewardNode.FindChildNode("msg").GetXML())  
 | 
#            detail = "%s %s"%(detail, rewardNode.FindChildNode("msg").GetAttribute("code"))  
 | 
#    curPlayer.NotifyTaskDetail(sendPack.GetType(), curTask, detail)  
 | 
#    return  
 | 
  
 | 
#############################################################  
 | 
##»Ø¾ø×°±¸¼Ó¹¤·â°ü  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@param funcAnswer ÏìÓ¦µÄʼþ  
 | 
#@return ÎÞ  
 | 
#@remarks »Ø¾ø×°±¸¼Ó¹¤·â°ü  
 | 
def SyncMakeItemRefuse(curPlayer, funcAnswer):  
 | 
    answerDict = {  
 | 
                  'EquipAddStar' : ShareDefine.Def_mitLVUpStar, #ÉýÐÇ  
 | 
                  }  
 | 
    answerType = answerDict.get(funcAnswer)  
 | 
      
 | 
    if answerType == None:  
 | 
        return  
 | 
       
 | 
    curPlayer.Sync_MakeItemAnswer(answerType, ChConfig.Def_ComposeState_None)  
 | 
      
 | 
#---------------------------------------------------------------------  
 | 
##Ô¶³ÌÖ´ÐÐNPC¹¦ÄÜ  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@param responseType Ê¼þÏìÓ¦ÀàÐÍ  
 | 
#@param funcAnswer ÏìÓ¦µÄʼþ  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÊÇ·ñÖ´Ðгɹ¦  
 | 
#@remarks Ô¶³ÌÖ´ÐÐNPC¹¦ÄÜ  
 | 
def FuncDirectCall(curPlayer, responseType, funcAnswer, tick, clientData=None):  
 | 
    #Ô¶³Ìʼþ,״̬ͳһÅÐ¶Ï  
 | 
    if not FunctionNPCCommon.CheckPlayerCanStateEvent(curPlayer):  
 | 
        #Í˳ö»Ø°ü  
 | 
        SyncMakeItemRefuse(curPlayer, funcAnswer)  
 | 
        return  
 | 
      
 | 
    callFunc = GameWorld.GetExecFunc(EventSrc, "%s.%s"%(responseType, funcAnswer))  
 | 
      
 | 
    if callFunc == None:  
 | 
        #º¯Êýµ÷Óò»¿ÉʹÓà  
 | 
        GameWorld.Log("¹¦ÄÜ»ØÓ¦Ê¼þÏìÓ¦ %s %s²»¿ÉʹÓÃ"%(responseType, funcAnswer) , curPlayer.GetPlayerID())  
 | 
        #Í˳ö»Ø°ü  
 | 
        SyncMakeItemRefuse(curPlayer, funcAnswer)  
 | 
        return  
 | 
      
 | 
    if clientData:  
 | 
        return GameWorld.GetPsycoFunc(callFunc)(curPlayer, clientData, tick)  
 | 
      
 | 
    return GameWorld.GetPsycoFunc(callFunc)(curPlayer, tick)  
 | 
#---------------------------------------------------------------------  
 | 
## NPC¶Ô»°Ö´ÐÐNPC¹¦ÄÜ  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@param funcAnswer ÏìÓ¦µÄʼþ  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÊÇ·ñÖ´Ðгɹ¦  
 | 
#@remarks NPC¶Ô»°Ö´ÐÐNPC¹¦ÄÜ  
 | 
def FuncCall(curPlayer, funcAnswer, tick):  
 | 
    tagObj = curPlayer.GetActionObj()  
 | 
      
 | 
    if tagObj == None:  
 | 
        #ûÓÐÄ¿±ê  
 | 
        GameWorld.Log("FuncCall -> Ã»ÓÐÄ¿±ê" , curPlayer.GetPlayerID())  
 | 
        return  
 | 
              
 | 
    if tagObj.GetGameObjType() != IPY_GameWorld.gotNPC:  
 | 
        #̸»°¶ÔÏó²»¶Ô  
 | 
        GameWorld.Log("FuncCall -> Ì¸»°¶ÔÏó²»¶Ô" , curPlayer.GetPlayerID())  
 | 
        return  
 | 
      
 | 
    curNPC = GameWorld.GetNPCManager().GetNPCByIndex(tagObj.GetIndex())  
 | 
      
 | 
    if curNPC == None:  
 | 
        #ûÓÐÕâ¸öNPC  
 | 
        GameWorld.Log("FuncCall ->ûÓÐÕâ¸öNPC" , curPlayer.GetPlayerID())  
 | 
        return  
 | 
      
 | 
    responseType = "Func_%d"%curNPC.GetFunctionType()  
 | 
      
 | 
    if not responseType:  
 | 
        return  
 | 
      
 | 
    callFunc = GameWorld.GetExecFunc(EventSrc, "%s.%s"%(responseType, funcAnswer))  
 | 
      
 | 
    if callFunc == None:  
 | 
        #º¯Êýµ÷Óò»¿ÉʹÓà  
 | 
        GameWorld.Log("FuncCall ->¹¦ÄÜ»ØÓ¦Ê¼þÏìÓ¦ %s %s²»¿ÉʹÓÃ"%(responseType, funcAnswer) , curPlayer.GetPlayerID())  
 | 
        return  
 | 
      
 | 
    return GameWorld.GetPsycoFunc(callFunc)(curPlayer, tick)  
 | 
#---------------------------------------------------------------------  
 | 
#    //08 11 ÌØÊâÈÎÎñ½á¹û#tagEndSpecialEvent  
 | 
#  
 | 
#    struct  tagEndSpecialEvent  
 | 
#    {  
 | 
#        tagHead     Head;  
 | 
#        BYTE        Type;       //1. ¿ªÊ¼´òÔì 2. ¿ªÊ¼¼ø¶¨ 3. ...  
 | 
#    };  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //08 0B ´òÔìÎïÆ·#tagCMakeItem  
 | 
# tagCMakeItem       *   GettagCMakeItem();  
 | 
#   
 | 
# class   IPY_CMakeItem  
 | 
# {  
 | 
# public:  
 | 
#    //´òÔìµÄÎïÆ·ID  
 | 
#    int      GetMakeItemID();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//08 0B ´òÔìÎïÆ·#tagCMakeItem  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//08 0B ´òÔìÎïÆ·#tagCMakeItem  
 | 
def MakeItem(index, tick):  
 | 
    return  
 | 
  
 | 
#===============================================================================  
 | 
# //08 19 ´òÔì×°±¸#tagCBuildEquip  
 | 
# int GetBuildID(); //´òÔìID  
 | 
# int GetItem1Count(); //ʹÓÃÎïÆ·1¸öÊý  
 | 
# int GetItem2Count(); //ʹÓÃÎïÆ·2¸öÊý  
 | 
# int GetItem3Count(); //ʹÓÃÎïÆ·3¸öÊý  
 | 
# int GetItem4Count(); //ʹÓÃÎïÆ·4¸öÊý  
 | 
# int GetItem5Count(); //ʹÓÃÎïÆ·5¸öÊý  
 | 
# int GetItem6Count(); //ʹÓÃÎïÆ·6¸öÊý  
 | 
# int GetBuildMode(); //´òÔìģʽ£¬Ä¿Ç°ÓУºÄ¬ÈÏ£¬°ó¶¨£¬·Ç°ó¶¨´òÔìģʽ  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//08 19 ´òÔì×°±¸#tagCBuildEquip  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//08 19 ´òÔì×°±¸#tagCBuildEquip  
 | 
def BuildEquip(index, tick):  
 | 
#    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
#    FuncDirectCall(curPlayer, "Func_102", "BuildEquip", tick)  
 | 
    return  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //08 03 Íæ¼Ò¹ºÂòÎïÆ·#tagCBuyItemList  
 | 
# tagCBuyItemList       *   GettagCBuyItemList();  
 | 
#   
 | 
# class   IPY_CBuyItemList  
 | 
# {  
 | 
# public:  
 | 
#   
 | 
#    int      GetBuyItemIndex();  
 | 
#    //¹ºÂòÊýÁ¿  
 | 
#    int      GetBuyCount();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//08 03 Íæ¼Ò¹ºÂòÎïÆ·#tagCBuyItemList  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//08 03 Íæ¼Ò¹ºÂòÎïÆ·#tagCBuyItemList  
 | 
def BuyItem(index, tick):  
 | 
    #µÃµ½Íæ¼ÒµÄ¶ÔÏó  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
  
 | 
    result = FuncDirectCall(curPlayer, "FunctionNPCCommon", "BuyItem", tick)  
 | 
  
 | 
    if result:  
 | 
        PlayerControl.NotifyCode(curPlayer, "BuyResSucceed")  
 | 
          
 | 
    return  
 | 
  
 | 
  
 | 
#===============================================================================  
 | 
# //A2 03 »Ø¹ºÎïÆ· #tagCMBuyItemBack  
 | 
#   
 | 
# struct tagCMBuyItemBack  
 | 
# {  
 | 
#    tagHead    Head;  
 | 
#    BYTE    Index;    //±³°üλÖÃË÷Òý  
 | 
# };  
 | 
#===============================================================================  
 | 
## »Ø¹ºÎïÆ·  
 | 
#  @param None  
 | 
#  @return None  
 | 
def BuyItemBack(index, clientPack, tick):  
 | 
    #µÃµ½Íæ¼ÒµÄ¶ÔÏó  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
  
 | 
    FunctionNPCCommon.BuyItemBack(curPlayer, clientPack, tick)  
 | 
  
 | 
    return  
 | 
  
 | 
  
 | 
#===============================================================================  
 | 
# //0E 04 Íæ¼Ò¼ø¶¨ÎïÆ·#tagCShopIdentifyItem  
 | 
# tagCShopIdentifyItem       *   GettagCShopIdentifyItem();  
 | 
#   
 | 
# class   IPY_CShopIdentifyItem  
 | 
# {  
 | 
# public:  
 | 
#   
 | 
#    int      GetTYPE();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//0E 04 Íæ¼Ò¼ø¶¨ÎïÆ·#tagCShopIdentifyItem  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//0E 04 Íæ¼Ò¼ø¶¨ÎïÆ·#tagCShopIdentifyItem  
 | 
def IdentifyItem(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //12 01 ´ò¿ªÐżþ#tagCOpenLetter  
 | 
# tagCOpenLetter       *   GettagCOpenLetter();  
 | 
#   
 | 
# class   IPY_COpenLetter  
 | 
# {  
 | 
# public:  
 | 
#    //ÐżþID  
 | 
#    char *      GetMailID();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//12 01 ´ò¿ªÐżþ#tagCOpenLetter  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//12 01 ´ò¿ªÐżþ#tagCOpenLetter  
 | 
def OpenLetter(index, tick):  
 | 
    #curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    #FuncCall(curPlayer, "OpenLetter", tick)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //12 02 ·¢ËÍÐżþ#tagCSendMail  
 | 
# tagCSendMail       *   GettagCSendMail();  
 | 
#   
 | 
# class   IPY_CSendMail  
 | 
# {  
 | 
# public:  
 | 
#    //Ä¿±êÃû³Æ  
 | 
#    char *      GetTagName();  
 | 
#    //Ö÷Ìâ  
 | 
#    char *      GetTitle();  
 | 
#   
 | 
#    int      GetContentLen();  
 | 
#    //size = ContentLen  
 | 
#    char *      GetContent();  
 | 
#    //Òø×Ó  
 | 
#    int      GetMoney();  
 | 
#    //ÀàÐÍ: TLetterType, ×Ô¼º¸¶·Ñ, ¶Ô·½¸¶·Ñ  
 | 
#    int      GetLetterType();  
 | 
#    //·¢ËÍÎïÆ·ÊýÁ¿  
 | 
#    int      GetItemCount();  
 | 
#    //size = ItemCount  
 | 
#    int      GetItem(int index);  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//12 02 ·¢ËÍÐżþ#tagCSendMail  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//12 02 ·¢ËÍÐżþ#tagCSendMail  
 | 
def SendLetter(index, tick):  
 | 
    #curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    #FuncCall(curPlayer, "SendLetter", tick)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //12 05 ÍËÐÅ#tagCReturnMail  
 | 
# tagCReturnMail       *   GettagCReturnMail();  
 | 
#   
 | 
# class   IPY_CReturnMail  
 | 
# {  
 | 
# public:  
 | 
#   
 | 
#    char *      GetMailID();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//12 05 ÍËÐÅ#tagCReturnMail  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//12 05 ÍËÐÅ#tagCReturnMail  
 | 
def ReturnLetter(index, tick):  
 | 
    #curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    #FuncCall(curPlayer, "ReturnLetter", tick)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //12 06 É¾³ýÐżþ#tagCDeleteMail  
 | 
# tagCDeleteMail       *   GettagCDeleteMail();  
 | 
#   
 | 
# class   IPY_CDeleteMail  
 | 
# {  
 | 
# public:  
 | 
#   
 | 
#    char *      GetMailID();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//12 06 É¾³ýÐżþ#tagCDeleteMail  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//12 06 É¾³ýÐżþ#tagCDeleteMail  
 | 
def DeleteLetter(index, tick):  
 | 
    #curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    #FuncCall(curPlayer, "DeleteLetter", tick)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //12 07 ÖÃΪ±£´æ#tagCSaveMail  
 | 
# tagCSaveMail       *   GettagCSaveMail();  
 | 
#   
 | 
# class   IPY_CSaveMail  
 | 
# {  
 | 
# public:  
 | 
#   
 | 
#    char *      GetMailID();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//12 07 ÖÃΪ±£´æ#tagCSaveMail  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//12 07 ÖÃΪ±£´æ#tagCSaveMail  
 | 
def SaveLetter(index, tick):  
 | 
    #curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    #FuncCall(curPlayer, "SaveLetter", tick)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //12 03 ÌáÈ¡ÐżþµÄÇ®#tagCGetMailMoney  
 | 
# tagCGetMailMoney       *   GettagCGetMailMoney();  
 | 
#   
 | 
# class   IPY_CGetMailMoney  
 | 
# {  
 | 
# public:  
 | 
#   
 | 
#    char *      GetMailID();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//12 03 ÌáÈ¡ÐżþµÄÇ®#tagCGetMailMoney  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//12 03 ÌáÈ¡ÐżþµÄÇ®#tagCGetMailMoney  
 | 
def GetLetterMoney(index, tick):  
 | 
    #curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    #FuncCall(curPlayer, "GetLetterMoney", tick)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //12 04 ÌáÈ¡ÐżþÎïÆ·#tagCGetMailItem  
 | 
# tagCGetMailItem       *   GettagCGetMailItem();  
 | 
#   
 | 
# class   IPY_CGetMailItem  
 | 
# {  
 | 
# public:  
 | 
#   
 | 
#    char *      GetMailID();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//12 04 ÌáÈ¡ÐżþÎïÆ·#tagCGetMailItem  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//12 04 ÌáÈ¡ÐżþÎïÆ·#tagCGetMailItem  
 | 
def GetLetterItem(index, tick):  
 | 
    #curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    #FuncCall(curPlayer, "GetLetterItem", tick)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //08 05 Íæ¼ÒÐÞÀíÎïÆ·#tagCShopRepairItem  
 | 
# tagCShopRepairItem       *   GettagCShopRepairItem();  
 | 
#   
 | 
# class   IPY_CShopRepairItem  
 | 
# {  
 | 
# public:  
 | 
#   
 | 
#    int      GetPackType();  
 | 
#   
 | 
#    int      GetItemIndex();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//08 05 Íæ¼ÒÐÞÀíÎïÆ·#tagCShopRepairItem  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//08 05 Íæ¼ÒÐÞÀíÎïÆ·#tagCShopRepairItem  
 | 
def RepairItem(index, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    FuncDirectCall(curPlayer, "FunctionNPCCommon", "RepairItem", tick)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //08 06 ÂôÎïÆ·#tagCPlayerSellItem  
 | 
# tagCPlayerSellItem       *   GettagCPlayerSellItem();  
 | 
#   
 | 
# class   IPY_CPlayerSellItem  
 | 
# {  
 | 
# public:  
 | 
#    //±³°üÀàÐÍ  
 | 
#    int      GetPackType();  
 | 
#    //ÎïÆ·Ë÷Òý  
 | 
#    int      GetItemIndex();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//08 06 ÂôÎïÆ·#tagCPlayerSellItem  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//08 06 ÂôÎïÆ·#tagCPlayerSellItem  
 | 
def SellItem(index, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
  
 | 
    result = FuncDirectCall(curPlayer, "FunctionNPCCommon", "SellItem", tick)  
 | 
      
 | 
    sendData = IPY_GameWorld.IPY_CPlayerSellItem()  
 | 
    packType = sendData.GetPackType()  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //08 0C ºÏ³É#tagCMerge  
 | 
# tagCMerge       *   GettagCMerge();  
 | 
#   
 | 
# class   IPY_CMerge  
 | 
# {  
 | 
#    int GetCompoundTimes();//ºÏ³É´ÎÊý  
 | 
#    int GetIsAutoBuy();//ÊÇ·ñ×Ô¶¯¹ºÂò¸½¼Ó²ÄÁÏ  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//08 0C ºÏ³É#tagCMerge  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//08 0C ºÏ³É#tagCMerge  
 | 
def MergeItem(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //08 0E ÎïÆ·°ó¶¨#tagCBindItem  
 | 
# tagCBindItem       *   GettagCBindItem();  
 | 
#   
 | 
# class   IPY_CBindItem  
 | 
# {  
 | 
# public:  
 | 
#    //°ó¶¨Ó¡¼ÇµÄindex  
 | 
#    int      GetBindStoneIndex();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//08 0E ÎïÆ·°ó¶¨#tagCBindItem  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//08 0E ÎïÆ·°ó¶¨#tagCBindItem  
 | 
def BindItem(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //08 0F ×°±¸´ò¿×#tagCMakeHoleItem  
 | 
# tagCMakeHoleItem       *   GettagCMakeHoleItem();  
 | 
#   
 | 
# class   IPY_CMakeHoleItem  
 | 
# {  
 | 
# public:  
 | 
#    //ÊÇ·ñ×Ô¶¯¹ºÂò, Èç¹û×Ô¶¯¹ºÂò, ÔòÏÂÃæ×Ö¶ÎÎÞЧ  
 | 
#    int      GetAutoBuyItem();  
 | 
#    //·þÎñÆ÷¶Ë×Ô¼ºÕÒ´ò¿×λÖà  
 | 
#    int      GetMakeHoleType();  
 | 
#    //ÊÇ·ñʹÓð󶨲ÄÁÏ, Îª1ÊÇÈ«²¿ÓÃ, 0ΪֻÓò»°ó¶¨µÄ  
 | 
#    int      GetIsUseBindItem();  
 | 
# };  
 | 
#===============================================================================  
 | 
# ----->>>ÇØÊ¼»Ê°æ·â°ü, ÔÝʱ²»ÓÃ<<<-----  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//08 0F ×°±¸´ò¿×#tagCMakeHoleItem  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//08 0F ×°±¸´ò¿×#tagCMakeHoleItem  
 | 
def MakeHoleItem(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //08 10 ×°±¸ÉýÐÇ#tagCItemLVUpStar  
 | 
# tagCItemLVUpStar       *   GettagCItemLVUpStar();  
 | 
#   
 | 
# class   IPY_CItemLVUpStar  
 | 
# {  
 | 
# public:  
 | 
#    //ÊÇ·ñ×Ô¶¯¹ºÂò, Èç¹û×Ô¶¯¹ºÂò, ÔòÏÂÃæ×Ö¶ÎÎÞЧ  
 | 
#    int      GetAutoBuyItem();  
 | 
#    //±³°üÐÇʯλÖà  
 | 
#    int      GetStarStoneIndex();  
 | 
#    //ÊÇ·ñʹÓ÷À±¬·û  
 | 
#    int      GetUseFangBaoFu();  
 | 
#    //·À±¬¸½Index  
 | 
#    int      GetFangBaoFuIndex();  
 | 
#    //ÊÇ·ñ×Ô¶¯¹ºÂò·À±¬·û  
 | 
#    int      GetAutoBuyFangBaoFu();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦08 10 ×°±¸ÉýÐÇ#tagCItemLVUpStar  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦08 10 ×°±¸ÉýÐÇ#tagCItemLVUpStar  
 | 
def ItemLVUpStar(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //08 11 ÏâǶ±¦Ê¯#tagCInsertStone  
 | 
# tagCInsertStone       *   GettagCInsertStone();  
 | 
#   
 | 
# class   IPY_CInsertStone  
 | 
# {  
 | 
# public:  
 | 
#    //±¦Ê¯Î»Öà  
 | 
#    int      GetStoneIndex();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//08 11 ÏâǶ±¦Ê¯#tagCInsertStone  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//08 11 ÏâǶ±¦Ê¯#tagCInsertStone  
 | 
def InsertStone(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //08 12 ²ð½âÎïÆ·#tagCDepartItem  
 | 
# tagCDepartItem       *   GettagCDepartItem();  
 | 
#   
 | 
# class   IPY_CDepartItem  
 | 
# {  
 | 
# public:  
 | 
#   
 | 
#    int      GetType();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//08 12 ²ð½âÎïÆ·#tagCDepartItem  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//08 12 ²ð½âÎïÆ·#tagCDepartItem  
 | 
def DepartItem(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //0D 01 ºÏ³ÉÎïÆ··ÅÈë±³°ü#tagCPutItemInComposePack  
 | 
# tagCPutItemInComposePack       *   GettagCPutItemInComposePack();  
 | 
#   
 | 
# class   IPY_CPutItemInComposePack  
 | 
# {  
 | 
# public:  
 | 
#    //±³°üλÖà  
 | 
#    int      GetItemIndex();  
 | 
#    //·ÅÈëλÖà  
 | 
#    int      GetMakePackIndex();  
 | 
#    //·ÅÈëÊýÁ¿  
 | 
#    int      GetCount();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//0D 01 ºÏ³ÉÎïÆ··ÅÈë±³°ü#tagCPutItemInComposePack  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//0D 01 ºÏ³ÉÎïÆ··ÅÈë±³°ü#tagCPutItemInComposePack  
 | 
def PutItemInCompose(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //0D 02 È¡³öºÏ³É±³°üÎïÆ·#tagCGetItemInComposePack  
 | 
# tagCGetItemInComposePack       *   GettagCGetItemInComposePack();  
 | 
#   
 | 
# class   IPY_CGetItemInComposePack  
 | 
# {  
 | 
# public:  
 | 
#    //ºÏ³ÉλÖà  
 | 
#    int      GetComposePackIndex();  
 | 
#    //ÎïÆ·Î»Öà  
 | 
#    int      GetItemIndex();  
 | 
#    //È¡³öÊýÁ¿  
 | 
#    int      GetCount();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//0D 02 È¡³öºÏ³É±³°üÎïÆ·#tagCGetItemInComposePack  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//0D 02 È¡³öºÏ³É±³°üÎïÆ·#tagCGetItemInComposePack  
 | 
def GetItemInCompose(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //0D 03 ºÏ³É±³°üÖÐÍ϶¯ÎïÆ·#tagCMoveItemInComposePack  
 | 
# tagCMoveItemInComposePack       *   GettagCMoveItemInComposePack();  
 | 
#   
 | 
# class   IPY_CMoveItemInComposePack  
 | 
# {  
 | 
# public:  
 | 
#    //ÆðʼλÖà  
 | 
#    int      GetSrcIndex();  
 | 
#    //Ä¿±êλÖà  
 | 
#    int      GetDestIndex();  
 | 
#   
 | 
#    int      GetCount();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//0D 03 ºÏ³É±³°üÖÐÍ϶¯ÎïÆ·#tagCMoveItemInComposePack  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//0D 03 ºÏ³É±³°üÖÐÍ϶¯ÎïÆ·#tagCMoveItemInComposePack  
 | 
def MoveItemInCompose(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //0D 04 ÎïÆ··ÅÈë×¼±¸²ð½â±³°ü#tagCPutItemInBreakPreparePack  
 | 
# tagCPutItemInBreakPreparePack       *   GettagCPutItemInBreakPreparePack();  
 | 
#   
 | 
# class   IPY_CPutItemInBreakPreparePack  
 | 
# {  
 | 
# public:  
 | 
#    //±³°üλÖà  
 | 
#    int      GetItemIndex();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//0D 04 ÎïÆ··ÅÈë×¼±¸²ð½â±³°ü#tagCPutItemInBreakPreparePack  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//0D 04 ÎïÆ··ÅÈë×¼±¸²ð½â±³°ü#tagCPutItemInBreakPreparePack  
 | 
def PutItemInBreakPreparePack(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //0D 05 ´Ó²ð½â×¼±¸±³°üÖÐÈ¡³ö#tagCGetBackItemInBreakPrepare  
 | 
# tagCGetBackItemInBreakPrepare       *   GettagCGetBackItemInBreakPrepare();  
 | 
#   
 | 
# class   IPY_CGetBackItemInBreakPrepare  
 | 
# {  
 | 
# public:  
 | 
#    //²ð½â±³°üµÄλÖà  
 | 
#    int      GetBreakPrepareIndex();  
 | 
#    //Íϵ½Ä¿µÄµØµÄλÖà  
 | 
#    int      GetItemIndex();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦ //0D 05 ´Ó²ð½â×¼±¸±³°üÖÐÈ¡³ö#tagCGetBackItemInBreakPrepare  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //0D 05 ´Ó²ð½â×¼±¸±³°üÖÐÈ¡³ö#tagCGetBackItemInBreakPrepare  
 | 
def GetBackItemInBreakPrepare(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //0D 06 ´Ó²ð½â½á¹û±³°üÖÐÈ¡³ö#tagCGetBackItemInBreakItem  
 | 
# tagCGetBackItemInBreakItem       *   GettagCGetBackItemInBreakItem();  
 | 
#   
 | 
# class   IPY_CGetBackItemInBreakItem  
 | 
# {  
 | 
# public:  
 | 
#    //²ð½â½á¹û±³°üλÖà  
 | 
#    int      GetBreakItemIndex();  
 | 
#    //È¡³öÊýÄ¿  
 | 
#    int      GetCount();  
 | 
#    //±³°üλÖà  
 | 
#    int      GetItemIndex();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//0D 06 ´Ó²ð½â½á¹û±³°üÖÐÈ¡³ö#tagCGetBackItemInBreakItem  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//0D 06 ´Ó²ð½â½á¹û±³°üÖÐÈ¡³ö#tagCGetBackItemInBreakItem  
 | 
def GetBackItemInBreakItem(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //0D 07 È¡³öºÏ³É½á¹û±³°ü#tagCGetItemFromResultPack  
 | 
# tagCGetItemFromResultPack       *   GettagCGetItemFromResultPack();  
 | 
#   
 | 
# class   IPY_CGetItemFromResultPack  
 | 
# {  
 | 
# public:  
 | 
#   
 | 
#    int      GetItemIndex();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//0D 07 È¡³öºÏ³É½á¹û±³°ü#tagCGetItemFromResultPack  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//0D 07 È¡³öºÏ³É½á¹û±³°ü#tagCGetItemFromResultPack  
 | 
def GetItemFromResultPack(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //0D 08 ·ÅÈëºÏ³É½á¹û±³°ü#tagCPutInResultPack  
 | 
# tagCPutInResultPack       *   GettagCPutInResultPack();  
 | 
#   
 | 
# class   IPY_CPutInResultPack  
 | 
# {  
 | 
# public:  
 | 
#   
 | 
#    int      GetItemIndex();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//0D 08 ·ÅÈëºÏ³É½á¹û±³°ü#tagCPutInResultPack  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//0D 08 ·ÅÈëºÏ³É½á¹û±³°ü#tagCPutInResultPack  
 | 
def PutItemInResultPack(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //0E 01 ¼ø¶¨ÎïÆ··ÅÈë±³°ü#tagCPutItemInIdentify  
 | 
# tagCPutItemInIdentify       *   GettagCPutItemInIdentify();  
 | 
#   
 | 
# class   IPY_CPutItemInIdentify  
 | 
# {  
 | 
# public:  
 | 
#    //±³°üλÖà  
 | 
#    int      GetItemIndex();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//0E 01 ¼ø¶¨ÎïÆ··ÅÈë±³°ü#tagCPutItemInIdentify  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//0E 01 ¼ø¶¨ÎïÆ··ÅÈë±³°ü#tagCPutItemInIdentify  
 | 
def PutItemInIdentify(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //0E 02 È¡³ö¼ø¶¨±³°üÄÚµÄÎïÆ·#tagCGetBackItemInIdentify  
 | 
# tagCGetBackItemInIdentify       *   GettagCGetBackItemInIdentify();  
 | 
#   
 | 
# class   IPY_CGetBackItemInIdentify  
 | 
# {  
 | 
# public:  
 | 
#    //ÎïÆ·Î»Öà  
 | 
#    int      GetItemIndex();  
 | 
#    //È¡³öÊýÁ¿  
 | 
#    int      GetCount();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//0E 02 È¡³ö¼ø¶¨±³°üÄÚµÄÎïÆ·#tagCGetBackItemInIdentify  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//0E 02 È¡³ö¼ø¶¨±³°üÄÚµÄÎïÆ·#tagCGetBackItemInIdentify  
 | 
def GetItemInIdentify(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //0E 03 ¼ø¶¨½áÊø#tagCIdentifyOK  
 | 
# tagCIdentifyOK       *   GettagCIdentifyOK();  
 | 
#   
 | 
# class   IPY_CIdentifyOK  
 | 
# {  
 | 
# public:  
 | 
#    //ÎÞÒâÒå  
 | 
#    int      GetType();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//0E 03 ¼ø¶¨½áÊø#tagCIdentifyOK  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//0E 03 ¼ø¶¨½áÊø#tagCIdentifyOK  
 | 
def IdentifyOK(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //08 15 ²ð½âÎïÆ·±¦Ê¯#tagCBreakItemStone  
 | 
# tagCBreakItemStone       *   GettagCBreakItemStone();  
 | 
#   
 | 
# class   IPY_CBreakItemStone  
 | 
# {  
 | 
# public:  
 | 
#    //ÎïÆ·µÄµÚ¼¸¸ö±¦Ê¯  
 | 
#    int      GetStoneIndex();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//08 15 ²ð½âÎïÆ·±¦Ê¯#tagCBreakItemStone  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//08 15 ²ð½âÎïÆ·±¦Ê¯#tagCBreakItemStone  
 | 
def DigItemStone(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //08 16 Ê¹ÓÃÍþ¶û¸Õ#tagCUseWeiErGangIncreaseEndure  
 | 
# tagCUseWeiErGangIncreaseEndure       *   GettagCUseWeiErGangIncreaseEndure();  
 | 
#   
 | 
# class   IPY_CUseWeiErGangIncreaseEndure  
 | 
# {  
 | 
# public:  
 | 
#    //Íþ¶û¸ÕλÖà  
 | 
#    int      GetGangStoneIndex();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//08 16 Ê¹ÓÃÍþ¶û¸Õ#tagCUseWeiErGangIncreaseEndure  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//08 16 Ê¹ÓÃÍþ¶û¸Õ#tagCUseWeiErGangIncreaseEndure  
 | 
def UseWegAddEndure(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //07 27 ´«ËµÎïÆ·ºÏ³É#tagCLegendMerge  
 | 
# tagCLegendMerge       *   GettagCLegendMerge();  
 | 
#   
 | 
# class   IPY_CLegendMerge  
 | 
# {  
 | 
# public:  
 | 
#    //Index  
 | 
#    int      GetItemIndex();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//07 27 ´«ËµÎïÆ·ºÏ³É#tagCLegendMerge  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//07 27 ´«ËµÎïÆ·ºÏ³É#tagCLegendMerge  
 | 
def LegendItemMerge(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //08 17 ½â³ý°ó¶¨#tagCCancelBind  
 | 
# tagCCancelBind       *   GettagCCancelBind();  
 | 
#   
 | 
# class   IPY_CCancelBind  
 | 
# {  
 | 
# public:  
 | 
#    //°ó¶¨Ó¡¼ÇµÄindex  
 | 
#    int      GetUnBindStoneIndex();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//08 17 ½â³ý°ó¶¨#tagCCancelBind  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//08 17 ½â³ý°ó¶¨#tagCCancelBind  
 | 
def UnBindItem(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //08 18 Õ½»êÌ××°ºÏ³É#tagCSoulOfWarMerge  
 | 
# tagCSoulOfWarMerge       *   GettagCSoulOfWarMerge();  
 | 
#   
 | 
# class   IPY_CSoulOfWarMerge  
 | 
# {  
 | 
# public:  
 | 
#    //ÊÇ·ñʹÓð󶨲ÄÁÏ  
 | 
#    int      GetUseBindItem();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//08 18 Õ½»êÌ××°ºÏ³É#tagCSoulOfWarMerge  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//08 18 Õ½»êÌ××°ºÏ³É#tagCSoulOfWarMerge  
 | 
def SoulOfWarEquip(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //07 23 ÐÞÀí·¨±¦#tagCRepairFabao  
 | 
# tagCRepairFabao       *   GettagCRepairFabao();  
 | 
#   
 | 
# class   IPY_CRepairFabao  
 | 
# {  
 | 
# public:  
 | 
#    //·¨±¦µÄλÖà  
 | 
#    int      GetFabaoIndex();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//07 23 ÐÞÀí·¨±¦#tagCRepairFabao  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//07 23 ÐÞÀí·¨±¦#tagCRepairFabao  
 | 
def RepairFaBao(index , tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //07 22 ÌáÁ¶·¨±¦#tagCForgeFaBao  
 | 
# tagCForgeFaBao       *   GettagCForgeFaBao();  
 | 
#   
 | 
# class   IPY_CForgeFaBao  
 | 
# {  
 | 
# public:  
 | 
#    //ÌáÁ¶¶àÉÙ·ÖÖÓ  
 | 
#    int      GetTime();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//07 22 ÌáÁ¶·¨±¦#tagCForgeFaBao  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//07 22 ÌáÁ¶·¨±¦#tagCForgeFaBao  
 | 
def ForgeFaBao(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //07 25 ·¨±¦ºÏ³É#tagCFaBaoMix  
 | 
# tagCFaBaoMix       *   GettagCFaBaoMix();  
 | 
#   
 | 
# class   IPY_CFaBaoMix  
 | 
# {  
 | 
# public:  
 | 
#    //3¸öºÏ³ÉÒ»¸ö  
 | 
#    int      GetItemIndex1();  
 | 
#   
 | 
#    int      GetItemIndex2();  
 | 
#   
 | 
#    int      GetItemIndex3();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//07 25 ·¨±¦ºÏ³É#tagCFaBaoMix  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//07 25 ·¨±¦ºÏ³É#tagCFaBaoMix  
 | 
def MixFaBao(index , tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //07 34 ·¨±¦·ÉÉý#tagCFaBaoFly  
 | 
# tagCFaBaoFly       *   GettagCFaBaoFly();  
 | 
#   
 | 
# class   IPY_CFaBaoFly  
 | 
# {  
 | 
# public:  
 | 
#    //Index  
 | 
#    int      GetItemIndex();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//07 34 ·¨±¦·ÉÉý#tagCFaBaoFly  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//07 34 ·¨±¦·ÉÉý#tagCFaBaoFly  
 | 
def FaBaoFly(index , tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //07 35 Ä¨È¥·¨±¦¼¼ÄÜ#tagCFaBaoForget  
 | 
# tagCFaBaoForget       *   GettagCFaBaoForget();  
 | 
#   
 | 
# class   IPY_CFaBaoForget  
 | 
# {  
 | 
# public:  
 | 
#    //Index  
 | 
#    int      GetItemIndex();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//07 35 Ä¨È¥·¨±¦¼¼ÄÜ#tagCFaBaoForget  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//07 35 Ä¨È¥·¨±¦¼¼ÄÜ#tagCFaBaoForget  
 | 
def FaBaoForget(index , tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //07 36 ·¨±¦ÈÚºÏ#tagCFaBaoMerge  
 | 
# tagCFaBaoMerge       *   GettagCFaBaoMerge();  
 | 
#   
 | 
# class   IPY_CFaBaoMerge  
 | 
# {  
 | 
# public:  
 | 
#    //×ó±ßÄǸö·¨±¦  
 | 
#    int      GetFaBao1Index();  
 | 
#    //ÓÒ±ßÄǸö·¨±¦  
 | 
#    int      GetFaBao2Index();  
 | 
#    //µÚÒ»¸öÎïÆ·, ºìºìµÄ¶¹×Ó  
 | 
#    int      GetItem1Cnt();  
 | 
#    //µÚ¶þ¸öÎïÆ·, Ô²Ô²µÄÇò  
 | 
#    int      GetItem2Cnt();  
 | 
#    //µÚÈý¸öÎïÆ·, ¾íÖá  
 | 
#    int      GetItem3Cnt();  
 | 
#    //ÊÇ·ñʹÓð󶨲ÄÁÏ  
 | 
#    int      GetUseBindItem();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//07 36 ·¨±¦ÈÚºÏ#tagCFaBaoMerge  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//07 36 ·¨±¦ÈÚºÏ#tagCFaBaoMerge  
 | 
def FaBaoMerge(index , tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //0F 0E ¼Ò×å¾èÏ×Òø×Ó#tagCContributeSilver  
 | 
def ContributeFamilyMoney(index , tick):  
 | 
    # Ê¹ÓÃРA6 05  ¼Ò×å¾èÏ× #tagCMFamilyDonate  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //07 28 5ÐÐת»»#tagCItemChangeProperty  
 | 
# tagCItemChangeProperty       *   GettagCItemChangeProperty();  
 | 
#   
 | 
# class   IPY_CItemChangeProperty  
 | 
# {  
 | 
# public:  
 | 
#    //ÊÇ·ñ²ÄÁϲ»×ã×Ô¶¯¹ºÂò  
 | 
#    int      GetAutoBuyStuff();  
 | 
#    //ÊÇ·ñʹÓð󶨲ÄÁÏ  
 | 
#    int      GetUseBindItem();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//07 28 5ÐÐת»»#tagCItemChangeProperty  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//07 28 5ÐÐת»»#tagCItemChangeProperty  
 | 
def ItemChangeProperty(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //07 29 Áé»ê·âÓ¡#tagCItemChangeGiveSoul  
 | 
# tagCItemChangeGiveSoul       *   GettagCItemChangeGiveSoul();  
 | 
#   
 | 
# class   IPY_CItemChangeGiveSoul  
 | 
# {  
 | 
# public:  
 | 
#    //ÊÇ·ñ²ÄÁϲ»×ã×Ô¶¯¹ºÂò  
 | 
#    int      GetAutoBuyStuff();  
 | 
#    //ÊÇ·ñʹÓð󶨲ÄÁÏ  
 | 
#    int      GetUseBindItem();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//07 29 Áé»ê·âÓ¡#tagCItemChangeGiveSoul  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//07 29 Áé»ê·âÓ¡#tagCItemChangeGiveSoul  
 | 
def ItemChangeGiveSoul(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //07 30 Áé»êת»»#tagCItemChangeSoul  
 | 
# tagCItemChangeSoul       *   GettagCItemChangeSoul();  
 | 
#   
 | 
# class   IPY_CItemChangeSoul  
 | 
# {  
 | 
# public:  
 | 
#    //ÊÇ·ñ²ÄÁϲ»×ã×Ô¶¯¹ºÂò  
 | 
#    int      GetAutoBuyStuff();  
 | 
#    //ÊÇ·ñʹÓð󶨲ÄÁÏ  
 | 
#    int      GetUseBindItem();  
 | 
#    //ÊÇ·ñʹÓÃÁé»êʯ  
 | 
#    int      GetUseIceStone();  
 | 
#    //ÊÇ·ñ×Ô¶¯¹ºÂò  
 | 
#    int      GetIceStoneAutoBuy();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//07 30 Áé»êת»»#tagCItemChangeSoul  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//07 30 Áé»êת»»#tagCItemChangeSoul  
 | 
def ItemChangeSoul(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //07 31 Ç©Ãû¸Ä±äÖé#tagCItemChangeMark  
 | 
# tagCItemChangeMark       *   GettagCItemChangeMark();  
 | 
#   
 | 
# class   IPY_CItemChangeMark  
 | 
# {  
 | 
# public:  
 | 
#    //ÊÇ·ñʹÓð󶨲ÄÁÏ  
 | 
#    int      GetUseBindItem();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//07 31 Ç©Ãû¸Ä±äÖé#tagCItemChangeMark  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//07 31 Ç©Ãû¸Ä±äÖé#tagCItemChangeMark  
 | 
def ItemChangeMark(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //07 32 Ç©ÃûÖé#tagCItemChangeGiveMark  
 | 
# tagCItemChangeGiveMark       *   GettagCItemChangeGiveMark();  
 | 
#   
 | 
# class   IPY_CItemChangeGiveMark  
 | 
# {  
 | 
# public:  
 | 
#    //ÊÇ·ñʹÓð󶨲ÄÁÏ  
 | 
#    int      GetUseBindItem();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//07 32 Ç©ÃûÖé#tagCItemChangeGiveMark  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//07 32 Ç©ÃûÖé#tagCItemChangeGiveMark  
 | 
def ItemChangeGiveMark(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##ÖØÖñ³°üµÈ¼¶  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@param addPackCnt ¿ªÆôµÈ¼¶  
 | 
#@return ²¼¶ûÖµ  
 | 
#@remarks ×Ô¶¨Ò庯Êý ÉèÖñ³°üµÈ¼¶  
 | 
def ResetBackPack(curPlayer, addPackCnt = 1):  
 | 
    packType = IPY_GameWorld.rptItem  
 | 
      
 | 
    #³õʼ»¯Íæ¼Ò±³°ü  
 | 
    if packType not in ChConfig.Def_Type_CanBuyPack_PlayerDict.keys():  
 | 
        return  
 | 
      
 | 
    keyName = ChConfig.Def_Type_CanBuyPack_PlayerDict.get(packType)[ChConfig.Def_PlayerPackDict_Index_Key]  
 | 
      
 | 
    #ÒѾ¿ªÆôµÄ±³°ü¸ñ×ÓÊý  
 | 
    packCount = ChConfig.Def_PlayerFirstLoginOpenBackCnt + curPlayer.NomalDictGetProperty(keyName)  
 | 
    resetPackCnt = packCount + addPackCnt  
 | 
  
 | 
    curPack = curPlayer.GetItemManager().GetPack(packType)  
 | 
          
 | 
    if resetPackCnt > curPack.GetMaxCount():  
 | 
        return False  
 | 
      
 | 
    #ÉèÖÃÍæ¼Ò±³°üÊýÁ¿  
 | 
    curPack.SetCount(resetPackCnt)  
 | 
      
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, keyName, curPlayer.NomalDictGetProperty(keyName) + addPackCnt)  
 | 
      
 | 
    #³õʼ»¯Íæ¼Ò±³°ü  
 | 
    PlayerControl.Init_ItemPack(curPlayer)  
 | 
  
 | 
    PlayerControl.NotifyCode(curPlayer, "GeRen_hwj35_149184", [addPackCnt])  
 | 
    return True  
 | 
#---------------------------------------------------------------------  
 | 
##ÉèÖòֿâµÈ¼¶  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@param addWarehouseCnt ²Ö¿âµÈ¼¶  
 | 
#@param needNotify ÊÇ·ñÐèҪϵͳÌáʾ  
 | 
#@return ²¼¶ûÖµ  
 | 
#@remarks ×Ô¶¨Ò庯Êý ÉèÖòֿâµÈ¼¶  
 | 
def ResetWarehouse(curPlayer, addWarehouseCnt = 1, needNotify = True):  
 | 
    packType = IPY_GameWorld.rptWarehouse  
 | 
    #³õʼ»¯Íæ¼Ò±³°ü  
 | 
    if packType not in ChConfig.Def_Type_CanBuyPack_PlayerDict.keys():  
 | 
        return  
 | 
      
 | 
    keyName = ChConfig.Def_Type_CanBuyPack_PlayerDict.get(packType)[ChConfig.Def_PlayerPackDict_Index_Key]  
 | 
    count = ChConfig.Def_Type_CanBuyPack_PlayerDict.get(packType)[ChConfig.Def_PlayerPackDict_Index_InitCnt] + \  
 | 
        curPlayer.NomalDictGetProperty(keyName) + addWarehouseCnt  
 | 
  
 | 
    curPack = curPlayer.GetItemManager().GetPack(packType)  
 | 
          
 | 
    if count > curPack.GetMaxCount():  
 | 
        return False  
 | 
      
 | 
    #ÉèÖòֿâ¸ñ×ÓÊý  
 | 
    curPack.SetCount(count)  
 | 
      
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, keyName, curPlayer.NomalDictGetProperty(keyName) + addWarehouseCnt)  
 | 
      
 | 
    #³õʼ»¯²Ö¿â  
 | 
    PlayerControl.Init_Warehouse(curPlayer)  
 | 
      
 | 
    if not needNotify:  
 | 
        return True   
 | 
      
 | 
    PlayerControl.NotifyCode(curPlayer, "GeRen_hwj35_874335", [addWarehouseCnt])  
 | 
    return True  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //0C 01 ±³°üÎïÆ··ÅÈë²Ö¿â#tagCPutItemInWarehouse  
 | 
# tagCPutItemInWarehouse       *   GettagCPutItemInWarehouse();  
 | 
#   
 | 
# class   IPY_CPutItemInWarehouse  
 | 
# {  
 | 
# public:  
 | 
#    //±³°üλÖà  
 | 
#    int      GetItemIndex();  
 | 
#    //·ÅÈëλÖà  
 | 
#    int      GetWarehouseIndex();  
 | 
#    //·ÅÈëÊýÁ¿  
 | 
#    int      GetCount();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//0C 01 ±³°üÎïÆ··ÅÈë²Ö¿â#tagCPutItemInWarehouse  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//0C 01 ±³°üÎïÆ··ÅÈë²Ö¿â#tagCPutItemInWarehouse  
 | 
def PutItemInWarehouse(index, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    FuncDirectCall(curPlayer, Def_Warehouse_FuncName, "PutItemInWarehouse", tick)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //0C 02 È¡³ö²Ö¿âÎïÆ·#tagCGetItemInWarehouse  
 | 
# tagCGetItemInWarehouse       *   GettagCGetItemInWarehouse();  
 | 
#   
 | 
# class   IPY_CGetItemInWarehouse  
 | 
# {  
 | 
# public:  
 | 
#    //²Ö¿âλÖà  
 | 
#    int      GetWarehouseIndex();  
 | 
#    //ÎïÆ·Î»Öà  
 | 
#    int      GetItemIndex();  
 | 
#    //È¡³öÊýÁ¿  
 | 
#    int      GetCount();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//0C 02 È¡³ö²Ö¿âÎïÆ·#tagCGetItemInWarehouse  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//0C 02 È¡³ö²Ö¿âÎïÆ·#tagCGetItemInWarehouse  
 | 
def GetItemInWarehouse(index, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    FuncDirectCall(curPlayer, Def_Warehouse_FuncName, "GetItemInWarehouse", tick)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //0C 03 ²Ö¿âÈ¡³ö½ðÇ®#tagCGetMoneyInWarehouse  
 | 
# tagCGetMoneyInWarehouse       *   GettagCGetMoneyInWarehouse();  
 | 
#   
 | 
# class   IPY_CGetMoneyInWarehouse  
 | 
# {  
 | 
# public:  
 | 
#    //½ðÇ®ÀàÐÍ  
 | 
#    int      GetMoneyType();  
 | 
#    //Ç®  
 | 
#    int      GetMoney();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//0C 03 ²Ö¿âÈ¡³ö½ðÇ®#tagCGetMoneyInWarehouse  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//0C 03 ²Ö¿âÈ¡³ö½ðÇ®#tagCGetMoneyInWarehouse  
 | 
def GetMoneyInWarehouse(index, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    FuncDirectCall(curPlayer, Def_Warehouse_FuncName, "GetMoneyInWarehouse", tick)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //0C 04 ²Ö¿â·ÅÈë½ðÇ®#tagCPutMoneyInWarehouse  
 | 
# tagCPutMoneyInWarehouse       *   GettagCPutMoneyInWarehouse();  
 | 
#   
 | 
# class   IPY_CPutMoneyInWarehouse  
 | 
# {  
 | 
# public:  
 | 
#    //½ðÇ®ÀàÐÍ  
 | 
#    int      GetMoneyType();  
 | 
#    //½ðÇ®  
 | 
#    int      GetMoney();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//0C 04 ²Ö¿â·ÅÈë½ðÇ®#tagCPutMoneyInWarehouse  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//0C 04 ²Ö¿â·ÅÈë½ðÇ®#tagCPutMoneyInWarehouse  
 | 
def PutMoneyInWarehouse(index, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    FuncDirectCall(curPlayer, Def_Warehouse_FuncName, "PutMoneyInWarehouse", tick)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //0C 05 ÉèÖòֿâÃÜÂë#tagCSetWarehousePsw  
 | 
# tagCSetWarehousePsw       *   GettagCSetWarehousePsw();  
 | 
#   
 | 
# class   IPY_CSetWarehousePsw  
 | 
# {  
 | 
# public:  
 | 
#    //µ±Ç°ÃÜÂë(¿Õ±íʾûÓÐÃÜÂë)  
 | 
#    char *      GetPsw();  
 | 
#    //¾ÉÃÜÂë  
 | 
#    char *      GetOldPsw();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//0C 05 ÉèÖòֿâÃÜÂë#tagCSetWarehousePsw  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//0C 05 ÉèÖòֿâÃÜÂë#tagCSetWarehousePsw  
 | 
def SetWarehousePsw(index, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    FuncDirectCall(curPlayer, Def_Warehouse_FuncName, "SetWarehousePsw", tick)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //0C 06 Ëø¶¨²Ö¿â#tagCSetWarehouseLock  
 | 
# tagCSetWarehouseLock       *   GettagCSetWarehouseLock();  
 | 
#   
 | 
# class   IPY_CSetWarehouseLock  
 | 
# {  
 | 
# public:  
 | 
#    //0: ½âËø 1:Ëø¶¨  
 | 
#    int      GetIsLock();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//0C 06 Ëø¶¨²Ö¿â#tagCSetWarehouseLock  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//0C 06 Ëø¶¨²Ö¿â#tagCSetWarehouseLock  
 | 
def SetWarehouseLock(index, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    FuncDirectCall(curPlayer, Def_Warehouse_FuncName, "SetWarehouseLock", tick)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //0C 07 ¿Í»§¶Ë·¢ËͲֿâÃÜÂë#tagSendWarehousePsw  
 | 
# tagSendWarehousePsw       *   GettagSendWarehousePsw();  
 | 
#   
 | 
# class   IPY_SendWarehousePsw  
 | 
# {  
 | 
# public:  
 | 
#   
 | 
#    char *      GetPsw();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//0C 07 ¿Í»§¶Ë·¢ËͲֿâÃÜÂë#tagSendWarehousePsw  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//0C 07 ¿Í»§¶Ë·¢ËͲֿâÃÜÂë#tagSendWarehousePsw  
 | 
def SendWarehousePsw(index, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    FuncDirectCall(curPlayer, Def_Warehouse_FuncName, "SendWarehousePsw", tick)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //0C 08 µÚÒ»´Î´ò¿ª²Ö¿â#tagCInitWarehousePsw  
 | 
# tagCInitWarehousePsw       *   GettagCInitWarehousePsw();  
 | 
#   
 | 
# class   IPY_CInitWarehousePsw  
 | 
# {  
 | 
# public:  
 | 
#    //ÃÜÂë  
 | 
#    char *      GetPsw();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//0C 08 µÚÒ»´Î´ò¿ª²Ö¿â#tagCInitWarehousePsw  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//0C 08 µÚÒ»´Î´ò¿ª²Ö¿â#tagCInitWarehousePsw  
 | 
def InitWarehousePsw(index, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    FuncDirectCall(curPlayer, Def_Warehouse_FuncName, "InitWarehousePsw", tick)  
 | 
    DoExitEvent(curPlayer)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //07 10 ²Ö¿âÖØÕû#tagCWarehouseReset  
 | 
# tagCWarehouseReset       *   GettagCWarehouseReset();  
 | 
#   
 | 
# class   IPY_CWarehouseReset  
 | 
# {  
 | 
# public:  
 | 
#   
 | 
#    int      GetType();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//07 10 ²Ö¿âÖØÕû#tagCWarehouseReset  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//07 10 ²Ö¿âÖØÕû#tagCWarehouseReset  
 | 
def ResetWarehouseItem(index, tick):  
 | 
#===============================================================================  
 | 
#    ±³°üÖØÕûºÏ²¢ 07 0F  
 | 
#    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
#    FuncCall(curPlayer, "ResetWarehouseItem", tick)  
 | 
#===============================================================================  
 | 
    return  
 | 
#---------------------------------------------------------------------      
 | 
#===============================================================================  
 | 
# //07 0F ±³°üÖØÕû#tagCItemPackReset  
 | 
# //¶ÔÐÔÄÜÓбȽϴóµÄÓ°Ïì  
 | 
#  
 | 
# struct         tagCItemPackReset  
 | 
# {  
 | 
#         BYTE               Type;              //±³°üÀàÐÍ  
 | 
#         WORD               ItemBeginIndex;    //ÎïÆ·ÆðʼË÷Òý  
 | 
#         WORD               ItemEndIndex;      //ÎïÆ·½áÊøË÷Òý  
 | 
# };  
 | 
#===============================================================================  
 | 
## ÎïÆ·ÖØÕû(·â°ü²ÎÊý)  
 | 
#  @param index ÎïÆ·Ë÷Òý  
 | 
#  @param tick µ±Ç°Ê±¼ä  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def ResetItem(index, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    sendPack = IPY_GameWorld.IPY_CItemPackReset()  
 | 
    sendPack_PackIndex = sendPack.GetType()  
 | 
    sendPack_ItemBeginIndex = sendPack.GetItemBeginIndex()  
 | 
    sendPack_ItemEndIndex = sendPack.GetItemEndIndex()  
 | 
      
 | 
    #·â°ü¼ì²é  
 | 
    if sendPack_PackIndex not in ChConfig.Def_CanItemResetPack:  
 | 
        GameWorld.ErrLog('ResetItem TypeErr = %s'%(sendPack_PackIndex), curPlayer.GetID())  
 | 
        return  
 | 
      
 | 
    #Íæ¼Ò±³°ü¼ì²é  
 | 
    rolePack = curPlayer.GetItemManager().GetPack(sendPack_PackIndex)   
 | 
      
 | 
    if sendPack_ItemBeginIndex < 0 or sendPack_ItemBeginIndex >= sendPack_ItemEndIndex \  
 | 
            or sendPack_ItemEndIndex >= rolePack.GetCount():  
 | 
        GameWorld.ErrLog('ResetItem IndexErr = %s,%s'%(sendPack_ItemBeginIndex, sendPack_ItemEndIndex), curPlayer.GetID())  
 | 
        return  
 | 
      
 | 
    #²Ö¿â±³°üÌØÊâ´¦Àí: Ã¿´ÎÕûÀíÒ»Ò³  
 | 
    #===========================================================================  
 | 
    # if sendPack_PackIndex == IPY_GameWorld.rptWarehouse:  
 | 
    #    #if sendPack_ItemEndIndex - sendPack_ItemBeginIndex >= ChConfig.Def_ItemReset_WarehousePageCnt:   
 | 
    #    #    GameWorld.ErrLog('ResetItem WarehouseIndexErr = %s,%s'%(sendPack_ItemBeginIndex, sendPack_ItemEndIndex), curPlayer.GetID())  
 | 
    #    #    return  
 | 
    #      
 | 
    #    #Íæ¼Òµ±Ç°×´Ì¬²»ÊÇ²Ö¿â´æÈ¡×´Ì¬  
 | 
    #    if curPlayer.GetWarehouseState() != IPY_GameWorld.wsWarehouse:  
 | 
    #        return  
 | 
    #===========================================================================  
 | 
      
 | 
    #±³°üÕûÀíÂß¼  
 | 
    ItemControler.ResetItem(curPlayer, sendPack_PackIndex, sendPack_ItemBeginIndex, sendPack_ItemEndIndex, tick)  
 | 
    return  
 | 
#---------------------------------------------------------------------     
 | 
#===============================================================================  
 | 
# //08 14 ³ÆºÅºÏ³É#tagCTitleMix  
 | 
# tagCTitleMix       *   GettagCTitleMix();  
 | 
#   
 | 
# class   IPY_CTitleMix  
 | 
# {  
 | 
# public:  
 | 
#    //×îÖÕÒªºÏ³ÉµÄ³ÆºÅ  
 | 
#    int      GetTitleID();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//08 14 ³ÆºÅºÏ³É#tagCTitleMix  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//08 14 ³ÆºÅºÏ³É#tagCTitleMix  
 | 
def MixTitle(index, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    FuncCall(curPlayer, "MixTitle", tick)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //0C 09 ²Ö¿âÍ϶¯ÎïÆ·#tagMoveItemInWarehouse  
 | 
# tagMoveItemInWarehouse       *   GettagMoveItemInWarehouse();  
 | 
#   
 | 
# class   IPY_MoveItemInWarehouse  
 | 
# {  
 | 
# public:  
 | 
#    //ÆðʼλÖà  
 | 
#    int      GetSrcIndex();  
 | 
#    //Ä¿±êλÖà  
 | 
#    int      GetDestIndex();  
 | 
#   
 | 
#    int      GetCount();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//0C 09 ²Ö¿âÍ϶¯ÎïÆ·#tagMoveItemInWarehouse  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//0C 09 ²Ö¿âÍ϶¯ÎïÆ·#tagMoveItemInWarehouse  
 | 
def MoveItemInWarehouse(index, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    FuncDirectCall(curPlayer, Def_Warehouse_FuncName, "MoveItemInWarehouse", tick)  
 | 
    return  
 | 
#---------------------------------------------------------------------  
 | 
##ÖØ¶ÁÈÎÎñˢР 
 | 
#@param ÎÞ  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ÖضÁÈÎÎñˢР 
 | 
def DoReloadRefresh():  
 | 
    #¸³Öµ  
 | 
    QuestRunner.SetFindQuestFunc(QuestManager.FindQuest)  
 | 
    QuestRunner.SetFunctionNPCTalk(QuestManager.GetFunctionNPCTalk())  
 | 
    QuestRunner.SetFindDefaultTalkFunc(QuestManager.FindDefaultTalk)  
 | 
    QuestRunner.SetQuestTrig(QuestManager.GetQuestTrig())  
 | 
    QuestRunner.SetQuestDescriptions(QuestManager.GetQuestDescriptions())  
 | 
    QuestRunner.SetAllQuestsEvents(QuestManager.GetAllQuestsEvents())  
 | 
      
 | 
#--------------------------------------×Ô¶¨Òå·½·¨  
 | 
##½áÊøÊ¼þÏìÓ¦  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ×Ô¶¨Ò庯Êý:½áÊøÊ¼þÏìÓ¦  
 | 
def DoExitEvent(curPlayer):      
 | 
    #ÔÊÐíÕûÀí±³°ü  
 | 
    #ExitEvent() »á°Ñ״̬Çå¿Õ,Onday»á´¥·¢£¬ÐèÒª»¹Ô  
 | 
    playerAction = curPlayer.GetPlayerAction()  
 | 
      
 | 
    curPlayer.SetForbiddenResetItem(0)  
 | 
    ExitCompose(curPlayer)  
 | 
    ExitWarehouse(curPlayer)  
 | 
    #ExitRepair(curPlayer)  
 | 
    ExitCreateFamily(curPlayer)  
 | 
    ExitBillboard(curPlayer)  
 | 
    #ExitEventLock(curPlayer)  
 | 
    #npcÉ̵êÍ˳ö  
 | 
    ExitNPCShop(curPlayer)  
 | 
      
 | 
    #PlayerTrade.LeaveTrade(curPlayer, 0)  
 | 
    # Çå³ýpy×Ô¶¨Òå״̬  
 | 
    #ClearPyPlayerAction(curPlayer)  
 | 
      
 | 
    #µ÷Óõײã½áÊøÊ¼þ  
 | 
    #±ÜÃâ²ß»®±ä¸ü£¬µ¼ÖÂÆäËûÍ˳öËø¶¨Ê¼þʹÈÎÎñ1δ½ÓÈ¡¾ÍÍ˳öËø¶¨  
 | 
    if curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_Frist_Lock) != 1:  
 | 
        curPlayer.ExitEvent()  
 | 
      
 | 
    if playerAction == IPY_GameWorld.paSit:  
 | 
        #»¹Ô´ò×ø  
 | 
        PlayerControl.SetIsNeedProcess(curPlayer, True)  
 | 
        #Íæ¼Ò×øÏÂ  
 | 
        curPlayer.Sit()  
 | 
      
 | 
    #GameWorld.Log("Íæ¼ÒÍ˳öËùÓÐʼþ³É¹¦" , curPlayer.GetPlayerID())  
 | 
    return True  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
## npcÉ̵êÍ˳ö  
 | 
#  @param curPlayer Íæ¼ÒʵÀý  
 | 
#  @return ·µ»ØÖµÎÞÒâÒå  
 | 
def ExitNPCShop(curPlayer):  
 | 
    # ÉèÖõ±Ç°É̵êµÄnpcidΪ0  
 | 
    curPlayer.SetDict(ChConfig.Def_PlayerKey_TradeTagNPC, 0)          
 | 
    return  
 | 
  
 | 
  
 | 
## Çå³ýpy×Ô¶¨Òå״̬  
 | 
#  @param curPlayer Íæ¼ÒʵÀý  
 | 
#  @return ·µ»ØÖµÎÞÒâÒå  
 | 
def ClearPyPlayerAction(curPlayer):  
 | 
    #Çå³ýpy×Ô¶¨Òå״̬  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_PyPlayerAction, 0)        
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##½áÊø²é¿´ÅÅÐаñ  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ×Ô¶¨Ò庯Êý:½áÊø²é¿´ÅÅÐаñ  
 | 
def ExitBillboard(curPlayer):  
 | 
    if curPlayer.GetWatchBillboardState() == 0:  
 | 
        return  
 | 
    curPlayer.GameServer_SetWatchBillboardState(0)  
 | 
    return  
 | 
#---------------------------------------------------------------------  
 | 
##½áÊø²Ö¿âʼþ  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ×Ô¶¨Ò庯Êý:½áÊø²Ö¿âʼþ  
 | 
def ExitWarehouse(curPlayer):  
 | 
    curPlayer.SetWarehouseState(IPY_GameWorld.wsNull)  
 | 
    return  
 | 
#---------------------------------------------------------------------  
 | 
##½áÊø´òÔìʼþ  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ×Ô¶¨Ò庯Êý:½áÊø´òÔìʼþ  
 | 
def ExitCompose(curPlayer):  
 | 
    curPlayer.SetComposeItemState(IPY_GameWorld.cisNull)  
 | 
    return  
 | 
#---------------------------------------------------------------------   
 | 
##½áÊøÐÞÀíʼþ  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ×Ô¶¨Ò庯Êý:½áÊøÐÞÀíʼþ  
 | 
def ExitRepair(curPlayer):  
 | 
    if curPlayer.GetEventHaveFixItem() == True:  
 | 
        #Ë¢ÐÂÊôÐÔ  
 | 
        playerControl = PlayerControl.PlayerControl(curPlayer)  
 | 
        playerControl.RefreshAllState()  
 | 
        #ÖØÖÃ״̬  
 | 
        curPlayer.SetEventHaveFixItem(False)  
 | 
          
 | 
#---------------------------------------------------------------------     
 | 
##½áÊø´´½¨¼Ò×åʼþ  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ×Ô¶¨Ò庯Êý:½áÊø´´½¨¼Ò×åʼþ  
 | 
def ExitCreateFamily(curPlayer):  
 | 
    PlayerFamily.SendPack_GameServer_ClearViewFamilyState(curPlayer)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //08 09 È¡ÏûÈÎÎñ#tagCCancelTask  
 | 
# tagCCancelTask       *   GettagCCancelTask();  
 | 
#   
 | 
# class   IPY_CCancelTask  
 | 
# {  
 | 
# public:  
 | 
#   
 | 
#    int      GetTaskID();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//08 09 È¡ÏûÈÎÎñ#tagCCancelTask  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//08 09 È¡ÏûÈÎÎñ#tagCCancelTask  
 | 
def DeleteMission(index, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    pack = IPY_GameWorld.IPY_CCancelTask()  
 | 
    missionID = pack.GetTaskID()   
 | 
    curMission = curPlayer.FindMission(missionID)  
 | 
      
 | 
    if not curMission:  
 | 
        return  
 | 
      
 | 
    missionState = curMission.GetState()  
 | 
      
 | 
    #δ½ÓÈÎÎñ»òÒÑÍê³ÉÈÎÎñ²»¿É·ÅÆú  
 | 
    if missionState in [ ChConfig.Def_Mission_State_NoAccept, ChConfig.Def_Mission_State_Over ]:  
 | 
        return  
 | 
      
 | 
    #ÒÆ¶¯Öв»Ö´Ðд˲Ù×÷  
 | 
    if curPlayer.IsMoving():  
 | 
        #PlayerControl.NotifyCode(curPlayer, "GeRen_lhs_0")  
 | 
        return  
 | 
      
 | 
    if curPlayer.GetPlayerAction()!= IPY_GameWorld.paNull:  
 | 
        #ÄúÖ»ÓÐÔÚ¿ÕÏÐ״̬ÏÂ²Å¿É·ÅÆúÈÎÎñ  
 | 
        PlayerControl.NotifyCode(curPlayer, "Task_cannot_Delete02")  
 | 
        return  
 | 
      
 | 
    #if GameWorld.GetMap().GetMapFBType() != IPY_GameWorld.fbtNull:  
 | 
    #    PlayerControl.NotifyCode(curPlayer, "GeRen_hgg_880525")  
 | 
    #    return  
 | 
      
 | 
    curQuestData = QuestManager.FindQuest(missionID)  
 | 
    if not curQuestData:  
 | 
        return  
 | 
      
 | 
    #·ÅÆúÐüÉÍÈÎÎñ  
 | 
    #if missionID == ChConfig.Def_ArrestMissionID:  
 | 
    #    PlayerArrestTask.OnDeleteArrestTask(curPlayer)  
 | 
      
 | 
    #ÏÈÔÚÈÎÎñ±íÖÐÕÒÊý¾Ý, Èç¹ûÕÒµ½ÁË, ¾Í²»±éÀúXMLÁË  
 | 
    if __DoLogic_DeleteMission(curPlayer, curMission):  
 | 
        GameWorld.Log("ÔÚÈÎÎñ±íÖÐÕÒÊý¾Ý, É¾³ýÈÎÎñ = %s, ×´Ì¬ = %s"%(missionID, missionState), curPlayer.GetID())  
 | 
        return  
 | 
      
 | 
    #GameWorld.Log("ÔÚXMLÖвéÕÒÊý¾Ý, É¾³ýÈÎÎñ = %s, ×´Ì¬ = %s"%(missionID, missionState), curPlayer.GetID())  
 | 
    #ɾ³ý±íÖÐÎÞ, ¾Í¶ÁXML( ÕâÀïµÄÈÎÎñÓ¦¸Ã¶¼ÊÇȫͼÈÎÎñ, ÈçÿÈÕÈÎÎñ )  
 | 
    RunQuestEvent(curPlayer, "on_delete", missionID, Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
##¶ÁÊý¾Ý¿âÈÎÎñɾ³ý±í, É¾³ýÈÎÎñ  
 | 
# @param curPlayer Íæ¼ÒʵÀý  
 | 
# @param curMission ÈÎÎñʵÀý  
 | 
# @return ·µ»ØÖµÕæ, É¾³ý³É¹¦  
 | 
# @remarks ×Ô¶¨Ò庯Êý, ¶ÁÊý¾Ý¿âÈÎÎñɾ³ý±í, É¾³ýÈÎÎñ  
 | 
def __DoLogic_DeleteMission(curPlayer, curMission):  
 | 
    missionID = curMission.GetMissionID()  
 | 
    GameWorld.Log("__DoLogic_DeleteMission---%s"%missionID, curPlayer.GetID())  
 | 
    delMissionData = GameWorld.GetGameData().GetMissionDeleteByID(missionID)  
 | 
    #ÈÎÎñɾ³ý±íÖÐÎÞ´ËÈÎÎñ  
 | 
    if not delMissionData:  
 | 
        return  
 | 
      
 | 
    #ÊÇ·ñÇå³ýïÚ³µ  
 | 
    if delMissionData.GetDeleteTruck():  
 | 
        #Íæ¼ÒÓµÓÐïÚ³µ, ÇÒïÚ³µIDºÍÈÎÎñIDÒ»Ö  
 | 
        if curPlayer.GetTruckID() != 0 and curPlayer.GetTruckEventID() == missionID:  
 | 
            curPlayer.GameServer_DelTruck()  
 | 
      
 | 
    #ÊÇ·ñÐèҪɾ³ýÎïÆ·  
 | 
    for index in range(0, delMissionData.GetDeleteItemCount()):  
 | 
        delItemData = delMissionData.GetDeleteItemAt(index)  
 | 
        delItemID = delItemData.GetID()  
 | 
        #0±íʾȫ²¿É¾³ý  
 | 
        delItemCount = delItemData.GetCount()  
 | 
        ItemCommon.DelMissionItem(curPlayer, IPY_GameWorld.rptItem, delItemID, delItemCount, missionID)  
 | 
      
 | 
    #ɾ³ýÕâ¸öÈÎÎñ  
 | 
    QuestCommon.DeleteMission(curPlayer, missionID)  
 | 
      
 | 
    #ÊÇ·ñÓд¥·¢ÐÂÈÎÎñ  
 | 
    nextMissionID = delMissionData.GetNextMissionID()  
 | 
      
 | 
    if nextMissionID > 0:  
 | 
        curAddMission = QuestCommon.AddNewMission(curPlayer, nextMissionID)  
 | 
        NotifyOneMission(curPlayer, curAddMission)  
 | 
      
 | 
    return True  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //04 03 ÈÎÎñ´«ËÍ#tagCMissionTransport  
 | 
# tagCMissionTransport       *   GettagCMissionTransport();  
 | 
#   
 | 
# class   IPY_CMissionTransport  
 | 
# {  
 | 
# public:  
 | 
#   
 | 
#    int      GetMapID();  
 | 
#   
 | 
#    int      GetPosX();  
 | 
#   
 | 
#    int      GetPosY();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦//04 03 ÈÎÎñ´«ËÍ#tagCMissionTransport  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦//04 03 ÈÎÎñ´«ËÍ#tagCMissionTransport  
 | 
def MissionMove(index, tick):  
 | 
    return  
 | 
  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //07 37 Ê¥Æ÷Ç¿»¯#tagCShengQiQiangHua  
 | 
# tagCShengQiQiangHua       *   GettagCShengQiQiangHua();  
 | 
#   
 | 
# class   IPY_CShengQiQiangHua  
 | 
# {  
 | 
# public:  
 | 
#    //Ê¥Æ÷λÖà  
 | 
#    int      GetDestIndex();  
 | 
#    //×Ô¶¯Âò²ÄÁÏ  
 | 
#    int      GetAutoBuyMaterial();  
 | 
#    // ²»Ê¹Óð󶨲ÄÁÏÇ¿»¯  
 | 
#    int      GetNotUserBindMaterial();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦ //07 37 Ê¥Æ÷Ç¿»¯#tagCShengQiQiangHua  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //07 37 Ê¥Æ÷Ç¿»¯#tagCShengQiQiangHua  
 | 
def ShengQiQiangHua(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //07 38 Çå³ýÊ¥Æ÷¸½¼ÓÊôÐÔ#tagCClearShengQiAttrs  
 | 
# tagCClearShengQiAttrs       *   GettagCClearShengQiAttrs();  
 | 
#   
 | 
# class   IPY_CClearShengQiAttrs  
 | 
# {  
 | 
# public:  
 | 
#   
 | 
#    int      GetDestIndex();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦ //07 38 Çå³ýÊ¥Æ÷¸½¼ÓÊôÐÔ#tagCClearShengQiAttrs  
 | 
#@param index Íæ¼ÒË÷Òý  
 | 
#@param tick Ê±¼ä´Á  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
#@remarks ¿Í»§¶Ë·â°üÏìÓ¦ //07 38 Çå³ýÊ¥Æ÷¸½¼ÓÊôÐÔ#tagCClearShengQiAttrs  
 | 
def ClearShengQiAttrs(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //0D 0E ±¦Ê¯ºÏ³É#tagCStoneCompound  
 | 
# tagCStoneCompound       *   GettagCStoneCompound();  
 | 
#   
 | 
# class   IPY_CStoneCompound  
 | 
# {  
 | 
# public:  
 | 
#    // ºÏ³É´ÎÊý  
 | 
#    int      GetCompoundCount();  
 | 
#    // ºÏ³Éģʽ  
 | 
#    int      GetCompoundTimes();  
 | 
#    // ×Ô¶¯¹ºÂò  
 | 
#    int      GetIsAutoBuy();  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦ //0D 0E ±¦Ê¯ºÏ³É#tagCStoneCompound  
 | 
# @param index Íæ¼ÒË÷Òý  
 | 
# @param tick Ê±¼ä´Á  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
# @remarks ¿Í»§¶Ë·â°üÏìÓ¦ //0D 0E ±¦Ê¯ºÏ³É#tagCStoneCompound  
 | 
def StoneCompound(index, tick):  
 | 
#    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
#    FuncDirectCall(curPlayer, "Func_103", "BeginStoneCompound", tick)  
 | 
    return  
 | 
  
 | 
  
 | 
#===============================================================================  
 | 
# //A1 06 ×°±¸Ì××°»¯#tagCEquipSuite  
 | 
#   
 | 
# struct tagCEquipSuite  
 | 
# {  
 | 
#    tagHead    Head;  
 | 
#    BYTE    EquipPackType;    //×°±¸ËùÔÚ±³°üÀàÐÍ  
 | 
#    DWORD    ItemIndex;    //×°±¸±³°üË÷Òý  
 | 
# };  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦ //08 1A ×°±¸Ì××°»¯#tagCEquipSuite  
 | 
# @param index Íæ¼ÒË÷Òý  
 | 
# @param tick Ê±¼ä´Á  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
# @remarks ¿Í»§¶Ë·â°üÏìÓ¦ //08 1A ×°±¸Ì××°»¯#tagCEquipSuite  
 | 
def EquipMakeSuit(index, clientData, tick):  
 | 
    #curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    #FuncDirectCall(curPlayer, "Func_104", "EquipMakeSuit", tick, clientData)  
 | 
    return  
 | 
  
 | 
#===============================================================================  
 | 
#//A1 05 ×°±¸¸½Ä§ #tagCEquipAddSkill  
 | 
#  
 | 
#struct    tagCEquipAddSkill  
 | 
#{  
 | 
#    tagHead        Head;  
 | 
#    BYTE        EquipPackType;        //×°±¸ËùÔÚ±³°üÀàÐÍ  
 | 
#    BYTE        Type;            // 0-Çå¿Õ;1-¸½¼Ó  
 | 
#    WORD        EquipIndex;        // ×°±¸ÔÚ±³°üÖеÄË÷Òý  
 | 
#};  
 | 
#===============================================================================  
 | 
##¿Í»§¶Ë·â°üÏìÓ¦  
 | 
# @param index Íæ¼ÒË÷Òý  
 | 
# @param tick Ê±¼ä´Á  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
# @remarks ¿Í»§¶Ë·â°üÏìÓ¦ //0D 09 ×°±¸¸½Ä§#tagCEquipAddSkill  
 | 
def MagicAttached(index, clientData, tick):  
 | 
#    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
#    FuncDirectCall(curPlayer, "Func_104", "MagicAttached", tick, clientData)  
 | 
    return  
 | 
  
 | 
  
 | 
#===================================================================================================  
 | 
# //0D 11 ÍþÍû×°±¸ºÏ³É·â°ü#tagCPrestigeEquipMerge  
 | 
# tagCPrestigeEquipMerge    * GettagCPrestigeEquipMerge();  
 | 
#   
 | 
# class IPY_CPrestigeEquipMerge  
 | 
# {  
 | 
# public:  
 | 
#   
 | 
#    //ºÏ³ÉÀàÐÍ  
 | 
#    int GetType();  
 | 
#    //×°±¸Ë÷Òý  
 | 
#    int GetEquipIndex();  
 | 
#    //²ÄÁÏË÷Òý  
 | 
#    int GetMaterialIndex();  
 | 
# };  
 | 
#===================================================================================================  
 | 
##0D 11 ÍþÍû×°±¸ºÏ³É·â°ü#tagCPrestigeEquipMerge  
 | 
# @param curPlayer Íæ¼ÒʵÀý  
 | 
# @param tick Ê±¼ä´Á  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
# @remarks ¿Í»§¶Ë·â°üÏìÓ¦ //0D 11 ÍþÍû×°±¸ºÏ³É·â°ü#tagCPrestigeEquipMerge  
 | 
def PrestigeEquipMerge(index, tick):  
 | 
#      
 | 
#    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
#    FuncDirectCall(curPlayer, "Func_106", "PrestigeEquipMerge", tick)  
 | 
    return  
 | 
  
 | 
  
 | 
#===============================================================================  
 | 
# //0D 0C ²ÄÁϼӹ¤#tagCMaterialCompound  
 | 
#   
 | 
# struct    tagCMaterialCompound  
 | 
# {  
 | 
#    tagHead        Head;  
 | 
#    WORD        ItemIndex;    // ²ÄÁÏÔÚ±³°üÖеÄË÷Òý  
 | 
# };  
 | 
#===============================================================================  
 | 
##²ÄÁϼӹ¤·â°ü£¬µãÒ»´ÎÖ»ºÏÒ»´Î£¬£¨Ë鯬ºÏ³É£©  
 | 
# @param index Íæ¼ÒË÷Òý  
 | 
# @param tick Ê±¼ä´Á  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
# @remarks ¿Í»§¶Ë·â°üÏìÓ¦ //0D 0C ²ÄÁϼӹ¤#tagCMaterialCompound  
 | 
def StuffMachining(index, tick):  
 | 
    return  
 | 
      
 | 
      
 | 
##½øÈ븱±¾³¡¾°ÑéÖ¤.  
 | 
# @param curPlayer Íæ¼ÒʵÀý  
 | 
# @param mapID µØÍ¼ID  
 | 
# @param tick Ê±¼ä´Á  
 | 
# @return ÊÇ·ñÑéÖ¤³É¹¦  
 | 
# @remarks ¿Í»§¶Ë·â°üÏìÓ¦  
 | 
def DoLogic_EnterFbGameEvent(curPlayer, mapID, tick):  
 | 
    #ÔÝÆÁ±ÎNPCÑéÖ¤ÅÐ¶Ï  
 | 
    return  
 | 
#    #ûÓÐNPC¶Ô»°µ¯½çÃæ  
 | 
#    if mapID in ChConfig.Def_EnterFB_NoNPCForm or mapID in ReadChConfig.GetEvalChConfig("MapID_NoNPCForm"):  
 | 
#        return True  
 | 
#      
 | 
#    callName = ChConfig.Def_EnterFb_CallNPCFunc.get(mapID)  
 | 
#      
 | 
#    if callName == None:  
 | 
#        return False  
 | 
#      
 | 
#    result = FuncCall(curPlayer, callName, tick)  
 | 
#      
 | 
#    if not result:  
 | 
#        return False  
 | 
#  
 | 
#    return True  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
## ¹ºÂò²Ö¿â·â°ü //0C 10 ¹ºÂò²Ö¿â¿Õ¼ä  
 | 
#  @param index Íæ¼ÒË÷Òý  
 | 
#  @param tick Ê±¼ä´Á  
 | 
#  @return ÎÞ·µ»ØÖµ  
 | 
#  @remarks ¹ºÂò²Ö¿â·â°ü   
 | 
def BuyWarehouse(index, tick):  
 | 
#    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
#  
 | 
#    #ת»»Íæ¼ÒµÄ»õ±Ò  
 | 
#    buyWarehouseType = PlayerControl.ChangeMoneyType(curPlayer, ChConfig.Def_BuyWarehouse_Type)  
 | 
#      
 | 
#    if not PlayerControl.HaveMoney(curPlayer, buyWarehouseType, ChConfig.Def_BuyWarehouse_Cost):  
 | 
#        #½ðÇ®²»×ã  
 | 
#        return  
 | 
#      
 | 
#    if not ResetWarehouse(curPlayer):  
 | 
#        #²Ö¿â¿Õ¼äÒÑÂú  
 | 
#        return  
 | 
#      
 | 
#    #---¿ÛÍæ¼ÒÇ®---  
 | 
#    if not PlayerControl.PayMoney(curPlayer, buyWarehouseType, ChConfig.Def_BuyWarehouse_Cost):  
 | 
#        GameWorld.ErrLog('BuyWarehouse PayMoneyErr')  
 | 
#        return  
 | 
#      
 | 
#    #ÊÖÐø·ÑÁ÷Ïò¼Ç¼  
 | 
#    PlayerControl.DataServerMoneyLog(curPlayer, buyWarehouseType, 656, par = ChConfig.Def_BuyWarehouse_Cost)  
 | 
     
 | 
    return  
 | 
#---------------------------------------------------------------------  
 | 
##//07 3A ¹ºÂòÎïÆ·±³°ü¿Õ¼ä#tagCBuyBackpack  
 | 
#  @param index Íæ¼ÒË÷Òý  
 | 
#  @param tick Ê±¼ä´Á  
 | 
#  @return ÎÞ·µ»ØÖµ  
 | 
#  @remarks ¹ºÂòÎïÆ·±³°ü¿Õ¼ä  
 | 
def BuyItemPack(index, tick):  
 | 
    # ¹Ø±Õ´Ë·â°ü¹¦ÄÜ£¬ÇëʹÓÃͨÓùºÂò·â°ü07 41  
 | 
    return  
 | 
#  
 | 
#    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
#    #ת»»Íæ¼ÒµÄ»õ±Ò  
 | 
#    useMoneyType = PlayerControl.ChangeMoneyType(curPlayer, ChConfig.Def_BuyItemPack_Type)  
 | 
#      
 | 
#    #ÑéÖ¤Íæ¼Ò»õ±Ò  
 | 
#    if not PlayerControl.HaveMoney(curPlayer, useMoneyType, ChConfig.Def_BuyItemPack_Cost):  
 | 
#        return  
 | 
#      
 | 
#    if not ResetBackPack(curPlayer):  
 | 
#        #±³°ü¿Õ¼äÒÑÂú  
 | 
#        return  
 | 
#      
 | 
#    #---¿ÛÍæ¼ÒÇ®---  
 | 
#    if not PlayerControl.PayMoney(curPlayer, useMoneyType, ChConfig.Def_BuyItemPack_Cost):  
 | 
#        GameWorld.ErrLog('BuyItemPack PayMoneyErr')  
 | 
#        return  
 | 
#  
 | 
#    #ÊÖÐø·ÑÁ÷Ïò¼Ç¼  
 | 
#    PlayerControl.DataServerMoneyLog(curPlayer, useMoneyType, 655, par = ChConfig.Def_BuyItemPack_Cost)  
 | 
#    return  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# #//07 3CͨÓñ³°ü²Ù×÷#tagCBackpackOperate  
 | 
# #//¶ÔÐÔÄÜÓ°ÏìºÜС  
 | 
# ////////////////////////////////////////////////////////////  
 | 
# tagCBackpackOperate*GettagCBackpackOperate();  
 | 
# class IPY_CBackpackOperate  
 | 
# {  
 | 
# int GetSrcBackpack();//Ô´±³°üÀàÐÍ  
 | 
# int GetDesBackPack();//Ä¿±ê±³°üÀàÐÍ  
 | 
# int GetSrcIndex();//Æðʼλ  
 | 
# int GetDestIndex();//Ä¿±êλÖà  
 | 
# int GetCount();//ÎïÆ·ÊýÁ¿  
 | 
# }  
 | 
#===============================================================================  
 | 
## Í¨Óñ³°ü²Ù×÷#tagCBackpackOperate  
 | 
#  @param index Íæ¼ÒË÷Òý  
 | 
#  @param tick Ê±¼ä´Á  
 | 
#  @return ÎÞ·µ»ØÖµ  
 | 
#  @remarks 07 3CͨÓñ³°ü²Ù×÷#tagCBackpackOperate  
 | 
def BackpackOperate(index, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    sendPack = IPY_GameWorld.IPY_CBackpackOperate()  
 | 
    pack_SrcBackpack = sendPack.GetSrcBackpack()  
 | 
    pack_DesBackPack = sendPack.GetDesBackPack()  
 | 
    pack_SrcIndex = sendPack.GetSrcIndex()  
 | 
    pack_DestIndex = sendPack.GetDestIndex()  
 | 
    pack_ItemCount = sendPack.GetCount()  
 | 
      
 | 
    FunctionNPCCommon.BackpackOperate(curPlayer, pack_SrcBackpack, pack_DesBackPack,   
 | 
                                          pack_SrcIndex, pack_DestIndex, pack_ItemCount, tick)  
 | 
    return  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //07 3D Í¨Óñ³°üÎïÆ·½»»»#tagCPackItemExchange  
 | 
# //¶ÔÐÔÄܼ¸ºõÎÞÓ°Ïì  
 | 
# struct tagCPackItemExchange  
 | 
# {  
 | 
# BYTE SrcBackpack;//Ô´±³°üÀàÐÍ  
 | 
# BYTE DesBackPack;//Ä¿±ê±³°üÀàÐÍ  
 | 
# WORD SrcIndex;//ÆðʼλÖà  
 | 
# WORD DestIndex;//Ä¿±êλÖà  
 | 
# };  
 | 
#===============================================================================  
 | 
## Í¨Óñ³°üÎïÆ·½»»»#tagCPackItemExchange  
 | 
#  @param index Íæ¼ÒË÷Òý  
 | 
#  @param tick Ê±¼ä´Á  
 | 
#  @return ÎÞ·µ»ØÖµ  
 | 
#  @remarks //07 3D Í¨Óñ³°üÎïÆ·½»»»#tagCPackItemExchange  
 | 
def PackItemExchange(index, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    sendPack = IPY_GameWorld.IPY_CPackItemExchange()  
 | 
    pack_SrcBackpack = sendPack.GetSrcBackpack()  
 | 
    pack_DesBackPack = sendPack.GetDesBackPack()  
 | 
    pack_SrcIndex = sendPack.GetSrcIndex()  
 | 
    pack_DestIndex = sendPack.GetDestIndex()  
 | 
      
 | 
    # ·ûÓ¡½»»»  
 | 
    if PlayerRune.SwitchRune(curPlayer, pack_SrcBackpack, pack_DesBackPack, pack_SrcIndex, pack_DestIndex):  
 | 
        return  
 | 
    # ¾Û»ê½»»»  
 | 
    if PlayerGatherSoul.SwitchGatherSoul(curPlayer, pack_SrcBackpack, pack_DesBackPack, pack_SrcIndex, pack_DestIndex):  
 | 
        return  
 | 
      
 | 
    #ʱװ  
 | 
    if PlayerCoat.SwitchCoat(curPlayer, pack_SrcBackpack, pack_DesBackPack, pack_SrcIndex, pack_DestIndex):  
 | 
        return  
 | 
      
 | 
    FunctionNPCCommon.PackItemExchange(curPlayer, pack_SrcBackpack, pack_DesBackPack,   
 | 
                                          pack_SrcIndex, pack_DestIndex, tick)  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //08 1B Ê¹ÓÃÐÞÀíµÀ¾ßÐÞÀí×°±¸#tagCRepairEquip  
 | 
# struct tagCRepairEquip  
 | 
# {  
 | 
#         tagHead Head  
 | 
#         WORD        ItemIndex; // µÀ¾ßË÷Òý  
 | 
#         BYTE PackType; //±³°üÀàÐÍ  
 | 
#         WORD        EquipIndex; //×°±¸ÔÚÏàÓ¦±³°üÖеÄË÷Òý   
 | 
# };  
 | 
#===============================================================================  
 | 
##ʹÓÃÐÞÀíµÀ¾ßÐÞÀí×°±¸#tagCRepairEquip  
 | 
# @param index Íæ¼ÒË÷Òý  
 | 
# @param tick Ê±¼ä´Á  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
# @remarks ¿Í»§¶Ë·â°üÏìÓ¦ //08 1B Ê¹ÓÃÐÞÀíµÀ¾ßÐÞÀí×°±¸#tagCRepairEquip  
 | 
def ChangeEquipEndure(index, tick):  
 | 
    return  
 | 
      
 | 
      
 | 
#//07 3F Ê¹ÓõÀ¾ßÔö¼Ó×î´óÁéÎÆ´ÎÊý#tagCUseIncreaseMaxAddSkill   
 | 
#struct tagCUseIncreaseMaxAddSkill   
 | 
#{   
 | 
#tagHead Head;   
 | 
#WORD ItemIndex; // µÀ¾ßË÷Òý   
 | 
#BYTE PackType; //±³°üÀàÐÍ   
 | 
#WORD EquipIndex; //×°±¸ÔÚÏàÓ¦±³°üÖеÄË÷Òý   
 | 
#};   
 | 
##ʹÓõÀ¾ßÔö¼Ó×î´óÁéÎÆ´ÎÊý  
 | 
# @param index Íæ¼ÒË÷Òý  
 | 
# @param tick Ê±¼ä´Á  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
def UseIncreaseMaxAddSkill(index, tick):  
 | 
    return  
 | 
#    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
#    sendPack = IPY_GameWorld.IPY_CUseIncreaseMaxAddSkill()  
 | 
#      
 | 
#    Operate_MagicAttached.UseIncreaseMaxAddSkill(curPlayer, sendPack.GetItemIndex(),  
 | 
#                                                     sendPack.GetPackType(), sendPack.GetEquipIndex())  
 | 
      
 | 
  
 | 
#===============================================================================  
 | 
# //07 42 ÎïÆ·ÄÜÁ¿×ªÒÆ#tagCItemTransfer  
 | 
# struct       tagCItemTransfer  
 | 
# {  
 | 
#         tagHead            Head;  
 | 
#         BYTE                  PackType;         //±³°üÀàÐÍ:rptItem, rptEquip, rptWarehouse   
 | 
#         BYTE                  ItemPlace;  
 | 
#         BYTE                  TransferType;  //×ªÒÆÀàÐÍ  
 | 
# };  
 | 
#===============================================================================  
 | 
##ÎïÆ·ÄÜÁ¿×ªÒÆ  
 | 
# @param index Íæ¼ÒË÷Òý  
 | 
# @param tick Ê±¼ä´Á  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
def ItemEnergyTransfer(index, tick):  
 | 
#    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
#      
 | 
#    #±ÜÃâ·´¸´²Ù×÷  
 | 
#    if tick - curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_ChangeEnergy) \  
 | 
#    < ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_ChangeEnergy]:  
 | 
#        return  
 | 
#      
 | 
#    curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_ChangeEnergy, tick)  
 | 
#      
 | 
#    pack = IPY_GameWorld.IPY_CItemTransfer()  
 | 
#    Operate_MagicAttached.ItemEnergyTransfer(curPlayer, pack.GetPackType(),  
 | 
#                                             pack.GetItemPlace(), pack.GetTransferType())  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //16 0B³èÎïÁ¶»¯#tagCPetRefinery  
 | 
# struct tagCPetRefinery  
 | 
# {  
 | 
# tagHead Head;  
 | 
# DWORD PetID;//³èÎïID  
 | 
# };  
 | 
#===============================================================================  
 | 
##³èÎïÁ¶»¯.  
 | 
# @param index Íæ¼ÒË÷Òý  
 | 
# @param tick Ê±¼ä´Á  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
# @remarks ¿Í»§¶Ë·â°üÏìÓ¦ //16 0B³èÎïÁ¶»¯#tagCPetRefinery  
 | 
def CPetRefinery(index, tick):  
 | 
    return  
 | 
  
 | 
#===============================================================================  
 | 
#//07 41 Í¨ÓùºÂòPack¿Õ¼ä#tagCOpenPackCount  
 | 
# struct       tagCOpenPackCount  
 | 
# {  
 | 
#         tagHead            Head;  
 | 
#         BYTE                  PackType;         //±³°üÀàÐÍ:rptItem, rptEquip, rptWarehouse   
 | 
#         BYTE                  Count;               //¹ºÂò¸ñÊý  
 | 
# };  
 | 
#===============================================================================  
 | 
##¹ºÂò¸÷ÖÖ°ü¹ü¸ñ×Ó  
 | 
# @param index Íæ¼ÒË÷Òý  
 | 
# @param tick Ê±¼ä´Á  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
def OpenPackCount(index, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    pack = IPY_GameWorld.IPY_COpenPackCount()  
 | 
    packType = pack.GetPackType()  
 | 
    if packType not in ChConfig.Def_Type_CanBuyPack_PlayerDict.keys():  
 | 
        return  
 | 
      
 | 
    buyCount = pack.GetCount()  
 | 
  
 | 
    #ÒѹºÂò¸ñ×ÓÊý  
 | 
    keyName = ChConfig.Def_Type_CanBuyPack_PlayerDict[packType][ChConfig.Def_PlayerPackDict_Index_Key]  
 | 
    curGridCnt = curPlayer.NomalDictGetProperty(keyName)    
 | 
      
 | 
    #ĬÈϸñ×ÓÊý  
 | 
    initCnt = ChConfig.Def_Type_CanBuyPack_PlayerDict[packType][ChConfig.Def_PlayerPackDict_Index_InitCnt]    
 | 
      
 | 
    curPack = curPlayer.GetItemManager().GetPack(packType)  
 | 
    curPackMaxCnt = curPack.GetMaxCount()  
 | 
      
 | 
    if packType in [IPY_GameWorld.rptPetCabinetPet, IPY_GameWorld.rptCabinetWeaponCoat,   
 | 
                    IPY_GameWorld.rptCabinetDressCoat, IPY_GameWorld.rptCabinetHorse]:  
 | 
        vipLv = curPlayer.GetVIPLv()  
 | 
        #curPackMaxCnt = ChConfig.Def_PackCnt_Fashion + PlayerVip.GetVipCabinetAddGridCnt(vipLv)  
 | 
          
 | 
    openAnonCnt =  initCnt + curGridCnt + buyCount  
 | 
      
 | 
    if curPackMaxCnt < openAnonCnt:  
 | 
        #ÊýÁ¿³¬¹ý×î´ó¸ñ×ÓÊý  
 | 
        GameWorld.DebugLog("¹ºÂò±³°ü¸ñ×Ó£¬ÊýÁ¿³¬¹ý×î´ó¸ñ×ÓÊý£¡packType=%s,buyCount=%s" % (packType, buyCount))  
 | 
        return  
 | 
     
 | 
    isBuyOK, costMoneyList = DoOpenGrid(curPlayer, curGridCnt, packType, buyCount)  
 | 
    if not isBuyOK:  
 | 
        return  
 | 
      
 | 
    #fromIndex, toIndex =  curGridCnt + 1, curGridCnt + buyCount    
 | 
#    GameWorld.Log("fromIndex=%s toIndex=%s"%(fromIndex, toIndex))  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, keyName, curGridCnt + buyCount)  
 | 
      
 | 
    if packType == IPY_GameWorld.rptItem:  
 | 
        #±³°üˢР 
 | 
        PlayerControl.Init_ItemPack(curPlayer)  
 | 
        #¿ª¸ñ×Ó£¬¼Ó¾Ñé  
 | 
        #OpenPackAddExp(curPlayer, packType, fromIndex, toIndex)  
 | 
        PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_671654")  
 | 
        #PlayerControl.SyncOnLineTimeTotal(curPlayer)  
 | 
        #PlayerControl.SyncOnLineTimeLastOpenPack(curPlayer, packType)  
 | 
          
 | 
          
 | 
    elif packType == IPY_GameWorld.rptWarehouse:  
 | 
        #²Ö¿âˢР 
 | 
        PlayerControl.Init_Warehouse(curPlayer)  
 | 
        #¿ª¸ñ×Ó£¬¼Ó¾Ñé  
 | 
        #OpenPackAddExp(curPlayer, packType, fromIndex, toIndex)  
 | 
              
 | 
    else:  
 | 
        #ÊÕÄɹñˢР 
 | 
        PlayerControl.Init_CabinetCountByType(curPlayer, packType)  
 | 
      
 | 
    DataRecordPack.DR_OpenPackCount(curPlayer, packType, buyCount, curPlayer.NomalDictGetProperty(keyName))  
 | 
      
 | 
    if costMoneyList:  
 | 
        #Ïû·Ñ¼Ç¼  
 | 
        for moneyType, money in costMoneyList:  
 | 
            GameWorld.Login_Interface_GoldRec(curPlayer, 0, 1, 'BuyPackGrid', moneyType, money)  
 | 
  
 | 
    return  
 | 
  
 | 
##¿ªÆô¸ñ×Ó¿ÛµÀ¾ß×êʯ  
 | 
# @param curPlayer Íæ¼Ò¶ÔÏó  
 | 
# @param buyMoney ×êʯÏûºÄ  
 | 
# @param packType ±³°üÀàÐÍ  
 | 
# @param curPack ÎïÆ·¹ÜÀíÆ÷  
 | 
# @param buyPackMoneyType »õ±ÒÀàÐÍ  
 | 
# @param buyCount ¹ºÂò¸ñ×ÓÊý  
 | 
# @return None ÊÇ·ñ¹ºÂò³É¹¦, Íæ¼ÒÊÇ·ñÓÐÇ®¿î  
 | 
def DoOpenGrid(curPlayer, curGridCnt, packType, buyCount):  
 | 
    curPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)  
 | 
      
 | 
    itemId = IpyGameDataPY.GetFuncCfg('OpenBagItem')  
 | 
    itemCntFormula = IpyGameDataPY.GetFuncCompileCfg('OpenBagItem', 2)  
 | 
    buyMoney = IpyGameDataPY.GetFuncCfg('OpenBagItem', 3)  
 | 
    totalItemCnt = 0  
 | 
    for index in range(curGridCnt+1, curGridCnt + buyCount+1):  
 | 
        itemcnt = eval(itemCntFormula)  
 | 
        totalItemCnt += itemcnt  
 | 
      
 | 
    hasEnough, indexList, findItemIsBind, lackCnt = ItemCommon.GetItem_FromPack_ByID_ExEx(itemId, curPack, totalItemCnt)  
 | 
      
 | 
    needMoney = lackCnt * buyMoney if not hasEnough else 0  
 | 
          
 | 
  
 | 
    # ÐèÒª¸¶Ç®  
 | 
    costMoneyList = []  
 | 
    if needMoney > 0:  
 | 
        costMoneyList = PlayerControl.HaveMoneyEx(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Paper, needMoney)  
 | 
        if costMoneyList == []:  
 | 
            #½ðÇ®²»×ã  
 | 
            return False, costMoneyList  
 | 
      
 | 
        #¸¶¿î  
 | 
        for moneyType, moneyCnt in costMoneyList:  
 | 
            infoDict = {"BuyCount":buyCount, ChConfig.Def_Cost_Reason_SonKey:packType}  
 | 
            if not PlayerControl.PayMoney(curPlayer, moneyType, moneyCnt, ChConfig.Def_Cost_BuyPack, infoDict, 1):  
 | 
                return False, costMoneyList  
 | 
      
 | 
    # ¿ÛµÀ¾ß  
 | 
    delCnt = max(0, totalItemCnt - lackCnt) # Êµ¼Ê¿Û³ýµÄ¸öÊý  
 | 
    if indexList:  
 | 
        ItemCommon.ReduceItem(curPlayer, curPack, indexList, delCnt, True)  
 | 
          
 | 
    return True, costMoneyList  
 | 
          
 | 
##¿ªÆôÎïÆ·±³°ü¸ñ×Ó»ò²Ö¿â¸ñ×Ó¿ÉÔö¼ÓµÄ¾ÑéÖµ  
 | 
# @param curPlayer Íæ¼Ò¶ÔÏó  
 | 
# @param packType ±³°üÀàÐÍ  
 | 
# @param packType ±³°üÀàÐÍ  
 | 
# @param packType ±³°üÀàÐÍ  
 | 
# @param needRefresh ÊÇ·ñÐèҪˢÐÂÍæ¼ÒÊôÐÔ  
 | 
# @return None  
 | 
def OpenPackAddExp(curPlayer, packType, fromIndex, toIndex, needRefresh = True):  
 | 
    cfgObj = PlayerExpandPackCfgMgr.GetExpandPackCfg(curPlayer, packType)  
 | 
    #ÕÒ²»ÕÒÕâÖÖ±³°üµÄÅäÖÃÐÅÏ¢¶ÔÏó  
 | 
    if not cfgObj:  
 | 
#        GameWorld.Log("not cfgObj")  
 | 
        return  
 | 
      
 | 
    attrInfo = cfgObj.GetTotalCanAddAttrInfo(curPlayer, fromIndex, toIndex)  
 | 
    #ûÕÒµ½ÊôÐÔÐÅÏ¢  
 | 
    if not attrInfo:  
 | 
#        GameWorld.Log("not attrInfo")  
 | 
        return  
 | 
#    GameWorld.Log("attrInfo=%s"%attrInfo)  
 | 
    playerControl = PlayerControl.PlayerControl(curPlayer)  
 | 
    #Ôö¼Ó¾Ñé  
 | 
    #֪ͨ»ñµÃ¾Ñé  
 | 
    addExp = attrInfo.get("Exp", 0)  
 | 
    if 0 != addExp:  
 | 
        playerControl.AddExp(addExp)  
 | 
    if needRefresh:  
 | 
        #ÖØË¢Ö÷½ÇÊôÐÔ  
 | 
        playerControl.RefreshAllState()  
 | 
      
 | 
      
 | 
          
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //16 0D ³èÎï×°±¸ºÏ³É#tagPetEquipMerge   
 | 
# struct tagPetEquipMerge   
 | 
# {   
 | 
# tagHead Head;   
 | 
# DWORD StuffIndex1; //×°±¸Ë÷Òý   
 | 
# DWORD StuffIndex2; //×°±¸Ë÷Òý   
 | 
# DWORD StuffIndex3; //×°±¸Ë÷Òý   
 | 
# BYTE AutoBuy; //ÊÇ·ñ×Ô¶¯¹ºÂò½á»êµÆ   
 | 
# };  
 | 
#===============================================================================  
 | 
##³èÎï×°±¸ºÏ³É#tagPetEquipMerge   
 | 
# @param index Íæ¼ÒË÷Òý  
 | 
# @param tick Ê±¼ä´Á  
 | 
# @return None  
 | 
# @remarks   
 | 
def CPetEquipMerge(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //08 26 ×°±¸Ö±½ÓÉýÐÇ#tagCEquipUpStarImmediately  
 | 
# struct         tagCEquipUpStarImmediately  
 | 
# {  
 | 
#         tagHead             Head;  
 | 
#         WORD                 ItemIndex;          // µÀ¾ßË÷Òý  
 | 
#         BYTE          PackType; //±³°üÀàÐÍ  
 | 
#         WORD                 EquipIndex;        //×°±¸ÔÚÏàÓ¦±³°üÖеÄË÷Òý   
 | 
# };  
 | 
#===============================================================================  
 | 
##×°±¸Ö±½ÓÉýÐÇ#tagCEquipUpStarImmediately  
 | 
# @param index Íæ¼ÒË÷Òý  
 | 
# @param tick Ê±¼ä´Á  
 | 
# @return None  
 | 
# @remarks   
 | 
def CEquipUpStarImmediately(index, tick):  
 | 
    return  
 | 
  
 | 
#---------------------------------------------------------------------  
 | 
#===============================================================================  
 | 
# //0D 12 Éñ±ø»½ÐÑ#tagCEquipWakeUp  
 | 
# struct         tagCEquipWakeUp  
 | 
# {  
 | 
#         tagHead             Head;  
 | 
#         WORD                 ItemIndex;                   //²ÄÁÏÔÚÎïÆ·±³°üÖеÄλÖÃË÷Òý  
 | 
#         BYTE          PackType;           //±³°üÀàÐÍ   
 | 
#         WORD                 EquipIndex;                 //×°±¸ÔÚÏàÓ¦±³°üÖеÄË÷Òý  
 | 
# };  
 | 
#===============================================================================  
 | 
##Éñ±ø»½ÐÑ#tagCEquipWakeUp  
 | 
# @param index Íæ¼ÒË÷Òý  
 | 
# @param tick Ê±¼ä´Á  
 | 
# @return None  
 | 
# @remarks   
 | 
def CEquipWakeUp(index, tick):  
 | 
    return  
 | 
  
 | 
#===============================================================================  
 | 
# #07 43 tagCEsotericaStudy  
 | 
# #struct tagCEsotericaStudy  
 | 
# #{  
 | 
# #    tagHead    Head;  
 | 
# #    WORD    ItemIndex;  
 | 
# #};  
 | 
#===============================================================================  
 | 
##ѧϰÎäÁÖÃØóÅ  
 | 
# @param index Íæ¼ÒË÷Òý  
 | 
# @param tick Ê±¼ä´Á  
 | 
# @return None  
 | 
def LearnWuLinSkill(index, tick):  
 | 
    return  
 | 
  
 | 
#===============================================================================  
 | 
# //A0 10 ¹ºÂòÕæÆø#tagPyCMBuyZhenqi  
 | 
# struct tagPyCMBuyZhenqi  
 | 
# {  
 | 
#    tagHead Head;      
 | 
# };  
 | 
#===============================================================================  
 | 
## A0 10 ¹ºÂòÕæÆø#tagPyCMBuyZhenqi  
 | 
#  @param index Ë÷Òý  
 | 
#  @param clientData ·â°ü½á¹¹Ìå  
 | 
#  @param tick Ê±¼ä´Á  
 | 
#  @return None  
 | 
#  @remarks  
 | 
def PlayerBuyZhenqi(index, clientData, tick):  
 | 
    #Operate_PlayerBuyZhenQi.PlayerBuyZhenQi(index, clientData, tick)  
 | 
    return  
 | 
  
 | 
  
 | 
#===============================================================================  
 | 
#===============================================================================  
 | 
# //B0 15 Íæ¼ÒÁìÈ¡Êղؼн±Àø#tagAskCollectPrize  
 | 
# struct tagAskCollectPrize  
 | 
# {  
 | 
#    tagHead Head;      
 | 
# };  
 | 
#===============================================================================  
 | 
## B0 15 Íæ¼ÒÁìÈ¡Êղؼн±Àø#tagAskCollectPrize  
 | 
#  @param index Ë÷Òý  
 | 
#  @param clientData ·â°ü½á¹¹Ìå  
 | 
#  @param tick Ê±¼ä´Á  
 | 
#  @return None  
 | 
#  @remarks  
 | 
def PlayerGetFavoriteAward(index, clientData, tick):  
 | 
    return  
 | 
  
 | 
  
 | 
#===============================================================================  
 | 
# //B0 01 ´ò¿ªÔ¶³ÌÉÌµê  
 | 
#   
 | 
# struct tagPyOpenLongShop  
 | 
# {  
 | 
#    tagHead Head;  
 | 
# };  
 | 
#===============================================================================  
 | 
## B0 01 ´ò¿ªÔ¶³ÌÉÌµê  
 | 
#  @param index Ë÷Òý  
 | 
#  @param clientData ·â°ü½á¹¹Ìå  
 | 
#  @param tick Ê±¼ä´Á  
 | 
#  @return None  
 | 
#  @remarks  
 | 
def PlayerOpenLongShop(index, clientData, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
      
 | 
    #ºìÃûÍæ¼ÒÎÞ·¨Ê¹ÓÃÔ¶³ÌÉÌµê  
 | 
    if curPlayer.GetPlayerNameColor() == IPY_GameWorld.pncRed or curPlayer.GetPKValue() > 0:  
 | 
        PlayerControl.NotifyCode(curPlayer, "PK_lhs_161795")  
 | 
        return  
 | 
          
 | 
    #µ±Ç°vipµÈ¼¶²»ÄÜʹÓÃÔ¶³ÌÉÌµê  
 | 
    #if not PlayerVip.GetVipCanLongShop(curPlayer):  
 | 
    #    moneyCnt, moneyType = ReadChConfig.GetEvalChConfig("DirectShopCost")  
 | 
    #    if not PlayerControl.PayMoney(curPlayer, moneyType, moneyCnt):  
 | 
    #        #½ðÇ®²»×ã  
 | 
    #        return  
 | 
    #      
 | 
              
 | 
    FunctionNPCCommon.StartTrade(curPlayer, tick)  
 | 
      
 | 
    #´¥·¢ÈÎÎñ  
 | 
    EventRespons_DirectFuncEvent(curPlayer, "open_shop")  
 | 
    return  
 | 
      
 | 
      
 | 
#===============================================================================  
 | 
#//A2 04 ÇëÇó´ò¿ªÔ¶³Ì²Ö¿â #tagCMOpenLongWarehouse  
 | 
#  
 | 
#struct    tagCMOpenLongWarehouse  
 | 
#{  
 | 
#    tagHead        Head;  
 | 
#};  
 | 
#===============================================================================  
 | 
## A2 04 ÇëÇó²Ö¿âÎïÆ·  
 | 
#  @param index Ë÷Òý  
 | 
#  @param clientData ·â°ü½á¹¹Ìå  
 | 
#  @param tick Ê±¼ä´Á  
 | 
#  @return None  
 | 
#  @remarks  
 | 
def PlayerOpenLongWarehouse(index, clientData, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    # Ôݲ»¼ÓCD·À·¶  
 | 
    curPlayer.Sync_WarehouseItem()  
 | 
      
 | 
    return  
 | 
  
 | 
#===============================================================================  
 | 
# //B0 06 ²é¿´¼Ò×åÕ½ÉêÇëÐÅÏ¢ #tagViewAllFamilyInfo  
 | 
#   
 | 
# struct    tagViewAllFamilyInfo  
 | 
# {  
 | 
#    tagHead        Head;  
 | 
# };  
 | 
#===============================================================================  
 | 
## B0 06 ²é¿´¼Ò×åÕ½ÉêÇëÐÅÏ¢  
 | 
#  @param index Ë÷Òý  
 | 
#  @param clientData ·â°ü½á¹¹Ìå  
 | 
#  @param tick Ê±¼ä´Á  
 | 
#  @return None  
 | 
#  @remarks  
 | 
def ViewAllFamilyInfo(index, clientData, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    PlayerFamily.SendPack_GameServer_ViewAllFamily(curPlayer)  
 | 
    return  
 | 
  
 | 
  
 | 
#===============================================================================  
 | 
# //B0 07 ²é¿´¼Ò×åÕù°ÔÕ½ÐÅÏ¢ #tagViewAllFamilyBattlenfo  
 | 
#   
 | 
# struct    tagViewAllFamilyBattlenfo  
 | 
# {  
 | 
#    tagHead        Head;  
 | 
# };  
 | 
#===============================================================================  
 | 
## B0 07 ²é¿´¼Ò×åÕù°ÔÕ½ÐÅÏ¢  
 | 
#  @param index Ë÷Òý  
 | 
#  @param clientData ·â°ü½á¹¹Ìå  
 | 
#  @param tick Ê±¼ä´Á  
 | 
#  @return None  
 | 
#  @remarks  
 | 
def ViewAllFamilyBattlenfo(index, clientData, tick):  
 | 
    return  
 | 
  
 | 
  
 | 
#===============================================================================  
 | 
#//B0 31 ¿Í»§¶ËµÇÈ뷽ʽ #tagPlayerLoginType  
 | 
#  
 | 
#struct tagPlayerLoginType  
 | 
#  
 | 
#{  
 | 
#    tagHead    Head;  
 | 
#    BYTE        LoginType;        //ÀàÐÍ  
 | 
#};  
 | 
#====================================  
 | 
## B0 31 ¿Í»§¶ËµÇÈ뷽ʽ  
 | 
#  @param index Ë÷Òý  
 | 
#  @param clientData ·â°ü½á¹¹Ìå  
 | 
#  @param tick Ê±¼ä´Á  
 | 
#  @return None  
 | 
def OnPlayerLoginType(index, clientData, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_LoginType, clientData.LoginType)  
 | 
    EventRespons_OnRevLoginType(curPlayer)  
 | 
    return  
 | 
  
 | 
  
 | 
#===============================================================================  
 | 
#//B0 32 µÇÈëÆ÷µÇÈëÁìÈ¡½±Àø #tagFastLoginPrize  
 | 
#  
 | 
#struct tagFastLoginPrize  
 | 
#{  
 | 
#    tagHead    Head;  
 | 
#};  
 | 
#====================================  
 | 
## B0 32 µÇÈëÆ÷µÇÈëÁìÈ¡½±Àø  
 | 
#  @param index Ë÷Òý  
 | 
#  @param clientData ·â°ü½á¹¹Ìå  
 | 
#  @param tick Ê±¼ä´Á  
 | 
#  @return None  
 | 
def OnRewardByLoginType(index, clientData, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    RunQuestEvent(curPlayer, "on_logintype", "on_reward_bylogintype", Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
#=======================================================================================================================  
 | 
# //A0 17  ÁìȡÿÌìÎïÆ· #tagGiveItemByDay  
 | 
#   
 | 
# struct    tagGiveItemByDay  
 | 
#   
 | 
# {  
 | 
#    tagHead        Head;  
 | 
# };  
 | 
#=======================================================================================================================  
 | 
## A0 17 ÁìȡÿÈÕÎïÆ·  
 | 
#  @param index Ë÷Òý  
 | 
#  @param clientData ·â°ü½á¹¹Ìå  
 | 
#  @param tick Ê±¼ä´Á  
 | 
#  @return None  
 | 
def GiveItemByDay(index, clientData, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    EventRespons_PlayerEvent(curPlayer, "player_give_item")  
 | 
    return  
 | 
  
 | 
  
 | 
##ÈÎÎñ´¥·¢Æ÷ÔڼǼµÇ½ģʽµÄʱºò´¥·¢  
 | 
#@param curPlayer Íæ¼ÒʵÀý  
 | 
#@return ·µ»ØÖµÎÞÒâÒå  
 | 
def EventRespons_OnRevLoginType(curPlayer):  
 | 
    RunQuestEvent(curPlayer, "on_revlogintype_event", "on_revlogintype_event", Def_RunQuestType_Normal)  
 | 
    return  
 | 
  
 | 
#// A2 07 ½ÓÊÜÈÎÎñ #tagCMTakeTask  
 | 
#  
 | 
#struct    tagCMTakeTask  
 | 
#{  
 | 
#    tagHead        Head;  
 | 
#    DWORD        TaskID;  
 | 
#};  
 | 
def OnTakeTask(index, clientData, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
      
 | 
    missionID = clientData.TaskID  
 | 
    curMission = curPlayer.FindMission(missionID)  
 | 
    if not curMission:  
 | 
        return  
 | 
      
 | 
    missionState = curMission.GetState()  
 | 
    if missionState != ChConfig.Def_Mission_State_NoAccept:  
 | 
        return  
 | 
      
 | 
    curQuestData = QuestManager.FindQuest(missionID)  
 | 
    if not curQuestData:  
 | 
        return  
 | 
      
 | 
    QuestCommon.SetPlayerMissionState(curPlayer, curMission, 1)  
 | 
    return  
 | 
  
 | 
#// A2 18 Íê³ÉÈÎÎñ #tagCMFinishTask  
 | 
#  
 | 
#struct tagCMFinishTask  
 | 
#{  
 | 
#    tagHead         Head;  
 | 
#    DWORD        TaskID;  
 | 
#    WORD        RewardPer;    // ½±Àø°Ù·Ö±È, Ä¬ÈÏ100;  150Ôò´ú±í1.5±¶  
 | 
#};  
 | 
def OnPlayerFinishTask(index, clientData, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    taskID = clientData.TaskID  
 | 
    rewardPer = clientData.RewardPer  
 | 
      
 | 
    if taskID <= 0:  
 | 
        return  
 | 
      
 | 
    EventRespons_OnFinishTask(curPlayer, taskID, rewardPer)  
 | 
    return  
 | 
  
 | 
## A2 06 ¿ìËÙÍê³ÉÈÎÎñ#tagCMQuickFinishMission  
 | 
#  @param index Ë÷Òý  
 | 
#  @param clientData ·â°ü½á¹¹Ìå  
 | 
#  @param tick Ê±¼ä´Á  
 | 
#  @return None  
 | 
def PlayerQuickFinishTask(index, clientData, tick):  
 | 
    missionID = clientData.MissionID  
 | 
    if missionID <= 0:  
 | 
        return  
 | 
      
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    doType = clientData.DoType  
 | 
    if doType == 1:  
 | 
        EventRespons_OnQuickFinishAllAround(curPlayer, missionID)  
 | 
    else:  
 | 
        EventRespons_OnQuickFinishTask(curPlayer, missionID)  
 | 
    return  
 | 
  
 | 
  
 | 
## A2 09 ÉèÖû·ÈÎÎñÐǼ¶#tagCMSetRunMissionStar  
 | 
#  @param index Ë÷Òý  
 | 
#  @param clientData ·â°ü½á¹¹Ìå  
 | 
#  @param tick Ê±¼ä´Á  
 | 
#  @return None  
 | 
def PlayerSetRunMissionStar(index, clientData, tick):  
 | 
    missionID = clientData.MissionID  
 | 
    if missionID <= 0:  
 | 
        return  
 | 
  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    EventRespons_OnSetMissionStar(curPlayer, missionID)  
 | 
    return  
 | 
  
 | 
  
 | 
## A2 15 ¹ºÂòÈÕ³£ÈÎÎñ´ÎÊýÉÏÏÞ#tagCMBuyDayMissionSum  
 | 
#  @param index Ë÷Òý  
 | 
#  @param clientData ·â°ü½á¹¹Ìå  
 | 
#  @param tick Ê±¼ä´Á  
 | 
#  @return None  
 | 
def PlayerBuyDayMissionSum(index, clientData, tick):  
 | 
    buyNum = clientData.BuyNum  
 | 
    if buyNum <= 0:  
 | 
        return  
 | 
  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    EventRespons_OnBuyDayMissionSum(curPlayer, buyNum)  
 | 
    return  
 | 
  
 | 
## A2 15 ÁìÈ¡»·ÈÎÎñÿÂÖ½±Àø#tagCMGetRunTaskEndAward  
 | 
#  @param index Ë÷Òý  
 | 
#  @param clientData ·â°ü½á¹¹Ìå  
 | 
#  @param tick Ê±¼ä´Á  
 | 
#  @return None  
 | 
def OnGetRunTaskAward(index, clientData, tick):  
 | 
    taskType = clientData.Type  
 | 
    if taskType not in [QuestCommon.Def_Mission_Type_RunDaily, QuestCommon.Def_Mission_Type_RunFamily]:  
 | 
        GameWorld.DebugLog('ÁìÈ¡»·ÈÎÎñÿÂÖ½±Àø ÀàÐÍ´íÎó %s'%taskType)  
 | 
        return  
 | 
      
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
  
 | 
    hasGotAward = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RunTaskAwardState % taskType)  
 | 
    if hasGotAward:  
 | 
        GameWorld.DebugLog('ÁìÈ¡»·ÈÎÎñÿÂÖ½±Àø  Òѽ±Àø ÀàÐÍ %s'%taskType)  
 | 
        return  
 | 
    #ÎïÆ·½±Àø  
 | 
    itemList = []  
 | 
    itemAwardDict = IpyGameDataPY.GetFuncEvalCfg('RunTaskAward', 3, {})  
 | 
    if str(taskType) in itemAwardDict:  
 | 
        itemList = itemAwardDict[str(taskType)]  
 | 
        # ¼ì²é±³°ü  
 | 
        needSpace = len(itemList)  
 | 
        packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)  
 | 
        if needSpace > packSpace:  
 | 
            PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")  
 | 
            return  
 | 
        for itemID, itemCount, isBind in itemList:  
 | 
            ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, 0, [IPY_GameWorld.rptItem])  
 | 
      
 | 
    #¸ø¾Ñé  
 | 
    giveExp = 0  
 | 
    expAwardDict = IpyGameDataPY.GetFuncEvalCfg('RunTaskAward', 4, {})  
 | 
    if str(taskType) in expAwardDict:  
 | 
        reExp = PlayerControl.GetPlayerReExp(curPlayer)  
 | 
        giveExp = eval(expAwardDict[str(taskType)])  
 | 
        PlayerControl.PlayerControl(curPlayer).AddExp(giveExp)  
 | 
      
 | 
    #¸øÇ®  
 | 
    moneyType = 0  
 | 
    moneyNum = 0  
 | 
    runTaskMoneyAwardDict = IpyGameDataPY.GetFuncEvalCfg('RunTaskAward')  
 | 
    if taskType in runTaskMoneyAwardDict:  
 | 
        specialAwardDict = IpyGameDataPY.GetFuncEvalCfg('RunTaskAward', 2, {})  
 | 
        if taskType in specialAwardDict:  
 | 
            rate, moneyCnt = specialAwardDict[taskType]  
 | 
            if GameWorld.CanHappen(rate):  
 | 
                moneyNum = moneyCnt  
 | 
                if taskType == QuestCommon.Def_Mission_Type_RunDaily:  
 | 
                    PlayerControl.WorldNotify(0, 'CoinTaskReward', [curPlayer.GetName()])  
 | 
        moneyType, minMoney, maxMoney = runTaskMoneyAwardDict[taskType]  
 | 
        if not moneyNum:  
 | 
            moneyNum = random.randint(minMoney, maxMoney)  
 | 
        if moneyType == ShareDefine.TYPE_Price_Family_Contribution:  
 | 
            PlayerFamily.AddPlayerFamilyActiveValue(curPlayer, moneyNum, True, ShareDefine.Def_AddFAVReason_DoFamilyMisson)  
 | 
        else:  
 | 
            addDataDict = {ChConfig.Def_Give_Reason_SonKey:"Run"}  
 | 
            PlayerControl.GiveMoney(curPlayer, moneyType, moneyNum, ChConfig.Def_GiveMoney_Mission, addDataDict, False)  
 | 
          
 | 
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RunTaskAwardRecord % taskType, moneyNum)  
 | 
          
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RunTaskAwardState % taskType, 1)  
 | 
    GameWorld.DebugLog('ÁìÈ¡»·ÈÎÎñÿÂÖ½±Àø³É¹¦  moneyType=%s, moneyNum=%s, itemList=%s, giveExp=%s'%(moneyType, moneyNum, itemList, giveExp))  
 | 
      
 | 
    #֪ͨ¿Í»§¶Ë  
 | 
    NotifyRunEndAward(curPlayer, taskType)  
 | 
  
 | 
      
 | 
    #ɾ³ýÁìÈ¡½±ÀøµÄÈÎÎñ (¸ÄÓÉÈÎÎñ½Å±¾´¥·¢ÏÂÒ»»·)  
 | 
    EventRespons_GetLastRunTaskAward(curPlayer, taskType)  
 | 
#    runTaskAwardTaskIDDict = IpyGameDataPY.GetFuncEvalCfg('RunTaskAwardTaskID')  
 | 
#    runTaskAwardTaskID = runTaskAwardTaskIDDict.get(taskType, 0)  
 | 
#    if runTaskAwardTaskID:  
 | 
#        QuestCommon.DeleteMission(curPlayer, runTaskAwardTaskID)  
 | 
      
 | 
    #¸üÐÂÏÂÂÖÈÎÎñ  
 | 
#    mission_1 = QuestCommon.GetCommonMission(curPlayer)  
 | 
#    if not mission_1:  
 | 
#        return  
 | 
#    nextMissionID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RunTaskNextMissionID % taskType)  
 | 
#    if not nextMissionID:  
 | 
#        #ûÓÐÏÂÂÖÈÎÎñ  
 | 
#        return  
 | 
#    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_RunTaskNextMissionID % taskType, 0)  
 | 
#    if not curPlayer.FindMission(nextMissionID):  
 | 
#        QuestCommon.AddNewMission(curPlayer, nextMissionID)  
 | 
#    nextMission = curPlayer.FindMission(nextMissionID)  
 | 
#    QuestCommon.SetPlayerMissionState(curPlayer, nextMission, 1)  
 | 
#    nextMission.SetMissionState(1)  
 | 
#    nextMission.SetDescriptionIndex(0)  
 | 
#  
 | 
#    #ÏÈÇå¿Õ×ÖµäÔÙÉèÖÃеÄ×Öµä  
 | 
#    curPlayer.Sync_ClearMissionDict(nextMissionID)  
 | 
#    nextMission.ClearProperty()  
 | 
#    Def_Around_AllCount = QuestRunner.GetRunKey(taskType, QuestRunner.Key_Around_AllCount)  
 | 
#    Def_Around_Count = QuestRunner.GetRunKey(taskType, QuestRunner.Key_Around_Count)  
 | 
#    mission_1.SetProperty(Def_Around_Count,0)  
 | 
#    #×Ü»·Êý  
 | 
#    allCount = mission_1.GetProperty(Def_Around_AllCount)  
 | 
#    #µ¥ÂÖÒÑ×ö»·Êý  
 | 
#    #aroundCount = mission_1.GetProperty(Def_Around_Count)  
 | 
#    nextMission.SetProperty(Def_Around_AllCount, allCount)  
 | 
#    nextMission.SetProperty(Def_Around_Count, 0)  
 | 
#      
 | 
#    #ÉèÖÃËæ»úÈÎÎñʼþ  
 | 
#    EventRespons_SetRunAround(curPlayer, nextMissionID)  
 | 
#      
 | 
#      
 | 
#   
 | 
#    NotifyOneMission(curPlayer, nextMission, isNotifyAll = False)  
 | 
    return  
 | 
  
 | 
def NotifyRunEndAward(curPlayer, taskType=-1):  
 | 
    ## Í¨ÖªÅÜ»·ÂÖ½±Àø  
 | 
    taskTypeList = [QuestCommon.Def_Mission_Type_RunDaily, QuestCommon.Def_Mission_Type_RunFamily] if taskType == -1 else [taskType]  
 | 
    infoPack = ChPyNetSendPack.tagMCRunTaskAwardInfo()  
 | 
    infoPack.Clear()  
 | 
    infoPack.InfoList = []  
 | 
    for ttype in taskTypeList:  
 | 
        recordPack = ChPyNetSendPack.tagMCRunTaskAwardRecord()  
 | 
        recordPack.Type = ttype  
 | 
        recordPack.Num = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RunTaskAwardRecord % ttype)  
 | 
        recordPack.AwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_RunTaskAwardState % ttype)  
 | 
        infoPack.InfoList.append(recordPack)  
 | 
    infoPack.Cnt = len(infoPack.InfoList)  
 | 
    NetPackCommon.SendFakePack(curPlayer, infoPack)  
 | 
    return  
 | 
  
 | 
#// A2 24 ´¥ÅöNPC #tagCMTouchNPC  
 | 
#  
 | 
#struct     tagCMTouchNPC  
 | 
#{  
 | 
#    tagHead        Head;  
 | 
#    DWORD        ObjID;  
 | 
#};  
 | 
def MoveTouchNPC(index, clientData, tick):  
 | 
    #´¥ÅöNPC  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    eventNPCID = clientData.ObjID  
 | 
    curNPC = GameWorld.GetNPCManager().FindNPCByID(eventNPCID)  
 | 
      
 | 
    #ûÓÐÕâ¸öNPC  
 | 
    if curNPC == None :  
 | 
        return  
 | 
    dist = GameWorld.GetDist(curPlayer.GetPosX(), curPlayer.GetPosY(), curNPC.GetPosX(), curNPC.GetPosY())  
 | 
      
 | 
    if dist > ChConfig.Def_EventDist:  
 | 
        #Íæ¼Ò¾àÀë¹ýÔ¶, ²»ÄÜ´¥·¢  
 | 
        return  
 | 
      
 | 
    if curNPC.GetType() != ChConfig.ntTouchKill:  
 | 
        return  
 | 
    #¸±±¾  
 | 
    FBLogic.OnMoveTouchNPC(curPlayer, curNPC, tick)  
 | 
      
 | 
    #Âß¼´¦ÀíÍêºóɱËÀNPC  
 | 
    npcControl = NPCCommon.NPCControl(curNPC)  
 | 
    npcControl.SetKilled()  
 | 
    return  
 | 
  
 | 
  
 | 
## ¿Í»§¶ËÈÎÎñ¼ÆÊý  
 | 
#===============================================================================  
 | 
# //A2 25 ¿Í»§¶ËÈÎÎñ¼ÆÊý # tagCMClientTaskCount  
 | 
#   
 | 
# struct     tagCMClientTaskCount  
 | 
# {  
 | 
#    tagHead        Head;  
 | 
#    DWORD        CountID;        // ¼ÆÊýID£¬¿Í»§¶ËÓë²ß»®Ô¼¶¨£¬¿ÉÒÔÊÇNPCID»òÆäËû  
 | 
# };  
 | 
#===============================================================================  
 | 
def ClientTaskCount(index, clientData, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    RunQuestEvent(curPlayer, "on_client_by_id", clientData.CountID, Def_RunQuestType_Normal)  
 | 
  
 | 
  
 |