[JX] Vấn đề trên server build source
Follow us on
Follow us on Facebook Follow us on Twitter Linked In Flickr Watch us on YouTube My Space Blogger
 
Kết quả 1 đến 8 của 8
  1. #1
    Thành Viên
    Ngày tham gia
    May 2006
    Bài viết
    103
    Thanks
    20
    Thanked 1 Time in 1 Post

    Vấn đề trên server build source

    Em đang làm 1 sv cho mình với source và sv nên đc share trên diễn đàn . nhưng sau khi build xong chạy sever phát sinh một vài vấn đề như sau.
    - sever không load npc và quái trên map
    + vấn đền trên em đã cố gắng khắc phục bằng cách copy script từ 1 sever khác sang .. nhưng không hiểu tại sao npc và map vẫn chưa đc load ra .
    - nhân vật có item skill đồ trên người không login vào lại đc
    + cụ thể vấn đề này là sau khi em add một vài script vào để test trên cái obj trong map ba lăng, em lấy exp đồ và kỹ năng sau đó thoát ra và tắt sv đúng theo trình tự gs > replay> godess > bishop > paysys nhưng nhân vật khi mở sever login lại ... thì không vào lại đc nữa ở gs báo là playerdbloading erro thì phải . @@

    không biết các vấn đề trên của em có ai bị qua chưa mong đc mọi người giúp đỡ .
    Khách viếng thăm hãy cùng savatage91 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  2. #2
    Super Moderator thaihoa91's Avatar
    Ngày tham gia
    Apr 2008
    Bài viết
    12,110
    Thanks
    662
    Thanked 3,168 Times in 1,602 Posts

    Ðề: Vấn đề trên server build source

    Bạn ko nên dùng code của Server khác đem vào, đặc biệt là additem hay thêm NPC, vì bản thân ID Item và ID NPC mỗi Server mỗi khác nhau, trộn có thể dẫn tới nhìu lỗi nặng !
    Khách viếng thăm hãy cùng thaihoa91 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  3. Các thành viên gởi lời cảm ơn đến thaihoa91 vì bài viết này !

    savatage91 (21-01-13)

  4. #3
    Thành Viên
    Ngày tham gia
    May 2006
    Bài viết
    103
    Thanks
    20
    Thanked 1 Time in 1 Post

    Ðề: Vấn đề trên server build source

    thaihoa có thể chỉ bảo giúp mình thêm một chút đc không .. hiện h mình cũng chưa hiểu làm sao để một file lua của mình viết ra làm sao để kích hoạt nó ví dụ khi mở sever lên thì file lua này sẽ đc chạy đồng nghĩa với các code trong đó cũng chạy luôn
    Khách viếng thăm hãy cùng savatage91 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  5. #4
    Super Moderator thaihoa91's Avatar
    Ngày tham gia
    Apr 2008
    Bài viết
    12,110
    Thanks
    662
    Thanked 3,168 Times in 1,602 Posts

    Ðề: Vấn đề trên server build source

    Trích dẫn Gửi bởi savatage91 [Only registered and activated users can see links. ]
    thaihoa có thể chỉ bảo giúp mình thêm một chút đc không .. hiện h mình cũng chưa hiểu làm sao để một file lua của mình viết ra làm sao để kích hoạt nó ví dụ khi mở sever lên thì file lua này sẽ đc chạy đồng nghĩa với các code trong đó cũng chạy luôn
    Bạn học trong Ebook, LUA đơn giản là bạn viết vào chính file .lua của NPC mà bạn cần đối thoại !
    Khách viếng thăm hãy cùng thaihoa91 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  6. Các thành viên gởi lời cảm ơn đến thaihoa91 vì bài viết này !

    savatage91 (21-01-13)

  7. #5
    Thành Viên
    Ngày tham gia
    May 2006
    Bài viết
    103
    Thanks
    20
    Thanked 1 Time in 1 Post

    Ðề: Vấn đề trên server build source

    cái đó mình biết nhưng hiện tại khi sever đang sài là sever nên để down dùng trên source . không có bất kỳ 1 npc nào trong script cả ... mà theo như bạn nói thì không nên copy script từ sv khác ... vậy mình muốn add npc và quái có lẽ phải viết lại 1 lua đúng không ?
    và mình cũng có xem qua một số sv hiện tại thấy mọi người viết 1 script riêng mà không hiểu sao gs có thể load scipt của họ ??? mình đang thắc mắc không biết có phải còn code trong gs nữa không ?
    Lần sửa cuối bởi savatage91, ngày 21-01-13 lúc 04:55 PM.
    Khách viếng thăm hãy cùng savatage91 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  8. #6
    Thành Viên thienthanden2's Avatar
    Ngày tham gia
    Jun 2007
    Đang ở
    Thiên đường đã lỡ...
    Bài viết
    217
    Thanks
    14
    Thanked 183 Times in 73 Posts

    Ðề: Vấn đề trên server build source

    Trích dẫn Gửi bởi savatage91 [Only registered and activated users can see links. ]
    cái đó mình biết nhưng hiện tại khi sever đang sài là sever nên để down dùng trên source . không có bất kỳ 1 npc nào trong script cả ... mà theo như bạn nói thì không nên copy script từ sv khác ... vậy mình muốn add npc và quái có lẽ phải viết lại 1 lua đúng không ?
    và mình cũng có xem qua một số sv hiện tại thấy mọi người viết 1 script riêng mà không hiểu sao gs có thể load scipt của họ ??? mình đang thắc mắc không biết có phải còn code trong gs nữa không ?
    Bạn có thể dùng setting + map + script của sv nhokyeunhac cho newbie vẫn đc bình thường. Map ba lăng có 1 tảng đá, bạn có thể vào file lua của tảng đá đó để code thêm gì cũng đc. Còn khi học skill thì ko vào game đc thì phải sửa lại như sau:
    Trong file \JX\swrod3\SwordOnline\Sources\Core\Src\KPlayerDBF uns.cpp tìm cái hàm này và sửa lại y như vầy (đoạn gần DBLOADPERTIME_SKILL) sau đó build lại core là vào đc.
    Code:
    int	KPlayer::LoadPlayerFightSkillList(BYTE * pRoleBuffer, BYTE * &pFightBuffer, unsigned int& nParam)
    {
    	KASSERT(pRoleBuffer);
    	int nSkillCount = 0;
    	char szSkillId[100];
    	char szSkillLevel[100];
    	nSkillCount = ((TRoleData*)(pRoleBuffer))->nFightSkillCount;
    	
    	if (nSkillCount == 0)	
    		return 1;
    	
    	if (nParam >= nSkillCount )	
    		return -1;
    	
    	int nBegin	= nParam;
    	//int nEnd	= nBegin + DBLOADPERTIME_SKILL;
    	//if (nEnd > nSkillCount) 	
    	int nEnd = nSkillCount;
    	nParam = nEnd;
    	TDBSkillData * pSkillData = NULL;
    	if (nBegin == 0)
    		pSkillData = (TDBSkillData *)((BYTE*)pRoleBuffer + ((TRoleData*)pRoleBuffer)->dwFSkillOffset);
    	else
    		pSkillData = (TDBSkillData*)pFightBuffer;
    	for (int i = nBegin ; i < nEnd; i ++, pSkillData ++ )
    	{
    		int nSkillId = 0;
    		int nSkillLevel = 0;
    		nSkillId = pSkillData->m_nSkillId;
    		nSkillLevel = pSkillData->m_nSkillLevel;
    		Npc[m_nIndex].m_SkillList.Add(nSkillId, nSkillLevel);
    	}
    	pFightBuffer = (BYTE*) pSkillData;
    
    	if (nParam >= nSkillCount) return 1;
    	else 
    		return 0;
    }
    Khách viếng thăm hãy cùng thienthanden2 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  9. Các thành viên gởi lời cảm ơn đến thienthanden2 vì bài viết này !

    savatage91 (21-01-13)

  10. #7
    Thành Viên
    Ngày tham gia
    May 2006
    Bài viết
    103
    Thanks
    20
    Thanked 1 Time in 1 Post

    Ðề: Vấn đề trên server build source

    Code:
    #include "KCore.h"
    
    #ifdef _SERVER
    #include "KEngine.h"
    #include "KSubWorldSet.h"
    #include "KSubWorld.h"
    #include "KPlayer.h"
    #ifndef _STANDALONE
    #include "../../../lib/S3DBInterface.h"
    #else
    #include "S3DBInterface.h"
    #endif
    #include "KNpc.h"
    #include "KItem.h"
    #include "KItemList.h"
    #include "KItemGenerator.h"
    #include "KItemSet.h"
    #include "KNpcSet.h"
    #include "KPlayerSet.h"
    #include "KItemChangeRes.h"
    #include <time.h>
    //#include "MyAssert.H"
    #include "KTaskFuns.h"
    
    
    // ÊÇ·ñ½«Êý¾Ý¿â´æÈ¡µµµÄÊý¾Ý±£´æÏÂÀ´ÒÔ¹©µ÷ÊÔ
    //#define DEBUGOPT_DB_ROLEDATA_OUT 
    
    
    
    
    KList g_DBMsgList;
    
    int KPlayer::AddDBPlayer(char * szPlayerName, int sex, DWORD * pdwID)
    {
    	return FALSE;
    }
    
    int KPlayer::LoadDBPlayerInfo(BYTE *pPlayerInfo, int &nStep, unsigned int &nParam)
    {
    	_ASSERT(pPlayerInfo);
    	int nRet = 0;
    	int nRetValue = 0;
    	
    	switch(nStep)
    	{
    	case STEP_BASE_INFO:
    		//Êý¾Ý¿âÖÐÍæ¼Ò»ù±¾ÐÅÏ¢±í
    		m_pCurStatusOffset = pPlayerInfo;
    		
    		if ((nRet = LoadPlayerBaseInfo(pPlayerInfo, m_pCurStatusOffset, nParam)) == 1)
    		{
    			nRetValue = SendSyncData(nStep, nParam);
    			nStep++; 
    			nParam = 0;
    		}
    		else 
    		{
    			if (nRet == -1)
    			{
    				nStep++;
    				nParam = 0;
    				return 0;
    			}
    			else
    			{
    				nRetValue = SendSyncData(nStep, nParam);
    			}
    		}
    		break;
    	case STEP_FIGHT_SKILL_LIST:
    		//************************************************
    		// Íæ¼ÒµÄÕ½¶·¼¼ÄÜÁбí
    		if ((nRet = LoadPlayerFightSkillList(pPlayerInfo, m_pCurStatusOffset, nParam)) == 1)
    		{
    			nRetValue = SendSyncData(nStep, nParam);
    			nStep++;
    			nParam = 0;
    		}
    		else
    		{
    			if (nRet == -1)
    			{
    				nStep++;
    				nParam = 0;
    				return 0;
    			}
    //			else
    //			{
    //				nRetValue = SendSyncData(nStep, nParam);
    //			}
    		}
    		break;
    	case STEP_LIFE_SKILL_LIST:
    		//*************************************************
    		// Íæ¼ÒµÄÉú»î¼¼ÄÜÁбí
    		if ((nRet = LoadPlayerLifeSkilllList(pPlayerInfo, m_pCurStatusOffset, nParam)) == 1)
    		{
    			nRetValue = SendSyncData(nStep, nParam);
    			nStep++;
    			nParam = 0;
    		}
    		else
    		{
    			if (nRet == -1)
    			{
    				nStep ++;
    				nParam = 0;
    				return 0;
    			}
    			else
    			{
    				nRetValue = SendSyncData(nStep, nParam);
    			}
    		}
    		
    		break;
    		
    	case STEP_TASK_LIST:
    		//*************************************************		
    		// Íæ¼ÒµÄÈÎÎñÁбí
    		if ((nRet = LoadPlayerTaskList(pPlayerInfo, m_pCurStatusOffset, nParam)) == 1)
    		{
    			
    			int i = 0;
    			for (i  = 0; i < TASKVALUE_MAXWAYPOINT_COUNT; i ++)
    			{
    				int nWayPoint = m_cTask.nSave[TASKVALUE_SAVEWAYPOINT_BEGIN + i];
    				if (nWayPoint)
    				{
    					KIndexNode * pNewNode = new KIndexNode;
    					pNewNode->m_nIndex = nWayPoint;
    					m_PlayerWayPointList.AddTail(pNewNode);
    				}
    			}
    			
    			for (i  = 0; i < TASKVALUE_MAXSTATION_COUNT / 2; i ++)
    			{
    				DWORD Stations = 0;
    				if (Stations = (DWORD) m_cTask.GetSaveVal(TASKVALUE_SAVESTATION_BEGIN + i))
    				{
    					int nStation1 = (int) HIWORD(Stations);
    					int nStation2 = (int) LOWORD(Stations);
    					
    					if (nStation1)
    					{
    						KIndexNode * pNewNode = new KIndexNode;
    						pNewNode->m_nIndex = nStation1;
    						m_PlayerStationList.AddTail(pNewNode);
    					}
    					
    					if (nStation2)
    					{
    						KIndexNode * pNewNode = new KIndexNode;
    						pNewNode->m_nIndex = nStation2;
    						m_PlayerStationList.AddTail(pNewNode);
    					}
    				}
    			}
    			g_TimerTask.LoadTask(this);
    			nRetValue = SendSyncData(nStep, nParam);
    			nStep++;
    			nParam = 0;
    		}
    		else
    		{
    			if (nRet == -1)
    			{
    				nStep ++;
    				nParam = 0;
    				return 0;
    			}
    			else
    			{
    				nRetValue = SendSyncData(nStep, nParam);
    			}
    		}
    		break;
    	case STEP_ITEM_LIST:
    		//*************************************************
    		// Íæ¼ÒµÄ×°±¸Áбí
    		if ((nRet = LoadPlayerItemList(pPlayerInfo, m_pCurStatusOffset, nParam)) == 1)
    		{
    			nRetValue = SendSyncData(nStep, nParam);
    			nStep++;
    			nParam = 0;
    		}
    		else
    		{
    			if (nRet == -1)
    			{
    				nStep ++;
    				nParam = 0;
    				return 0;
    			}
    			else
    			{
    				nRetValue = SendSyncData(nStep, nParam);
    			}
    		}
    		break;
    	default:
    		nStep = STEP_SYNC_END;
    		break;
    	}
    	return nRetValue;
    }
    
    int KPlayer::UpdateDBPlayerInfo(BYTE* pPlayerInfo)
    {
    	//×¢Ò⣬´æµµÈ¡µµ¶¼±ØÐë°´ÕÕP˳Ðò
    	if (!pPlayerInfo)
    		return -1;
    
    	//Êý¾Ý¿âÖÐÍæ¼Ò»ù±¾ÐÅÏ¢±í
    	SavePlayerBaseInfo(pPlayerInfo);
    
    	// Íæ¼ÒµÄÕ½¶·¼¼ÄÜÁбí
    	SavePlayerFightSkillList(pPlayerInfo);
    
    	// Íæ¼ÒµÄÉú»î¼¼ÄÜÁбí
    	SavePlayerLifeSkilllList(pPlayerInfo);
    
    	// Íæ¼ÒµÄÈÎÎñÁбí
    	SavePlayerTaskList(pPlayerInfo);
    
    	// Íæ¼ÒµÄÎïÆ·Áбí
    	SavePlayerItemList(pPlayerInfo);
    
    	//Íæ¼ÒµÄºÃÓÑÁбí//
    //	SavePlayerFriendList(pPlayerInfo);
    
    	return 1;	
    }
    
    int	KPlayer::LoadPlayerBaseInfo(BYTE  * pRoleBuffer, BYTE * &pCurData, unsigned int &nParam)
    {
    	if (!pRoleBuffer)
    	{
    		KASSERT(pRoleBuffer);
    		return -1;
    	}
    	
    	TRoleData * pRoleData = (TRoleData*)pRoleBuffer;
    	
    	if (nParam != 0) return -1;
    	
    	int		nSex;
    	int		nLevel;	
    #define PLAYER_MALE_NPCTEMPLATEID		-1
    #define PLAYER_FEMALE_NPCTEMPLATEID		-2
    
    
    	nLevel = pRoleData->BaseInfo.ifightlevel;
    	nSex = pRoleData->BaseInfo.bSex;
    	if (nSex)
    		nSex = MAKELONG(nLevel, PLAYER_FEMALE_NPCTEMPLATEID);
    	else
    		nSex = MAKELONG(nLevel, PLAYER_MALE_NPCTEMPLATEID);
    
    	//µÇÈëµã
    	m_sLoginRevivalPos.m_nSubWorldID = pRoleData->BaseInfo.irevivalid;
    	m_sLoginRevivalPos.m_ReviveID = pRoleData->BaseInfo.irevivalx;
    	//---------------------------------------------------------------------------------------------
    label_retry:
    	POINT Pos;
    	g_SubWorldSet.GetRevivalPosFromId(m_sLoginRevivalPos.m_nSubWorldID,
    		m_sLoginRevivalPos.m_ReviveID,
    		&Pos);
    	
    	m_sLoginRevivalPos.m_nMpsX = Pos.x;
    	m_sLoginRevivalPos.m_nMpsY = Pos.y;
    		//---------------------------------------------------------------------------------------------
    	PLAYER_REVIVAL_POS	tempPos;
    
    	if (pRoleData->BaseInfo.cUseRevive)
    	{
    		tempPos.m_nSubWorldID = m_sLoginRevivalPos.m_nSubWorldID;
    		tempPos.m_ReviveID = m_sLoginRevivalPos.m_ReviveID;
    		tempPos.m_nMpsX = m_sLoginRevivalPos.m_nMpsX;
    		tempPos.m_nMpsY = m_sLoginRevivalPos.m_nMpsY;
    	}
    	else
    	{
    		tempPos.m_nSubWorldID = pRoleData->BaseInfo.ientergameid;
    		tempPos.m_nMpsX = pRoleData->BaseInfo.ientergamex;
    		tempPos.m_nMpsY = pRoleData->BaseInfo.ientergamey;
    	}
    
    	m_nIndex = NpcSet.Add(nSex, 
    		g_SubWorldSet.SearchWorld(tempPos.m_nSubWorldID),
    		tempPos.m_nMpsX,
    		tempPos.m_nMpsY);
    
    	if(m_nIndex <= 0) 
    	{
    		g_DebugLog("[Error!]AddNpc Error DBFuns.cpp");
    		if (pRoleData->BaseInfo.cUseRevive)
    		{
    			return -1;
    		}
    		else
    		{
    			pRoleData->BaseInfo.cUseRevive = 1;
    			goto label_retry;
    		}
    	}
    
    	m_sDeathRevivalPos = m_sLoginRevivalPos;
    
    	KNpc* pNpc = &Npc[m_nIndex];
    	pNpc->m_Kind = kind_player;
    	pNpc->SetPlayerIdx(m_nPlayerIndex);
    	pNpc->m_Level = nLevel;
    
    	//Íæ¼ÒÐÅÏ¢
    	strcpy(pNpc->Name, pRoleData->BaseInfo.szName);
    	m_nForbiddenFlag = pRoleData->BaseInfo.nForbiddenFlag;
    	
    	m_nAttributePoint = pRoleData->BaseInfo.ileftprop;
    	m_nSkillPoint = pRoleData->BaseInfo.ileftfight;
    
    	m_nStrength		= pRoleData->BaseInfo.ipower;
    	m_nDexterity	= pRoleData->BaseInfo.iagility;
    	m_nVitality		= pRoleData->BaseInfo.iouter;
    	m_nEngergy		= pRoleData->BaseInfo.iinside;
    	m_nLucky		= pRoleData->BaseInfo.iluck;
    	m_cTong.Clear();
    	m_cTong.DBSetTongNameID(pRoleData->BaseInfo.dwTongID);
    
    	m_nCurStrength = m_nStrength;
    	m_nCurDexterity = m_nDexterity;
    	m_nCurVitality = m_nVitality;
    	m_nCurEngergy = m_nEngergy;
    	m_nCurLucky = m_nLucky;
    	this->SetFirstDamage();
    	this->SetBaseAttackRating();
    	this->SetBaseDefence();
    
    	//Íæ¼ÒµÈ¼¶ÐÅÏ¢
    	m_nExp			= pRoleData->BaseInfo.fightexp;
    	m_nNextLevelExp = PlayerSet.m_cLevelAdd.GetLevelExp(pNpc->m_Level);
    	m_dwLeadLevel	= pRoleData->BaseInfo.ileadlevel;
    	m_dwLeadExp		= pRoleData->BaseInfo.ileadexp;
    
    	//ÃÅÅÉÐÅÏ¢
    	m_cFaction.m_nCurFaction = (char)pRoleData->BaseInfo.nSect;
    	m_cFaction.m_nFirstAddFaction = (char)pRoleData->BaseInfo.nFirstSect;
    	m_cFaction.m_nAddTimes			= pRoleData->BaseInfo.ijoincount;
    	pNpc->m_btRankId				= pRoleData->BaseInfo.isectrole;
    	m_nWorldStat	= pRoleData->BaseInfo.nWorldStat;
    	m_nSectStat		= pRoleData->BaseInfo.nSectStat;
    	
    	//ÏÖ½ðºÍÖüÎïÏäÖеÄÇ®
    	int nCashMoney = 0;
    	int nSaveMoney = 0;
    //	this->m_ItemList.Init(GetPlayerIndex());
    	nCashMoney		= pRoleData->BaseInfo.imoney;
    	nSaveMoney		= pRoleData->BaseInfo.isavemoney;
    	m_ItemList.SetMoney(nCashMoney, nSaveMoney,0);
    
    	pNpc->m_Series	= pRoleData->BaseInfo.ifiveprop;
    	pNpc->m_Camp	= pRoleData->BaseInfo.iteam;
    	
    	pNpc->m_nSex	= pRoleData->BaseInfo.bSex;
    
    	pNpc->m_LifeMax	= pRoleData->BaseInfo.imaxlife;
    	pNpc->m_StaminaMax = pRoleData->BaseInfo.imaxstamina;
    	pNpc->m_ManaMax = pRoleData->BaseInfo.imaxinner;
    
    	pNpc->m_LifeReplenish = PLAYER_LIFE_REPLENISH;
    	pNpc->m_ManaReplenish = PLAYER_MANA_REPLENISH;
    	pNpc->m_StaminaGain = PLAYER_STAMINA_GAIN;
    	pNpc->m_StaminaLoss = PLAYER_STAMINA_LOSS;
    
    	this->SetBaseResistData();
    	SetBaseSpeedAndRadius();
    	pNpc->RestoreNpcBaseInfo();
    	
    	pNpc->m_CurrentLife = pRoleData->BaseInfo.icurlife;
    	pNpc->m_CurrentMana = pRoleData->BaseInfo.icurinner;
    	pNpc->m_CurrentStamina = pRoleData->BaseInfo.icurstamina;
    
    	// PKÐÅÏ¢
    	m_cPK.SetNormalPKState(pRoleData->BaseInfo.cPkStatus);
    	m_cPK.SetPKValue(pRoleData->BaseInfo.ipkvalue);
    
    	// ³õʼ»¯²¿·ÖÊý¾Ý£¨ÕâЩÊý¾ÝÊý¾Ý¿â²»´æ´¢£©
    	m_BuyInfo.Clear();
    	m_cMenuState.Release();
    	m_cChat.Release();
    	m_cTeam.Release();
    	m_cTeam.SetCanTeamFlag(m_nPlayerIndex, TRUE);
    	m_nPeapleIdx = 0;
    	m_nObjectIdx = 0;
    	memset(m_szTaskAnswerFun, 0, sizeof(m_szTaskAnswerFun));
    	m_nAvailableAnswerNum = 0;
    	Npc[m_nIndex].m_ActionScriptID = 0;
    	Npc[m_nIndex].m_TrapScriptID = 0;
    	m_nViewEquipTime = 0;
    
    	pNpc->m_Experience = 0;
    //	memset(pNpc->m_szChatBuffer, 0, sizeof(pNpc->m_szChatBuffer));
    //	pNpc->m_nCurChatTime = 0;
    
    	pNpc->m_WeaponType = g_ItemChangeRes.GetWeaponRes(0, 0, 0);
    	pNpc->m_ArmorType = g_ItemChangeRes.GetArmorRes(0, 0);
    	pNpc->m_HelmType = g_ItemChangeRes.GetHelmRes(0, 0);
    	pNpc->m_HorseType = g_ItemChangeRes.GetHorseRes(0, 0);
    	pNpc->m_bRideHorse = FALSE;
    	nParam = 1;
    	pCurData = (BYTE *)&pRoleData->pBuffer;
    	// µÇÈëÓÎϷʱս¶·Ä£Ê½
    	pNpc->m_FightMode = pRoleData->BaseInfo.cFightMode;
    	// ÊÇ·ñÊÇ´¦ÓÚ¿ç·þÎñÆ÷״̬
    	if (pRoleData->BaseInfo.cIsExchange)
    	{
    	}
    	return 1;
    }
    
    int	KPlayer::LoadPlayerItemList(BYTE * pRoleBuffer , BYTE* &pItemBuffer, unsigned int &nParam)
    {
    	KASSERT(pRoleBuffer);
    	
    	int nItemCount = ((TRoleData *)pRoleBuffer)->nItemCount;
    	TDBItemData * pItemData = (TDBItemData *)pItemBuffer;
    	
    	if (nItemCount == 0) return 1;
    	if (nParam != 0)
    //		m_ItemList.Init(m_nPlayerIndex);
    //	else 
    	{
    		//Èç¹ûÒªÇó»ñµÃµÄÎïÆ·ºÅ´óÓÚʵ¼ÊµÄÎïÆ·ÊýÁ¿£¬ÔòÍ˳ö
    		if (nParam >= nItemCount )
    			return -1;
    	}
    
    	char szSection[100];
    	char szSubSection[100];
    	char szKey[100];
    	int nItemClass;
    	int nItemBaseInfoCount ;
    	int nItemEfficInfoCount;
    	int nItemRequireInfoCount;
    	int dwItemID = 0; 
    	int nDetailType = 0;
    	int nParticularType = 0;
    	int nSeries = 0;
    	int nLevel = 0;
    	int nLocal = 0;
    	int nItemX = 0;
    	int nItemY = 0;
    	int	nLucky = 0;
    	int nBegin = nParam;
    	int nEnd = nParam + DBLOADPERTIME_ITEM;
    	
    	if ( nEnd > nItemCount)
    		nEnd = nItemCount;
    
    	nParam = nEnd;		
    		
    	for (int i = nBegin ; i < nEnd; i ++)
    	{
    		
    		KItem NewItem;	
    		ZeroMemory(&NewItem, sizeof(KItem));
    		
    		//Îï¼þ»ù±¾ÐÅÏ¢**************************************************************
    		nItemClass	= pItemData->iequipclasscode;
    		NewItem.m_CommonAttrib.nDetailType		= pItemData->idetailtype;
    		NewItem.m_CommonAttrib.nParticularType	= pItemData->iparticulartype;
    		NewItem.m_CommonAttrib.nLevel			= pItemData->ilevel;
    		NewItem.m_CommonAttrib.nSeries			= pItemData->iseries;
    		nItemX			= pItemData->ix;
    		nItemY			= pItemData->iy;
    		nLocal			= pItemData->ilocal;
    
    		//Ôö¼ÓÎï¼þÖÁÊÀ½çµÄItemSetÖÐ,ÒÔ¼°Ôö¼Óµ½Íæ¼ÒÎïÆ·ÁбíÖÐ**************************************************************
    		//NewItem.SetID(dwItemID);
    		NewItem.m_GeneratorParam.nGeneratorLevel[0] = pItemData->iparam1;
    		NewItem.m_GeneratorParam.nGeneratorLevel[1] = pItemData->iparam2;
    		NewItem.m_GeneratorParam.nGeneratorLevel[2] = pItemData->iparam3;
    		NewItem.m_GeneratorParam.nGeneratorLevel[3] = pItemData->iparam4;
    		NewItem.m_GeneratorParam.nGeneratorLevel[4] = pItemData->iparam5;
    		NewItem.m_GeneratorParam.nGeneratorLevel[5] = pItemData->iparam6;
    		
    		NewItem.m_GeneratorParam.nVersion			= pItemData->iequipversion;
    		NewItem.m_GeneratorParam.uRandomSeed		= pItemData->irandseed;
    		NewItem.m_GeneratorParam.nLuck				= pItemData->ilucky;
    
    		BOOL bGetEquiptResult = 0;
    
    		//¸ù¾Ý²»Í¬µÄÎï¼þÀàÐͼÓÔØ
    		//²»Í¬µÄÏà¹Ø×ÊÔ´ÐÅÏ¢
    		switch(nItemClass)
    		{
    		case item_equip :			// ×°±¸
    			bGetEquiptResult = ItemGen.Gen_ExistEquipment(
    				NewItem.m_CommonAttrib.nDetailType, 
    				NewItem.m_CommonAttrib.nParticularType,
    				NewItem.m_CommonAttrib.nSeries,
    				NewItem.m_CommonAttrib.nLevel, 
    				NewItem.m_GeneratorParam.nGeneratorLevel, 
    				NewItem.m_GeneratorParam.nLuck,
    				NewItem.m_GeneratorParam.nVersion,
    				&NewItem);
    			break;
    		case item_medicine:			// Ò©Æ·
    				bGetEquiptResult = ItemGen.Gen_Medicine(
    					NewItem.m_CommonAttrib.nDetailType,
    					NewItem.m_CommonAttrib.nLevel,
    					NewItem.m_GeneratorParam.nVersion, 
    					&NewItem);
    			break;
    
    		case item_mine:				// ¿óʯ
    			{
    				
    			}
    			break;
    		case item_materials:			// Ò©²Ä
    			{
    				
    			}
    			break;
    		case item_task:				// ÈÎÎñ
    			{
    				bGetEquiptResult = ItemGen.Gen_Quest(NewItem.m_CommonAttrib.nDetailType, &NewItem);
    			}
    			break;
    		case item_townportal:
    			{
    				bGetEquiptResult = ItemGen.Gen_TownPortal(&NewItem);
    			}
    			break;
    		}
    
    		// °ÑÉú³ÉµÄ×°±¸µÄÄ;öȵ÷ÕûΪÊý¾Ý¿âÖд洢µÄ¡£
    		if (pItemData->idurability != 0)
    			NewItem.SetDurability(pItemData->idurability);
    
    		pItemData ++;
    		
    		int nIndex = ItemSet.Add(&NewItem);
    		
    		if (nIndex <= 0) 
    		{
    			KASSERT(0);
    			continue ;
    		}
    		m_ItemList.Add(nIndex, nLocal, nItemX, nItemY);
    		
    	}
    
    	pItemBuffer	= (BYTE *)pItemData;
    
    	if (nParam >= nItemCount)
    		return 1;
    	else 
    		return 0;
    }
    
    
    int	KPlayer::LoadPlayerFightSkillList(BYTE * pRoleBuffer, BYTE * &pFightBuffer, unsigned int& nParam)
    {
    	KASSERT(pRoleBuffer);
    	int nSkillCount = 0;
    	char szSkillId[100];
    	char szSkillLevel[100];
    	nSkillCount = ((TRoleData*)(pRoleBuffer))->nFightSkillCount;
    	
    	if (nSkillCount == 0)	
    		return 1;
    	
    	if (nParam >= nSkillCount )	
    		return -1;
    	
    	int nBegin	= nParam;
    	int nEnd	= nBegin + DBLOADPERTIME_SKILL;
    	if (nEnd > nSkillCount) 	nEnd = nSkillCount;
    	nParam = nEnd;
    	TDBSkillData * pSkillData = NULL;
    	if (nBegin == 0)
    		pSkillData = (TDBSkillData *)((BYTE*)pRoleBuffer + ((TRoleData*)pRoleBuffer)->dwFSkillOffset);
    	else
    		pSkillData = (TDBSkillData*)pFightBuffer;
    	for (int i = nBegin ; i < nEnd; i ++, pSkillData ++ )
    	{
    		int nSkillId = 0;
    		int nSkillLevel = 0;
    		nSkillId = pSkillData->m_nSkillId;
    		nSkillLevel = pSkillData->m_nSkillLevel;
    		Npc[m_nIndex].m_SkillList.Add(nSkillId, nSkillLevel);
    	}
    	pFightBuffer = (BYTE*) pSkillData;
    
    	if (nParam >= nSkillCount) return 1;
    	else 
    		return 0;
    }
    
    int	KPlayer::LoadPlayerLifeSkilllList(BYTE * pRoleBuffer, BYTE * &pFriendBuffer, unsigned int& nParam)
    {
    	KASSERT(pRoleBuffer);
    	int nSkillCount = 0;
    	char szSkillId[100];
    	char szSkillLevel[100];
    	nSkillCount = ((TRoleData*)(pRoleBuffer))->nLiveSkillCount;
    	
    	if (nSkillCount == 0)
    		return 1;
    
    	if (nParam >= nSkillCount )		return -1;
    	int nBegin	= nParam;
    	int nEnd	= nBegin + DBLOADPERTIME_SKILL;
    	if (nEnd > nSkillCount) 	nEnd = nSkillCount;
    	nParam = nEnd;
    
    	TDBSkillData * pSkillData = (TDBSkillData*)pFriendBuffer;
    	for (int i = nBegin ; i < nEnd; i ++, pSkillData ++ )
    	{
    		int nSkillId = 0;
    		int nSkillLevel = 0;
    		nSkillId = pSkillData->m_nSkillId;
    		nSkillLevel = pSkillData->m_nSkillLevel;
    		Npc[m_nIndex].m_SkillList.Add(nSkillId, nSkillLevel);
    	}
    	pFriendBuffer = (BYTE*) pSkillData;
    
    	if (nParam >= nSkillCount) return 1;
    	else 
    		return 0;
    
    }
    
    int	KPlayer::LoadPlayerFriendList(BYTE * pRoleBuffer, BYTE * &pFriendBuffer, unsigned int &nParam)
    {
    	KASSERT(pRoleBuffer);
    
    	if (nParam == 1)
    		return 0;
    	if (nParam == 2)
    		return 1;
    
    	int		nFriendCount;
    	DWORD	dwID;
    	char	szBuffer[32], szName[32];
    	nFriendCount = ((TRoleData*)pRoleBuffer)->nFriendCount;
    	if (nFriendCount == 0)
    	{
    		nParam = 2;
    		return 1;
    	}
    	char * pCurFriend = (char *)pFriendBuffer;
    	for (int i = 0; i < nFriendCount; i++)
    	{
    		
    		strcpy(szName, (char *)pFriendBuffer);
    		if (!szName[0])
    			continue;
    		dwID = g_FileName2Id(szName);
    		m_cChat.DataBaseAddOne(this->m_nPlayerIndex, dwID, szName);
    		pFriendBuffer += (strlen(szName) + 1);
    	}
    	this->m_cChat.StartSendFriendData();
    
    	nParam = 1;
    	return 0;
    }
    
    int	KPlayer::LoadPlayerTaskList(BYTE * pRoleBuffer, BYTE * &pTaskBuffer, unsigned int& nParam)
    {
    	KASSERT(pRoleBuffer);
    	while(m_PlayerStationList.GetHead())
    	{
    		KIndexNode * pNode = (KIndexNode * ) m_PlayerStationList.GetHead();
    		m_PlayerStationList.RemoveHead();
    		delete pNode;
    	}
    	while(m_PlayerWayPointList.GetHead())
    	{
    		KIndexNode * pNode = (KIndexNode * ) m_PlayerWayPointList.GetHead();
    		m_PlayerWayPointList.RemoveHead();
    		delete pNode;
    	}
    
    	if(nParam == 0)	m_cTask.Release();
    
    	int nTaskCount = 0;
    	int nTaskId = 0;
    	int nTaskDegee = 0;
    	char szTaskIDKey[100];
    	char szTaskValueKey[100];
    	nTaskCount = ((TRoleData* )pRoleBuffer)->nTaskCount;
    
    	if (nTaskCount == 0) return 1;
    	if (nParam >= nTaskCount ) return -1;
    	int nBegin	= nParam;
    	int nEnd	= nBegin + DBLOADPERTIME_TASK;
    	if (nEnd > nTaskCount) nEnd = nTaskCount;
    	nParam = nEnd;
    	TDBTaskData * pTaskData = (TDBTaskData*) pTaskBuffer;
    	for (int i = nBegin; i < nEnd; i ++ , pTaskData ++)
    	{
    		nTaskId = pTaskData->m_nTaskId;
    		nTaskDegee = pTaskData->m_nTaskValue;
    		if (nTaskId >= MAX_TASK) 
    		{
    			KASSERT(0);
    			continue;//ÈÎÎñID³¬¹ýÉÏÏÞÁË£¡
    		}
    		m_cTask.SetSaveVal(nTaskId, nTaskDegee);
    	}
    	pTaskBuffer = (BYTE*) pTaskData;
    	if (nParam >= nTaskCount) return 1;
    	else 
    	return 0;
    }
    
    int	KPlayer::SavePlayerBaseInfo(BYTE * pRoleBuffer)
    {
    	_ASSERT(pRoleBuffer);
    	if (m_nIndex <= 0) return -1;
    
    	KNpc * pNpc = &Npc[m_nIndex];
    	TRoleData * pRoleData = (TRoleData*)pRoleBuffer;
    	//Íæ¼ÒÐÅÏ¢
    	memset(pRoleData, 0, sizeof(TRoleData));
    	pRoleData->bBaseNeedUpdate = 1;
    	strcpy(pRoleData->BaseInfo.szName, m_PlayerName);
    	if (m_AccoutName[0])
    		strcpy(pRoleData->BaseInfo.caccname, m_AccoutName);
    	pRoleData->BaseInfo.nForbiddenFlag = m_nForbiddenFlag;
    	pRoleData->BaseInfo.ileftprop = m_nAttributePoint;
    	pRoleData->BaseInfo.ileftfight = m_nSkillPoint;
    	pRoleData->BaseInfo.ipower = m_nStrength;
    	pRoleData->BaseInfo.iagility = m_nDexterity;
    	pRoleData->BaseInfo.iouter = m_nVitality;
    	pRoleData->BaseInfo.iinside	=  m_nEngergy;
    	pRoleData->BaseInfo.iluck = m_nLucky;
    	pRoleData->BaseInfo.dwTongID = m_cTong.GetTongNameID();
    
    	//Íæ¼ÒµÄÏÔʾÐÅÏ¢	-- remark by spe because client ui display changed 2003/07/21
    //	pRoleData->BaseInfo.ihelmres = pNpc->m_HelmType;
    //	pRoleData->BaseInfo.iarmorres = pNpc->m_ArmorType;
    //	pRoleData->BaseInfo.iweaponres = pNpc->m_WeaponType;
    	
    	//Íæ¼ÒµÈ¼¶ÐÅÏ¢
    	pRoleData->BaseInfo.fightexp = m_nExp;
    	pRoleData->BaseInfo.ifightlevel = pNpc->m_Level;
    	
    	pRoleData->BaseInfo.ileadlevel = m_dwLeadLevel;
    	pRoleData->BaseInfo.ileadexp =	m_dwLeadExp;
    
    	//ÃÅÅÉÐÅÏ¢
    	pRoleData->BaseInfo.nSect =		m_cFaction.m_nCurFaction;
    	pRoleData->BaseInfo.nFirstSect = 	m_cFaction.m_nFirstAddFaction;
    	pRoleData->BaseInfo.ijoincount = m_cFaction.m_nAddTimes;
    	pRoleData->BaseInfo.isectrole = pNpc->m_btRankId;
    	pRoleData->BaseInfo.nWorldStat	= m_nWorldStat;
    	pRoleData->BaseInfo.nSectStat	= m_nSectStat;
    	
    	//ÏÖ½ðºÍÖüÎïÏäÖеÄÇ®
    	int nCashMoney = 0;
    	int nSaveMoney = 0;
    	
    	nCashMoney  = m_ItemList.GetMoney(room_equipment);
    	nSaveMoney	= m_ItemList.GetMoney(room_repository);
    	pRoleData->BaseInfo.imoney			= nCashMoney;
    	pRoleData->BaseInfo.isavemoney		= nSaveMoney;
    	pRoleData->BaseInfo.ifiveprop		= pNpc->m_Series;
    	pRoleData->BaseInfo.iteam			= pNpc->m_Camp;
    	pRoleData->BaseInfo.bSex			= pNpc->m_nSex;
    	pRoleData->BaseInfo.imaxlife		= pNpc->m_LifeMax;
    	pRoleData->BaseInfo.imaxstamina		= pNpc->m_StaminaMax;
    	pRoleData->BaseInfo.imaxinner		= pNpc->m_ManaMax;
    	pRoleData->BaseInfo.icurlife		= pNpc->m_CurrentLife;
    	pRoleData->BaseInfo.icurinner		= pNpc->m_CurrentMana;
    	pRoleData->BaseInfo.icurstamina		= pNpc->m_CurrentStamina;
    
    	//µÇÈëµã
    	pRoleData->BaseInfo.irevivalid = 	m_sLoginRevivalPos.m_nSubWorldID;
    	pRoleData->BaseInfo.irevivalx = 	m_sLoginRevivalPos.m_ReviveID;
    	pRoleData->BaseInfo.irevivaly = 	0;
    
    	if (m_bExchangeServer)	// ×¼±¸¿ç·þÎñÆ÷£º°Ñ´æÅ̵ãÉèΪĿ±êµã
    	{
    		pRoleData->BaseInfo.cUseRevive = 0;
    		pRoleData->BaseInfo.ientergameid = m_sExchangePos.m_dwMapID;
    		pRoleData->BaseInfo.ientergamex = m_sExchangePos.m_nX;
    		pRoleData->BaseInfo.ientergamey = m_sExchangePos.m_nY;
    		pRoleData->BaseInfo.cFightMode = (BYTE)pNpc->m_FightMode;
    	}
    	else if (pNpc->m_SubWorldIndex >= 0 && pNpc->m_RegionIndex >= 0 && pNpc->m_Doing != do_death && pNpc->m_Doing != do_revive)
    	{
    		pRoleData->BaseInfo.cUseRevive = m_bUseReviveIdWhenLogin;
    		pRoleData->BaseInfo.ientergameid = SubWorld[pNpc->m_SubWorldIndex].m_SubWorldID;
    		pNpc->GetMpsPos(&pRoleData->BaseInfo.ientergamex, &pRoleData->BaseInfo.ientergamey);
    		pRoleData->BaseInfo.cFightMode = (BYTE)pNpc->m_FightMode;
    	}
    	else
    	{
    		pRoleData->BaseInfo.cUseRevive = 1;
    		pRoleData->BaseInfo.cFightMode = 0;
    		if (pNpc->m_Doing == do_death || pNpc->m_Doing == do_revive)
    		{
    			pRoleData->BaseInfo.icurlife = pNpc->m_LifeMax;
    			pRoleData->BaseInfo.icurinner = pNpc->m_ManaMax;
    			pRoleData->BaseInfo.icurstamina = pNpc->m_StaminaMax;
    		}
    	}
    
    	//PKÏà¹Ø
    	pRoleData->BaseInfo.cPkStatus = (BYTE)m_cPK.GetNormalPKState();
    	pRoleData->BaseInfo.ipkvalue = m_cPK.GetPKValue();
    	pRoleData->dwFSkillOffset = (BYTE * )pRoleData->pBuffer - (BYTE *)pRoleBuffer;
    	return 1;
    	
    }
    
    int	KPlayer::SavePlayerItemList(BYTE * pRoleBuffer)
    {
    	_ASSERT(pRoleBuffer);
    
    	TRoleData * pRoleData = (TRoleData*) pRoleBuffer;
    
    	TDBItemData * pItemData = (TDBItemData*) ((BYTE*)pRoleData +  pRoleData->dwItemOffset);
    
    	int	nItemCount = 0;
    	char szSection[100];
    	char szKey[100];
    
    	int nIdx = 0;
    	while(1)
    	{
    		nIdx = m_ItemList.m_UseIdx.GetNext(nIdx);
    		if (nIdx == 0 )
    			break;
    		int nItemIndex = m_ItemList.m_Items[nIdx].nIdx;
    		
    		sprintf(szSection, "%s%d", SECTION_ITEM, nItemCount + 1);
    		//Íæ¼Ò»ù±¾ÐÅÏ¢*****************************************************************8	
    		pItemData->iequipclasscode =  Item[nItemIndex].m_CommonAttrib.nItemGenre;
    		pItemData->iequipcode =  Item[nItemIndex].GetID();
    		pItemData->idetailtype =  Item[nItemIndex].m_CommonAttrib.nDetailType;
    		pItemData->iparticulartype =  Item[nItemIndex].m_CommonAttrib.nParticularType;
    		pItemData->ilevel =  Item[nItemIndex].m_CommonAttrib.nLevel;
    		pItemData->iseries =  Item[nItemIndex].m_CommonAttrib.nSeries;
    		pItemData->ilocal =  m_ItemList.m_Items[nIdx].nPlace;
    		pItemData->ix =  m_ItemList.m_Items[nIdx].nX;
    		pItemData->iy =  m_ItemList.m_Items[nIdx].nY;
    		pItemData->iequipversion = Item[nItemIndex].GetItemParam()->nVersion;
    		pItemData->irandseed = Item[nItemIndex].GetItemParam()->uRandomSeed;
    		pItemData->iparam1 =  Item[nItemIndex].GetItemParam()->nGeneratorLevel[0];
    		pItemData->iparam2 =  Item[nItemIndex].GetItemParam()->nGeneratorLevel[1];
    		pItemData->iparam3 =  Item[nItemIndex].GetItemParam()->nGeneratorLevel[2];
    		pItemData->iparam4 =  Item[nItemIndex].GetItemParam()->nGeneratorLevel[3];
    		pItemData->iparam5 =  Item[nItemIndex].GetItemParam()->nGeneratorLevel[4];
    		pItemData->iparam6 =  Item[nItemIndex].GetItemParam()->nGeneratorLevel[5];
    		pItemData->ilucky = 	 Item[nItemIndex].GetItemParam()->nLuck;
    		pItemData->idurability = Item[nItemIndex].GetDurability();
    		pItemData->iidentify = 0;
    		//*****************************************************************************8
    
    		pItemData++;
    		nItemCount ++;
    	}
    	
    	pRoleData->nItemCount = nItemCount;
    	
    	pRoleData->dwFriendOffset = (BYTE *)pItemData - (BYTE * )pRoleData;
    	pRoleData->dwDataLen = (BYTE*)pItemData - (BYTE*)pRoleBuffer;
    	return 1;
    }
    
    int	KPlayer::SavePlayerFightSkillList(BYTE * pRoleBuffer)
    {
    	_ASSERT(pRoleBuffer);
    	if (m_nIndex <= 0) 
    		return FALSE;
    	TRoleData * pRoleData = (TRoleData *)pRoleBuffer;
    	TDBSkillData * pSkillData = (TDBSkillData *) (pRoleBuffer + pRoleData->dwFSkillOffset);
    	int nCount = Npc[m_nIndex].m_SkillList.UpdateDBSkillList((BYTE *)pSkillData);
    	if (nCount > 0)
    	{
    		pRoleData->nFightSkillCount = nCount;
    		pRoleData->dwLSkillOffset = (BYTE*)pSkillData - pRoleBuffer + sizeof(TDBSkillData) * nCount;
    	}
    	else
    	{
    		pRoleData->nFightSkillCount  = 0;
    		pRoleData->dwLSkillOffset = (BYTE*)pSkillData - pRoleBuffer;
    	}
    	return 1;
    }
    
    int	KPlayer::SavePlayerLifeSkilllList(BYTE * pRoleBuffer)
    {
    	_ASSERT(pRoleBuffer);
    	TRoleData * pRoleData = (TRoleData *)pRoleBuffer;
    	TDBSkillData * pSkillData = (TDBSkillData *) (pRoleBuffer + pRoleData->dwLSkillOffset);
    	pRoleData->dwTaskOffset = (BYTE*)pSkillData - pRoleBuffer;
    	return 1;
    }
    
    int	KPlayer::SavePlayerFriendList(BYTE * pRoleBuffer)
    {
    	_ASSERT(pRoleBuffer);
    
    	int		nFriendNo;
    	char	szBuffer[32];
    	CChatFriend	*pFriend;
    	TRoleData * pRoleData = (TRoleData *)pRoleBuffer;
    
    	nFriendNo = m_cChat.m_cFriendTeam[0].m_nFriendNo;
    	char * pCurFriend = (char *)((BYTE *)pRoleData + pRoleData->dwFriendOffset);
    	int nTotalFriendNo  = 0;
    	pFriend = (CChatFriend*)m_cChat.m_cFriendTeam[0].m_cEveryOne.GetHead();
    	while (pFriend)
    	{
    		nTotalFriendNo++;
    		strcpy(pCurFriend, pFriend->m_szName);
    		pCurFriend += strlen(pFriend->m_szName) + 1;
    		pFriend = (CChatFriend*)pFriend->GetNext();
    	}
    	pRoleData->nFriendCount = nTotalFriendNo;
    	_ASSERT(nTotalFriendNo == nFriendNo);
    	pRoleData->dwDataLen = (BYTE*)pCurFriend - (BYTE*)pRoleBuffer;
    	return 1;
    }
    
    
    int	KPlayer::SavePlayerTaskList(BYTE * pRoleBuffer)
    {
    	_ASSERT(pRoleBuffer);
    	TRoleData * pRoleData = (TRoleData *) pRoleBuffer;
    	int nTaskCount = 0;
    	int nTaskId = 0;
    	int nTaskDegee = 0;
    	char szTaskIDKey[100];
    	char szTaskValueKey[100];
    
    	KIndexNode * pNode = (KIndexNode*)m_PlayerStationList.GetHead();
    	int n = 0;
    	memset(&m_cTask.nSave[TASKVALUE_SAVESTATION_BEGIN], 0, (TASKVALUE_MAXSTATION_COUNT / 2) * sizeof(int));
    	memset(&m_cTask.nSave[TASKVALUE_SAVEWAYPOINT_BEGIN], 0, TASKVALUE_MAXWAYPOINT_COUNT * sizeof(int));
    
    	while(pNode)
    	{
    		if (n >= TASKVALUE_MAXSTATION_COUNT) break;
    		DWORD dwValue = m_cTask.nSave[TASKVALUE_SAVESTATION_BEGIN + n / 2];
    		DWORD OrValue = pNode->m_nIndex ;
    		OrValue = OrValue << ((n % 2) * 16);
    		dwValue = dwValue | OrValue;
    		m_cTask.nSave[TASKVALUE_SAVESTATION_BEGIN + n / 2] = dwValue;
    		n++;
    		pNode = (KIndexNode*)pNode->GetNext();
    	}
    	
    	n = 0;
    	pNode = (KIndexNode*) m_PlayerWayPointList.GetHead();
    	while(pNode)
    	{
    		if (n >= TASKVALUE_MAXWAYPOINT_COUNT) break;
    		if (pNode->m_nIndex == 0) continue;
    		m_cTask.nSave[TASKVALUE_SAVEWAYPOINT_BEGIN + n] = pNode->m_nIndex;
    		n++;
    		pNode = (KIndexNode*)pNode->GetNext();
    	}
    	
    	
    	g_TimerTask.SaveTask(this);
    
    
    	TDBTaskData * pTaskData = (TDBTaskData *)(pRoleBuffer + pRoleData->dwTaskOffset);
    	for (int i = 0; i < MAX_TASK; i ++)
    	{
    		if (!m_cTask.nSave[i]) continue;
    		
    		pTaskData->m_nTaskId = i;
    		pTaskData->m_nTaskValue = m_cTask.GetSaveVal(i);
    		nTaskCount ++;
    		pTaskData ++;
    	}
    		
    	pRoleData->nTaskCount = nTaskCount;
    	pRoleData->dwItemOffset = (BYTE *)pTaskData - pRoleBuffer;
    	return 1;
    }
    #endif
    em thấy code bác share với đây là code trong file của em không khác nhau vậy có cần phải sửa lại nó không bác ?
    Khách viếng thăm hãy cùng savatage91 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  11. #8
    Thành Viên thienthanden2's Avatar
    Ngày tham gia
    Jun 2007
    Đang ở
    Thiên đường đã lỡ...
    Bài viết
    217
    Thanks
    14
    Thanked 183 Times in 73 Posts

    Ðề: Vấn đề trên server build source

    Coi kỹ lại coi, chưa sửa mà giống sao đc bạn? đọc lại bài trên của mình có nói rõ cần sửa đoạn nào lun đó. (sửa có 3 dòng)
    Khách viếng thăm hãy cùng thienthanden2 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

 

 

Các Chủ đề tương tự

  1. Source Độc Bá 2 chưa build
    Bởi blackcatyb trong diễn đàn Các Server Không Nằm Trong Box
    Trả lời: 20
    Bài viết cuối: 12-09-20, 01:09 AM
  2. [JX] lỗi sau khi build source
    Bởi evjnshiva trong diễn đàn Hỏi Đáp/ Yêu Cầu
    Trả lời: 4
    Bài viết cuối: 22-11-12, 01:18 PM
  3. [JX] Pro nào build source thành công giúp mình sửa lỗi iniset error ở server???
    Bởi hoangthien89 trong diễn đàn Hỏi Đáp/ Yêu Cầu
    Trả lời: 1
    Bài viết cuối: 07-09-12, 03:53 PM
  4. [JX] Lỗi nhân vật ở server build từ source
    Bởi assaa trong diễn đàn Hỏi Đáp/ Yêu Cầu
    Trả lời: 6
    Bài viết cuối: 18-08-12, 04:47 PM
  5. [JX] Ai build Source thành công thì vào xem dùm !
    Bởi dammejx trong diễn đàn Hỏi Đáp/ Yêu Cầu
    Trả lời: 8
    Bài viết cuối: 26-07-12, 07:12 AM

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •  
Múi giờ GMT +7. Bây giờ là 10:45 PM.
vBulletin®, Copyright ©2000-2011, Jelsoft Enterprises Ltd.
CLBGamesVN không chịu trách nhiệm về Luật Bản Quyền của các tài liệu, bài viết v.v...được đăng tải trên diễn đàn này.
Diễn đàn phát triển dưới sự đóng góp của tất cả thành viên. BQT chỉ là những người thành lập ra sân chơi, quản lý và duy trì về mặt kỹ thuật, nội dung khi hợp lệ.