1564 lines
48 KiB
C
1564 lines
48 KiB
C
#include "version.h"
|
||
#include <string.h>
|
||
#include "char.h"
|
||
#include "object.h"
|
||
#include "char_base.h"
|
||
#include "npcutil.h"
|
||
#include "npc_npcenemy.h"
|
||
#include "battle.h"
|
||
#include "enemy.h"
|
||
#include "readmap.h"
|
||
#include "encount.h"
|
||
#include "lssproto_serv.h"
|
||
#include "configfile.h"
|
||
#include "anim_tbl.h"
|
||
#include "handletime.h"
|
||
#include "npc_eventaction.h"
|
||
extern char hanzibuf[5000][8];
|
||
enum {
|
||
CHAR_WORK_ENCOUNTTYPE = CHAR_NPCWORKINT1, /* 巨件市它件玄及酷 */
|
||
CHAR_WORK_DIEACT = CHAR_NPCWORKINT2, /* 韶氏分凛升丹允月井 */
|
||
CHAR_WORK_WARP_FLOOR = CHAR_NPCWORKINT3, /* 伐□皿允月白夫失*/
|
||
CHAR_WORK_WARP_X = CHAR_NPCWORKINT4, /* 伐□皿允月X */
|
||
CHAR_WORK_WARP_Y = CHAR_NPCWORKINT5, /* 伐□皿允月Y */
|
||
CHAR_WORK_ONEBATTLE = CHAR_NPCWORKINT6, /* 域勾仄井爵 仄卅中 */
|
||
NPC_TIME_MODE = CHAR_NPCWORKINT7,
|
||
CHAR_WORK_BASEIMGBAK = CHAR_NPCWORKINT8, /* 手午及 飓 寞 */
|
||
CHAR_WORK_DIETIME = CHAR_NPCWORKINT9, /* 韶氏分凛棉 */
|
||
CHAR_WORK_REVIVALTIME = CHAR_NPCWORKINT10, /* 戏五忒月凛棉 */
|
||
CHAR_WORK_BATTLETYPE = CHAR_NPCWORKINT11,
|
||
#ifdef _WARNPC_CTRL
|
||
CHAR_WORK_BATTLEINGTIME = CHAR_NPCWORKINT12,
|
||
#endif
|
||
};
|
||
|
||
#define NPC_ENEMY_REVIVALTIMA_DEFAULT 120
|
||
|
||
static int gymbody[] = {
|
||
SPR_001em,SPR_011em,SPR_021em,SPR_031em,SPR_041em,SPR_051em,
|
||
SPR_061em,SPR_071em,SPR_081em,SPR_091em,SPR_101em,SPR_111em,
|
||
|
||
SPR_002em,SPR_012em,SPR_022em,SPR_032em,SPR_042em,SPR_052em,
|
||
SPR_062em,SPR_072em,SPR_082em,SPR_092em,SPR_102em,SPR_112em,
|
||
|
||
SPR_003em,SPR_013em,SPR_023em,SPR_033em,SPR_043em,SPR_053em,
|
||
SPR_063em,SPR_073em,SPR_083em,SPR_093em,SPR_103em,SPR_113em,
|
||
|
||
SPR_004em,SPR_014em,SPR_024em,SPR_034em,SPR_044em,SPR_054em,
|
||
SPR_064em,SPR_074em,SPR_084em,SPR_094em,SPR_104em,SPR_114em,
|
||
};
|
||
|
||
#ifdef _NEW_WARPMAN
|
||
static BOOL NPC_NPCEnemy_CheckFree( int meindex, int toindex, BOOL *Party);
|
||
BOOL NPC_WarpAllMsg(int meindex,int toindex );
|
||
BOOL NPCEnemy_CheckFree( int meindex, int talker, char *buf);
|
||
BOOL NPCEnemy_BSCheck(int meindex,int talker,char* buf);
|
||
BOOL NPCEnemy_FreeIfCheck(int meindex,int talker,char* buf,int kosuu,int flg, int temp);
|
||
BOOL NPCEnemy_WarpManReduce(int meindex,int talker,char *buf);
|
||
BOOL NPCEnemy_BigSmallLastCheck(int point1,int mypoint,int flg);
|
||
BOOL NPCEnemy_CheckTrans(int meindex,int talker,int trans,int flg);
|
||
BOOL NPCEnemy_LevelCheck(int meindex,int talker,int level,int flg);
|
||
BOOL NPCEnemy_CheckMyPet( int meindex, int talker, int petLv, int flg, int petid);
|
||
BOOL NPCEnemy_ItemCheck(int meindex,int talker,int itemNo,int flg);
|
||
#endif
|
||
#ifdef _NPC_REPLACEMENT
|
||
void Check_EnemyWarpMe( int meindex, char *args );
|
||
#endif
|
||
static int NPC_NPCEnemy_StealItem( char *argstr, int meindex, int charaindex);
|
||
|
||
BOOL NPC_NPCEnemyInit( int meindex )
|
||
{
|
||
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
|
||
char buf[64];
|
||
int tmp, gym;
|
||
#ifdef _NPCENEMY_1
|
||
char token1[128];
|
||
#endif
|
||
|
||
if( NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)) == NULL ) {
|
||
print("Can't GetArgStr !!");
|
||
return FALSE;
|
||
}
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, "sktype", buf, sizeof( buf)) != NULL ){
|
||
CHAR_setWorkInt( meindex, CHAR_WORK_BATTLETYPE, atoi( buf));
|
||
}else{
|
||
CHAR_setWorkInt( meindex, CHAR_WORK_BATTLETYPE, 0);
|
||
}
|
||
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, "enemyno", buf, sizeof( buf)) == NULL ){
|
||
char filename[256];
|
||
NPC_Util_CheckAssignArgFile( meindex, filename);
|
||
print( "NPCEnemy: nothing parameter [enemyno]:\n%s\n", filename);
|
||
return FALSE;
|
||
}else {
|
||
int i;
|
||
for( i = 0; i < NPC_ENEMY_ENEMYNUMBER; i ++ ) {
|
||
int curEnemy;
|
||
char data[128];
|
||
int ret;
|
||
ret = getStringFromIndexWithDelim( buf,",", i + 1, data, sizeof(data));
|
||
if( ret == FALSE)
|
||
break;
|
||
curEnemy = ENEMY_getEnemyArrayFromId( atoi( data));
|
||
if( !ENEMY_CHECKINDEX( curEnemy) ) {
|
||
char filename[256];
|
||
NPC_Util_CheckAssignArgFile( meindex, filename);
|
||
print( "NPCEnemy: invalid param [enemyno:%d data:%s curEnemy:%d]\nfile:%s\n",i+1, data, curEnemy, filename );
|
||
return FALSE;
|
||
}
|
||
}
|
||
}
|
||
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, "steal", buf, sizeof( buf)) != NULL ) {
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, "item", buf, sizeof( buf)) == NULL ) {
|
||
print( "NPCEnemy:有指定steal而没有指定item,很奇怪\n");
|
||
return FALSE;
|
||
}
|
||
}
|
||
|
||
gym = NPC_Util_GetNumFromStrWithDelim( argstr, "gym");
|
||
|
||
if( gym > 0 ){
|
||
CHAR_setInt( meindex, CHAR_BASEBASEIMAGENUMBER,
|
||
gymbody[RAND( 0, arraysizeof( gymbody ) - 1)] );
|
||
CHAR_setInt( meindex, CHAR_BASEIMAGENUMBER,
|
||
CHAR_getInt( meindex, CHAR_BASEBASEIMAGENUMBER ) );
|
||
CHAR_setInt( meindex, CHAR_LV, gym );
|
||
}
|
||
tmp = NPC_Util_GetNumFromStrWithDelim( argstr, "dieact");
|
||
if( tmp != 1 )
|
||
tmp = 0;
|
||
CHAR_setWorkInt( meindex, CHAR_WORK_DIEACT, tmp);
|
||
if( strstr( argstr, "NEWNPCENEMY") != 0 ) {
|
||
CHAR_setWorkInt( meindex, CHAR_WORK_WARP_FLOOR, 0 );
|
||
CHAR_setWorkInt( meindex, CHAR_WORK_WARP_Y, 0 );
|
||
CHAR_setWorkInt( meindex, CHAR_WORK_WARP_X, 0 );
|
||
}else {
|
||
if( CHAR_getWorkInt( meindex, CHAR_WORK_DIEACT) == 1 ) {
|
||
char buff1[256];
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, "warpfl", buff1, sizeof( buff1) ) == NULL) {
|
||
print( "NPCENEMY: nothing warp_floor %s\n", buff1);
|
||
return FALSE;
|
||
}
|
||
tmp = atoi( buff1);
|
||
CHAR_setWorkInt( meindex, CHAR_WORK_WARP_FLOOR, tmp);
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, "warpx", buff1, sizeof( buff1) ) == NULL) {
|
||
print( "NPCENEMY: nothing warp_x\n");
|
||
return FALSE;
|
||
}
|
||
tmp = atoi( buff1);
|
||
CHAR_setWorkInt( meindex, CHAR_WORK_WARP_X, tmp);
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, "warpy", buff1, sizeof( buff1) ) == NULL) {
|
||
print( "NPCENEMY: nothing warp_y\n");
|
||
return FALSE;
|
||
}
|
||
tmp = atoi( buff1);
|
||
CHAR_setWorkInt( meindex, CHAR_WORK_WARP_Y, tmp);
|
||
if( MAP_IsValidCoordinate( CHAR_getWorkInt( meindex, CHAR_WORK_WARP_FLOOR),
|
||
CHAR_getWorkInt( meindex, CHAR_WORK_WARP_X),
|
||
CHAR_getWorkInt( meindex, CHAR_WORK_WARP_Y) ) == FALSE ){
|
||
char filename[256];
|
||
NPC_Util_CheckAssignArgFile( meindex, filename);
|
||
print( "NPCENEMY: %s: .\n %s.\nInvalid fl=%d,x=%d,y=%d\n", filename, argstr,
|
||
CHAR_getWorkInt( meindex, CHAR_WORK_WARP_FLOOR),
|
||
CHAR_getWorkInt( meindex, CHAR_WORK_WARP_X),
|
||
CHAR_getWorkInt( meindex, CHAR_WORK_WARP_Y) );
|
||
return FALSE;
|
||
}
|
||
}
|
||
}
|
||
//andy_end
|
||
tmp = NPC_Util_GetNumFromStrWithDelim( argstr, "entype");
|
||
if( tmp != 1 && tmp != 2)
|
||
tmp = 0;
|
||
CHAR_setWorkInt( meindex, CHAR_WORK_ENCOUNTTYPE, tmp);
|
||
|
||
tmp = NPC_Util_GetNumFromStrWithDelim( argstr, "onebattle");
|
||
if( tmp != 1 )
|
||
tmp = 0;
|
||
CHAR_setWorkInt( meindex, CHAR_WORK_ONEBATTLE, tmp);
|
||
|
||
tmp = NPC_Util_GetNumFromStrWithDelim( argstr, "time");
|
||
if( tmp == -1 )
|
||
tmp = NPC_ENEMY_REVIVALTIMA_DEFAULT;
|
||
CHAR_setWorkInt( meindex, CHAR_WORK_REVIVALTIME, tmp);
|
||
|
||
|
||
CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPENPCENEMY );
|
||
CHAR_setWorkInt( meindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_ENEMY);
|
||
CHAR_setWorkInt( meindex, CHAR_WORK_BASEIMGBAK,
|
||
CHAR_getInt( meindex, CHAR_BASEIMAGENUMBER));
|
||
return TRUE;
|
||
}
|
||
|
||
void NPC_NPCEnemyTalked( int meindex , int talkerindex , char *szMes ,
|
||
int color )
|
||
{
|
||
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
|
||
char buf[256];
|
||
|
||
if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) {
|
||
return;
|
||
}
|
||
if( NPC_Util_GetArgStr( meindex, npcarg, sizeof( npcarg)) == NULL ) {
|
||
print("Can't GetArgStr !!");
|
||
return;
|
||
}
|
||
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "NEWTIME", buf, sizeof( buf)) != NULL ){
|
||
if( CHAR_getWorkInt( meindex, NPC_TIME_MODE) <= 0 ) {
|
||
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "Time_Msg", buf, sizeof( buf) ) != NULL) {
|
||
CHAR_talkToCli( talkerindex, meindex, buf, CHAR_COLORYELLOW);
|
||
}
|
||
return;
|
||
}
|
||
}
|
||
if( !NPC_Util_charIsInFrontOfChar( talkerindex, meindex, 1 ))
|
||
return;
|
||
if( CHAR_getWorkInt( meindex, CHAR_WORK_ENCOUNTTYPE) >= 1 ) {
|
||
if(strstr(npcarg,"STARTRAND")!=NULL){
|
||
time_t timep;
|
||
struct tm *p;
|
||
time(&timep);
|
||
p=localtime(&timep);
|
||
timep = mktime(p);
|
||
char *randtypetime = CHAR_getChar(talkerindex,CHAR_RANDTYPE);
|
||
char tempbuff[64];
|
||
int randtype = 0;
|
||
int randtime = 0;
|
||
int randwrong = 0;
|
||
if(strlen(randtypetime)>2){
|
||
if(getStringFromIndexWithDelim(randtypetime,"-", 3, tempbuff, sizeof(tempbuff)) != FALSE){
|
||
if(getStringFromIndexWithDelim(randtypetime,"-", 1, tempbuff, sizeof(tempbuff))== FALSE)
|
||
return;
|
||
randwrong = atoi(tempbuff);
|
||
if(getStringFromIndexWithDelim(randtypetime,"-", 2, tempbuff, sizeof(tempbuff))== FALSE)
|
||
return;
|
||
randtype = atoi(tempbuff);
|
||
if(getStringFromIndexWithDelim(randtypetime,"-", 3, tempbuff, sizeof(tempbuff))== FALSE)
|
||
return;
|
||
randtime = atoi(tempbuff);
|
||
#ifdef _MM_NO_JIAOBEN
|
||
if(timep - randtime < getEditBaseTime()*randwrong){
|
||
char errbuf[256];
|
||
sprintf(errbuf,"您还有%d秒才可以继续此操作!",getEditBaseTime()*randwrong-(timep - randtime));
|
||
CHAR_talkToCli(talkerindex, -1, errbuf, CHAR_COLORRED);
|
||
return;
|
||
}
|
||
#endif
|
||
}
|
||
}
|
||
// if(timep-CHAR_getWorkInt(talkerindex,CHAR_WORKRANDEDITBASETIME)>=getEditBaseTime())
|
||
// CHAR_setWorkInt(talkerindex,CHAR_WORKRANDEDITBASETIME,timep);
|
||
// else{
|
||
// char errbuf[256];
|
||
// sprintf(errbuf,"您还有%d秒才可以继续此操作!",getEditBaseTime()-(timep-CHAR_getWorkInt(talkerindex,CHAR_WORKRANDEDITBASETIME)));
|
||
// CHAR_talkToCli(talkerindex, -1, errbuf, CHAR_COLORRED);
|
||
// return;
|
||
// }
|
||
char jiabuf[][5]={"加","╋","╉","╈","╂","十","╃"};
|
||
char jianbuf[][5]={"减","一","-","—","-","—","━"};
|
||
char chengbuf[][5]={"乘","*","x","X","X","x","*"};
|
||
char numbuf[][5]={"0","1","2","3","4","5","6","7","8","9"};
|
||
char arg[255];
|
||
int i,j,k,l,m;
|
||
char buf[256];
|
||
i = RAND(30,70);
|
||
j = RAND(1,29);
|
||
l = RAND(1,7);
|
||
m = RAND(1,3);
|
||
char *typebuf;
|
||
// if(randtype == 0){
|
||
// randtype = RAND(1,10);
|
||
// if(randtype<=5){
|
||
// randtype = RAND(1,10);
|
||
// if(randtype<=3) randtype=1;
|
||
// else randtype=2;
|
||
// }else{
|
||
// randtype = RAND(1,10);
|
||
// if(randtype<=3) randtype=3;
|
||
// else randtype=4;
|
||
// }
|
||
// }
|
||
randtype = 4;
|
||
{
|
||
// sprintf(arg,"%s",sasql_rand_buf());
|
||
// if(strcmp(arg,"err")==0) return;
|
||
char tempbuf[64];
|
||
char randquestion[64];
|
||
char randrightanswer[64];
|
||
char randwronganswer1[64];
|
||
char randwronganswer2[64];
|
||
char randwronganswer3[64];
|
||
char randwronganswer4[64];
|
||
// if(getStringFromIndexWithDelim(arg,"|", 1, tempbuf, sizeof(tempbuf)) == FALSE)
|
||
// return;
|
||
// strcpy(randquestion,tempbuf);
|
||
// if(getStringFromIndexWithDelim(arg,"|", 2, tempbuf, sizeof(tempbuf)) == FALSE)
|
||
// return;
|
||
// strcpy(randrightanswer,tempbuf);
|
||
// if(getStringFromIndexWithDelim(arg,"|", 3, tempbuf, sizeof(tempbuf)) == FALSE)
|
||
// return;
|
||
// strcpy(randwronganswer1,tempbuf);
|
||
// if(getStringFromIndexWithDelim(arg,"|", 4, tempbuf, sizeof(tempbuf)) == FALSE)
|
||
// return;
|
||
// strcpy(randwronganswer2,tempbuf);
|
||
// if(getStringFromIndexWithDelim(arg,"|", 5, tempbuf, sizeof(tempbuf)) == FALSE)
|
||
// return;
|
||
// strcpy(randwronganswer3,tempbuf);
|
||
// if(getStringFromIndexWithDelim(arg,"|", 6, tempbuf, sizeof(tempbuf)) == FALSE)
|
||
// return;
|
||
// strcpy(randwronganswer4,tempbuf);
|
||
memset(tempbuf, 0, sizeof(tempbuf));
|
||
memset(randquestion, 0, sizeof(randquestion));
|
||
memset(randrightanswer, 0, sizeof(randrightanswer));
|
||
memset(randwronganswer1, 0, sizeof(randwronganswer1));
|
||
memset(randwronganswer2, 0, sizeof(randwronganswer2));
|
||
memset(randwronganswer3, 0, sizeof(randwronganswer3));
|
||
memset(randwronganswer4, 0, sizeof(randwronganswer4));
|
||
if(RAND(1,100)<=75){
|
||
char randtmpbuf[4][10];
|
||
sprintf(randtmpbuf[0],"%s",hanzibuf[RAND(1,5000)-1]);
|
||
sprintf(randtmpbuf[1],"%s",hanzibuf[RAND(1,5000)-1]);
|
||
sprintf(randtmpbuf[2],"%s",hanzibuf[RAND(1,5000)-1]);
|
||
sprintf(randtmpbuf[3],"%s",hanzibuf[RAND(1,5000)-1]);
|
||
sprintf(randquestion,"%s",str_hanzi_ganrao(randtmpbuf[0],randtmpbuf[1],randtmpbuf[2],randtmpbuf[3],0,0,0,0,0,0));
|
||
strcat(randquestion,"(请找出相同词组)");
|
||
int newrand1 = RAND(1,100)-1;
|
||
int newrand2 = RAND(1,100)-1;
|
||
int newrand3 = RAND(1,100)-1;
|
||
int newrand4 = RAND(1,100)-1;
|
||
int newrand5 = RAND(1,100)-1;
|
||
sprintf(randrightanswer,"%s",str_hanzi_ganrao(randtmpbuf[0],randtmpbuf[1],randtmpbuf[2],randtmpbuf[3],1,newrand1,newrand2,newrand3,newrand4,newrand5));
|
||
sprintf(randwronganswer1,"%s",str_hanzi_ganrao(randtmpbuf[0],randtmpbuf[1],randtmpbuf[3],randtmpbuf[2],1,newrand1,newrand2,newrand3,newrand4,newrand5));
|
||
sprintf(randwronganswer2,"%s",str_hanzi_ganrao(randtmpbuf[3],randtmpbuf[1],randtmpbuf[2],randtmpbuf[0],1,newrand1,newrand2,newrand3,newrand4,newrand5));
|
||
sprintf(randwronganswer3,"%s",str_hanzi_ganrao(randtmpbuf[1],randtmpbuf[0],randtmpbuf[2],randtmpbuf[3],1,newrand1,newrand2,newrand3,newrand4,newrand5));
|
||
sprintf(randwronganswer4,"%s",str_hanzi_ganrao(randtmpbuf[2],randtmpbuf[3],randtmpbuf[0],randtmpbuf[1],1,newrand1,newrand2,newrand3,newrand4,newrand5));
|
||
|
||
}else{
|
||
int tii;
|
||
char timubuf[36][5] = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9"};
|
||
for(tii=0;tii<5;tii++){
|
||
if(tii==0)
|
||
strcpy(tempbuf,timubuf[RAND(1,36)-1]);
|
||
else{
|
||
int timunum = 0;
|
||
while(1){
|
||
timunum = RAND(1,36)-1;
|
||
if(strstr(tempbuf,timubuf[timunum])==NULL)
|
||
break;
|
||
}
|
||
strcat(tempbuf,timubuf[timunum]);
|
||
}
|
||
}
|
||
sprintf(randwronganswer1,"[%c%c%c%c%c]",tempbuf[0],tempbuf[2],tempbuf[1],tempbuf[3],tempbuf[4]);
|
||
sprintf(randwronganswer2,"[%c%c%c%c%c]",tempbuf[0],tempbuf[1],tempbuf[4],tempbuf[2],tempbuf[3]);
|
||
sprintf(randwronganswer3,"[%c%c%c%c%c]",tempbuf[4],tempbuf[1],tempbuf[2],tempbuf[0],tempbuf[3]);
|
||
sprintf(randwronganswer4,"[%c%c%c%c%c]",tempbuf[1],tempbuf[0],tempbuf[2],tempbuf[3],tempbuf[4]);
|
||
sprintf(randquestion,"[%s](请找出相同英文)",tempbuf);
|
||
sprintf(randrightanswer,"[%s]",tempbuf);
|
||
char* randstr = NULL;
|
||
randstr = str_ganrao(randquestion);
|
||
strcpy(randquestion,randstr);
|
||
randstr = str_ganraoan(randrightanswer);
|
||
strcpy(randrightanswer,randstr);
|
||
randstr = str_ganraoan(randwronganswer1);
|
||
strcpy(randwronganswer1,randstr);
|
||
randstr = str_ganraoan(randwronganswer2);
|
||
strcpy(randwronganswer2,randstr);
|
||
randstr = str_ganraoan(randwronganswer3);
|
||
strcpy(randwronganswer3,randstr);
|
||
randstr = str_ganraoan(randwronganswer4);
|
||
strcpy(randwronganswer4,randstr);
|
||
}
|
||
int n;
|
||
int randnum1;
|
||
m=1;
|
||
char tempret[5][64];
|
||
randnum1 = RAND(1,5);
|
||
int rightnum,wrongnum1,wrongnum2,wrongnum3,wrongnum4;
|
||
rightnum = RAND(getRandMin(),getRandMax());
|
||
wrongnum1 = RAND(getRandMin(),getRandMax());
|
||
wrongnum2 = RAND(getRandMin(),getRandMax());
|
||
wrongnum3 = RAND(getRandMin(),getRandMax());
|
||
wrongnum4 = RAND(getRandMin(),getRandMax());
|
||
//char *tempbuff2 = "ABCDE";
|
||
int qianhounum = RAND(1,100);
|
||
for(n=1;n<=5;n++){
|
||
if(n==randnum1){
|
||
if(qianhounum<=50)
|
||
sprintf(tempret[n-1],"选项( %d %s )",rightnum,randrightanswer);
|
||
else
|
||
sprintf(tempret[n-1],"选项( %s %d )",randrightanswer,rightnum);
|
||
}else{
|
||
if(m==1){
|
||
if(qianhounum<=50)
|
||
sprintf(tempret[n-1],"选项( %d %s )",wrongnum1,randwronganswer1);
|
||
else
|
||
sprintf(tempret[n-1],"选项( %s %d )",randwronganswer1,wrongnum1);
|
||
m = 2;
|
||
}else if(m==2){
|
||
if(qianhounum<=50)
|
||
sprintf(tempret[n-1],"选项( %d %s )",wrongnum2,randwronganswer2);
|
||
else
|
||
sprintf(tempret[n-1],"选项( %s %d )",randwronganswer2,wrongnum2);
|
||
m = 3;
|
||
}else if(m==3){
|
||
if(qianhounum<=50)
|
||
sprintf(tempret[n-1],"选项( %d %s )",wrongnum3,randwronganswer3);
|
||
else
|
||
sprintf(tempret[n-1],"选项( %s %d )",randwronganswer3,wrongnum3);
|
||
m = 4;
|
||
}else if(m==4){
|
||
if(qianhounum<=50)
|
||
sprintf(tempret[n-1],"选项( %d %s )",wrongnum4,randwronganswer4);
|
||
else
|
||
sprintf(tempret[n-1],"选项( %s %d )",randwronganswer4,wrongnum4);
|
||
m = 5;
|
||
}
|
||
}
|
||
}
|
||
int windowtype = 0;
|
||
int selecttype = RAND(1,100);
|
||
if(selecttype<=30){
|
||
sprintf(buf,"%d|%d",rightnum,meindex);
|
||
windowtype = WINDOW_MESSAGETYPE_MESSAGEANDLINEINPUT;
|
||
}else{
|
||
sprintf(buf,"%d|%d",randnum1,meindex);
|
||
windowtype = WINDOW_MESSAGETYPE_SELECT;
|
||
}
|
||
CHAR_setWorkChar(talkerindex, CHAR_WORKRANDMSG, buf);
|
||
int fd = getfdFromCharaIndex( talkerindex );
|
||
sprintf(buf,"%s\n%s\n%s\n%s\n%s\n%s\n输入正确答案括号内的5位数字或者点选答案",randquestion,tempret[0],tempret[1],tempret[2],tempret[3],tempret[4]);
|
||
lssproto_WN_send( fd, windowtype,
|
||
WINDOW_BUTTONTYPE_OK,
|
||
CHAR_WINDOWTYPE_NPCENEMY_RAND_MSG,
|
||
-1,
|
||
buf);
|
||
CHAR_setWorkInt(talkerindex,CHAR_WORKLUANPCINT,0);
|
||
}
|
||
if(randwrong<=0){
|
||
sprintf(tempbuff,"1-%d-%d",randtype,timep);
|
||
}else{
|
||
sprintf(tempbuff,"%d-%d-%d",randwrong*3,randtype,timep);
|
||
}
|
||
CHAR_setChar(talkerindex,CHAR_RANDTYPE,tempbuff);
|
||
return;
|
||
}
|
||
NPC_NPCEnemy_Encount( meindex, talkerindex, 1);
|
||
}
|
||
}
|
||
|
||
int NPC_NPCEnemy_Encount( int meindex, int charaindex, int mode)
|
||
{
|
||
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
|
||
char buf[512];
|
||
BOOL flg = TRUE;
|
||
int battlemax = getBattlenum();
|
||
int i;
|
||
if( CHAR_getInt( meindex, CHAR_BASEIMAGENUMBER) == 0 ) {
|
||
return FALSE;
|
||
}
|
||
if( mode == 0 ) {
|
||
if( CHAR_getWorkInt( meindex, CHAR_WORK_ENCOUNTTYPE) == 1 ) {
|
||
flg = FALSE;
|
||
}
|
||
}else if( mode == 1 ) {
|
||
if( CHAR_getWorkInt( meindex, CHAR_WORK_ENCOUNTTYPE) == 0 ) {
|
||
flg = FALSE;
|
||
}
|
||
}
|
||
|
||
NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));
|
||
|
||
if( !flg) {
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, "deniedmsg", buf, sizeof( buf)) != NULL ) {
|
||
CHAR_talkToCliAndParty( charaindex, meindex ,buf , CHAR_COLORYELLOW );
|
||
}
|
||
return FALSE;
|
||
}
|
||
flg = FALSE;
|
||
while( 1 ) {
|
||
char buf[1024];
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, "item", buf, sizeof( buf)) != NULL ) {
|
||
char data[128];
|
||
BOOL found = FALSE;
|
||
|
||
for( i = 0; i < CHAR_MAXITEMHAVE; i ++ ) {
|
||
int j;
|
||
int itemid;
|
||
int ret = getStringFromIndexWithDelim( buf,",", i + 1,data, sizeof(data));
|
||
if( ret == FALSE)
|
||
break;
|
||
found = FALSE;
|
||
itemid = atoi( data);
|
||
for( j = 0; j < CHAR_MAXITEMHAVE; j ++ ) {
|
||
int itemindex = CHAR_getItemIndex( charaindex, j);
|
||
if( ITEM_CHECKINDEX( itemindex)) {
|
||
if( ITEM_getInt( itemindex, ITEM_ID) == itemid ) {
|
||
found = TRUE;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
if( !found )
|
||
break;
|
||
}
|
||
if( !found )
|
||
break;
|
||
}
|
||
#ifdef _ADD_NOITEM_BATTLE
|
||
if(NPC_Util_GetStrFromStrWithDelim(argstr,"noitem",buf,sizeof(buf)) != NULL){
|
||
char data[128];
|
||
BOOL found = FALSE;
|
||
|
||
for(i=0;i<CHAR_MAXITEMHAVE;i++){
|
||
int j;
|
||
int itemid;
|
||
int ret = getStringFromIndexWithDelim(buf,",",i + 1,data,sizeof(data));
|
||
if(ret == FALSE) break;
|
||
found = TRUE;
|
||
itemid = atoi(data);
|
||
for(j=0;j<CHAR_MAXITEMHAVE;j++){
|
||
int itemindex = CHAR_getItemIndex(charaindex,j);
|
||
if(ITEM_CHECKINDEX( itemindex)){
|
||
if(ITEM_getInt(itemindex,ITEM_ID) == itemid){
|
||
found = FALSE;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
if(!found) break;
|
||
}
|
||
if(!found) break;
|
||
}
|
||
#endif
|
||
|
||
{
|
||
char data[256];
|
||
|
||
BOOL Evflg=TRUE;
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, "B_evend", buf, sizeof( buf)) != NULL ) {
|
||
int i=1, event=-1;;
|
||
while( getStringFromIndexWithDelim( buf,",", i, data, sizeof( data)) ){
|
||
i++;
|
||
event=atoi( data);
|
||
if( NPC_EventCheckFlg( charaindex, event) == FALSE ) {
|
||
Evflg = FALSE;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
if( Evflg == FALSE )
|
||
break;
|
||
i=1;
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, "B_evnow", buf, sizeof( buf)) != NULL ) {
|
||
int i=1, event=-1;;
|
||
while( getStringFromIndexWithDelim( buf,",", i, data, sizeof( data)) ){
|
||
i++;
|
||
event=atoi( data);
|
||
if( NPC_NowEventCheckFlg( charaindex, event) == FALSE ) {
|
||
Evflg = FALSE;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
if( Evflg == FALSE )
|
||
break;
|
||
}
|
||
|
||
if( CHAR_getWorkInt( meindex, CHAR_WORK_ONEBATTLE ) == 1 ) {
|
||
for( i = 0; i < battlemax; i ++ ) {
|
||
if( BattleArray[i].use ) {
|
||
if( BattleArray[i].createindex == meindex ) {
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
if( i != battlemax ) {
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, "alreadymsg", buf, sizeof( buf))!= NULL )
|
||
{
|
||
CHAR_talkToCliAndParty( charaindex, meindex ,buf , CHAR_COLORYELLOW );
|
||
}
|
||
return FALSE;
|
||
}
|
||
}
|
||
|
||
#ifdef _NPCENEMY_1
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, "partynum", buf, sizeof( buf))!= NULL ) {
|
||
if( CHAR_getWorkInt( charaindex, (atoi(buf)-1) + CHAR_WORKPARTYINDEX1) == -1 ) {
|
||
char partymsg[256];
|
||
sprintf(partymsg,"您的队伍人数少于%d人,无法继续!",atoi(buf));
|
||
CHAR_talkToCliAndParty( charaindex, meindex ,partymsg, CHAR_COLORYELLOW );
|
||
return FALSE;
|
||
}
|
||
}
|
||
#endif
|
||
flg = TRUE;
|
||
break;
|
||
}
|
||
|
||
if( flg ) {
|
||
/* 阂及凛反 骰允月 */
|
||
if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE) != CHAR_PARTY_CLIENT) {
|
||
char config[32];
|
||
snprintf( config, sizeof( config), "askbattlemsg1");
|
||
/* 爵 互铵引月蟆卞撙 丢永本□斥 */
|
||
|
||
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, config, buf, sizeof( buf))!= NULL )
|
||
{
|
||
int len = strlen( buf);
|
||
char escapebuf[1024];
|
||
int fd = getfdFromCharaIndex( charaindex);
|
||
char buf2[256];
|
||
/* askbattlemsg? 互丐木壬 醒垫卞允月 "\n"戊□玉毛 木月)*/
|
||
for( i = 2; i < 7; i ++ ) {
|
||
snprintf( config, sizeof( config), "askbattlemsg%d", i);
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, config, buf2, sizeof( buf2))!= NULL )
|
||
{
|
||
strcpysafe( &buf[len], sizeof( buf)-len, "\n" );
|
||
len++;
|
||
strcpysafe( &buf[len], sizeof( buf)-len, buf2 );
|
||
len += strlen( buf2);
|
||
if( len >= sizeof( buf) ) {
|
||
print( "buffer over\n");
|
||
return FALSE;
|
||
}
|
||
}
|
||
else {
|
||
strcpysafe( &buf[len], sizeof( buf)-len, "\n" );
|
||
len++;
|
||
if( len >= sizeof( buf) ) {
|
||
print( "buffer over\n");
|
||
return FALSE;
|
||
}
|
||
}
|
||
}
|
||
|
||
if( fd != -1 ) {
|
||
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
|
||
WINDOW_BUTTONTYPE_YESNO,
|
||
CHAR_WINDOWTYPE_NPCENEMY_START,
|
||
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
|
||
makeEscapeString( buf, escapebuf,sizeof(escapebuf)));
|
||
}
|
||
/* 仇仇分仃 卞伉正□件 */
|
||
return FALSE;
|
||
}else {
|
||
/* 爵 卞 日六月 */
|
||
flg = NPC_NPCEnemy_BattleIn( meindex, charaindex);
|
||
}
|
||
}
|
||
}
|
||
if( !flg) {
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, "deniedmsg", buf, sizeof( buf))!= NULL )
|
||
{
|
||
CHAR_talkToCliAndParty( charaindex, meindex ,buf , CHAR_COLORYELLOW );
|
||
}
|
||
}
|
||
return flg;
|
||
}
|
||
|
||
int NPC_NPCEnemy_Dying( int battleindex, int meindex )
|
||
{
|
||
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
|
||
char buf[64];
|
||
int i,toindex=-1;
|
||
int tmp=-1;
|
||
|
||
if( !CHAR_CHECKINDEX( meindex)) {
|
||
return FALSE;
|
||
}
|
||
NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));
|
||
|
||
#ifdef _NEW_WARPMAN
|
||
if( strstr( argstr, "NEWNPCENEMY") ) {
|
||
}else {
|
||
#endif
|
||
/* 蝇 及陲太 */
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, "endmsg", buf, sizeof( buf)) != NULL ) {
|
||
for( i = 0; i < 5; i ++ ) {
|
||
/* 爵 卞辅笛仄化中月蝈够卞丢永本□斥 */
|
||
int toindex = BattleArray[battleindex].Side[0].Entry[i].charaindex;
|
||
if( CHAR_CHECKINDEX( toindex) ) {
|
||
CHAR_talkToCli( toindex, meindex ,buf , CHAR_COLORYELLOW );
|
||
}
|
||
}
|
||
|
||
}
|
||
#ifdef _NEW_WARPMAN
|
||
}
|
||
#endif
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, "steal", buf, sizeof( buf)) != NULL ) {
|
||
print("\n steal TRUE !!");
|
||
if( atoi( buf) == 1 ) {
|
||
int charaindex = BattleArray[battleindex].Side[0].Entry[0].charaindex;
|
||
NPC_NPCEnemy_StealItem( argstr, meindex, charaindex);
|
||
}
|
||
|
||
}
|
||
#ifdef _ALLDOMAN // (不可开) Syu ADD 排行榜NPC
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, "herobattlefield", buf, sizeof( buf)) != NULL ) {
|
||
int charaindex = BattleArray[battleindex].Side[0].Entry[0].charaindex;
|
||
CHAR_setWorkInt ( charaindex , CHAR_WORKHEROFLOOR , atoi ( buf ) ) ;
|
||
// Syu ADD
|
||
if ( atoi ( buf ) > CHAR_getInt ( charaindex , CHAR_HEROFLOOR ) )
|
||
CHAR_setInt ( charaindex , CHAR_HEROFLOOR , atoi( buf ) ) ;
|
||
}
|
||
|
||
#endif
|
||
tmp = NPC_Util_GetNumFromStrWithDelim( argstr, "dieact");
|
||
if( tmp != 1 )
|
||
tmp = 0;
|
||
CHAR_setWorkInt( meindex, CHAR_WORK_DIEACT, tmp);
|
||
|
||
if( CHAR_getWorkInt( meindex, CHAR_WORK_DIEACT) == 0 ) {
|
||
Char *ch;
|
||
CHAR_setInt( meindex, CHAR_BASEIMAGENUMBER, 0);
|
||
print("bbi---->bi10");
|
||
CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX));
|
||
|
||
CHAR_setWorkInt( meindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_ALTERRATIVE);
|
||
MAP_sendAroundMapdata( CHAR_getInt( meindex, CHAR_FLOOR),
|
||
CHAR_getInt( meindex, CHAR_X),
|
||
CHAR_getInt( meindex, CHAR_Y));
|
||
ch = CHAR_getCharPointer( meindex);
|
||
if( ch != NULL ) {
|
||
strcpysafe( ch->charfunctable[CHAR_LOOPFUNC].string,
|
||
sizeof( ch->charfunctable[CHAR_LOOPFUNC]),
|
||
"NPCEnemyLoop");
|
||
CHAR_constructFunctable( meindex);
|
||
CHAR_setInt( meindex, CHAR_LOOPINTERVAL, 5000);
|
||
CHAR_setWorkInt( meindex, CHAR_WORK_DIETIME, NowTime.tv_sec);
|
||
#ifdef _NPCENEMY_1
|
||
char token1[512];
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, "winmsg", token1, sizeof( token1)) != NULL ) {
|
||
int i;
|
||
int playernum = CHAR_getPlayerMaxNum();
|
||
for( i = 0 ; i < playernum ; i++) {
|
||
if( CHAR_getCharUse(i) != FALSE ) {
|
||
CHAR_talkToCli( i, -1, token1, CHAR_COLORRED);
|
||
}
|
||
}
|
||
}
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, "GetRandItem", buf, sizeof( buf))!= NULL ){
|
||
int j=1, rand_cnt=1;
|
||
char buf2[256];
|
||
while( getStringFromIndexWithDelim( buf , "," , j, buf2, sizeof( buf2)) != FALSE ){
|
||
j++;
|
||
rand_cnt++;
|
||
}
|
||
for( i = 0; i < 5; i ++ ) {
|
||
int toindex = BattleArray[battleindex].Side[0].Entry[i].charaindex;
|
||
if( CHAR_CHECKINDEX( toindex) ) {
|
||
NPC_ActionTreasureRandItemGet( meindex, toindex, rand_cnt, buf);
|
||
}
|
||
}
|
||
}
|
||
#endif
|
||
}else {
|
||
print( "NPCENEMY:err\n");
|
||
}
|
||
}else {
|
||
for( i = 0; i < 5; i ++ ) {
|
||
toindex = BattleArray[battleindex].Side[0].Entry[i].charaindex;
|
||
if( CHAR_CHECKINDEX( toindex) ) {
|
||
#ifdef _NEW_WARPMAN
|
||
if( strstr( argstr, "NEWNPCENEMY") ) {
|
||
BOOL Party=TRUE;
|
||
if( NPC_NPCEnemy_CheckFree( meindex, toindex , &Party) == FALSE ) {
|
||
continue;
|
||
}
|
||
if( Party == TRUE ) {
|
||
}else {
|
||
if( CHAR_getWorkInt( toindex, CHAR_WORKPARTYMODE ) == CHAR_PARTY_LEADER ) {
|
||
if( NPC_WarpAllMsg( meindex, toindex ) == TRUE ) {
|
||
return TRUE;
|
||
}
|
||
}
|
||
continue;
|
||
}
|
||
}
|
||
CHAR_DischargeParty( toindex, 0); // 拆队
|
||
CHAR_warpToSpecificPoint( toindex,
|
||
CHAR_getWorkInt( meindex, CHAR_WORK_WARP_FLOOR),
|
||
CHAR_getWorkInt( meindex, CHAR_WORK_WARP_X),
|
||
CHAR_getWorkInt( meindex, CHAR_WORK_WARP_Y)
|
||
);
|
||
|
||
#else
|
||
CHAR_warpToSpecificPoint( toindex,
|
||
CHAR_getWorkInt( meindex, CHAR_WORK_WARP_FLOOR),
|
||
CHAR_getWorkInt( meindex, CHAR_WORK_WARP_X),
|
||
CHAR_getWorkInt( meindex, CHAR_WORK_WARP_Y)
|
||
);
|
||
#endif
|
||
#ifdef _NPC_REPLACEMENT
|
||
Check_EnemyWarpMe( meindex, argstr);
|
||
#endif
|
||
}
|
||
}
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
void NPC_NPCEnemyLoop( int meindex )
|
||
{
|
||
|
||
if( NowTime.tv_sec > CHAR_getWorkInt( meindex, CHAR_WORK_DIETIME) +
|
||
CHAR_getWorkInt( meindex, CHAR_WORK_REVIVALTIME)){
|
||
Char *ch;
|
||
CHAR_setInt( meindex, CHAR_BASEIMAGENUMBER, CHAR_getWorkInt( meindex, CHAR_WORK_BASEIMGBAK));
|
||
print("bbi---->bi11");
|
||
|
||
CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX));
|
||
CHAR_setWorkInt( meindex, CHAR_WORKEVENTTYPE, CHAR_EVENT_ENEMY);
|
||
#ifdef _NPCENEMY_1
|
||
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
|
||
NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));
|
||
char token1[1024];
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, "npcwarp", token1, sizeof( token1)) != NULL ) {
|
||
char token[32];
|
||
char token2[32];
|
||
char buf2[32];
|
||
int floor,x,y,x1,x2,y1,y2;
|
||
int ret;
|
||
int cnt;
|
||
int dcnt = 1;
|
||
|
||
/*--蜇箕及伐□皿及赐 --*/
|
||
//cnt = CHAR_getWorkInt(meindex,CHAR_NPCWORKINT4);
|
||
while(getStringFromIndexWithDelim(token1,",", dcnt,buf2,sizeof(buf2) )
|
||
!=FALSE ){
|
||
dcnt++;
|
||
}
|
||
cnt = RAND(1,dcnt);
|
||
//printf("\ndcnt=%d,cnt=%d\n",dcnt,cnt);
|
||
|
||
if(getStringFromIndexWithDelim(token1,",", cnt,buf2,sizeof(buf2)) !=FALSE )
|
||
{
|
||
cnt++;
|
||
ret=getStringFromIndexWithDelim(buf2,".", 1,token,sizeof(token));
|
||
if( ret == FALSE ) {
|
||
floor = CHAR_getInt(meindex,CHAR_FLOOR);
|
||
}
|
||
floor = atoi( token );
|
||
|
||
ret=getStringFromIndexWithDelim(buf2,".", 2,token,sizeof(token));
|
||
if( ret == FALSE ){
|
||
x = CHAR_getInt(meindex,CHAR_X);
|
||
}else{
|
||
ret=getStringFromIndexWithDelim(token,"-", 1,token2,sizeof(token2));
|
||
if( ret == FALSE ){
|
||
x = atoi( token );
|
||
}else{
|
||
x1=atoi(token2);
|
||
ret=getStringFromIndexWithDelim(token,"-", 2,token2,sizeof(token2));
|
||
if( ret == FALSE ){
|
||
x2=x1;
|
||
}else{
|
||
x2=atoi(token2);
|
||
}
|
||
x = RAND(x1,x2);
|
||
}
|
||
}
|
||
//x = atoi( token );
|
||
|
||
ret=getStringFromIndexWithDelim(buf2,".", 3,token,sizeof(token));
|
||
if( ret == FALSE ) {
|
||
y = CHAR_getInt(meindex,CHAR_Y);
|
||
}else{
|
||
ret=getStringFromIndexWithDelim(token,"-", 1,token2,sizeof(token2));
|
||
if( ret == FALSE ){
|
||
y = atoi( token );
|
||
}else{
|
||
y1=atoi(token2);
|
||
ret=getStringFromIndexWithDelim(token,"-", 2,token2,sizeof(token2));
|
||
if( ret == FALSE ){
|
||
y2=y1;
|
||
}else{
|
||
y2=atoi(token2);
|
||
}
|
||
y = RAND(y1,y2);
|
||
}
|
||
}
|
||
//y = atoi( token );
|
||
|
||
//CHAR_setInt(meindex,CHAR_NPCWORKINT4, cnt);
|
||
//CHAR_warpToSpecificPoint(meindex, floor, x, y);
|
||
//CHAR_setInt(meindex,CHAR_FLOOR,floor);
|
||
//CHAR_setInt(meindex,CHAR_X,x);
|
||
//CHAR_setInt(meindex,CHAR_Y,y);
|
||
CHAR_warpToSpecificPoint(meindex,floor,x,y);
|
||
}
|
||
}
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, "allmsg", token1, sizeof( token1)) != NULL ) {
|
||
int i;
|
||
int playernum = CHAR_getPlayerMaxNum();
|
||
for( i = 0 ; i < playernum ; i++) {
|
||
if( CHAR_getCharUse(i) != FALSE ) {
|
||
CHAR_talkToCli( i, -1, token1, CHAR_COLORRED);
|
||
}
|
||
}
|
||
}
|
||
#endif
|
||
MAP_sendAroundMapdata( CHAR_getInt( meindex, CHAR_FLOOR),
|
||
CHAR_getInt( meindex, CHAR_X),
|
||
CHAR_getInt( meindex, CHAR_Y));
|
||
ch = CHAR_getCharPointer( meindex);
|
||
if( ch != NULL ) {
|
||
strcpysafe( ch->charfunctable[CHAR_LOOPFUNC].string,
|
||
sizeof( ch->charfunctable[CHAR_LOOPFUNC]), "");
|
||
CHAR_constructFunctable( meindex);
|
||
// CHAR_setInt( meindex, CHAR_LOOPINTERVAL, 0);
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
BOOL NPC_NPCEnemy_BattleIn( int meindex, int charaindex)
|
||
{
|
||
int gym;
|
||
int ret;
|
||
char buf[256];
|
||
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
|
||
|
||
memset( argstr, 0, sizeof( argstr));
|
||
NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));
|
||
gym = NPC_Util_GetNumFromStrWithDelim( argstr, "gym");
|
||
|
||
#ifdef _EMENY_CHANCEMAN
|
||
{
|
||
int masterindex=-1;
|
||
masterindex = NPC_EmenyChanceCheck( meindex, charaindex, argstr);
|
||
if( CHAR_CHECKINDEX( masterindex)){
|
||
charaindex = masterindex;
|
||
}else {
|
||
return TRUE;
|
||
}
|
||
}
|
||
#endif
|
||
#ifdef _WARNPC_CTRL
|
||
int sameip = NPC_Util_GetNumFromStrWithDelim( argstr, "sameip");
|
||
if(sameip == -1)
|
||
sameip = 0;
|
||
CHAR_setWorkInt( charaindex, CHAR_WORKNPCBATTLESAMEIP, sameip);
|
||
if(CHAR_getWorkInt(charaindex,CHAR_WORKNPCBATTLESAMEIP)>0){
|
||
int partyi;
|
||
unsigned ip=CONNECT_get_userip(getfdFromCharaIndex(charaindex));
|
||
unsigned teseip = ip;
|
||
unsigned toip;
|
||
int a, b, c, d,ipcnt=1;
|
||
char ipstr[32];
|
||
a=(teseip % 0x100); teseip=teseip / 0x100;
|
||
b=(teseip % 0x100); teseip=teseip / 0x100;
|
||
c=(teseip % 0x100); teseip=teseip / 0x100;
|
||
d=(teseip % 0x100);
|
||
sprintf(ipstr,"%d.%d.%d.%d",a,b,c,d);
|
||
if(strcmp(ipstr,getNoAttIp(0))==0 || strcmp(ipstr,getNoAttIp(1))==0 || strcmp(ipstr,getNoAttIp(2))==0 || strcmp(ipstr,getNoAttIp(3))==0 || strcmp(ipstr,getNoAttIp(4))==0){
|
||
}
|
||
else{
|
||
if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_NONE ) {
|
||
}else{
|
||
for( partyi = 0; partyi < CHAR_PARTYMAX; partyi ++ ) {
|
||
int index = CHAR_getWorkInt( charaindex, partyi + CHAR_WORKPARTYINDEX1);
|
||
if( CHAR_CHECKINDEX(index)) {
|
||
toip = CONNECT_get_userip(getfdFromCharaIndex(index));
|
||
if(ip==toip){
|
||
ipcnt++;
|
||
if(ipcnt>sameip){
|
||
CHAR_talkToCli( charaindex, -1, "同IP组队数已达上限,无法开战。", CHAR_COLORYELLOW);
|
||
return FALSE;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
#endif
|
||
if( gym > 0 ){
|
||
ret = BATTLE_CreateVsEnemy( charaindex, 2, meindex);
|
||
}else{
|
||
ret = BATTLE_CreateVsEnemy( charaindex, 1, meindex);
|
||
}
|
||
if( ret == 0 ) {
|
||
#ifdef _WARNPC_CTRL
|
||
int tmp = NPC_Util_GetNumFromStrWithDelim( argstr, "noquckwar");
|
||
if( tmp == -1 )
|
||
tmp = 0;
|
||
CHAR_setWorkInt( meindex, CHAR_WORK_BATTLEINGTIME, tmp);
|
||
if(CHAR_getWorkInt(meindex,CHAR_WORK_BATTLEINGTIME)>0){
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKNPCENEMYBATTLETIME,1);
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKNPCENEMYTIME,CHAR_getWorkInt(meindex,CHAR_WORK_BATTLEINGTIME));
|
||
if(CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE){
|
||
int i;
|
||
for( i = 1; i < CHAR_PARTYMAX; i ++ ) {
|
||
if( CHAR_getWorkInt( charaindex, i + CHAR_WORKPARTYINDEX1) > -1 ) {
|
||
CHAR_setWorkInt(CHAR_getWorkInt( charaindex, i + CHAR_WORKPARTYINDEX1),CHAR_WORKNPCENEMYBATTLETIME,1);
|
||
CHAR_setWorkInt(CHAR_getWorkInt( charaindex, i + CHAR_WORKPARTYINDEX1),CHAR_WORKNPCENEMYTIME,CHAR_getWorkInt(meindex,CHAR_WORK_BATTLEINGTIME));
|
||
}
|
||
}
|
||
}
|
||
}
|
||
#endif
|
||
BattleArray[CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX)].WinFunc = NPC_NPCEnemy_Dying;
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, "startmsg", buf, sizeof( buf)) != NULL ){
|
||
CHAR_talkToCliAndParty( charaindex, meindex ,buf , CHAR_COLORYELLOW );
|
||
}
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, "steal", buf, sizeof( buf))!= NULL ){
|
||
if( atoi( buf) == 0 ) {
|
||
NPC_NPCEnemy_StealItem( argstr, meindex, charaindex);
|
||
}
|
||
}
|
||
#ifdef _NPCENEMY_1
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, "help", buf, sizeof( buf)) != NULL ){
|
||
CHAR_setWorkInt(charaindex,CHAR_WORKBATTLEHELP,1);
|
||
BattleArray[CHAR_getWorkInt( charaindex,
|
||
CHAR_WORKBATTLEINDEX)].Side[
|
||
CHAR_getWorkInt( charaindex,
|
||
CHAR_WORKBATTLESIDE)].flg |= BSIDE_FLG_HELP_OK;
|
||
int i;
|
||
for( i = 0; i < 5; i ++ ) {
|
||
int toindex = BattleArray[CHAR_getWorkInt(
|
||
charaindex, CHAR_WORKBATTLEINDEX)].Side[
|
||
CHAR_getWorkInt( charaindex,
|
||
CHAR_WORKBATTLESIDE)].Entry[i].charaindex;
|
||
if( CHAR_CHECKINDEX( toindex)) {
|
||
int tofd = getfdFromCharaIndex( toindex );
|
||
if( tofd != -1 ) {
|
||
CHAR_setWorkInt(toindex,CHAR_WORKBATTLEHELP,1);
|
||
lssproto_HL_send( tofd, TRUE);
|
||
}
|
||
/* 丢永本□斥霜耨 */
|
||
CHAR_sendBattleEffect( toindex, ON);
|
||
}
|
||
}
|
||
char floorname[32];
|
||
int floorx,floory;
|
||
getStringFromIndexWithDelim( MAP_getfloorShowstring(CHAR_getInt(meindex,CHAR_FLOOR)),"|", 1,floorname, sizeof(floorname));
|
||
floorx = CHAR_getInt(meindex,CHAR_X);
|
||
floory = CHAR_getInt(meindex,CHAR_Y);
|
||
int playernum = CHAR_getPlayerMaxNum();
|
||
char token1[256];
|
||
sprintf(token1,"勇士们,已有人在%s《%d,%d》找到炼狱使者,速来增援。",floorname,floorx,floory);
|
||
for( i = 0 ; i < playernum ; i++) {
|
||
if( CHAR_getCharUse(i) != FALSE ) {
|
||
CHAR_talkToCli( i, -1, token1, CHAR_COLORRED);
|
||
}
|
||
}
|
||
}
|
||
#endif
|
||
}
|
||
return ( ret == 0 ) ?TRUE:FALSE ;
|
||
}
|
||
|
||
void NPC_NPCEnemyWindowTalked( int meindex, int talkerindex, int seqno, int select, char *data)
|
||
{
|
||
if( seqno == CHAR_WINDOWTYPE_NPCENEMY_START) {
|
||
if( select == WINDOW_BUTTONTYPE_YES) {
|
||
NPC_NPCEnemy_BattleIn( meindex, talkerindex);
|
||
}
|
||
}
|
||
}
|
||
|
||
static int NPC_NPCEnemy_StealItem( char *argstr, int meindex, int charaindex)
|
||
{
|
||
char itembuf[1024];
|
||
if( NPC_Util_GetStrFromStrWithDelim( argstr, "item", itembuf, sizeof( itembuf))!= NULL )
|
||
{
|
||
char data[128];
|
||
int delitemgroup[CHAR_MAXITEMHAVE];
|
||
int found = 0;
|
||
int i;
|
||
for( i = 0; i < CHAR_MAXITEMHAVE; i ++ ) {
|
||
int j;
|
||
int itemid;
|
||
int ret = getStringFromIndexWithDelim( itembuf,",", i + 1,data, sizeof(data));
|
||
if( ret == FALSE) {
|
||
break;
|
||
}
|
||
itemid = atoi( data);
|
||
for( j = 0; j < CHAR_MAXITEMHAVE; j ++ ) {
|
||
int itemindex = CHAR_getItemIndex( charaindex, j);
|
||
if( ITEM_CHECKINDEX( itemindex)){
|
||
if( ITEM_getInt( itemindex, ITEM_ID) == itemid ){
|
||
CHAR_setItemIndex( charaindex, j, -1);
|
||
ITEM_endExistItemsOne( itemindex);
|
||
delitemgroup[found] = j;
|
||
found ++;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
if( !found ) break;
|
||
}
|
||
CHAR_sendItemData( charaindex, delitemgroup, found);
|
||
}
|
||
else {
|
||
print( "NPCENEMY:奇怪\n");
|
||
return FALSE;
|
||
}
|
||
return TRUE;
|
||
}
|
||
|
||
#ifdef _NEW_WARPMAN
|
||
static BOOL NPC_NPCEnemy_CheckFree( int meindex, int toindex, BOOL *Party)
|
||
{
|
||
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
|
||
char buf1[1024],buf2[256],buf3[256],buf4[256];
|
||
char token[256];
|
||
char temp1[16];
|
||
int talkNo = 1;
|
||
int point=1;
|
||
|
||
int i=0,type=0;
|
||
|
||
struct tagWarpPoint {
|
||
int floor;
|
||
int x;
|
||
int y;
|
||
}AllWarPoint[]={
|
||
{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
|
||
{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
|
||
{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0},
|
||
};
|
||
|
||
if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL) {
|
||
print("GetArgStrErr");
|
||
return FALSE;
|
||
}
|
||
if( (strstr( npcarg,"NEWNPCENEMY") == NULL) && (strstr( npcarg,"OVER") == NULL) ) {
|
||
return FALSE;
|
||
}else {
|
||
}
|
||
|
||
while( getStringFromIndexWithDelim( npcarg,"OVER",talkNo,buf1,sizeof( buf1)) != FALSE ) {
|
||
|
||
talkNo++;
|
||
sprintf(temp1,"NEWEVENT");
|
||
if( strstr( buf1, temp1) != NULL) {
|
||
if( NPC_Util_GetStrFromStrWithDelim( buf1, "FREE", buf2, sizeof( buf2) ) == FALSE ) {
|
||
continue;
|
||
}
|
||
if( NPC_ActionPassCheck( meindex, toindex, buf2) == FALSE ) {
|
||
continue;
|
||
}
|
||
|
||
if( NPC_Util_GetStrFromStrWithDelim( buf1, "endmsg", token, sizeof( token)) != NULL ) {
|
||
CHAR_talkToCli( toindex, meindex ,token , CHAR_COLORYELLOW );
|
||
}
|
||
#ifdef _ALLDOMAN // (不可开) Syu ADD 排行榜NPC
|
||
if( NPC_Util_GetStrFromStrWithDelim( buf1, "herobattlefield", token, sizeof( token)) != NULL ) {
|
||
CHAR_setWorkInt ( toindex , CHAR_WORKHEROFLOOR , atoi ( token ) ) ;
|
||
if ( atoi ( token ) > CHAR_getInt ( toindex , CHAR_HEROFLOOR ) )
|
||
CHAR_setInt ( toindex , CHAR_HEROFLOOR , atoi( token ) ) ;
|
||
|
||
}
|
||
#endif
|
||
|
||
if( NPC_Util_GetStrFromStrWithDelim( buf1, "WARP", buf2, sizeof( buf2) ) == FALSE ){
|
||
continue;
|
||
}else {//RAND arraysizeof AllWarPoint
|
||
while( getStringFromIndexWithDelim( buf2, ";", point, buf3,sizeof( buf3)) != FALSE ) {
|
||
point++;
|
||
getStringFromIndexWithDelim( buf3, ",", 1, buf4, sizeof( buf4));
|
||
AllWarPoint[i].floor = atoi( buf4);
|
||
getStringFromIndexWithDelim( buf3, ",", 2, buf4, sizeof( buf4));
|
||
AllWarPoint[i].x = atoi( buf4);
|
||
getStringFromIndexWithDelim( buf3, ",", 3, buf4, sizeof( buf4));
|
||
AllWarPoint[i].y = atoi( buf4);
|
||
i++;
|
||
if( i >= arraysizeof( AllWarPoint) )
|
||
break;
|
||
}
|
||
type = RAND( 0, i-1);
|
||
if( AllWarPoint[type].floor <= 0 || type > arraysizeof( AllWarPoint)-1) {
|
||
type = 0;
|
||
}
|
||
CHAR_setWorkInt( meindex, CHAR_WORK_WARP_FLOOR, AllWarPoint[type].floor );
|
||
CHAR_setWorkInt( meindex, CHAR_WORK_WARP_X, AllWarPoint[type].x );
|
||
CHAR_setWorkInt( meindex, CHAR_WORK_WARP_Y, AllWarPoint[type].y );
|
||
|
||
}
|
||
if( NPC_Util_GetStrFromStrWithDelim( buf1, "CHECKPARTY", buf4, sizeof( buf4)) != NULL ) {
|
||
if( strstr( buf4, "FALSE") != NULL ) {
|
||
*Party = FALSE;
|
||
}
|
||
}
|
||
if( *Party == TRUE ) {
|
||
Action_RunDoEventAction( meindex, toindex, buf1);
|
||
}
|
||
return TRUE;
|
||
}
|
||
}
|
||
return FALSE;
|
||
}
|
||
|
||
|
||
BOOL NPCEnemy_CheckFree( int meindex, int talker, char *buf)
|
||
{
|
||
char buff2[256];
|
||
char buff3[128];
|
||
int i=1,j=1;
|
||
int loop=0;
|
||
while( getStringFromIndexWithDelim(buf,",",i,buff2,sizeof(buff2)) !=FALSE ) {
|
||
i++;
|
||
if(strstr(buff2,"&")!=NULL){
|
||
j=1;
|
||
loop=0;
|
||
while( getStringFromIndexWithDelim(buff2,"&",j,buff3,sizeof(buff3)) !=FALSE ) {
|
||
j++;
|
||
if(NPCEnemy_BSCheck(meindex,talker,buff3)==FALSE) {
|
||
loop=1;
|
||
break;
|
||
}
|
||
}
|
||
if(loop==0) {
|
||
CHAR_setWorkInt( talker, CHAR_WORKWARPCHECK, TRUE );
|
||
return TRUE;
|
||
}
|
||
}else{
|
||
if( NPCEnemy_BSCheck( meindex, talker, buff2) == TRUE ){
|
||
CHAR_setWorkInt( talker, CHAR_WORKWARPCHECK, TRUE );
|
||
return TRUE;
|
||
}
|
||
}
|
||
}
|
||
CHAR_setWorkInt( talker, CHAR_WORKWARPCHECK, FALSE );
|
||
return FALSE;
|
||
}
|
||
|
||
BOOL NPCEnemy_BSCheck(int meindex,int talker,char* buf)
|
||
{
|
||
char buff2[128];
|
||
int kosuu,temp=-1,flg=0;
|
||
char buff1[128],buff3[128];
|
||
if(strstr( buf, "-") != NULL) {
|
||
//buff3为抓宠物ID
|
||
getStringFromIndexWithDelim( buf, "-", 2, buff3, sizeof(buff3));
|
||
temp = atoi( buff3);
|
||
getStringFromIndexWithDelim( buf, "-", 1, buff1, sizeof(buff1));
|
||
strcpy( buf, buff1);
|
||
}
|
||
|
||
if(strstr( buf, "<") != NULL){
|
||
getStringFromIndexWithDelim( buf, "<", 2, buff2, sizeof(buff2));
|
||
kosuu = atoi( buff2);
|
||
getStringFromIndexWithDelim( buf, "<", 1, buff2, sizeof(buff2));
|
||
|
||
if(NPCEnemy_FreeIfCheck( meindex, talker, buff2, kosuu, 1, temp)==TRUE){
|
||
return TRUE;
|
||
}
|
||
}else if(strstr( buf, ">") != NULL){
|
||
getStringFromIndexWithDelim( buf, ">", 2, buff2, sizeof(buff2));
|
||
kosuu = atoi(buff2);
|
||
getStringFromIndexWithDelim( buf, ">" ,1, buff2, sizeof(buff2));
|
||
|
||
if(NPCEnemy_FreeIfCheck( meindex, talker, buff2, kosuu, 2, temp)==TRUE){
|
||
return TRUE;
|
||
}
|
||
|
||
}else if(strstr( buf, "!" ) != NULL){
|
||
getStringFromIndexWithDelim( buf, "!=", 2, buff2, sizeof(buff2));
|
||
kosuu = atoi( buff2);
|
||
getStringFromIndexWithDelim( buf, "!=", 1, buff2, sizeof(buff2));
|
||
if(NPCEnemy_FreeIfCheck( meindex, talker, buff2, kosuu, 0, temp) == TRUE){
|
||
return FALSE;
|
||
}else{
|
||
return TRUE;
|
||
}
|
||
|
||
}else if(strstr( buf, "=") != NULL){
|
||
|
||
getStringFromIndexWithDelim( buf, "=", 2, buff2, sizeof(buff2));
|
||
kosuu = atoi( buff2);
|
||
getStringFromIndexWithDelim( buf, "=", 1, buff2, sizeof(buff2));
|
||
|
||
if( strstr( buf, "PET")) {
|
||
flg = 3;
|
||
}
|
||
if(strstr( buf, "*") != NULL){
|
||
if( NPCEnemy_WarpManReduce( meindex, talker, buf)==TRUE){
|
||
return TRUE;
|
||
}
|
||
}else if(NPCEnemy_FreeIfCheck( meindex, talker, buff2, kosuu, flg, temp)==TRUE){
|
||
return TRUE;
|
||
}
|
||
}
|
||
return FALSE;
|
||
}
|
||
|
||
BOOL NPCEnemy_FreeIfCheck(int meindex,int talker,char* buf,int kosuu,int flg, int temp)
|
||
{
|
||
if(strcmp(buf,"LV")==0){
|
||
if(NPCEnemy_LevelCheck(meindex,talker,kosuu,flg)==TRUE){
|
||
return TRUE;
|
||
}
|
||
}
|
||
|
||
if( strcmp(buf,"TRANS") == 0 ) {
|
||
if( NPCEnemy_CheckTrans( meindex, talker, kosuu, flg) == TRUE )
|
||
return TRUE;
|
||
}
|
||
if( strcmp( buf, "PET") == 0 ) {
|
||
if( temp > 0 ) {
|
||
if( NPCEnemy_CheckMyPet( meindex, talker, kosuu, flg, temp) == TRUE )
|
||
return TRUE;
|
||
}else
|
||
return FALSE;
|
||
}
|
||
|
||
if(strcmp(buf,"ITEM")==0){
|
||
if(NPCEnemy_ItemCheck(meindex,talker,kosuu,flg)==TRUE){
|
||
return TRUE;
|
||
}
|
||
}
|
||
if(strcmp(buf,"ENDEV")==0){
|
||
if(NPC_EventCheckFlg( talker, kosuu)==TRUE){
|
||
return TRUE;
|
||
}
|
||
}
|
||
if(strcmp(buf,"NOWEV")==0){
|
||
if(NPC_NowEventCheckFlg( talker, kosuu)==TRUE){
|
||
return TRUE;
|
||
}
|
||
}
|
||
return FALSE;
|
||
|
||
}
|
||
|
||
BOOL NPCEnemy_WarpManReduce(int meindex,int talker,char *buf)
|
||
{
|
||
char buf2[512];
|
||
char buf3[256];
|
||
int id=0;
|
||
int i;
|
||
int itemindex;
|
||
int itemno;
|
||
int kosuu;
|
||
int cnt=0;
|
||
|
||
getStringFromIndexWithDelim(buf,"=",2,buf2,sizeof(buf2));
|
||
getStringFromIndexWithDelim(buf2,"*",1,buf3,sizeof(buf3));
|
||
itemno = atoi(buf3);
|
||
getStringFromIndexWithDelim(buf2,"*",2,buf3,sizeof(buf3));
|
||
kosuu = atoi(buf3);
|
||
|
||
for( i=0 ; i < CHAR_MAXITEMHAVE;i++ ){
|
||
itemindex=CHAR_getItemIndex( talker , i );
|
||
if( ITEM_CHECKINDEX(itemindex) ){
|
||
id=ITEM_getInt(itemindex ,ITEM_ID );
|
||
if(itemno==id){
|
||
cnt++;
|
||
if(cnt==kosuu){
|
||
return TRUE;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
return FALSE;
|
||
|
||
}
|
||
|
||
BOOL NPCEnemy_BigSmallLastCheck(int point1,int mypoint,int flg)
|
||
{
|
||
if(flg==0){
|
||
if(point1==mypoint) {
|
||
return TRUE;
|
||
}
|
||
|
||
}else if(flg==1){
|
||
if(mypoint < point1) {
|
||
return TRUE;
|
||
}
|
||
|
||
}else if(flg==2){
|
||
if(mypoint > point1) {
|
||
return TRUE;
|
||
}
|
||
}
|
||
|
||
return FALSE;
|
||
|
||
}
|
||
|
||
BOOL NPCEnemy_LevelCheck(int meindex,int talker,int level,int flg)
|
||
{
|
||
int mylevel;
|
||
mylevel=CHAR_getInt(talker,CHAR_LV);
|
||
if(NPCEnemy_BigSmallLastCheck(level,mylevel,flg)==TRUE) {
|
||
return TRUE;
|
||
}
|
||
return FALSE;
|
||
}
|
||
|
||
BOOL NPCEnemy_CheckTrans(int meindex,int talker,int trans,int flg)
|
||
{
|
||
int myTrans;
|
||
myTrans=CHAR_getInt(talker, CHAR_TRANSMIGRATION);
|
||
if( NPCEnemy_BigSmallLastCheck( trans, myTrans, flg ) == TRUE ) {
|
||
return TRUE;
|
||
}
|
||
return FALSE;
|
||
}
|
||
|
||
BOOL NPCEnemy_CheckMyPet( int meindex, int talker, int petLv, int flg, int petid)
|
||
{
|
||
int petsel,petindex=-1;
|
||
for(petsel=0 ; petsel < CHAR_MAXPETHAVE ; petsel++) {
|
||
petindex = CHAR_getCharPet( talker, petsel);
|
||
if( petindex == -1 )
|
||
continue;
|
||
if(CHAR_getInt( petindex, CHAR_PETID) != petid )
|
||
continue;
|
||
break;
|
||
}
|
||
if( petsel == CHAR_MAXPETHAVE ) {
|
||
return FALSE;
|
||
}else { //找到条件宠
|
||
switch( flg) {
|
||
case 0:
|
||
if( CHAR_getInt( petindex, CHAR_LV) != petLv )
|
||
return TRUE;
|
||
break;
|
||
case 1:
|
||
if( CHAR_getInt( petindex, CHAR_LV) < petLv )
|
||
return TRUE;
|
||
break;
|
||
case 2:
|
||
if( CHAR_getInt( petindex, CHAR_LV) > petLv )
|
||
return TRUE;
|
||
break;
|
||
case 3:
|
||
if( CHAR_getInt( petindex, CHAR_LV) == petLv )
|
||
return TRUE;
|
||
break;
|
||
}
|
||
return FALSE;
|
||
}
|
||
return FALSE;
|
||
}
|
||
|
||
BOOL NPCEnemy_ItemCheck(int meindex,int talker,int itemNo,int flg)
|
||
{
|
||
int i;
|
||
int itemindex=-1;
|
||
int id;
|
||
|
||
for( i=0;i<CHAR_MAXITEMHAVE;i++ ){
|
||
|
||
itemindex = CHAR_getItemIndex( talker , i );
|
||
if( ITEM_CHECKINDEX( itemindex) ) {
|
||
id=ITEM_getInt(itemindex ,ITEM_ID );
|
||
|
||
if( NPCEnemy_BigSmallLastCheck(itemNo,id,flg) == TRUE )
|
||
return TRUE;
|
||
}
|
||
}
|
||
return FALSE;
|
||
|
||
}
|
||
|
||
BOOL NPC_WarpAllMsg(int meindex,int toindex )
|
||
{
|
||
int fl,x,y;
|
||
int subindex=-1;
|
||
int i;
|
||
fl = CHAR_getWorkInt( meindex, CHAR_WORK_WARP_FLOOR );
|
||
x = CHAR_getWorkInt( meindex, CHAR_WORK_WARP_X );
|
||
y = CHAR_getWorkInt( meindex, CHAR_WORK_WARP_Y );
|
||
|
||
if( CHAR_getWorkInt( toindex, CHAR_WORKPARTYMODE ) != 1 )
|
||
return FALSE;
|
||
|
||
for( i = 0; i < CHAR_PARTYMAX; i ++ ){
|
||
subindex = CHAR_getWorkInt( toindex, CHAR_WORKPARTYINDEX1+i );
|
||
if( CHAR_CHECKINDEX( subindex ) == FALSE )continue;
|
||
if( fl==0 && x==0 && y==0 ) {
|
||
}else {
|
||
CHAR_warpToSpecificPoint( subindex, fl, x, y );
|
||
}
|
||
}
|
||
|
||
return TRUE;
|
||
}
|
||
#endif
|
||
|
||
|
||
|
||
void NPC_NPCEnemyWatch( int meobjindex, int objindex, CHAR_ACTION act,
|
||
int x,int y,int dir, int* opt,int optlen )
|
||
{
|
||
int born, dead;
|
||
int meindex, index;
|
||
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
|
||
|
||
if( OBJECT_getType( objindex) != OBJTYPE_CHARA) return;
|
||
index = OBJECT_getIndex( objindex);
|
||
if( !CHAR_CHECKINDEX( index) ) return;
|
||
if( CHAR_getInt( index, CHAR_WHICHTYPE) != CHAR_TYPEPLAYER) return;
|
||
meindex = OBJECT_getIndex( meobjindex);
|
||
if( !CHAR_CHECKINDEX( meindex) ) return;
|
||
|
||
if( NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg)) == NULL ){
|
||
print("WarpMan:GetArgStrErr");
|
||
return;
|
||
}
|
||
if( !strstr( npcarg,"NEWNPCENEMY") )
|
||
return;
|
||
if( NPC_getTimeData( meindex, npcarg, &born, &dead, 200) == FALSE )
|
||
return;
|
||
|
||
NPC_TimeDefineDo( meindex, born, dead, NPC_TIME_MODE);
|
||
|
||
CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX ) );
|
||
|
||
}
|
||
|
||
#ifdef _NPC_REPLACEMENT
|
||
void Check_EnemyWarpMe( int meindex, char *args )
|
||
{
|
||
|
||
char buf1[256];
|
||
int objindex,index;
|
||
int nfl, nx, ny;
|
||
OBJECT obj;
|
||
|
||
memset( buf1, 0, sizeof( buf1));
|
||
if( NPC_Util_GetStrFromStrWithDelim( args, "REPLACEMENT", buf1, sizeof( buf1)) == NULL ) {
|
||
return;
|
||
}
|
||
GetRand_WarpPoint( buf1, &nfl, &nx, &ny );
|
||
|
||
if( MAP_IsValidCoordinate( nfl, nx, ny ) == FALSE ){
|
||
char filename[256];
|
||
NPC_Util_CheckAssignArgFile( meindex, filename);
|
||
print( "NPCENEMY REPLACEMENT: %s .Invalid POINT( %d, %d, %d)\n", filename, nfl, nx, ny );
|
||
return;
|
||
}
|
||
{
|
||
int ofl, ox, oy;
|
||
ofl = CHAR_getInt( meindex, CHAR_FLOOR );
|
||
ox = CHAR_getInt( meindex, CHAR_X );
|
||
oy = CHAR_getInt( meindex, CHAR_Y );
|
||
|
||
for ( obj=MAP_getTopObj( nfl, nx, ny); obj; obj=NEXT_OBJECT( obj) ) {
|
||
objindex = GET_OBJINDEX( obj);
|
||
if (OBJECT_getType( objindex) != OBJTYPE_CHARA) continue;
|
||
index = OBJECT_getIndex( objindex);
|
||
if( CHAR_getInt( index, CHAR_WHICHTYPE) != CHAR_TYPEPLAYER &&
|
||
CHAR_getWorkInt( index, CHAR_WORKEVENTTYPE) != CHAR_TYPEPET ) {
|
||
CHAR_warpToSpecificPoint( index, ofl, ox, oy);
|
||
CHAR_sendCToArroundCharacter( objindex);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
objindex = CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX);
|
||
CHAR_warpToSpecificPoint( meindex, nfl, nx, ny);
|
||
CHAR_sendCToArroundCharacter( objindex);
|
||
}
|
||
#endif
|