?? trade.c
字號:
strcpy(msg, TRADE_SUCCESS);
else if (result == 2)
strcpy(msg, TRADE_LOCK);
if (result != 2){
snprintf(tmpmsg, sizeof(tmpmsg), "W|%d|%s", fd, mycharaname);
lssproto_TD_send(tofd, -1, tmpmsg);
snprintf(tmpmsg, sizeof(tmpmsg), "W|%d|%s", tofd, tocharaname);
lssproto_TD_send(fd, -1, tmpmsg);
CHAR_setWorkInt(meindex, CHAR_WORKTRADEMODE, CHAR_TRADE_FREE);
CHAR_setWorkInt(toindex, CHAR_WORKTRADEMODE, CHAR_TRADE_FREE);
CONNECT_setTradeTmp(fd, "");
CONNECT_setTradeTmp(tofd, "");
CHAR_sendTradeEffect( meindex, 0);
CHAR_sendTradeEffect( toindex, 0);
}
CHAR_sendStatusString(meindex, "i");
CHAR_sendStatusString(toindex, "i");
CHAR_sendStatusString(meindex, "P");
CHAR_sendStatusString(toindex, "P");
{
int j, petindex;
char msgbuf[256];
for(j = 0; j < CHAR_MAXPETHAVE; j++){
petindex = CHAR_getCharPet( meindex, j);
if( !CHAR_CHECKINDEX( petindex) ) continue;
CHAR_complianceParameter( petindex );
snprintf( msgbuf, sizeof( msgbuf ), "K%d", j );
CHAR_sendStatusString( meindex, msgbuf );
snprintf( msgbuf, sizeof( msgbuf ), "W%d", j );
CHAR_sendStatusString( meindex, msgbuf );
}
for(j = 0; j < CHAR_MAXPETHAVE; j++){
petindex = CHAR_getCharPet( toindex, j);
if( !CHAR_CHECKINDEX( petindex) ) continue;
CHAR_complianceParameter( petindex );
snprintf( msgbuf, sizeof( msgbuf ), "K%d", j );
CHAR_sendStatusString( toindex, msgbuf );
snprintf( msgbuf, sizeof( msgbuf ), "W%d", j );
CHAR_sendStatusString( toindex, msgbuf );
}
}
CHAR_talkToCli(meindex, -1, msg, CHAR_COLORYELLOW);
CHAR_talkToCli(toindex, -1, msg, CHAR_COLORYELLOW);
}
#ifdef _ITEM_PILEFORTRADE
int TRADE_HandleTrade_DelItem( int charaindex, int MyMaxPile, int MaxPile, int *Item, int *nums, int *indexlist)
{
int i, k;
for( i=0; i<50; i++){
indexlist[i] = -1;
}
k=0;
for( i=0; i<15; i++ ){
int pilenum, itemindex, totalnums, newindex;
if( Item[i] == -1 ) continue;
itemindex = CHAR_getItemIndex( charaindex, Item[i] );
if( !ITEM_CHECKINDEX( itemindex)) return -1;
pilenum = ITEM_getInt( itemindex, ITEM_USEPILENUMS);
pilenum -= nums[i];
if( pilenum < 0 ) return -1;
if( pilenum == 0 ){
CHAR_setItemIndex( charaindex, Item[i], -1);
indexlist[k] = itemindex;
k++;
totalnums = ITEM_getInt( itemindex, ITEM_USEPILENUMS);
newindex = itemindex;
}else{
ITEM_setInt( itemindex, ITEM_USEPILENUMS, pilenum);
newindex = ITEM_makeItemAndRegist( ITEM_getInt( itemindex, ITEM_ID));
if( !ITEM_CHECKINDEX( newindex) ) return -1;
indexlist[k] = newindex;
k++;
totalnums = nums[i];
}
if( totalnums > MaxPile ){
totalnums -= MaxPile;
ITEM_setInt( newindex, ITEM_USEPILENUMS, MaxPile);
}else{
ITEM_setInt( newindex, ITEM_USEPILENUMS, totalnums);
totalnums = 0;
}
while( totalnums > 0 ){
newindex = ITEM_makeItemAndRegist( ITEM_getInt( itemindex, ITEM_ID));
if( !ITEM_CHECKINDEX( newindex) ) return -1;
indexlist[k] = newindex;
k++;
if( totalnums > MaxPile ){
totalnums -= MaxPile;
ITEM_setInt( newindex, ITEM_USEPILENUMS, MaxPile);
}else{
ITEM_setInt( newindex, ITEM_USEPILENUMS, totalnums);
totalnums = 0;
}
}
}
return k;
}
int TRADE_HandleTrade_DelPet( int charaindex, int *Pet, int *indexlist)
{
int i, k, petindex;
k=0;
for( i=0; i<5; i++){
indexlist[i] = -1;
}
for( i=0; i<5; i++ ){
if( Pet[i] == -1 ) continue;
petindex = CHAR_getCharPet( charaindex, Pet[i] );
if( !CHAR_CHECKINDEX( petindex)) return -1;
CHAR_setCharPet( charaindex, Pet[i], -1);
indexlist[k] = petindex;
k++;
}
return k;
}
BOOL TRADE_HandleTrade_DelGold( int charaindex, int sGold, int *Gold)
{
int MyGold, MyMaxGold;
MyGold = CHAR_getInt( charaindex, CHAR_GOLD);
MyMaxGold = CHAR_getMaxHaveGold( charaindex);
MyGold -= sGold;
if( MyGold < 0 || MyGold > MyMaxGold ){
MyGold = (MyGold<0)?0:MyGold;
MyGold = (MyGold>MyMaxGold)?MyMaxGold:MyGold;
CHAR_setInt( charaindex, CHAR_GOLD, MyGold);
return FALSE;
}
CHAR_setInt( charaindex, CHAR_GOLD, MyGold);
*Gold = sGold;
return TRUE;
}
BOOL TRADE_HandleTrade_AddItem( int charaindex, int *Item)
{
int ret, i;
for( i=0; i<50; i++){
if( Item[i] == -1 )break;
ret = CHAR_addItemSpecificItemIndex( charaindex, Item[i]);
if( ret < 0 || ret >= CHAR_MAXITEMHAVE ) {
int j;
for( j=i; j< 50; j++)
ITEM_endExistItemsOne( Item[j]);
return FALSE;
}
}
return TRUE;
}
BOOL TRADE_HandleTrade_AddPet( int charaindex, int *Pet)
{
int havepetelement, i;
for( i=0; i<5; i++){
havepetelement = CHAR_getCharPetElement( charaindex);
if( Pet[i] == -1 ) break;
if( havepetelement < 0 ){
int j;
for( j=i; j<5; j++){
CHAR_endCharOneArray( Pet[j] );
}
return FALSE;
}
CHAR_setCharPet( charaindex, havepetelement, Pet[i]);
CHAR_setWorkInt( Pet[i], CHAR_WORKPLAYERINDEX, charaindex);
CHAR_setChar( Pet[i], CHAR_OWNERCDKEY, CHAR_getChar( charaindex, CHAR_CDKEY));
CHAR_setChar( Pet[i], CHAR_OWNERCHARANAME, CHAR_getChar( charaindex, CHAR_NAME));
CHAR_complianceParameter( Pet[i]);
}
return TRUE;
}
BOOL TRADE_HandleTrade_AddGold( int charaindex, int sGold)
{
int MyGold, MyMaxGold;
MyGold = CHAR_getInt( charaindex, CHAR_GOLD);
MyMaxGold = CHAR_getMaxHaveGold( charaindex);
MyGold += sGold;
MyGold = (MyGold<0)?0:MyGold;
MyGold = (MyGold>MyMaxGold)?MyMaxGold:MyGold;
CHAR_setInt( charaindex, CHAR_GOLD, MyGold);
return TRUE;
}
BOOL TRADE_HandleTrade( int meindex, STradeList *temp1, int toindex, STradeList *temp2 )
{
int MeMaxPile, ToMaxPile, ret;
int MeItem[50], ToItem[50];
int MePet[5], ToPet[5];
int MeGold=0, ToGold=0;
MeMaxPile = CHAR_getMyMaxPilenum( meindex);//最大堆疊數
ToMaxPile = CHAR_getMyMaxPilenum( toindex);
//移除meindex
//移除toindex
{
char buf[256];
memset( buf, 0, sizeof( buf));
sprintf( buf, "A.%s[%s] trade B.%s[%s] FXY[%d,%d,%d]",
CHAR_getChar( meindex, CHAR_NAME), CHAR_getChar(meindex, CHAR_CDKEY),
CHAR_getChar( toindex, CHAR_NAME), CHAR_getChar(toindex, CHAR_CDKEY),
CHAR_getInt( meindex, CHAR_FLOOR), CHAR_getInt( meindex, CHAR_X), CHAR_getInt( meindex, CHAR_Y) );
LogTrade(buf);
}
//移除
if( (ret=TRADE_HandleTrade_DelItem( meindex, MeMaxPile, ToMaxPile, temp1->ItemTi, temp1->ItemNum, ToItem ))== -1 ) return FALSE;
if( (ret=TRADE_HandleTrade_DelItem( toindex, ToMaxPile, MeMaxPile, temp2->ItemTi, temp2->ItemNum, MeItem ))== -1 ) return FALSE;
if( (ret=TRADE_HandleTrade_DelPet( meindex, temp1->PetTi, ToPet)) == -1 ) return FALSE;
if( (ret=TRADE_HandleTrade_DelPet( toindex, temp2->PetTi, MePet)) == -1 ) return FALSE;
if( TRADE_HandleTrade_DelGold( meindex, temp1->Golds, &ToGold) == FALSE ) return FALSE;
if( TRADE_HandleTrade_DelGold( toindex, temp2->Golds, &MeGold) == FALSE ) return FALSE;
//加入
if( TRADE_HandleTrade_AddItem( meindex, MeItem) == FALSE ) return FALSE;
if( TRADE_HandleTrade_AddItem( toindex, ToItem) == FALSE ) return FALSE;
if( TRADE_HandleTrade_AddPet( meindex, MePet) == FALSE) return FALSE;
if( TRADE_HandleTrade_AddPet( toindex, ToPet) == FALSE) return FALSE;
TRADE_HandleTrade_AddGold( meindex, MeGold);
TRADE_HandleTrade_AddGold( toindex, ToGold);
{
char buf1[4096], buf2[4096], buf[256];
int i;
sprintf( buf1, "A.ITEM.");
sprintf( buf2, "B.ITEM.");
for( i=0; i<50; i++){
if( ITEM_CHECKINDEX( ToItem[i]) ){
sprintf( buf, "%s[%s]*%d,",
ITEM_getChar( ToItem[i], ITEM_NAME), ITEM_getChar( ToItem[i], ITEM_UNIQUECODE),
ITEM_getInt( ToItem[i], ITEM_USEPILENUMS) );
strcat( buf1, buf);
}
if( ITEM_CHECKINDEX( MeItem[i]) ){
sprintf( buf, "%s[%s]*%d,",
ITEM_getChar( MeItem[i], ITEM_NAME), ITEM_getChar( MeItem[i], ITEM_UNIQUECODE),
ITEM_getInt( MeItem[i], ITEM_USEPILENUMS) );
strcat( buf2, buf);
}
}
strcat( buf1, "PET.");
strcat( buf2, "PET.");
for( i=0; i<5; i++){
if( CHAR_CHECKINDEX( ToPet[i]) ){
sprintf( buf, "%s[%s]%s-%d",
CHAR_getUseName( ToPet[i]), CHAR_getChar( ToPet[i], CHAR_UNIQUECODE),
CHAR_getChar( ToPet[i], CHAR_NAME), CHAR_getInt( ToPet[i], CHAR_LV) );
strcat( buf1, buf);
}
if( CHAR_CHECKINDEX( MePet[i]) ){
sprintf( buf, "%s[%s]%s-%d",
CHAR_getUseName( MePet[i]), CHAR_getChar( MePet[i], CHAR_UNIQUECODE),
CHAR_getChar( MePet[i], CHAR_NAME), CHAR_getInt( MePet[i], CHAR_LV) );
strcat( buf2, buf);
}
}
sprintf( buf, "GOLD:%d", ToGold);
strcat( buf1, buf);
sprintf( buf, "GOLD:%d", MeGold);
strcat( buf2, buf);
LogTrade( buf1);
LogTrade( buf2);
}
return TRUE;
}
int TRADE_CheckItembuf(int fd, int meindex, int toindex, int tofd, char* mycharaname, char* tocharaname)
{
int Tradeti;
STradeList TradeListTemp[2];
if( TRADE_getMyTarget( meindex) != toindex ) return -1;
Tradeti = CONNECT_getTradeList( fd);
if( Tradeti <0 || Tradeti >= MAX_TRADELISTNUM ) return -1;
if( TradeList[Tradeti][0].use != 1 || TradeList[Tradeti][1].use != 1 ) return -1;
if( TRADE_getSomeTradeList( meindex, &TradeListTemp[0]) == FALSE ) return -1;
if( TRADE_getSomeTradeList( toindex, &TradeListTemp[1]) == FALSE ) return -1;
//確定空位
if( TRADE_CheckTradeList( meindex, &TradeListTemp[0], toindex, &TradeListTemp[1]) == FALSE ) return -1;
//移除人物身上
//加入人物身上
if( TRADE_HandleTrade( meindex, &TradeListTemp[0], toindex, &TradeListTemp[1] ) == FALSE ) return -1;
//交易結束動作
return 1;
}
#else
/*
int TRADE_CheckItembuf(int fd, int meindex, int toindex, int tofd, char* mycharaname, char* tocharaname)
{
#ifdef _TRADESYSTEM2 // (不可開) Syu ADD 新交易系統
int myItem[42] = { -1 } ; //我方所有的交易內容編號
int oppItem[42] = { -1 }; //對方所有的交易內容編號
int ii , jj;
int Iitem1[15] = { 0 } ; //我方道具的index
int Iitem2[15] = { 0 } ; //對方道具的index
int ppet1[5] = { 0 } ; //我方寵物的index
int ppet2[5] = { 0 } ; //對方寵物的index
BOOL tradeflag = TRUE ;
int count = 0 ;
#endif
char a[16], b[16], c[16], d[16], e[16], f[16];
char g[16], h[16], i[16], j[16], k[16], l[16], token[16];
int itemindex1 = 0, itemindex2 = 0, itemindex3 = 0;
int itemindex4 = 0, itemindex5 = 0, itemindex6 = 0;
int toitemindex1 = 0, toitemindex2 = 0, toitemindex3 = 0;
int toitemindex4 = 0, toitemindex5 = 0, toitemindex6 = 0;
int item1 = 0, item2 = 0, item4 = 0, item5 = 0, pet3 = 0, pet6 = 0;
int pet1 = 0, pet2 = 0;
int swapitem1 = 0, swapitem2 = 0, gold1 = 0, gold2 = 0;
char itembuf[256], toitembuf[256], buf[4048];
CONNECT_getTradeTmp(fd, itembuf, sizeof(itembuf));
CONNECT_getTradeTmp(tofd, toitembuf, sizeof(toitembuf));
#ifdef _TRADESYSTEM2 // (不可開) Syu ADD 新交易系統
//取得我方所有交易內容編號
for ( ii = 0 ; ii < 42 ; ii ++ ) {
if (getStringFromIndexWithDelim(itembuf, "|", 6 + ii * 2 , token, sizeof(token)) == TRUE)
myItem[ii] = atoi(token);
}
//取得對方所有交易內容編號
for ( ii = 0 ; ii < 42 ; ii ++ ) {
if (getStringFromIndexWithDelim(toitembuf, "|", 6 + ii * 2 , token, sizeof(token)) == TRUE)
oppItem[ii] = atoi(token);
}
#else
// 比對雙方之最後交易協定
if (getStringFromIndexWithDelim(itembuf, "|", 5, token, sizeof(token)) == TRUE)
strcpy(a, token);
if (getStringFromIndexWithDelim(itembuf, "|", 6, token, sizeof(token)) == TRUE)
itemindex1 = atoi(token);
if (getStringFromIndexWithDelim(itembuf, "|", 7, token, sizeof(token)) == TRUE)
strcpy(b, token);
if (getStringFromIndexWithDelim(itembuf, "|", 8, token, sizeof(token)) == TRUE)
itemindex2 = atoi(token);
if (getStringFromIndexWithDelim(itembuf, "|", 9, token, sizeof(token)) == TRUE)
strcpy(c, token);
if (getStringFromIndexWithDelim(itembuf, "|", 10, token, sizeof(token)) == TRUE)
itemindex3 = atoi(token);
if (getStringFromIndexWithDelim(itembuf, "|", 11, token, sizeof(token)) == TRUE)
strcpy(d, token);
if (getStringFromIndexWithDelim(itembuf, "|", 12, token, sizeof(token)) == TRUE)
itemindex4 = atoi(token);
if (getStringFromIndexWithDelim(itembuf, "|", 13, token, sizeof(token)) == TRUE)
strcpy(e, token);
if (getStringFromIndexWithDelim(itembuf, "|", 14, token, sizeof(token)) == TRUE)
itemindex5 = atoi(token);
if (getStringFromIndexWithDelim(itembuf, "|", 15, token, sizeof(token)) == TRUE)
strcpy(f, token);
if (getStringFromIndexWithDelim(itembuf, "|", 16, token, sizeof(token)) == TRUE)
itemindex6 = atoi(token);
if (getStringFromIndexWithDelim(toitembuf, "|", 5, token, sizeof(token)) == TRUE)
strcpy(g, token);
if (getStringFromIndexWithDelim(toitembuf, "|", 6, token, sizeof(token)) == TRUE)
toitemindex1 = atoi(token);
if (getStringFromIndexWithDelim(toitembuf, "|", 7, token, sizeof(token)) == TRUE)
strcpy(h, token);
if (getStringFromIndexWithDelim(toitembuf, "|", 8, token, sizeof(token)) == TRUE)
toitemindex2 = atoi(token);
if (getStringFromIndexWithDelim(toitembuf, "|", 9, token, sizeof(token)) == TRUE)
strcpy(i, token);
if (getStringFromIndexWithDelim(toitembuf, "|", 10, token, sizeof(token)) == TRUE)
toitemindex3 = atoi(token);
if (getStringFromIndexWithDelim(toitembuf, "|", 11, token, sizeof(token)) == TRUE)
strcpy(j, token);
if (getStringFromIndexWithDelim(toitembuf, "|", 12, token, sizeof(token)) == TRUE)
toitemindex4 = atoi(token);
if (getStringFromIndexWithDelim(toitembuf, "|", 13, token, sizeof(token)) == TRUE)
strcpy(k, token);
if (getStringFromIndexWithDelim(toitembuf, "|", 14, token, sizeof(token)) == TRUE)
toitemindex5 = atoi(token);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -