?? npc_newnpcman.c
字號(hào):
NPC_NEWNPCMAN_START=21,
NPC_NEWNPCMAN_MAN,
NPC_NEWNPCMAN_END,
};
enum {
NEWNPC_START = 1,
NEWNPC_MAN,
NEWNPC_END,
};
enum {
NPC_WORK_INDEX = CHAR_NPCWORKINT1,
NPC_WORK_WORKTYPE = CHAR_NPCWORKINT2,
NPC_WORK_CURRENTTIME = CHAR_NPCWORKINT3,
};
BOOL CHECK_YEARPET( int toindex);
static void NPC_NewNpcMan_selectWindow( int meindex, int toindex, int num, int flg);
int NPC_NewNpcManDelPet(int meindex,int talker, int petsel);
BOOL NPC_NewNpcManAddPet(int meindex, int talker, int petid);
//可換四種寵
static int Re_Pet[4];
// shan
char uStr[128]="";
BOOL NPC_NewNpcManInit( int meindex )
{
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
char buf1[256],buf2[256];
int k=1;
if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg)) == NULL) {
print("GambleBank:GetArgStrErr");
return FALSE;
}
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "REPET", buf1, sizeof( buf1)) == NULL ) {
return FALSE;
}
while( getStringFromIndexWithDelim(buf1, ",", k, buf2, sizeof(buf2)) != FALSE ) {
Re_Pet[k-1] = atoi( buf2);
if( Re_Pet[k-1] < 0 )
return FALSE;
k++;
if( (k-1) >= arraysizeof( Re_Pet) )
break;
}
CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_NEWNPCMAN );
CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NEWNPCMAN_STANDBY);
CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);
CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
return TRUE;
}
void NPC_NewNpcManLoop( int meindex)
{
//test
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
char buf1[256],buf2[256];
int k=1;
int fulltime = NEWNPCMAN_WAITTIME;
if( (CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) + fulltime) > NowTime.tv_sec )
return;
CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);
//test
if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg)) == NULL) {
print("GambleBank:GetArgStrErr");
return;
}
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "REPET", buf1, sizeof( buf1)) == NULL ) {
return;
}
while( getStringFromIndexWithDelim(buf1, ",", k, buf2, sizeof(buf2)) != FALSE ) {
Re_Pet[k-1] = atoi( buf2);
if( Re_Pet[k-1] < 0 )
return;
k++;
if( (k-1) >= arraysizeof( Re_Pet) )
break;
}
//test end
}
void NPC_NewNpcManTalked( int meindex , int talkerindex , char *msg , int color )
{
char buf1[256];
if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) {
return;
}
if(NPC_Util_isFaceToFace( meindex ,talkerindex , 2) == FALSE) {
if(NPC_Util_isFaceToChara( talkerindex, meindex, 1) == FALSE) return;
}
if( CHAR_getWorkInt( meindex , NPC_WORK_INDEX) >= 0 ) {
sprintf( buf1,"%s","我正忙著呢!");
print("\n NPC_WORK_INDEX = %d ", CHAR_getWorkInt( meindex , NPC_WORK_INDEX));
CHAR_talkToCli( talkerindex, meindex, buf1, CHAR_COLORYELLOW);
return;
}else {
CHAR_setWorkInt( meindex , NPC_WORK_INDEX, talkerindex);
print("\n start : NPC_WORK_INDEX = talkerindex");
CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);
NPC_NewNpcMan_selectWindow( meindex, talkerindex, NEWNPC_START, 0);
}
}
static void NPC_NewNpcMan_selectWindow( int meindex, int toindex, int num, int flg)
{
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
char token[256];
char token_str[][56]={"ERROR_MSG","START_MSG","END_MSG","ERROR_ALL"};
int buttontype = 0, windowtype = 0, windowno = 0;
int fd = getfdFromCharaIndex( toindex);
int petno = 718, petid =1479;
int type_str = 0;
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg)) == NULL) {
print("GambleBank:GetArgStrErr");
CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
return ;
}
if( CHAR_getWorkInt( meindex , NPC_WORK_INDEX) != toindex ) {
sprintf( token,"%s","我正忙著呢!");
CHAR_talkToCli( toindex, meindex, token, CHAR_COLORYELLOW);
return;
}
CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);
print("\n switch( num=%d)", num);
switch( num) {
case NEWNPC_START:
type_str = 1;
buttontype = WINDOW_BUTTONTYPE_OKCANCEL;
windowno = NPC_NEWNPCMAN_START;
break;
case NEWNPC_MAN:
{
if( CHECK_YEARPET( toindex) == TRUE ) {
type_str = 1;
windowtype = WINDOW_MESSAGETYPE_PETSELECT;
buttontype = WINDOW_BUTTONTYPE_CANCEL;
windowno = NPC_NEWNPCMAN_MAN;
}else {
type_str = 3;
buttontype = WINDOW_BUTTONTYPE_OK;
windowno = NPC_NEWNPCMAN_END;
CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
}
}
break;
case NEWNPC_END:
type_str = 0;
if( flg <= CHAR_MAXPETHAVE && flg >= 0 ) {
petno = flg;
if( ( petid = NPC_NewNpcManDelPet( meindex, toindex, petno)) >= 0 ) {
if( NPC_NewNpcManAddPet( meindex, toindex, petid) == TRUE ) {
type_str = 2;
}
}
}
CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
buttontype = WINDOW_BUTTONTYPE_OK;
windowno = NPC_NEWNPCMAN_END;
break;
}
if(NPC_Util_GetStrFromStrWithDelim( npcarg, token_str[ type_str], token,sizeof( token) ) == NULL) {
print("token_str[%d] err !", type_str);
CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
return;
}
lssproto_WN_send( fd, windowtype, buttontype, windowno,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token);
}
void NPC_NewNpcManWindowTalked( int meindex, int talkerindex, int seqno, int select, char *data)
{
if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) {
return;
}
if(NPC_Util_isFaceToFace( meindex ,talkerindex , 2) == FALSE) {
if(NPC_Util_isFaceToChara( talkerindex, meindex, 1) == FALSE) return;
}
print("\n seqno=%d, select=%d", seqno, select);
switch( seqno) {
case NPC_NEWNPCMAN_START:
if( select != WINDOW_BUTTONTYPE_YES && select != WINDOW_BUTTONTYPE_OK ) {
CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
return;
}
if(select==WINDOW_BUTTONTYPE_CANCEL) {
CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
}else {
NPC_NewNpcMan_selectWindow( meindex, talkerindex, NEWNPC_MAN, -1);
}
break;
case NPC_NEWNPCMAN_MAN:
{
int petnum;
petnum = atoi( data)-1;
print("\n petnum=%d", petnum);
if(select==WINDOW_BUTTONTYPE_CANCEL) {
CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);
}else {
NPC_NewNpcMan_selectWindow( meindex, talkerindex, NEWNPC_END, petnum);
}
}
break;
case NPC_NEWNPCMAN_END:
break;
}
}
int NPC_NewNpcManDelPet(int meindex,int talker, int petsel)
{
int defpet;
int fd = getfdFromCharaIndex( talker );
char msgbuf[64], szPet[128];
int k=0;
int petindex=-1;
petindex = CHAR_getCharPet( talker, petsel);
if( !CHAR_CHECKINDEX(petindex) )
return -1;
for( k=0;k<arraysizeof( Re_Pet); k++) {
if( CHAR_getInt( petindex, CHAR_PETID) == Re_Pet[k] )
break;
}
if( k == arraysizeof( Re_Pet) ) {
return -1;
}else {
print("\n FIND [%d,%d] & DEL !!", k, Re_Pet[k]);
}
if( CHAR_getWorkInt( CONNECT_getCharaindex( fd), CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE )
return -1;
defpet = CHAR_getInt( talker, CHAR_DEFAULTPET);
if(defpet == petsel) {
CHAR_setInt( talker, CHAR_DEFAULTPET, -1);
lssproto_KS_send( fd, -1, TRUE);
}
snprintf( msgbuf,sizeof( msgbuf), "交出%s。", CHAR_getChar( petindex, CHAR_NAME));
// shan
if(CHAR_getChar( petindex, CHAR_UNIQUECODE)!=NULL){
strncpy(uStr, CHAR_getChar( petindex, CHAR_UNIQUECODE), sizeof( STRING32));
}else{
strncpy(uStr, "Pet_Unicode_null", sizeof( STRING32));
}
CHAR_talkToCli( talker, -1, msgbuf, CHAR_COLORWHITE);
LogPet(
CHAR_getChar( talker, CHAR_NAME ),
CHAR_getChar( talker, CHAR_CDKEY ),
CHAR_getChar( petindex, CHAR_NAME),
CHAR_getInt( petindex, CHAR_LV),
"TenseiDel",
CHAR_getInt( talker,CHAR_FLOOR),
CHAR_getInt( talker,CHAR_X ),
CHAR_getInt( talker,CHAR_Y ),
CHAR_getChar( petindex, CHAR_UNIQUECODE)
);
CHAR_setCharPet( talker, petsel, -1);
CHAR_endCharOneArray( petindex );
snprintf( szPet, sizeof( szPet ), "K%d", petsel);
CHAR_sendStatusString( talker, szPet );
return Re_Pet[k];
}
BOOL NPC_NewNpcManAddPet(int meindex, int talker, int petid)
{
int ret;
char msgbuf[64];
int enemynum;
int i,j;
int petindex, petindex2;
//檢查寵物欄是否有空位
for( i = 0 ;i < CHAR_MAXPETHAVE ; i++) {
petindex = CHAR_getCharPet( talker, i);
if( petindex == -1 )
break;
}
if( i == CHAR_MAXPETHAVE ) {
snprintf( msgbuf,sizeof( msgbuf), "寵物已滿!!");
CHAR_talkToCli( talker, -1, msgbuf, CHAR_COLORWHITE);
return FALSE;
}
enemynum = ENEMY_getEnemyNum();
for( i = 0; i < enemynum; i ++ ) {
//if( ENEMY_getInt( i, ENEMY_ID ) == petid )
if( ENEMY_getInt( i, ENEMY_TEMPNO ) == petid ) {
print("\n ADD FIND [%d,%d]", i, ENEMY_getInt( i, ENEMY_TEMPNO ));
break;
}
}
if( i == enemynum )
return FALSE;
ret = ENEMY_createPetFromEnemyIndex( talker, i);
for( i = 0; i < CHAR_MAXPETHAVE; i ++ ) {
if( CHAR_getCharPet( talker, i ) == ret )
break;
}
if( i == CHAR_MAXPETHAVE )
i = 0;
if( CHAR_CHECKINDEX( ret ) == TRUE ){
CHAR_setMaxExpFromLevel( ret, CHAR_getInt( ret, CHAR_LV ));
}
petindex2 = CHAR_getCharPet(talker, i);
if( !CHAR_CHECKINDEX( petindex2) )
return FALSE;
snprintf( msgbuf,sizeof( msgbuf), "拿到%s。", CHAR_getChar(petindex2,CHAR_NAME));
CHAR_talkToCli( talker, -1, msgbuf, CHAR_COLORWHITE);
for(j = 0; j < CHAR_MAXPETHAVE; j++){
petindex = CHAR_getCharPet(talker, j);
if( !CHAR_CHECKINDEX( petindex) )
continue;
CHAR_complianceParameter( petindex );
snprintf( msgbuf, sizeof( msgbuf ), "K%d", j );
CHAR_sendStatusString( talker, msgbuf );
snprintf( msgbuf, sizeof( msgbuf ), "W%d", j );
CHAR_sendStatusString( talker, msgbuf );
}
// shan
CHAR_setChar(petindex2, CHAR_UNIQUECODE, uStr);
LogPet(
CHAR_getChar( talker, CHAR_NAME ),
CHAR_getChar( talker, CHAR_CDKEY ),
CHAR_getChar( petindex2, CHAR_NAME),
CHAR_getInt( petindex2, CHAR_LV),
"TenseiGet",
CHAR_getInt( talker,CHAR_FLOOR),
CHAR_getInt( talker,CHAR_X ),
CHAR_getInt( talker,CHAR_Y ),
CHAR_getChar( petindex2, CHAR_UNIQUECODE)
);
return TRUE;
}
BOOL CHECK_YEARPET( int toindex)
{
int i,k,petindex=-1;
for( i=0;i<CHAR_MAXPETHAVE;i++) {
petindex = CHAR_getCharPet( toindex, i);
if( !CHAR_CHECKINDEX(petindex) )
continue;
for( k=0;k<arraysizeof( Re_Pet); k++) {
if( CHAR_getInt( petindex, CHAR_PETID) == Re_Pet[k] ) {
print("\n check yearpet find it");
return TRUE;
}
}
}
return FALSE;
}
#endif
*/
#endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -