//-------------------------------------------------------------------------- // 功能:设置用户账号 //-------------------------------------------------------------------------- void KUiBase::SetUserAccount(char* pszId, char* pszRole) { if (pszId == NULL || pszId[0] == 0 || pszRole == NULL || pszRole[0] == 0) return; //根据(玩家)名称id获得对应处理过字符串id { m_UserAccountId[0] = 0; unsigned int uID1 = g_FileName2Id(pszId); unsigned int uID2 = ~g_FileName2Id(pszRole); int nLen1 = strlen(pszId); int nLen2 = strlen(pszRole); sprintf(m_UserAccountId, "%x%xl%x%x", uID1, nLen1, nLen2, uID2); } }
/** * @brief 获取账号设置文件 */ KIniFile* KUiBase::GetAccountSettingFile(char* szAccount) { if(szAccount && szAccount[0]) { unsigned int uID1 = g_FileName2Id(szAccount); unsigned int uID2 = g_FileName2Id(UI_USER_DATA_FOLDER); sprintf(m_szAccountSettingFilePath, "%s\\%u\\", UI_USER_DATA_FOLDER, uID2); g_CreatePath(m_szAccountSettingFilePath); sprintf(m_szAccountSettingFilePath, "%s\\%u.ini", m_szAccountSettingFilePath, uID1); if(m_pAccountSettingFile) { m_pAccountSettingFile->Clear(); } else { m_pAccountSettingFile = new KIniFile; } if(m_pAccountSettingFile) { m_pAccountSettingFile->Load(m_szAccountSettingFilePath); } } return m_pAccountSettingFile; }
BOOL KThiefSkill::LoadSetting(char * szSettingFile) { _ASSERT(szSettingFile); KTabFile TabFile ; if (!TabFile.Load(szSettingFile)) { g_DebugLog("无法打开%s", szSettingFile); return FALSE; } TabFile.GetInteger(2, "AttackRadius", 100, (int *)&m_ulAttackRadius); TabFile.GetInteger(2, "TimePerCast", 100, (int*)&m_ulDelayPerCast); TabFile.GetInteger(2, "SkillCostType", 0, (int*)&m_nSkillCostType ); TabFile.GetInteger(2, "Cost", 50, (int *)&m_nCost); TabFile.GetInteger(2, "ThiefPercent", 30, (int *)&m_nThiefPercent); TabFile.GetInteger(2, "TargetEnemy", TRUE, &m_bTargetEnemy); TabFile.GetInteger(2, "TargetAlly", TRUE, &m_bTargetAlly); TabFile.GetInteger(2, "TargetObj", FALSE, &m_bTargetObj); TabFile.GetInteger(2, "ThiefStyle", 0, &m_nThiefStyle); TabFile.GetString(2, "SkillName", "", m_szSkillName, sizeof(m_szSkillName)); TabFile.GetInteger(2, "CostUsePrecent", 1, &m_bUseCostPercent); if (m_nThiefStyle == thief_runscript) { char szScript[200]; TabFile.GetString(2, "Param1", "", szScript, sizeof(szScript)); strlwr(szScript); m_dwParam1 =g_FileName2Id(szScript); } else { TabFile.GetInteger(2, "Param1", 0, (int*)&m_dwParam1); } #ifndef _SERVER TabFile.GetString(2, "Desc", "", m_szSkillDesc, sizeof(m_szSkillDesc)); TabFile.GetString(2, "SkillIcon", "\\spr\\skill\\图标\\通用.spr", m_szSkillIcon, sizeof(m_szSkillIcon)); TabFile.GetString(2, "Movie", "", m_szSkillSpecialFile, sizeof(m_szSkillSpecialFile)); TabFile.GetString(2, "TargetMovie", "", m_szTargetMovie, sizeof(m_szTargetMovie)); TabFile.GetString(2, "TargetMovieInfo", "1,1,1", m_szTargetMovieParam, sizeof(m_szTargetMovieParam)); TabFile.GetString(2, "SkillSound", "", m_szSkillSound, sizeof(m_szSkillSound)); #endif return TRUE; }
void KObj::SetScriptFile(char *lpszScriptFile) { char szScript[80]; if ( !lpszScriptFile || strlen(lpszScriptFile) >= sizeof(szScript)) { g_DebugLog("[error]Script FileName Error!!!"); } else { if (lpszScriptFile[0]) { if (lpszScriptFile[0] == '.') g_StrCpyLen(szScript, &lpszScriptFile[1], sizeof(szScript)); else g_StrCpyLen(szScript, lpszScriptFile, sizeof(szScript)); g_StrLower(szScript); m_dwScriptID = g_FileName2Id(szScript); } } }
//-------------------------------------------------------------------------- // 功能:向游戏发送操作 // 参数:unsigned int uDataId --> Core外部客户对core的操作请求的索引定义 // 其值为梅举类型GAMEOPERATION_INDEX的取值之一。 // unsigned int uParam --> 依据uOperId的取值情况而定 // int nParam --> 依据uOperId的取值情况而定 // 返回:如果成功发送操作请求,函数返回非0值,否则返回0值。 //-------------------------------------------------------------------------- int CoreServerShell::OperationRequest(unsigned int uOper, unsigned int uParam, int nParam) { int nRet = 1; switch(uOper) { case SSOI_BROADCASTING: nRet = PlayerSet.Broadcasting((char*)uParam, nParam); break; case SSOI_LAUNCH: //启动服务 nRet = OnLunch((LPVOID)uParam); break; case SSOI_SHUTDOWN: //关闭服务 nRet = OnShutdown(); break; case SSOI_RELOAD_WELCOME_MSG: PlayerSet.ReloadWelcomeMsg(); break; // relay 帮会创建成功,通知 core 进行相应的处理 case SSOI_TONG_CREATE: { STONG_SERVER_TO_CORE_CREATE_SUCCESS *pCreate = (STONG_SERVER_TO_CORE_CREATE_SUCCESS*)uParam; if (pCreate->m_nPlayerIdx <= 0 || pCreate->m_nPlayerIdx >= MAX_PLAYER) { nRet = 0; break; } if (Player[pCreate->m_nPlayerIdx].m_nIndex) { DWORD dwID = g_FileName2Id(Npc[Player[pCreate->m_nPlayerIdx].m_nIndex].Name); if (dwID != pCreate->m_dwPlayerNameID) { nRet = 0; break; } } else { nRet = 0; break; } nRet = Player[pCreate->m_nPlayerIdx].CreateTong(pCreate->m_nCamp, pCreate->m_szTongName); } break; case SSOI_TONG_REFUSE_ADD: if (uParam) { STONG_SERVER_TO_CORE_REFUSE_ADD *pRefuse = (STONG_SERVER_TO_CORE_REFUSE_ADD*)uParam; if (pRefuse->m_nSelfIdx > 0 && pRefuse->m_nSelfIdx <= MAX_PLAYER) { Player[pRefuse->m_nSelfIdx].m_cTong.SendRefuseMessage(pRefuse->m_nTargetIdx, pRefuse->m_dwNameID); } } break; case SSOI_TONG_ADD: if (uParam) { nRet = 0; STONG_SERVER_TO_CORE_ADD_SUCCESS *pAdd = (STONG_SERVER_TO_CORE_ADD_SUCCESS*)uParam; if (pAdd->m_nPlayerIdx <= 0 || pAdd->m_nPlayerIdx >= MAX_PLAYER) break; if (Player[pAdd->m_nPlayerIdx].m_nIndex <= 0) break; if (g_FileName2Id(Npc[Player[pAdd->m_nPlayerIdx].m_nIndex].Name) != pAdd->m_dwPlayerNameID) break; Player[pAdd->m_nPlayerIdx].m_cTong.AddTong( pAdd->m_nCamp, pAdd->m_szTongName, pAdd->m_szMasterName, pAdd->m_szTitleName); } break; default: nRet = 0; break; } return nRet; }
//-------------------------------------------------------------------------- // 功能:从游戏世界获取数据 // 参数:unsigned int uDataId --> 表示获取游戏数据的数据项内容索引,其值为梅举类型 // GAMEDATA_INDEX的取值之一。 // unsigned int uParam --> 依据uDataId的取值情况而定 // int nParam --> 依据uDataId的取值情况而定 // 返回:依据uDataId的取值情况而定。 //-------------------------------------------------------------------------- int CoreServerShell::GetGameData(unsigned int uDataId, unsigned int uParam, int nParam) { int nRet = 0; switch(uDataId) { case SGDI_CHARACTER_ACCOUNT: if (uParam) { nRet = PlayerSet.GetPlayerAccount(nParam, (char *)uParam); if (nRet == FALSE) ((char *)uParam)[0] = 0; } break; case SGDI_CHARACTER_NAME: if (uParam) { nRet = PlayerSet.GetPlayerName(nParam, (char*)uParam); if (nRet == FALSE) ((char *)uParam)[0] = 0; } break; case SGDI_CHARACTER_EXTPOINTCHANGED: if (uParam) { if (uParam >= MAX_PLAYER) { nRet = 0; break; } nRet = Player[uParam].GetExtPointChanged(); } break; case SGDI_CHARACTER_EXTPOINT: if (uParam) { if (uParam >= MAX_PLAYER) { nRet = 0; break; } nRet = Player[uParam].GetExtPoint(); } break; case SGDI_LOADEDMAP_ID: if (uParam) { int i; int nMax = nParam; if(nMax < MAX_SUBWORLD) nMax = MAX_SUBWORLD; for (i = 0; i < nMax; i++) { if (SubWorld[i].m_SubWorldID != -1) { ((char *)uParam)[i] = (char)SubWorld[i].m_SubWorldID; } else { nRet = i; break; } } } break; case SGDI_CHARACTER_ID: if (uParam) { if (uParam >= MAX_PLAYER) { nRet = 0; break; } nRet = Player[uParam].m_dwID; break; } break; case SGDI_CHARACTER_NETID: if (uParam) { if (uParam >= MAX_PLAYER) { nRet = -1; break; } nRet = Player[uParam].m_nNetConnectIdx; } break; // 传入帮会建立参数,返回条件是否成立 // uParam : struct STONG_SERVER_TO_CORE_APPLY_CREATE point // return : 条件是否成立 case SGDI_TONG_APPLY_CREATE: if (uParam) { STONG_SERVER_TO_CORE_APPLY_CREATE *pApply = (STONG_SERVER_TO_CORE_APPLY_CREATE*)uParam; int nPlayerIdx; int nCamp; char szTongName[defTONG_NAME_MAX_LENGTH + 2]; szTongName[sizeof(szTongName) - 1] = 0; memcpy(szTongName, pApply->m_szTongName, sizeof(szTongName)); nPlayerIdx = pApply->m_nPlayerIdx; nCamp = pApply->m_nCamp; if (nPlayerIdx <= 0 || nPlayerIdx >= MAX_PLAYER) { nRet = FALSE; break; } nRet = Player[nPlayerIdx].m_cTong.CheckCreateCondition(nCamp, szTongName); } break; // 申请加入帮会 // uParam : struct STONG_SERVER_TO_CORE_APPLY_ADD point case SGDI_TONG_APPLY_ADD: if (uParam) { STONG_SERVER_TO_CORE_APPLY_ADD *pAdd = (STONG_SERVER_TO_CORE_APPLY_ADD*)uParam; if (pAdd->m_nPlayerIdx <= 0 || pAdd->m_nPlayerIdx >= MAX_PLAYER) break; Player[pAdd->m_nPlayerIdx].m_cTong.TransferAddApply(pAdd->m_dwNpcID); } break; // 判断加入帮会条件是否合适 // uParam : 传入得 char point ,用于接收帮会名称 // nParam : struct STONG_SERVER_TO_CORE_CHECK_ADD_CONDITION point case SGDI_TONG_CHECK_ADD_CONDITION: { nRet = 0; STONG_SERVER_TO_CORE_CHECK_ADD_CONDITION *pAdd; pAdd = (STONG_SERVER_TO_CORE_CHECK_ADD_CONDITION*)nParam; if (pAdd->m_nSelfIdx <= 0 || pAdd->m_nSelfIdx >= MAX_PLAYER) break; if (pAdd->m_nTargetIdx <= 0 || pAdd->m_nTargetIdx >= MAX_PLAYER || g_FileName2Id(Npc[Player[pAdd->m_nTargetIdx].m_nIndex].Name) != pAdd->m_dwNameID) break; if (Player[pAdd->m_nSelfIdx].m_cTong.CheckAddCondition(pAdd->m_nTargetIdx)) { Player[pAdd->m_nSelfIdx].m_cTong.GetTongName((char*)uParam); nRet = 1; } } break; // 获得帮会信息 // uParam : 传入的 STONG_SERVER_TO_CORE_GET_INFO point case SGDI_TONG_GET_INFO: { STONG_SERVER_TO_CORE_GET_INFO *pInfo = (STONG_SERVER_TO_CORE_GET_INFO*)uParam; switch (pInfo->m_nInfoID) { case enumTONG_APPLY_INFO_ID_SELF: { if (pInfo->m_nSelfIdx <= 0 || pInfo->m_nSelfIdx >= MAX_PLAYER) break; Player[pInfo->m_nSelfIdx].m_cTong.SendSelfInfo(); } break; case enumTONG_APPLY_INFO_ID_MASTER: break; case enumTONG_APPLY_INFO_ID_DIRECTOR: break; case enumTONG_APPLY_INFO_ID_MANAGER: { nRet = 0; if (pInfo->m_nSelfIdx <= 0 || pInfo->m_nSelfIdx >= MAX_PLAYER) break; if (Player[pInfo->m_nSelfIdx].m_cTong.CanGetManagerInfo((DWORD)pInfo->m_nParam1)) nRet = 1; } break; case enumTONG_APPLY_INFO_ID_MEMBER: { nRet = 0; if (pInfo->m_nSelfIdx <= 0 || pInfo->m_nSelfIdx >= MAX_PLAYER) break; if (Player[pInfo->m_nSelfIdx].m_cTong.CanGetMemberInfo((DWORD)pInfo->m_nParam1)) nRet = 1; } break; case enumTONG_APPLY_INFO_ID_ONE: break; case enumTONG_APPLY_INFO_ID_TONG_HEAD: { nRet = 0; if (pInfo->m_nSelfIdx <= 0 || pInfo->m_nSelfIdx >= MAX_PLAYER) break; int nPlayer; if (Npc[Player[pInfo->m_nSelfIdx].m_nIndex].m_dwID == (DWORD)pInfo->m_nParam1) nPlayer = pInfo->m_nSelfIdx; else nPlayer = Player[pInfo->m_nSelfIdx].FindAroundPlayer((DWORD)pInfo->m_nParam1); if (nPlayer == -1) break; nRet = Player[nPlayer].m_cTong.GetTongNameID(); } break; } } break; // 判断是否有任命权利 // uParam : 传入的 TONG_APPLY_INSTATE_COMMAND point // nParam : PlayerIndex case SGDI_TONG_INSTATE_POWER: if (uParam) { nRet = 0; TONG_APPLY_INSTATE_COMMAND *pApply = (TONG_APPLY_INSTATE_COMMAND*)uParam; if (nParam <= 0 || nParam >= MAX_PLAYER) break; if (Player[nParam].m_nIndex <= 0) break; nRet = Player[nParam].m_cTong.CheckInstatePower(pApply); } break; // 被任命,帮会数据变化 // uParam : 传入的 STONG_SERVER_TO_CORE_BE_INSTATED point case SGDI_TONG_BE_INSTATED: if (uParam) { STONG_SERVER_TO_CORE_BE_INSTATED *pInstated = (STONG_SERVER_TO_CORE_BE_INSTATED*)uParam; if (pInstated->m_nPlayerIdx <= 0 || pInstated->m_nPlayerIdx >= MAX_PLAYER) break; if (Player[pInstated->m_nPlayerIdx].m_nIndex <= 0) break; Player[pInstated->m_nPlayerIdx].m_cTong.BeInstated(pInstated); } break; // 判断是否有踢人权利 // uParam : 传入的 TONG_APPLY_KICK_COMMAND point // nParam : PlayerIndex case SGDI_TONG_KICK_POWER: if (uParam) { nRet = 0; TONG_APPLY_KICK_COMMAND *pKick = (TONG_APPLY_KICK_COMMAND*)uParam; if (nParam <= 0 || nParam >= MAX_PLAYER) break; if (Player[nParam].m_nIndex <= 0) break; nRet = Player[nParam].m_cTong.CheckKickPower(pKick); } break; // 被踢出帮会 // uParam : 传入的 STONG_SERVER_TO_CORE_BE_KICKED point case SGDI_TONG_BE_KICKED: if (uParam) { STONG_SERVER_TO_CORE_BE_KICKED *pKicked = (STONG_SERVER_TO_CORE_BE_KICKED*)uParam; if (pKicked->m_nPlayerIdx <= 0 || pKicked->m_nPlayerIdx >= MAX_PLAYER) break; if (Player[pKicked->m_nPlayerIdx].m_nIndex <= 0) break; Player[pKicked->m_nPlayerIdx].m_cTong.BeKicked(pKicked); } break; // 离开帮会 // uParam : 传入的 TONG_APPLY_LEAVE_COMMAND point // nParam : PlayerIndex case SGDI_TONG_LEAVE_POWER: if (uParam) { nRet = 0; TONG_APPLY_LEAVE_COMMAND *pLeave = (TONG_APPLY_LEAVE_COMMAND*)uParam; if (nParam <= 0 || nParam >= MAX_PLAYER) break; if (Player[nParam].m_nIndex <= 0) break; nRet = Player[nParam].m_cTong.CheckLeavePower(pLeave); } break; // 离开帮会 // uParam : 传入的 STONG_SERVER_TO_CORE_LEAVE point case SGDI_TONG_LEAVE: if (uParam) { STONG_SERVER_TO_CORE_LEAVE *pLeave = (STONG_SERVER_TO_CORE_LEAVE*)uParam; if (pLeave->m_nPlayerIdx <= 0 || pLeave->m_nPlayerIdx >= MAX_PLAYER) break; if (Player[pLeave->m_nPlayerIdx].m_nIndex <= 0) break; Player[pLeave->m_nPlayerIdx].m_cTong.Leave(pLeave); } break; // 离开帮会判断 // uParam : 传入的 TONG_APPLY_CHANGE_MASTER_COMMAND point // nParam : PlayerIndex case SGDI_TONG_CHANGE_MASTER_POWER: if (uParam) { nRet = 0; TONG_APPLY_CHANGE_MASTER_COMMAND *pChange = (TONG_APPLY_CHANGE_MASTER_COMMAND*)uParam; if (nParam <= 0 || nParam >= MAX_PLAYER) break; if (Player[nParam].m_nIndex <= 0) break; nRet = Player[nParam].m_cTong.CheckChangeMasterPower(pChange); } break; // 能否接受传位判断 // uParam : 传入的 STONG_SERVER_TO_CORE_CHECK_GET_MASTER_POWER point case SGDI_TONG_GET_MASTER_POWER: if (uParam) { nRet = 0; STONG_SERVER_TO_CORE_CHECK_GET_MASTER_POWER *pCheck = (STONG_SERVER_TO_CORE_CHECK_GET_MASTER_POWER*)uParam; if (pCheck->m_nPlayerIdx <= 0 || pCheck->m_nPlayerIdx >= MAX_PLAYER) break; if (Player[pCheck->m_nPlayerIdx].m_nIndex <= 0) break; nRet = Player[pCheck->m_nPlayerIdx].m_cTong.CheckGetMasterPower(pCheck); } break; // 传位导致身份改变 // uParam : 传入的 STONG_SERVER_TO_CORE_CHANGE_AS point case SGDI_TONG_CHANGE_AS: if (uParam) { STONG_SERVER_TO_CORE_CHANGE_AS *pAs = (STONG_SERVER_TO_CORE_CHANGE_AS*)uParam; if (pAs->m_nPlayerIdx <= 0 || pAs->m_nPlayerIdx >= MAX_PLAYER) break; if (Player[pAs->m_nPlayerIdx].m_nIndex <= 0) break; Player[pAs->m_nPlayerIdx].m_cTong.ChangeAs(pAs); } break; // 帮主换了 // uParam : 传入的 STONG_SERVER_TO_CORE_CHANGE_MASTER point case SGDI_TONG_CHANGE_MASTER: if (uParam) { STONG_SERVER_TO_CORE_CHANGE_MASTER *pChange = (STONG_SERVER_TO_CORE_CHANGE_MASTER*)uParam; int nIdx; nIdx = PlayerSet.GetFirstPlayer(); while (nIdx) { if (Player[nIdx].m_cTong.GetTongNameID() == pChange->m_dwTongNameID) { Player[nIdx].m_cTong.ChangeMaster(pChange->m_szName); } nIdx = PlayerSet.GetNextPlayer(); } } break; // 获得帮会名字符串转换成的 dword // nParam : PlayerIndex case SGDI_TONG_GET_TONG_NAMEID: { if (nParam <= 0 || nParam >= MAX_PLAYER) break; if (Player[nParam].m_nIndex <= 0) break; nRet = Player[nParam].m_cTong.GetTongNameID(); } break; // 登陆时候获得帮会信息 // uParam : 传入的 STONG_SERVER_TO_CORE_LOGIN point case SGDI_TONG_LOGIN: if (uParam) { STONG_SERVER_TO_CORE_LOGIN *pLogin = (STONG_SERVER_TO_CORE_LOGIN*)uParam; if (pLogin->m_dwParam <= 0 || pLogin->m_dwParam >= MAX_PLAYER) break; if (Player[pLogin->m_dwParam].m_nIndex <= 0) break; Player[pLogin->m_dwParam].m_cTong.Login(pLogin); } break; // 通知core发送某玩家的帮会信息 // nParam : player index case SGDI_TONG_SEND_SELF_INFO: { if (nParam <= 0 || nParam >= MAX_PLAYER) break; if (Player[nParam].m_nIndex <= 0) break; Player[nParam].m_cTong.SendSelfInfo(); } break; default: break; } return nRet; }
void KNpcTemplate::InitNpcBaseData(int nNpcTemplateId) { if (nNpcTemplateId < 0 ) return; int nNpcTempRow = nNpcTemplateId + 2; g_NpcSetting.GetString(nNpcTempRow, "Name", "", Name, sizeof(Name)); g_NpcSetting.GetInteger(nNpcTempRow, "Kind", 0, (int *)&m_Kind); g_NpcSetting.GetInteger(nNpcTempRow, "Camp", 0, &m_Camp); g_NpcSetting.GetInteger(nNpcTempRow, "Series", 0, &m_Series); g_NpcSetting.GetInteger(nNpcTempRow, "HeadImage", 0, &m_HeadImage); g_NpcSetting.GetInteger(nNpcTempRow, "ClientOnly", 0, &m_bClientOnly); g_NpcSetting.GetInteger(nNpcTempRow, "CorpseIdx", 0, &m_CorpseSettingIdx); g_NpcSetting.GetInteger(nNpcTempRow, "DeathFrame", 12, &m_DeathFrame); g_NpcSetting.GetInteger(nNpcTempRow, "WalkFrame", 15, &m_WalkFrame); g_NpcSetting.GetInteger(nNpcTempRow, "RunFrame", 15, &m_RunFrame); g_NpcSetting.GetInteger(nNpcTempRow, "HurtFrame", 10, &m_HurtFrame); g_NpcSetting.GetInteger(nNpcTempRow, "WalkSpeed", 5, &m_WalkSpeed); g_NpcSetting.GetInteger(nNpcTempRow, "AttackSpeed", 20, &m_AttackFrame); g_NpcSetting.GetInteger(nNpcTempRow, "CastSpeed", 20, &m_CastFrame); g_NpcSetting.GetInteger(nNpcTempRow, "RunSpeed", 10, &m_RunSpeed); g_NpcSetting.GetInteger(nNpcTempRow, "StandFrame", 15, &m_StandFrame); g_NpcSetting.GetInteger(nNpcTempRow, "StandFrame1", 15, &m_StandFrame1); g_NpcSetting.GetInteger(nNpcTempRow, "Stature", 0, &m_nStature); #ifdef _SERVER g_NpcSetting.GetInteger(nNpcTempRow, "Treasure", 0, &m_Treasure); g_NpcSetting.GetInteger(nNpcTempRow, "AIMode", 0, &m_AiMode); g_NpcSetting.GetInteger(nNpcTempRow, "AIParam1", 0, &m_AiParam[0]); g_NpcSetting.GetInteger(nNpcTempRow, "AIParam2", 0, &m_AiParam[1]); g_NpcSetting.GetInteger(nNpcTempRow, "AIParam3", 0, &m_AiParam[2]); g_NpcSetting.GetInteger(nNpcTempRow, "AIParam4", 0, &m_AiParam[3]); g_NpcSetting.GetInteger(nNpcTempRow, "AIParam5", 0, &m_AiParam[4]); g_NpcSetting.GetInteger(nNpcTempRow, "AIParam6", 0, &m_AiParam[5]); g_NpcSetting.GetInteger(nNpcTempRow, "AIParam7", 0, &m_AiParam[6]); g_NpcSetting.GetInteger(nNpcTempRow, "AIParam8", 0, &m_AiParam[7]); g_NpcSetting.GetInteger(nNpcTempRow, "AIParam9", 0, &m_AiParam[8]); g_NpcSetting.GetInteger(nNpcTempRow, "AIParam10", 5, &m_AiParam[9]); g_NpcSetting.GetInteger(nNpcTempRow, "FireResistMax", 0, &m_FireResistMax); g_NpcSetting.GetInteger(nNpcTempRow, "ColdResistMax", 0, &m_ColdResistMax); g_NpcSetting.GetInteger(nNpcTempRow, "LightResistMax", 0, &m_LightResistMax); g_NpcSetting.GetInteger(nNpcTempRow, "PoisonResistMax", 0, &m_PoisonResistMax); g_NpcSetting.GetInteger(nNpcTempRow, "PhysicsResistMax", 0, &m_PhysicsResistMax); g_NpcSetting.GetInteger(nNpcTempRow, "ActiveRadius", 30, &m_ActiveRadius); g_NpcSetting.GetInteger(nNpcTempRow, "VisionRadius", 40, &m_VisionRadius); char szDropFile[200]; g_NpcSetting.GetString(nNpcTempRow, "DropRateFile", "", szDropFile, sizeof(szDropFile)); strlwr(szDropFile); strcpy(m_szDropRateFile, szDropFile); KItemDropRateNode DropNode; strcpy(DropNode.m_szFileName, szDropFile); if (g_ItemDropRateBinTree.Find(DropNode)) { m_pItemDropRate = DropNode.m_pItemDropRate; } else { KItemDropRateNode newDropNode; strcpy(newDropNode.m_szFileName,szDropFile); newDropNode.m_pItemDropRate = g_GenItemDropRate(szDropFile); g_ItemDropRateBinTree.Insert(newDropNode); m_pItemDropRate = newDropNode.m_pItemDropRate; } int nAIMaxTime = 0; g_NpcSetting.GetInteger(nNpcTempRow, "AIMaxTime", 25, (int*)&nAIMaxTime); m_AIMAXTime = (BYTE)nAIMaxTime; g_NpcSetting.GetInteger(nNpcTempRow, "HitRecover", 0, &m_HitRecover); g_NpcSetting.GetInteger(nNpcTempRow, "ReviveFrame", 2400, &m_ReviveFrame); char szLevelScript[MAX_PATH]; g_NpcSetting.GetString(nNpcTempRow, "LevelScript", "", szLevelScript, MAX_PATH); if (!szLevelScript[0]) m_dwLevelSettingScript = 0; else { #ifdef WIN32 _strlwr(szLevelScript); #else for (int nl = 0; szLevelScript[nl]; nl++) if (szLevelScript[nl] >= 'A' && szLevelScript[nl] <= 'Z') szLevelScript[nl] += 'a' - 'A'; #endif m_dwLevelSettingScript = g_FileName2Id(szLevelScript); } #else g_NpcSetting.GetInteger(nNpcTempRow, "ArmorType", 0, &m_ArmorType); g_NpcSetting.GetInteger(nNpcTempRow, "HelmType", 0, &m_HelmType); g_NpcSetting.GetInteger(nNpcTempRow, "WeaponType", 0, &m_WeaponType); g_NpcSetting.GetInteger(nNpcTempRow, "HorseType", -1, &m_HorseType); g_NpcSetting.GetInteger(nNpcTempRow, "RideHorse",0, &m_bRideHorse); g_NpcSetting.GetString(nNpcTempRow, "ActionScript", "", ActionScript,sizeof(ActionScript)); g_NpcSetting.GetString(nNpcTempRow, "LevelScript", "", m_szLevelSettingScript, 100); #endif }
BOOL KMission::ExecuteScript(char * ScriptFileName, char * szFunName, int nParam) { if (!ScriptFileName || !ScriptFileName[0] || !szFunName || !szFunName[0]) return FALSE; return ExecuteScript(g_FileName2Id(ScriptFileName), szFunName, nParam); }