📄 npc_eventaction.c
字号:
if( petnum == petid && cmp ){//删除宠物
char szPet[128];
int defpet;
char msgbuf[64];
int fd = getfdFromCharaIndex( toindex );
if( !CHAR_CHECKINDEX(petindex) ) return FALSE;
if( CHAR_getInt( toindex, CHAR_RIDEPET) == i ) {
//CHAR_talkToCli( talker, -1, "骑乘中的宠物无法交出!", CHAR_COLORYELLOW );
//return FALSE;
CHAR_setInt( toindex, CHAR_RIDEPET, -1);
CHAR_send_P_StatusString( toindex, CHAR_P_STRING_RIDEPET );
CHAR_complianceParameter( toindex );
CHAR_sendCToArroundCharacter( CHAR_getWorkInt( toindex , CHAR_WORKOBJINDEX ));
}
//公及平乓仿互爵 卅日}矢永玄毛丹日内蔽
if( CHAR_getWorkInt( CONNECT_getCharaindex( fd ), CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE)
return FALSE;
//及矢永玄互田玄伙井升丹井及民尼永弁
defpet = CHAR_getInt( toindex, CHAR_DEFAULTPET);
if(defpet == i){
CHAR_setInt( toindex, CHAR_DEFAULTPET, -1);
lssproto_KS_send( fd, -1, TRUE);
}
snprintf( msgbuf,sizeof( msgbuf), "交出%s。",
CHAR_getChar( petindex, CHAR_NAME));
CHAR_talkToCli( toindex, -1, msgbuf, CHAR_COLORWHITE);
// 矢永玄毛澎 仄凶夫弘
LogPet( CHAR_getChar( toindex, CHAR_NAME ), // 平乓仿
CHAR_getChar( toindex, CHAR_CDKEY ),
CHAR_getChar( petindex, CHAR_NAME),
CHAR_getInt( petindex, CHAR_LV),
"EvnetDell(任务删除)",
CHAR_getInt( toindex,CHAR_FLOOR),
CHAR_getInt( toindex,CHAR_X ),
CHAR_getInt( toindex,CHAR_Y ),
CHAR_getChar( petindex, CHAR_UNIQUECODE) // shan 2001/12/14
);
// 切 井日壅允
CHAR_setCharPet( toindex, i, -1);
CHAR_endCharOneArray( petindex );
snprintf( szPet, sizeof( szPet ), "K%d", i);
// 蕙仄中矢永玄旦 □正旦霜曰勾仃月
CHAR_sendStatusString( toindex, szPet );
++count;
if( count >= petcount )
break;
}
}
return TRUE;
}
#endif
BOOL NPC_ActionAddPet( int talker, char *buf)
{
int ret;
char msgbuf[64], buff3[256];
int enemynum;
int i,j,k=1;
int petindex, petindex2, petid;
k=1;
while( getStringFromIndexWithDelim(buf , "," , k, buff3, sizeof(buff3)) !=FALSE ){
k++;
//检查宠物栏是否有空位
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_COLORYELLOW);
return FALSE;
}
petid = atoi( buff3);
enemynum = ENEMY_getEnemyNum();
for( i = 0; i < enemynum; i ++ ) {
if( ENEMY_getInt( i, ENEMY_ID ) == petid )
//if( ENEMY_getInt( i, ENEMY_TEMPNO ) == petid )
break;
}
if( i == enemynum )
continue;
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) )
continue;
snprintf( msgbuf,sizeof( msgbuf), "拿到%s。", CHAR_getChar(petindex2,CHAR_NAME));
CHAR_talkToCli( talker, -1, msgbuf, CHAR_COLORYELLOW);
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 );
}
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) // shan 2001/12/14
);
}
return TRUE;
}
#ifdef _ITEM_PILENUMS
BOOL NPC_DelItem( int toindex, int ti, int num)
{
int itemindex, pilenum;
itemindex = CHAR_getItemIndex( toindex , ti);
if( !ITEM_CHECKINDEX(itemindex) ) return FALSE;
pilenum = ITEM_getInt( itemindex, ITEM_USEPILENUMS);
if( pilenum < num ) return FALSE;
pilenum = pilenum - num;
if( pilenum <= 0 ){
{
LogItem(
CHAR_getChar( toindex, CHAR_NAME ),
CHAR_getChar( toindex, CHAR_CDKEY ),
#ifdef _add_item_log_name
itemindex,
#else
ITEM_getInt( itemindex, ITEM_ID ),
#endif
"Sell(卖道具)",
CHAR_getInt( toindex,CHAR_FLOOR),
CHAR_getInt( toindex,CHAR_X ),
CHAR_getInt( toindex,CHAR_Y ),
ITEM_getChar( itemindex, ITEM_UNIQUECODE),
ITEM_getChar( itemindex, ITEM_NAME),
ITEM_getInt( itemindex, ITEM_ID)
);
}
CHAR_setItemIndex( toindex, ti, -1);
ITEM_endExistItemsOne( itemindex);
}else{
ITEM_setInt( itemindex, ITEM_USEPILENUMS, pilenum);
}
CHAR_sendItemDataOne( toindex, ti);
return TRUE;
}
void NPC_ActionDoPileClearItem( int toindex, int itemID)
{
int i, itemindex;
char token[256];
for( i = CHAR_STARTITEMARRAY ; i < CHAR_MAXITEMHAVE ; i++ ){
itemindex = CHAR_getItemIndex( toindex , i );
if( !ITEM_CHECKINDEX(itemindex) ) continue;
if( ITEM_getInt(itemindex, ITEM_ID) != itemID ) continue;
sprintf( token, "交出道具%s",ITEM_getChar( itemindex, ITEM_NAME));
CHAR_talkToCli( toindex, -1, token, CHAR_COLORYELLOW);
LogItem(
CHAR_getChar( toindex, CHAR_NAME ),
CHAR_getChar( toindex, CHAR_CDKEY ),
#ifdef _add_item_log_name // WON ADD 在item的log中增加item名称
itemindex,
#else
ITEM_getInt( itemindex, ITEM_ID),
#endif
"任务收取",
CHAR_getInt( toindex,CHAR_FLOOR),
CHAR_getInt( toindex,CHAR_X ),
CHAR_getInt( toindex,CHAR_Y ),
ITEM_getChar( itemindex, ITEM_UNIQUECODE),
ITEM_getChar( itemindex, ITEM_NAME),
ITEM_getInt( itemindex, ITEM_ID)
);
CHAR_setItemIndex( toindex, i, -1);
ITEM_endExistItemsOne( itemindex);
CHAR_sendItemDataOne( toindex, i);
}
}
BOOL NPC_ActionDoPileDelItem( int toindex, int itemID, int num)
{
int i, itemindex, finditem=0, pilenum=0, onenum=0;
char token[256];
for( i = CHAR_STARTITEMARRAY ; i < CHAR_MAXITEMHAVE && (finditem<num || num==-1); i++ ){
itemindex = CHAR_getItemIndex( toindex , i );
onenum = 0;
if( !ITEM_CHECKINDEX(itemindex) ) continue;
if( ITEM_getInt(itemindex, ITEM_ID) != itemID ) continue;
pilenum = ITEM_getInt( itemindex, ITEM_USEPILENUMS);
if( pilenum >= (num-finditem) ){
pilenum -= (num-finditem);
onenum += (num-finditem);
}else {
onenum = pilenum;
pilenum=0;
}
finditem += onenum;
ITEM_setInt( itemindex, ITEM_USEPILENUMS, pilenum);
sprintf( token, "交出%d个%s", onenum, ITEM_getChar( itemindex, ITEM_NAME));
CHAR_talkToCli( toindex, -1, token, CHAR_COLORYELLOW);
if( pilenum <= 0 ){
LogItem(
CHAR_getChar( toindex, CHAR_NAME ),
CHAR_getChar( toindex, CHAR_CDKEY ),
#ifdef _add_item_log_name // WON ADD 在item的log中增加item名称
itemindex,
#else
ITEM_getInt( itemindex, ITEM_ID),
#endif
"任务收取",
CHAR_getInt( toindex,CHAR_FLOOR),
CHAR_getInt( toindex,CHAR_X ),
CHAR_getInt( toindex,CHAR_Y ),
ITEM_getChar( itemindex, ITEM_UNIQUECODE),
ITEM_getChar( itemindex, ITEM_NAME),
ITEM_getInt( itemindex, ITEM_ID)
);
CHAR_setItemIndex( toindex, i, -1);
ITEM_endExistItemsOne( itemindex);
}
CHAR_sendItemDataOne( toindex, i);
}
if( finditem != num && num != -1 ) return FALSE;
return TRUE;
}
BOOL NPC_ActionDelItem( int talker, char *buf)
{
char buff3[128], buf2[32];
int k=1, itemid, neednum;
if( !CHAR_CHECKINDEX( talker) ) return FALSE;
while( getStringFromIndexWithDelim(buf , "," , k++, buff3, sizeof(buff3)) !=FALSE ) {
neednum = 1;
if( getStringFromIndexWithDelim( buff3, "*", 1, buf2, sizeof(buf2)) == FALSE ) continue;
itemid = atoi( buf2);
if( getStringFromIndexWithDelim( buff3, "*", 2, buf2, sizeof(buf2)) == TRUE ){
neednum = atoi( buf2);
if( NPC_ActionDoPileDelItem( talker, itemid, neednum) == FALSE ) return FALSE;
}else{
NPC_ActionDoPileClearItem( talker, itemid);
}
}
return TRUE;
}
#else
BOOL NPC_ActionDelItem( int talker, char *buf)
{
int i = 1, j = 1,k = 1;
char buff3[128];
char buf2[32];
int itemindex;
char token[256];
if( !CHAR_CHECKINDEX( talker) ) return FALSE;
while( getStringFromIndexWithDelim(buf , "," , k, buff3, sizeof(buff3)) !=FALSE ) {
k++;
if(strstr(buff3,"*")!=NULL){
int itemno, kosuu=0, id, cnt=0;
struct _tagItemArray {
int index;
int itemindex;
};
struct _tagItemArray ItemArray[20];
for( i=0; i<20 ; i++){
ItemArray[i].itemindex = -1;
ItemArray[i].index = -1;
}
//取得字串
getStringFromIndexWithDelim(buff3,"*",1,buf2,sizeof(buf2));
itemno = atoi(buf2);
getStringFromIndexWithDelim(buff3,"*",2,buf2,sizeof(buf2));
kosuu = atoi(buf2);
//取得 item index
for( i = CHAR_STARTITEMARRAY ; i < CHAR_MAXITEMHAVE ; i++ ){
itemindex=CHAR_getItemIndex( talker , i );
if( ITEM_CHECKINDEX(itemindex) ){
id=ITEM_getInt(itemindex ,ITEM_ID );
if(itemno==id){
ItemArray[cnt].itemindex = itemindex;
ItemArray[cnt].index = i;
cnt++;
}
}
if(cnt == kosuu)
break;
}
if(cnt != kosuu){
CHAR_talkToCli( talker, -1,"条件不足", CHAR_COLORYELLOW);
return FALSE;
}
//收取物品
for( i=0; i<20; i++) {
itemindex = ItemArray[i].itemindex;
if( !ITEM_CHECKINDEX(itemindex) ) break;
sprintf(token,"交出%s",ITEM_getChar( itemindex, ITEM_NAME));
CHAR_talkToCli( talker, -1, token, CHAR_COLORYELLOW);
CHAR_setItemIndex( talker, ItemArray[i].index ,-1);
ITEM_endExistItemsOne( itemindex);
CHAR_sendItemDataOne( talker, ItemArray[i].index);
LogItem(
CHAR_getChar( talker, CHAR_NAME ), CHAR_getChar( talker, CHAR_CDKEY ),
#ifdef _add_item_log_name // WON ADD 在item的log中增加item名称
itemindex,
#else
ITEM_getInt( itemindex, ITEM_ID),
#endif
"WarpManDelItem",
CHAR_getInt( talker, CHAR_FLOOR), CHAR_getInt( talker, CHAR_X ),
CHAR_getInt( talker, CHAR_Y ), ITEM_getChar( itemindex, ITEM_UNIQUECODE),
ITEM_getChar( itemindex, ITEM_NAME),
ITEM_getInt( itemindex, ITEM_ID)
);
}
}else{
for( j = CHAR_STARTITEMARRAY ; j < CHAR_MAXITEMHAVE ; j++){
itemindex = CHAR_getItemIndex( talker ,j);
if( ITEM_CHECKINDEX(itemindex) ){
if( atoi( buff3) == ITEM_getInt(itemindex,ITEM_ID)){
LogItem(
CHAR_getChar( talker, CHAR_NAME ),
CHAR_getChar( talker, CHAR_CDKEY ),
#ifdef _add_item_log_name // WON ADD 在item的log中增加item名称
itemindex,
#else
ITEM_getInt( itemindex, ITEM_ID),
#endif
"WarpManDelItem",
CHAR_getInt( talker,CHAR_FLOOR),
CHAR_getInt( talker,CHAR_X ),
CHAR_getInt( talker,CHAR_Y ),
ITEM_getChar( itemindex, ITEM_UNIQUECODE),
ITEM_getChar( itemindex, ITEM_NAME),
ITEM_getInt( itemindex, ITEM_ID)
);
sprintf( token, "交出%s。",
ITEM_getChar( itemindex, ITEM_NAME));
CHAR_talkToCli( talker, -1, token, CHAR_COLORYELLOW);
CHAR_DelItem( talker, j);
}
}
}
}
}
return TRUE;
}
#endif
BOOL NPC_ActionAddItem( int talker, char *buf)
{
int itemID,k=0,itemindex=-1;
int spaceNum=5,i;
char buff3[256], msgbuf[64], token[256];
int ret;
k=1;
while( getStringFromIndexWithDelim(buf , "," , k, buff3, sizeof(buff3)) !=FALSE ){
k++;
for( i = spaceNum ; i < CHAR_MAXITEMHAVE ; i++ ){
itemindex=CHAR_getItemIndex( talker , i );
if( itemindex == -1 ) {
spaceNum = i+1;
break;
}
}
if( i == CHAR_MAXITEMHAVE ) {
snprintf( msgbuf,sizeof( msgbuf), "物品栏空间不足!!");
CHAR_talkToCli( talker, -1, msgbuf, CHAR_COLORYELLOW);
return FALSE;
}
}
k=1;
while( getStringFromIndexWithDelim(buf , "," , k, buff3, sizeof(buff3)) !=FALSE ){
k++;
itemID = atoi( buff3);
if( itemID )
itemindex = ITEM_makeItemAndRegist( itemID);
if(itemindex == -1)
continue;
ret = CHAR_addItemSpecificItemIndex( talker, itemindex);
if( ret < 0 || ret >= CHAR_MAXITEMHAVE ) {
ITEM_endExistItemsOne( itemindex);
print ("\n ret error!!");
return FALSE;
}
sprintf( token,"拿到%s",ITEM_getChar( itemindex, ITEM_NAME));
CHAR_talkToCli( talker, -1, token, CHAR_COLORYELLOW );
CHAR_sendItemDataOne( talker, ret);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -