📄 npc_sellsthman.c
字号:
page = ((page-1)<0)?0:page-1;
}else if( select == WINDOW_BUTTONTYPE_NEXT ){
page = ((page+1)>=MAX_LISTPAGE)?(MAX_LISTPAGE-1):(page+1);
}else if( select == WINDOW_BUTTONTYPE_OK ){ //买
}else if( select == WINDOW_BUTTONTYPE_YES ){ //买
NPC_SellsthMan_selectWindow( meindex, talkerindex, WINDOW_CALL, select, data);
return;
}else if( select == 0 ){
NPC_SellsthMan_selectWindow( meindex, talkerindex, WINDOW_LOOK, select, data);
return;
}
ti = (page<<16);
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, page);
NPC_SellsthMan_selectWindow( meindex, talkerindex, WINDOW_FIND, ti, data);
}
break;
case NPC_WINDOW_SELLON:
NPC_SellsthMan_selectWindow( meindex, talkerindex, WINDOW_SELLHANDLE, select, data);
break;
case NPC_WINDOW_SELLHANDLE:
break;
case NPC_WINDOW_BUYMESS:
break;
case NPC_WINDOW_BUYHANDLE:
break;
case NPC_WINDOW_HELP:
break;
case NPC_WINDOW_END:
break;
}
}
static int runType = 0;
void NPC_SellsthManLoop( int meindex)
{
int i, j;
char headmsg[256];
char token[256];
int playernum, page, num;
int floor = CHAR_getInt( meindex, CHAR_FLOOR);
playernum = CHAR_getPlayerMaxNum();
runType = (++runType)%100;
page = CHAR_getWorkInt( meindex, NPC_WORK_CALLPAGE );
num = CHAR_getWorkInt( meindex, NPC_WORK_CALLNUM );
for( i=0; i<MAX_LISTNUM; i++){
if( NSellSthList[page][num].use == 1 ){
break;
}
if( ++num >= MAX_LISTNUM ){
num = 0;
if( ++page >= MAX_LISTPAGE ){
page=0;
}
}
}
CHAR_setWorkInt( meindex, NPC_WORK_CALLPAGE, page);
CHAR_setWorkInt( meindex, NPC_WORK_CALLNUM, num);
if( i >= MAX_LISTNUM )return;
sprintf( headmsg, "拍卖频道(%d页%d项):%s (拍卖者:%s)。",
page, num, NSellSthList[page][num].headmess,
CHAR_getChar( NSellSthList[page][num].sellindex, CHAR_NAME) );
if( NSellSthList[page][num].selltype==1 ){
sprintf( token, "拍卖道具:%s。",
ITEM_getChar( NSellSthList[page][num].Iindex, ITEM_NAME) );
}else{
sprintf( token, "拍卖宠物:%s LV:%d %s。",
CHAR_getChar( NSellSthList[page][num].Iindex, CHAR_NAME),
CHAR_getInt( NSellSthList[page][num].Iindex, CHAR_LV),
#ifdef _PET_2TRANS
CHAR_getInt( NSellSthList[page][num].Iindex , CHAR_TRANSMIGRATION) == 2 )?"二转":(CHAR_getInt( NSellSthList[page][num].Iindex , CHAR_TRANSMIGRATION) == 1 )?"一转":"")
#else
( CHAR_getInt( NSellSthList[page][num].Iindex , CHAR_TRANSMIGRATION) == 1 )?"转":""
#endif
);
}
for(i=0; i<playernum; i++){
if( !CHAR_CHECKINDEX( i)) continue;
if( CHAR_getInt( i, CHAR_FLOOR) != floor ) continue;
if( CHAR_getWorkInt( i, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE ) continue;
#ifdef _AUCPROTOCOL // (不可开) Syu ADD 拍卖频道开关Protocol
if ( CHAR_getFlg ( i , CHAR_ISAUC ) ){
#endif
CHAR_talkToCli( i, meindex, headmsg, CHAR_COLORYELLOW);
CHAR_talkToCli( i, -1, token, CHAR_COLORYELLOW);
#ifdef _AUCPROTOCOL // (不可开) Syu ADD 拍卖频道开关Protocol
}
#endif
}
if( ++num >= MAX_LISTNUM ){
num = 0;
if( ++page >= MAX_LISTPAGE ){
page=0;
}
}
CHAR_setWorkInt( meindex, NPC_WORK_CALLPAGE, page);
CHAR_setWorkInt( meindex, NPC_WORK_CALLNUM, num);
if( runType%10 == 0 ){
for( i=0; i<MAX_LISTPAGE; i++){
for( j=0; j<MAX_LISTNUM; j++ ){
if( NSellSthList[i][j].use == 0 ) continue;
if( !CHAR_CHECKINDEX( NSellSthList[i][j].sellindex)||
NSellSthList[i][j].fd != getfdFromCharaIndex( NSellSthList[i][j].sellindex) ){
NSellSthList[i][j].use = 0;
continue;
}
if( NSellSthList[i][j].selltype == 1 ){//道具
int itemindex = CHAR_getItemIndex( NSellSthList[i][j].sellindex , NSellSthList[i][j].uindex );
if( !ITEM_CHECKINDEX( itemindex) ||
NSellSthList[i][j].Iindex != itemindex ){
int num;
NSellSthList[i][j].use = 0;
num = CHAR_getWorkInt( NSellSthList[i][j].sellindex, CHAR_WORKSELLSTHNUM);
num = ((num-1)<0)?0:(num-1);
CHAR_setWorkInt( NSellSthList[i][j].sellindex, CHAR_WORKSELLSTHNUM, num);
}
}else if( NSellSthList[i][j].selltype == 2 ){
int petindex = CHAR_getCharPet( NSellSthList[i][j].sellindex, NSellSthList[i][j].uindex);
if( !CHAR_CHECKINDEX( petindex) ||
NSellSthList[i][j].Iindex != petindex ){
int num;
NSellSthList[i][j].use = 0;
num = CHAR_getWorkInt( NSellSthList[i][j].sellindex, CHAR_WORKSELLSTHNUM);
num = ((num-1)<0)?0:(num-1);
CHAR_setWorkInt( NSellSthList[i][j].sellindex, CHAR_WORKSELLSTHNUM, num);
}
}
}
}
}
}
BOOL NPC_getSellSth_ListString( int page, int num, char *ListString, int slen )
{
char buff[4096];
char buf[512];
int listnum=0, i;
memset( buff, 0, sizeof(buff));
for( i=num; i<MAX_LISTNUM; i++)
NPC_SellrePutList( page, i);
for( i=num; i<MAX_LISTNUM; i++){
if( NSellSthList[page][i].use == 0 )continue;
if( !CHAR_CHECKINDEX( NSellSthList[page][i].sellindex ) ||
NSellSthList[page][i].fd != getfdFromCharaIndex( NSellSthList[page][i].sellindex) ){
NSellSthList[page][i].use = 0;
continue;
}
if( NSellSthList[page][i].selltype == 1 ){//道具
int itemindex = CHAR_getItemIndex( NSellSthList[page][i].sellindex , NSellSthList[page][i].uindex );
if( !ITEM_CHECKINDEX( itemindex) ||
NSellSthList[page][i].Iindex != itemindex ){
int num;
num = CHAR_getWorkInt( NSellSthList[page][i].sellindex, CHAR_WORKSELLSTHNUM);
num = ((num-1)<0)?0:(num-1);
CHAR_setWorkInt( NSellSthList[page][i].sellindex, CHAR_WORKSELLSTHNUM, num);
NSellSthList[page][i].use = 0;
continue;
}
}else if( NSellSthList[page][i].selltype == 2 ){
int petindex = CHAR_getCharPet( NSellSthList[page][i].sellindex, NSellSthList[page][i].uindex);
if( !CHAR_CHECKINDEX( petindex) ||
NSellSthList[page][i].Iindex != petindex ){
int num;
num = CHAR_getWorkInt( NSellSthList[page][i].sellindex, CHAR_WORKSELLSTHNUM);
num = ((num-1)<0)?0:(num-1);
CHAR_setWorkInt( NSellSthList[page][i].sellindex, CHAR_WORKSELLSTHNUM, num);
NSellSthList[page][i].use = 0;
continue;
}
}
listnum++;
sprintf( buf, "%d,%s,%s,%s", i,
CHAR_getChar( NSellSthList[page][i].sellindex, CHAR_NAME ),
NSellSthList[page][i].headmess,
NSellSthList[page][i].sellmess );
strcat( buff, buf);
strcat( buff, "|");
}
if( strlen( ListString) + strlen( buff) > slen ) return FALSE;
sprintf( ListString, "%d|%d|%s", listnum, page, buff);
printf( "ANDY ListString:%s\nstrlen = %d \n", ListString, strlen( ListString) );
if( strlen( ListString) <= 0 ) return FALSE;
return TRUE;
}
BOOL NPC_setSellSth_ListString( int meindex, int toindex, int *page, int *num, char *data )
{
char buf1[256];
int i, j;
int fd = getfdFromCharaIndex( toindex);
for( i=0; i<MAX_LISTPAGE; i++){
for( j=0; j<MAX_LISTNUM; j++ ){
if( NSellSthList[i][j].use == 1 ){
if( !CHAR_CHECKINDEX( NSellSthList[i][j].sellindex)||
NSellSthList[i][j].fd != getfdFromCharaIndex( NSellSthList[i][j].sellindex) ){
NSellSthList[i][j].use = 0;
}
continue;
}
NSellSthList[i][j].sellindex = toindex;
NSellSthList[i][j].fd = fd;
if( getStringFromIndexWithDelim( data, "|", 1, buf1, sizeof( buf1)) == FALSE ){
print("ANDY err1.\n");
return FALSE;
}
sprintf( NSellSthList[i][j].headmess, "%s", buf1);
if( getStringFromIndexWithDelim( data, "|", 2, buf1, sizeof( buf1)) == FALSE ){
print("ANDY err2.\n");
return FALSE;
}
sprintf( NSellSthList[i][j].sellmess, "%s", buf1);
if( getStringFromIndexWithDelim( data, "|", 3, buf1, sizeof( buf1)) == FALSE ){
print("ANDY err3.\n");
return FALSE;
}
NSellSthList[i][j].selltype = atoi( buf1);
if( getStringFromIndexWithDelim( data, "|", 4, buf1, sizeof( buf1)) == FALSE ){
print("ANDY err4.\n");
return FALSE;
}
NSellSthList[i][j].uindex = atoi( buf1);
//Iindex
if( NSellSthList[i][j].selltype == 1 ){//道具
int itemindex = CHAR_getItemIndex( toindex , NSellSthList[i][j].uindex );
if( !ITEM_CHECKINDEX( itemindex) ){
print("ANDY err5. item:%d\n", NSellSthList[i][j].uindex);
return FALSE;
}
if( ITEM_getInt( itemindex, ITEM_VANISHATDROP) == 1 ){
char buf[256];
sprintf( buf, "%s无法交易。", ITEM_getChar( itemindex, ITEM_NAME) );
CHAR_talkToCli( toindex, meindex, buf, CHAR_COLORYELLOW);
return FALSE;
}
NSellSthList[i][j].Iindex = itemindex;
}else if( NSellSthList[i][j].selltype == 2 ){
int petindex = CHAR_getCharPet( toindex, NSellSthList[i][j].uindex);
if( !CHAR_CHECKINDEX( petindex) ){
print("ANDY err6. pet:%d\n", NSellSthList[i][j].uindex);
return FALSE;
}
NSellSthList[i][j].Iindex = petindex;
}else{
print("ANDY err8.\n");
return FALSE;
}
NSellSthList[i][j].use = 1;
*page = i;
*num = j;
return TRUE;
}
}
print("ANDY err9.\n");
return FALSE;
}
BOOL NPC_getSellSth_ViewString( int page, int num, char *ListString, int slen )
{
char buff[256];
char buf1[256], buf2[256];
int ti, sellindex;
if( num < 0 || num > MAX_LISTNUM ) return FALSE;
if( NSellSthList[page][num].use == 0 )return FALSE;
if( !CHAR_CHECKINDEX( NSellSthList[page][num].sellindex ) )return FALSE;
sellindex = NSellSthList[page][num].sellindex;
if( NSellSthList[page][num].selltype == 1 ){//道具
int itemindex, crushe;
ti = NSellSthList[page][num].uindex;
itemindex = CHAR_getItemIndex( sellindex , ti);
if( !ITEM_CHECKINDEX( itemindex) ) return FALSE;
crushe = ITEM_getItemDamageCrusheED( itemindex);
sprintf( buff, "1|%s|%s|0|%d|%d|%d|0|0|0|%s|||||||",
makeEscapeString( ITEM_getChar( itemindex, ITEM_SECRETNAME), buf2, sizeof( buf2)),
makeEscapeString( ITEM_getChar( itemindex, ITEM_NAME), buf1, sizeof( buf1)),
ITEM_getInt( itemindex, ITEM_BASEIMAGENUMBER),
crushe,
ITEM_getInt( itemindex, ITEM_USEPILENUMS),
ITEM_getChar( itemindex, ITEM_EFFECTSTRING) );
}else if( NSellSthList[page][num].selltype == 2 ){//宠物
int petindex, i;
ti = NSellSthList[page][num].uindex;
petindex = CHAR_getCharPet( sellindex, ti);
if( !CHAR_CHECKINDEX( petindex) ) return FALSE;
//TYPE|名| |图|等级|转| |攻|防|敏|技1|技2|技3|技4|技5|技6|技7
sprintf( buff, "2|%s|%s|%d|%d|%d|%d|%d|%d|%d|",
makeEscapeString( CHAR_getChar( petindex, CHAR_NAME ), buf1, sizeof(buf1)),
makeEscapeString( CHAR_getUseName( petindex), buf2, sizeof(buf2)),
CHAR_getInt( petindex, CHAR_BASEBASEIMAGENUMBER),
CHAR_getInt( petindex , CHAR_LV),
CHAR_getInt( petindex , CHAR_TRANSMIGRATION),
CHAR_getWorkInt(petindex , CHAR_WORKMAXHP),
CHAR_getWorkInt( petindex, CHAR_WORKATTACKPOWER),
CHAR_getWorkInt( petindex, CHAR_WORKDEFENCEPOWER),
CHAR_getWorkInt( petindex, CHAR_WORKQUICK));
for( i=0; i<7; i++){
int skillarray, skillID;
skillID = CHAR_getPetSkill( petindex, i);
skillarray = PETSKILL_getPetskillArray( skillID);
if( PETSKILL_CHECKINDEX( skillarray) ){
strcat( buff, PETSKILL_getChar( skillarray, PETSKILL_NAME) );
}
strcat( buff, "|");
}
}
sprintf( ListString, "%d|%s|%s|%s|%s",
num, CHAR_getChar( sellindex, CHAR_NAME),
NSellSthList[page][num].headmess,
NSellSthList[page][num].sellmess,
buff );
if( strlen( ListString) <= 0 ){
print("err ListString:%s strlen <= %d\n", ListString, strlen( ListString));
return FALSE;
}
return TRUE;
}
int NPC_getSellSth_FreeTiCount( void)
{
int counts = 0, i, j;
for( i=0; i<MAX_LISTPAGE; i++){
for( j=0; j<MAX_LISTNUM; j++ ){
if( NSellSthList[i][j].use != 1 )
counts++;
}
}
return counts;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -