574 lines
16 KiB
C
574 lines
16 KiB
C
#include "version.h"
|
|
#include <string.h>
|
|
#include "char.h"
|
|
#include "object.h"
|
|
#include "char_base.h"
|
|
#include "npcutil.h"
|
|
#include "lssproto_serv.h"
|
|
#include "pet_skill.h"
|
|
#include "readmap.h"
|
|
#include "battle.h"
|
|
#include "configfile.h"
|
|
#include "util.h"
|
|
#include "npc_eventaction.h"
|
|
#include "npc_freepetskillshop.h"
|
|
#ifdef _PETSKILL_SHOP_LUA
|
|
#include "mylua/function.h"
|
|
#endif
|
|
#ifdef _CFREE_petskill
|
|
|
|
enum {
|
|
CHAR_WORK_SKILLSELECT = CHAR_NPCWORKINT1,
|
|
};
|
|
|
|
enum {
|
|
SELECTSKILL_START=10,
|
|
SELECTSKILL_TEACH=23,
|
|
SELECTSKILL_END=30,
|
|
};
|
|
|
|
enum {
|
|
START_WINDOW=0,
|
|
SKILL_WINDOW,
|
|
MEEND_WINDOW,
|
|
};
|
|
|
|
static void NPC_FreePetSkillShop_selectWindow( int meindex, int toindex, int num,int select);
|
|
BOOL NPC_FreePetSkillMakeStr(int meindex,int toindex, int select);
|
|
//BOOL NPC_CHECKFREEPETSKILL( int toindex, int petindex, int skillID);
|
|
BOOL NPC_SkillShopItemCheck(int meindex,int talker,int itemNo, int cou);
|
|
BOOL NPC_SkillShopDelItems(int meindex,int talker, char *buf);
|
|
BOOL NPC_SkillShopPetCheck( int toindex, int petindex, int skillID );
|
|
BOOL NPC_SkillShopWarp( int meindex, int talkindex);
|
|
|
|
#define MAXNPCPOINT 10
|
|
|
|
BOOL NPC_FreePetSkillShopInit( int meindex )
|
|
{
|
|
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
|
|
char msg[256];
|
|
CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_FREESKILLSHOP );
|
|
CHAR_setWorkInt( meindex, CHAR_WORK_SKILLSELECT, 0);
|
|
|
|
if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){
|
|
print("GetArgStrErr NO arg !!");
|
|
return FALSE;
|
|
}
|
|
|
|
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "pet_skill", msg, sizeof( msg)) != NULL){
|
|
char buf[256], filename[256];
|
|
int k=1, skillID, skillarray;
|
|
while( getStringFromIndexWithDelim( msg, ",", k, buf, sizeof( buf) ) ){
|
|
k++;
|
|
skillID=atoi(buf);
|
|
skillarray = PETSKILL_getPetskillArray( skillID);
|
|
if( PETSKILL_CHECKINDEX( skillarray) == FALSE ) continue;
|
|
if( PETSKILL_getInt( skillarray, PETSKILL_ILLEGAL) == 1){
|
|
if( NPC_Util_CheckAssignArgFile( meindex, filename) != NULL ){
|
|
print("\n宠物技能不规范:[%d-%s] ->文件:%s\n",
|
|
skillID,
|
|
PETSKILL_getChar( skillarray, PETSKILL_NAME),
|
|
filename );
|
|
}
|
|
}
|
|
}
|
|
}else{
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
void NPC_FreePetSkillShopTalked( int meindex , int talkerindex , char *szMes ,int color )
|
|
{
|
|
if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) {
|
|
return;
|
|
}
|
|
if(NPC_Util_isFaceToFace(talkerindex,meindex,2 )==FALSE){
|
|
if( NPC_Util_CharDistance( talkerindex, meindex ) > 1) return;
|
|
}
|
|
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 1 );
|
|
|
|
NPC_FreePetSkillShop_selectWindow( meindex, talkerindex, START_WINDOW,-1);
|
|
}
|
|
|
|
static void NPC_FreePetSkillShop_selectWindow( int meindex, int toindex, int num,int select)
|
|
{
|
|
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
|
|
char token[1024];
|
|
int fd = getfdFromCharaIndex( toindex);
|
|
int buttontype = 0, windowtype = 0, windowno = 0;
|
|
char buf1[256];
|
|
|
|
if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){
|
|
print("GetArgStrErr");
|
|
return ;
|
|
}
|
|
|
|
switch(num) {
|
|
case START_WINDOW:
|
|
{
|
|
BOOL Evflg = TRUE;
|
|
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "start_msg", token, sizeof( token)) == NULL) {
|
|
CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, 0);
|
|
return;
|
|
}
|
|
if( CHAR_getWorkInt( toindex, CHAR_WORKSHOPRELEVANT) != 1 ) {
|
|
CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, 0);
|
|
return;
|
|
}
|
|
//玩家条件判断
|
|
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "FREE", buf1, sizeof( buf1)) != NULL ) {
|
|
if( NPC_ActionPassCheck( meindex, toindex, buf1) == FALSE ) {
|
|
Evflg = FALSE;
|
|
}
|
|
}
|
|
if( Evflg == FALSE) {
|
|
CHAR_talkToCli( toindex, -1, "你想让宠物学特殊技能?可你的条件还不够喔!", CHAR_COLORYELLOW);
|
|
CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, 0);
|
|
return;
|
|
}else {
|
|
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
|
|
buttontype = WINDOW_BUTTONTYPE_NEXT;
|
|
windowno = SELECTSKILL_START;
|
|
CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, 2);
|
|
lssproto_WN_send( fd, windowtype, buttontype, windowno,
|
|
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token );
|
|
}
|
|
}
|
|
break;
|
|
case SKILL_WINDOW:
|
|
if( NPC_FreePetSkillMakeStr( meindex, toindex, select) == FALSE ) {
|
|
print("\n npc_freepetskillshop.c 错误");
|
|
}
|
|
break;
|
|
case MEEND_WINDOW:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void NPC_FreePetSkillShopWindowTalked( int meindex, int talkerindex, int seqno, int select, char *data)
|
|
{
|
|
int skill;
|
|
int pet;
|
|
int slot;
|
|
int cost;
|
|
int skillID=0;
|
|
int petskillindex;
|
|
char buf[64];
|
|
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
|
|
char msg[512];
|
|
int petindex;
|
|
char msgbuf[128];
|
|
double rate= 1.0;
|
|
|
|
if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr))==NULL){
|
|
print("GetArgStrErr");
|
|
return;
|
|
}
|
|
|
|
if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) {
|
|
return;
|
|
}
|
|
if(NPC_Util_isFaceToFace(talkerindex,meindex,2 )==FALSE){
|
|
if( NPC_Util_CharDistance( talkerindex, meindex ) > 1) return;
|
|
}
|
|
if( CHAR_getWorkInt( talkerindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE)
|
|
return ;
|
|
|
|
|
|
switch( seqno) {
|
|
case SELECTSKILL_START:
|
|
if( CHAR_getWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT) != 2 ) {
|
|
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0);
|
|
return;
|
|
}
|
|
NPC_FreePetSkillShop_selectWindow( meindex, talkerindex, SKILL_WINDOW, -1);
|
|
break;
|
|
case SELECTSKILL_TEACH:
|
|
if( CHAR_getWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT) != 3 ) {
|
|
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0);
|
|
return;
|
|
}
|
|
makeStringFromEscaped( data);
|
|
getStringFromIndexWithDelim(data,"|",1,buf,sizeof(buf));
|
|
skill=atoi(buf);
|
|
getStringFromIndexWithDelim(data,"|",2,buf,sizeof(buf));
|
|
pet=atoi(buf);
|
|
getStringFromIndexWithDelim(data,"|",3,buf,sizeof(buf));
|
|
slot=atoi(buf);
|
|
getStringFromIndexWithDelim(data,"|",4,buf,sizeof(buf));
|
|
cost=atoi(buf);
|
|
|
|
if( NPC_Util_GetStrFromStrWithDelim( argstr, "pet_skill", msg, sizeof( msg)) != NULL){
|
|
getStringFromIndexWithDelim(msg,",",skill,buf,sizeof(buf));
|
|
skillID=atoi(buf);
|
|
}
|
|
slot--;
|
|
if( slot < 0 ) return;
|
|
|
|
petindex = CHAR_getCharPet( talkerindex, pet-1);
|
|
if( !CHAR_CHECKINDEX(petindex) ){
|
|
CHAR_send_P_StatusString( talkerindex, CHAR_P_STRING_GOLD);
|
|
return ;
|
|
}
|
|
if( NPC_Util_GetStrFromStrWithDelim( argstr, "skill_rate", msg, sizeof( msg)) != NULL){
|
|
rate = atof( msg);
|
|
}
|
|
petskillindex = PETSKILL_getPetskillArray( skillID );
|
|
if( !PETSKILL_CHECKINDEX( petskillindex)){
|
|
CHAR_send_P_StatusString( talkerindex, CHAR_P_STRING_GOLD);
|
|
return ;
|
|
}
|
|
|
|
cost = PETSKILL_getInt( petskillindex, PETSKILL_COST );
|
|
cost = cost * rate;
|
|
|
|
//条件判断
|
|
if(CHAR_getInt(talkerindex,CHAR_GOLD) < cost){
|
|
CHAR_send_P_StatusString( talkerindex, CHAR_P_STRING_GOLD);
|
|
return;
|
|
}
|
|
#ifdef _PETSKILL_SHOP_LUA
|
|
if(FreePetSkillShop(talkerindex, petindex, CHAR_getPetSkill(petindex, slot), skillID) == FALSE ) {
|
|
return;
|
|
}
|
|
#endif
|
|
if( NPC_CHECKFREEPETSKILL( talkerindex, petindex, skillID ) == TRUE ){
|
|
|
|
if( Action_RunDoEventAction( meindex, talkerindex, argstr) == FALSE ){
|
|
CHAR_talkToCli( talkerindex, -1, "所需物品不足!!", CHAR_COLORYELLOW);
|
|
CHAR_send_P_StatusString( talkerindex, CHAR_P_STRING_GOLD);
|
|
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0);
|
|
return;
|
|
}
|
|
|
|
CHAR_setPetSkill( petindex, slot, skillID);
|
|
CHAR_setInt( talkerindex, CHAR_GOLD, ( CHAR_getInt( talkerindex, CHAR_GOLD) - cost) );
|
|
snprintf( msgbuf, sizeof( msgbuf ), "W%d",pet-1);
|
|
CHAR_sendStatusString( talkerindex, msgbuf );
|
|
CHAR_sendStatusString( talkerindex, "P");
|
|
CHAR_send_P_StatusString( talkerindex, CHAR_P_STRING_GOLD);
|
|
//WARP
|
|
if( NPC_SkillShopWarp( meindex, talkerindex) == TRUE )
|
|
return;
|
|
}else {
|
|
CHAR_send_P_StatusString( talkerindex, CHAR_P_STRING_GOLD);
|
|
CHAR_talkToCli( talkerindex, -1, "条件不足!!", CHAR_COLORYELLOW);
|
|
}
|
|
//ADD
|
|
NPC_FreePetSkillShop_selectWindow( meindex, talkerindex, SKILL_WINDOW, -1);
|
|
break;
|
|
case SELECTSKILL_END:
|
|
break;
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
BOOL NPC_CHECKFREEPETSKILL( int toindex, int petindex, int skillID)
|
|
{
|
|
int skillindex=-1;
|
|
char SCode[256];
|
|
char Free[256];
|
|
int i, petID;
|
|
skillindex = PETSKILL_getPetskillArray( skillID );
|
|
memset( Free, 0, sizeof( Free));
|
|
if( !PETSKILL_CHECKINDEX( skillindex) ) {
|
|
return FALSE;
|
|
}
|
|
|
|
petID = CHAR_getInt( petindex, CHAR_PETID);
|
|
sprintf( SCode, "%s", PETSKILL_getChar( skillindex, PETSKILL_KINDCODE));
|
|
sprintf( Free, "%s", PETSKILL_getChar( skillindex, PETSKILL_FREE));
|
|
|
|
//CHECK CODE
|
|
if( !strcmp( SCode, "\0")) {
|
|
return TRUE;
|
|
}
|
|
|
|
for( i=0; i<arraysizeof( Code_skill); i++) {
|
|
if( Code_skill[i].PetId == petID ) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
//找不到这只宠物
|
|
if( i == arraysizeof( Code_skill) ) {
|
|
{
|
|
char buff1[256];
|
|
sprintf( buff1, "%s不能学特殊技能!!", CHAR_getChar( petindex, CHAR_NAME));
|
|
CHAR_talkToCli( toindex, -1, buff1, CHAR_COLORYELLOW);
|
|
}
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
if( strstr( Code_skill[i].Code, SCode ) != NULL ) {
|
|
if( NPC_SkillShopPetCheck( toindex, petindex, skillID) == FALSE ) {
|
|
char buff1[256];
|
|
sprintf( buff1, "%s现在还不能学%s!", CHAR_getChar( petindex, CHAR_NAME),
|
|
PETSKILL_getChar( skillindex, PETSKILL_NAME) );
|
|
CHAR_talkToCli( toindex, -1, buff1, CHAR_COLORYELLOW);
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
}else {
|
|
char buff1[256];
|
|
sprintf( buff1, "%s不能学%s!!", CHAR_getChar( petindex, CHAR_NAME),
|
|
PETSKILL_getChar( skillindex, PETSKILL_NAME) );
|
|
CHAR_talkToCli( toindex, -1, buff1, CHAR_COLORYELLOW);
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL NPC_FreePetSkillMakeStr(int meindex,int toindex,int select)
|
|
{
|
|
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
|
|
char msg[256];
|
|
double rate=1.0;
|
|
int i=0;
|
|
char token[NPC_UTIL_GETARGSTR_LINEMAX];
|
|
int fd = getfdFromCharaIndex( toindex);
|
|
|
|
if(select==0){
|
|
sprintf(token,"0|0");
|
|
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_PETSKILLSHOP,
|
|
WINDOW_BUTTONTYPE_NONE,
|
|
CHAR_WINDOWTYPE_WINDOWPETSKILLSHOP,
|
|
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
|
|
token);
|
|
}
|
|
|
|
if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr))==NULL){
|
|
print("GetArgStrErr");
|
|
return FALSE;
|
|
}
|
|
if( NPC_Util_GetStrFromStrWithDelim( argstr, "main_msg", msg, sizeof( msg)) == NULL){
|
|
print("\n CAN'T FIND main_msg !!");
|
|
return FALSE;
|
|
}
|
|
|
|
sprintf(token,"1|%s|%s", CHAR_getChar(meindex,CHAR_NAME), msg);
|
|
if( NPC_Util_GetStrFromStrWithDelim( argstr, "skill_rate", msg, sizeof( msg)) != NULL){
|
|
rate=atof(msg);
|
|
}
|
|
if( NPC_Util_GetStrFromStrWithDelim( argstr, "pet_skill", msg, sizeof( msg)) != NULL) {
|
|
int skillarray;
|
|
int skillID;
|
|
int cost;
|
|
char token2[265];
|
|
char buf[64];
|
|
i=1;
|
|
while( getStringFromIndexWithDelim(msg,",",i,buf,sizeof(buf)) !=FALSE ) {
|
|
i++;
|
|
skillID=atoi(buf);
|
|
skillarray = PETSKILL_getPetskillArray( skillID);
|
|
|
|
if( PETSKILL_CHECKINDEX( skillarray) == FALSE )
|
|
continue;
|
|
if( PETSKILL_getInt( skillarray, PETSKILL_ILLEGAL) == 1) continue;
|
|
cost = PETSKILL_getInt(skillarray,PETSKILL_COST);
|
|
cost = (int)cost*rate;
|
|
#ifdef _SA80
|
|
sprintf(token2,"|%s|%d|%s|0", PETSKILL_getChar(skillarray, PETSKILL_NAME),
|
|
cost, PETSKILL_getChar(skillarray, PETSKILL_COMMENT));
|
|
#else
|
|
sprintf(token2,"|%s|%d|%s", PETSKILL_getChar(skillarray, PETSKILL_NAME),
|
|
cost, PETSKILL_getChar(skillarray, PETSKILL_COMMENT));
|
|
#endif
|
|
|
|
strcat(token,token2);
|
|
}
|
|
}
|
|
CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, 3);
|
|
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_PETSKILLSHOP,
|
|
WINDOW_BUTTONTYPE_NONE,
|
|
SELECTSKILL_TEACH,
|
|
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
|
|
token);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL NPC_SkillShopItemCheck(int meindex,int talker,int itemNo, int cou)
|
|
{
|
|
int i;
|
|
int itemindex=-1;
|
|
int num=0;
|
|
for( i=CHAR_STARTITEMARRAY;i<CHAR_MAXITEMHAVE;i++ ){
|
|
itemindex = CHAR_getItemIndex( talker , i );
|
|
if( ITEM_CHECKINDEX( itemindex) ) {
|
|
if( itemNo == ITEM_getInt(itemindex ,ITEM_ID ) ) {
|
|
num++;
|
|
}
|
|
}
|
|
if( num >= cou )
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
BOOL NPC_SkillShopDelItems(int meindex,int talker, char *buf)
|
|
{
|
|
char buf1[256];
|
|
char item[256], cout[256];
|
|
int i=1;
|
|
BOOL Evflg=TRUE;
|
|
while( getStringFromIndexWithDelim( buf, ",", i,buf1, sizeof( buf1)) != FALSE ) {
|
|
i++;
|
|
if( strstr( buf1, "*") != NULL ) {
|
|
getStringFromIndexWithDelim( buf1, "*", 1, item, sizeof( item));
|
|
getStringFromIndexWithDelim( buf1, "*", 2, cout, sizeof( cout));
|
|
}else {
|
|
strcpy( item, buf1);
|
|
strcpy( cout, "1");
|
|
}
|
|
if( NPC_SkillShopItemCheck( meindex, talker, atoi( item), atoi( cout)) == FALSE ) {
|
|
Evflg=FALSE;
|
|
break;
|
|
}
|
|
if( Evflg == FALSE )
|
|
break;
|
|
}
|
|
if( Evflg == FALSE )
|
|
return FALSE;
|
|
if( NPC_ActionDelItem( talker, buf) == TRUE ) {
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL NPC_SkillShopPetCheck( int toindex, int petindex, int skillID )
|
|
{
|
|
char Free[256];
|
|
int i;
|
|
char data[256], msg[256];
|
|
int skillindex = PETSKILL_getPetskillArray( skillID );
|
|
|
|
memset( Free, 0, sizeof( Free));
|
|
sprintf( Free, "%s", PETSKILL_getChar( skillindex, PETSKILL_FREE));
|
|
|
|
if( NPC_Util_GetStrFromStrWithDelim( Free, "FREE", data, sizeof( data)) != NULL ) {
|
|
BOOL EvFlg = TRUE;
|
|
i=1;
|
|
while( getStringFromIndexWithDelim( data, "|", i, msg, sizeof( msg)) != FALSE ) {
|
|
i++;
|
|
if( strstr( msg, "LV") != NULL ) {
|
|
char LvStr[256];
|
|
int LV=0;
|
|
if( strstr( msg, ">" ) != NULL ) {
|
|
if( getStringFromIndexWithDelim( msg, ">", 2, LvStr, sizeof( LvStr)) != FALSE ) {
|
|
LV = atoi( LvStr);
|
|
if( CHAR_getInt( petindex, CHAR_LV) <= LV )
|
|
EvFlg = FALSE;
|
|
}
|
|
}else if( strstr( msg, "<")) {
|
|
if( getStringFromIndexWithDelim( msg, "<", 2, LvStr, sizeof( LvStr)) != FALSE ) {
|
|
LV = atoi( LvStr);
|
|
if( CHAR_getInt( petindex, CHAR_LV) >= LV )
|
|
EvFlg = FALSE;
|
|
}
|
|
}
|
|
}else if( strstr( msg, "SK") != NULL ) {
|
|
int j=0, PskId=-1, ID;
|
|
char strSK[256];
|
|
int petskillindex;
|
|
|
|
getStringFromIndexWithDelim( msg, "=", 2, strSK, sizeof( strSK) );
|
|
ID = atoi( strSK);
|
|
for( j=0; j < CHAR_MAXPETSKILLHAVE; j++) {
|
|
PskId = CHAR_getPetSkill( petindex, j);
|
|
petskillindex = PETSKILL_getPetskillArray( PskId );
|
|
if( !PETSKILL_CHECKINDEX( petskillindex))
|
|
continue;
|
|
if( ID == PskId ) {
|
|
if( strstr( msg, "!=") !=NULL )
|
|
EvFlg = FALSE;
|
|
break;
|
|
}
|
|
}
|
|
if( j == CHAR_MAXPETSKILLHAVE ) {
|
|
EvFlg = FALSE;
|
|
break;
|
|
}
|
|
}
|
|
if( EvFlg == FALSE )
|
|
break;
|
|
}
|
|
if( EvFlg == FALSE ) {
|
|
return FALSE;
|
|
}else {
|
|
return TRUE;
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL NPC_SkillShopWarp( int meindex, int talkindex)
|
|
{
|
|
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
|
|
char data[1024], buf1[256], buf2[256];
|
|
int i=1, j=1;
|
|
BOOL EvFlg=FALSE;
|
|
struct {
|
|
int FLOOR;
|
|
int X;
|
|
int Y;
|
|
}Points[MAXNPCPOINT];
|
|
|
|
if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){
|
|
print("GetArgStrErr");
|
|
return FALSE;
|
|
}
|
|
|
|
for( i=0;i<MAXNPCPOINT;i++) {
|
|
Points[i].FLOOR = -1;
|
|
Points[i].X = -1;
|
|
Points[i].Y = -1;
|
|
}
|
|
//WARP
|
|
//NPC_POINT
|
|
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "NPC_POINT", data, sizeof( data)) != NULL ) {
|
|
int where=0;
|
|
i=1;
|
|
j=0;
|
|
while( getStringFromIndexWithDelim( data, ";", i, buf1, sizeof( buf1)) != FALSE ) {
|
|
i++;
|
|
getStringFromIndexWithDelim( buf1, ",", 1, buf2, sizeof( buf2));
|
|
Points[j].FLOOR = atoi( buf2);
|
|
getStringFromIndexWithDelim( buf1, ",", 2, buf2, sizeof( buf2));
|
|
Points[j].X = atoi( buf2);
|
|
getStringFromIndexWithDelim( buf1, ",", 3, buf2, sizeof( buf2));
|
|
Points[j].Y = atoi( buf2);
|
|
j++;
|
|
if( j >= MAXNPCPOINT )
|
|
break;
|
|
}
|
|
where = RAND( 0, i-1);
|
|
CHAR_warpToSpecificPoint( meindex, Points[where].FLOOR, Points[where].X, Points[where].Y);
|
|
EvFlg = TRUE;
|
|
}
|
|
|
|
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "WARP", data, sizeof( data)) != NULL ) {
|
|
int P_Floor,P_X,P_Y;
|
|
getStringFromIndexWithDelim( data, ",", 1, buf2, sizeof( buf2));
|
|
P_Floor = atoi( buf2);
|
|
getStringFromIndexWithDelim( data, ",", 2, buf2, sizeof( buf2));
|
|
P_X = atoi( buf2);
|
|
getStringFromIndexWithDelim( data, ",", 3, buf2, sizeof( buf2));
|
|
P_Y = atoi( buf2);
|
|
CHAR_warpToSpecificPoint( talkindex, P_Floor, P_X, P_Y);
|
|
EvFlg = TRUE;
|
|
}
|
|
|
|
return EvFlg;
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|