?? char_party.c
字號:
char msgbuf[1024];
char escapebuf[2048];
#ifdef _DEATH_CONTEND
int toindex = CONNECT_getJoinpartycharaindex( fd, 0);
if(CHAR_getInt(toindex,CHAR_PKLISTTEAMNUM) == -1 && CHAR_getInt(charaindex,CHAR_PKLISTTEAMNUM) == -1){
}else if( CHAR_getInt( charaindex, CHAR_PKLISTLEADER ) > 0 ||
CHAR_getInt( toindex, CHAR_PKLISTTEAMNUM) < 0 ||
CHAR_getInt( charaindex, CHAR_PKLISTTEAMNUM) < 0 ||
CHAR_getInt( toindex, CHAR_PKLISTTEAMNUM) != CHAR_getInt( charaindex, CHAR_PKLISTTEAMNUM) ||
CHAR_getInt(toindex,CHAR_WHICHTYPE) != CHAR_TYPEPLAYER){
CHAR_talkToCli( charaindex, -1, "隊伍不同,無法加入團隊。", CHAR_COLORYELLOW);
result = FALSE;
}
#endif
strcpy( msgbuf, "1\n和誰組成團隊呢?\n");
strlength = strlen( msgbuf);
for( i = 0;
CONNECT_getJoinpartycharaindex( fd,i ) != -1
&& i< CONNECT_WINDOWBUFSIZE;
i ++ ){
char *a = CHAR_getChar(
CONNECT_getJoinpartycharaindex(fd,i) , CHAR_NAME);
char buf[256];
snprintf( buf, sizeof( buf),"%s\n", a);
if( strlength + strlen( buf) > arraysizeof( msgbuf)){
print( "%s:%d視窗訊息buffer不足。\n",
__FILE__,__LINE__);
break;
}
strcpy( &msgbuf[strlength], buf);
strlength += strlen(buf);
}
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_SELECT,
WINDOW_BUTTONTYPE_CANCEL,
CHAR_WINDOWTYPE_SELECTPARTY,
-1,
makeEscapeString( msgbuf, escapebuf, sizeof(escapebuf)));
}
if( result != -1 ) {
lssproto_PR_send( fd, 1, result);
}
return result;
}
static BOOL CHAR_DischargePartySub( int charaindex, int msgflg)
{
char buf[64], c[3];
int toindex,flg,i;
#ifdef _ITEM_QUITPARTY
int j = 0,k;
#endif
if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_LEADER ) {
int pindex, airplaneflag=0;
// Arminius 7.10 Airplane
if( CHAR_getInt(charaindex, CHAR_WHICHTYPE) == CHAR_TYPEBUS ) {
if ((CHAR_getInt(charaindex, CHAR_BASEIMAGENUMBER) !=100355) &&
(CHAR_getInt(charaindex, CHAR_BASEIMAGENUMBER) !=100461)){
airplaneflag=1;
}
}
for( i = 0; i < CHAR_PARTYMAX; i ++ ) {
pindex = CHAR_getWorkInt( charaindex, i + CHAR_WORKPARTYINDEX1);
if( CHAR_CHECKINDEX( pindex) ) {
int fd = getfdFromCharaIndex( pindex );
CHAR_setWorkInt( pindex, CHAR_WORKPARTYINDEX1, -1);
CHAR_setWorkInt( pindex, CHAR_WORKPARTYMODE, CHAR_PARTY_NONE);
if( msgflg ){
CHAR_talkToCli( pindex, -1, "團隊已解散!", CHAR_COLORYELLOW);
#ifdef _ITEM_QUITPARTY
// won fix
for( j=0;j<CHAR_MAXITEMHAVE;j++ ){
int del_item_index = CHAR_getItemIndex( pindex , j );
if( ITEM_CHECKINDEX(del_item_index) ){ //格子內有道具
for( k=0;k<itemquitparty_num;k++ ){
if( ITEM_getInt( del_item_index, ITEM_ID) == atoi(Disappear_Item[k].string) ){ //若等於所設定的道具ID
CHAR_setItemIndex( pindex, j, -1); //格子內道具消失
ITEM_endExistItemsOne( del_item_index );
CHAR_sendItemDataOne( pindex, j);
}
}
}
}
#endif
}
if( fd != -1 ) {
lssproto_PR_send( fd, 0, 1);
}
// Arminius 7.10 Airplane
if (airplaneflag && (CHAR_getInt(pindex,CHAR_WHICHTYPE)!=CHAR_TYPEBUS)) {
int bi,bbi,ii,category;
bbi=CHAR_getInt(pindex,CHAR_BASEBASEIMAGENUMBER);
ii=CHAR_getItemIndex(pindex,CHAR_ARM);
if (!ITEM_CHECKINDEX(ii))
category=ITEM_FIST;
else
category=ITEM_getInt(ii,ITEM_TYPE);
bi=CHAR_getNewImagenumberFromEquip(bbi,category);
if (bi==-1) bi=bbi;
CHAR_setInt(pindex,CHAR_BASEIMAGENUMBER,bi);
// Robin 0810 debug
CHAR_complianceParameter( pindex );
CHAR_sendCToArroundCharacter(CHAR_getWorkInt(pindex ,
CHAR_WORKOBJINDEX));
}
}
CHAR_setWorkInt( charaindex, i + CHAR_WORKPARTYINDEX1, -1);
}
CHAR_sendLeader( CHAR_getWorkInt( charaindex, CHAR_WORKOBJINDEX), 0);
}else if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_CLIENT ) {
int myarray = -1;
int fd = getfdFromCharaIndex( charaindex );
CHAR_setWorkInt( charaindex, CHAR_WORKPARTYMODE, CHAR_PARTY_NONE);
toindex = CHAR_getWorkInt( charaindex, CHAR_WORKPARTYINDEX1);
if( !CHAR_CHECKINDEX(toindex ) ) return FALSE;
if( CHAR_getInt( toindex, CHAR_WHICHTYPE) == CHAR_TYPEBUS ) {
NPC_BusCheckAllowItem( toindex, charaindex, TRUE);
// Arminius 7.9 Airplane
if ((CHAR_getInt( toindex, CHAR_BASEIMAGENUMBER) !=100355) &&
(CHAR_getInt( toindex, CHAR_BASEIMAGENUMBER) !=100461)){
int bi,bbi,ii,category;
bbi=CHAR_getInt(charaindex,CHAR_BASEBASEIMAGENUMBER);
ii=CHAR_getItemIndex(charaindex,CHAR_ARM);
if (!ITEM_CHECKINDEX(ii))
category=ITEM_FIST;
else
category=ITEM_getInt(ii,ITEM_TYPE);
bi=CHAR_getNewImagenumberFromEquip(bbi,category);
if (bi==-1) bi=bbi;
CHAR_setInt(charaindex,CHAR_BASEIMAGENUMBER,bi);
// Robin 0810 debug
CHAR_complianceParameter( charaindex );
CHAR_sendCToArroundCharacter( CHAR_getWorkInt( charaindex , CHAR_WORKOBJINDEX ));
if(CHAR_getWorkInt(toindex,CHAR_NPCWORKINT5)==1) {
if( CHAR_getInt( charaindex, CHAR_LASTTALKELDER)>=0){
int fl,x,y;
CHAR_getElderPosition( CHAR_getInt( charaindex, CHAR_LASTTALKELDER),
&fl, &x, &y );
CHAR_warpToSpecificPoint(charaindex, fl, x, y);
}
}
}
}
CHAR_setWorkInt( charaindex, CHAR_WORKPARTYINDEX1, -1);
for( i = 0; i < CHAR_PARTYMAX; i ++ ) {
int index = CHAR_getWorkInt( toindex, i + CHAR_WORKPARTYINDEX1);
if( CHAR_CHECKINDEX(index) ){
if( index == charaindex) {
myarray = i;
break;
}
}
}
if( myarray == CHAR_PARTYMAX) {
print( "DischargeParty(): 真奇怪!");
return FALSE;
}
CHAR_setWorkInt( toindex, CHAR_WORKPARTYINDEX1 + myarray, -1);
snprintf( buf,sizeof( buf), "%s 脫離團隊!",
CHAR_getChar( charaindex, CHAR_NAME));
if( msgflg ){
CHAR_talkToCli( charaindex, -1, "脫離團隊!", CHAR_COLORYELLOW);
#ifdef _ITEM_QUITPARTY
// won fix
for( i=0;i<CHAR_MAXITEMHAVE;i++ ){
int del_item_index = CHAR_getItemIndex( charaindex , j );
if( ITEM_CHECKINDEX(del_item_index) ){ //格子內有道具
for( j=0;j<itemquitparty_num;j++ ){
if( ITEM_getInt( del_item_index, ITEM_ID) == atoi(Disappear_Item[j].string) ){ //若等於所設定的道具ID
CHAR_setItemIndex( charaindex, i, -1); //格子內道具消失
ITEM_endExistItemsOne( del_item_index );
CHAR_sendItemDataOne( charaindex, i);
}
}
}
}
#endif
}
snprintf( c, sizeof(c), "N%d", myarray);
if( fd != -1 ) {
lssproto_PR_send( fd, 0, 1);
}
for( i = 0; i < CHAR_PARTYMAX; i ++ ) {
int index = CHAR_getWorkInt( toindex, i + CHAR_WORKPARTYINDEX1);
if( CHAR_CHECKINDEX(index) ){
#ifdef _ITEM_QUITPARTY
// won fix
for( j=0;j<CHAR_MAXITEMHAVE;j++ ){
int del_item_index = CHAR_getItemIndex( index , j );
if( ITEM_CHECKINDEX(del_item_index) ){ //格子內有道具
for( k=0;k<itemquitparty_num;k++ ){
if( ITEM_getInt( del_item_index, ITEM_ID) == atoi(Disappear_Item[k].string) ){ //若等於所設定的道具ID
CHAR_setItemIndex( index, j, -1); //格子內道具消失
ITEM_endExistItemsOne( del_item_index );
CHAR_sendItemDataOne( index, j);
}
}
}
}
#endif
if( msgflg ){
CHAR_talkToCli( index, -1, buf, CHAR_COLORYELLOW);
}
CHAR_sendStatusString( index, c);
}
}
flg = FALSE;
for( i = 1; i < CHAR_PARTYMAX; i ++ ) {
int index = CHAR_getWorkInt( toindex, i + CHAR_WORKPARTYINDEX1);
if( CHAR_CHECKINDEX(index) ){
flg = TRUE;
break;
}
}
if( !flg) {
CHAR_setWorkInt( toindex, CHAR_WORKPARTYMODE, CHAR_PARTY_NONE);
CHAR_sendLeader( CHAR_getWorkInt( toindex, CHAR_WORKOBJINDEX), 0);
}else {
POINT start,end;
int previndex = toindex;
end.x = CHAR_getInt( charaindex, CHAR_X);
end.y = CHAR_getInt( charaindex, CHAR_Y);
for( i = 1; i < CHAR_PARTYMAX; i ++ ) {
int index = CHAR_getWorkInt( toindex, i + CHAR_WORKPARTYINDEX1);
if( CHAR_CHECKINDEX( index) ) {
if( NPC_Util_CharDistance( index, previndex) > 1) {
int parent_dir;
start.x = CHAR_getInt( index, CHAR_X);
start.y = CHAR_getInt( index, CHAR_Y);
parent_dir = NPC_Util_getDirFromTwoPoint( &start,&end );
end = start;
if( parent_dir != -1 ) {
CHAR_walk( index, parent_dir, 0);
}
}
previndex = index;
}
}
}
}
return TRUE;
}
BOOL CHAR_DischargeParty( int charaindex, int flg)
{
return CHAR_DischargePartySub( charaindex, 1);
}
BOOL CHAR_DischargePartyNoMsg( int charaindex)
{
return CHAR_DischargePartySub( charaindex, 0);
}
/*------------------------------------------------------------
* 憤坌互伉□母□井升丹井毛霜耨允月[
------------------------------------------------------------*/
void CHAR_sendLeader( int objindex, int leader)
{
int opt[1];
opt[0] = leader;
CHAR_sendWatchEvent( objindex,CHAR_ACTLEADER,opt,1,TRUE);
}
/*------------------------------------------------------------
* 醮棉毛賜 CHAR_WORKPARTYINDEX)隙爛匹平乓仿index毛婁勻艦月[
* 憤坌互褪匹手閡匹手 [
------------------------------------------------------------*/
int CHAR_getPartyIndex( int index, int num)
{
int nindex = -1;
/* 醮棉及奶件犯永弁旦毛潸 */
/* 褪及樺寧 */
if( CHAR_getWorkInt( index, CHAR_WORKPARTYMODE) == CHAR_PARTY_LEADER ) {
nindex = CHAR_getWorkInt( index, CHAR_WORKPARTYINDEX1 + num );
}
/* 閡及樺寧 */
else {
int oyaindex = CHAR_getWorkInt( index, CHAR_WORKPARTYINDEX1);
if( CHAR_CHECKINDEX( oyaindex)) {
nindex = CHAR_getWorkInt( oyaindex, CHAR_WORKPARTYINDEX1+num);
}
}
return nindex;
}
/*------------------------------------------------------------
* 丟永本□斥毛霜耨允月[
* 醮棉互中木壬公及醮棉卞手丟永本□斥毛霜耨允月[
------------------------------------------------------------*/
void CHAR_talkToCliAndParty( int talkedcharaindex,int talkcharaindex,
char* message, CHAR_COLOR color )
{
int i;
/* 引內憤坌 */
CHAR_talkToCli( talkedcharaindex, talkcharaindex, message, color);
for( i = 0; i < CHAR_PARTYMAX; i ++ ) {
int index = CHAR_getPartyIndex( talkedcharaindex, i);
if( CHAR_CHECKINDEX( index) &&
index != talkedcharaindex)
{
CHAR_talkToCli( index, talkcharaindex, message, color);
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -