📄 npc_npcenemy.c
字号:
}
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -