?? trade.c
字號:
ITEM_setWorkInt(item1, ITEM_WORKOBJINDEX, -1);
CHAR_setItemIndex(meindex, itemindex1, -1);
}
// 道具 <-> 道具
else if (itemindex1 > 0 && itemindex2 > 0)
{
if (ITEM_CHECKINDEX(item1) == FALSE) return FALSE;
if (ITEM_CHECKINDEX(item2) == FALSE) return FALSE;
ITEM_setWorkInt(item1, ITEM_WORKCHARAINDEX, toindex);
ITEM_setWorkInt(item1, ITEM_WORKOBJINDEX, -1);
ITEM_setWorkInt(item2, ITEM_WORKCHARAINDEX, meindex);
ITEM_setWorkInt(item2, ITEM_WORKOBJINDEX, -1);
CHAR_setItemIndex(toindex, itemindex2, item1);
CHAR_setItemIndex(meindex, itemindex1, item2);
}
}
// 道具 <-> 金錢
else if ((strcmp(a, "I") == 0) && (strcmp(b, "G") == 0))
{
if (itemindex1 > 0)
{
if (ITEM_CHECKINDEX(item1) == FALSE) return FALSE;
eptitem = CHAR_findEmptyItemBox(toindex);
if (eptitem < 0) return FALSE;
ITEM_setWorkInt(item1, ITEM_WORKCHARAINDEX, toindex);
ITEM_setWorkInt(item1, ITEM_WORKOBJINDEX, -1);
CHAR_setItemIndex(toindex, eptitem, item1);
CHAR_setItemIndex(meindex, itemindex1, -1);
}
if (itemindex2 < 0) itemindex2 = 0;
gold1 = CHAR_getInt(meindex, CHAR_GOLD);
gold1 += itemindex2;
CHAR_setInt(meindex, CHAR_GOLD, gold1);
gold2 = CHAR_getInt(toindex, CHAR_GOLD);
gold2 -= itemindex2;
CHAR_setInt(toindex, CHAR_GOLD, gold2);
}
// 金錢 <-> 道具
else if ((strcmp(a, "G") == 0) && (strcmp(b, "I") == 0))
{
if (itemindex2 > 0)
{
if (ITEM_CHECKINDEX(item2) == FALSE) return FALSE;
eptitem = CHAR_findEmptyItemBox(meindex);
if (eptitem < 0) return FALSE;
ITEM_setWorkInt(item2, ITEM_WORKCHARAINDEX, meindex);
ITEM_setWorkInt(item2, ITEM_WORKOBJINDEX, -1);
CHAR_setItemIndex(meindex, eptitem, item2);
CHAR_setItemIndex(toindex, itemindex2, -1);
}
if (itemindex1 < 0) itemindex1 = 0;
gold1 = CHAR_getInt(meindex, CHAR_GOLD);
gold1 -= itemindex1;
CHAR_setInt(meindex, CHAR_GOLD, gold1);
gold2 = CHAR_getInt(toindex, CHAR_GOLD);
gold2 += itemindex1;
CHAR_setInt(toindex, CHAR_GOLD, gold2);
}
// 金錢 <-> 金錢
else if ((strcmp(a, "G") == 0) && (strcmp(b, "G") == 0))
{
if (itemindex1 < 0) itemindex1 = 0;
if (itemindex2 < 0) itemindex2 = 0;
gold1 = CHAR_getInt(toindex, CHAR_GOLD);
gold1 = gold1 + itemindex1 - itemindex2;
CHAR_setInt(toindex, CHAR_GOLD, gold1);
gold2 = CHAR_getInt(meindex, CHAR_GOLD);
gold2 = gold2 + itemindex2 - itemindex1;
CHAR_setInt(meindex, CHAR_GOLD, gold2);
}
// 寵物 <-> 寵物
else if ((strcmp(a, "P") == 0) && (strcmp(b, "P") == 0))
{
char category[8];
if ((item1 != -1) && (CHAR_CHECKINDEX(item1) == FALSE)) return FALSE;
if ((item2 != -1) && (CHAR_CHECKINDEX(item2) == FALSE)) return FALSE;
if ((itemindex1 != -1) && (itemindex1 == CHAR_getInt(meindex, CHAR_DEFAULTPET)))
{
int fd;
CHAR_setInt(meindex, CHAR_DEFAULTPET, -1);
fd = getfdFromCharaIndex(meindex);
if (fd != -1){
CHAR_setWorkInt( meindex, CHAR_WORK_PET0_STAT+itemindex1-1, 0);
lssproto_KS_send(fd, itemindex1, 0);
}
}
if ((itemindex2 != -1)&& (itemindex2 == CHAR_getInt(toindex, CHAR_DEFAULTPET)))
{
int tofd;
CHAR_setInt(toindex, CHAR_DEFAULTPET, -1);
tofd = getfdFromCharaIndex(toindex);
if (tofd != -1){
CHAR_setWorkInt( toindex, CHAR_WORK_PET0_STAT+itemindex1-1, 0);
lssproto_KS_send(tofd, itemindex2, 0);
}
}
if (item1 != -1)
CHAR_setWorkInt(item1, CHAR_WORKPLAYERINDEX, toindex);
if (item2 != -1)
CHAR_setWorkInt(item2, CHAR_WORKPLAYERINDEX, meindex);
if (itemindex1 == -1)
itemindex1 = CHAR_getCharPetElement( meindex);
if (itemindex2 == -1)
itemindex2 = CHAR_getCharPetElement( toindex);
CHAR_setCharPet(meindex, itemindex1, item2);
CHAR_setCharPet(toindex, itemindex2, item1);
if ((itemindex1 != -1) && (item1 != -1)) {
CHAR_setChar(item1, CHAR_OWNERCDKEY,
CHAR_getChar(toindex, CHAR_CDKEY));
CHAR_setChar(item1, CHAR_OWNERCHARANAME,
CHAR_getChar(toindex, CHAR_NAME));
CHAR_complianceParameter(item1);
CHAR_setInt(item1, CHAR_PUTPETTIME, 0);
}
if ((itemindex2 != -1) && (item2 != -1)) {
CHAR_setChar(item2, CHAR_OWNERCDKEY,
CHAR_getChar(meindex, CHAR_CDKEY));
CHAR_setChar(item2, CHAR_OWNERCHARANAME,
CHAR_getChar(meindex, CHAR_NAME));
CHAR_complianceParameter(item2);
CHAR_setInt(item2, CHAR_PUTPETTIME, 0);
}
snprintf(category, sizeof(category), "K%d", itemindex1);
CHAR_sendStatusString(meindex, category);
snprintf(category, sizeof(category), "W%d", itemindex1);
CHAR_sendStatusString(meindex, category);
snprintf(category, sizeof(category), "K%d", itemindex2);
CHAR_sendStatusString(toindex, category);
snprintf(category, sizeof(category), "W%d", itemindex2);
CHAR_sendStatusString(toindex, category);
}
return TRUE;
}
*/
BOOL TRADE_HandleItem( int meindex, int showindex, char *message, char *outmess)
{
char token[256];
int item, itemindex;
int fd = getfdFromCharaIndex( meindex );
if( CONNECT_get_confirm( fd) == TRUE ) return FALSE;
if( CHAR_getWorkInt( meindex, CHAR_WORKTRADEMODE) != CHAR_TRADE_TRADING
|| CHAR_getWorkInt( meindex, CHAR_WORKTRADEMODE) == CHAR_TRADE_LOCK )
return FALSE;
if( getStringFromIndexWithDelim( message, "|", 6, token, sizeof( token)) == FALSE) return FALSE;
item = atoi( token);
if( item < CHAR_STARTITEMARRAY || item > CHAR_MAXITEMHAVE ){
return FALSE;
}
itemindex = CHAR_getItemIndex(meindex, item);
if( !ITEM_CHECKINDEX( itemindex)) return FALSE;
{
char itemname[256], tmpbuf[256], tmpbuf1[256];
int crushe;
#ifdef _ITEM_PILEFORTRADE
int nums = 0;
if( TRADE_addSomeTradeList( meindex, item, &nums, TRADE_ITEM) == FALSE ){
return FALSE;
}
#endif
strcpy( itemname, ITEM_getChar(itemindex, ITEM_SECRETNAME));//ITEM_NAME
crushe = ITEM_getItemDamageCrusheED( itemindex);
sprintf( token, "不會損壞");
if( crushe >= 0 ) snprintf( token, sizeof(token), "%d%%", crushe );
#ifdef _ITEM_PILENUMS
sprintf( outmess, "%d|%s|%s|%s|%d|%s|%d",
#else
sprintf( outmess, "%d|%s|%s|%d|%s",
#endif
ITEM_getInt( itemindex, ITEM_BASEIMAGENUMBER),
makeEscapeString( ITEM_getChar( itemindex, ITEM_NAME), tmpbuf1, sizeof(tmpbuf1)),
makeEscapeString( itemname, tmpbuf, sizeof(tmpbuf)),
ITEM_getChar(itemindex,ITEM_EFFECTSTRING), item, token
#ifdef _ITEM_PILEFORTRADE
,nums
#endif
);
}
return TRUE;
}
BOOL TRADE_HandleGold( int meindex, int showindex, char *message, char *outmess)
{
int gold, tmpgold;
char token[256];
int fd = getfdFromCharaIndex( meindex );
if(CONNECT_get_confirm( fd)==TRUE)return FALSE;
if (CHAR_getWorkInt(meindex, CHAR_WORKTRADEMODE) != CHAR_TRADE_TRADING
|| CHAR_getWorkInt(meindex, CHAR_WORKTRADEMODE) == CHAR_TRADE_LOCK)
return FALSE;
tmpgold = CHAR_getInt(meindex, CHAR_GOLD);
if (getStringFromIndexWithDelim(message, "|", 6, token, sizeof(token)) == FALSE) return FALSE;
if( (gold = atoi(token)) < 0 ) return FALSE;
if( gold > tmpgold )return FALSE;
#ifdef _ITEM_PILEFORTRADE
if( TRADE_addSomeTradeList( meindex, gold, NULL, TRADE_GOLD) == FALSE ) return FALSE;
#endif
sprintf( outmess, "%d", gold);
return TRUE;
}
BOOL TRADE_HandlePet( int meindex, int showindex, char *message, char *outmess)
{
int havepetindex, petindex;
char token[256], buf[256];
int fd = getfdFromCharaIndex( meindex );
if(CONNECT_get_confirm( fd)==TRUE)return FALSE;
if (CHAR_getWorkInt(meindex, CHAR_WORKTRADEMODE) != CHAR_TRADE_TRADING
|| CHAR_getWorkInt(meindex, CHAR_WORKTRADEMODE) == CHAR_TRADE_LOCK)
return FALSE;
if (getStringFromIndexWithDelim(message, "|", 6, token, sizeof(token)) == FALSE) return FALSE;
if( (havepetindex = atoi(token)) < 0 ) return FALSE;
petindex = CHAR_getCharPet(meindex, havepetindex);
if( !CHAR_CHECKINDEX(petindex)) return FALSE;
#ifdef _ITEM_PILEFORTRADE
if( TRADE_addSomeTradeList( meindex, havepetindex, NULL, TRADE_PET) == FALSE ) return FALSE;
#endif
sprintf( token, "%d|%s|%d|%d|%d|%d|%d|%d",
CHAR_getInt( petindex, CHAR_BASEIMAGENUMBER),
makeEscapeString( CHAR_getUseName(petindex), buf, sizeof(buf)),
CHAR_getInt( petindex, CHAR_LV),
CHAR_getWorkInt( petindex, CHAR_WORKATTACKPOWER),
CHAR_getWorkInt( petindex, CHAR_WORKDEFENCEPOWER),
CHAR_getWorkInt( petindex, CHAR_WORKQUICK),
havepetindex,
CHAR_getInt( petindex , CHAR_TRANSMIGRATION));
#ifdef _TRADESYSTEM2
{
int i;
char skillname[7][256];
char buf1[256],buf2[256];
for( i=0; i<7; i++){
int skillarray, skillID;
memset( skillname[i], 0, sizeof(skillname[i]));
skillID = CHAR_getPetSkill( petindex, i);
skillarray = PETSKILL_getPetskillArray( skillID);
if( !PETSKILL_CHECKINDEX( skillarray)) continue;
sprintf( skillname[i], "%s", PETSKILL_getChar( skillarray, PETSKILL_NAME) );
}
#ifdef _SHOW_FUSION
sprintf( outmess , "%s|%d|%d|%s|%s|%s|%s|%s|%s|%s|%s|%s|%d",
#else
sprintf( outmess , "%s|%d|%d|%s|%s|%s|%s|%s|%s|%s|%s|%s",
#endif
token , CHAR_getWorkInt(petindex , CHAR_WORKMAXHP) , CHAR_getInt(petindex , CHAR_SLOT),
skillname[0] , skillname[1] , skillname[2] , skillname[3] ,
skillname[4] , skillname[5] , skillname[6] ,
makeEscapeString( CHAR_getChar( petindex, CHAR_NAME ), buf1, sizeof(buf1)),
makeEscapeString( CHAR_getUseName( petindex), buf2, sizeof(buf2))
#ifdef _SHOW_FUSION
,CHAR_getInt ( petindex, CHAR_FUSIONBEIT) ) ;
#else
);
#endif
}
#else
sprintf( outmess , "%s|%d", token , CHAR_getWorkInt(petindex , CHAR_WORKMAXHP) );
#endif //_TRADESYSTEM2
return TRUE;
}
#ifdef _ITEM_PILEFORTRADE
BOOL TRADE_CheckTradeList( int meindex, STradeList *temp1, int toindex, STradeList *temp2)
{
int i;
int MeSurplus=0, MeNeeds=0, MeMaxPile;
int ToSurplus=0, ToNeeds=0, ToMaxPile;
MeMaxPile = CHAR_getMyMaxPilenum( meindex);//最大堆疊數(shù)
ToMaxPile = CHAR_getMyMaxPilenum( toindex);
MeSurplus = CHAR_findSurplusItemBox( meindex);
ToSurplus = CHAR_findSurplusItemBox( toindex);
//道具
ToNeeds=0; MeNeeds=0;
for( i=0; i<15; i++ ){
int pilenum, itemindex;
if( temp1->ItemTi[i] == -1 ) continue;
itemindex = CHAR_getItemIndex( meindex, temp1->ItemTi[i] );
if( !ITEM_CHECKINDEX( itemindex)) return FALSE;
pilenum = ITEM_getInt( itemindex, ITEM_USEPILENUMS);
if( temp1->ItemNum[i] == pilenum ){
MeSurplus++;
}
if( temp1->ItemNum[i] > ToMaxPile ){
ToNeeds += (temp1->ItemNum[i]/ToMaxPile) + 1;
}else{
ToNeeds++;
}
}
for( i=0; i<15; i++ ){
int pilenum, itemindex;
if( temp2->ItemTi[i] == -1 ) continue;
itemindex = CHAR_getItemIndex( toindex, temp2->ItemTi[i] );
if( !ITEM_CHECKINDEX( itemindex)) return FALSE;
pilenum = ITEM_getInt( itemindex, ITEM_USEPILENUMS);
if( temp2->ItemNum[i] == pilenum){
ToSurplus++;
}
if( temp2->ItemNum[i] > MeMaxPile ){
MeNeeds += (temp2->ItemNum[i]/MeMaxPile) + 1;
}else {
MeNeeds++;
}
}
if( MeSurplus < MeNeeds ){
CHAR_talkToCli( meindex, -1, "交易後物品欄位不足。", CHAR_COLORYELLOW);
CHAR_talkToCli( toindex, -1, "對方交易後物品欄位不足。", CHAR_COLORYELLOW);
return FALSE;
}
if( ToSurplus < ToNeeds ){
CHAR_talkToCli( toindex, -1, "交易後物品欄位不足。", CHAR_COLORYELLOW);
CHAR_talkToCli( meindex, -1, "對方交易後物品欄位不足。", CHAR_COLORYELLOW);
return FALSE;
}
//寵物
MeSurplus = CHAR_findSurplusPetBox( meindex);
ToSurplus = CHAR_findSurplusPetBox( toindex);
ToNeeds=0; MeNeeds=0;
for( i=0; i<5; i++ ){
int petindex;
if( temp1->PetTi[i] == -1 ) continue;
petindex = CHAR_getCharPet( meindex, temp1->PetTi[i] );
if( !CHAR_CHECKINDEX( petindex)) return FALSE;
MeSurplus++;
ToNeeds++;
}
for( i=0; i<5; i++ ){
int petindex;
if( temp2->PetTi[i] == -1 ) continue;
petindex = CHAR_getCharPet( toindex, temp2->PetTi[i] );
if( !CHAR_CHECKINDEX( petindex)) return FALSE;
ToSurplus++;
MeNeeds++;
}
if( MeSurplus < MeNeeds ){
CHAR_talkToCli( meindex, -1, "交易後寵物欄位不足。", CHAR_COLORYELLOW);
CHAR_talkToCli( toindex, -1, "對方交易後寵物欄位不足。", CHAR_COLORYELLOW);
return FALSE;
}
if( ToSurplus < ToNeeds ){
CHAR_talkToCli( meindex, -1, "對方交易後寵物欄位不足。", CHAR_COLORYELLOW);
CHAR_talkToCli( toindex, -1, "交易後寵物欄位不足。", CHAR_COLORYELLOW);
return FALSE;
}
//金錢
MeMaxPile = CHAR_getMaxHaveGold( meindex);
ToMaxPile = CHAR_getMaxHaveGold( toindex);
MeSurplus = MeMaxPile - CHAR_getInt( meindex, CHAR_GOLD);
ToSurplus = ToMaxPile - CHAR_getInt( toindex, CHAR_GOLD);
ToNeeds=0; MeNeeds=0;
MeSurplus += temp1->Golds;
ToSurplus += temp2->Golds;
ToNeeds = temp1->Golds;
MeNeeds = temp2->Golds;
if( MeSurplus < MeNeeds ){
CHAR_talkToCli( meindex, -1, "交易後石幣超過上限。", CHAR_COLORYELLOW);
CHAR_talkToCli( toindex, -1, "對方交易後石幣超過上限。", CHAR_COLORYELLOW);
return FALSE;
}
if( ToSurplus < ToNeeds ){
CHAR_talkToCli( meindex, -1, "對方交易後石幣超過上限。", CHAR_COLORYELLOW);
CHAR_talkToCli( toindex, -1, "交易後石幣超過上限。", CHAR_COLORYELLOW);
return FALSE;
}
return TRUE;
}
#endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -