DragonNest/Server/DNVillageServer/DNScriptAPI.cpp

2716 lines
75 KiB
C++
Raw Normal View History

2024-12-19 09:48:26 +08:00
#include "stdafx.h"
#include "DnScriptAPI.h"
#include "DNUserSession.h"
#include "DNUserSessionManager.h"
#include "DNFieldManager.h"
#include "DNNpcObject.h"
#include "DNNpcObjectManager.h"
#include "DNUserItem.h"
#include "DNGameDataManager.h"
#include "DNLogConnection.h"
#include "DnLuaAPIDefine.h"
#include "DNReplaceString.h"
#include "EtUIXML.h"
#include "DNMasterConnection.h"
#include "DNPartyManager.h"
#include "DNQuestManager.h"
#include "TimeSet.h"
#if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
#include "ReputationSystemRepository.h"
#include "NpcReputationProcessor.h"
#endif // #if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
#if defined( PRE_ADD_SECONDARY_SKILL )
#include "SecondarySkillRepository.h"
#endif // #if defined( PRE_ADD_SECONDARY_SKILL )
#include "DNGuildSystem.h"
#if !defined(_FINAL_BUILD)
extern CLog g_ScriptLog;
#endif // #if !defined(_FINAL_BUILD)
#include "DNGuildWarManager.h"
#include "DNGuildVillage.h"
#include "DNPeriodQuestSystem.h"
#include "DNScriptAPICommon.h"
int CheckInvenForQuestReward(CDNUserBase* pUser, const TQuestReward& QuestReward, const bool bSelectedArray[])
{
return DNScriptAPI::CheckInvenForQuestReward(pUser, QuestReward, bSelectedArray);
}
void DefAllAPIFunc(lua_State* pLuaState)
{
DefineLuaAPI(pLuaState);
LUA_TINKER_DEF(pLuaState, api_npc_NextTalk);
LUA_TINKER_DEF(pLuaState, api_npc_NextScript);
LUA_TINKER_DEF(pLuaState, api_npc_SetParamString);
LUA_TINKER_DEF(pLuaState, api_npc_SetParamInt);
LUA_TINKER_DEF(pLuaState, api_log_AddLog);
LUA_TINKER_DEF(pLuaState, api_log_UserLog);
LUA_TINKER_DEF(pLuaState, api_quest_DumpQuest);
LUA_TINKER_DEF(pLuaState, api_quest_AddHuntingQuest);
LUA_TINKER_DEF(pLuaState, api_quest_AddQuest);
LUA_TINKER_DEF(pLuaState, api_quest_UserHasQuest);
LUA_TINKER_DEF(pLuaState, api_quest_GetPlayingQuestCnt);
LUA_TINKER_DEF(pLuaState, api_quest_CompleteQuest);
LUA_TINKER_DEF(pLuaState, api_quest_MarkingCompleteQuest);
LUA_TINKER_DEF(pLuaState, api_quest_IsMarkingCompleteQuest);
LUA_TINKER_DEF(pLuaState, api_npc_GetNpcIndex);
LUA_TINKER_DEF(pLuaState, api_quest_SetQuestStepAndJournalStep);
LUA_TINKER_DEF(pLuaState, api_quest_SetQuestStep);
LUA_TINKER_DEF(pLuaState, api_quest_GetQuestStep);
LUA_TINKER_DEF(pLuaState, api_quest_SetJournalStep);
LUA_TINKER_DEF(pLuaState, api_quest_GetJournalStep);
LUA_TINKER_DEF(pLuaState, api_quest_SetQuestMemo);
LUA_TINKER_DEF(pLuaState, api_quest_GetQuestMemo);
LUA_TINKER_DEF(pLuaState, api_quest_CancelQuest);
LUA_TINKER_DEF(pLuaState, api_quest_SetCountingInfo);
LUA_TINKER_DEF(pLuaState, api_quest_ClearCountingInfo);
LUA_TINKER_DEF(pLuaState, api_quest_IsAllCompleteCounting);
LUA_TINKER_DEF(pLuaState, api_user_CheckInvenForAddItem);
LUA_TINKER_DEF(pLuaState, api_user_CheckInvenForAddItemList);
LUA_TINKER_DEF(pLuaState, api_user_AddItem);
LUA_TINKER_DEF(pLuaState, api_user_DelItem);
LUA_TINKER_DEF(pLuaState, api_user_AllDelItem);
LUA_TINKER_DEF(pLuaState, api_user_HasItem);
LUA_TINKER_DEF(pLuaState, api_user_GetUserClassID);
LUA_TINKER_DEF(pLuaState, api_user_GetUserJobID);
LUA_TINKER_DEF(pLuaState, api_user_GetUserLevel);
LUA_TINKER_DEF(pLuaState, api_user_GetUserInvenBlankCount);
LUA_TINKER_DEF(pLuaState, api_quest_GetUserQuestInvenBlankCount);
LUA_TINKER_DEF(pLuaState, api_user_AddExp);
LUA_TINKER_DEF(pLuaState, api_user_AddCoin);
LUA_TINKER_DEF(pLuaState, api_user_PlayCutScene);
LUA_TINKER_DEF(pLuaState, api_ui_OpenWareHouse);
LUA_TINKER_DEF(pLuaState, api_ui_OpenShop);
LUA_TINKER_DEF(pLuaState, api_ui_OpenSkillShop);
LUA_TINKER_DEF(pLuaState, api_ui_OpenMarket);
LUA_TINKER_DEF(pLuaState, api_ui_OpenCompoundEmblem);
LUA_TINKER_DEF(pLuaState, api_ui_OpenUpgradeJewel);
LUA_TINKER_DEF(pLuaState, api_ui_OpenMailBox);
LUA_TINKER_DEF(pLuaState, api_ui_OpenUpgradeItem);
LUA_TINKER_DEF(pLuaState, api_ui_OpenDisjointItem);
LUA_TINKER_DEF(pLuaState, api_ui_OpenCompoundItem);
LUA_TINKER_DEF(pLuaState, api_ui_OpenCashShop);
LUA_TINKER_DEF(pLuaState, api_ui_OpenGuildMgrBox);
LUA_TINKER_DEF(pLuaState, api_ui_OpenGacha_JP);
LUA_TINKER_DEF(pLuaState, api_ui_OpenGiveNpcPresent);
LUA_TINKER_DEF(pLuaState, api_ui_OpenDarkLairRankBoard);
LUA_TINKER_DEF(pLuaState, api_ui_OpenPvPLadderRankBoard);
LUA_TINKER_DEF(pLuaState, api_ui_OpenGlyphLift);
#ifdef PRE_ADD_OPEN_QUEST_TEXTURE_DIALOG
LUA_TINKER_DEF(pLuaState, api_ui_OpenTextureDialog);
LUA_TINKER_DEF(pLuaState, api_ui_CloseTextureDialog);
#endif
LUA_TINKER_DEF(pLuaState, api_user_UserMessage);
LUA_TINKER_DEF(pLuaState, api_quest_AddSymbolItem);
LUA_TINKER_DEF(pLuaState, api_quest_DelSymbolItem);
LUA_TINKER_DEF(pLuaState, api_quest_HasSymbolItem);
LUA_TINKER_DEF(pLuaState, api_quest_CheckQuestInvenForAddItem);
LUA_TINKER_DEF(pLuaState, api_quest_CheckQuestInvenForAddItemList);
LUA_TINKER_DEF(pLuaState, api_quest_AddQuestItem);
LUA_TINKER_DEF(pLuaState, api_quest_DelQuestItem);
LUA_TINKER_DEF(pLuaState, api_quest_AllDelQuestItem);
LUA_TINKER_DEF(pLuaState, api_quest_HasQuestItem);
LUA_TINKER_DEF(pLuaState, api_ui_OpenGuildCreate);
LUA_TINKER_DEF(pLuaState, api_ui_OpenQuestReward);
LUA_TINKER_DEF(pLuaState, api_quest_RewardQuestUser);
LUA_TINKER_DEF(pLuaState, api_user_ChangeChannel);
LUA_TINKER_DEF(pLuaState, api_user_ChangeMap);
LUA_TINKER_DEF(pLuaState, api_user_GetPartymemberCount);
LUA_TINKER_DEF(pLuaState, api_user_IsPartymember);
LUA_TINKER_DEF(pLuaState, api_user_RequestEnterPVP);
LUA_TINKER_DEF(pLuaState, api_user_GetStageConstructionLevel);
LUA_TINKER_DEF(pLuaState, api_user_GetMapIndex);
LUA_TINKER_DEF(pLuaState, api_user_GetLastStageClearRank);
LUA_TINKER_DEF(pLuaState, api_user_EnoughCoin );
LUA_TINKER_DEF(pLuaState, api_user_GetCoin);
LUA_TINKER_DEF(pLuaState, api_user_DelCoin);
LUA_TINKER_DEF(pLuaState, api_user_IsMissionGained);
LUA_TINKER_DEF(pLuaState, api_user_IsMissionAchieved);
LUA_TINKER_DEF(pLuaState, api_user_HasItemWarehouse);
LUA_TINKER_DEF(pLuaState, api_user_HasItemEquip);
LUA_TINKER_DEF(pLuaState, api_guild_GetGuildMemberRole);
LUA_TINKER_DEF(pLuaState, api_quest_IncQuestMemo);
LUA_TINKER_DEF(pLuaState, api_quest_DecQuestMemo);
LUA_TINKER_DEF(pLuaState, api_user_SetUserJobID);
LUA_TINKER_DEF(pLuaState, api_user_IsJobInSameLine);
LUA_TINKER_DEF(pLuaState, api_user_HasCashItem);
LUA_TINKER_DEF(pLuaState, api_user_HasCashItemEquip);
LUA_TINKER_DEF(pLuaState, api_quest_IncCounting);
LUA_TINKER_DEF(pLuaState, api_quest_IsPlayingQuestMaximum);
LUA_TINKER_DEF(pLuaState, api_quest_ForceCompleteQuest);
LUA_TINKER_DEF(pLuaState, api_quest_ResetSkill);
LUA_TINKER_DEF(pLuaState, api_quest_GetWorldEventStep);
LUA_TINKER_DEF(pLuaState, api_quest_GetWorldEventCount);
LUA_TINKER_DEF(pLuaState, api_quest_ReturnItemToNpc);
LUA_TINKER_DEF(pLuaState, api_quest_OpenScoreWorldEvent);
LUA_TINKER_DEF(pLuaState, api_quest_OpenFarmAreaList);
LUA_TINKER_DEF(pLuaState, api_user_ChangePos);
LUA_TINKER_DEF(pLuaState, api_npc_GetFavorPoint);
LUA_TINKER_DEF(pLuaState, api_npc_GetMalicePoint);
LUA_TINKER_DEF(pLuaState, api_npc_GetFavorPercent);
LUA_TINKER_DEF(pLuaState, api_npc_GetMalicePercent);
LUA_TINKER_DEF(pLuaState, api_npc_AddFavorPoint);
LUA_TINKER_DEF(pLuaState, api_npc_AddMalicePoint);
LUA_TINKER_DEF(pLuaState, api_npc_SendSelectedPresent);
LUA_TINKER_DEF(pLuaState, api_npc_Rage);
LUA_TINKER_DEF(pLuaState, api_npc_Disappoint);
LUA_TINKER_DEF(pLuaState, api_user_ResetSkill);
LUA_TINKER_DEF(pLuaState, api_npc_CreateSecondarySkill );
LUA_TINKER_DEF(pLuaState, api_npc_CheckSecondarySkill );
LUA_TINKER_DEF(pLuaState, api_ui_OpenGuildWareHouse );
LUA_TINKER_DEF(pLuaState, api_guild_HasGuildWare );
LUA_TINKER_DEF(pLuaState, api_ui_OpenMovieBrowser);
LUA_TINKER_DEF(pLuaState, api_guildwar_IsPreparation );
LUA_TINKER_DEF(pLuaState, api_guildwar_GetStep );
LUA_TINKER_DEF(pLuaState, api_guildwar_GetTrialCurrentState );
LUA_TINKER_DEF(pLuaState, api_guildWar_GetTrialStats );
LUA_TINKER_DEF(pLuaState, api_guildWar_GetMatchList );
LUA_TINKER_DEF(pLuaState, api_guildWar_GetPopularityVote );
LUA_TINKER_DEF(pLuaState, api_guildWar_GetFinalProgress );
LUA_TINKER_DEF(pLuaState, api_ui_OpenCompound2Item);
LUA_TINKER_DEF(pLuaState, api_ui_OpenBrowser);
#if defined (PRE_ADD_DONATION)
LUA_TINKER_DEF(pLuaState, api_ui_OpenDonation);
#endif // #if defined (PRE_ADD_DONATION)
LUA_TINKER_DEF(pLuaState, api_ui_OpenInventory);
LUA_TINKER_DEF(pLuaState, api_user_GetPCCafe);
LUA_TINKER_DEF(pLuaState, api_user_SetPCCafeItem);
#if defined(PRE_ADD_REPAIR_NPC)
LUA_TINKER_DEF(pLuaState, api_user_RepairItem);
#endif
#ifdef PRE_ADD_EXCHANGE_ENCHANT
LUA_TINKER_DEF(pLuaState, api_ui_OpenExchangeEnchant);
#endif
#if defined(PRE_ADD_CHALLENGE_DARKLAIR)
LUA_TINKER_DEF(pLuaState, api_env_CheckCloseGateByTime);
#endif
#ifdef PRE_ADD_COSRANDMIX_ACCESSORY
LUA_TINKER_DEF(pLuaState, api_ui_OpenCostumeRandomMix);
#endif
#if defined( PRE_DRAGONBUFF )
LUA_TINKER_DEF(pLuaState, api_quest_WorldBuffCheck);
LUA_TINKER_DEF(pLuaState, api_quest_ApplyWorldBuff);
#endif
#if defined( PRE_ADD_DWC )
LUA_TINKER_DEF(pLuaState, api_ui_OpenCreateDwcTeamDlg);
#endif
LUA_TINKER_DEF(pLuaState, api_ui_OpenJobChange);
}
CDNUserSession* __GetUserObj(UINT nUserObjectID)
{
return g_pUserSessionManager->FindUserSessionByObjectID(nUserObjectID);
}
// desc : <20>κ<EFBFBD><CEBA><EFBFBD><E4B8AE> Ư<><C6AF> <20>󽽷Կ<F3BDBDB7> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (P.S.> api_user_CheckInvenForAddItemList <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
bool __SetBlankInventorySlot(TInvenItemCnt pTempInven[INVENTORYMAX], const TItem& Item, int iIndex)
{
DN_ASSERT(NULL != pTempInven, "Invalid!");
DN_ASSERT(0 != Item.nItemID, "Invalid!");
DN_ASSERT(0 < Item.wCount, "Invalid!");
DN_ASSERT(-1 < iIndex, "Invalid!");
if (pTempInven[iIndex].nItemID != 0) {
return false;
}
pTempInven[iIndex].Set( Item.nItemID, Item.wCount, Item.bSoulbound, Item.cSealCount );
return true;
}
// desc : <20>κ<EFBFBD><CEBA><EFBFBD><E4B8AE> <20>󽽷Ե鿡 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ư<><C6AF> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŭ <20><><EFBFBD><EFBFBD> (P.S.> api_user_CheckInvenForAddItemList <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
bool __SetBlankInventorySlotCount(TInvenItemCnt pTempInven[INVENTORYMAX], const TItem& Item, int nOverlapCount, int nCount /* ä<><C3A4> <20><><EFBFBD>԰<EFBFBD><D4B0><EFBFBD> */)
{
DN_ASSERT(NULL != pTempInven, "Invalid!");
DN_ASSERT(0 != Item.nItemID, "Invalid!");
DN_ASSERT(0 < Item.wCount, "Invalid!");
DN_ASSERT(0 < nOverlapCount, "Invalid!");
DN_ASSERT(0 < nCount, "Invalid!");
// !!! <20><><EFBFBD><EFBFBD> - <20><> <20>Լ<EFBFBD> ȣ<><C8A3> <20><><EFBFBD><EFBFBD> üũ<C3BC><C5A9> Ȯ<><C8AE><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>κи<CEBA> <20><><EFBFBD><EFBFBD>
int nBundle = Item.wCount / nOverlapCount;
int nRemain = Item.wCount % nOverlapCount;
for (int iIndex = 0 ; INVENTORYMAX > iIndex ; ++iIndex)
{
if (0 < nBundle) {
if (pTempInven[iIndex].nItemID == 0)
{
pTempInven[iIndex].Set( Item.nItemID, nOverlapCount, Item.bSoulbound, Item.cSealCount );
--nBundle;
continue;
}
}
if (0 < nRemain)
{
if( CDNUserItem::bIsSameItem( &Item, &pTempInven[iIndex] ) && nOverlapCount >= pTempInven[iIndex].wCount + nRemain )
{
pTempInven[iIndex].wCount += nRemain;
nRemain = 0;
continue;
}
}
}
if (0 < nBundle)
{
return false;
}
if (0 < nRemain)
{
for (int iIndex = 0 ; INVENTORYMAX > iIndex ; ++iIndex)
{
if (pTempInven[iIndex].nItemID == 0) {
pTempInven[iIndex].Set( Item.nItemID, nRemain, Item.bSoulbound, Item.cSealCount );
nRemain = 0;
break;
}
}
}
if (0 < nRemain)
{
return false;
}
return true;
}
// desc : <20>κ<EFBFBD><CEBA><EFBFBD><E4B8AE> Ư<><C6AF> <20><><EFBFBD>Կ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ø <20><><EFBFBD><EFBFBD> (P.S.> api_user_CheckInvenForAddItemList <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
bool __SetOverlapInventorySlot(TInvenItemCnt pTempInven[INVENTORYMAX], const TItem& Item, int nOverlapCount, int iIndex)
{
DN_ASSERT(NULL != pTempInven, "Invalid!");
DN_ASSERT(0 != Item.nItemID, "Invalid!");
DN_ASSERT(0 < Item.wCount, "Invalid!");
DN_ASSERT(0 < nOverlapCount, "Invalid!");
DN_ASSERT(-1 < iIndex, "Invalid!");
if ( CDNUserItem::bIsDifferentItem( &Item, &pTempInven[iIndex] ) || nOverlapCount < pTempInven[iIndex].wCount + Item.wCount )
{
return false;
}
pTempInven[iIndex].wCount += Item.wCount;
return true;
}
// desc : <20>κ<EFBFBD><CEBA><EFBFBD><E4B8AE> <20>󽽷<EFBFBD> ã<><C3A3> (P.S.> api_user_CheckInvenForAddItemList <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
int __FindBlankInventorySlot(TInvenItemCnt pTempInven[INVENTORYMAX], int nTempInvenCount)
{
DN_ASSERT(NULL != pTempInven, "Invalid!");
DN_ASSERT(CHECK_RANGE(nTempInvenCount, 0, INVENTORYMAX), "Invalid!");
for (int iIndex = 0 ; nTempInvenCount > iIndex ; ++iIndex) {
if (pTempInven[iIndex].nItemID == 0) {
return iIndex;
}
}
return -1;
}
// desc : <20>κ<EFBFBD><CEBA><EFBFBD><E4B8AE> <20>󽽷<EFBFBD><F3BDBDB7><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD><D6B4><EFBFBD> <20><><EFBFBD><EFBFBD> ã<><C3A3> (P.S.> api_user_CheckInvenForAddItemList <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
int __FindBlankInventorySlotCount(TInvenItemCnt pTempInven[INVENTORYMAX], int nTempInvenCount)
{
DN_ASSERT(NULL != pTempInven, "Invalid!");
DN_ASSERT(CHECK_RANGE(nTempInvenCount, 0, INVENTORYMAX), "Invalid!");
int nCount = 0;
for (int iIndex = 0 ; nTempInvenCount > iIndex ; ++iIndex) {
if (pTempInven[iIndex].nItemID == 0) {
++nCount;
}
}
return nCount;
}
// desc : <20>κ<EFBFBD><CEBA><EFBFBD><E4B8AE> <20><> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> wCount <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> Index ã<><C3A3> (P.S.> api_user_CheckInvenForAddItemList <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
int __FindOverlapInventorySlot(TInvenItemCnt pTempInven[INVENTORYMAX], int nTempInvenCount, const TItem& Item)
{
DN_ASSERT(NULL != pTempInven, "Invalid!");
DN_ASSERT(CHECK_RANGE(nTempInvenCount, 0, INVENTORYMAX), "Invalid!");
if ((Item.nItemID <= 0) || (Item.wCount <= 0)) DN_RETURN(-1);
TItemData *pItemData = NULL;
for (int iIndex = 0 ; nTempInvenCount > iIndex ; ++iIndex) {
if (pTempInven[iIndex].nItemID == 0) {
// <20><>ĭ<EFBFBD≯<EFBFBD> <20>н<EFBFBD>
continue;
}
pItemData = g_pDataManager->GetItemData(pTempInven[iIndex].nItemID);
if (!pItemData) continue;
if (pItemData->nOverlapCount == 1) continue; // <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>н<EFBFBD>
if( CDNUserItem::bIsDifferentItem( &Item, &pTempInven[iIndex] ) ) continue; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ<EFBFBD>
if (pItemData->nOverlapCount >= pTempInven[iIndex].wCount + Item.wCount) {
return iIndex;
}
}
return -1;
}
// desc : <20>κ<EFBFBD><CEBA><EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˻<EFBFBD> (P.S.> api_user_CheckInvenForAddItemList <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
bool __IsValidSpaceInventorySlotAndSet(TInvenItemCnt pTempInven[INVENTORYMAX], int nTempInvenCount, const TItem& Item )
{
DN_ASSERT(NULL != pTempInven, "Invalid!");
DN_ASSERT(CHECK_RANGE(nTempInvenCount, 0, INVENTORYMAX), "Invalid!");
if ((Item.nItemID <= 0) || (Item.wCount <= 0))
DN_RETURN(false);
TItemData *pItem = g_pDataManager->GetItemData(Item.nItemID);
if (!pItem) return false;
if (ITEMTYPE_QUEST == pItem->nType) {
return false;
}
int nCount = 0;
if (pItem->nOverlapCount == 1){ // <20><>ġ<EFBFBD><C4A1> <20>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
nCount = __FindBlankInventorySlotCount(pTempInven, nTempInvenCount);
if (Item.wCount > nCount) {
// <20>󽽷<EFBFBD><F3BDBDB7>̶<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>
return false;
}
return(__SetBlankInventorySlotCount(pTempInven, Item, 1, nCount));
}
else {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28>κ<EFBFBD><CEBA><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>۵<EFBFBD><DBB5><EFBFBD> <20><EFBFBD><EEB0B3> <20><><EFBFBD><EFBFBD><EFBFBD>־ <20>Ű<EFBFBD><C5B0>Ⱦ<EFBFBD><C8BE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
if (pItem->nOverlapCount < Item.wCount){ // <20>ѹ<EFBFBD><D1B9><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><EFBFBD><E7BAB8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nBundle = Item.wCount / pItem->nOverlapCount;
if ((Item.wCount % pItem->nOverlapCount) > 0) nBundle++;
nCount = __FindBlankInventorySlotCount(pTempInven, nTempInvenCount);
if (nBundle > nCount) {
// <20><><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD> <20>󽽷<EFBFBD><F3BDBDB7>̶<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>
return false;
}
return(__SetBlankInventorySlotCount(pTempInven, Item, pItem->nOverlapCount, nCount));
}
else {
int nBlank = __FindOverlapInventorySlot(pTempInven, nTempInvenCount, Item ); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD> <20>ѹ濡 <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD><D6B4><EFBFBD>
if (nBlank < 0){
nBlank = __FindBlankInventorySlot(pTempInven, nTempInvenCount);
if (nBlank < 0) {
return false;
}
return(__SetBlankInventorySlot(pTempInven, Item, nBlank));
}
return(__SetOverlapInventorySlot(pTempInven, Item, pItem->nOverlapCount, nBlank));
}
}
return true;
}
// desc : <20><><EFBFBD><EFBFBD>Ʈ <20>κ<EFBFBD><CEBA><EFBFBD><E4B8AE> Ư<><C6AF> <20>󽽷Կ<F3BDBDB7> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (P.S.> api_quest_CheckQuestInvenForAddItemList <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
bool __SetBlankQuestInventorySlot(TQuestItemCnt pTempQuestInven[QUESTINVENTORYMAX], int nItemID, short wCount, int iIndex)
{
DN_ASSERT(NULL != pTempQuestInven, "Invalid!");
DN_ASSERT(0 != nItemID, "Invalid!");
DN_ASSERT(0 < wCount, "Invalid!");
DN_ASSERT(-1 < iIndex, "Invalid!");
if (pTempQuestInven[iIndex].nItemID != 0) {
return false;
}
pTempQuestInven[iIndex].Set(nItemID, wCount);
return true;
}
// desc : <20><><EFBFBD><EFBFBD>Ʈ <20>κ<EFBFBD><CEBA><EFBFBD><E4B8AE> <20>󽽷Ե鿡 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ư<><C6AF> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŭ <20><><EFBFBD><EFBFBD> (P.S.> api_quest_CheckQuestInvenForAddItemList <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
bool __SetBlankQuestInventorySlotCount(TQuestItemCnt pTempQuestInven[QUESTINVENTORYMAX], int nItemID, short wCount, int nOverlapCount, int nCount /* ä<><C3A4> <20><><EFBFBD>԰<EFBFBD><D4B0><EFBFBD> */)
{
DN_ASSERT(NULL != pTempQuestInven, "Invalid!");
DN_ASSERT(0 != nItemID, "Invalid!");
DN_ASSERT(0 < wCount, "Invalid!");
DN_ASSERT(0 < nOverlapCount, "Invalid!");
DN_ASSERT(0 < nCount, "Invalid!");
// !!! <20><><EFBFBD><EFBFBD> - <20><> <20>Լ<EFBFBD> ȣ<><C8A3> <20><><EFBFBD><EFBFBD> üũ<C3BC><C5A9> Ȯ<><C8AE><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>κи<CEBA> <20><><EFBFBD><EFBFBD>
int nBundle = wCount / nOverlapCount;
int nRemain = wCount % nOverlapCount;
for (int iIndex = 0 ; QUESTINVENTORYMAX > iIndex ; ++iIndex) {
if (0 < nBundle) {
if (pTempQuestInven[iIndex].nItemID == 0) {
pTempQuestInven[iIndex].Set(nItemID, nOverlapCount);
--nBundle;
continue;
}
}
if (0 < nRemain) {
if (pTempQuestInven[iIndex].nItemID == nItemID &&
nOverlapCount >= pTempQuestInven[iIndex].wCount + nRemain
)
{
pTempQuestInven[iIndex].wCount += nRemain;
nRemain = 0;
continue;
}
}
}
if (0 < nBundle) {
return false;
}
if (0 < nRemain) {
for (int iIndex = 0 ; QUESTINVENTORYMAX > iIndex ; ++iIndex) {
if (pTempQuestInven[iIndex].nItemID == 0) {
pTempQuestInven[iIndex].Set(nItemID, nRemain);
nRemain = 0;
break;
}
}
}
if (0 < nRemain) {
return false;
}
return true;
}
// desc : <20><><EFBFBD><EFBFBD>Ʈ <20>κ<EFBFBD><CEBA><EFBFBD><E4B8AE> Ư<><C6AF> <20><><EFBFBD>Կ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ø <20><><EFBFBD><EFBFBD> (P.S.> api_quest_CheckQuestInvenForAddItemList <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
bool __SetOverlapQuestInventorySlot(TQuestItemCnt pTempQuestInven[QUESTINVENTORYMAX], int nItemID, short wCount, int nOverlapCount, int iIndex)
{
DN_ASSERT(NULL != pTempQuestInven, "Invalid!");
DN_ASSERT(0 != nItemID, "Invalid!");
DN_ASSERT(0 < wCount, "Invalid!");
DN_ASSERT(0 < nOverlapCount, "Invalid!");
DN_ASSERT(-1 < iIndex, "Invalid!");
if (pTempQuestInven[iIndex].nItemID != nItemID ||
nOverlapCount < pTempQuestInven[iIndex].wCount + wCount
)
{
return false;
}
pTempQuestInven[iIndex].wCount += wCount;
return true;
}
// desc : <20><><EFBFBD><EFBFBD>Ʈ <20>κ<EFBFBD><CEBA><EFBFBD><E4B8AE> <20>󽽷<EFBFBD><F3BDBDB7><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD><D6B4><EFBFBD> <20><><EFBFBD><EFBFBD> ã<><C3A3> (P.S.> api_quest_CheckQuestInvenForAddItemList <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
int __FindBlankQuestInventorySlotCount(TQuestItemCnt pTempQuestInven[QUESTINVENTORYMAX])
{
DN_ASSERT(NULL != pTempQuestInven, "Invalid!");
int nCount = 0;
for (int iIndex = 0 ; QUESTINVENTORYMAX > iIndex ; ++iIndex) {
if (pTempQuestInven[iIndex].nItemID == 0) {
++nCount;
}
}
return nCount;
}
// desc : <20><><EFBFBD><EFBFBD>Ʈ <20>κ<EFBFBD><CEBA><EFBFBD><E4B8AE> <20>󽽷<EFBFBD> ã<><C3A3> (P.S.> api_quest_CheckQuestInvenForAddItemList <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
int __FindBlankQuestInventorySlot(TQuestItemCnt pTempQuestInven[QUESTINVENTORYMAX])
{
DN_ASSERT(NULL != pTempQuestInven, "Invalid!");
for (int iIndex = 0 ; QUESTINVENTORYMAX > iIndex ; ++iIndex) {
if (pTempQuestInven[iIndex].nItemID == 0) {
return iIndex;
}
}
return -1;
}
// desc : <20><><EFBFBD><EFBFBD>Ʈ <20>κ<EFBFBD><CEBA><EFBFBD><E4B8AE> <20><> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> wCount <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> Index ã<><C3A3> (P.S.> api_quest_CheckQuestInvenForAddItemList <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
int __FindOverlapQuestInventorySlot(TQuestItemCnt pTempQuestInven[QUESTINVENTORYMAX], int nItemID, short wCount)
{
DN_ASSERT(NULL != pTempQuestInven, "Invalid!");
if ((nItemID <= 0) || (wCount <= 0)) DN_RETURN(-1);
bool boFlag = false;
TItemData *pQuestItem = NULL;
for (int iIndex = 0 ; QUESTINVENTORYMAX > iIndex ; ++iIndex) {
if (pTempQuestInven[iIndex].nItemID == 0) continue; // <20><>ĭ<EFBFBD≯<EFBFBD> <20>н<EFBFBD>
pQuestItem = g_pDataManager->GetItemData(pTempQuestInven[iIndex].nItemID);
if (!pQuestItem) continue;
if (pQuestItem->nOverlapCount == 1) continue; // <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>н<EFBFBD>
if (pTempQuestInven[iIndex].nItemID != nItemID) continue; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴϴ<C6B4>
if (pQuestItem->nOverlapCount >= pTempQuestInven[iIndex].wCount + wCount){
return iIndex;
}
}
return -1;
}
// desc : <20><><EFBFBD><EFBFBD>Ʈ <20>κ<EFBFBD><CEBA><EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˻<EFBFBD> (P.S.> api_quest_CheckQuestInvenForAddItemList <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
bool __IsValidSpaceQuestInventorySlotAndSet(TQuestItemCnt pTempQuestInven[QUESTINVENTORYMAX], int nItemID, short wCount)
{
DN_ASSERT(NULL != pTempQuestInven, "Invalid!");
if ((nItemID <= 0) || (wCount <= 0)) DN_RETURN(false);
TItemData *pItem = g_pDataManager->GetItemData(nItemID);
if (!pItem) return false;
if (ITEMTYPE_QUEST != pItem->nType) {
return false;
}
int nCount = 0;
if (pItem->nOverlapCount == 1){ // <20><>ġ<EFBFBD><C4A1> <20>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
nCount = __FindBlankQuestInventorySlotCount(pTempQuestInven);
if (wCount > nCount) {
// <20>󽽷<EFBFBD><F3BDBDB7>̶<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>
return false;
}
return(__SetBlankQuestInventorySlotCount(pTempQuestInven, nItemID, wCount, 1, nCount));
}
else { // <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nRemain = 0, nBlank = 0, nBundle = 0;
int nCount = __FindBlankQuestInventorySlotCount(pTempQuestInven); // <20><> <20><><EFBFBD>԰<EFBFBD><D4B0><EFBFBD>
if (pItem->nOverlapCount >= wCount){
nRemain = wCount;
}
else {
nBundle = wCount / pItem->nOverlapCount;
nRemain = wCount % pItem->nOverlapCount;
if (nBundle > nCount) return false; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
if (nRemain > 0){
nBlank = __FindOverlapQuestInventorySlot(pTempQuestInven, nItemID, nRemain); // ¥<><C2A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD><D6B4><EFBFBD>
if (nBlank < 0){ // ¥<><C2A5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if ((nBundle + 1) > nCount) return false; // <20><>ĭ<EFBFBD><C4AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD><D6B4><EFBFBD>...
}
}
return(__SetBlankQuestInventorySlotCount(pTempQuestInven, nItemID, wCount, pItem->nOverlapCount, nCount));
}
return true;
}
void api_log_AddLog(const char* szLog)
{
DNScriptAPI::api_log_AddLog(szLog);
}
void api_log_UserLog(UINT nUserObjectID, const char* szLog)
{
#ifndef _FINAL_BUILD
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser ) return;
DNScriptAPI::api_log_UserLog(pUser, szLog);
#endif // _FINAL_BUILD
}
void api_quest_DumpQuest(UINT nUserObjectID)
{
#ifndef _FINAL_BUILD
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser ) return;
DNScriptAPI::api_quest_DumpQuest(pUser);
#endif // _FINAL_BUILD
}
void api_npc_NextTalk(UINT nUserObjectID, UINT nNpcObjectID , const char* szTalkIndex, const char* szTargetFile)
{
CDNUserBase* pUser = __GetUserObj(nUserObjectID);
if ( !pUser ) return;
DNScriptAPI::api_npc_NextTalk(pUser, nNpcObjectID, szTalkIndex, szTargetFile);
}
void api_npc_NextScript(UINT nUserObjectID, UINT nNpcObjectID, const char* szTalkIndex, const char* szTargetFile)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if (!pUser)
{
g_Log.Log(LogType::_ERROR, pUser, L"[CS_NPCTALK] (5-1) UID:%d, PAK:%d/%s/%s\n", nUserObjectID, nNpcObjectID, szTalkIndex,szTargetFile);
return;
}
CDNNpcObject* pNpc = g_pFieldManager->GetNpcObjectByNpcObjID(pUser->GetChannelID(), nNpcObjectID);
if ( !pNpc ) return;
DNScriptAPI::api_npc_NextScript(pUser, pNpc, nNpcObjectID, szTalkIndex, szTargetFile);
}
int api_npc_SetParamString(UINT nUserObjectID, const char* szParamKey, int nParamID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser ) return -1;
return DNScriptAPI::api_npc_SetParamString(pUser, szParamKey, nParamID);
}
int api_npc_SetParamInt(UINT nUserObjectID, const char* szParamKey, int nValue)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser ) return -1;
return DNScriptAPI::api_npc_SetParamInt(pUser, szParamKey, nValue);
}
int api_quest_AddHuntingQuest(UINT nUserObjectID, int nQuestID, int nQuestStep, int nJournalStep, int nCountingSlot, int nCountingType, int nCountingIndex, int nTargetCnt)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser ) return -1;
return DNScriptAPI::api_quest_AddHuntingQuest(pUser, nQuestID, nQuestStep, nJournalStep, nCountingSlot, nCountingType, nCountingIndex, nTargetCnt);
}
// nQuestType : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20>Ű<EFBFBD><C5B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
int api_quest_AddQuest(UINT nUserObjectID, int nQuestID, int nQuestType)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser ) return -1;
return DNScriptAPI::api_quest_AddQuest(pUser, nQuestID, nQuestType);
}
int api_quest_CompleteQuest(UINT nUserObjectID, int nQuestID, bool bDelPlayList, bool bRepeat)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser ) return -1;
return DNScriptAPI::api_quest_CompleteQuest(pUser, nQuestID, bDelPlayList);
}
int api_quest_MarkingCompleteQuest(UINT nUserObjectID, int nQuestID)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><>ŷ<EFBFBD><C5B7> api_quest_CompleteQuest<73><74><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̻<EFBFBD> <20><> API<50><49> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
return 1;
}
int api_quest_IsMarkingCompleteQuest(UINT nUserObjectID, int nQuestID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_quest_IsMarkingCompleteQuest(pUser, nQuestID);
}
int api_quest_UserHasQuest(UINT nUserObjectID, int nQuestID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_quest_UserHasQuest(pUser, nQuestID);
}
int api_quest_GetPlayingQuestCnt(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_quest_GetPlayingQuestCnt(pUser);
}
int api_npc_GetNpcIndex(UINT nUserObjectID, UINT nNpcObjID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
CDNNpcObject* pNpc = g_pFieldManager->GetNpcObjectByNpcObjID(pUser->GetChannelID(), nNpcObjID);
if ( !pNpc )
return -2;
return DNScriptAPI::api_npc_GetNpcIndex(pNpc);
}
int api_quest_SetQuestStepAndJournalStep(UINT nUserObjectID, int nQuestID, short nQuestStep, int nJournalStep)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser ) return -1;
return DNScriptAPI::api_quest_SetQuestStepAndJournalStep(pUser, nQuestID, nQuestStep, nJournalStep);
}
int api_quest_SetQuestStep(UINT nUserObjectID, int nQuestID, short nQuestStep)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_quest_SetQuestStep(pUser, nQuestID, nQuestStep);
}
int api_quest_GetQuestStep(UINT nUserObjectID, int nQuestID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_quest_GetQuestStep(pUser, nQuestID);
}
int api_quest_SetJournalStep(UINT nUserObjectID, int nQuestID, int nJournalStep)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_quest_SetJournalStep(pUser, nQuestID, nJournalStep);
}
int api_quest_GetJournalStep(UINT nUserObjectID, int nQuestID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_quest_GetJournalStep(pUser, nQuestID);
}
int api_quest_SetQuestMemo(UINT nUserObjectID, int nQuestID, char nMemoIndex, TP_QUESTMEMO nVal)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser ) {
return -1;
}
return DNScriptAPI::api_quest_SetQuestMemo(pUser, nQuestID, nMemoIndex, nVal);
}
int api_quest_GetQuestMemo(UINT nUserObjectID, int nQuestID, char nMemoIndex)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser ) {
return -1;
}
return DNScriptAPI::api_quest_GetQuestMemo(pUser, nQuestID, nMemoIndex);
}
int api_quest_SetCountingInfo(UINT nUserObjectID, int nQuestID, int nSlot, int nCountingType, int nCountingIndex, int nTargetCnt)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_quest_SetCountingInfo(pUser, nQuestID, nSlot, nCountingType, nCountingIndex, nTargetCnt);
}
int api_quest_ClearCountingInfo(UINT nUserObjectID, int nQuestID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_quest_ClearCountingInfo(pUser, nQuestID);
}
int api_quest_IsAllCompleteCounting(UINT nUserObjectID, int nQuestID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_quest_IsAllCompleteCounting(pUser, nQuestID);
}
int api_quest_CancelQuest(UINT nUserObjectID, int nQuestID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser ) return -1;
#if defined(_CH)
if (pUser->GetFCMState() != FCMSTATE_NONE){
pUser->SendQuestResult(ERROR_QUEST_FCM);
return -1;
}
#endif
pUser->GetQuest()->OnCancelQuest(nQuestID);
return 1;
}
int api_user_CheckInvenForAddItem(UINT nUserObjectID, int nItemIndex, int nItemCnt)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_user_CheckInvenForAddItem(pUser, nItemIndex, nItemCnt);
}
int api_user_CheckInvenForAddItemList(UINT nUserObjectID, lua_tinker::table ItemTable)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if (!pUser) {
return -1;
}
return DNScriptAPI::api_user_CheckInvenForAddItemList(pUser, ItemTable);
}
int api_user_AddItem(UINT nUserObjectID, int nItemIndex, int nItemCnt, int nQuestID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_user_AddItem(pUser, nItemIndex, nItemCnt, nQuestID);
}
int api_user_DelItem(UINT nUserObjectID, int nItemIndex, int nItemCnt, int nQuestID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_user_DelItem(pUser, nItemIndex, nItemCnt, nQuestID);
}
int api_user_AllDelItem(UINT nUserObjectID, int nItemIndex)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_user_AllDelItem(pUser, nItemIndex);
}
int api_user_HasItem(UINT nUserObjectID, int nItemIndex, int nItemCnt)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_user_HasItem(pUser, nItemIndex, nItemCnt);
}
int api_user_GetUserClassID(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser ) return -1;
return DNScriptAPI::api_user_GetUserClassID(pUser);
}
int api_user_GetUserJobID(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser ) return -1;
return DNScriptAPI::api_user_GetUserJobID(pUser);
}
int api_user_GetUserLevel(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser ) return -1;
return DNScriptAPI::api_user_GetUserLevel(pUser);
}
int api_user_GetUserInvenBlankCount(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_user_GetUserInvenBlankCount(pUser);
}
int api_quest_GetUserQuestInvenBlankCount(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_quest_GetUserQuestInvenBlankCount(pUser);
}
/*
desc : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD> <EFBFBD>߰<EFBFBD><EFBFBD>Ѵ<EFBFBD>.
param : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ
return : -1 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
*/
int api_user_AddExp(UINT nUserObjectID, int nQuestID, int nAddExp)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
#if defined(_CH)
if (pUser->GetFCMState() != FCMSTATE_NONE){
pUser->SendQuestResult(ERROR_QUEST_FCM);
return -1;
}
#endif
pUser->ChangeExp(nAddExp, DBDNWorldDef::CharacterExpChangeCode::Quest, nQuestID);
int nExp = pUser->GetExp();
#ifndef _FINAL_BUILD
std::wstring wszMsg;
wszMsg = FormatW( L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD>߰<EFBFBD> : %d <20><><EFBFBD><EFBFBD> : %d" , nAddExp, nExp);
pUser->SendChat(CHATTYPE_NORMAL, (int)wszMsg.size()*sizeof(WCHAR), L"", (WCHAR*)wszMsg.c_str());
#endif
return 1;
}
/*
desc : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>߰<EFBFBD><EFBFBD>Ѵ<EFBFBD>.
param : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD>
return : -1 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
*/
int api_user_AddCoin(UINT nUserObjectID, int nAddCoin, int nQuestID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
#if defined(_CH)
if (pUser->GetFCMState() != FCMSTATE_NONE){
pUser->SendQuestResult(ERROR_QUEST_FCM);
return -1;
}
#endif
if (!pUser->AddCoin(nAddCoin, DBDNWorldDef::CoinChangeCode::QuestReward, nQuestID))
return -1;
INT64 nCoin = pUser->GetCoin();
#ifndef _FINAL_BUILD
std::wstring wszMsg;
wszMsg = FormatW( L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߰<EFBFBD> : %d <20><><EFBFBD><EFBFBD> : %lld" , nAddCoin, nCoin);
pUser->SendChat(CHATTYPE_NORMAL, (int)wszMsg.size()*sizeof(WCHAR), L"", (WCHAR*)wszMsg.c_str());
#endif
return 1;
}
int api_user_PlayCutScene(UINT nUserObjectID, UINT nNpcObjectID, int nCutSceneTableID, bool bIgnoreFadeIn)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_user_PlayCutScene(pUser, nNpcObjectID, nCutSceneTableID, bIgnoreFadeIn);
}
int api_ui_OpenWareHouse(UINT nUserObjectID, int iItemID/*=0*/ )
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_ui_OpenWareHouse(pUser,iItemID);
}
/*
desc : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>˸<EFBFBD><EFBFBD><EFBFBD>.
param : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID
return : -1 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, -2 <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 1<EFBFBD≯<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int api_ui_OpenShop(UINT nUserObjectID, int nShopID, Shop::Type::eCode Type/*=Shop::Type::Normal*/ )
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
#if defined (PRE_MOD_GAMESERVERSHOP)
return DNScriptAPI::api_ui_OpenShop(pUser, nShopID, Type);
#else
#ifndef _FINAL_BUILD
std::wstring wszLog;
wszLog = FormatW( L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
pUser->SendChat(CHATTYPE_NORMAL, (int)wszLog.size()*sizeof(WCHAR), L"", (WCHAR*)wszLog.c_str());
#endif
TShopData *pShopData = g_pDataManager->GetShopData(nShopID);
if ( !pShopData )
{
if( false == g_pDataManager->IsCombinedShop( nShopID ) )
return -2;
}
#if defined(PRE_ADD_REMOTE_OPENSHOP)
pUser->m_bRemoteShopOpen = false;
#endif // #if defined(PRE_ADD_REMOTE_OPENSHOP)
pUser->m_nShopID = nShopID;
pUser->SendShopOpen(nShopID,Type);
pUser->SetShopType( Type );
pUser->SetCalledNpcResponse(true, false); // <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UI <20><><EFBFBD><EFBFBD> <20><>û <20><><EFBFBD><EFBFBD> <20><>ȭ<EFBFBD><C8AD> <20>̾<EFBFBD><CCBE><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴѵ<C6B4><D1B5><EFBFBD> <20><><EFBFBD>Ǿƴϰ<C6B4> NPC <20><><EFBFBD><EFBFBD><E4BFA9> üũ<C3BC><C5A9> <20>ɸ<EFBFBD><C9B8><EFBFBD> <20>ǹǷ<C7B9> <20><>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20><>
return 1;
#endif
}
/*
desc : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ų <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>˸<EFBFBD><EFBFBD><EFBFBD>.
param : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD>ų <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID
return : -1 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, -2 <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 1<EFBFBD≯<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int api_ui_OpenSkillShop( UINT nUserObjectID )
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
#if defined (PRE_MOD_GAMESERVERSHOP)
return DNScriptAPI::api_ui_OpenSkillShop(pUser);
#else
pUser->SendSkillShopOpen();
pUser->SetCalledNpcResponse(true, false); // <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UI <20><><EFBFBD><EFBFBD> <20><>û <20><><EFBFBD><EFBFBD> <20><>ȭ<EFBFBD><C8AD> <20>̾<EFBFBD><CCBE><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴѵ<C6B4><D1B5><EFBFBD> <20><><EFBFBD>Ǿƴϰ<C6B4> NPC <20><><EFBFBD><EFBFBD><E4BFA9> üũ<C3BC><C5A9> <20>ɸ<EFBFBD><C9B8><EFBFBD> <20>ǹǷ<C7B9> <20><>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20><>
return 1;
#endif
}
/*
desc : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>˸<EFBFBD><EFBFBD><EFBFBD>.
param : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>
return : -1 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, -2 <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 1<EFBFBD≯<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int api_ui_OpenMarket(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
#ifndef _FINAL_BUILD
std::wstring wszLog;
wszLog = FormatW( L"<EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>");
pUser->SendChat(CHATTYPE_NORMAL, (int)wszLog.size()*sizeof(WCHAR), L"", (WCHAR*)wszLog.c_str());
#endif
pUser->SendMarketList(NULL, 0, 0, ERROR_NONE);
pUser->SetCalledNpcResponse(true, false); // <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UI <20><><EFBFBD><EFBFBD> <20><>û <20><><EFBFBD><EFBFBD> <20><>ȭ<EFBFBD><C8AD> <20>̾<EFBFBD><CCBE><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴѵ<C6B4><D1B5><EFBFBD> <20><><EFBFBD>Ǿƴϰ<C6B4> NPC <20><><EFBFBD><EFBFBD><E4BFA9> üũ<C3BC><C5A9> <20>ɸ<EFBFBD><C9B8><EFBFBD> <20>ǹǷ<C7B9> <20><>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20><>
return 1;
}
int api_ui_OpenCompoundEmblem(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_ui_OpenCompoundEmblem(pUser);
}
int api_ui_OpenUpgradeJewel(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_ui_OpenUpgradeJewel(pUser);
}
int api_ui_OpenGlyphLift(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_ui_OpenGlyphLift(pUser);
}
int api_ui_OpenMailBox(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_ui_OpenMailBox(pUser);
}
/*
desc : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ȭâ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>Ų<EFBFBD><EFBFBD>.
param : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>
return : -1 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 1<EFBFBD≯<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int api_ui_OpenUpgradeItem(UINT nUserObjectID,int iItemID/*=0*/ )
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
#ifndef _FINAL_BUILD
std::wstring wszLog;
wszLog = FormatW( L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȭâ <20><><EFBFBD><EFBFBD>");
pUser->SendChat(CHATTYPE_NORMAL, (int)wszLog.size()*sizeof(WCHAR), L"", (WCHAR*)wszLog.c_str());
#endif
pUser->SendOpenUpgradeItem( iItemID );
pUser->SetCalledNpcResponse(true, false); // <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UI <20><><EFBFBD><EFBFBD> <20><>û <20><><EFBFBD><EFBFBD> <20><>ȭ<EFBFBD><C8AD> <20>̾<EFBFBD><CCBE><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴѵ<C6B4><D1B5><EFBFBD> <20><><EFBFBD>Ǿƴϰ<C6B4> NPC <20><><EFBFBD><EFBFBD><E4BFA9> üũ<C3BC><C5A9> <20>ɸ<EFBFBD><C9B8><EFBFBD> <20>ǹǷ<C7B9> <20><>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20><>
pUser->SetRemoteEnchantItemID(iItemID);
return 1;
}
int api_ui_OpenDisjointItem(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_ui_OpenDisjointItem(pUser);
}
int api_ui_OpenCompoundItem(UINT nUserObjectID, int nCompoundShopID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_ui_OpenCompoundItem(pUser, nCompoundShopID);
}
int api_ui_OpenCompound2Item(UINT nUserObjectID, int nCompoundGroupID, int iItemID/*=0*/ )
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
#ifndef _FINAL_BUILD
std::wstring wszLog;
wszLog = FormatW( L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ռ<EFBFBD>â <20><><EFBFBD><EFBFBD>");
pUser->SendChat(CHATTYPE_NORMAL, (int)wszLog.size()*sizeof(WCHAR), L"", (WCHAR*)wszLog.c_str());
#endif
pUser->SendOpenCompound2Item(nCompoundGroupID, iItemID );
pUser->SetCalledNpcResponse(true, false); // <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UI <20><><EFBFBD><EFBFBD> <20><>û <20><><EFBFBD><EFBFBD> <20><>ȭ<EFBFBD><C8AD> <20>̾<EFBFBD><CCBE><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴѵ<C6B4><D1B5><EFBFBD> <20><><EFBFBD>Ǿƴϰ<C6B4> NPC <20><><EFBFBD><EFBFBD><E4BFA9> üũ<C3BC><C5A9> <20>ɸ<EFBFBD><C9B8><EFBFBD> <20>ǹǷ<C7B9> <20><>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20><>
pUser->SetRemoteItemCompoundItemID( iItemID );
return 1;
}
int api_ui_OpenCashShop(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_ui_OpenCashShop(pUser);
}
int api_ui_OpenGuildMgrBox(UINT nUserObjectID, int nGuildMgrNo)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_ui_OpenGuildMgrBox(pUser, nGuildMgrNo);
}
int api_ui_OpenGacha_JP( UINT nUserObjectID, int nGachaShopID )
{
#ifdef PRE_ADD_GACHA_JAPAN
CDNUserSession* pUser = __GetUserObj( nUserObjectID );
if( !pUser )
return -1;
return DNScriptAPI::api_ui_OpenGacha_JP(pUser, nGachaShopID);
#else
return -3;
#endif // PRE_ADD_GACHA_JAPAN
}
int api_ui_OpenGiveNpcPresent( UINT nUserObjectID, int nNpcID )
{
#if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
CDNUserSession* pUser = __GetUserObj( nUserObjectID );
if( !pUser )
return -1;
return DNScriptAPI::api_ui_OpenGiveNpcPresent(pUser, nNpcID);
#else
return -1;
#endif // #if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
}
/*
desc : <EFBFBD><EFBFBD>ũ<EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD>Խ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>̾<EFBFBD><EFBFBD>α׸<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
param : <EFBFBD><EFBFBD>ȭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> Npc ID
return : -1 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 1 <EFBFBD≯<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
*/
int api_ui_OpenDarkLairRankBoard( UINT nUserObjectID, int nNpcID, int iMapIndex, int iPlayerCount )
{
CDNUserSession* pUser = __GetUserObj( nUserObjectID );
if( !pUser )
return -1;
_ASSERT( iPlayerCount > 0 && iPlayerCount <= PARTYCOUNTMAX );
#ifndef _FINAL_BUILD
std::wstring wszLog;
wszLog = FormatW( L"<EFBFBD><EFBFBD>ũ<EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD>Խ<EFBFBD><EFBFBD><EFBFBD> UI <20><><EFBFBD><EFBFBD>");
pUser->SendChat(CHATTYPE_NORMAL, (int)wszLog.size()*sizeof(WCHAR), L"", (WCHAR*)wszLog.c_str());
#endif
// Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> npc <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> UI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD>.
pUser->SendOpenDarkLairRankBoard( nNpcID, iMapIndex, iPlayerCount );
// <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UI <20><><EFBFBD><EFBFBD> <20><>û <20><><EFBFBD><EFBFBD> <20><>ȭ<EFBFBD><C8AD> <20>̾<EFBFBD><CCBE><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴѵ<C6B4><D1B5><EFBFBD> <20><><EFBFBD>Ǿƴϰ<C6B4> NPC <20><><EFBFBD><EFBFBD><E4BFA9> üũ<C3BC><C5A9> <20>ɸ<EFBFBD><C9B8><EFBFBD> <20>ǹǷ<C7B9> <20><>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20><>
// <20>׷<EFBFBD><D7B7><EFBFBD><EFBFBD><EFBFBD> npc <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȭ<EFBFBD><C8AD> <20>̾<EFBFBD><CCBE><EFBFBD><EFBFBD>Ƿ<EFBFBD> <20>׳<EFBFBD> <20><><EFBFBD>д<EFBFBD>. <20>̰<EFBFBD> ȣ<><C8A3><EFBFBD>ϸ<EFBFBD> <20><>ȭ <20><><EFBFBD>̾<EFBFBD><CCBE>αװ<CEB1> <20>ٷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
pUser->SetCalledNpcResponse( true, false );
return 1;
}
/*
desc : PvP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD>Խ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>̾<EFBFBD><EFBFBD>α׸<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
param : <EFBFBD><EFBFBD>ȭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> Npc ID
return : -1 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 1 <EFBFBD≯<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
*/
int api_ui_OpenPvPLadderRankBoard( UINT nUserObjectID, int nNpcID, int iPvPLadderCode )
{
CDNUserSession* pUser = __GetUserObj( nUserObjectID );
if( !pUser )
return -1;
_ASSERT( LadderSystem::bIsServiceMatchType( static_cast<LadderSystem::MatchType::eCode>(iPvPLadderCode) ) == true );
#ifndef _FINAL_BUILD
std::wstring wszLog;
wszLog = FormatW( L"PvP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD>Խ<EFBFBD><EFBFBD><EFBFBD> UI <20><><EFBFBD><EFBFBD>");
pUser->SendChat(CHATTYPE_NORMAL, (int)wszLog.size()*sizeof(WCHAR), L"", (WCHAR*)wszLog.c_str());
#endif
// Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> npc <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> UI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD>.
pUser->SendOpenPvPLadderRankBoard( nNpcID, static_cast<LadderSystem::MatchType::eCode>(iPvPLadderCode) );
// <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UI <20><><EFBFBD><EFBFBD> <20><>û <20><><EFBFBD><EFBFBD> <20><>ȭ<EFBFBD><C8AD> <20>̾<EFBFBD><CCBE><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴѵ<C6B4><D1B5><EFBFBD> <20><><EFBFBD>Ǿƴϰ<C6B4> NPC <20><><EFBFBD><EFBFBD><E4BFA9> üũ<C3BC><C5A9> <20>ɸ<EFBFBD><C9B8><EFBFBD> <20>ǹǷ<C7B9> <20><>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20><>
// <20>׷<EFBFBD><D7B7><EFBFBD><EFBFBD><EFBFBD> npc <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȭ<EFBFBD><C8AD> <20>̾<EFBFBD><CCBE><EFBFBD><EFBFBD>Ƿ<EFBFBD> <20>׳<EFBFBD> <20><><EFBFBD>д<EFBFBD>. <20>̰<EFBFBD> ȣ<><C8A3><EFBFBD>ϸ<EFBFBD> <20><>ȭ <20><><EFBFBD>̾<EFBFBD><CCBE>αװ<CEB1> <20>ٷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
pUser->SetCalledNpcResponse( true, false );
return 1;
}
#if defined(PRE_ADD_OPEN_QUEST_TEXTURE_DIALOG)
int api_ui_OpenTextureDialog(UINT nUserObjectID, int nFileIndex, float fX, float fY, int nPos, int nTime, int nDialogIndex, bool bAutoCloseDialog)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if(!pUser)
{
return -1;
}
SCOpenTextureDialog sDlgData;
sDlgData.fX = fX;
sDlgData.fY = fY;
sDlgData.nTime = nTime;
sDlgData.nPosition = nPos;
sDlgData.nFileIndex = nFileIndex;
sDlgData.nDialogIndex = nDialogIndex;
sDlgData.bAutoCloseDialog = bAutoCloseDialog;
return DNScriptAPI::api_Open_Texture_Dialog(pUser, sDlgData);
}
int api_ui_CloseTextureDialog(UINT nUserObjectID, int nDlgID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if(!pUser)
{
return -1;
}
return DNScriptAPI::api_Close_Texture_Dialog(pUser, nDlgID);
}
#endif
int api_user_UserMessage(UINT nUserObjectID, int nType, int nBaseStringIdx, lua_tinker::table ParamTable)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
{
return -1;
}
return DNScriptAPI::api_user_UserMessage(pUser, nType, nBaseStringIdx, ParamTable);
}
int api_quest_AddSymbolItem(UINT nUserObjectID, int nItemID, short wCount)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_quest_AddSymbolItem(pUser, nItemID, wCount);
}
int api_quest_DelSymbolItem(UINT nUserObjectID, int nItemID, short wCount)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_quest_DelSymbolItem(pUser, nItemID, wCount);
}
int api_quest_HasSymbolItem(UINT nUserObjectID, int nItemIndex, int nItemCnt)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_quest_HasSymbolItem(pUser, nItemIndex, nItemCnt);
}
int api_quest_CheckQuestInvenForAddItem(UINT nUserObjectID, int nItemIndex, int nItemCnt)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if (!pUser) {
return -1;
}
return DNScriptAPI::api_quest_CheckQuestInvenForAddItem(pUser, nItemIndex, nItemCnt);
}
int api_quest_CheckQuestInvenForAddItemList(UINT nUserObjectID, lua_tinker::table ItemTable)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if (!pUser) {
return -1;
}
return DNScriptAPI::api_quest_CheckQuestInvenForAddItemList(pUser, ItemTable);
}
int api_quest_AddQuestItem(UINT nUserObjectID, int nItemID, short wCount, int nQuestID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_quest_AddQuestItem(pUser, nItemID, wCount, nQuestID);
}
int api_quest_DelQuestItem(UINT nUserObjectID, int nItemID, short wCount, int nQuestID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_quest_DelQuestItem(pUser, nItemID, wCount, nQuestID);
}
int api_quest_AllDelQuestItem(UINT nUserObjectID, int nItemID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_quest_AllDelQuestItem(pUser, nItemID);
}
int api_quest_HasQuestItem(UINT nUserObjectID, int nItemIndex, int nItemCnt)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_quest_HasQuestItem(pUser, nItemIndex, nItemCnt);
}
int api_ui_OpenGuildCreate(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_ui_OpenGuildCreate(pUser);
}
int api_ui_OpenQuestReward(UINT nUserObjectID, int nRewardTableIndex, bool bActivate)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_ui_OpenQuestReward(pUser, nRewardTableIndex, bActivate);
}
int api_quest_RewardQuestUser(UINT nUserObjectID, int nRewardTableIndext, int nQuestID, int nRewardCheck)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if (!pUser) {
return -1;
}
return DNScriptAPI::api_quest_RewardQuestUser(pUser, nRewardTableIndext, nQuestID, nRewardCheck);
}
/*
desc : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ä<EFBFBD><EFBFBD><EFBFBD>̵<EFBFBD><EFBFBD><EFBFBD>Ų<EFBFBD><EFBFBD>.
param : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>, ä<EFBFBD><EFBFBD>Ÿ<EFBFBD><EFBFBD>
return : -1 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, -2 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ä<EFBFBD><EFBFBD>Ÿ<EFBFBD><EFBFBD> -3 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ä<EFBFBD><EFBFBD>
*/
int api_user_ChangeChannel(UINT nUserObjectID, int ChannelType )
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if( !pUser )
return -1;
int iAttr = 0;
switch( ChannelType )
{
// PvP<76>κ<EFBFBD>
case 1:
{
iAttr = GlobalEnum::CHANNEL_ATT_PVPLOBBY;
break;
}
default:
{
return -2;
}
}
const sChannelInfo* pChannelInfo = g_pMasterConnection->GetChannelInfoFromAttr( iAttr );
if( pChannelInfo == NULL )
return -3;
pUser->CmdSelectChannel( pChannelInfo->nChannelID, true );
return 0;
}
int api_user_ChangeMap(UINT nUserObjectID, int nMapIndex, int nGateNo)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser ) return -1;
#if defined(_CH)
if (pUser->GetFCMState() != FCMSTATE_NONE){
pUser->SendQuestResult(ERROR_QUEST_FCM);
return -1;
}
#endif
if (pUser->GetPartyID() > 0)
{
CDNParty * pParty = g_pPartyManager->GetParty(pUser->GetPartyID());
if (pParty)
{
int nPermitCnt = g_pDataManager->GetMapPermitPartyCount(nMapIndex);
if (nPermitCnt > 0 && pParty->GetMemberCount() > nPermitCnt)
return -1;
}
}
if( pUser->IsWindowState( WINDOW_BLIND ) == false )
{
if (!pUser->IsNoneWindowState())
return -1;
}
int nMapType = g_pDataManager->GetMapType( nMapIndex );
switch( nMapType ) {
case GlobalEnum::MAP_UNKNOWN:
return -2;
case GlobalEnum::MAP_VILLAGE:
if( pUser->GetPartyID() > 0 ) {
CDNParty *pParty = g_pPartyManager->GetParty(pUser->GetPartyID());
if (!pParty) return -1;
if (g_pMasterConnection && g_pMasterConnection->GetActive())
g_pMasterConnection->SendVillageToVillage(REQINFO_TYPE_PARTY, pParty->GetPartyID(), nMapIndex, -1, -1, pParty); //pUser->GetLevel()
else
return -1;
}
else
{
if (g_pMasterConnection && g_pMasterConnection->GetActive())
g_pMasterConnection->SendVillageToVillage(REQINFO_TYPE_SINGLE, pUser->GetAccountDBID(), nMapIndex, -1, -1);
else
return -1;
}
break;
case GlobalEnum::MAP_WORLDMAP:
case GlobalEnum::MAP_DUNGEON:
{
// <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>̵<EFBFBD><CCB5>ÿ<EFBFBD> <20>ٸ<EFBFBD><D9B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ǰڴ<C7B0><DAB4><EFBFBD>.. <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>.
// <20>ϴ<EFBFBD><CFB4><EFBFBD> <20>̵<EFBFBD><CCB5>ǰ<EFBFBD> <20>س<EFBFBD><D8B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>и<EFBFBD> <20><><EFBFBD>̴<EFBFBD> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ͽ<EFBFBD><CFBF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> ó<><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
if( pUser->GetPartyID() > 0 ) {
CDNParty *pParty = g_pPartyManager->GetParty(pUser->GetPartyID());
if (!pParty) return -1;
pParty->SetRandomSeed( timeGetTime() );
if (g_pMasterConnection && g_pMasterConnection->GetActive())
{
g_pMasterConnection->SendReqGameID( GameTaskType::Normal, REQINFO_TYPE_PARTY, pParty->GetPartyID(), pUser->GetChannelID(), pParty->GetRandomSeed(), nMapIndex, nGateNo, CONVERT_TO_DUNGEONDIFFICULTY(0), true, pParty ); // GameID<49><44> <20><>û
}
else
return -1;
}
else {
pUser->m_cGateNo = nGateNo;
pUser->m_nSingleRandomSeed = timeGetTime();
if (g_pMasterConnection && g_pMasterConnection->GetActive())
g_pMasterConnection->SendReqGameID( GameTaskType::Normal, REQINFO_TYPE_SINGLE, pUser->GetAccountDBID(), pUser->GetChannelID(), pUser->m_nSingleRandomSeed, nMapIndex, 1, CONVERT_TO_DUNGEONDIFFICULTY(0), true ); // GameID<49><44> <20><>û
else
return -1;
}
}
break;
}
return 0;
}
/*
desc : <EFBFBD>ش<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
param : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>
return : -1 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD>׿ܴ<EFBFBD> <EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<EFBFBD><EFBFBD><EFBFBD><EFBFBD> !!!> <EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD> 1 <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ȯ)
*/
int api_user_GetPartymemberCount(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
if (pUser->GetPartyID() > 0)
{
//<2F><>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ī<EFBFBD><C4AB>Ʈ
CDNParty* pParty = g_pPartyManager->GetParty(pUser->GetPartyID());
if (!pParty) return -1;
return pParty->GetMemberCount();
}
// <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȥ<>ڶ<EFBFBD><DAB6><EFBFBD> <20><><EFBFBD>̹Ƿ<CCB9> 1
return 1;
}
/*
desc : <EFBFBD>ش<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> üũ<EFBFBD>Ѵ<EFBFBD>.
param : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>
return : -1 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 0 => <EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ʵǾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 1 => <EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>Ǿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int api_user_IsPartymember(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser ) return -1;
if (pUser->GetPartyID() > 0)
{
//<2F><>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ī<EFBFBD><C4AB>Ʈ
CDNParty* pParty = g_pPartyManager->GetParty(pUser->GetPartyID());
if (!pParty) return -1;
return 1;
}
// <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD≯<EFBFBD> 0 <20><> <20><>ȯ
return 0;
}
//blondy
/*
desc : <EFBFBD>ش<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PVP<EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ȳ<EFBFBD>.
param : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>
return : 1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> -1 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int api_user_RequestEnterPVP( UINT nUserObjectID )
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser ) return -1;
pUser->SendPvPVillageToLobby();
return 1;
}
//blondy end
/*
desc : <EFBFBD>ش<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>̵<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> (P.S.> VillageServer <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>׻<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
param : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>
return : 0 ~ 4 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>̵<EFBFBD> (0:<EFBFBD><EFBFBD><EFBFBD><EFBFBD> / 1:<EFBFBD><EFBFBD><EFBFBD><EFBFBD> / 2:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> / 3:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 4:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>), <EFBFBD><EFBFBD> <EFBFBD>ܴ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<EFBFBD> -1)
*/
int api_user_GetStageConstructionLevel(UINT nUserObjectID)
{
// DN_ASSERT(0, "Can't be Called!");
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if (!pUser) {
return -1;
}
return -1;
}
int api_user_GetMapIndex(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if (!pUser) {
return -1;
}
return DNScriptAPI::api_user_GetMapIndex(pUser);
}
int api_user_GetLastStageClearRank(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if (!pUser) {
return -1;
}
return DNScriptAPI::api_user_GetLastStageClearRank(pUser);
}
int api_user_EnoughCoin(UINT nUserObjectID, int nCoin )
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if (!pUser) {
return -1;
}
return DNScriptAPI::api_user_EnoughCoin(pUser, nCoin);
}
/*
desc : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȯ<EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
param : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>
return : -1 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 0 <EFBFBD>̻<EFBFBD> => <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int api_user_GetCoin(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if (!pUser) {
return -1;
}
#if defined(_CH)
if (pUser->GetFCMState() != FCMSTATE_NONE){
pUser->SendQuestResult(ERROR_QUEST_FCM);
return -1;
}
#endif
return (int)(pUser->GetCoin());
}
/*
desc : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
param : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD> (0 <EFBFBD>ʰ<EFBFBD>)
return : -1 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 1 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int api_user_DelCoin(UINT nUserObjectID, int nDelCoin)
{
DN_ASSERT(0 < nDelCoin, "Invalid!");
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if (!pUser) {
return -1;
}
#if defined(_CH)
if (pUser->GetFCMState() != FCMSTATE_NONE){
pUser->SendQuestResult(ERROR_QUEST_FCM);
return -1;
}
#endif
pUser->DelCoin(nDelCoin, DBDNWorldDef::CoinChangeCode::Use, 0);
INT64 nCoin = pUser->GetCoin();
#ifndef _FINAL_BUILD
std::wstring wszMsg;
wszMsg = FormatW( L"<EFBFBD><EFBFBD><EFBFBD>ΰ<EFBFBD><EFBFBD><EFBFBD> : %d <20><><EFBFBD><EFBFBD> : %lld" , nDelCoin, nCoin);
pUser->SendChat(CHATTYPE_NORMAL, (int)wszMsg.size()*sizeof(WCHAR), L"", (WCHAR*)wszMsg.c_str());
#endif
return 1;
}
int api_user_IsMissionGained(UINT nUserObjectID, int nMissionIndex)
{
DN_ASSERT(CHECK_LIMIT(nMissionIndex, MISSIONMAX), "Invalid!");
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if (!pUser) {
return -1;
}
return DNScriptAPI::api_user_IsMissionGained(pUser, nMissionIndex);
}
int api_user_IsMissionAchieved(UINT nUserObjectID, int nMissionIndex)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if (!pUser) {
return -1;
}
return DNScriptAPI::api_user_IsMissionAchieved(pUser, nMissionIndex);
}
int api_user_HasItemWarehouse(UINT nUserObjectID, int nItemIndex, int nItemCnt)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if (!pUser) {
return -1;
}
return DNScriptAPI::api_user_HasItemWarehouse(pUser, nItemIndex, nItemCnt);
}
int api_user_HasItemEquip(UINT nUserObjectID, int nItemIndex)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if (!pUser) {
return -1;
}
return DNScriptAPI::api_user_HasItemEquip(pUser, nItemIndex);
}
int api_guild_GetGuildMemberRole(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if (!pUser) {
return -1;
}
return DNScriptAPI::api_guild_GetGuildMemberRole(pUser);
}
/*
desc : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> â<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>θ<EFBFBD> <EFBFBD>˷<EFBFBD><EFBFBD>ش<EFBFBD>.
param : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>
return : -1 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> / 0 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>â<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> / 1 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>â<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int api_guild_HasGuildWare(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if (!pUser) {
return -1;
}
const TGuildUID GuildUID = pUser->GetGuildUID ();
if (!GuildUID.IsSet())
return -1;
CDNGuildBase* pGuild = g_pGuildManager->At (GuildUID);
if (!pGuild)
return 0;
#if !defined( PRE_ADD_NODELETEGUILD )
// <20><><EFBFBD><EFBFBD><E5B0A1><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
CDetachAutoEx<CDNGuildBase> AutoDetach (pGuild);
if (FALSE == pGuild->IsEnable()) return 0;
#endif
if (pGuild->GetWareSize() > 0)
return 1;
return 0;
}
int api_quest_IncQuestMemo(UINT nUserObjectID, int nQuestID, char nMemoIndex)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser ) {
return LONG_MIN;
}
return DNScriptAPI::api_quest_IncQuestMemo(pUser, nQuestID, nMemoIndex);
}
int api_quest_DecQuestMemo(UINT nUserObjectID, int nQuestID, char nMemoIndex)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser ) {
return LONG_MAX;
}
return DNScriptAPI::api_quest_DecQuestMemo(pUser, nQuestID, nMemoIndex);
}
int api_user_SetUserJobID(UINT nUserObjectID, int nJobID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser ) {
return -1;
}
return DNScriptAPI::api_user_SetUserJobID(pUser, nJobID);
}
int api_user_IsJobInSameLine(UINT nUserObjectID, int nBaseJobID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser ) {
return -1;
}
return DNScriptAPI::api_user_IsJobInSameLine(pUser, nBaseJobID);
}
int api_user_HasCashItem(UINT nUserObjectID, int nItemIndex, int nItemCnt)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_user_HasCashItem(pUser, nItemIndex, nItemCnt);
}
int api_user_HasCashItemEquip(UINT nUserObjectID, int nItemIndex)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if (!pUser) {
return -1;
}
return DNScriptAPI::api_user_HasCashItemEquip(pUser, nItemIndex);
}
int api_quest_IncCounting(UINT nUserObjectID, int nCountingType, int nCountingIndex)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if (!pUser) {
return -1;
}
return DNScriptAPI::api_quest_IncCounting(pUser, nCountingType, nCountingIndex);
}
int api_quest_IsPlayingQuestMaximum(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if (!pUser) {
return -1;
}
return DNScriptAPI::api_quest_IsPlayingQuestMaximum(pUser);
}
int api_quest_ForceCompleteQuest(UINT nUserObjectID, int nQuestID, int nQuestCode, int bDoMark, int bDoDelete, int bDoRepeat)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if (!pUser) {
return -1;
}
return DNScriptAPI::api_quest_ForceCompleteQuest(pUser, nQuestID, nQuestCode, bDoMark, bDoDelete, bDoRepeat);
}
int api_quest_ResetSkill(UINT nUserObjectID, int nQuestID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if (!pUser) {
return -1;
}
CDNUserQuest* pQuest = pUser->GetQuest();
if (!pQuest) {
return -2;
}
bool bResult = pQuest->IsClearQuest(nQuestID);
if ( bResult )
return -3;
#if defined(_VILLAGESERVER)
pUser->GetSkill()->ResetSkill( pUser->GetSkillPage() );
#elif defined(_GAMESERVER)
return -1;
#endif // #if defined(_VILLAGESERVER)
return 1;
}
int api_quest_GetWorldEventStep(UINT nUserObjectID, int nScheduleID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
if (!g_pPeriodQuestSystem)
return -1;
return g_pPeriodQuestSystem->GetWorldEventStep(pUser->GetWorldSetID(), nScheduleID);
}
int api_quest_GetWorldEventCount (UINT nUserObjectID, int nScheduleID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
if (!g_pPeriodQuestSystem)
return -1;
return g_pPeriodQuestSystem->GetWorldEventCount(pUser->GetWorldSetID(), nScheduleID);
}
int api_quest_ReturnItemToNpc (UINT nUserObjectID, int nScheduleID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
int nCount = pUser->GetItem()->ReturnItemToNpc(nScheduleID);
if (nCount <= 0)
return -1;
return nCount;
}
void api_quest_OpenScoreWorldEvent (UINT nUserObjectID, int nScheduleID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return;
TGlobalEventData* pEvent = g_pDataManager->GetGlobalEventData(nScheduleID);
if (!pEvent)
return;
int nMaxCount = pEvent->nCollectTotalCount;
int nCurrentCount = g_pPeriodQuestSystem->GetWorldEventCount(pUser->GetWorldSetID(), nScheduleID);
if (nCurrentCount >= nMaxCount)
nCurrentCount = nMaxCount;
pUser->SendScorePeriodQuest(nCurrentCount, nMaxCount);
}
/*
desc : Ư<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>
param : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>
return : -1 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int api_quest_OpenFarmAreaList (UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
pUser->SendFarmOpenList();
pUser->ReqFarmInfo(false);
return 1;
}
/*
desc : Ư<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD> <EFBFBD>̵<EFBFBD> <EFBFBD><EFBFBD>Ų<EFBFBD><EFBFBD>.
param : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>, X <EFBFBD><EFBFBD>ǥ, Y <EFBFBD><EFBFBD>ǥ, Z <EFBFBD><EFBFBD>ǥ
return : -1 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int api_user_ChangePos(UINT nUserObjectID, int nX, int nY, int nZ, int nLookX, int nLookY )
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if (!pUser) {
return -1;
}
#if defined(_CH)
if (pUser->GetFCMState() != FCMSTATE_NONE){
pUser->SendQuestResult(ERROR_QUEST_FCM);
return -1;
}
#endif
pUser->ChangePos(nX, nY, nZ, float(nLookX), float(nLookY));
return 1;
}
int api_npc_GetFavorPoint( UINT uiUserObjectID, int iNpcID )
{
#if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
CDNUserSession* pUser = __GetUserObj(uiUserObjectID);
if (!pUser)
return -1;
return DNScriptAPI::api_npc_GetFavorPoint(pUser, iNpcID);
#else
return -1;
#endif // #if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
}
int api_npc_GetMalicePoint( UINT uiUserObjectID, int iNpcID )
{
#if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
CDNUserSession* pUser = __GetUserObj(uiUserObjectID);
if( !pUser )
return -1;
return DNScriptAPI::api_npc_GetMalicePoint(pUser, iNpcID);
#else
return -1;
#endif // #if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
}
int api_npc_GetFavorPercent( UINT uiUserObjectID, int iNpcID )
{
#if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
CDNUserSession* pUser = __GetUserObj(uiUserObjectID);
if( !pUser )
return -1;
return DNScriptAPI::api_npc_GetFavorPercent(pUser, iNpcID);
#else
return -1;
#endif // #if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
}
int api_npc_GetMalicePercent( UINT uiUserObjectID, int iNpcID )
{
#if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
CDNUserSession* pUser = __GetUserObj(uiUserObjectID);
if( !pUser )
return -1;
return DNScriptAPI::api_npc_GetMalicePercent(pUser, iNpcID);
#else
return -1;
#endif // #if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
}
int api_npc_AddFavorPoint( UINT uiUserObjectID, int iNpcID, int val )
{
#if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
CDNUserSession* pUser = __GetUserObj(uiUserObjectID);
if( !pUser )
return -1;
return DNScriptAPI::api_npc_AddFavorPoint(pUser, iNpcID, val);
#else
return -1;
#endif // #if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
}
int api_npc_AddMalicePoint( UINT uiUserObjectID, int iNpcID, int val )
{
#if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
CDNUserSession* pUser = __GetUserObj(uiUserObjectID);
if( !pUser )
return -1;
return DNScriptAPI::api_npc_AddMalicePoint(pUser, iNpcID, val);
#else
return -1;
#endif // #if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
}
int api_npc_SendSelectedPresent( UINT uiUserObjectID, int iNpcID )
{
#if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
CDNUserSession* pUser = __GetUserObj(uiUserObjectID);
if( !pUser )
return -1;
return DNScriptAPI::api_npc_SendSelectedPresent(pUser, iNpcID);
#else
return -1;
#endif // #if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
}
int api_npc_Rage( UINT uiUserObjectID, int iNpcID )
{
#if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
CDNUserSession* pUser = __GetUserObj(uiUserObjectID);
if( !pUser )
return -1;
return DNScriptAPI::api_npc_Rage(pUser, iNpcID);
#else
return -1;
#endif // #if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
}
int api_npc_Disappoint( UINT uiUserObjectID, int iNpcID )
{
#if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
CDNUserSession* pUser = __GetUserObj(uiUserObjectID);
if( !pUser )
return -1;
return DNScriptAPI::api_npc_Disappoint(pUser, iNpcID);
#else
return -1;
#endif // #if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
}
int api_user_ResetSkill(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if (!pUser) {
return -1;
}
pUser->GetItem()->ResetSkillFromQuestScript();
return 1;
}
int api_npc_CreateSecondarySkill( UINT uiUserObjectID, int iSkillID )
{
#if defined( PRE_ADD_SECONDARY_SKILL )
CDNUserSession* pUser = __GetUserObj(uiUserObjectID);
if (!pUser)
return -1;
CSecondarySkillRepository* pRepository = pUser->GetSecondarySkillRepository();
if( pRepository == NULL )
return 0;
if( pRepository->Create( iSkillID ) == false )
return 0;
return 1;
#else
return -1;
#endif // #if defined( PRE_ADD_SECONDARY_SKILL )
}
int api_npc_CheckSecondarySkill( UINT uiUserObjectID, int iSkillID )
{
#if defined( PRE_ADD_SECONDARY_SKILL )
CDNUserSession* pUser = __GetUserObj(uiUserObjectID);
if (!pUser)
return -1;
CSecondarySkillRepository* pRepository = pUser->GetSecondarySkillRepository();
if( pRepository == NULL )
return 0;
if( pRepository->Get( iSkillID ) == NULL )
return 0;
return 1;
#else
return -1;
#endif // #if defined( PRE_ADD_SECONDARY_SKILL )
}
/*
desc : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>â<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>˸<EFBFBD><EFBFBD><EFBFBD>.
param : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>
return : -1 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, -2=><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ƴ<EFBFBD>, 1=><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int api_ui_OpenGuildWareHouse (UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
if (g_pGuildManager->OnRecvApiOpenGuildWare (pUser))
pUser->SetCalledNpcResponse(true, false);
else
return -2;
return 1;
}
int api_ui_OpenMovieBrowser(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
#ifndef _FINAL_BUILD
std::wstring wszLog;
wszLog = FormatW( L"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŭ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>");
pUser->SendChat(CHATTYPE_NORMAL, (int)wszLog.size()*sizeof(WCHAR), L"", (WCHAR*)wszLog.c_str());
#endif
pUser->SendOpenMovieBrowser();
pUser->SetCalledNpcResponse(true, false); // <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UI <20><><EFBFBD><EFBFBD> <20><>û <20><><EFBFBD><EFBFBD> <20><>ȭ<EFBFBD><C8AD> <20>̾<EFBFBD><CCBE><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴѵ<C6B4><D1B5><EFBFBD> <20><><EFBFBD>Ǿƴϰ<C6B4> NPC <20><><EFBFBD><EFBFBD><E4BFA9> üũ<C3BC><C5A9> <20>ɸ<EFBFBD><C9B8><EFBFBD> <20>ǹǷ<C7B9> <20><>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20><>
return 1;
}
int api_ui_OpenBrowser(UINT nUserObjectID, const char* szUrl, int nX, int nY, int nWidth, int nHeight)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
#ifndef _FINAL_BUILD
std::wstring wszLog;
wszLog = FormatW( L"npc <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (%s)", szUrl);
pUser->SendChat(CHATTYPE_NORMAL, (int)wszLog.size()*sizeof(WCHAR), L"", (WCHAR*)wszLog.c_str());
#endif
pUser->SendOpenBrowser(szUrl, nX, nY, nWidth, nHeight);
pUser->SetCalledNpcResponse(true, false); // <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UI <20><><EFBFBD><EFBFBD> <20><>û <20><><EFBFBD><EFBFBD> <20><>ȭ<EFBFBD><C8AD> <20>̾<EFBFBD><CCBE><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴѵ<C6B4><D1B5><EFBFBD> <20><><EFBFBD>Ǿƴϰ<C6B4> NPC <20><><EFBFBD><EFBFBD><E4BFA9> üũ<C3BC><C5A9> <20>ɸ<EFBFBD><C9B8><EFBFBD> <20>ǹǷ<C7B9> <20><>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20><>
return 1;
}
/*
desc : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>û <EFBFBD><EFBFBD><EFBFBD>θ<EFBFBD> <EFBFBD>˷<EFBFBD><EFBFBD>ش<EFBFBD>. (<EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
param : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>
return : -1 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> / 0 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>û<EFBFBD>Ұ<EFBFBD><EFBFBD><EFBFBD> / 1 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int api_guildwar_IsPreparation(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
if (g_pGuildWarManager)
{
if (g_pGuildWarManager->GetStepIndex() == GUILDWAR_STEP_PREPARATION && pUser->GetGuildSelfView().IsSet())
{
if (pUser->GetGuildSelfView().btGuildRole == GUILDROLE_TYPE_MASTER &&
pUser->GetGuildSelfView().wWarSchduleID != g_pGuildWarManager->GetScheduleID())
return 1;
}
}
return 0;
}
/*
desc : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> üũ.
param : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>
return : -1 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> / eGuildWarStepType / 0 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD>ƴ<EFBFBD> / 1 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>û <EFBFBD> / 2 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> / 3 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int api_guildwar_GetStep(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
if (g_pGuildWarManager)
return g_pGuildWarManager->GetStepIndex();
return 0;
}
/*
desc : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>Ȳ <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
param : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>
return : return : -1 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, -2 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ƴ<EFBFBD>, 0 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int api_guildwar_GetTrialCurrentState(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
if( g_pGuildWarManager->GetStepIndex() != GUILDWAR_STEP_TRIAL)
return -2;
int nGuildWarPoint = 0;
CDNGuildBase* pGuild = g_pGuildManager->At(pUser->GetGuildUID());
if (pGuild)
{
#if !defined( PRE_ADD_NODELETEGUILD )
CDetachAutoEx<CDNGuildBase> AutoDetach (pGuild);
if (FALSE == pGuild->IsEnable()) return -1;
#endif
if( pGuild->IsEnrollGuildWar() )
{
CDNGuildVillage* pGuildVillage = static_cast<CDNGuildVillage *>(pGuild);
if( pGuildVillage->GetGuildWarScheduleID() != g_pGuildWarManager->GetScheduleID() )
{
pGuildVillage->GuildWarReset();
pGuildVillage->SetGuildWarScheduleID(g_pGuildWarManager->GetScheduleID());
}
nGuildWarPoint = pGuildVillage->GetGuildWarPoint();
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..(<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>â<EFBFBD>ϰ<EFBFBD> UI<55><49> <20><><EFBFBD>̽Ἥ <20>̰ɷ<CCB0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
pUser->SetCalledNpcResponse(true, false); // <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UI <20><><EFBFBD><EFBFBD> <20><>û <20><><EFBFBD><EFBFBD> <20><>ȭ<EFBFBD><C8AD> <20>̾<EFBFBD><CCBE><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴѵ<C6B4><D1B5><EFBFBD> <20><><EFBFBD>Ǿƴϰ<C6B4> NPC <20><><EFBFBD><EFBFBD><E4BFA9> üũ<C3BC><C5A9> <20>ɸ<EFBFBD><C9B8><EFBFBD> <20>ǹǷ<C7B9> <20><>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20><>
pUser->SendGuildWarTrialResultUIOpen();
pUser->SendGuildWarStatusOpen( g_pGuildWarManager->GetBlueTeamPoint(), g_pGuildWarManager->GetRedTeamPoint(), pUser->GetGuildWarPoint(), nGuildWarPoint);
return 0;
}
/*
desc : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
param : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>
return : return : -1 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, -2 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ƴ<EFBFBD>, -3 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD>Ϸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 0 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int api_guildWar_GetTrialStats(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
if( g_pGuildWarManager->GetStepIndex() != GUILDWAR_STEP_REWARD)
return -2;
if( !g_pGuildWarManager->GetGuildWarStats() )
return -3;
// <20><><EFBFBD><20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>..<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ٷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˻<EFBFBD><CBBB>ؾ<EFBFBD><D8BE><EFBFBD>.
pUser->SetCalledNpcResponse(true, false); // <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UI <20><><EFBFBD><EFBFBD> <20><>û <20><><EFBFBD><EFBFBD> <20><>ȭ<EFBFBD><C8AD> <20>̾<EFBFBD><CCBE><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴѵ<C6B4><D1B5><EFBFBD> <20><><EFBFBD>Ǿƴϰ<C6B4> NPC <20><><EFBFBD><EFBFBD><E4BFA9> üũ<C3BC><C5A9> <20>ɸ<EFBFBD><C9B8><EFBFBD> <20>ǹǷ<C7B9> <20><>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20><>
pUser->SendGuildWarTrialResultUIOpen();
CDNGuildBase* pGuild = g_pGuildManager->At(pUser->GetGuildUID());
if (pGuild)
{
#if !defined( PRE_ADD_NODELETEGUILD )
CDetachAutoEx<CDNGuildBase> AutoDetach (pGuild);
if (FALSE == pGuild->IsEnable()) return -1;
#endif
if( pGuild->IsEnrollGuildWar() )
{
CDNGuildVillage* pGuildVillage = static_cast<CDNGuildVillage *>(pGuild);
if (!pGuildVillage->GetGuildWarStats() )
{
// <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CDNDBConnection* pDBCon = pGuild->GetDBCon();
if (pDBCon)
pDBCon->QueryGetGuildWarPointGuildPartTotal(pGuild->GetDBThreadID(), pUser->GetWorldSetID(), pUser->GetAccountDBID(), 'G', pUser->GetGuildUID().nDBID);
return 0;
}
else if( !pUser->GetGuildWarStats() )
{
CDNDBConnection* pDBCon = pUser->GetDBConnection();
if( pDBCon )
pDBCon->QueryGetGuildWarPointPartTotal(pUser->GetDBThreadID(), pUser->GetWorldSetID(), pUser->GetAccountDBID(), 'C', pUser->GetCharacterDBID());
return 0;
}
}
}
// <20><><EFBFBD><EFBFBD><E5BFA1> <20><><EFBFBD>ԵǾ<D4B5> <20><><EFBFBD><EFBFBD> <20>ʰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD> <20>ٷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
pUser->SendGuildWarTrialResultOpen();
return 0;
}
/*
desc : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǥ <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
param : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>
return : return : -1 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, -2 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ƴ<EFBFBD>, -3 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǥ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>, 0: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int api_guildWar_GetMatchList(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
if( g_pGuildWarManager->GetStepIndex() != GUILDWAR_STEP_REWARD)
return -2;
if( !g_pGuildWarManager->GetGuildWarStats() )
return -3;
pUser->SetCalledNpcResponse(true, false); // <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UI <20><><EFBFBD><EFBFBD> <20><>û <20><><EFBFBD><EFBFBD> <20><>ȭ<EFBFBD><C8AD> <20>̾<EFBFBD><CCBE><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴѵ<C6B4><D1B5><EFBFBD> <20><><EFBFBD>Ǿƴϰ<C6B4> NPC <20><><EFBFBD><EFBFBD><E4BFA9> üũ<C3BC><C5A9> <20>ɸ<EFBFBD><C9B8><EFBFBD> <20>ǹǷ<C7B9> <20><>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20><>
pUser->SendGuildWarTournamentInfoUIOpen();
bool bPopularityVote = false;
CDNGuildBase* pGuild = g_pGuildManager->At(pUser->GetGuildUID());
if (pGuild)
{
#if !defined( PRE_ADD_NODELETEGUILD )
CDetachAutoEx<CDNGuildBase> AutoDetach (pGuild);
if (FALSE == pGuild->IsEnable()) return -1;
#endif
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>߰<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴϰ<C6B4> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20≯<EFBFBD>.
if( pGuild->IsEnrollGuildWar() && !g_pGuildWarManager->IsGuildWarFinal(pUser->GetGuildUID()) && pUser->GetGuildWarPoint() )
{
// <20><>ǥ<EFBFBD><C7A5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> DB<44><42><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if( !pUser->GetGuildWarVote() && !pUser->GetGuildWarVoteLoading() )
{
CDNDBConnection* pDBCon = pUser->GetDBConnection();
if (pDBCon)
pDBCon->QueryGetGuildWarPopularityVote(pUser->GetDBThreadID(), pUser->GetWorldSetID(), pUser->GetAccountDBID(), 'C', pUser->GetCharacterDBID());
return 0;
}
// DB<44><42><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>°<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..
else if( pUser->GetGuildWarVoteLoading() )
{
bPopularityVote = !pUser->GetGuildWarVote();
}
}
}
pUser->SendGuildWarTournamentInfoOpen(bPopularityVote);
return 0;
}
/*
desc : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>α<EFBFBD> <EFBFBD><EFBFBD>ǥ <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
param : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>
return : return : -1 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, -2 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>α<EFBFBD> <EFBFBD><EFBFBD>ǥ <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, -3 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 0: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int api_guildWar_GetPopularityVote(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
if( g_pGuildWarManager->GetStepIndex() == GUILDWAR_STEP_REWARD)
return -3;
if( g_pGuildWarManager->GetGuildWarVote() && g_pGuildWarManager->GetGuildWarVoteCount() == 0)
return -2;
// DB<44><42><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if( !g_pGuildWarManager->GetGuildWarVote() )
{
CDNDBConnection* pDBCon = pUser->GetDBConnection();
if (pDBCon)
pDBCon->QueryGetGuildWarPopularityVote(pUser->GetDBThreadID(), pUser->GetWorldSetID(), pUser->GetAccountDBID(), 'G', 0);
return 0;
}
pUser->SendGuildWarVoteTop(g_pGuildWarManager->GetGuildWarVoteCount(), g_pGuildWarManager->GetGuildWarVoteGuildName());
return 0;
}
/*
desc : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> üũ.
param : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>
return : -1 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> / 0 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> / 1 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int api_guildWar_GetFinalProgress(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
if (g_pGuildWarManager)
return (int)g_pGuildWarManager->GetFinalProgress();
return 0;
}
#if defined (PRE_ADD_DONATION)
int api_ui_OpenDonation(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
return DNScriptAPI::api_ui_OpenDonation(pUser);
}
#endif // #if defined (PRE_ADD_DONATION)
int api_ui_OpenInventory(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
return DNScriptAPI::api_ui_OpenInventory(pUser);
}
/*
desc : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PC Cafe<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
param :
return : -1 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 0 => PC<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ƴ<EFBFBD>. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PC<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
*/
int api_user_GetPCCafe(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if( !pUser)
return -1;
return pUser->GetPCBangGrade();
}
/*
desc : PC<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, Ż<EFBFBD>Ͱ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>־<EFBFBD><EFBFBD>ش<EFBFBD>.
param :
return : -1 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 0 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 1 => PC<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ƴ<EFBFBD>, 2 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 3 => <EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD>, 4 => <EFBFBD>̹<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 5 => <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
*/
int api_user_SetPCCafeItem(UINT nUserObjectID)
{
#if defined( PRE_ADD_PCBANG_RENTAL_ITEM )
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if( !pUser )
return -1;
if( pUser->GetPCBangGrade() == 0)
return 1;
// <20><><EFBFBD><20>̹<EFBFBD> <20><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD><D6B4><EFBFBD> üũ
if( pUser->GetItem()->IsHavePcCafeRentItem())
return 4;
std::map<int,int> mapItemIDList;
int nRequireInven = g_pDataManager->GetPcCafeRentItemID(pUser->GetLevel(), pUser->GetClassID(), pUser->GetUserJob(), pUser->GetPCBangGrade(),mapItemIDList);
if( mapItemIDList.empty())
return 2;
// <20>κ<EFBFBD> üũ..
if( nRequireInven > pUser->GetItem()->FindBlankInventorySlotCount() )
{
pUser->SendPcCafeRentItem(ERROR_ITEM_INVENTORY_NOTENOUGH, nRequireInven);
return 3;
}
std::map<int,int>::iterator itor;
for( itor=mapItemIDList.begin(); itor !=mapItemIDList.end(); ++itor )
{
if( !pUser->GetItem()->CreatePCRentalItem(itor->first, itor->second) )
return 5;
}
pUser->SendPcCafeRentItem(ERROR_NONE, 0);
return 0;
#else
return -1;
#endif
}
/*
desc : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>մϴ<EFBFBD>.
param : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD>ü<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>(1-<EFBFBD><EFBFBD>ü<EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 0-<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
return : -1 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> / 0 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> / 1 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> / 2 : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>Ϸ<EFBFBD>
*/
int api_user_RepairItem(UINT nUserObjectID, int iAllRepair)
{
#if defined(PRE_ADD_REPAIR_NPC)
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser ) return -1;
return DNScriptAPI::api_user_RepairItem(pUser, iAllRepair);
#else
return -1;
#endif
}
int api_ui_OpenExchangeEnchant(UINT nUserObjectID)
{
#ifdef PRE_ADD_EXCHANGE_ENCHANT
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_ui_OpenExchangeEnchant(pUser);
#else
return -1;
#endif
}
int api_env_CheckCloseGateByTime(int iMapIndex)
{
#if defined(PRE_ADD_CHALLENGE_DARKLAIR)
return DNScriptAPI::api_env_CheckCloseGateByTime(iMapIndex);
#else
return 0;
#endif
}
int api_ui_OpenCostumeRandomMix(UINT nUserObjectID)
{
#ifdef PRE_ADD_COSRANDMIX_ACCESSORY
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
#ifndef _FINAL_BUILD
std::wstring wszLog;
wszLog = FormatW( L"npc <20><><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD> <20><><EFBFBD><EFBFBD>");
pUser->SendChat(CHATTYPE_NORMAL, (int)wszLog.size()*sizeof(WCHAR), L"", (WCHAR*)wszLog.c_str());
#endif
pUser->StartCostumeRandomMix(CostumeMix::RandomMix::OpenByNpc, 0, 0);
pUser->SetCalledNpcResponse(true, false); // <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UI <20><><EFBFBD><EFBFBD> <20><>û <20><><EFBFBD><EFBFBD> <20><>ȭ<EFBFBD><C8AD> <20>̾<EFBFBD><CCBE><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴѵ<C6B4><D1B5><EFBFBD> <20><><EFBFBD>Ǿƴϰ<C6B4> NPC <20><><EFBFBD><EFBFBD><E4BFA9> üũ<C3BC><C5A9> <20>ɸ<EFBFBD><C9B8><EFBFBD> <20>ǹǷ<C7B9> <20><>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20><>
return 1;
#else
return -1;
#endif
}
int api_quest_WorldBuffCheck(int nItemID)
{
#if defined(PRE_DRAGONBUFF)
return DNScriptAPI::api_quest_WorldBuffCheck(nItemID);
#else
return -1;
#endif
}
int api_quest_ApplyWorldBuff(UINT nUserObjectID, int nItemID, int nMapIdx)
{
#if defined(PRE_DRAGONBUFF)
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return -1;
return DNScriptAPI::api_quest_ApplyWorldBuff(pUser, nItemID, nMapIdx);
#else
return -1;
#endif
}
#ifdef PRE_ADD_DWC
void api_ui_OpenCreateDwcTeamDlg(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if ( !pUser )
return;
#ifndef _FINAL_BUILD
std::wstring wszLog;
wszLog = FormatW( L"DWC <20><> <20><><EFBFBD><EFBFBD> <20><>ȭ<EFBFBD><C8AD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>");
pUser->SendChat(CHATTYPE_NORMAL, (int)wszLog.size()*sizeof(WCHAR), L"", (WCHAR*)wszLog.c_str());
#endif
pUser->SendOpenDwcTeamDialog();
pUser->SetCalledNpcResponse(true, false); // <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UI <20><><EFBFBD><EFBFBD> <20><>û <20><><EFBFBD><EFBFBD> <20><>ȭ<EFBFBD><C8AD> <20>̾<EFBFBD><CCBE><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴѵ<C6B4><D1B5><EFBFBD> <20><><EFBFBD>Ǿƴϰ<C6B4> NPC <20><><EFBFBD><EFBFBD><E4BFA9> üũ<C3BC><C5A9> <20>ɸ<EFBFBD><C9B8><EFBFBD> <20>ǹǷ<C7B9> <20><>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20><>
}
#endif // PRE_ADD_DWC
int api_ui_OpenJobChange(UINT nUserObjectID)
{
CDNUserSession* pUser = __GetUserObj(nUserObjectID);
if (!pUser)
return -1;
return DNScriptAPI::api_Open_ChangeJobDialog(pUser);
}