chuyiwen_gmsv/npc/npc_warpman.c
chuyiwen bea5ac05b3 sq_gmsv_chuyiwen
sa_sever
2016-12-24 09:45:52 +09:00

1134 lines
32 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "version.h"
#include <string.h>
#include "char.h"
#include "object.h"
#include "char_base.h"
#include "npcutil.h"
#include "lssproto_serv.h"
#include "saacproto_cli.h"
#include "npc_warpman.h"
#include "map_deal.h"
#include "readmap.h"
#include "battle.h"
#include "npc_exchangeman.h"
#include "log.h"
#include "enemy.h"
#include "handletime.h"
#include "npc_eventaction.h"
static void NPC_WarpMan_selectWindow( int meindex, int toindex, int num,int select);
//ANDY_END
BOOL NPC_GetDuelPointCheck(int meindex,int talker);
BOOL NPC_PARTY_CHAECK( int meindex, int talkerindex);
void NPC_ERR_DiSP(int meindex,int talker,int errNO);
BOOL NPC_BigSmallLastCheck(int point1,int mypoint,int flg);
//BOOL NPC_ItemCheck(int meindex,int talker,int itemNo,int flg);
int NPC_FloorUse(int talker,int floor);
BOOL NPC_WarpMsg(int meindex,int talker,char *buf);
BOOL NPC_NpcWarpMsg(int meindex,int talker,char *arg);
int NPC_FloorUseOtherFloor(int charaindex, char *buf);
#ifdef _NPC_ADDLEVELUP
void NPC_LevelAndTransUp( int meindex, int charindex, int level, int skillpoint, int exp, int ridepet);
#endif
#define WARPMAN_STANDBY 3000
#define WARPMAN_WAIT 150
//ANDY_ADD
int CheckWarpMsg( int meindex, int talkerindex,char *npcarg ,char *TalkStr);
#ifdef _TREASURE_BOX
BOOL NPC_TreasureEventRunMsg( int meindex);
#endif
BOOL NPC_TreasureRandItemGet(int meidex,int talker,int rand_j,char *buf);
enum {
NPC_WORK_CURRENTTIME = CHAR_NPCWORKINT1,
NPC_TIME_BORN = CHAR_NPCWORKINT2,
NPC_TIME_DEAD = CHAR_NPCWORKINT3,
NPC_TIME_MODE = CHAR_NPCWORKINT4,
NPC_TIME_EVENTMODE = CHAR_NPCWORKINT6,// 1
NPC_TIME_EVENTTIME = CHAR_NPCWORKINT7,
NPC_TIME_EVENONBBI = CHAR_NPCWORKINT8,
NPC_TIME_EVENOFFDBBI = CHAR_NPCWORKINT9,
NPC_TIME_EVENTNUM = CHAR_NPCWORKINT10,
};
enum{
NPC_EVENTMODE_NONE,
NPC_EVENTMODE_OPEN,
NPC_EVENTMODE_EVENT,
};
#ifdef _NEW_WARPMAN
static void NPC_NewWarpMan_selectWindow( int meindex, int toindex, int num,int select,char *TalkStr);
enum {
WARP_MAN=0,
NEW_WARPMAN,
NEW_WARPMAN_END
};
#endif
#define TIMECHECKLOOP 20
// Robin 0518
//BOOL checkend = FALSE;
BOOL NPC_WarpManInit( int meindex )
{
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20];
char buff2[256];
char buf[1024];
int fl,x,y;
if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){
print("WarpMan:GetArgStrErr");
return FALSE;
}
CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEWARPMAN );
#ifdef _NEW_WARPMAN
if( strstr( npcarg,"NEWWARPMAN") ) {
//timeman <20><><EFBFBD><EFBFBD>
CHAR_setWorkInt( meindex, NPC_TIME_MODE, 1);
if(NPC_Util_GetStrFromStrWithDelim( npcarg, "NEWTIME", buff2, sizeof( buff2)) != NULL ){
CHAR_setInt( meindex, CHAR_LOOPINTERVAL, 60*1000);
}
#ifdef _TREASURE_BOX
CHAR_setWorkInt( meindex, NPC_TIME_EVENTMODE, NPC_EVENTMODE_NONE);
if(NPC_Util_GetStrFromStrWithDelim( npcarg, "TREASURE_BOX", buff2, sizeof( buff2)) != NULL ){
if( strstr( buff2, "ON") != NULL ){
CHAR_setWorkInt( meindex, NPC_TIME_EVENTMODE, NPC_EVENTMODE_EVENT);
CHAR_setWorkInt( meindex, NPC_TIME_EVENTTIME, NowTime.tv_sec);
if(NPC_Util_GetStrFromStrWithDelim( npcarg, "TREASURE_ONBBI", buff2, sizeof( buff2)) != NULL )
CHAR_setWorkInt( meindex, NPC_TIME_EVENONBBI, atoi( buff2));
if(NPC_Util_GetStrFromStrWithDelim( npcarg, "TREASURE_OFFDBBI", buff2, sizeof( buff2)) != NULL )
CHAR_setWorkInt( meindex, NPC_TIME_EVENOFFDBBI, atoi( buff2));
CHAR_setWorkInt( meindex, NPC_TIME_EVENTNUM, 0 );
}
}
#endif
return TRUE;
}else{
#endif
if(NPC_Util_GetStrFromStrWithDelim( npcarg, "WARP", buf, sizeof( buf))==NULL){
char filename[256];
if( NPC_Util_CheckAssignArgFile( meindex, filename) != NULL )
print("\n Warpman Err -> file:%s", filename);
return FALSE;
}
getStringFromIndexWithDelim(buf,",",1,buff2,sizeof(buff2));
fl=atoi(buff2);
getStringFromIndexWithDelim(buf,",",2,buff2,sizeof(buff2));
x=atoi(buff2);
getStringFromIndexWithDelim(buf,",",3,buff2,sizeof(buff2));
y=atoi(buff2);
if( MAP_IsValidCoordinate( fl,x,y )== FALSE ){
char filename[256];
NPC_Util_CheckAssignArgFile( meindex, filename);
print( "\nWarp NPC: filename:%s\n 3.Invalid warpman ERR %d %d %d" , filename, fl , x , y );
return FALSE;
}
#ifdef _NEW_WARPMAN
}
#endif
return TRUE;
}
void NPC_WarpManTalked( int meindex , int talkerindex , char *szMes ,int color )
{
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20];
char token[256];
int RunType=-1;
CHAR_setWorkInt( talkerindex, CHAR_WORKWARPCHECK, FALSE );
if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) {
return;
}
if(NPC_Util_isFaceToFace( meindex ,talkerindex ,2)==FALSE){
if(NPC_Util_isFaceToChara(talkerindex,meindex,1 )==FALSE) return;
}
if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){
print("GetArgStrErr");
return ;
}
#ifdef _NEW_WARPMAN
if( strstr( npcarg,"NEWWARPMAN") ) {
#ifdef _TREASURE_BOX
if( CHAR_getWorkInt( meindex, NPC_TIME_EVENTMODE) == NPC_EVENTMODE_OPEN )
return;
#endif
NPC_NewWarpMan_selectWindow( meindex ,talkerindex, 0, -1, szMes);
return;
}else {
if(NPC_PARTY_CHAECK( meindex, talkerindex) == FALSE) {//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
NPC_ERR_DiSP( meindex, talkerindex, 1);
return;
}
RunType = CheckWarpMsg( meindex, talkerindex, npcarg , szMes);
if( RunType !=0 ) {
if( RunType == 1 ) {
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "nomal_msg", token, sizeof(token)) != NULL) {
CHAR_talkToCli( talkerindex, meindex,token,CHAR_COLORWHITE);
}
}
return;
}
}
#else
if(NPC_PARTY_CHAECK( meindex, talkerindex) == FALSE) {//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
NPC_ERR_DiSP( meindex, talkerindex, 1);
return;
}
RunType = CheckWarpMsg( meindex, talkerindex, npcarg , szMes);
if( RunType !=0 ) {
if( RunType == 1 ) {
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "nomal_msg", token, sizeof(token)) != NULL) {
CHAR_talkToCli( talkerindex, meindex,token,CHAR_COLORWHITE);
}
}
return;
}
#endif
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0);
CHAR_setWorkInt( talkerindex , CHAR_WORKSHOPRELEVANTTRD , 0 );
if(strstr(npcarg,"DR")!=NULL) {
CHAR_setWorkInt( talkerindex , CHAR_WORKSHOPRELEVANTSEC , -1 );
if(NPC_GetDuelPointCheck(meindex,talkerindex)==FALSE) return;
}else{
NPC_WarpMan_selectWindow( meindex, talkerindex,0,-1);
}
}
static void NPC_WarpMan_selectWindow( int meindex, int toindex, int num,int select)
{
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20];
char token[1024];
char buf[256];
char buf2[1024];
char buf3[256];
int fl=0 ;
int money=100 ;
int fd = getfdFromCharaIndex( toindex);
char tmp[64];
if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){
print("GetArgStrErr");
CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, 0);
return ;
}
if(NPC_PARTY_CHAECK( meindex, toindex) == FALSE) {
NPC_ERR_DiSP( meindex, toindex, 1);
return;
}
if( CHAR_getWorkInt( toindex, CHAR_WORKSHOPRELEVANT) != 0 ) {
return;
}else {
CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, 1);
}
if(strstr(npcarg,"%4d")!=NULL){
int flwork = 0;
int work;
NPC_Util_GetStrFromStrWithDelim( npcarg, "WARP", buf, sizeof( buf));
getStringFromIndexWithDelim(buf,",",1,buf3,sizeof(buf3));
work = atoi( buf3);
fl = NPC_FloorUse( toindex, atoi(buf3));
if(NPC_Util_GetStrFromStrWithDelim( npcarg, "Floor", buf3, sizeof( buf3)) != NULL){
flwork = NPC_FloorUseOtherFloor(work, buf3);
}
fl = fl +flwork;
}
NPC_Util_GetStrFromStrWithDelim( npcarg, "FREE", buf, sizeof( buf));
if( (NPC_ActionPassCheck(meindex,toindex,buf)==TRUE) || (strstr(buf,"ALLFREE")!=NULL) ){
if(NPC_Util_GetStrFromStrWithDelim( npcarg, "FreeMsg", buf2, sizeof( buf2))==NULL) return;
CONNECT_set_pass(fd,TRUE);
CONNECT_set_first_warp(fd,TRUE);
if(strstr(buf2,"%4d") != NULL){
sprintf(token,buf2,fl);
}else{
strcpy(token,buf2);
}
CHAR_setWorkInt( toindex , CHAR_WORKSHOPRELEVANTTRD , -1 );
CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, 2);
}else {
if(NPC_Util_GetStrFromStrWithDelim( npcarg, "PayMsg", buf2, sizeof( buf2)) != NULL){
CONNECT_set_pass(fd,FALSE);
CONNECT_set_first_warp(fd,FALSE);
if(strstr(buf2,"%8d") != NULL){
NPC_Util_GetStrFromStrWithDelim( npcarg, "MONEY", tmp, sizeof( tmp));
if(strstr(tmp,"LV")!=NULL){
int level;
char buff2[32];
level = CHAR_getInt(toindex,CHAR_LV);
getStringFromIndexWithDelim(tmp,"*",2,buff2,sizeof(buff2));
money = level*atoi(buff2);
}else{
money=atoi(tmp);
}
if(strstr(buf2,"%4d") != NULL){
sprintf(token,buf2,fl,money);
}else{
sprintf(token,buf2,money);
}
}else if(strstr(buf2,"%4d") != NULL){
sprintf(token,buf2,fl);
NPC_Util_GetStrFromStrWithDelim( npcarg, "MONEY", tmp, sizeof( tmp));
if( strstr( tmp,"-" ) != NULL){
money=10000001;
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
CHAR_WINDOWTYPE_WINDOWWARPMAN_MAIN,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
token);
return ;
}
}else{
strcpy(token,buf2);
NPC_Util_GetStrFromStrWithDelim( npcarg, "MONEY", tmp, sizeof( tmp));
if( strstr( tmp,"-" ) != NULL){
money=10000001;
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
CHAR_WINDOWTYPE_WINDOWWARPMAN_MAIN,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
token);
return ;
}else{
money = atoi(tmp);
}
}
if(CHAR_getInt(toindex,CHAR_FLOOR)==117){
money=CHAR_getInt(toindex,CHAR_GOLD);
if (money>=10) money*=0.9;
else if( money == 0 ) {
CHAR_warpToSpecificPoint(toindex,117,225,13);
return;
}
}
CHAR_setWorkInt( toindex , CHAR_WORKSHOPRELEVANTTRD , money );
CONNECT_set_pass(fd,TRUE);
CONNECT_set_first_warp(fd,TRUE);
}else if(NPC_Util_GetStrFromStrWithDelim( npcarg, "NomalMsg", token,sizeof(token)) !=NULL){
CHAR_setWorkInt( toindex , CHAR_WORKSHOPRELEVANTTRD , -2 );
CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, -1);
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
CHAR_WINDOWTYPE_WINDOWWARPMAN_MAIN,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
token);
}
}
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_YESNO,
CHAR_WINDOWTYPE_WINDOWWARPMAN_MAIN,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
token);
}
void NPC_WarpManWindowTalked( int meindex, int talkerindex,
int seqno, int select, char *data)
{
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20];
char buf[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20];
#ifdef _NEW_WARPMAN
BOOL checkp=TRUE;
char buf1[1024];
int talkNo = 1;
BOOL tenflg=FALSE;
#else
int fl,x,y;
#endif
char buff2[256];
int fd = getfdFromCharaIndex( talkerindex );
if( NPC_Util_CharDistance( talkerindex, meindex ) > 2)
return;
if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){
print("GetArgStrErr");
return ;
}
if( CHAR_getWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT) < 1 ) {
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1);
return;
}
#ifdef _NEW_WARPMAN
if( seqno == NEW_WARPMAN ) {
int eqnum=0;
eqnum = CHAR_getWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT);
sprintf(buf1,"%s", "NOFREE");
if( eqnum >= 0 ) {
sprintf(buf1,"TALKEVENT%d", eqnum);
}
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0);
while( getStringFromIndexWithDelim( npcarg,"OVER",talkNo,buf,sizeof( buf)) != FALSE){
if( strstr(buf, buf1) != NULL) {
strcpy( npcarg , buf);
tenflg = TRUE;
break;
}
talkNo++;
}
if( tenflg == FALSE ) {
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1);
return;
}
}else {
#endif
if( select != WINDOW_BUTTONTYPE_YES ) {
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1);
return;
}
if(NPC_PARTY_CHAECK( meindex, talkerindex) == FALSE){
NPC_ERR_DiSP( meindex, talkerindex, 1);
return;
}
#ifdef _NEW_WARPMAN
}
#else
NPC_Util_GetStrFromStrWithDelim( npcarg, "WARP", buf, sizeof( buf));
GetRand_WarpPoint( buf, &fl, &x, &y );
#endif
#ifdef _NEW_WARPMAN
switch( seqno) {
case WARP_MAN:
if( select != WINDOW_BUTTONTYPE_YES )
return;
if( NPC_PARTY_CHAECK( meindex, talkerindex) == FALSE ){
NPC_ERR_DiSP( meindex, talkerindex, 1);
return;
}
#else
if( select != WINDOW_BUTTONTYPE_YES) return;
if( NPC_PARTY_CHAECK( meindex, talkerindex) == FALSE)
return;
#endif
#ifdef _NEW_WARPMAN
break;
case NEW_WARPMAN:
if( select != WINDOW_BUTTONTYPE_YES ){
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1);
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "CancelMsg", buff2, sizeof( buff2) ) != NULL) {
CHAR_talkToCli( talkerindex, meindex, buff2, CHAR_COLORYELLOW);
}
return;
}
checkp=TRUE;
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "CHECKPARTY", buff2, sizeof( buff2) ) != NULL) {
if( strstr( buff2, "FALSE") != NULL ) {
checkp = FALSE;
}
}
if( checkp==TRUE && NPC_PARTY_CHAECK( meindex, talkerindex) == FALSE ) {
NPC_ERR_DiSP( meindex, talkerindex, 1);
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1);
return;
}
break;
case NEW_WARPMAN_END:
return;
break;
}
#endif
if( Action_RunDoEventAction( meindex, talkerindex, npcarg) == FALSE ){
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1);
return;
}
CHAR_complianceParameter( talkerindex );
CHAR_send_P_StatusString( talkerindex ,
CHAR_P_STRING_ATK|CHAR_P_STRING_DEF|
CHAR_P_STRING_CHARM|CHAR_P_STRING_QUICK|
CHAR_P_STRING_WATER|CHAR_P_STRING_FIRE|
CHAR_P_STRING_WIND|CHAR_P_STRING_EARTH
);
if( CHAR_getWorkInt( CONNECT_getCharaindex(fd), CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE){
return ;
}
if(CHAR_getWorkInt( talkerindex , CHAR_WORKSHOPRELEVANTTRD) <= 0){
CHAR_setWorkInt( talkerindex, CHAR_WORKWARPCHECK, FALSE );
#ifdef _NEW_WARPMAN
NPC_WarpMsg( meindex, talkerindex, npcarg);
#else
if( fl == 0 && x == 0 && y == 0 ) {
}else {
CHAR_warpToSpecificPoint(talkerindex, fl, x,y);
}
#endif
}else {
if(CHAR_getInt(talkerindex,CHAR_GOLD) <
CHAR_getWorkInt(talkerindex,CHAR_WORKSHOPRELEVANTTRD)){
NPC_ERR_DiSP( meindex, talkerindex, 2);
return ;
}
CHAR_DelGold( talkerindex, CHAR_getWorkInt(talkerindex,CHAR_WORKSHOPRELEVANTTRD ));
CHAR_setWorkInt( talkerindex, CHAR_WORKWARPCHECK, FALSE );
#ifdef _NEW_WARPMAN
NPC_WarpMsg( meindex, talkerindex, npcarg);
#else
if( fl == 0 && x == 0 && y == 0 ) {
}else {
CHAR_warpToSpecificPoint(talkerindex, fl, x,y);
}
#endif
}
#ifdef _NEW_WARPMAN
NPC_NpcWarpMsg( meindex, talkerindex, npcarg);
#else
}
#endif
}
BOOL NPC_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 NPC_GetDuelPointCheck(int meindex,int talker)
{
int fdid = getFdidFromCharaIndex( talker);
char dbkey[256];
if( fdid == -1 ) return FALSE;
CHAR_makeDBKey( talker, dbkey, sizeof( dbkey));
saacproto_DBGetEntryRank_send( acfd, DB_DUELPOINT, dbkey, fdid,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX));
return TRUE;
}
void NPC_GetDuelRank(int rank,int fdid,int objindex)
{
int talker;
int meindex;
rank++;
talker = getCharindexFromFdid( fdid);
if( talker == -1 ) return;
meindex= OBJECT_getIndex( objindex);
if( !CHAR_CHECKINDEX( meindex)) return;
CHAR_setWorkInt(talker,CHAR_WORKSHOPRELEVANTSEC,rank);
NPC_WarpMan_selectWindow( meindex, talker,0,-1);
}
BOOL NPC_PARTY_CHAECK(int meindex,int talker)
{
if(CHAR_getWorkInt(talker,CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE){
return FALSE;
}
return TRUE;
}
void NPC_ERR_DiSP(int meindex,int talker,int errNO)
{
char token[1024];
int i=0;
int otherindex;
int fd = getfdFromCharaIndex( talker);
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20];
if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){
print("GetArgStrErr");
return ;
}
if(errNO==1){
if(NPC_Util_GetStrFromStrWithDelim( npcarg, "PartyMsg",token, sizeof( token))==NULL) {
sprintf(token,"\n\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŷӡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
"\n\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ɢ<EFBFBD>Ŷ<EFBFBD> <20><><EFBFBD><EFBFBD>");
}
if(CHAR_getWorkInt(talker,CHAR_WORKPARTYMODE)==CHAR_PARTY_CLIENT){
}else{
for( i=0 ; i < CHAR_PARTYMAX ;i++){
otherindex=CHAR_getWorkInt(talker,CHAR_WORKPARTYINDEX1+i);
if(otherindex != -1){
fd = getfdFromCharaIndex( otherindex);
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
CHAR_WINDOWTYPE_WINDOWWARPMAN_ERR,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
token);
}
}
return ;
}
}else if (errNO==2){
if(NPC_Util_GetStrFromStrWithDelim( npcarg, "MoneyMsg", token, sizeof( token))==NULL){
sprintf(token,"\n\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><EFBFBD><EFBFBD>Ǯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
"\n\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǯ<EFBFBD><EFBFBD>ٹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
}
}
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
CHAR_WINDOWTYPE_WINDOWWARPMAN_ERR,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
token);
}
int NPC_FloorUse(int charaindex,int floor)
{
int i;
int players=0;
int playernum = CHAR_getPlayerMaxNum();
for( i=0 ; i< playernum ; i++ ){
if( CHAR_getCharUse(i) == FALSE )continue;
if(CHAR_getInt(i,CHAR_FLOOR)==floor){
players++;
}
}
return players;
}
int NPC_FloorUseOtherFloor(int warp, char *buf)
{
int i,j=1;
int players=0;
int playernum = CHAR_getPlayerMaxNum();
char buf2[32];
int floor;
for( i=0 ; i< playernum ; i++ ){
if( CHAR_getCharUse(i) == FALSE )continue;
j=1;
while(getStringFromIndexWithDelim(buf,",",j,buf2,sizeof(buf2))!= FALSE){
j++;
floor = atoi(buf2);
if(CHAR_getInt(i,CHAR_FLOOR) == floor && warp != floor) {
players++;
}
}
}
return players;
}
BOOL NPC_WarpMsg(int meindex,int talker,char *arg)
{
char buf[256];
int fl=0,x=0,y=0;
int parent=-1;
int pmode;
int subindex;
int i;
if( NPC_Util_GetStrFromStrWithDelim( arg, "WARP", buf, sizeof( buf)) == NULL )
return FALSE;
GetRand_WarpPoint( buf, &fl, &x, &y );
if( fl == 0 && x == 0 && y == 0 ) {
return TRUE;
}else {
if( MAP_IsValidCoordinate( fl,x,y )== FALSE ){
print( "Warp NPC:1.Invalid warpman ERR" );
return FALSE;
}
}
#ifdef _TIME_TICKET
if( check_TimeTicketMap( fl) ) {
int havei, itemi;
CHAR_setWorkInt( talker, CHAR_WORKTICKETTIME, 0);
CHAR_setWorkInt( talker, CHAR_WORKTICKETTIMESTART, 0);
for( havei = CHAR_STARTITEMARRAY ; havei < CHAR_MAXITEMHAVE ; havei++ ){
itemi = CHAR_getItemIndex( talker, havei);
if( !ITEM_CHECKINDEX( itemi) ) continue;
if( strcmp( ITEM_getChar( itemi, ITEM_USEFUNC), "ITEM_timeticket") ) continue;
//if( ITEM_getInt( itemi ,ITEM_ID) != 20646 ) continue;
CHAR_talkToCli( talker, -1, "<EFBFBD>Զ<EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD><EFBFBD>", CHAR_COLORYELLOW);
ITEM_timeticketEx( talker, talker, havei, 1);
break;
}
if( havei == CHAR_MAXITEMHAVE ) {
CHAR_talkToCli( talker, -1, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>׼<EFBFBD><EFBFBD>ר<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>ſɽ<EFBFBD><EFBFBD>", CHAR_COLORYELLOW);
return FALSE;
}
}
#endif
pmode = CHAR_getWorkInt( talker, CHAR_WORKPARTYMODE );
switch( pmode ){
case 1:
parent = talker;
break;
case 2:
parent = CHAR_getWorkInt( talker, CHAR_WORKPARTYINDEX1 );
break;
default:
CHAR_warpToSpecificPoint(talker, fl, x,y);
return TRUE;
}
if( parent < 0 )
return TRUE;
for( i = 0; i < CHAR_PARTYMAX; i ++ ){
subindex = CHAR_getWorkInt( parent, 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;
}
#ifdef _NEW_WARPMAN
static void NPC_NewWarpMan_selectWindow( int meindex, int toindex, int num,int select,char *TalkStr)
{
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20];
char token[1024];
int buttontype = 0, windowtype = 0, windowno = 0;
char buf[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20],buf1[256];
int fd = getfdFromCharaIndex( toindex);
BOOL tenflg =FALSE;
int talkNo=1,RunType=-1;
if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){
print("GetArgStrErr");
return ;
}
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "NEWTIME", buf1, sizeof( buf1)) != NULL ){
if( CHAR_getWorkInt( meindex, NPC_TIME_MODE) <= 0 ) {
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "Time_Msg", token, sizeof( token) ) != NULL) {
CHAR_talkToCli( toindex, meindex, token, CHAR_COLORYELLOW);
}
return;
}
}
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
sprintf( buf1,"TALKEVENT");
//Ѱ<>Ҷ<EFBFBD><D2B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FREE
while(getStringFromIndexWithDelim( npcarg,"OVER",talkNo,buf,sizeof( buf)) != FALSE) {
if(strstr(buf, buf1) != NULL) {
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD> <20><><EFBFBD><EFBFBD>
RunType = CheckWarpMsg( meindex, toindex, buf , TalkStr);
if( RunType > 1 ) {
return;
}else if( RunType != 0 ) {
talkNo++;
continue;
}
if( NPC_Util_GetStrFromStrWithDelim( buf, "FREE", token, sizeof( token) ) == NULL) {
print("msgErr");
return;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ񸽺<C7B7><F1B8BDBA><EFBFBD><EFBFBD><EFBFBD>
if((NPC_ActionPassCheck(meindex,toindex,token)==TRUE) || (strstr( token, "ALLFREE")!=NULL) ) {
CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, talkNo-1);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȡ<><C8A1> FreeMsg <20>ִ<EFBFBD>
if(NPC_Util_GetStrFromStrWithDelim( buf, "FreeMsg", token, sizeof( token))==NULL)
return;
CONNECT_set_pass(fd,TRUE);
CONNECT_set_first_warp(fd,TRUE);
buttontype = WINDOW_BUTTONTYPE_YESNO;
windowno = NEW_WARPMAN;
tenflg = TRUE;
CHAR_setWorkInt( toindex , CHAR_WORKSHOPRELEVANTTRD , -1 );
break;
}
}
talkNo++;
}
//<2F><><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if( tenflg == FALSE ) {
if( getStringFromIndexWithDelim( npcarg,"OVER",1,buf,sizeof( buf)) == FALSE )
return;
if( strstr( buf, "NOFREE") == NULL ) {
return;
}else {
strcpy( npcarg, buf);
}
if(NPC_Util_GetStrFromStrWithDelim( npcarg, "NomalMsg", token,sizeof(token)) != NULL) {
CHAR_talkToCli( toindex, meindex, token,CHAR_COLORWHITE);
return;
}
}
//<2F><>ѶϢ<D1B6><CFA2> CLI
lssproto_WN_send( fd, windowtype, buttontype, windowno,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token );
}
#endif
//ANDY_RE
int CheckWarpMsg( int meindex, int talkerindex,char *npcarg ,char *TalkStr)
{
char buf[1024];
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "warp_msg", buf, sizeof( buf) ) == NULL)
return 0;
if( strcmp( buf, TalkStr) )
return 1;
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "CHECKPARTY", buf, sizeof( buf) ) != NULL) {
if( strstr( buf, "FALSE") != NULL ) {
}else {
if( NPC_PARTY_CHAECK( meindex, talkerindex) == FALSE ) {
NPC_ERR_DiSP( meindex, talkerindex, 1);
return 2;
}
}
}
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "FREE", buf, sizeof( buf)) == NULL )
return 2;
if( ( NPC_ActionPassCheck( meindex, talkerindex, buf ) == FALSE) ) {
if(NPC_Util_GetStrFromStrWithDelim( npcarg, "NomalMsg", buf,sizeof(buf)) != NULL) {
CHAR_talkToCli( talkerindex, meindex,buf,CHAR_COLORWHITE);
}
return 2;
}else {
if( Action_RunDoEventAction( meindex, talkerindex, npcarg) == FALSE ){
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1);
return 3;
}
CHAR_complianceParameter( talkerindex );
CHAR_send_P_StatusString( talkerindex ,
CHAR_P_STRING_ATK|CHAR_P_STRING_DEF|
CHAR_P_STRING_CHARM|CHAR_P_STRING_QUICK|
CHAR_P_STRING_WATER|CHAR_P_STRING_FIRE|
CHAR_P_STRING_WIND|CHAR_P_STRING_EARTH );
if(NPC_Util_GetStrFromStrWithDelim( npcarg, "FreeMsg", buf, sizeof( buf)) != NULL ){
CHAR_talkToCli( talkerindex, meindex, buf, CHAR_COLORWHITE);
}
NPC_WarpMsg( meindex, talkerindex, npcarg);
NPC_NpcWarpMsg( meindex, talkerindex, npcarg);
return 4;
}
return 0;
}
BOOL NPC_NpcWarpMsg(int meindex,int talker,char *arg)
{
char buf[256];
int fl=0,x=0,y=0;
if( CHAR_CHECKINDEX( meindex ) == FALSE )
return FALSE;
if( NPC_Util_GetStrFromStrWithDelim( arg, "NPCPOINT", buf, sizeof( buf)) == NULL )
return FALSE;
GetRand_WarpPoint( buf, &fl, &x, &y );
if( MAP_IsValidCoordinate( fl,x,y )== FALSE ){
print( "Warp NPC:2.Invalid warpman ERR" );
return FALSE;
}
CHAR_warpToSpecificPoint( meindex, fl, x, y );
return TRUE;
}
void NPC_WarpManLoop( int meindex)
{
int born, dead;
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20];
if( !CHAR_CHECKINDEX( meindex) ) return;
if( NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg)) == NULL ){
print("WarpMan:GetArgStrErr");
return;
}
if( !strstr( npcarg,"NEWWARPMAN") )
return;
if( NPC_getTimeData( meindex, npcarg, &born, &dead, 200) != FALSE ){
NPC_TimeDefineDo( meindex, born, dead, NPC_TIME_MODE);
CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX ) );
}
}
void NPC_WarpManWatch( 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 - 1024 * 20];
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,"NEWWARPMAN") )
return;
#ifdef _TREASURE_BOX
if( CHAR_getWorkInt( meindex, NPC_TIME_EVENTMODE) == NPC_EVENTMODE_OPEN ){
if( CHAR_getWorkInt( meindex, NPC_TIME_EVENTTIME) < NowTime.tv_sec ){
//<2F><><EFBFBD>ر<EFBFBD><D8B1><EFBFBD>
CHAR_setWorkInt( meindex, NPC_TIME_EVENTMODE, NPC_EVENTMODE_EVENT);
//<2F><>ͼ
CHAR_setInt( meindex, CHAR_BASEBASEIMAGENUMBER,
CHAR_getWorkInt( meindex, NPC_TIME_EVENOFFDBBI));
CHAR_setInt( meindex, CHAR_BASEIMAGENUMBER,
CHAR_getWorkInt( meindex, NPC_TIME_EVENOFFDBBI));
NPC_TreasureEventRunMsg( meindex); //<2F>Ƿ<EFBFBD>warp
CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX ) );
}
}
#endif
if( NPC_getTimeData( meindex, npcarg, &born, &dead, 200) != FALSE ){
NPC_TimeDefineDo( meindex, born, dead, NPC_TIME_MODE);
CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX ) );
}
}
#ifdef _TREASURE_BOX
BOOL NPC_TreasureEventRunMsg( int meindex)
{
char buf[256];
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20];
int fl,x,y;
if( !CHAR_CHECKINDEX( meindex ))
return FALSE;
if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){
print("WarpMan:GetArgStrErr");
return FALSE;
}
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "TREASURE_NUM", buf, sizeof( buf)) == NULL )
return FALSE;
if( CHAR_getWorkInt( meindex, NPC_TIME_EVENTNUM) < atoi( buf) ) return FALSE;
CHAR_setWorkInt( meindex, NPC_TIME_EVENTNUM, 0);
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "TREASURE_POINT", buf, sizeof( buf)) == NULL )
return FALSE;
GetRand_WarpPoint( buf, &fl, &x, &y );
if( MAP_IsValidCoordinate( fl,x,y )== FALSE ){
print( "Warp NPC:2.Invalid warpman ERR" );
return FALSE;
}
CHAR_warpToSpecificPoint( meindex, fl, x, y );
return TRUE;
}
#endif
BOOL NPC_TreasureRandItemGet(int meidex,int talker,int rand_j,char *buf)
{
char buff2[64];
int randitem;
int ret;
int itemindex;
char token[128];
if(rand_j == 0) {
print("Event:<3A><><EFBFBD><ECB6A3>Ľ<EFBFBD><C4BD><EFBFBD><EBA3AC><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD>");
return FALSE;
}
randitem = rand()%rand_j;
if(randitem == 0) randitem = rand_j;
getStringFromIndexWithDelim(buf , "," , randitem, buff2, sizeof(buff2)) ;
itemindex = ITEM_makeItemAndRegist( atoi( buff2));
if(itemindex == -1) return FALSE;
/*ʧ<><CAA7> ة<><D8A9>ܰ<EFBFBD><DCB0>( <20><>ʧ<EFBFBD><CAA7> ة <20><><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
ret = CHAR_addItemSpecificItemIndex( talker, itemindex);
if( !CHAR_CHECKITEMINDEX( talker, ret) ){
print( "npc_exchangeman.c: additem error itemindex[%d]\n", itemindex);
ITEM_endExistItemsOne( itemindex);
return FALSE;
}
if(itemindex != -1) {
LogItem(
CHAR_getChar( talker, CHAR_NAME ), /* ƽ<>ҷ<EFBFBD> */
CHAR_getChar( talker, CHAR_CDKEY ),
#ifdef _add_item_log_name // WON ADD <20><>item<65><6D>log<6F><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD>item<65><6D><EFBFBD><EFBFBD>
itemindex,
#else
ITEM_getInt( itemindex, ITEM_ID), /* ʧ<><CAA7> ة į */
#endif
"EventAddItem(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5>ĵ<EFBFBD><C4B5><EFBFBD>)",
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,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%s",ITEM_getChar( itemindex, ITEM_NAME));
CHAR_talkToCli( talker, -1, token, CHAR_COLORWHITE);
CHAR_sendItemDataOne( talker, ret);
return TRUE;
}
#ifdef _NPC_ADDLEVELUP // (<28><><EFBFBD>ɿ<EFBFBD>) ANDY <20>ⲿ<EFBFBD><E2B2BF><EFBFBD>Ի<EFBFBD><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵȼ<D2B5>
extern tagRidePetTable ridePetTable[296];
void NPC_LevelAndTransUp( int meindex, int charindex, int level, int skillpoint, int exp, int ridepet)
{
char szBuffer[256]="";
if( !CHAR_CHECKINDEX( charindex) )
return;
//int CHAR_LevelUpCheck( int charaindex , int toindex)
if( exp > 0 ){
int LevelUp=0;
int myexp = CHAR_getInt( charindex, CHAR_EXP);
myexp += exp;
if( myexp > 300000000 ) myexp = 300000000;
CHAR_setInt( charindex, CHAR_EXP, myexp);
snprintf( szBuffer, sizeof(szBuffer),
"(%s) <20>õ<EFBFBD> EXP %d", CHAR_getUseName( charindex ), exp);
CHAR_talkToCli( charindex, -1, szBuffer, CHAR_COLORYELLOW);
LevelUp = CHAR_LevelUpCheck( charindex , -1);
if( LevelUp > 0 ){
snprintf( szBuffer, sizeof(szBuffer),
"(%s) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d",
CHAR_getUseName( charindex ),
CHAR_getInt( charindex, CHAR_LV )
);
CHAR_talkToCli( charindex, -1, szBuffer, CHAR_COLORYELLOW);
CHAR_setInt( charindex, CHAR_SKILLUPPOINT,
CHAR_getInt( charindex, CHAR_SKILLUPPOINT) + LevelUp*3 );
CHAR_complianceParameter( charindex );
}
}
if( level > 0 ){
CHAR_setInt( charindex, CHAR_LV, level);
snprintf( szBuffer, sizeof(szBuffer),
"(%s) <20>ȼ<EFBFBD><C8BC>趨Ϊ %d",
CHAR_getUseName( charindex ), CHAR_getInt( charindex, CHAR_LV )
);
CHAR_talkToCli( charindex, -1, szBuffer, CHAR_COLORYELLOW);
}
if( skillpoint > 0 ){
int MySp = CHAR_getInt( charindex, CHAR_SKILLUPPOINT);
MySp += skillpoint;
CHAR_setInt( charindex, CHAR_SKILLUPPOINT, MySp);
}
if( ridepet >= 0 ){
int basepet[2][4]={ {2066,2067,2068,2069},
{2072,2073,2074,2075}};
int petTemp[]={-1,-1,-1,-1,-1};
char msgbuf[256];
int petNum=0;
int i,j=0;
int k=0, petindex,enemyarray;
petTemp[j++] = basepet[0][rand()%4];
petTemp[j++] = basepet[1][rand()%4];
for( i=0; i< arraysizeof(ridePetTable) ; i++ ){
if( CHAR_getInt( charindex, CHAR_BASEBASEIMAGENUMBER) == ridePetTable[i].charNo ){
petTemp[j]= ridePetTable[i].petId;
j++;
if( j >= arraysizeof( petTemp) )
break;
}
}
j=0;
for( petNum=0; petNum<arraysizeof( petTemp); petNum++) {
enemyarray = ENEMY_getEnemyArrayFromId( petTemp[ petNum]); //<2F>׻<EFBFBD>
petindex = ENEMY_createPetFromEnemyIndex( charindex, enemyarray);
if( petindex == -1 ) {
continue;
}
j++;
for( k = 1; k < 120; k ++ ){ //<2F><><EFBFBD><EFBFBD>
CHAR_PetLevelUp( petindex );
CHAR_PetAddVariableAi( petindex, AI_FIX_PETLEVELUP );
CHAR_setInt( petindex, CHAR_LV, CHAR_getInt( petindex, CHAR_LV) +1 );
}
CHAR_complianceParameter( petindex );
CHAR_setInt( petindex , CHAR_HP , CHAR_getWorkInt( petindex , CHAR_WORKMAXHP ) );
snprintf( szBuffer, sizeof(szBuffer), "<EFBFBD>õ<EFBFBD>%s", CHAR_getUseName( petindex) );
CHAR_talkToCli( charindex, -1, szBuffer, CHAR_COLORYELLOW);
}
for(j = 0; j < CHAR_MAXPETHAVE; j++){
petindex = CHAR_getCharPet(charindex, j);
if( !CHAR_CHECKINDEX( petindex) )
continue;
CHAR_complianceParameter( petindex );
snprintf( msgbuf, sizeof( msgbuf ), "K%d", j );
CHAR_sendStatusString( charindex, msgbuf );
snprintf( msgbuf, sizeof( msgbuf ), "W%d", j );
CHAR_sendStatusString( charindex, msgbuf );
}
CHAR_setInt( charindex, CHAR_LEARNRIDE, ridepet);
}
CHAR_send_P_StatusString( charindex, CHAR_P_STRING_DUELPOINT|
CHAR_P_STRING_TRANSMIGRATION| CHAR_P_STRING_RIDEPET|
CHAR_P_STRING_BASEBASEIMAGENUMBER| CHAR_P_STRING_GOLD|
CHAR_P_STRING_EXP| CHAR_P_STRING_LV| CHAR_P_STRING_HP|CHAR_P_STRING_LEARNRIDE);
CHAR_Skillupsend( charindex);
}
#endif
//ANDY_END