📄 npc_windowhealer.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 "npc_windowhealer.h"
/*--怂 ---*/
#define RATE 1000
/*
* 涩烂今木凶它奴件玉它毛请允NPC
* 棵哑 平旦玄失玉矛件民乓□仁日中卅日综木月井手[
*
*/
enum {
CHAR_WORK_LEVEL = CHAR_NPCWORKINT1,
CHAR_WORK_RANGE = CHAR_NPCWORKINT2,
CHAR_WORK_HP = CHAR_NPCWORKINT3,
CHAR_WORK_MP = CHAR_NPCWORKINT4,
};
static void NPC_WindowHealer_selectWindow( int meindex, int toindex, int num);
void NPC_WindowHealerAllHeal( int talker,int mode );
BOOL NPC_WindowHealerLevelCheck(int meindex,int talker);
BOOL NPC_WindowMoneyCheck(int meindex,int talker,int mode);
int NPC_WindowCostCheck(int meindex,int talker);
BOOL NPC_PetHealerCheck(int talker);
int NPC_WindowCostCheckMp(int meindex,int talker);
/*********************************
* 赓渝质
*********************************/
BOOL NPC_WindowHealerInit( int meindex )
{
char *npcarg;
char buf2[256];
int range=1;
int rate;
double drate;
CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEHEALER );
npcarg = CHAR_getChar(meindex,CHAR_NPCARGUMENT);
/*--荚汊允月午五及云嗯毛潸月伊矛伙毛筏盛--*/
/*-- 仃木壬综日木卅中--*/
if(getStringFromIndexWithDelim(npcarg,"|",1,buf2,sizeof(buf2))!=FALSE){
CHAR_setWorkInt(meindex,CHAR_WORK_LEVEL,atoi(buf2));
}else{
return FALSE;
}
/*--觐菁 伊□玄--*/
if(getStringFromIndexWithDelim(npcarg, "|", 2, buf2, sizeof( buf2)) != FALSE ){
drate = atof(buf2);
if(drate==0) {
rate=500;
}else{
rate=(int) (drate * RATE);
}
CHAR_setWorkInt(meindex,CHAR_WORK_HP,rate);
}
if(getStringFromIndexWithDelim(npcarg, "|", 3, buf2, sizeof( buf2)) != FALSE ){
drate = atof(buf2);
if(drate==0){
rate=2000;
}else{
rate=(int)( drate * RATE);
}
CHAR_setWorkInt(meindex,CHAR_WORK_MP,rate);
}
if(getStringFromIndexWithDelim(npcarg, "|", 4, buf2, sizeof( buf2)) != FALSE ){
range=atoi(buf2);
if(range == 0){
range=1;
}
}
CHAR_setWorkInt(meindex,CHAR_WORK_RANGE,range);
return TRUE;
}
void NPC_WindowHealerTalked( int meindex , int talkerindex , char *szMes ,int color )
{
if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) {
return;
}
if( NPC_Util_CharDistance( talkerindex, meindex )
> CHAR_getWorkInt(meindex,CHAR_WORK_RANGE)){
return;
}
if( (CHAR_getWorkInt(talkerindex,CHAR_WORKPARTYMODE) == 0)
|| (CHAR_getWorkInt(talkerindex,CHAR_WORKPARTYMODE) == 2) ){
NPC_WindowHealer_selectWindow( meindex, talkerindex,0);
}else{
int i=0;
int otherindex;
for( i=0 ; i < CHAR_PARTYMAX ;i++){
otherindex=CHAR_getWorkInt(talkerindex,CHAR_WORKPARTYINDEX1+i);
if(otherindex != -1){
NPC_WindowHealer_selectWindow( meindex, otherindex,0);
}
}
}
}
void NPC_WindowHealerLooked( int meindex , int lookedindex)
{
if( CHAR_getInt( lookedindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) {
return;
}
if( NPC_Util_CharDistance( lookedindex, meindex )
> CHAR_getWorkInt(meindex,CHAR_WORK_RANGE)){
return;
}
NPC_WindowHealer_selectWindow( meindex, lookedindex,0);
}
static void NPC_WindowHealer_selectWindow( int meindex, int toindex, int num)
{
char token[1024];
char escapedname[1024];
int fd = getfdFromCharaIndex( toindex);
int buttontype=0;
int windowtype=0;
int windowno=0;
/*--它奶件玉它正奶皿丢永本□斥互云云中及匹燮卞涩烂--*/
windowtype=WINDOW_MESSAGETYPE_MESSAGE;
switch( num){
case 0:
/*--蓟 --*/
sprintf(token," 哎呀!你受伤了吗? \n\n "
" < 耐久力回复> \n"
" < 气力回复 > \n"
" < 耐久力·气力回复 > \n\n"
" <宠物回复(免费)> "
);
buttontype=WINDOW_BUTTONTYPE_CANCEL;
windowtype=WINDOW_MESSAGETYPE_SELECT;
windowno=CHAR_WINDOWTYPE_WINDOWHEALER_STARTMSG;
break;
case 1:
if( CHAR_getInt(toindex,CHAR_HP) ==CHAR_getWorkInt( toindex, CHAR_WORKMAXHP)){
if(NPC_PetHealerCheck(toindex)==FALSE){
sprintf(token,
" < 耐久力回复 >"
"\n\n\n\n 似乎没有必要回复唷! ");
}else{
sprintf(token,
" < 耐久力回复 >"
"\n\n 似乎没有必要回复唷! "
"\n\n 因为宠物好像也受伤了!"
"\n 先帮他回复吧!");
NPC_WindowHealerAllHeal(toindex,0 );
}
buttontype=WINDOW_BUTTONTYPE_OK;
windowno=CHAR_WINDOWTYPE_WINDOWHEALER_HPMSG;
break;
}else if(NPC_WindowHealerLevelCheck(meindex,toindex)==TRUE){
sprintf(token," < 耐久力回复 >"
"\n\n\n 是要回复耐久力没错吧! "
"\n\n 现在的等级可以免费帮你回复唷!");
}else{
int gold;
gold=NPC_WindowCostCheck(meindex,toindex);
sprintf(token," < 耐久力回复 >"
"\n\n\n 是要回复耐久力没错吧! "
"\n\n 收您%d的STONE 。"
,gold);
}
buttontype=WINDOW_BUTTONTYPE_YESNO;
windowno=CHAR_WINDOWTYPE_WINDOWHEALER_HPMSG;
break;
case 2:
if( CHAR_getInt(toindex,CHAR_MP) ==CHAR_getWorkInt( toindex, CHAR_WORKMAXMP)){
if(NPC_PetHealerCheck(toindex)==FALSE){
sprintf(token, " < 气力回复 >"
"\n\n\n\n 似乎没有必要回复唷! ");
}else{
sprintf(token, " < 气力回复 >"
"\n\n 似乎没有必要回复唷! "
"\n\n 因为宠物好像也受伤了!"
"\n 先帮他回复吧!");
NPC_WindowHealerAllHeal(toindex,0 );
}
buttontype=WINDOW_BUTTONTYPE_OK;
windowno=CHAR_WINDOWTYPE_WINDOWHEALER_SPIRITMSG;
break;
}
if(NPC_WindowHealerLevelCheck(meindex,toindex)==TRUE){
sprintf(token," < 气力回复>"
"\n\n 是要回复气力没错吧! "
"\n\n 现在的等级可以免费帮你回复唷!");
}else{
int cost;
cost=NPC_WindowCostCheckMp(meindex,toindex);
sprintf(token," < 气力回复>"
"\n\n\n 是要回复气力没错吧! "
"\n\n 收您%d的STONE 。",
cost);
}
buttontype=WINDOW_BUTTONTYPE_YESNO;
windowno=CHAR_WINDOWTYPE_WINDOWHEALER_SPIRITMSG;
break;
case 3:
sprintf(token, "\n <耐久力已回复>"
"\n <宠物也已回复一般状态>"
"\n\n\n 这样子就没问题了! ");
/*--觐菁 及心荚汊今六月--*/
NPC_WindowHealerAllHeal( toindex ,1 );
buttontype=WINDOW_BUTTONTYPE_OK;
windowno=CHAR_WINDOWTYPE_WINDOWHEALER_OKHPMSG;
break;
case 4:
sprintf(token, "\n <气力已回复>"
"\n <宠物也已回复一般状态>"
"\n\n\n 这样子就没问题了! ");
/*--竣 及心荚汊今六月---*/
NPC_WindowHealerAllHeal( toindex ,2 );
buttontype=WINDOW_BUTTONTYPE_OK;
windowno=CHAR_WINDOWTYPE_WINDOWHEALER_OKSPIRITMSG;
break;
case 6:
{
int cost=0;
if(CHAR_getInt(toindex,CHAR_HP) < CHAR_getWorkInt( toindex, CHAR_WORKMAXHP))
{
cost+=NPC_WindowCostCheck(meindex,toindex);
}
if( CHAR_getInt(toindex,CHAR_MP) < CHAR_getWorkInt( toindex, CHAR_WORKMAXMP))
{
cost=cost+NPC_WindowCostCheckMp(meindex,toindex);
}
if(cost==0) {
if(NPC_PetHealerCheck(toindex)==FALSE){
sprintf(token,
" < 耐久力气力回复 >"
"\n\n\n\n 似乎没有必要回复唷! ");
}else{
sprintf(token," < 耐久力气力回复 >"
"\n\n 似乎没有必要回复唷! "
"\n\n 因为宠物好像也受伤了!"
"\n 先帮他回复吧!");
NPC_WindowHealerAllHeal(toindex,0 );
}
buttontype=WINDOW_BUTTONTYPE_OK;
windowtype=WINDOW_MESSAGETYPE_MESSAGE;
windowno=CHAR_WINDOWTYPE_WINDOWHEALER_SPIRITMSG;
break;
}else{
sprintf(token," < 耐久力气力回复 >"
"\n\n\n 是要回复耐久力气力没错吧!"
"\n\n 收您%d的STONE 。",cost);
}
}
if(NPC_WindowHealerLevelCheck(meindex,toindex)==TRUE){
sprintf(token," < 耐久力气力回复 >"
"\n\n\n 是要回复耐久力气力没错吧!"
"\n\n 现在的等级可以免费帮你回复唷!");
}
buttontype=WINDOW_BUTTONTYPE_YESNO;
windowtype=WINDOW_MESSAGETYPE_MESSAGE;
windowno=CHAR_WINDOWTYPE_WINDOWHEALER_ALLMSG;
break;
case 7:
sprintf(token," <耐久力气力已回复>"
"\n <宠物也已回复一般状态>"
"\n\n\n 这样一来就回复健康了!");
NPC_WindowHealerAllHeal( toindex ,3 );
buttontype=WINDOW_BUTTONTYPE_OK;
windowtype=WINDOW_MESSAGETYPE_MESSAGE;
windowno=CHAR_WINDOWTYPE_WINDOWHEALER_OKALLMSG;
break;
case 8:
sprintf(token,"\n\n\n\n 真可惜似乎所带的金钱不够唷!");
buttontype=WINDOW_BUTTONTYPE_OK;
windowtype=WINDOW_MESSAGETYPE_MESSAGE;
windowno=CHAR_WINDOWTYPE_WINDOWHEALER_OKHPMSG;
break;
case 9:
sprintf(token," <宠物回复> "
"\n\n\n 已经没问题了啦! "
"\n\n 但是太勉强的话也不行唷! ");
NPC_WindowHealerAllHeal(toindex,0 );
buttontype=WINDOW_BUTTONTYPE_OK;
windowtype=WINDOW_MESSAGETYPE_MESSAGE;
windowno=CHAR_WINDOWTYPE_WINDOWHEALER_OKHPMSG;
break;
case 10:
sprintf(token," <宠物回复> "
"\n\n\n 似乎没有必要回复宠物的样子。 "
"\n\n 但是太勉强的话也不行唷! ");
buttontype=WINDOW_BUTTONTYPE_OK;
windowtype=WINDOW_MESSAGETYPE_MESSAGE;
windowno=CHAR_WINDOWTYPE_WINDOWHEALER_OKHPMSG;
break;
}
makeEscapeString( token, escapedname, sizeof(escapedname));
/*-仇仇匹霜耨允月--*/
lssproto_WN_send( fd, windowtype,
buttontype,
windowno,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
escapedname);
}
/*-----------------------------------------
弁仿奶失件玄井日忒匀化五凶凛卞裟太请今木月[
-------------------------------------------*/
void NPC_WindowHealerWindowTalked( int meindex, int talkerindex,
int seqno, int select, char *data)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -