StoneAge/gmsv/npc/npc_pkpetshop.c.bak
2018-08-07 00:51:35 -07:00

1540 lines
40 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.

//krynn 2001/12/6
//PKPetShop
#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 "log.h"
#include "enemy.h"
#include "npc_pkpetshop.h"
#include "battle.h"
#ifdef _PKPETSHOP
#define MAXSHOPPET 33
static void NPC_PKPetShop_selectWindow( int meindex, int talker, int num,int select);
void NPC_PKPetShop_BuyMain(int meindex,int talker,int before );
void NPC_PKPetShop_GetPetList(char *argstr,char * argtoken2);
BOOL NPC_PKPetShop_SetNewPet(int meindex,int talker,char *data);
BOOL NPC_PKPetShop_SellNewPet(int meindex,int talker,char *data);
void NPC_PKPetShop_Menu(int meindex,int talker);
int NPC_PKPetShop_GetLimtPetList(int talker,char *argstr,char *token2,int sell);
void NPC_PKPetShop_SellMain(int meindex,int talker,int select);
int NPC_GetSellPetList(int itemindex,int flg,char *argstr,char *argtoken,int select,int sell);
BOOL NPC_AddPetBuy(int meindex, int talker,int petID,int kosuu,double rate);
void NPC_PetStrStr(int petID,double rate,char *name,char *token2, int index);
int NPC_SellPetstrsStr(int itemindex,int flg,double rate,char *argtoken,int select,int sell);
void NPC_LimitPetShop(int meindex,int talker,int select);
void NPC_PKPetShop_ExpressmanCheck(int meindex,int talker);
/*--·¥¡õÛÍ ÀÃñø--*/
enum{
NPC_PKPETSHOP_WORK_NO = CHAR_NPCWORKINT1,
NPC_PKPETSHOP_WORK_EV = CHAR_NPCWORKINT2,
NPC_PKPETSHOP_WORK_EXPRESS = CHAR_NPCWORKINT3,
};
typedef struct {
char arg[32];
int type;
}PKPETSHOP_NPC_Shop;
static PKPETSHOP_NPC_Shop TypeTable[] = {
{ "FIST", 0 },
{ "AXE", 1 },
{ "CLUB", 2 },
{ "SPEAR", 3},
{ "BOW", 4},
{ "SHIELD", 5},
{ "HELM", 6 },
{ "ARMOUR", 7 },
{ "BRACELET", 8},
{ "ANCLET", 9 },
{ "NECKLACE", 10},
{ "RING", 11},
{ "BELT", 12},
{ "EARRING", 13},
{ "NOSERING", 14},
{ "AMULET", 15},
{ "OTHER", 16},
{ "BOOMERANG", 17},
{ "BOUNDTHROW", 18},
{ "BREAKTHROW", 19},
#ifdef _ITEM_TYPETABLE
{ "DISH", 20},
{ "METAL", 21},
{ "JEWEL", 22},
{ "WARES", 23},
{ "WBELT", 24},
{ "WSHIELD", 25},
{ "WSHOES", 26},
{ "WGLOVE", 27},
{ "ANGELTOKEN", 28},
{ "HEROTOKEN", 29},
#endif
{ "ACCESSORY", 30},
{ "OFFENCE", 40},
{ "DEFENCE", 50},
};
/*********************************
* ³õʼ
*********************************/
BOOL NPC_PKPetShopInit( int meindex )
{
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
/*--ÕýÄÌÃóɬÀÃ--*/
CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEPKPetShop );
if( NPC_Util_GetArgStr(meindex, argstr, sizeof(argstr)) == NULL )
{
print("NPC_PKPetShopInit_GetArgStrErr");
return FALSE;
}
if(strstr(argstr,"LIMITSHOP") != NULL)
{ /*- ÖÐäúÔ»»Ùåð׷ºë--*/
CHAR_setWorkInt( meindex, NPC_PKPETSHOP_WORK_NO, 1);
}
else
{
CHAR_setWorkInt( meindex, NPC_PKPETSHOP_WORK_NO, 0);
}
if(strstr( argstr, "EVENT") != NULL)
{ /*- ÖÐäúÔ»»Ùåð׷ºë--*/
CHAR_setWorkInt( meindex, NPC_PKPETSHOP_WORK_EV, 1);
}
else
{
CHAR_setWorkInt( meindex, NPC_PKPETSHOP_WORK_EV, 0);
}
if(strstr( argstr, "EXPRESS") != NULL)
{ /*-ÞÑ˪ºÐ°×·Âºë--*/
CHAR_setWorkInt( meindex, NPC_PKPETSHOP_WORK_EXPRESS, 1);
}
else
{
CHAR_setWorkInt( meindex, NPC_PKPETSHOP_WORK_EXPRESS, 0);
}
return TRUE;
}
/*********************************
* Øƾ®ØêÈÕľÐ×Áݼ°ÖÊ
*********************************/
void NPC_PKPetShopTalked( int meindex , int talker , char *szMes ,int color )
{
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
char buff[1024];
char buf2[256];
char token[1024];
int i = 1;
BOOL sellonlyflg = FALSE;
char sellmsg[1024];
/* ÃóÒÁÄÌØÀ¡õ±å¸²ØÆ»¯·ÖØê ɱÔÊÔ */
if( CHAR_getInt( talker , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER )
{
return;
}
/*-- ¼°ó¡±åÖÐÔ¾®Éýµ¤¾®£¢--*/
if(NPC_Util_isFaceToFace( meindex, talker, 2) == FALSE)
{ /* ¨àºëØøÓÀÓñ¶¯ ¼°ÐÄ */
if( NPC_Util_CharDistance( talker, meindex ) > 1) return;
}
if(NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr)) == NULL)
{
print("NPC_PKPetShopInit_GetArgStrErr");
return;
}
if( NPC_Util_GetStrFromStrWithDelim( argstr, "sellonly_msg",
token, sizeof( token))
!= NULL)
{
sellonlyflg = TRUE;
strcpysafe(sellmsg, sizeof( sellmsg), token);
}
/*-- ÌÎ µ¤ËüÄ̼þÓñËü±åÖÐØêÔ¾®Éýµ¤¾®--*/
if( NPC_Util_GetStrFromStrWithDelim( argstr, "buy_msg",
buff, sizeof( buff)) != NULL )
{
while(getStringFromIndexWithDelim(buff,",",i,buf2,sizeof(buf2)) != FALSE)
{
i++;
if( strstr( szMes, buf2) != NULL) {
if( CHAR_getWorkInt( meindex, NPC_PKPETSHOP_WORK_EV) == 0) {
/*- ÖÐäúÔ»»Ù ¾®Éýµ¤¾®¼°ÃñÄáÓÀÛÍ--*/
if( CHAR_getWorkInt( meindex, NPC_PKPETSHOP_WORK_NO) == 1) {
if( sellonlyflg ) {
NPC_PKPetShop_selectWindow( meindex, talker, 3, -1);
return;
}
}
else{
NPC_PKPetShop_selectWindow( meindex, talker, 1, -1);
return;
}
}else{
if(CHAR_getWorkInt( meindex, NPC_PKPETSHOP_WORK_NO) == 1) {
if( sellonlyflg) {
NPC_PKPetShop_selectWindow( meindex, talker, 3, -1);
return;
}
}else{
NPC_PKPetShop_selectWindow( meindex, talker, 1, -1);
return;
}
return;
}
}
}
}
i=1;
/*-- ÌÎ ÔÂËüÄ̼þÓñËü±åÖÐØêÔ¾®Éýµ¤¾®--*/
if( NPC_Util_GetStrFromStrWithDelim( argstr, "sell_msg",
buff, sizeof( buff)) != NULL )
{
while( getStringFromIndexWithDelim(buff,",", i,buf2,sizeof(buf2))
!= FALSE )
{
i++;
if(strstr(szMes,buf2) != NULL) {
NPC_PKPetShop_selectWindow( meindex, talker, 2, -1);
return;
}
}
}
i = 1;
/*--¹«¼°Ö°¼°¼×¼þÐþëÈÊľÔÂÍɺªÆ¥ Øƾ®ØêÔÂ--*/
if( NPC_Util_GetStrFromStrWithDelim( argstr, "other_msg",
buff, sizeof( buff)) != NULL )
{
while(getStringFromIndexWithDelim( buff, ",", i, buf2, sizeof( buf2))
!=FALSE)
{
i++;
if(strstr(szMes,buf2) != NULL) {
/*--¼×¼þÐþ¶ªÓÀ±¾¡õ³â--*/
if(NPC_Util_GetStrFromStrWithDelim( argstr, "hint_msg",
token, sizeof( token)) != NULL)
{
CHAR_talkToCli( talker, meindex, token, CHAR_COLORWHITE);
return;
}
}
}
}
/*- ÖÐäúÔ»»Ù ¾®Éýµ¤¾®¼°ÃñÄáÓÀÛÍ--*/
if(CHAR_getWorkInt( meindex, NPC_PKPETSHOP_WORK_NO) == 1)
{
if(CHAR_getWorkInt( meindex, NPC_PKPETSHOP_WORK_EV) == 1)
{
if( sellonlyflg)
{
CHAR_talkToCli( talker, meindex, sellmsg, CHAR_COLORWHITE);
return;
}
}
else
{ /*-- ÖÐäúÔ»»Ù ¼°¶ªÓÀ±¾¡õ³â--*/
if( sellonlyflg)
{
NPC_PKPetShop_selectWindow( meindex, talker, 3, -1);
return;
}
}
}
else
{
if(CHAR_getWorkInt( meindex, NPC_PKPETSHOP_WORK_EV) == 1) {
if( sellonlyflg) {
CHAR_talkToCli( talker, meindex, sellmsg, CHAR_COLORWHITE);
return;
}
}else{
if(CHAR_getWorkInt( meindex, NPC_PKPETSHOP_WORK_EXPRESS) == 1) {
NPC_PKPetShop_ExpressmanCheck( meindex, talker);
}else{
/*--³ð³ðÒýÆ¥ Ð×ÈÕËåɧËüÄ̼þÓñËü(¶ªÍßب¡õ) Ô÷--*/
/*-- ÖÐäúÔ»»Ù ƥئÈÊ»¯ ɧ¼°÷ÒئÈÕ¶ªÍßب¡õ Ô÷--*/
NPC_PKPetShop_selectWindow( meindex, talker, 0, -1);
}
}
}
}
static void NPC_PKPetShop_selectWindow( int meindex, int talker, int num,int select)
{
print("\n NPC_PKPetShop_selectWindow()");
print("\n num = %d ", num);
switch( num) {
case 0:
/*--¶ªÍßب¡õ --*/
/*--Óɷ¶ª¡õÕý˪Ի--*/
CHAR_send_P_StatusString( talker, CHAR_P_STRING_GOLD);
if(CHAR_getWorkInt( meindex, NPC_PKPETSHOP_WORK_EXPRESS) == 1 )
{
if(CHAR_getWorkInt( meindex, NPC_PKPETSHOP_WORK_NO) ==0 )
{
NPC_PKPetShop_ExpressmanCheck( meindex, talker);
}
}
else if(CHAR_getWorkInt( meindex, NPC_PKPETSHOP_WORK_NO) == 1)
{
}
else
{
NPC_PKPetShop_Menu( meindex, talker);
}
break;
case 1:
/*-- µ¤ --*/
NPC_PKPetShop_BuyMain( meindex, talker, select);
break;
case 2:
/*-- ÔÂ --*/
NPC_PKPetShop_SellMain( meindex, talker, select);
break;
case 3:
/*-- ÖÐäúÔ»»Ù Æ¥ÔÊ·½ --*/
NPC_LimitPetShop( meindex, talker, select);
break;
}
}
/*-----------------------------------------
* ÛÍ·ÂÄÌʧ¼þÐþ¾®ÈÕ߯ÔÈ»¯ÎåÐ×ÁݱåôÄÌ«Çë½ñľÔ£Û
*
-------------------------------------------*/
void NPC_PKPetShopWindowTalked( int meindex, int talkerindex,
int seqno, int select, char *data)
{
/*-- ¼°Òý´õÔ»±åÖÐئÖÐÎçÎå·´±Î --*/
if( NPC_Util_CharDistance( talkerindex, meindex ) > 3) {
/*--Óɷ¶ª¡õÕý˪Ի--*/
CHAR_send_P_StatusString( talkerindex, CHAR_P_STRING_GOLD);
return;
}
makeStringFromEscaped( data);
switch( seqno){
case CHAR_WINDOWTYPE_WINDOWITEMSHOP_STARTMSG:
/*--±¸¶ªÍßب¡õ±å ÈÉÔÊ--*/
/*-- µ¤--*/
if(atoi( data) == 1 ) NPC_PKPetShop_selectWindow(meindex, talkerindex, 1, -1);
/*-- ÔÂ--*/
if(atoi( data) == 2) NPC_PKPetShop_selectWindow(meindex, talkerindex, 2, -1);
/*--ÇëÔÂ--*/
if(atoi( data) == 3) return;/*--ÖÏÊÖØÆئÖÐ--*/
break;
case CHAR_WINDOWTYPE_WINDOWITEMSHOP_BUY_MSG:
/*--ʧÄÌ Ø©¼°Ü°µÑ--*/
if(NPC_PKPetShop_SetNewPet(meindex , talkerindex, data) == TRUE) {
NPC_PKPetShop_selectWindow( meindex, talkerindex, 1, 0);
}else{
NPC_PKPetShop_selectWindow( meindex, talkerindex ,0, -1);
}
break;
case CHAR_WINDOWTYPE_WINDOWITEMSHOP_SELL_MSG:
/*--ʧÄÌ Ø©¼°´ÂÂÖ--*/
if(NPC_PKPetShop_SellNewPet(meindex , talkerindex, data) == TRUE) {
NPC_PKPetShop_selectWindow( meindex, talkerindex, 2, 0);
}else{
NPC_PKPetShop_selectWindow( meindex, talkerindex, 0, -1);
}
break;
case CHAR_WINDOWTYPE_WINDOWITEMSHOP_LIMIT:
if(select == WINDOW_BUTTONTYPE_YES) {
NPC_PKPetShop_selectWindow( meindex, talkerindex ,2, -1);
}else if(select == WINDOW_BUTTONTYPE_NO) {
return;
}else if(select == WINDOW_BUTTONTYPE_OK) {
NPC_PKPetShop_selectWindow( meindex, talkerindex, 2, -1);
}
break;
case CHAR_WINDOWTYPE_WINDOWITEMSHOP_EXPRESS:
if(atoi(data) == 2) {
NPC_PKPetShop_selectWindow( meindex, talkerindex, 1, -1);
}else if(atoi( data) == 4) {
NPC_PKPetShop_selectWindow( meindex, talkerindex, 2, -1);
}
}
}
/*-----------------------------------------
*
* µ¤ÖÊ ¶ªÄ̼þ(ÛÍ·ÂÄÌʧ¼þÐþ˪ññÊ÷ ×ÛÔÀ
*
*krynn 2001/12/9 ¼ÓµÄ×¢ÊÍ
*before == -1
*before <> -1
*krynn end
*-----------------------------------------*/
void NPC_PKPetShop_BuyMain(int meindex,int talker,int before )
{
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
char token[NPC_UTIL_GETARGSTR_BUFSIZE];
int fd = getfdFromCharaIndex( talker);
/*
Ô» Öа׷ºë ó¡¼°·¸¡õÕýÒøµ¤¾®°×·Âºë ÷Ò¼° ó¡ ¶ªÓÀ±¾¡õ³â| µ¤¶ªÓÀ±¾¡õ³â
òÛÐѼ» ¶ªÓÀ±¾¡õ³â ÒÁì»ïóïԻئÖжªÓÀ±¾¡õ³â ¸î ¶ªÓÀ±¾¡õ³â
ó¡ ÒüÔ ÒüئÖа׷ºë ʧÄÌ Ø©ÒÁì»ï °Àó¸ ì« Ä¯ ÓòµæÄ̼þ°×ÇÉ
ó¡ ÒüÔ ÒüئÖа׷ºë ʧÄÌ Ø©ÒÁì»ï °Àó¸ ì« Ä¯ ÓòµæÄ̼þ°×ÇÉ
*/
/*--ÔÆ÷Ò¼°°×ÑëÄÌ»ï ÖÐÛè·´°×ÑëÄ̻ﻥ·°Øêئ¾®ÔÈÐ×ÎçÎå·´±Î --*/
if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr)) == NULL) {
print("itemshop_GetArgStr_Err");
return;
}
/*--ó¡¼Ô¼°·¸¡õÕýÒøµ¤¾®---*/
if(before != -1)
{ /*--ó¡¼Ô¼°·¸¡õÕý»¥ËáÔÈ»¯ÖÐÔ¼°Æ¥Ö°¼°Ê÷ ·´ËªÈÕئÈÊ --*/
sprintf(token,"0|0");
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_ITEMSHOPMAIN,
WINDOW_BUTTONTYPE_NONE,
CHAR_WINDOWTYPE_WINDOWITEMSHOP_BUY_MSG,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
token);
}else{
char token2[NPC_UTIL_GETARGSTR_BUFSIZE];
char buff2[256];
char buff[256];
/*--±¸¶ªÓÀ±¾¡õ³âëäú ØÆ»¯ÛÍ·ÂÄÌʧ¼þÐþ±å˪Ô·¸¡õÕýë×ÛÔÂ-*/
/*--³ð¼°Ö§Ô» ·´ÎåÐ×ئÖо®ÊÖ--*/
NPC_Util_GetStrFromStrWithDelim( argstr, "main_msg", buff, sizeof( buff));
NPC_Util_GetStrFromStrWithDelim( argstr, "buy_main", buff2, sizeof( buff2));
sprintf(token,"0|1|%d|%s|%s|%s|", CHAR_WINDOWTYPE_WINDOWITEMSHOP_STARTMSG,
CHAR_getChar( meindex, CHAR_NAME), buff, buff2);
NPC_Util_GetStrFromStrWithDelim( argstr, "what_msg", buff, sizeof( buff));
NPC_Util_GetStrFromStrWithDelim( argstr, "level_msg", buff2, sizeof( buff));
snprintf( token2, sizeof( token2), "%s|%s", buff, buff2);
/*-- Ù¯ Äþ --*/
strncat( token, token2, sizeof( token));
NPC_Util_GetStrFromStrWithDelim( argstr, "realy_msg", buff, sizeof( buff));
NPC_Util_GetStrFromStrWithDelim( argstr, "itemfull_msg", buff2, sizeof( buff2));
sprintf( token2, "|%s|%s", buff, buff2);
/*-- Ù¯ çø--*/
strncat(token , token2,sizeof(token));
strcpy(token2, "|");
/*--ʧÄÌ Ø©Ê÷ ¼° --*/
NPC_PKPetShop_GetPetList( argstr, token2 );
// krynn 2001/12/12 bebug ÓÃ
print("%s",token2);
// end krynn
/*--¶ªÓÀ±¾¡õ³âÎçʧÄÌ Ø©Ê÷ ¼°Äþ --*/
strncat( token, token2, sizeof( token));
}
/*-- Ù¯ ë¾Þµ©¸¥¡õÃó½ñÁùÔÂ--*/
// makeEscapeString( token, escapedname, sizeof(escapedname));
/*--³ð³ðƥ˪ññ--*/
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_ITEMSHOPMAIN,
WINDOW_BUTTONTYPE_NONE,
CHAR_WINDOWTYPE_WINDOWITEMSHOP_BUY_MSG,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
token);
}
/*------------------------------------------------------
*ʧÄÌ Ø©èúÒç¼° Ù¯ ë×ÛÔÂ( µ¤
*------------------------------------------------------*/
void NPC_PKPetShop_GetPetList(char *argstr,char *argtoken)
{
int i = 1;
int tmp;
int EnemyCnt;
char *name ;
char buff2[256];
char buff[NPC_UTIL_GETARGSTR_LINEMAX];
char token2[NPC_UTIL_GETARGSTR_BUFSIZE];
double rate = 1.0;
int loopcnt = 0;
/*-ÒÁ¡õÐþë ÔÂ£Û ØêľÈɨàÆ¥ÒáÀÃ--*/
if(NPC_Util_GetStrFromStrWithDelim( argstr, "buy_rate", buff2, sizeof( buff2))
!= NULL){
rate = atof( buff2);
}
/*- ½¡µ¤³Ý ëäú --*/
if( NPC_Util_GetStrFromStrWithDelim( argstr, "PetList", buff, sizeof( buff))
!= NULL )
{
while( getStringFromIndexWithDelim(buff,",",i,buff2,sizeof(buff2))
!=FALSE )
{
i++;
/*--ɬÀð×ÑëÄ̻PʧÄÌ Ø©»¥ "-"Æ¥à¼å©ÈÕľ»¯ÖÐÔ¾®¼°ÃñÄáÓÀÛÍ--*/
if(strstr( buff2, "-") == NULL) {
/*--ÒýÄÚ ó¡ --*/
// krynn 2001/12/10
EnemyCnt = ENEMY_getEnemyNum();
for( tmp=0 ; tmp < EnemyCnt ; tmp++ )
{
if( ENEMY_getInt( tmp , ENEMY_ID ) == atoi( buff2 ) )
{
print("\nNPC_PKPetShop_GetPetList: tmp = %d", tmp);
break;
}
}
if( tmp == EnemyCnt )
{
return;
}
name = ENEMY_getChar( tmp , ENEMY_NAME );
// krynn end
/*-- 󡻥 ئÈÕ£ýʧÄÌ Ø©»¥Ðå»þØÆئÖм°Æ¥¹«¼° į·´ ÷»--*/
if(name == NULL) continue;
loopcnt++;
if(loopcnt == MAXSHOPPET) break;
/*-- ¶Ë¼°Ãó·òÐþÎì»ï¹´ÈÊÔ»--*/
NPC_PetStrStr( atoi( buff2), rate, name, token2, tmp);
/*--¶ªÓÀ±¾¡õ³â Ù¯ Îç çø--*/
strncat( argtoken, token2, sizeof(token2));
}
else
{
return;
/*krynn 2001/12/13 Õâ¶ÎÓ¦¸ÃÓò»µ½ÁË£¬ÏÈ mark£¬¸ÄΪֱ½Ó return
--ʧÄÌ Ø©»¥ 15-25 ¼°äßÆ¥à¼å©ÈÕľ»¯ÖÐÔÂèëÄþ--
int start;
int end;
//-"-"Æ¥à¼å©ÈÕľÐ×炙§¼°ÐÑ°ÀÎç ¼°ÐÑ°Àëäú --
getStringFromIndexWithDelim( buff2, "-", 1, token2, sizeof(token2));
start = atoi( token2);
getStringFromIndexWithDelim( buff2, "-", 2 ,token2, sizeof(token2));
end = atoi( token2);
//-- į»¥ÝѱåئÔÈ»¯ÖÐÐ×ÈÕ£ý ľ׸ÒüÔÂ
if(start > end)
{
tmp = start;
start = end;
end = tmp;
}
end++;
//--"-"Æ¥à¼å©ÈÕľÐ×Ûм°Ê§ÄÌ Ø©Ê÷ ë ÔÂ--
for(; start < end ; start++ )
{
//--ÒýÄÚ ó¡ --
name = ITEM_getNameFromNumber( start );
//-- 󡻥 ئÈÕ£ýʧÄÌ Ø©»¥Ðå»þØÆئÖм°Æ¥¹«¼° į·´ ÷»--
if(name == NULL) continue;
loopcnt++;
if(loopcnt == MAXSHOPPET) break;
//-- ¶Ë¼°Ãó·òÐþÎì»ï¹´ÈÊÔ»--
NPC_PetStrStr( start, rate, name, token2, tmp);
//--¶ªÓÀ±¾¡õ³â Ù¯ Îç çø--
strncat( argtoken, token2, sizeof(token2));
}*/
}
}
}
}
/*-----------------------------------------------------------------
Ãó·òÐþÎì»ï×ÛÔÀ
-------------------------------------------------------------------*/
void NPC_PetStrStr(int petID,double rate,char *name,char *token2,int index)
{
int i;
int gold;
int level;
int graNo;
int TempNo;
int EnemyTempNum;
char info[1024];
//char tryItem[256]; // krynn 2001/12/12 Ö»ÊÇÒª¿´ getItemInfoFromNumber ¶Á³öÀ´µÄ×Ö´®³¤Ê²÷áÑùµÄ
char escape[256] = {"PK Server ³è"};
//krynn 2001/12/10 try
//gold = ITEM_getcostFromITEMtabl( itemID);
//level = ITEM_getlevelFromITEMtabl( itemID);
//graNo = ITEM_getgraNoFromITEMtabl( itemID);
TempNo = ENEMY_getInt( index , ENEMY_TEMPNO );
EnemyTempNum = ENEMYTEMP_getEnemyNum();
for( i=0 ; i < EnemyTempNum ; i++ )
{
if( ENEMYTEMP_getInt( i , E_T_TEMPNO ) == TempNo )
{
break;
}
}
if( i == EnemyTempNum )
{
return;
}
gold = RAND(0,20);
level = 0;
graNo = ENEMYTEMP_getInt( i , E_T_IMGNUMBER );
//print("\nPKPetShop::NPC_PetStrStr(): TempNo = %d ; graNo = %d",TempNo,graNo);
/*--ÒÁ¡õÐþë¾®ØêÔÂ--*/
gold=(int)(gold * rate);
//strcpy( tryItem,ITEM_getItemInfoFromNumber( 10 ) );
//print("PKPetShop::NPC_PetStrStr(): try = %s\n",tryItem);
//krynn end
makeEscapeString( escape, info, sizeof( info));
makeEscapeString( name, escape, sizeof( escape));
sprintf( token2, "%s|0|%d|%d|%d|%s|", escape, level, gold, graNo, info);
}
/*-------------------------------------------
*( µ¤)
*ÛÍ·ÂÄÌʧ¼þÐþ¾®ÈÕ߯ÔÈÐ× Ð×çø°íë ÌͽñÁùÔÂ
*
*------------------------------------------*/
BOOL NPC_PKPetShop_SetNewPet(int meindex,int talker,char *data)
{
char buf[1024];
char buff2[128];
int i = 1, j = 1;
int select;
int kosuu = 0;
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
double rate = 1.0;
int gold = 0;
int EmptyPetCnt=0;
/*--߯ÔÈ»¯ÎåÐ×·¸¡õÕýë±¾ÒÁÛÍÐþÎçòÛÐѱåÛÐÝ©--*/
print("\nNPC_PKPetShop_SetNewPet: data = %s",data);
getStringFromIndexWithDelim( data, "|", 1, buf, sizeof( buf));
select=atoi(buf); // krynn 2001/12/10 select ÊÇÍæ¼Ò´«»ØÒªÂòµÄµÚ¼¸Ñù
print("\nNPC_PKPetShop_SetNewPet: select = %d",select);
if(select == 0) return FALSE;
getStringFromIndexWithDelim( data, "|", 2, buf, sizeof( buf));
kosuu=atoi(buf);
print("\nNPC_PKPetShop_SetNewPet: kosuu(Íæ¼ÒÒªÂòµÄÊýÁ¿) = %d",kosuu);
if( kosuu <= 0 ) return FALSE;
/* ÈÔDZÚÐ ¼°Ê¸ÓÀÐþ¼°ÎëÎåë¼ëÔÊ */
if( !CHAR_CHECKINDEX(talker) )
{
return FALSE;
}
for( i=0 ; i < CHAR_MAXPETHAVE ; i++ )
{
if( CHAR_getCharPet( talker,i) == -1 )
{
EmptyPetCnt++;
}
}
// ÓÐ EmptyPetCnt ¸ö³èÎï¿Õλ
/* ÎëÎ廥 ÖÐ */
print("\nNPC_PKPetShop_SetNewPet:EmptyPetCnt(Íæ¼ÒÓеĿÕλ) = %d",EmptyPetCnt);
if( EmptyPetCnt <= 0 ) return FALSE;
if( EmptyPetCnt > CHAR_MAXPETHAVE )
{
EmptyPetCnt = CHAR_MAXPETHAVE;
}
if( kosuu > EmptyPetCnt )
{
kosuu = EmptyPetCnt;
}
// krynn 2001/12/10
// Ó¦¸ÃÓò»µ½£¬ËùÒÔ mark ÆðÀ´
/*--òÛÐѼ°ÃñÄáÓÀÛÍ ñ²±åòå Ô¾®£¢
for( i = CHAR_STARTITEMARRAY ; i < CHAR_MAXITEMHAVE ; i++ ) {
itemindex = CHAR_getItemIndex( talker , i );
if( !ITEM_CHECKINDEX( itemindex) ) {
kosuucnt++;
}
}
--߯ÔÈ»¯ Ð×òÛÐѼ° »¥ ¶Ë¼°òÛÐÑ ÈÓ¡õÌï´¡ ·½Ô»ÄôÖÐÎçÔƾ®ØÆÖм°Æ¥
--ÈÓ¡õÌï¡õ´¡¼° ë ľÔÂ
if( kosuucnt < kosuu){
kosuu = kosuucnt;
}
--δ·ò¼°èëÄþ·´¾Þ·Â¡õ
if(kosuucnt == 0 ){
return FALSE;
}
krynn end */
i = 1;
/*--ÔÆ÷Ò¼°°×ÑëÄÌ»ï ÖÐÛè·´°×ÑëÄ̻ﻥ·°Øêئ¾®ÔÈÐ×ÎçÎå·´±Î --*/
if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr)) == NULL) {
print("shop_GetArgStr_Err");
return FALSE;
}
/*---ÒÁ¡õÐþëäú ئØêľÈÉ1.0)-*/
if(NPC_Util_GetStrFromStrWithDelim( argstr, "buy_rate", buf, sizeof( buf))
!= NULL) {
rate= atof( buf);
}
/*--ʧÄÌ Ø©¼°Ü°µÑëµæµ¤Îç³ðÇ·-*/
if( NPC_Util_GetStrFromStrWithDelim( argstr, "PetList",
buf, sizeof( buf)) != NULL )
{
while(getStringFromIndexWithDelim(buf , "," , j, buff2, sizeof(buff2))
!= FALSE )
{
j++;
/*-- "-"»¥Ö³Òýľ»¯ÖÐÔ¾®Éýµ¤¾®--*/
if(strstr( buff2, "-") == NULL)
{ // krynn 2001/12/10 try
//if( ITEM_getcostFromITEMtabl(atoi(buff2)) !=-1) {
//
if ( i == select)
{
/*---ʧÄÌ Ø©¼°×ÛÔÀ---*/
/*--òÛÐÑÛÐ×ÛÔÀ--*/
if(NPC_AddPetBuy(meindex, talker,atoi(buff2),kosuu,rate) != TRUE)
{
return FALSE;
}
return TRUE;
}
i++;
// krynn end}
}else{
/*--ʧÄÌ Ø©»¥ 15-25 ¼°äßƥ˪ÈÕľÐ×èëÄþ--*/
int start;
int end;
/* "-"Æ¥à¼å©ÈÕľÐ×炙§¼°ÐÑ°ÀÎç ¼°ÐÑ°Àëäú --*/
getStringFromIndexWithDelim( buff2, "-", 1, argstr, sizeof(argstr));
start = atoi( argstr);
getStringFromIndexWithDelim( buff2, "-", 2 ,argstr, sizeof(argstr));
end = atoi( argstr);
end++;
/*-- į»¥ÝѱåئÔÈ»¯ÖÐÐ×ÈÕ£ý ľ׸ÒüÔÂ**/
if(start > end){
gold = start;
start = end;
end = gold;
}
/*--"-"Æ¥à¼å©ÈÕľÐ×Ûм°Ê§ÄÌ Ø©Ã«Ê÷ ë ÔÂ--*/
for(; start < end ; start++ ) {
if( ITEM_getcostFromITEMtabl( start) != -1) {
if ( i == select) {
/*---ʧÄÌ Ø©¼°×ÛÔÀ---*/
/*--òÛÐÑÛÐ×ÛÔÀ--*/
if(NPC_AddPetBuy(meindex, talker, start, kosuu, rate) != TRUE)
{
return FALSE;
}
return TRUE;
}
i++;
}
}
}
}
}
return FALSE;
}
/*---------------------------------------------
*ʧÄÌ Ø©¼°Ü°µÑëµæµ¤
*--------------------------------------------*/
BOOL NPC_AddPetBuy(int meindex, int talker,int petID,int kosuu,double rate)
{
int i,j,k,index,EnemyCnt,UpLevel;
int gold;
int ret;
int maxgold;
int Grade=0;
char buf[1024];
char msgbuf[64];
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
// krynn 2001/12/15 get get's grade of this PKPetShop
if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr)) == NULL) {
print("shop_GetArgStr_Err");
return FALSE;
}
if(NPC_Util_GetStrFromStrWithDelim( argstr, "Grade", buf, sizeof( buf))
!= NULL)
{
Grade = atoi( buf );
}
// end krynn
/*--ÒÁ¡õÐþë¾®ØêÔÂ--*/
// krynn 2001/12/11 mark and change
//gold = ITEM_getcostFromITEMtabl( itemID);
gold = 4;
// krynn end
gold = (int)(gold * rate);
maxgold = gold * kosuu;
if(CHAR_getInt( talker, CHAR_GOLD) < maxgold ) return FALSE;
/*--ÔÆàÅëӼÈÕÔÊ--*/
CHAR_setInt( talker, CHAR_GOLD,CHAR_getInt( talker, CHAR_GOLD) - maxgold);
/* krynn 2001/12/11 PKServer Ó¦¸ÃÓò»µ½¼Ò×壬ËùÒÔÏÈ mark ÆðÀ´
if( addNpcFamilyTax( meindex, talker, maxgold*0.4 ) )
print(" FamilyTaxDone! ");
else
print(" FamilyTaxError!");
// end krynn*/
EnemyCnt = ENEMY_getEnemyNum();
for( index=0 ; index < EnemyCnt ; index++ )
{
if( ENEMY_getInt( index , ENEMY_ID ) == petID )
{
print("\nNPC_AddPetBuy: index = %d", index);
break;
}
}
if( index == EnemyCnt )
{
return FALSE;
}
/*--òÛÐÑÛÐ×ÛÔÀ--*/
for(i = 0 ; i < kosuu ; i++)
{
if( (ret = ENEMY_createPetFromEnemyIndex( talker , index )) == -1 )
{
return FALSE;
};
/******************/
/* ʸÓÀÐþÊ÷ ˪Ô */
/******************/
// Éý³ð±å·´ÖÐÔÈÐ×¾®Ø¦
for( j = 0 ; j < CHAR_MAXPETHAVE ; j++ )
{
if( CHAR_getCharPet( talker , j ) == ret )
{
break;
}
}
if( j == CHAR_MAXPETHAVE ){
return FALSE;
}
if( CHAR_CHECKINDEX( ret ) == TRUE ){
CHAR_setMaxExpFromLevel( ret, Grade);
UpLevel = CHAR_LevelUpCheck( ret , talker);
for( k = 0; k < UpLevel; k ++ ){
CHAR_PetLevelUp( ret );
CHAR_PetAddVariableAi( ret, AI_FIX_PETLEVELUP );
}
CHAR_complianceParameter( ret );
CHAR_setInt( ret , CHAR_HP , CHAR_getWorkInt( ret , CHAR_WORKMAXHP ) );
snprintf( msgbuf, sizeof( msgbuf ), "K%d", j );
CHAR_sendStatusString( talker, msgbuf );
snprintf( msgbuf, sizeof( msgbuf ), "W%d", j );
CHAR_sendStatusString( talker, msgbuf );
}
}
CHAR_send_P_StatusString( talker, CHAR_P_STRING_GOLD);
return TRUE;
}
/*----------------------------------------
*¶ªÍßب¡õ
*----------------------------------------*/
void NPC_PKPetShop_Menu(int meindex,int talker)
{
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
char token[NPC_UTIL_GETARGSTR_LINEMAX];
char buff[256];
int fd = getfdFromCharaIndex( talker);
/* ÷Ò¼° ó¡ ¶ªÓÀ±¾¡õ³â| */
/*--ÔÆ÷Ò¼°°×ÑëÄÌ»ï ÖÐÛè·´°×ÑëÄ̻ﻥ·°Øêئ¾®ÔÈÐ×ÎçÎå·´±Î --*/
if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr)) == NULL) {
print("shop_GetArgStr_Err");
return;
}
NPC_Util_GetStrFromStrWithDelim( argstr, "main_msg", buff, sizeof( buff));
snprintf(token, sizeof(token),"%s|%s",CHAR_getChar( meindex, CHAR_NAME), buff);
// print("%s",escapedname);
/*--³ð³ðƥ˪ññ--*/
//krynn 2001/12/10 ÕâÀïµÄ²ÎÊýËƺõ¿ÉÒÔÑÓÓà ItemShop µÄ code£¬ÏÈÓÃÓÿ´
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_ITEMSHOPMENU,
WINDOW_BUTTONTYPE_NONE,
CHAR_WINDOWTYPE_WINDOWITEMSHOP_STARTMSG,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
token);
//krynn end
}
/*-------------------------------------------
* ÔÂÖÊ (Ãó·òÐþÎì»ïë×ÛÔÀ
*
*-------------------------------------------*/
void NPC_PKPetShop_SellMain(int meindex,int talker,int before)
{
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
char token[NPC_UTIL_GETARGSTR_BUFSIZE];
int fd = getfdFromCharaIndex( talker);
/*
Ô» Öа׷ºë ó¡¼°·¸¡õÕýÒøµ¤¾®°×·Âºë ÷Ò¼° ó¡ ¶ªÓÀ±¾¡õ³â| Ô¶ªÓÀ±¾¡õ³â
ÔÆàÅ»¥ÖÐÔÈÌìÖбåئÔ·½¶ªÓÀ±¾¡õ³â ¸î ¶ªÓÀ±¾¡õ³â
ó¡ ľÔ ľئÖÐ°×·Âºë °Àó¸ ì« Ä¯ ÓòµæÄ̼þ°×ÇÉ Ê§ÄÌ Ø© į ¨à¾®ÈÕ
ó¡ ľÔ ľئÖÐ°×·Âºë °Àó¸ ì« Ä¯ ÓòµæÄ̼þ°×ÇÉ Ê§ÄÌ Ø© į ¨à¾®ÈÕ
*/
/*--ÔÆ÷Ò¼°°×ÑëÄÌ»ï ÖÐÛè·´°×ÑëÄ̻ﻥ·°Øêئ¾®ÔÈÐ×ÎçÎå·´±Î --*/
if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr)) == NULL) {
print("shop_GetArgStr_Err");
return;
}
/*--ó¡¼Ô¼°·¸¡õÕýÒøµ¤¾®---*/
if(before != -1) {
/*--ó¡¼Ô¼°·¸¡õÕý»¥ËáÔÈ»¯ÖÐÔ¼°Æ¥Ö°¼°Ê÷ ·´ËªÈÕئÈÊ --*/
sprintf(token,"1|0");
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_ITEMSHOPMAIN
+CHAR_getWorkInt(meindex,NPC_PKPETSHOP_WORK_NO),
WINDOW_BUTTONTYPE_NONE,
CHAR_WINDOWTYPE_WINDOWITEMSHOP_SELL_MSG,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
token);
}else{
char token2[NPC_UTIL_GETARGSTR_BUFSIZE];
char buff2[256];
char buff[256];
/*--±¸¶ªÓÀ±¾¡õ³âëäú ØÆ»¯ÛÍ·ÂÄÌʧ¼þÐþ±å˪Ô·¸¡õÕýë×ÛÔÂ-*/
/*--³ð¼°Ö§Ô» ·´ÎåÐ×ئÖо®ÊÖ--*/
NPC_Util_GetStrFromStrWithDelim( argstr, "main_msg", buff, sizeof( buff));
NPC_Util_GetStrFromStrWithDelim( argstr, "sell_main", buff2, sizeof( buff));
sprintf( token, "1|1|%d|%s|%s|%s|", CHAR_WINDOWTYPE_WINDOWITEMSHOP_STARTMSG,
CHAR_getChar( meindex, CHAR_NAME), buff, buff2);
NPC_Util_GetStrFromStrWithDelim( argstr, "stone_msg", buff, sizeof( buff));
if(CHAR_getWorkInt(meindex,NPC_PKPETSHOP_WORK_EXPRESS) == 1 ) {
NPC_Util_GetStrFromStrWithDelim( argstr, "exrealy_msg", buff2, sizeof(buff2));
}else{
NPC_Util_GetStrFromStrWithDelim( argstr, "realy_msg", buff2, sizeof( buff2));
}
sprintf( token2,"%s|%s|", buff, buff2);
/*--ʧÄÌ Ø©Ê÷ ¼° --*/
NPC_PKPetShop_GetLimtPetList( talker,argstr, token2, -1);
/*--¶ªÓÀ±¾¡õ³âÎçʧÄÌ Ø©Ê÷ ¼°Äþ --*/
strncat( token, token2, sizeof( token));
/*--³ð³ðƥ˪ññ--*/
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_ITEMSHOPMAIN+
CHAR_getWorkInt(meindex,NPC_PKPETSHOP_WORK_NO),
WINDOW_BUTTONTYPE_NONE,
CHAR_WINDOWTYPE_WINDOWITEMSHOP_SELL_MSG,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
token);
}
}
/*--------------------------------
·ßÛл¥ÔÆ÷Ò±å ÔÂʧÄÌ Ø©¼° Ù¯ ë¼°ÉÍ
*-------------------------------*/
int NPC_PKPetShop_GetLimtPetList(int talker, char *argstr, char* token2,int sell)
{
char token[NPC_UTIL_GETARGSTR_LINEMAX];
char buff[NPC_UTIL_GETARGSTR_LINEMAX];
char token3[NPC_UTIL_GETARGSTR_LINEMAX];
int k = 0 , i = 1 , j = 0;
int imax;
int itemtype = 0;
int itemindex;
int okflg = 0;
char buf[256];
int flg=0;
int cost;
if(sell == -1 ){
i = CHAR_STARTITEMARRAY;
imax = CHAR_MAXITEMHAVE;
flg = -1;
}else{
i= sell;
imax= sell + 1;
flg = 1;
}
/*--- ľÔÂʧÄÌ Ø©Ã«äú ÔÊÔ£Û--*/
/** µ©Ê¸ÆËÅÒ»ïʧÄÌ Ø©Ã«ÊÖÔÈ»¯ÖÐÐ×ÈÕ ÒÁ¡õÐþÆ¥»ÍÒ£--*/
/*-- µ©Ê¸ÆËÅÒ»ïÖÊ Æ¥Ãó·òºë·ÂØ©»¥ --*/
for( ; i < imax ; i++ ){
okflg=0;
itemindex = CHAR_getItemIndex( talker , i );
if( ITEM_CHECKINDEX( itemindex) ){
/*--ʧÄÌ Ø©¼°ÕýÄÌÃó»¥ÓòÚÛØÆÐ×ÈÕ£ý ľÔÂ--*/
if( NPC_Util_GetStrFromStrWithDelim( argstr,"LimitItemType",
buff, sizeof( buff))
!= NULL )
{
k = 1;
while(getStringFromIndexWithDelim(buff , "," , k, token, sizeof(token))
!= FALSE )
{
#ifdef _ITEM_TYPETABLE
int cmpmaxitem = sizeof(TypeTable)/sizeof(TypeTable[0]);
#endif
k++;
#ifdef _ITEM_TYPETABLE
for(j = 0 ; j < cmpmaxitem ; j++){
#else
for(j = 0 ; j < ITEM_CATEGORYNUM+3 ; j++){
#endif
if(strcmp( TypeTable[ j].arg , token) == 0 ) {
itemtype = TypeTable[ j].type;
if(ITEM_getInt(itemindex,ITEM_TYPE) == itemtype) {
/*-- Ù¯ ×ÛÔÀ--*/
cost = NPC_GetSellPetList(itemindex,0,argstr,token3,i,sell);
if(cost != -1) return cost;
strncat( token2, token3, sizeof( token3));
okflg = 1;
}else if(itemtype == 30){
if( 8 <= ITEM_getInt(itemindex,ITEM_TYPE)
&& (ITEM_getInt(itemindex,ITEM_TYPE) <= 15) ){
/*-- Ù¯ ×ÛÔÀ--*/
cost = NPC_GetSellPetList(itemindex,0,argstr,token3,i,sell);
if(cost != -1) return cost;
strncat(token2,token3,sizeof(token3));
okflg = 1;
}
}else if(itemtype == 40){
if(( 0 <= ITEM_getInt(itemindex,ITEM_TYPE)
&& (ITEM_getInt(itemindex,ITEM_TYPE) <= 4))
|| (17 <= ITEM_getInt(itemindex,ITEM_TYPE)
&& (ITEM_getInt(itemindex,ITEM_TYPE) <= 19))
) {
/*-- Ù¯ ×ÛÔÀ--*/
cost = NPC_GetSellPetList(itemindex,0,argstr,token3,i,sell);
if(cost != -1) return cost;
strncat(token2,token3,sizeof(token3));
okflg = 1;
}
}else if(itemtype == 50){
if( 5 <= ITEM_getInt(itemindex,ITEM_TYPE)
&& (ITEM_getInt(itemindex,ITEM_TYPE) <= 7) ){
/*-- Ù¯ ×ÛÔÀ--*/
cost = NPC_GetSellPetList(itemindex,0,argstr,token3,i,sell);
if(cost != -1) return cost;
strncat(token2,token3,sizeof(token3));
okflg = 1;
}
}
break;
}
}
if(okflg == 1) break;
}
}
/*--ÕýÄÌÃó±åئÈÊ»¯ ÌΠįØÆ»¯ ľÔÂʧÄÌ Ø©¾®ÃñÄáÓÀÛÍ--*/
if( (NPC_Util_GetStrFromStrWithDelim( argstr, "LimitItemNo",
buff,sizeof( buff))
!= NULL)
&& okflg == 0 )
{
k = 1;
while(getStringFromIndexWithDelim(buff , "," , k, token, sizeof(token))
!= FALSE )
{
k++;
/*--ÖÏÊÖɬÀýñľ»¯Ø¦¾®ÔÈÐ×ÈÕ£ý ÷»ÔÊÔÂ-*/
if(strstr( token, "-")==NULL && strcmp(token,"") != 0) {
if(ITEM_getInt(itemindex,ITEM_ID) == atoi(token)) {
/*-- Ù¯ ×ÛÔÀ--*/
cost = NPC_GetSellPetList(itemindex,0,argstr,token3,i,sell);
if(cost != -1) return cost;
strncat(token2,token3,sizeof(token3));
okflg=1;
}
}else if (strstr( token, "-") != NULL){
int start;
int end;
int work;
/*-- Ù¯ ×ÛÔÀ--*/
/* "-"Æ¥à¼å©ÈÕľÐ×炙§¼°ÐÑ°ÀÎç ¼°ÐÑ°Àëäú --*/
getStringFromIndexWithDelim( token, "-", 1, buf, sizeof(buf));
start = atoi( buf);
getStringFromIndexWithDelim( token, "-", 2 ,buf, sizeof(buf));
end = atoi( buf);
/*-- į»¥ÝѱåئÔÈ»¯ÖÐÐ×ÈÕ£ý ľ׸ÒüÔÂ**/
if(start > end){
work = start;
start = end;
end = work;
}
end++;
/*--"-"Æ¥à¼å©ÈÕľÐ×Ûм°Ê§ÄÌ Ø©Ã«Ê÷ ë ÔÂ--*/
if( (start <= ITEM_getInt(itemindex,ITEM_ID))
&& (ITEM_getInt(itemindex,ITEM_ID) < end) )
{
/*-- Ù¯ ×ÛÔÀ--*/
cost = NPC_GetSellPetList(itemindex,0,argstr,token3,i,sell);
if(cost != -1) return cost;
strncat(token2,token3,sizeof(token3));
okflg = 1;
}
}
}
}
/*-- Ô³ðÎ绥ƥÎåئÖÐ--*/
if(okflg == 0) {
cost = NPC_GetSellPetList(itemindex, 1, argstr, token3, i, sell);
if(sell != -1) return -1;
strncat( token2, token3, sizeof( token3));
}
}
}
return -1;
}
/*----------------------------------------------------------
ÛÍ·ÂÄÌʧ¼þÐþ±å˪ññÔÊÔÂÃó·òÐþÎì»ï¼°×ÛÔÀ
*----------------------------------------------------------*/
int NPC_GetSellPetList(int itemindex,int flg, char *argstr,char *argtoken,int select,int sell)
{
char buff[256];
double rate = 0.2;
char buff2[256];
char buff3[64];
int k = 1;
int cost = -1;
/*--µ©Ê¸ÆËÅÒ»ïÒÁ¡õÐþ--**/
if(NPC_Util_GetStrFromStrWithDelim( argstr,"special_item",buff, sizeof( buff))
!= NULL)
{
if(NPC_Util_GetStrFromStrWithDelim( argstr,"special_rate",buff2, sizeof( buff2))
!= NULL )
{
rate = atof(buff2);
}else{
rate = 1.2;
}
while(getStringFromIndexWithDelim(buff , "," , k, buff2, sizeof(buff2)) !=FALSE )
{
k++;
if(strstr( buff2, "-") == NULL && strcmp(buff2,"") != 0) {
if(ITEM_getInt(itemindex,ITEM_ID) == atoi(buff2)){
cost = NPC_SellPetstrsStr( itemindex,0, rate, argtoken,select,sell);
return cost;
}
}else if (strstr( buff2, "-") != NULL){
int start;
int end;
int work;
/*-- Ù¯ ×ÛÔÀ--*/
/* "-"Æ¥à¼å©ÈÕľÐ×炙§¼°ÐÑ°ÀÎç ¼°ÐÑ°Àëäú --*/
getStringFromIndexWithDelim( buff2, "-", 1, buff3, sizeof(buff3));
start = atoi( buff3);
getStringFromIndexWithDelim( buff2, "-", 2 ,buff3, sizeof(buff3));
end = atoi( buff3);
/*-- į»¥ÝѱåئÔÈ»¯ÖÐÐ×ÈÕ£ý ľ׸ÒüÔÂ**/
if(start > end){
work = start;
start = end;
end = work;
}
end++;
/*--"-"Æ¥à¼å©ÈÕľÐ×Ûм°Ê§ÄÌ Ø©Ã«Ê÷ ë ÔÂ--*/
if( (start <= ITEM_getInt(itemindex,ITEM_ID))
&& (ITEM_getInt(itemindex,ITEM_ID) < end)
){
cost = NPC_SellPetstrsStr( itemindex,0, rate, argtoken,select,sell);
return cost;
}
}
}
}
/*--ÓáõѨ»ïÒÁ¡õÐþ--*/
if( NPC_Util_GetStrFromStrWithDelim( argstr,"sell_rate",buff, sizeof( buff))
!= NULL )
{
rate = atof(buff);
cost = NPC_SellPetstrsStr( itemindex, flg ,rate, argtoken,select,sell);
return cost;
}
return cost;
}
/*------------------------------------------
Ù¯ ë×ÛÔÂ(µ¤Ô»åÃ)
*------------------------------------------*/
int NPC_SellPetstrsStr(int itemindex,int flg,double rate,char *argtoken,int select,int sell)
{
int cost;
char escapedname[256];
char name[256];
char *eff;
cost = ITEM_getInt( itemindex, ITEM_COST);
cost = (int)(cost * rate);
if(sell != -1) return cost;
//strcpy( escapedname, ITEM_getChar( itemindex, ITEM_NAME));
strcpy( escapedname, ITEM_getChar( itemindex, ITEM_SECRETNAME));
makeEscapeString( escapedname, name, sizeof( name));
eff=ITEM_getChar(itemindex, ITEM_EFFECTSTRING);
makeEscapeString( eff, escapedname, sizeof(escapedname));
sprintf(argtoken,"%s|%d|%d|%d|%s|%d|",
name,
flg,
cost,
ITEM_getInt( itemindex, ITEM_BASEIMAGENUMBER),
escapedname,
select
);
return -1;
}
/*--------------------------------------------
*
*ÛÍ·ÂÄÌʧ¼þÐþ¾®ÈÕçø°í»¥ß¯ÔÈ»¯ÎåÐ×ÎçÎå ÔÂ
*
*-------------------------------------------*/
BOOL NPC_PKPetShop_SellNewPet(int meindex,int talker,char *data)
{
int select;
int cost;
int oldcost;
char token[32];
int k;
int itemindex;
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
char token2[256];
if(NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr)) == NULL) {
print("GetArgStrErr");
return FALSE;
}
/*--߯ÔÈ»¯ Ð×·¸¡õÕý¼°ÛÐÝ©--*/
getStringFromIndexWithDelim(data , "|" ,1, token, sizeof( token));
select = atoi(token);
getStringFromIndexWithDelim(data , "|" ,2, token, sizeof( token));
oldcost = atoi(token);
if(select == 0) return FALSE;
cost = NPC_PKPetShop_GetLimtPetList( talker,argstr, token2,select);
/*--ਵ¤ÊÖ¼°Ã«µ¤Ç·µ¤ÎçØÆÐ×ÎçÎå¼°¾Þ·Â¡õ--*/
if(oldcost != cost || cost == -1)
{
int fd = getfdFromCharaIndex( talker);
char token[256];
sprintf(token,"\n\n°¥Ñ½!¶Ô²»Æð"
"\n\n¶Ô²»Æð°¡ ! ¿É²»¿ÉÒÔÔÙÑ¡Ò»´ÎÄØ£¿"
);
k = select;
itemindex = CHAR_getItemIndex( talker ,k);
/*--·òºë¼°Çë --*/
if(itemindex != -1) {
print("\n%s(%d,%d,%d):ºÍÑ¡ÔñµÄ¶«Î÷²»Í¬error([%s(%d)]ÒªÏûʧÁË£©",
CHAR_getChar(talker, CHAR_NAME),
CHAR_getInt( talker, CHAR_FLOOR),
CHAR_getInt( talker, CHAR_X ),
CHAR_getInt( talker, CHAR_Y ),
ITEM_getChar(itemindex, CHAR_NAME),
ITEM_getInt( itemindex, ITEM_ID )
);
LogItem(
CHAR_getChar( talker, CHAR_NAME ), /* ƽÅÒ·Â */
CHAR_getChar( talker, CHAR_CDKEY ),
#ifdef _add_item_log_name // WON ADD ÔÚitemµÄlogÖÐÔö¼ÓitemÃû³Æ
itemindex,
#else
ITEM_getInt( itemindex, ITEM_ID ), /* ʧÄÌ Ø© į */
#endif
"SellErr",
CHAR_getInt( talker, CHAR_FLOOR),
CHAR_getInt( talker, CHAR_X ),
CHAR_getInt( talker, CHAR_Y ),
ITEM_getChar( itemindex, ITEM_UNIQUECODE),
ITEM_getChar( itemindex, ITEM_NAME),
ITEM_getInt( itemindex, ITEM_ID)
);
}else{
print("\n%s(%d,%d,%d):ºÍÑ¡ÔñµÄ¶«Î÷²»Í¬error(ûÓÐÈκÎitem´æÔÚ£©",
CHAR_getChar(talker, CHAR_NAME),
CHAR_getInt( talker, CHAR_FLOOR),
CHAR_getInt( talker, CHAR_X ),
CHAR_getInt( talker, CHAR_Y )
);
LogItem(
CHAR_getChar( talker, CHAR_NAME ), /* ƽÅÒ·Â */
CHAR_getChar( talker, CHAR_CDKEY ),
-1, /* ʧÄÌ Ø© į */
"SellErr",
CHAR_getInt( talker, CHAR_FLOOR),
CHAR_getInt( talker, CHAR_X ),
CHAR_getInt( talker, CHAR_Y ),
"-1", "NULL", -1 );
}
/*--³ð³ðƥ˪ññ--*/
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
CHAR_WINDOWTYPE_WINDOWITEMSHOP_LIMIT,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
token);
return FALSE;
}
k = select;
itemindex=CHAR_getItemIndex( talker ,k);
if(itemindex != -1) {
{
LogItem(
CHAR_getChar( talker, CHAR_NAME ), /* ƽÅÒ·Â */
CHAR_getChar( talker, CHAR_CDKEY ),
#ifdef _add_item_log_name // WON ADD ÔÚitemµÄlogÖÐÔö¼ÓitemÃû³Æ
itemindex,
#else
ITEM_getInt( itemindex, ITEM_ID ), /* ʧÄÌ Ø© į */
#endif
"Sell",
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)
);
}
}
CHAR_DelItem( talker, k);
CHAR_AddGold( talker, cost);
CHAR_send_P_StatusString( talker, CHAR_P_STRING_GOLD);
return TRUE;
}
void NPC_LimitPetShop(int meindex,int talker,int select)
{
int fd = getfdFromCharaIndex( talker);
char token[NPC_UTIL_GETARGSTR_LINEMAX];
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
char buf[1024];
/*--ÔÆ÷Ò¼°°×ÑëÄÌ»ï ÖÐÛè·´°×ÑëÄ̻ﻥ·°Øêئ¾®ÔÈÐ×ÎçÎå·´±Î --*/
if( NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr)) == NULL) {
print("shop_GetArgStr_Err");
return;
}
/*-- ÖÐäúÔ»»Ù ÷ÒÆ¥ÔʶªÓÀ±¾¡õ³â-*/
if(NPC_Util_GetStrFromStrWithDelim( argstr, "sellonly_msg", buf, sizeof( buf))
!=NULL)
{
sprintf(token,"\n\n%s", buf);
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_YESNO,
CHAR_WINDOWTYPE_WINDOWITEMSHOP_LIMIT,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
token);
}else{
CHAR_talkToCli( talker, meindex, "ÕâÊÇÂòÂôרÃŵꡣ",CHAR_COLORWHITE);
}
return;
}
/*--ÞÑ˪ºÐ½ñÊÏ--*/
void NPC_PKPetShop_ExpressmanCheck(int meindex,int talker)
{
int fd = getfdFromCharaIndex( talker);
char token[1024];
char argstr[NPC_UTIL_GETARGSTR_BUFSIZE];
char buf[1024];
/*--ÔÆ÷Ò¼°°×ÑëÄÌ»ï ÖÐÛè·´°×ÑëÄ̻ﻥ·°Øêئ¾®ÔÈÐ×ÎçÎå·´±Î --*/
if( NPC_Util_GetArgStr( meindex, argstr, sizeof(argstr)) == NULL) {
print("shop_GetArgStr_Err");
return;
}
/*-- ÖÐäúÔ»»Ù ÷ÒÆ¥ÔʶªÓÀ±¾¡õ³â-*/
NPC_Util_GetStrFromStrWithDelim( argstr, "main_msg", buf, sizeof( buf));
sprintf(token,"4\n<EFBFBD>@<40>@<40>@<40>@<40>@<40>@<40>@%s\n\n%s"
"\n\n<EFBFBD>@<40>@<40>@<40>@<40>@£¼ ´ò¹¤ £¾<C2A3>@<40>@<40>@"
"\n\n<EFBFBD>@<40>@<40>@<40>@ £¼½»¸¶ÐÐÀ"
,CHAR_getChar(meindex,CHAR_NAME),buf);
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_SELECT,
WINDOW_BUTTONTYPE_CANCEL,
CHAR_WINDOWTYPE_WINDOWITEMSHOP_EXPRESS,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
token);
return;
}
#endif
// _PKPETSHOP