📄 npc_petshop.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 "log.h"
#ifdef _CHECK_ENEMY_PET
#include "enemy.h"
#endif
/* 丢永本□斥及enum */
enum {
NPC_PETSHOP_MSG_OVER,
NPC_PETSHOP_MSG_MAIN,
NPC_PETSHOP_MSG_REALY,
NPC_PETSHOP_MSG_THANKS,
NPC_PETSHOP_MSG_COST,
NPC_PETSHOP_MSG_POOLTHANKS,
NPC_PETSHOP_MSG_POOLFULL,
NPC_PETSHOP_MSG_GETFULL,
};
typedef struct {
char option[32];
char defaultmsg[128];
}NPC_PETSHOP_MSG;
NPC_PETSHOP_MSG shopmsg[] = {
{ "over_msg", "钱用完罗!没问题吗?"},
{ "main_msg", "欢迎"},
{ "realy_msg", "真的可以吗?"},
{ "thanks_msg", "谢谢!"},
{ "cost_msg", "钱不够喔!"},
{ "pooltanks_msg", "谢谢!"},
{ "poolfull_msg", "超过的无法处理喔"},
{ "getfull_msg", "你不是有很多宠物吗"}
};
#define PETCOST 10
void NPC_PetDate(int meindex,int toindex,int select,char *token);
void NPC_PetDate2(int meindex,int talker,int select,char *token);
void NPC_PetDate3(int meindex,int talker,int select,char *token);
void NPC_PetDel2( int meindex, int talker, int select, char *token);
void NPC_PetDel3( int meindex, int talker, int select, char *token);
void NPC_getDrawPet( int meindex, int toindex, char *token, int *buttontype, int select);
static void NPC_PetShop_selectWindow( int meindex, int toindex, int num,int select);
int NPC_GetCost(int meindex,int talker,int petindex);
void NPC_PetDel(int meindex, int toindex,int select,char* token);
void NPC_MaxGoldOver(int meindex,int toindex,int select,char *token);
#ifdef _NPC_DEPOTPET
void NPC_PoolPetShop_DepotPet_Menu( int meindex, int talkerindex);
void NPC_DepotPet_List( int meindex, int toindex, char *token, int *buttontype, int select);
void NPC_DepotPet_Add( int meindex, int talker, int select, char *token);
void NPC_DepotPet_Get( int meindex, int talker, int select, char *token);
void NPC_DepotPet_AskGet(int meindex,int talker,int select,char *token);
//void NPC_DepotPet_Pet_printWindow( int meindex, int talkerindex);
//void NPC_DepotPet_Depot_printWindow( int meindex, int talkerindex);
//BOOL NPC_DepotPet_InsertPet( int meindex, int talkerindex, int num);
//BOOL NPC_DepotPet_getPet( int meindex, int talkerindex, int num);
#endif
// 仃 木嗯喊煌遥挚
#define NPC_GETPOOLCOST( talker) ( 50 + CHAR_getInt( talker, CHAR_LV)*4)
// 仃 木嗯犯白巧伙玄
#define NPC_PETSHOP_POOLCOST_DEFAULT 200
/*--伐□弁 及割忡--*/
enum {
CHAR_WORK_NOMALRATE = CHAR_NPCWORKINT1,
CHAR_WORK_SPECIALRATE = CHAR_NPCWORKINT2,
CHAR_WORK_POOLCOST = CHAR_NPCWORKINT3,
CHAR_WORK_POOLFLG = CHAR_NPCWORKINT4,
};
/*********************************
* 赓渝质
*********************************/
BOOL NPC_PetShopInit( int meindex )
{
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
char buf[256];
double rate;
int intrate;
// int cost;
int tmp;
/*--正奶皿涩烂--*/
CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPESTONESHOP );
if( NPC_Util_GetArgStr( meindex, npcarg, sizeof( npcarg)) == NULL){
print("GetArgStrErr");
return FALSE;
}
/*--伊□玄毛铵户卞筏盛今六化云仁*/
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "nomal_rate", buf, sizeof( buf)) != NULL){
rate = atof( buf);
intrate = ( int)( rate *1000);
CHAR_setWorkInt( meindex , CHAR_WORK_NOMALRATE ,intrate );
}else{
CHAR_setWorkInt( meindex , CHAR_WORK_NOMALRATE ,1000 );
}
/*--旦矢扑乓伙伊□玄手筏盛今六化云仁--*/
if(NPC_Util_GetStrFromStrWithDelim( npcarg, "special_rate", buf, sizeof( buf))
!=NULL)
{
rate = atof( buf);
intrate = ( int)( rate *1000);
CHAR_setWorkInt( meindex , CHAR_WORK_SPECIALRATE ,intrate );
}else{
CHAR_setWorkInt( meindex , CHAR_WORK_SPECIALRATE ,1200 );
}
// 仃 木嗯筏盛
//cost = NPC_Util_GetNumFromStrWithDelim( npcarg, "pool_cost");
//if( cost == -1 ) cost = NPC_PETSHOP_POOLCOST_DEFAULT;
//CHAR_setWorkInt( meindex, CHAR_WORK_POOLCOST, cost);
// 仃 木互请 月井升丹井毛筏盛
tmp = NPC_Util_GetNumFromStrWithDelim( npcarg, "pool_flg");
if( tmp != 1 ) tmp = 0;
CHAR_setWorkInt( meindex, CHAR_WORK_POOLFLG, tmp);
return TRUE;
}
/*********************************
* 仄井仃日木凶凛及质
*********************************/
void NPC_PetShopTalked( 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,0);
/*-反元户及蓟 --*/
NPC_PetShop_selectWindow( meindex, talkerindex,0,-1);
}
/*********************************
* 苇日木凶凛及质
*********************************/
void NPC_PetShopLooked( int meindex , int lookedindex)
{
/* 皿伊奶乩□卞覆仄化分仃 杀允月 */
if( CHAR_getInt( lookedindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) {
return;
}
/* ㄠ弘伉永玉动 及心 */
if( NPC_Util_CharDistance( lookedindex, meindex ) > 2) return;
/*--伐□弁及赓渝祭--*/
// CHAR_setWorkInt(lookedindex,CHAR_WORKSHOPRELEVANT,0);
// NPC_PetShop_selectWindow( meindex, lookedindex,0,-1);
}
static void NPC_PetShop_selectWindow( int meindex, int toindex, int num,int select)
{
char token[1024];
int buttontype=0,windowtype=0,windowno=0;
char buf[1024];
int fd = getfdFromCharaIndex( toindex);
//print("\n NPC_PetShop_selectWindow num:%d select:%d ", num, select);
if( fd == -1 ) {
fprint( "getfd err\n");
return;
}
token[0] = '\0';
switch(num){
// 赓及它奴件玉它
case 0:
NPC_MaxGoldOver( meindex, toindex, NPC_PETSHOP_MSG_MAIN, buf);
#ifdef _NPC_DEPOTPET
if( !CHAR_getWorkInt( meindex, CHAR_WORK_POOLFLG)) {
sprintf(token, "4\n ☆宠物商店☆"
"%s"
"\n"
"\n 《 卖宠物 》"
"\n"
"\n"
"\n 《 离开 》",
buf);
}else {
sprintf(token, "4\n ☆宠物商店☆"
"%s"
"\n 《 寄放宠物 》"
"\n 《 领取宠物 》"
"\n 《 卖宠物 》"
"\n 《 使用仓库 》"
"\n 《 离开 》",
buf);
}
#else
if( !CHAR_getWorkInt( meindex, CHAR_WORK_POOLFLG)) {
sprintf(token, "4\n ☆宠物商店☆"
"%s"
"\n"
"\n 《 卖宠物 》"
"\n"
"\n 《 离开 》",
buf);
}else {
sprintf(token, "4\n ☆宠物商店☆"
"%s"
"\n 《 寄放宠物 》"
"\n 《 领取宠物 》"
"\n 《 卖宠物 》"
"\n 《 离开 》",
buf);
}
#endif
buttontype=WINDOW_BUTTONTYPE_NONE;
windowtype=WINDOW_MESSAGETYPE_SELECT;
windowno=CHAR_WINDOWTYPE_WINDOWPETSHOP_START;
break;
case 1:
buttontype=WINDOW_BUTTONTYPE_CANCEL;
windowtype=WINDOW_MESSAGETYPE_PETSELECT;
windowno=CHAR_WINDOWTYPE_WINDOWPETSHOP_PETSELECT;
break;
case 2:
NPC_PetDate(meindex,toindex,select,token);
buttontype=WINDOW_BUTTONTYPE_YESNO;
windowtype=WINDOW_MESSAGETYPE_MESSAGE;
windowno=CHAR_WINDOWTYPE_WINDOWPETSHOP_MAIN;
break;
case 3:
if( (CHAR_getInt(toindex,CHAR_GOLD)+CHAR_getWorkInt(toindex,CHAR_WORKSHOPRELEVANTSEC))
> CHAR_getMaxHaveGold( toindex) ){
NPC_MaxGoldOver( meindex, toindex, NPC_PETSHOP_MSG_OVER, token);
windowno=CHAR_WINDOWTYPE_WINDOWPETSHOP_GOLDOVER;
buttontype=WINDOW_BUTTONTYPE_YESNO;
}else{
NPC_PetDel(meindex,toindex,select,token);
buttontype=WINDOW_BUTTONTYPE_OK;
windowno=CHAR_WINDOWTYPE_WINDOWPETSHOP_END;
}
windowtype=WINDOW_MESSAGETYPE_MESSAGE;
break;
case 4:
NPC_PetDel(meindex,toindex,select,token);
buttontype=WINDOW_BUTTONTYPE_OK;
windowno=CHAR_WINDOWTYPE_WINDOWPETSHOP_END;
windowtype=WINDOW_MESSAGETYPE_MESSAGE;
break;
case 5: // 领取寄放宠列表
if( CHAR_getWorkInt( meindex, CHAR_WORK_POOLFLG ) != 1 )
return;
buttontype=WINDOW_BUTTONTYPE_CANCEL;
windowtype=WINDOW_MESSAGETYPE_PETSELECT;
windowno=CHAR_WINDOWTYPE_WINDOWPETSHOP_PETSELECT2;
break;
case 6:
if( CHAR_getInt( toindex, CHAR_GOLD)
< NPC_GETPOOLCOST( toindex))
{
NPC_MaxGoldOver(meindex, toindex, NPC_PETSHOP_MSG_COST, token);
buttontype = WINDOW_BUTTONTYPE_OK;
}
else {
NPC_PetDate2( meindex, toindex, select, token);
buttontype = WINDOW_BUTTONTYPE_YESNO;
}
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
windowno = CHAR_WINDOWTYPE_WINDOWPETSHOP_MAIN2;
break;
case 7:
if( CHAR_getWorkInt( meindex, CHAR_WORK_POOLFLG ) != 1 )
return;
if( CHAR_getInt( toindex, CHAR_GOLD) < NPC_GETPOOLCOST( toindex)){
NPC_MaxGoldOver(meindex, toindex, NPC_PETSHOP_MSG_COST, token);
}else {
NPC_PetDel2( meindex, toindex, select, token);
}
buttontype = WINDOW_BUTTONTYPE_OK;
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
windowno = CHAR_WINDOWTYPE_WINDOWPETSHOP_END;
break;
// 仃 木 互域
case 8:
NPC_MaxGoldOver( meindex, toindex, NPC_PETSHOP_MSG_POOLFULL, token);
buttontype = WINDOW_BUTTONTYPE_OK;
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
windowno = CHAR_WINDOWTYPE_WINDOWPETSHOP_END;
break;
// 娄五潸曰矢永玄域 它奴件玉它
case 9: // 取出寄放宠列表
if( CHAR_getWorkInt( meindex, CHAR_WORK_POOLFLG) != 1 )
return;
NPC_getDrawPet( meindex, toindex, token, &buttontype, select);
windowtype = WINDOW_MESSAGETYPE_SELECT;
windowno = CHAR_WINDOWTYPE_WINDOWPETSHOP_DRAWSELECT;
break;
// 娄五潸曰 "
case 10:
NPC_PetDate3( meindex, toindex, select, token);
buttontype = WINDOW_BUTTONTYPE_YESNO;
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
windowno = CHAR_WINDOWTYPE_WINDOWPETSHOP_ASKDRAW;
break;
// 忒允
case 11:
if( CHAR_getWorkInt( meindex, CHAR_WORK_POOLFLG ) != 1 )
return;
NPC_PetDel3( meindex, toindex, select, token);
buttontype = WINDOW_BUTTONTYPE_OK;
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
windowno = CHAR_WINDOWTYPE_WINDOWPETSHOP_END;
break;
// 矢永玄 互域
case 12:
NPC_MaxGoldOver( meindex, toindex, NPC_PETSHOP_MSG_GETFULL, token);
buttontype = WINDOW_BUTTONTYPE_OK;
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
windowno = CHAR_WINDOWTYPE_WINDOWPETSHOP_END;
break;
#ifdef _NPC_DEPOTPET
case 13: // 存入仓库列表
if( !CHAR_CheckDepotPet( toindex) )
return;
buttontype=WINDOW_BUTTONTYPE_CANCEL;
windowtype=WINDOW_MESSAGETYPE_PETSELECT;
windowno=CHAR_WINDOWTYPE_DEPOTPETSHOP_ADD;
break;
case 14: // 取出仓库列表
if( !CHAR_CheckDepotPet( toindex) )
return;
NPC_DepotPet_List( meindex, toindex, token, &buttontype, select);
//buttontype=WINDOW_BUTTONTYPE_CANCEL;
windowtype = WINDOW_MESSAGETYPE_SELECT;
windowno = CHAR_WINDOWTYPE_DEPOTPETSHOP_GET;
break;
case 15: // 询问确认存入仓库
if( CHAR_getInt( toindex, CHAR_GOLD)
< NPC_GETPOOLCOST( toindex))
{
NPC_MaxGoldOver(meindex, toindex, NPC_PETSHOP_MSG_COST, token);
buttontype = WINDOW_BUTTONTYPE_OK;
}
else {
NPC_PetDate2( meindex, toindex, select, token);
buttontype = WINDOW_BUTTONTYPE_YESNO;
}
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
windowno = CHAR_WINDOWTYPE_DEPOTPETSHOP_ASKADD;
break;
case 16: // 询问确认取出仓库
NPC_DepotPet_AskGet( meindex, toindex, select, token);
buttontype = WINDOW_BUTTONTYPE_YESNO;
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
windowno = CHAR_WINDOWTYPE_DEPOTPETSHOP_ASKGET;
break;
case 17: // 确认存入仓库
if( !CHAR_CheckDepotPet(toindex) )
return;
if( CHAR_getInt( toindex, CHAR_GOLD) < NPC_GETPOOLCOST( toindex)){
NPC_MaxGoldOver(meindex, toindex, NPC_PETSHOP_MSG_COST, token);
}else {
NPC_DepotPet_Add( meindex, toindex, select, token);
}
buttontype = WINDOW_BUTTONTYPE_OK;
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
windowno = CHAR_WINDOWTYPE_WINDOWPETSHOP_END;
break;
case 18: // 确认取出仓库
if( CHAR_getWorkInt( meindex, CHAR_WORK_POOLFLG ) != 1 )
return;
if( NPC_DepotPet_CheckLevel( meindex, toindex, select, token) == TRUE) {
NPC_DepotPet_Get( meindex, toindex, select, token);
buttontype = WINDOW_BUTTONTYPE_OK;
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
windowno = CHAR_WINDOWTYPE_WINDOWPETSHOP_END;
}
else {
sprintf( token, "\n你无法照顾这只宠物。");
buttontype = WINDOW_BUTTONTYPE_OK;
windowtype = WINDOW_MESSAGETYPE_MESSAGE;
windowno = CHAR_WINDOWTYPE_WINDOWPETSHOP_END;
}
break;
#endif
// CoolFish: Add 2001/7/4
default:
break;
}
/*--巨旦弗□皿--*/
//makeEscapeString( token, escapedname, sizeof(escapedname));
/*--霜耨--*/
lssproto_WN_send( fd, windowtype,
buttontype,
windowno,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
token);
}
void NPC_PetShopWindowTalked( int meindex, int talkerindex,
int seqno, int select, char *data)
{
int datanum = -1;
if( NPC_Util_CharDistance( talkerindex, meindex ) > 2) {
return;
}
//print("\n NPC_PetShopWindowTalked: data:%s seq:%d sel:%d ", data, seqno, select);
makeStringFromEscaped( data);
datanum = atoi( data);
switch( seqno){
case CHAR_WINDOWTYPE_WINDOWPETSHOP_START:
{
int poolflg = CHAR_getWorkInt( meindex, CHAR_WORK_POOLFLG);
if( ( datanum == 3 && poolflg) || // 卖宠物
( datanum == 2 && !poolflg ) ){ // 领取宠物
NPC_PetShop_selectWindow( meindex, talkerindex, 1, -1 );
}else if( datanum == 1 && poolflg) { // 寄放宠物
if( CHAR_getCharPoolPetElement( talkerindex) != -1 ) {
NPC_PetShop_selectWindow( meindex, talkerindex, 5, -1 );
}
else {
NPC_PetShop_selectWindow( meindex, talkerindex, 8, -1 );
}
}else if( datanum == 2 && poolflg ) { // 领取宠物
if( CHAR_getCharPetElement( talkerindex) != -1 ) {
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0);
NPC_PetShop_selectWindow( meindex, talkerindex, 9, 0);
}else {
NPC_PetShop_selectWindow( meindex, talkerindex, 12, -1 );
}
}
#ifdef _NPC_DEPOTPET
else if( datanum == 4 ) { // 使用宠物仓库
print(" 使用宠物仓库 ");
CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0);
if( !CHAR_CheckDepotPet( talkerindex) ){
CHAR_GetDepotPet( meindex, talkerindex);
CHAR_talkToCli( talkerindex, -1, "取得宠物,请稍後!", CHAR_COLORYELLOW);
}else{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -