⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 n_eventnpc.cpp

📁 mud游戏人在江湖
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			                                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 + -