📄 n_eventnpc.cpp
字号:
nBuf4 = atoi(szBuf4);
pEventRun->EventRunGoodKind = nBuf4;
}
(pEventAsk->DefaultEventRunListWhenYes).push_back(*pEventRun);
delete pEventRun;
}
} //while [Default Event] when [Yes]
} // if [DefaultYes]
}
} //while [Default]
// Read EventRun after checking limits
while(fscanf(pFile,"%s",szBuf1)!=EOF) //while [Limit]
{
szStr = szBuf1;
if(szStr == "[AskEnd]")
{
break;
}
else if(szStr == "[LimitEnd]")
{
continue;
}
else if(szStr == "[Limit]")
{
if(fscanf(pFile, "%s %s %s %s", szBuf1, szBuf2, szBuf3, szBuf4) == 4)
{
pEventLimit = new CEventLimit;
nBuf1 = atoi(szBuf1);
pEventLimit->LimitType = nBuf1;
pEventLimit->LimitItemName = szBuf2;
nBuf3 = atoi(szBuf3);
pEventLimit->LimitValue = nBuf3;
nBuf4 = atoi(szBuf4);
pEventLimit->LimitGoodKind = nBuf4;
fscanf(pFile,"%s",szBuf1);
szStr = szBuf1;
if(szStr == "[No]")
{
fscanf(pFile,"%s",szBuf1);
if(strcmp(szBuf1, "NULLMSG") == 0)
{
strcpy(szBuf1, "");
}
pEventLimit->MsgWhenNo = szBuf1;
while(fscanf(pFile,"%s",szBuf1)!=EOF) //while [Event] when [No]
{
szStr = szBuf1;
if(szStr == "[NoEnd]")
{
break;
}
if(szStr == "[EventRun]")
{
if(fscanf(pFile, "%s %s %s %s", szBuf1, szBuf2, szBuf3, szBuf4) == 4)
{
pEventRun = new CEventRun;
nBuf1 = atoi(szBuf1);
pEventRun->EventRunType = nBuf1;
pEventRun->EventRunItemName = szBuf2;
nBuf3 = atoi(szBuf3);
pEventRun->EventRunValue = nBuf3;
nBuf4 = atoi(szBuf4);
pEventRun->EventRunGoodKind = nBuf4;
}
(pEventLimit->EventRunListWhenNo).push_back(*pEventRun);
delete pEventRun;
}
} //while [Event] when [No]
} //if [No]
fscanf(pFile,"%s",szBuf1);
szStr = szBuf1;
if(szStr == "[Yes]")
{
fscanf(pFile,"%s",szBuf1);
if(strcmp(szBuf1, "NULLMSG") == 0)
{
strcpy(szBuf1, "");
}
pEventLimit->MsgWhenYes = szBuf1;
while(fscanf(pFile,"%s",szBuf1)!=EOF) //while [Event] when [Yes]
{
szStr = szBuf1;
if(szStr == "[YesEnd]")
{
break;
}
else if(szStr == "[EventRun]")
{
if(fscanf(pFile, "%s %s %s %s", szBuf1, szBuf2, szBuf3, szBuf4) == 4)
{
pEventRun = new CEventRun;
nBuf1 = atoi(szBuf1);
pEventRun->EventRunType = nBuf1;
pEventRun->EventRunItemName = szBuf2;
nBuf3 = atoi(szBuf3);
pEventRun->EventRunValue = nBuf3;
nBuf4 = atoi(szBuf4);
pEventRun->EventRunGoodKind = nBuf4;
}
(pEventLimit->EventRunListWhenYes).push_back(*pEventRun);
delete pEventRun;
}
} //while [Event] when [Yes]
} // if [Yes]
}
(pEventAsk->LimitList).push_back(*pEventLimit);
delete pEventLimit;
}
} //while [Limit]
}
(g_pNpcEvent->EventAskList).push_back(*pEventAsk);
delete pEventAsk;
}
} //while [AskItem]
fclose(pFile);
}
}
TRetInfo CN_EventNpc::DoAsk(CPlayerInfo *who, CString szName)
{
TRetInfo ri;
list<CEventAsk>::iterator iterEventAsk;
ri = CNpc::DoAsk(who, szName,"$NONE$");
if (!ri.bRet) return ri;
if(g_HasEvent == 1){
for(iterEventAsk = (g_pNpcEvent->EventAskList).begin(); iterEventAsk != (g_pNpcEvent->EventAskList).end(); iterEventAsk++)
{
if ( !strcmp(szName, (iterEventAsk->KeyWord).c_str() ) ){
ri = DoEventLimit(who, iterEventAsk);
return ri;
}
}
}
ri.bRet = TRUE;
return ri;
}
TRetInfo CN_EventNpc::DoEventLimit(CPlayerInfo *who, list<CEventAsk>::iterator iterEventAsk)
{
int IsYes = -1;
TRetInfo ri;
list<CEventLimit>::iterator iterLimit, iterEndLimit;
char szLimitItemName[64] = "NULL";
CGoods *pGood = NULL;
POSITION pos;
switch(iterEventAsk->LimitChoose)
{
case EV_LIMITCHOOSE_All :
IsYes = 1;
for(iterLimit = (iterEventAsk->LimitList).begin(); iterLimit != (iterEventAsk->LimitList).end(); iterLimit++)
{
strcpy(szLimitItemName, (iterLimit->LimitItemName).c_str());
switch(iterLimit->LimitType){
case EV_LIMIT_NotDefine:
ri.szRet = "iterEventAsk->LimitType=LIMIT_NotDefine";
break;
case EV_LIMIT_GoodHasGot:
if(who->GetGoods(szLimitItemName) == NULL)
{
IsYes = 0;
}
break;
case EV_LIMIT_GoodHasNotGot:
if(who->GetGoods(szLimitItemName) != NULL)
{
IsYes = 0;
}
break;
case EV_LIMIT_GoodCountMore:
if(who->GetGoodCount(szLimitItemName) <= iterLimit->LimitValue){
IsYes = 0;
}
break;
case EV_LIMIT_GoodCountEqual:
if(who->GetGoodCount(szLimitItemName) != iterLimit->LimitValue)
{
IsYes = 0;
}
break;
case EV_LIMIT_GoodCountLess:
if(who->GetGoodCount(szLimitItemName) >= iterLimit->LimitValue)
{
IsYes = 0;
}
break;
case EV_LIMIT_MoneyMore:
if(who->nMoney <= iterLimit->LimitValue){
IsYes = 0;
}
break;
case EV_LIMIT_MoneyLess:
if(who->nMoney >= iterLimit->LimitValue){
IsYes = 0;
}
break;
case EV_LIMIT_StatusPointMore:
if( strcmp("
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -