int NPC_Lua_NLG_GiveRandItem(lua_State *_NLL) { CheckEx2(_NLL, 2, 3); CheckIndexNull(_NLL, 1); int TM_Index = (int)lua_tointeger(_NLL, 1); char *TM_ItemIdData = lua_tostring(_NLL, 2); int TM_Num = 1; int TM_ItemIndex = -1; int TM_Int = -1; int TM_Type = 0; int TM_ItemId = -1; if(lua_gettop(_NLL) == 3) { TM_Type = (int)lua_tointeger(_NLL, 3); } int TM_ItemIdStart = -1; int TM_ItemIdEnd = -1; char ItemIdBuf[32]; if(getStringFromIndexWithDelim(TM_ItemIdData,",", 2, ItemIdBuf, sizeof(ItemIdBuf)) != FALSE){ int TM_ItemNum = 0; while(1){ if(getStringFromIndexWithDelim(TM_ItemIdData,",", TM_ItemNum+1, ItemIdBuf, sizeof(ItemIdBuf)) == FALSE) break; TM_ItemNum++; } TM_ItemNum = RAND(1,TM_ItemNum); getStringFromIndexWithDelim(TM_ItemIdData,",", TM_ItemNum, ItemIdBuf, sizeof(ItemIdBuf)); char ItemIdBuf2[16]; if( getStringFromIndexWithDelim(ItemIdBuf,"-", 2, ItemIdBuf2, sizeof(ItemIdBuf2)) != FALSE){ int TM_ItemIdStart,TM_ItemIdEnd; getStringFromIndexWithDelim(ItemIdBuf,"-", 1, ItemIdBuf2, sizeof(ItemIdBuf2)); TM_ItemIdStart = atoi(ItemIdBuf2); getStringFromIndexWithDelim(ItemIdBuf,"-", 2, ItemIdBuf2, sizeof(ItemIdBuf2)); TM_ItemIdEnd = atoi(ItemIdBuf2); TM_ItemId = RAND(TM_ItemIdStart,TM_ItemIdEnd); }else{ TM_ItemId = atoi(ItemIdBuf); } }else if(getStringFromIndexWithDelim(TM_ItemIdData,"-", 2, ItemIdBuf, sizeof(ItemIdBuf)) != FALSE){ if(getStringFromIndexWithDelim(TM_ItemIdData,"-", 1, ItemIdBuf, sizeof(ItemIdBuf)) != FALSE) TM_ItemIdStart = atoi(ItemIdBuf); if(getStringFromIndexWithDelim(TM_ItemIdData,"-", 2, ItemIdBuf, sizeof(ItemIdBuf)) != FALSE) TM_ItemIdEnd = atoi(ItemIdBuf); if(TM_ItemIdStart<=TM_ItemIdEnd){ TM_ItemId = RAND(TM_ItemIdStart,TM_ItemIdEnd); } }else{ TM_ItemId = atoi(TM_ItemIdData); } if(TM_ItemId>-1){ TM_Int = NPC_GiveItem( TM_Index, TM_ItemId); } if(TM_Int>=0){ char TM_Buff[256]; snprintf(TM_Buff, sizeof(TM_Buff), "获得 %s。", ITEM_getChar( TM_Int, ITEM_NAME)); CHAR_talkToCli( TM_Index, -1, TM_Buff, CHAR_COLORYELLOW); if(TM_Type>0){ time_t timep; struct tm *p; time(&timep); p=localtime(&timep); timep = mktime(p); TM_Type = timep + TM_Type; ITEM_setInt(TM_Int,ITEM_TIME,TM_Type); sprintf(TM_Buff,"[限时]%s",ITEM_getChar(TM_Int,ITEM_NAME)); ITEM_setChar(TM_Int,ITEM_NAME,TM_Buff); ITEM_setChar(TM_Int,ITEM_SECRETNAME,TM_Buff); CHAR_sendStatusString(TM_Index,"I"); // timep = TM_Type; // p=localtime(&timep); // int year=1900+p->tm_year; // int mon=1+p->tm_mon; // int date=p->tm_mday; // int hour=p->tm_hour; // int min=p->tm_min; // int sec=p->tm_sec; // char monbuf[5],datebuf[5],hourbuf[5],minbuf[5],secbuf[5]; // if(mon<10) sprintf(monbuf,"0%d",mon); // else sprintf(monbuf,"%d",mon); // if(date<10) sprintf(datebuf,"0%d",date); // else sprintf(datebuf,"%d",date); // if(hour<10) sprintf(hourbuf,"0%d",hour); // else sprintf(hourbuf,"%d",hour); // if(min<10) sprintf(minbuf,"0%d",min); // else sprintf(minbuf,"%d",min); // if(sec<10) sprintf(secbuf,"0%d",sec); // else sprintf(secbuf,"%d",sec); // sprintf(TM_Buff,"有效期:%d.%s.%s/%s:%s:%s %s",year,monbuf,datebuf,hourbuf,minbuf,secbuf,ITEM_getChar(TM_Int,ITEM_EFFECTSTRING)); // ITEM_setChar(TM_Int,ITEM_EFFECTSTRING,TM_Buff); } } LRetInt(_NLL, TM_Int); }
int AngelCreate( int angelindex) { int emptyitem1, emptyitem2; int angeltokenindex, herotokenindex; char msgbuf[1024]/*, nameinfo[1024]*/; int mindex, mission; char heroname[64]; if( !CHAR_CHECKINDEX( angelindex)) return FALSE; print(" 天使答应了!! "); mindex = checkIfAngel( angelindex); if( mindex == -1 || missiontable[mindex].flag == MISSION_TIMEOVER ) { //print("\n ANGEL错误!!Table逾时或无资料??:%d ", angelindex ); CHAR_talkToCli( angelindex, -1, "很抱歉,你太晚回答,已经逾时了。", CHAR_COLORYELLOW); sprintf( msgbuf, " 回答逾时或无资料 i:%d 使者:%s %s ", mindex, CHAR_getChar( angelindex, CHAR_CDKEY), CHAR_getChar( angelindex, CHAR_NAME)); print( msgbuf); LogAngel( msgbuf); return FALSE; } if( missiontable[mindex].flag != MISSION_WAIT_ANSWER ) { print(" 旗标不符:%d ", missiontable[mindex].flag); return FALSE; } if( CHAR_findEmptyItemBoxNo( angelindex ) < 2 ){ CHAR_talkToCli( angelindex, -1, "空间栏位不足。至少要有两个空道具栏位。", CHAR_COLORYELLOW); return TRUE; } getStringFromIndexWithDelim( missiontable[mindex].heroinfo, ":", 2, heroname, sizeof(heroname)); angeltokenindex = ITEM_makeItemAndRegist( ANGELITEM ); if( angeltokenindex != -1 ){ /*if( ITEM_getInt( angeltokenindex, ITEM_TYPE) != ITEM_ANGELTOKEN) { print(" 制作使者信物失败 "); ITEM_endExistItemsOne( angeltokenindex); return; }*/ //sprintf( nameinfo, "%s:%s", CHAR_getChar( angelindex, CHAR_CDKEY), CHAR_getChar( angelindex, CHAR_NAME ) ); ITEM_setChar( angeltokenindex, ITEM_ANGELINFO, missiontable[mindex].angelinfo); ITEM_setChar( angeltokenindex, ITEM_HEROINFO, missiontable[mindex].heroinfo); sprintf( msgbuf, "%d", missiontable[mindex].mission); ITEM_setChar( angeltokenindex, ITEM_ANGELMISSION, msgbuf); //sprintf( msgbuf, "%s(%s)", ITEM_getChar( angeltokenindex, ITEM_NAME), CHAR_getChar( angelindex, CHAR_NAME ) ); //ITEM_setChar( angeltokenindex, ITEM_NAME, msgbuf); //ITEM_setChar( angeltokenindex, ITEM_SECRETNAME, msgbuf); //sprintf( msgbuf, "这是使者 %s 与勇者 %s 专属的信物", CHAR_getChar( angelindex, CHAR_NAME), heroname ); sprintf( msgbuf, "精灵使者 %s 的信物,装备後不遇敌。", CHAR_getChar( angelindex, CHAR_NAME) ); ITEM_setChar( angeltokenindex, ITEM_EFFECTSTRING, msgbuf); emptyitem1 = CHAR_addItemSpecificItemIndex( angelindex, angeltokenindex); CHAR_sendItemDataOne( angelindex, emptyitem1); LogItem( CHAR_getChar( angelindex, CHAR_NAME ), CHAR_getChar( angelindex, CHAR_CDKEY ), angeltokenindex, "AddItem(制作道具 使者信物)", CHAR_getInt( angelindex,CHAR_FLOOR), CHAR_getInt( angelindex,CHAR_X ), CHAR_getInt( angelindex,CHAR_Y ), ITEM_getChar( angeltokenindex, ITEM_UNIQUECODE), ITEM_getChar( angeltokenindex, ITEM_NAME), ITEM_getInt( angeltokenindex, ITEM_ID) ); CHAR_talkToCli( angelindex, -1,"得到使者的信物。", CHAR_COLORYELLOW); }else{ print("制作使者的信物失败。" ); return FALSE; } herotokenindex = ITEM_makeItemAndRegist( HEROITEM ); if( herotokenindex != -1 ){ /*if( ITEM_getInt( herotokenindex, ITEM_TYPE) != ITEM_HEROTOKEN) { print(" 制作勇者信物失败 "); ITEM_endExistItemsOne( herotokenindex); ITEM_endExistItemsOne( angeltokenindex); CHAR_sendItemDataOne( angelindex, emptyitem1); return; }*/ //sprintf( nameinfo, "%s:%s", CHAR_getChar( angelindex, CHAR_CDKEY), CHAR_getChar( angelindex, CHAR_NAME ) ); ITEM_setChar( herotokenindex, ITEM_ANGELINFO, missiontable[mindex].angelinfo); ITEM_setChar( herotokenindex, ITEM_HEROINFO, missiontable[mindex].heroinfo); sprintf( msgbuf, "%d", missiontable[mindex].mission); ITEM_setChar( herotokenindex, ITEM_ANGELMISSION, msgbuf); //sprintf( msgbuf, "%s(%s)", ITEM_getChar( herotokenindex, ITEM_NAME), heroname ); //ITEM_setChar( herotokenindex, ITEM_NAME, msgbuf); //ITEM_setChar( herotokenindex, ITEM_SECRETNAME, msgbuf); //sprintf( msgbuf, "这是勇者 %s 与使者 %s 专属的信物", heroname, CHAR_getChar( angelindex, CHAR_NAME) ); sprintf( msgbuf, "勇者 %s 的信物,使者使用可传送至勇者身边。", heroname ); ITEM_setChar( herotokenindex, ITEM_EFFECTSTRING, msgbuf); emptyitem2 = CHAR_addItemSpecificItemIndex( angelindex, herotokenindex); CHAR_sendItemDataOne( angelindex, emptyitem2); LogItem( CHAR_getChar( angelindex, CHAR_NAME ), CHAR_getChar( angelindex, CHAR_CDKEY ), herotokenindex, "AddItem(制作道具 勇者信物)", CHAR_getInt( angelindex,CHAR_FLOOR), CHAR_getInt( angelindex,CHAR_X ), CHAR_getInt( angelindex,CHAR_Y ), ITEM_getChar( herotokenindex, ITEM_UNIQUECODE), ITEM_getChar( herotokenindex, ITEM_NAME), ITEM_getInt( herotokenindex, ITEM_ID) ); CHAR_talkToCli( angelindex, -1,"得到勇者的信物。", CHAR_COLORYELLOW); }else{ print("制作勇者的信物失败。" ); ITEM_endExistItemsOne( angeltokenindex); CHAR_sendItemDataOne( angelindex, emptyitem1); return FALSE; } // 更新至AC Server //sprintf( nameinfo, "%s:%s", CHAR_getChar( angelindex, CHAR_CDKEY), CHAR_getChar( angelindex, CHAR_NAME ) ); sprintf( msgbuf, "%s|%d", missiontable[mindex].angelinfo, missionlist[missiontable[mindex].mission].limittime ); saacproto_ACMissionTable_send( acfd, MISSION_DOING, 4, msgbuf, ""); //CHAR_talkToCli( angelindex, -1, "天之声:非常感谢你答应帮忙,那我就将信物交给你了,请将勇者的信物转交给勇者。", CHAR_COLORYELLOW); lssproto_WN_send( getfdFromCharaIndex(angelindex), WINDOW_MESSAGETYPE_MESSAGE, WINDOW_BUTTONTYPE_YES, -1, -1, "非常感谢你答应帮忙,那我就将信物交给你了,请将勇者的信物转交给勇者。"); sprintf( msgbuf, " 使者答应帮忙了 i:%d 使者:%s 勇者:%s ci=%d ", mindex, missiontable[mindex].angelinfo, missiontable[mindex].heroinfo, angelindex); print( msgbuf); LogAngel( msgbuf); return FALSE; }
void ITEM_contractSign( int fd, int itemindex, int signindex) { int charaindex; int i; int conIndex; int complete =0; int item_id; char contractSignData[512]; contractSignTag contractSign[4]; print("\n contractSign:%d:%d ", itemindex, signindex); charaindex = CONNECT_getCharaindex( fd ); if( !CHAR_CHECKINDEX(charaindex)) return; if( signindex <0 || signindex >=4) return; for( i=0 ; i<CHAR_MAXITEMHAVE ; i++ ){ if( CHAR_getItemIndex( charaindex,i ) == itemindex ) break; } if( i >= CHAR_MAXITEMHAVE ) return; if( strcmp( ITEM_getChar( itemindex, ITEM_USEFUNC), "ITEM_contract") ) return; conIndex = atoi( ITEM_getChar( itemindex, ITEM_ARGUMENT)); if( signindex >= ITEM_contractTbl[conIndex].argnum ) return; strcpy( contractSignData, ITEM_getChar( itemindex, ITEM_CONTRACTARG) ); for( i=0; i<4; i++) contractSign[i].used = FALSE; for( i=0; i<4; i++) { int index; char buf[512]; char token[32]; if( getStringFromIndexWithDelim( contractSignData, ",", i+1, buf, sizeof( buf )-1) == FALSE ) break; if( strlen( buf) == 0) break; getStringFromIndexWithDelim( buf, ":", 1, token, sizeof( token )-1 ); index = atoi( token); if( index <0 || index >=4) break; getStringFromIndexWithDelim( buf, ":", 2, contractSign[index].name, sizeof( contractSign[index].name )-1 ); getStringFromIndexWithDelim( buf, ":", 3, contractSign[index].fmname, sizeof( contractSign[index].fmname )-1 ); contractSign[index].used = TRUE; } if( contractSign[signindex].used == TRUE) return; strcpy( contractSign[signindex].name, CHAR_getChar( charaindex, CHAR_NAME) ); strcpy( contractSign[signindex].fmname, CHAR_getChar( charaindex, CHAR_FMNAME) ); contractSign[signindex].used = TRUE; // 檢查是否完成契約 for( i =0; i<4; i++) { if( contractSign[i].used == TRUE) complete++; } if( complete >= ITEM_contractTbl[conIndex].argnum ) { char buf[512]; if( CHAR_findEmptyItemBoxNo( charaindex ) < ITEM_contractTbl[conIndex].argnum -1 ) { sprintf( buf, "要完成這個契約,請先準備%d個空道具欄位。", ITEM_contractTbl[conIndex].argnum -1); CHAR_talkToCli( charaindex, -1, buf, CHAR_COLORYELLOW); return; } } strcpy( contractSignData, ""); for( i=0; i<4; i++) { char buf[512]; if( contractSign[i].used == FALSE) continue; sprintf( buf, "%d:%s:%s,", i, contractSign[i].name, contractSign[i].fmname); strcat( contractSignData, buf); } ITEM_setChar( itemindex, ITEM_CONTRACTARG, contractSignData); CHAR_talkToCli( charaindex, -1, "完成契約簽名。", CHAR_COLORYELLOW); // 完成契約 if( complete >= ITEM_contractTbl[conIndex].argnum ) { struct tm *nowtime; char timebuf[512]; // 紀錄日期 nowtime = localtime( (time_t *)&NowTime.tv_sec ); sprintf( timebuf, "%04d年%02d月%02d日", nowtime->tm_year +1900, nowtime->tm_mon+1, nowtime->tm_mday); ITEM_setChar( itemindex, ITEM_CONTRACTTIME, timebuf); CHAR_talkToCli( charaindex, -1, "完成所有簽名,契約成立!", CHAR_COLORYELLOW); // 複製契約 item_id = ITEM_getInt( itemindex, ITEM_ID); for( i =0 ; i < ITEM_contractTbl[conIndex].argnum -1 ; i++) { int emptyindex; int newitemindex; emptyindex = CHAR_findEmptyItemBox( charaindex ); if( emptyindex < 0 ){ CHAR_talkToCli( charaindex, -1, "空間欄位不足。", CHAR_COLORYELLOW); break; } newitemindex = ITEM_makeItemAndRegist( item_id ); if( newitemindex != -1 ){ CHAR_setItemIndex( charaindex, emptyindex, newitemindex ); ITEM_setWorkInt( newitemindex, ITEM_WORKOBJINDEX, -1); ITEM_setWorkInt( newitemindex, ITEM_WORKCHARAINDEX, charaindex); CHAR_sendItemDataOne( charaindex, emptyindex); ITEM_setChar( newitemindex, ITEM_CONTRACTARG, contractSignData); ITEM_setChar( newitemindex, ITEM_CONTRACTTIME, timebuf); } CHAR_talkToCli( charaindex, -1, "複製契約書。", CHAR_COLORYELLOW); } } }