📄 npc_petshop.c
字号:
if( !CHAR_CHECKINDEX( petindex) ) return;
emptyindex = CHAR_getCharPetElement( talker);
if( emptyindex == -1 ) {
fprint( "err\n");
return;
}
// 如果是守护兽改为普通兽
if( CHAR_getInt( petindex, CHAR_PETFAMILY) == 1
&& CHAR_getInt( talker, CHAR_FMLEADERFLAG) != 3 ) {
CHAR_setInt( petindex, CHAR_PETFAMILY, 0);
CHAR_talkToCli( talker, -1, "守护兽改为普通兽", CHAR_COLORYELLOW);
}
CHAR_setCharPet( talker, emptyindex, petindex);
CHAR_setCharPoolPet( talker, selectpet, -1);
NPC_MaxGoldOver( meindex, talker, NPC_PETSHOP_MSG_POOLTHANKS, token);
snprintf( szPet, sizeof( szPet ), "K%d", emptyindex);
CHAR_sendStatusString( talker, szPet );
snprintf( szPet, sizeof( szPet), "W%d",emptyindex);
CHAR_sendStatusString( talker, szPet );
for( i = 0; i < CHAR_MAXPOOLPETHAVE; i ++ ) {
workindex[i] = -1;
}
cnt = 0;
for( i = 0; i < CHAR_MAXPOOLPETHAVE; i ++ ) {
int petindex = CHAR_getCharPoolPet( talker, i);
if( CHAR_CHECKINDEX( petindex) ) {
workindex[cnt++] = petindex;
}
}
for( i = 0; i < CHAR_MAXPOOLPETHAVE; i ++ ) {
CHAR_setCharPoolPet( talker, i, workindex[i]);
}
LogPet(
CHAR_getChar( talker, CHAR_NAME ),
CHAR_getChar( talker, CHAR_CDKEY ),
CHAR_getChar( petindex, CHAR_NAME),
CHAR_getInt( petindex, CHAR_LV),
"draw(领取宠物店)",
CHAR_getInt( talker,CHAR_FLOOR),
CHAR_getInt( talker,CHAR_X ),
CHAR_getInt( talker,CHAR_Y ),
CHAR_getChar( petindex, CHAR_UNIQUECODE) // shan 2001/12/14
);
#ifdef _PET_EVOLUTION
if( CHAR_getInt( petindex, CHAR_FUSIONBEIT) == 1 &&
CHAR_getInt( petindex, CHAR_FUSIONRAISE) > 0 ){//检查是否为融合宠
CHAR_setInt( petindex, CHAR_FUSIONTIMELIMIT, (int)time( NULL));
}
#endif
}
void NPC_getDrawPet( int meindex, int toindex, char *token, int *buttontype, int select)
{
// ㄠ矢□斥丐凶曰及垫醒
#define LINENUM 5
char buf[1024];
int i;
int startnum, endnum;
int petindex = -1;
// 蜇箕及矢□斥
int page = CHAR_getWorkInt( toindex, CHAR_WORKSHOPRELEVANT);
int limit;
//andy_reEdit 2003/09/18
limit = (CHAR_getInt(toindex,CHAR_TRANSMIGRATION)*2)+5;
endnum = (page + select+1)*LINENUM ;
startnum = endnum - LINENUM;
*buttontype = WINDOW_BUTTONTYPE_CANCEL;
// 羹矢□斥譬帮[
if( endnum >= limit ) {
endnum = limit;
if( page +select!= 0 ) *buttontype |= WINDOW_BUTTONTYPE_PREV;
}
else if( endnum <= LINENUM ) {
endnum = LINENUM;
*buttontype |= WINDOW_BUTTONTYPE_NEXT;
}
else {
*buttontype |= WINDOW_BUTTONTYPE_PREV | WINDOW_BUTTONTYPE_NEXT;
}
CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, page +select);
strcpy( token, "2\n亖亖亖 请选择宠物 亖亖亖\n\n");
for( i = startnum; i < endnum; i ++ ) {
petindex = CHAR_getCharPoolPet( toindex, i);
if( CHAR_CHECKINDEX( petindex) ) {
snprintf( buf, sizeof( buf), "LV.%3d MaxHP %3d %s\n",
CHAR_getInt( petindex, CHAR_LV),
CHAR_getWorkInt( petindex, CHAR_WORKMAXHP),
CHAR_getUseName( petindex)
);
}
else {
strcpy( buf, "\n");
}
strcat( token, buf);
}
// 戚及域蜊毛譬屯化] 井匀凶日戚尺示正件毛潸月
if( i != limit ) {
petindex = CHAR_getCharPoolPet( toindex, i);
if( !CHAR_CHECKINDEX( petindex)) {
*buttontype &= ~WINDOW_BUTTONTYPE_NEXT;
}
}
}
/*
*云嗯互左□田□公及职中欠中欠
*/
void NPC_MaxGoldOver(int meindex,int toindex,int select,char *token)
{
char buf[1024];
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg));
if( select < 0 || select >= arraysizeof( shopmsg)) return;
if( NPC_Util_GetStrFromStrWithDelim( npcarg, shopmsg[select].option, buf, sizeof( buf))
== NULL )
{
strcpy( buf, shopmsg[select].defaultmsg);
}
snprintf(token,sizeof(buf),"\n\n%s",buf);
}
#ifdef _NPC_DEPOTPET
void NPC_PoolPetShop_DepotPet_Menu( int meindex, int talkerindex)
{
int fd;
//print(" NPC_PoolPetShop_DepotPet_Menu ");
fd = getfdFromCharaIndex( talkerindex);
if( fd != -1 ) {
char message[1024];
char buf[2048];
strcpy( message,
"3\n\n"
" 使用宠物仓库\n\n"
" <存放宠物>\n"
" <取回宠物>\n"
);
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_SELECT,
WINDOW_BUTTONTYPE_CANCEL,
CHAR_WINDOWTYPE_DEPOTPETSHOP_HANDLE,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
makeEscapeString( message, buf, sizeof(buf)));
}
}
void NPC_DepotPet_List( int meindex, int toindex, char *token, int *buttontype, int select)
{
// ㄠ矢□斥丐凶曰及垫醒
#define LINENUM 5
char buf[1024];
int i;
int startnum, endnum;
int petindex = -1;
// 蜇箕及矢□斥
int page = CHAR_getWorkInt( toindex, CHAR_WORKSHOPRELEVANT);
int limit;
limit = CHAR_MAXDEPOTPETHAVE;
endnum = (page + select+1)*LINENUM ;
startnum = endnum - LINENUM;
*buttontype = WINDOW_BUTTONTYPE_CANCEL;
// 羹矢□斥譬帮[
if( endnum >= limit ) {
endnum = limit;
if( page +select!= 0 ) *buttontype |= WINDOW_BUTTONTYPE_PREV;
}
else if( endnum <= LINENUM ) {
endnum = LINENUM;
*buttontype |= WINDOW_BUTTONTYPE_NEXT;
}
else {
*buttontype |= WINDOW_BUTTONTYPE_PREV | WINDOW_BUTTONTYPE_NEXT;
}
CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, page +select);
strcpy( token, "2\n亖亖亖 请选择要从仓库取出的宠物 亖亖亖\n\n");
for( i = startnum; i < endnum; i ++ ) {
petindex = CHAR_getDepotPetIndex( toindex, i);
if( CHAR_CHECKINDEX( petindex) ) {
snprintf( buf, sizeof( buf), "LV.%3d MaxHP %3d %s\n",
CHAR_getInt( petindex, CHAR_LV),
CHAR_getWorkInt( petindex, CHAR_WORKMAXHP),
CHAR_getUseName( petindex)
);
}
else {
strcpy( buf, "\n");
}
strcat( token, buf);
}
// 戚及域蜊毛譬屯化] 井匀凶日戚尺示正件毛潸月
if( i != limit ) {
petindex = CHAR_getDepotPetIndex( toindex, i);
if( !CHAR_CHECKINDEX( petindex)) {
*buttontype &= ~WINDOW_BUTTONTYPE_NEXT;
}
}
//print("\n DepotPet_List:%s ", token);
}
void NPC_DepotPet_Add( int meindex, int talker, int select, char *token)
{
int petindex;
int selectpet;
int emptyindex;
char szPet[128];
int fd = getfdFromCharaIndex( talker );
if( fd == -1 ) {
fprint( "err\n");
return;
}
// 矢永玄犯□正 凳[矢永玄 仃 木
selectpet = CHAR_getWorkInt( talker, CHAR_WORKSHOPRELEVANT) -1;
//print("\n selectpet:%d ", selectpet);
petindex = CHAR_getCharPet( talker, selectpet);
if( !CHAR_CHECKINDEX( petindex) ) return;
// Robin 0725
if (CHAR_getInt( talker, CHAR_RIDEPET ) == selectpet )
{
sprintf(token,"\n\n骑乘中的宠物无法存入仓库喔!");
return;
}
if( CHAR_getInt( petindex, CHAR_PETFAMILY) == 1 )
{
sprintf(token,"\n\n家族守护兽无法存入仓库喔!");
return;
}
#ifdef _CHECK_ENEMY_PET
{
int j;
for( j=0;j<ENEMYTEMP_getEnemyNum();j++ ) {//ENEMY_getEnemyNum()
if( CHAR_getInt( petindex, CHAR_PETID) == ENEMYTEMP_getInt( j, E_T_TEMPNO ) ) {//ENEMY_getInt( j, ENEMY_TEMPNO)
if( ENEMYTEMP_getInt( j, E_T_PETFLG ) == 0 ){//ENEMY_getInt( j, ENEMY_PETFLG)
sprintf(token,"\n\n这是不能持有的宠物喔!");
return;
}
}
}
}
#endif
// 坞五毛茧允[蟆卞茧仄化民尼永弁仄化中月及匹]仇仇匹坞中化中卅中及反云井仄中
emptyindex = CHAR_getCharDepotPetElement( talker);
if( emptyindex == -1 ) {
fprint( "err\n");
return;
}
// 爵 赏 迕矢永玄卅日]公木及瓒 毛壅允[
if( CHAR_getInt( talker, CHAR_DEFAULTPET) == selectpet) {
CHAR_setInt( talker, CHAR_DEFAULTPET, -1);
lssproto_KS_send( fd, -1, TRUE);
}
// 仃 木 卞]矢永玄及奶件犯永弁旦毛戊疋□
CHAR_setDepotPetIndex( talker, emptyindex, petindex);
// 矢永玄 井日壅允
CHAR_setCharPet( talker, selectpet, -1);
// 丢永本□斥潸
NPC_MaxGoldOver( meindex, talker, NPC_PETSHOP_MSG_POOLTHANKS, token);
// 云嗯蛹日允
CHAR_DelGold( talker, NPC_GETPOOLCOST( talker) );
// 云嗯犯□正霜月
CHAR_send_P_StatusString(talker,CHAR_P_STRING_GOLD);
snprintf( szPet, sizeof( szPet ), "K%d", selectpet);
// 蕙仄中矢永玄旦 □正旦霜曰勾仃月
CHAR_sendStatusString( talker, szPet );
// 矢永玄毛 仃凶夫弘
if( NPC_DepotPet_CheckRepeat( talker) == 0) // 检查编码重复宠
{
LogPet(
CHAR_getChar( talker, CHAR_NAME ), /* 平乓仿 */
CHAR_getChar( talker, CHAR_CDKEY ),
CHAR_getChar( petindex, CHAR_NAME),
CHAR_getInt( petindex, CHAR_LV),
"pool(存入宠物仓库)",
CHAR_getInt( talker,CHAR_FLOOR),
CHAR_getInt( talker,CHAR_X ),
CHAR_getInt( talker,CHAR_Y ),
CHAR_getChar( petindex, CHAR_UNIQUECODE) // shan 2001/12/14
);
}
else
{
CHAR_talkToCli( talker, -1, "这是非法的宠物喔!!", CHAR_COLORYELLOW);
}
}
void NPC_DepotPet_Get( int meindex, int talker, int select, char *token)
{
int petindex;
int selectpet;
int emptyindex;
char szPet[128];
int workindex[CHAR_MAXPOOLPETHAVE];
int i;
int cnt;
selectpet = CHAR_getWorkInt( talker, CHAR_WORKSHOPRELEVANT) ;
petindex = CHAR_getDepotPetIndex( talker, selectpet);
if( !CHAR_CHECKINDEX( petindex) ) return;
emptyindex = CHAR_getCharPetElement( talker);
if( emptyindex == -1 ) {
fprint( "err\n");
return;
}
CHAR_setCharPet( talker, emptyindex, petindex);
CHAR_setChar( petindex, CHAR_OWNERCHARANAME, CHAR_getChar( talker, CHAR_NAME));
CHAR_setDepotPetIndex( talker, selectpet, -1);
NPC_MaxGoldOver( meindex, talker, NPC_PETSHOP_MSG_POOLTHANKS, token);
snprintf( szPet, sizeof( szPet ), "K%d", emptyindex);
CHAR_sendStatusString( talker, szPet );
snprintf( szPet, sizeof( szPet), "W%d",emptyindex);
CHAR_sendStatusString( talker, szPet );
for( i = 0; i < CHAR_MAXDEPOTPETHAVE; i ++ ) {
workindex[i] = -1;
}
cnt = 0;
for( i = 0; i < CHAR_MAXDEPOTPETHAVE; i ++ ) {
int petindex = CHAR_getDepotPetIndex( talker, i);
if( CHAR_CHECKINDEX( petindex) ) {
workindex[cnt++] = petindex;
}
}
for( i = 0; i < CHAR_MAXDEPOTPETHAVE; i ++ ) {
CHAR_setDepotPetIndex( talker, i, workindex[i]);
}
LogPet(
CHAR_getChar( talker, CHAR_NAME ),
CHAR_getChar( talker, CHAR_CDKEY ),
CHAR_getChar( petindex, CHAR_NAME),
CHAR_getInt( petindex, CHAR_LV),
"draw(领取仓库宠物)",
CHAR_getInt( talker,CHAR_FLOOR),
CHAR_getInt( talker,CHAR_X ),
CHAR_getInt( talker,CHAR_Y ),
CHAR_getChar( petindex, CHAR_UNIQUECODE) // shan 2001/12/14
);
#ifdef _PET_EVOLUTION
if( CHAR_getInt( petindex, CHAR_FUSIONBEIT) == 1 &&
CHAR_getInt( petindex, CHAR_FUSIONRAISE) > 0 ){//检查是否为融合宠
CHAR_setInt( petindex, CHAR_FUSIONTIMELIMIT, (int)time( NULL));
}
#endif
}
void NPC_DepotPet_AskGet(int meindex,int talker,int select,char *token)
{
int depotindex;
int petindex;
char *petname;
depotindex = CHAR_getWorkInt( talker, CHAR_WORKSHOPRELEVANT) * 5 + select - 1;
CHAR_setWorkInt(talker,CHAR_WORKSHOPRELEVANT,depotindex );
petindex = CHAR_getDepotPetIndex( talker, depotindex);
if( !CHAR_CHECKINDEX(petindex) ) return;
petname = CHAR_getUseName( petindex);
sprintf(token,"\n领回[%s]", petname);
}
int NPC_DepotPet_CheckRepeat( int charaindex)
{
int petindex1, petindex2;
int i, j, find, ret = FALSE;
int workindex[CHAR_MAXDEPOTPETHAVE], cnt =0;
for( i =0; i <(CHAR_MAXDEPOTPETHAVE-1); i++)
{
petindex1 = CHAR_getDepotPetIndex( charaindex, i);
if( !CHAR_CHECKINDEX( petindex1)) continue;
find = 0;
for( j =(i+1); j <CHAR_MAXDEPOTPETHAVE; j++)
{
petindex2 = CHAR_getDepotPetIndex( charaindex, j);
if( !CHAR_CHECKINDEX( petindex2)) continue;
if( petindex1 == petindex2 ) continue;
if( !strcmp( CHAR_getChar( petindex1, CHAR_UNIQUECODE),
CHAR_getChar( petindex2, CHAR_UNIQUECODE) ) )
{
print(" 在仓库找到非法宠了 ");
CHAR_setDepotPetIndex( charaindex, j, -1);
NPC_DepotPet_CheckRepeat_del( charaindex, petindex2);
find ++;
ret = TRUE;
}
}
if( find >0)
{
CHAR_setDepotPetIndex( charaindex, i, -1);
NPC_DepotPet_CheckRepeat_del( charaindex, petindex1);
}
}
for( i = 0; i < CHAR_MAXDEPOTPETHAVE; i ++ ) {
workindex[i] = -1;
}
for( i = 0; i < CHAR_MAXDEPOTPETHAVE; i ++ ) {
int pindex = CHAR_getDepotPetIndex( charaindex, i);
if( CHAR_CHECKINDEX( pindex) ) {
workindex[cnt++] = pindex;
}
}
for( i = 0; i < CHAR_MAXDEPOTPETHAVE; i ++ ) {
CHAR_setDepotPetIndex( charaindex, i, workindex[i]);
}
return ret;
}
int NPC_DepotPet_CheckRepeat_del( int charaindex, int petindex)
{
int i;
LogPet(
CHAR_getChar( charaindex, CHAR_NAME ), /* 平乓仿 */
CHAR_getChar( charaindex, CHAR_CDKEY ),
CHAR_getChar( petindex, CHAR_NAME),
CHAR_getInt( petindex, CHAR_LV),
"del(清除仓库洗宠)",
CHAR_getInt( charaindex,CHAR_FLOOR),
CHAR_getInt( charaindex,CHAR_X ),
CHAR_getInt( charaindex,CHAR_Y ),
CHAR_getChar( petindex, CHAR_UNIQUECODE) // shan 2001/12/14
);
CHAR_endCharOneArray( petindex );
}
// 检查等级是否足够
int NPC_DepotPet_CheckLevel(int meindex,int talker,int select,char *token)
{
int petindex;
int selectpet;
if( !CHAR_CheckDepotPet( talker) )
return FALSE;
selectpet = CHAR_getWorkInt( talker, CHAR_WORKSHOPRELEVANT) ;
petindex = CHAR_getDepotPetIndex( talker, selectpet);
if( !CHAR_CHECKINDEX(petindex) ) return FALSE;
//print("\n trans:%d char_lv:%d pet_lv:%d ",
// CHAR_getInt( talker, CHAR_TRANSMIGRATION),
// CHAR_getInt( talker, CHAR_LV),
// CHAR_getInt( petindex, CHAR_LV) );
// 如果是守护兽改为普通兽
if( CHAR_getInt( petindex, CHAR_PETFAMILY) == 1
&& CHAR_getInt( talker, CHAR_FMLEADERFLAG) != 3 ) {
CHAR_setInt( petindex, CHAR_PETFAMILY, 0);
}
if( CHAR_getWorkInt( talker, CHAR_PickAllPet) == TRUE ) { // 装备驯兽戒指的话...
return TRUE;
}
if( CHAR_getInt( talker, CHAR_TRANSMIGRATION) > 0
|| CHAR_getInt( talker, CHAR_LV)+5 >= CHAR_getInt( petindex, CHAR_LV) ) {
return TRUE;
}
return FALSE;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -