chuyiwen_gmsv/callfromcli.c
2017-01-14 00:37:03 +09:00

4737 lines
156 KiB
C
Raw Permalink 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 <stdio.h>
#include <time.h>
#include <stdlib.h>
#include "common.h"
#include "util.h"
#include "lssproto_serv.h"
#include "saacproto_cli.h"
#include "npc_exchangeman.h"
#include "net.h"
#include "char.h"
#include "object.h"
#include "readmap.h"
#include "addressbook.h"
#include "handletime.h"
#include "configfile.h"
#include "event.h"
#include "pet.h"
#include "battle.h"
#include "battle_command.h"
#include "magic.h"
#include "petmail.h"
#include "item_gen.h"
#include "pet_skill.h"
#include "log.h" //add this because the second had it
#include "map_deal.h" // CoolFish: 2001/4/18
#include "trade.h" // CoolFish: Trade 2001/4/18
#include "family.h" // CoolFish: Family 2001/5/24
#include "item_event.h" // shan: blackmarket
#include "npc_petshop.h"
#include "enemy.h"
#include "char_base.h"
#ifdef _PROFESSION_SKILL // WON ADD 人物职业技能
#include "profession_skill.h"
#endif
#ifdef _CHATROOMPROTOCOL // (不可开) Syu ADD 聊天室频道
#include "chatroom.h"
#endif
#ifdef _ALLBLUES_LUA
#include "mylua/function.h"
#endif
BOOL checkStringErr( char * );
#ifdef _AVOIEDamageCharName
int
dbKeyHasDamageChar( char* key)
{
if( strstr(key , "'") != NULL )
{
printf("test . key damage\n");
return 1;
}
return 0;
}
#endif
// shan add
extern struct FM_PKFLOOR fmpkflnum[FAMILY_FMPKFLOOR];
extern char question[64];
extern char answer[64];
extern int questionstarttime;
extern int questionman;
#ifdef _UNTEXT_TALK
extern int textcnt;
#endif
extern int sameipnum;
extern int player_online;
extern int autopkcnt;
char mmcdkey[10][32]={"","","","","","","","","",""};
char mmcdkeybuf[10][64]={"-1.-1.-1","-1.-1.-1","-1.-1.-1","-1.-1.-1","-1.-1.-1","-1.-1.-1","-1.-1.-1","-1.-1.-1","-1.-1.-1","-1.-1.-1",};
//static unsigned long cdkeycount=0;
//static unsigned long cdkeymaxnum=100000;
//static char** playcdkey=NULL;
//static unsigned long* cdkeylogintime=0;
//static int* cdkeylogincount=0;
/* -----------------------------------------------------------------------
* ----------------------------------------------------------------------*/
static int Callfromcli_Util_getTargetCharaindex( int fd, int toindex)
{
int to_charaindex = -1;
int fd_charaindex = CONNECT_getCharaindex( fd );
/* 愤坌愤褥 */
if( toindex == 0 ) {
to_charaindex = fd_charaindex;
}
else if( toindex > 0 && toindex < 6 ) {
to_charaindex = CHAR_getCharPet( fd_charaindex, toindex-1);
if( !CHAR_CHECKINDEX( to_charaindex)) {
to_charaindex = -1;
}
}
else if( toindex > 5 && toindex < 11 ) {
to_charaindex = CHAR_getPartyIndex( fd_charaindex, toindex - 6);
}
return to_charaindex;
}
#ifdef _MO_LOGINCHECK
#define MX (z>>5^y<<2) + (y>>3^z<<4)^(sum^y) + (k[p&3^e]^z);
long btea(long* v, long n, long* k) {
unsigned long z=v[n-1], y=v[0], sum=0, e, DELTA=0x9e3779b9;
long p, q ;
if (n > 1) { /* Coding Part */
q = 6 + 52/n;
while (q-- > 0) {
sum += DELTA;
e = (sum >> 2) & 3;
for (p=0; p<n-1; p++) y = v[p+1], z = v[p] += MX;
y = v[0];
z = v[n-1] += MX;
}
return 0 ;
} else if (n < -1) { /* Decoding Part */
n = -n;
q = 6 + 52/n;
sum = q*DELTA ;
while (sum != 0) {
e = (sum >> 2) & 3;
for (p=n-1; p>0; p--) z = v[p-1], y = v[p] -= MX;
z = v[n-1];
y = v[0] -= MX;
sum -= DELTA;
}
return 0;
}
return 1;
}
#endif
int check_jqm(char *jqm){
int i;
int len = strlen(jqm);
for(i=0;i<len;i++){
if ( (jqm[i]>47&&jqm[i]<58) || (jqm[i]>64 &&jqm[i]<91) || (jqm[i]>98 &&jqm[i]<123))
{
continue;
}
return -1;
}
return 1;
}
//int cdkeyinit(void){
// playcdkey = (char**)calloc(cdkeymaxnum, sizeof(char*));
// int tempi;
// for(tempi=0;tempi<cdkeymaxnum;tempi++){
// playcdkey[tempi] = (char*)calloc(12, sizeof(char));
// playcdkey[tempi][0] = 0;
// }
// if(cdkeylogintime=0) cdkeylogintime = malloc(sizeof(unsigned long)*cdkeymaxnum);
// if(cdkeylogincount=0) cdkeylogincount = malloc(sizeof(int)*cdkeymaxnum);
//
// return 1;
//}
/*----------------------------------------
* 弁仿奶失件玄互夫弘奶件允月 匹手丢乒伉卞卺户月分仃卅及匹民尼永弁反卅中
----------------------------------------*/
void lssproto_ClientLogin_recv( int fd,char* cdkey, char* passwd )
{
/* 2褐卞仇木互裟壬木月及反中中 */
{//ttom avoid the restore 2001/01/09
if(CONNECT_isNOTLOGIN(fd)==FALSE){
print("\n the Client had Logined fd=%d",fd);
return;
}
}
//print( "CliLogin cdkey=%s\n" , cdkey );
/* connect卞戊疋□允月 */
CONNECT_setCdkey( fd, cdkey );
CONNECT_setPasswd( fd, passwd );
//CONNECT_setCtype( fd, CLI );
/* if(getLoginJqmType()==1){ //开启机器码后封包无机器码不允许登录
//CONNECT_endOne_debug(fd);
lssproto_ClientLogin_send( fd , "您的客户端不完整,请联系客服。" );
return;
}*/
unsigned long tmpip;
int a,b,c,d,i;
char ip[32];
tmpip=CONNECT_get_userip(fd);
a=(tmpip % 0x100); tmpip=tmpip / 0x100;
b=(tmpip % 0x100); tmpip=tmpip / 0x100;
c=(tmpip % 0x100); tmpip=tmpip / 0x100;
d=(tmpip % 0x100);
sprintf(ip,"%d.%d.%d.%d",a,b,c,d);
//print( "\n登陆账号=%s 密码=%s 来自=%s\n",cdkey,passwd,ip);
{
int res;
if (strlen(cdkey)==0 || strlen(passwd)==0 || strlen(ip)==0){
//printf("登陆信息有错误!\n");
lssproto_ClientLogin_send( fd , "no" );
CONNECT_endOne_debug(fd);
return;
}
if (sasql_chehk_lock(cdkey)){
//printf("该账号%s禁止登陆!\n",cdkey);
lssproto_ClientLogin_send( fd , "no" );
CONNECT_endOne_debug(fd);
return;
}
if (sasql_chehk_lock(ip)){
//printf("该IP%s禁止登陆!\n",ip);
lssproto_ClientLogin_send( fd , "no" );
CONNECT_endOne_debug(fd);
return;
}
if(strcmp(ip,getNoAttIp(0))!=0 && strcmp(ip,getNoAttIp(1))!=0 && strcmp(ip,getNoAttIp(2))!=0 && strcmp(ip,getNoAttIp(3))!=0 && strcmp(ip,getNoAttIp(4))!=0){
if ( getSameIpNum()>0 && sasql_onlinenum(cdkey,ip) >= getSameIpNum() ){
//printf("同一IP%s禁止同时登陆%d次!\n",ip,sameipnum);
lssproto_ClientLogin_send( fd , "no" );
CONNECT_endOne_debug(fd);
return;
}
}
res=sasql_query(cdkey,passwd);
if (res==3){
if(getNoCdkeyPlayer()>0 && fd-player_online>=getNoCdkeyPlayer() && getNoCdkeyMode()!=0){
if(strcmp(ip,getNoAttIp(0))!=0 && strcmp(ip,getNoAttIp(1))!=0 && strcmp(ip,getNoAttIp(2))!=0 && strcmp(ip,getNoAttIp(3))!=0 && strcmp(ip,getNoAttIp(4))!=0){
if(getNoCdkeyType()==0){
//if(sasql_query_online_ip(ip)==0 && sasql_check_lockip(ip,getFengType())<1){
if(sasql_query_online_ip(ip)==0){
//if(sasql_add_lockip(ip,getFengType(),getServernumber(),2)==1){
#ifdef _CAX_OFF_IPTABLES
if(strcmp(ip,"0.0.0.0")!=0){
char systemstr[128];
sprintf(systemstr,"iptables -I INPUT -s %s -j DROP",ip);
system(systemstr);
logWrongCdkey(ip);
}
#endif
CONNECT_endOne_debug(fd);
return;
//}
}
}else{
#ifdef _CAX_OFF_IPTABLES
if(strcmp(ip,"0.0.0.0")!=0){
char systemstr[128];
sprintf(systemstr,"iptables -I INPUT -s %s -j DROP",ip);
system(systemstr);
logWrongCdkey(ip);
}
#endif
CONNECT_endOne_debug(fd);
return;
}
}
}
if(!sasql_register(cdkey,passwd))
{//账号没有注册
lssproto_ClientLogin_send( fd , "no" );
// if(getSaType()==8018)
// CONNECT_endOne_debug(fd);
return;
}
}else if (res!=1){
if(getNoCdkeyPlayer()>0 && fd-player_online>=getNoCdkeyPlayer() && getNoCdkeyMode()==2){
if(strcmp(ip,getNoAttIp(0))!=0 && strcmp(ip,getNoAttIp(1))!=0 && strcmp(ip,getNoAttIp(2))!=0 && strcmp(ip,getNoAttIp(3))!=0 && strcmp(ip,getNoAttIp(4))!=0){
if(getNoCdkeyType()==0){
//if(sasql_query_online_ip(ip)==0 && sasql_check_lockip(ip,getFengType())<1){
if(sasql_query_online_ip(ip)==0){
//if(sasql_add_lockip(ip,getFengType(),getServernumber(),2)==1){
#ifdef _CAX_OFF_IPTABLES
if(strcmp(ip,"0.0.0.0")!=0){
char systemstr[128];
sprintf(systemstr,"iptables -I INPUT -s %s -j DROP",ip);
system(systemstr);
logWrongCdkey(ip);
}
#endif
CONNECT_endOne_debug(fd);
return;
//}
}
}else{
#ifdef _CAX_OFF_IPTABLES
if(strcmp(ip,"0.0.0.0")!=0){
char systemstr[128];
sprintf(systemstr,"iptables -I INPUT -s %s -j DROP",ip);
system(systemstr);
logWrongCdkey(ip);
}
#endif
CONNECT_endOne_debug(fd);
return;
}
}
}
lssproto_ClientLogin_send( fd , "no" );;
// if(getSaType()==8018)
// CONNECT_endOne_debug(fd);
return;
}
if(sasql_cdkey_online(cdkey)>0){
saacproto_ACKick_send(acfd,cdkey,-1,1);
lssproto_ClientLogin_send( fd , "no" );
sasql_online(cdkey,NULL,NULL,NULL,NULL,0);
CONNECT_endOne_debug(fd);
return;
}
CONNECT_setCtype( fd, CLI );
lssproto_ClientLogin_send( fd , "ok" );
sasql_online(cdkey,NULL,ip,NULL,NULL,4);
}
}
void lssproto_ClientLoginJqm_recv( int fd,char* cdkey, char* passwd, char* jqm
#ifdef _CAX_NEWMAC_LOGIN
,char* mac
#endif
#ifdef _MO_LOGINCHECK
,char* szdata
#endif
)
{
/* 2褐卞仇木互裟壬木月及反中中 */
{//ttom avoid the restore 2001/01/09
if(CONNECT_isNOTLOGIN(fd)==FALSE){
print("\n the Client had Logined fd=%d",fd);
return;
}
}
// print("\n fd: %d",fd);
// print("\n cdkey: %s",cdkey);
// print("\n password: %s",passwd);
// print("\n jqm: %s",jqm);
// print("\n 1-mac: %s",mac);
char* newjqm[128];
int logintype = -1;
char buftest[128];
memset(newjqm,0,sizeof(newjqm));
memset(buftest,0,sizeof(buftest));
strcpy(newjqm,jqm);
if(strstr(jqm,"|")!=NULL){
if(getStringFromIndexWithDelim(jqm,"|", 1, buftest, sizeof(buftest)) == FALSE)
strcpy(newjqm,jqm);
else
strcpy(newjqm,buftest);
if(getStringFromIndexWithDelim(jqm,"|", 2, buftest, sizeof(buftest)) == FALSE)
logintype = -1;
else
logintype = atoi(buftest);
}
jqm = newjqm;
// print("\n logintype : %d",logintype);
// print("\n jqm 2 : %s",jqm);
/* if(check_jqm(jqm)==-1){
lssproto_ClientLogin_send( fd , "登录错误,请重新登录。" );
return;
}*/
//print( "CliLogin cdkey=%s\n" , cdkey );
/* connect卞戊疋□允月 */
CONNECT_setCdkey( fd, cdkey );
CONNECT_setPasswd( fd, passwd );
CONNECT_setPcid(fd, jqm);
#ifdef _CAX_NEWMAC_LOGIN
CONNECT_setMAC(fd, mac);
#endif
if (sasql_check_lockmac(mac)>0||sasql_check_lockpcid(jqm)>0){
lssproto_ClientLogin_send( fd , "连接超时请联系GM。" );
CONNECT_endOne_debug(fd);
}
#ifdef _MO_LOGINCHECK
long n = XXTEA_ROUND;
long k[4] = {XXTEA_KEY_1,XXTEA_KEY_2,XXTEA_KEY_3,XXTEA_KEY_4};
char data[1024] = "";
int datalen = 0;
int j = 0;
char demac[20];
char detime[20];
long recvtime;
//密文转换明文
//printf("Hex data: %s\n", szdata);
datalen = strlen(szdata);
for(j = 0; j < datalen/2; j++){
int temp;
sscanf(&szdata[2 * j], "%02X", &temp);
data[j] = (char)temp;
}
data[datalen/2] = '\0';
//printf("Bin data: \n %s\n", data);
btea((long*)data, -n, k); // 解密数据
//printf( "Decrypt Data:\n %s\n", data);
sscanf(data,"%[^=]=%[^\n]",&demac,&detime);
//printf("\n demac=%s,mac=%s\n",demac, mac);
if(strstr(demac,mac)==NULL){
lssproto_ClientLogin_send( fd , "登录验证错误请联系GM。" );
CONNECT_endOne_debug(fd);
return;
}
recvtime=atoi(detime);
//获取系统时间
time_t timep;
struct tm *p;
timep = time (NULL);
p = localtime ( &timep );
if(abs(timep-recvtime)>86400){
lssproto_ClientLogin_send( fd , "连接超时请联系GM。" );
CONNECT_endOne_debug(fd);
return;
}
#endif
//CONNECT_setCtype( fd, CLI );
if(getLoginType()>0){
if(logintype == -1){
lssproto_ClientLogin_send( fd , "请更新客户端后登录本线路。" );
return;
}else if(logintype!=0 && logintype!=1){
lssproto_ClientLogin_send( fd , "此线路只支持无外挂或者STW外挂登录。" );
return;
}
}
unsigned long tmpip;
int a,b,c,d,i;
char ip[32];
tmpip=CONNECT_get_userip(fd);
a=(tmpip % 0x100); tmpip=tmpip / 0x100;
b=(tmpip % 0x100); tmpip=tmpip / 0x100;
c=(tmpip % 0x100); tmpip=tmpip / 0x100;
d=(tmpip % 0x100);
sprintf(ip,"%d.%d.%d.%d",a,b,c,d);
//print( "\n登陆账号=%s 密码=%s 来自=%s\n",cdkey,passwd,ip);
{
int res;
if (strlen(cdkey)==0 || strlen(passwd)==0 || strlen(ip)==0){
//printf("登陆信息有错误!\n");
lssproto_ClientLogin_send( fd , "no" );
CONNECT_endOne_debug(fd);
return;
}
if (sasql_chehk_lock(jqm)){
//printf("该账号%s禁止登陆!\n",cdkey);
lssproto_ClientLogin_send( fd , "由于您的严重违规行为,您已被例如黑名单,无法登陆本游戏。" );
//CONNECT_endOne_debug(fd);
return;
}
if (sasql_chehk_lock(ip)){
//printf("该IP%s禁止登陆!\n",ip);
lssproto_ClientLogin_send( fd , "no" );
CONNECT_endOne_debug(fd);
return;
}
if(strcmp(ip,getNoAttIp(0))!=0 && strcmp(ip,getNoAttIp(1))!=0 && strcmp(ip,getNoAttIp(2))!=0 && strcmp(ip,getNoAttIp(3))!=0 && strcmp(ip,getNoAttIp(4))!=0){
if ( getSameIpNum()>0 && sasql_onlinenum(cdkey,ip) >= getSameIpNum() ){
//printf("同一IP%s禁止同时登陆%d次!\n",ip,sameipnum);
//lssproto_ClientLogin_send( fd , "no" );
//char tmpbuf[128];
//sprintf(tmpbuf,"您的登录数已达上限(%d个ID无法进入游戏。",getSameIpNum());
lssproto_ClientLogin_send( fd , "您的登录数已达上限,无法进入游戏。" );
//CONNECT_endOne_debug(fd);
return;
}
}
if( getSameJqmNum()>0 && sasql_onlinejqmnum(jqm,1) >= getSameJqmNum() ){
//lssproto_ClientLogin_send( fd , "no" );
//CONNECT_endOne_debug(fd);
//char tmpbuf[128];
//sprintf(tmpbuf,"您在该线的登录数已达到上限(%d个ID请尝试登陆其他线路。",getSameJqmNum());
lssproto_ClientLogin_send( fd , "您在该线的登录数已达到上限,请尝试登陆其他线路。" );
//printf("同一IP%s禁止同时登陆%d次!\n");
return;
}
if( getSameJqmAllNum()>0 && sasql_onlinejqmnum(jqm,2) >= getSameJqmAllNum() ){
//lssproto_ClientLogin_send( fd , "no" );
//CONNECT_endOne_debug(fd);
//char tmpbuf[128];
//sprintf(tmpbuf,"您的登录数已达上限(%d个ID无法进入游戏。",getSameJqmAllNum());
lssproto_ClientLogin_send( fd , "您的登录数已达上限,无法进入游戏。" );
//printf("您的登录数已达上限,无法进入游戏\n");
return;
}
res=sasql_query(cdkey,passwd);
// print("\n res 2 : %d",res);
if (res==3){
if(getNoCdkeyPlayer()>0 && fd-player_online>=getNoCdkeyPlayer() && getNoCdkeyMode()!=0){
if(strcmp(ip,getNoAttIp(0))!=0 && strcmp(ip,getNoAttIp(1))!=0 && strcmp(ip,getNoAttIp(2))!=0 && strcmp(ip,getNoAttIp(3))!=0 && strcmp(ip,getNoAttIp(4))!=0){
if(getNoCdkeyType()==0){
//if(sasql_query_online_ip(ip)==0 && sasql_check_lockip(ip,getFengType())<1){
if(sasql_query_online_ip(ip)==0){
//if(sasql_add_lockip(ip,getFengType(),getServernumber(),2)==1){
#ifdef _CAX_OFF_IPTABLES
if(strcmp(ip,"0.0.0.0")!=0){
char systemstr[128];
sprintf(systemstr,"iptables -I INPUT -s %s -j DROP",ip);
system(systemstr);
logWrongCdkey(ip);
}
#endif
CONNECT_endOne_debug(fd);
return;
//}
}
}else{
#ifdef _CAX_OFF_IPTABLES
if(strcmp(ip,"0.0.0.0")!=0){
char systemstr[128];
sprintf(systemstr,"iptables -I INPUT -s %s -j DROP",ip);
system(systemstr);
logWrongCdkey(ip);
}
#endif
CONNECT_endOne_debug(fd);
return;
}
}
}
if(!sasql_register(cdkey,passwd))
{//账号没有注册
//lssproto_ClientLogin_send( fd , "no" );
lssproto_ClientLogin_send( fd , "您的账号不存在,如未注册,请到官方网站注册。" );
// if(getSaType()==8018)
// CONNECT_endOne_debug(fd);
return;
}
}else if (res!=1){
if(getNoCdkeyPlayer()>0 && fd-player_online>=getNoCdkeyPlayer() && getNoCdkeyMode()==2){
if(strcmp(ip,getNoAttIp(0))!=0 && strcmp(ip,getNoAttIp(1))!=0 && strcmp(ip,getNoAttIp(2))!=0 && strcmp(ip,getNoAttIp(3))!=0 && strcmp(ip,getNoAttIp(4))!=0){
if(getNoCdkeyType()==0){
//if(sasql_query_online_ip(ip)==0 && sasql_check_lockip(ip,getFengType())<1){
if(sasql_query_online_ip(ip)==0){
//if(sasql_add_lockip(ip,getFengType(),getServernumber(),2)==1){
#ifdef _CAX_OFF_IPTABLES
if(strcmp(ip,"0.0.0.0")!=0){
char systemstr[128];
sprintf(systemstr,"iptables -I INPUT -s %s -j DROP",ip);
system(systemstr);
logWrongCdkey(ip);
}
#endif
CONNECT_endOne_debug(fd);
return;
//}
}
}else{
#ifdef _CAX_OFF_IPTABLES
if(strcmp(ip,"0.0.0.0")!=0){
char systemstr[128];
sprintf(systemstr,"iptables -I INPUT -s %s -j DROP",ip);
system(systemstr);
logWrongCdkey(ip);
}
#endif
CONNECT_endOne_debug(fd);
return;
}
}
}
//密码错误
//lssproto_ClientLogin_send( fd , "no" );
lssproto_ClientLogin_send( fd , "您的密码错误,请仔细确认后登陆。" );
// if(getSaType()==8018)
// CONNECT_endOne_debug(fd);
return;
}
if(sasql_cdkey_online(cdkey)>0){
saacproto_ACKick_send(acfd,cdkey,-1,1);
lssproto_ClientLogin_send( fd , "no" );
sasql_online(cdkey,NULL,NULL,NULL,NULL,0);
CONNECT_endOne_debug(fd);
return;
}
CONNECT_setCtype( fd, CLI );
char* oldpcid = NULL;
oldpcid = sasql_query_jqm(cdkey);
#ifdef _CAX_NEWMAC_LOGIN
char* oldmac = NULL;
oldmac = sasql_query_mac(cdkey);
#endif
/* if(strlen(oldpcid)<10){
CONNECT_setOldPcid(fd,jqm);
}else{
CONNECT_setOldPcid(fd,oldpcid);
}*/
lssproto_ClientLogin_send( fd , "ok" );
//print("\n jqm: %s",jqm);
sasql_online_jqm(cdkey,jqm,ip,logintype);
#ifdef _CAX_NEWMAC_LOGIN
sasql_online_mac(cdkey,mac,ip,logintype);
#endif
}
}
void lssproto_CreateNewChar_recv( int fd,int dataplacenum,char* charname,
int imgno,int faceimgno,
int vital,int str,int tgh,int dex,
int earth,int water,int fire,int wind,
int hometown )
{
char cdkey[CDKEYLEN];
if( CONNECT_isCLI( fd ) == FALSE )return;
if( CONNECT_isNOTLOGIN(fd) == FALSE ){
lssproto_CreateNewChar_send( fd, FAILED, "Not NOTLOGIN State\n" );
return;
}
if( strlen( charname ) == 0 ){
lssproto_CreateNewChar_send(fd,FAILED, "名字过短,无法建立人物\n");
return;
#ifdef _AVOIEDamageCharName
}else if ( dbKeyHasDamageChar(charname)){
lssproto_CreateNewChar_send(fd,FAILED, "名字禁止使用\n");
return;
#endif
}else if( strlen(charname) >= 32 ){
lssproto_CreateNewChar_send(fd,FAILED, "名字过长,无法建立人物。\n");
return;
// Nuke start 0711: Avoid naming as WAEI
}else if (strstr(charname,"华义")
// WON ADD
|| strstr(charname,"gm") || strstr(charname,"GM")
|| strstr(charname,"Gm") || strstr(charname,"gM")
|| strstr(charname,"") || strstr(charname,"")
|| strstr(charname,"") || strstr(charname,"")
|| strstr(charname," ") || strstr(charname,"=") || strstr(charname,",")
#ifdef _UNREG_NEMA
|| (strstr(charname,getUnregname(0)) && strlen(getUnregname(0))>0)
|| (strstr(charname,getUnregname(1)) && strlen(getUnregname(1))>0)
|| (strstr(charname,getUnregname(2)) && strlen(getUnregname(2))>0)
|| (strstr(charname,getUnregname(3)) && strlen(getUnregname(3))>0)
|| (strstr(charname,getUnregname(4)) && strlen(getUnregname(4))>0)
|| (strstr(charname,getUnregname(5)) && strlen(getUnregname(5))>0)
|| (strstr(charname,getUnregname(6)) && strlen(getUnregname(6))>0)
|| (strstr(charname,getUnregname(7)) && strlen(getUnregname(7))>0)
|| (strstr(charname,getUnregname(8)) && strlen(getUnregname(8))>0)
#endif
|| strstr(charname,"神秘人物")
// WON END
) {
unsigned ip=CONNECT_get_userip(fd);
int a, b, c, d, ck;
a=(ip % 0x100); ip=ip / 0x100;
b=(ip % 0x100); ip=ip / 0x100;
c=(ip % 0x100); ip=ip / 0x100;
d=(ip % 0x100);
ck= (
( (a== 10) && (b==0) && (c==0) ) ||
( (a==211) && (b==76) && (c==176) && (d==21) ) || // 台北wayi
( (a==210) && (b==64) && (c==97) && ((d>=21)&&(d<=25)) ) ||
( (a==61) && (b==222) && (c==142) && (d==66)) ||
( (a==172) && (b==16) && (c==172) && (d==29) )
);
print(" name_WAEI_IP:%d.%d.%d.%d ck:%d ",a,b,c,d,ck );
if( !ck ) {
lssproto_CreateNewChar_send(fd,FAILED, "非法名字,无法建立人物。\n");
return;
}
}
{
// Nuke start 0801,0916: Avoid strange name
int i,ach;
for (i=0,ach=0;i<strlen(charname);i++) {
if ((unsigned char)charname[i]==0xff) { ach=1; break; } // Force no 0xff
if (((unsigned char)charname[i]>=0x7f)&&
((unsigned char)charname[i]<=0xa0)) { ach=1; break; } // Force no 0x7f~0xa0
if ((unsigned char)charname[i]<=0x20) { ach=1; break; } // Force greater than 0x20
if (ach) {
if ((((unsigned char)charname[i]>=0x40)&&((unsigned char)charname[i]<=0x7e))||
(((unsigned char)charname[i]>=0xa1)&&((unsigned char)charname[i]<=0xfe))) ach=0;
} else {
if (((unsigned char)charname[i]>=0xa1)&&((unsigned char)charname[i]<=0xfe)) ach=1;
}
}
if (ach) { lssproto_CreateNewChar_send(fd,FAILED, "非法名字,无法建立人物。\n"); return; }
// Nuke end
}
// Nuke end
CONNECT_getCdkey( fd, cdkey, sizeof( cdkey ));
CHAR_createNewChar( fd, dataplacenum, charname ,imgno, faceimgno,
vital, str, tgh, dex,
earth, water, fire, wind,
hometown , cdkey );
}
void lssproto_CharLogin_recv( int fd,char* charname )
{
char cdkey[CDKEYLEN], passwd[PASSWDLEN];
if( CONNECT_isCLI( fd ) == FALSE )return;
print( "\n尝试登陆: 人物名称=%s\n", charname);
if( charname[0] == '\0' ){
lssproto_CharLogin_send( fd, FAILED, "Can't access char have no name\n" );
return;
}
if( CONNECT_isNOTLOGIN(fd) == FALSE ){
lssproto_CharLogin_send( fd, FAILED, "Already Logged in\n" );
return;
}
if( strstr(charname,",")!=NULL ){
CONNECT_endOne_debug(fd);
return;
}
CONNECT_setCharname( fd, charname );
CONNECT_getCdkey( fd, cdkey, sizeof( cdkey ));
CONNECT_getPasswd( fd, passwd, sizeof(passwd));
unsigned long tmpip;
int a,b,c,d;
char ip[32];
tmpip=CONNECT_get_userip(fd);
a=(tmpip % 0x100); tmpip=tmpip / 0x100;
b=(tmpip % 0x100); tmpip=tmpip / 0x100;
c=(tmpip % 0x100); tmpip=tmpip / 0x100;
d=(tmpip % 0x100);
sprintf(ip,"%d.%d.%d.%d",a,b,c,d);
int res;
res = sasql_load_query( cdkey, passwd);
if(res!=1){
lssproto_CharLogin_send( fd ,FAILED, "密码错误,无法登录!\n" );
//CONNECT_endOne_debug(fd);
return;
}
saacproto_ACCharLoad_send( acfd, cdkey,passwd, charname,1,"",
CONNECT_getFdid(fd),ip );
CONNECT_setState( fd, WHILELOGIN );
}
#ifdef _ITEM_CHECKDROPATLOGOUT
BOOL CheckDropatLogout(int charaindex )
{
int i;
for( i=0 ; i<CHAR_MAXITEMHAVE ; i++ ){
int itemindex;
itemindex = CHAR_getItemIndex(charaindex,i);
if( ITEM_CHECKINDEX(itemindex) == FALSE )continue;
if( ITEM_getInt(itemindex,ITEM_DROPATLOGOUT ) == TRUE ) {
return TRUE;
}
}
return FALSE;
}
#endif
void lssproto_CharLogout_recv( int fd, int flg)
{
char cdkey[CDKEYLEN] , charname[CHARNAMELEN];
if( CONNECT_isCLI( fd ) == FALSE )return;
if( CONNECT_isLOGIN(fd) == FALSE ){
lssproto_CharLogout_send( fd, FAILED, "Not Logged in\n" );
return;
}
int charaindex=CONNECT_getCharaindex(fd);
{
int fl,x,y;
// CoolFish: 2001/10/18
if (!CHAR_CHECKINDEX(charaindex)) return;
if( CHAR_getInt( charaindex, CHAR_LASTTALKELDER) >= 0 )
{
CHAR_getElderPosition( CHAR_getInt( charaindex, CHAR_LASTTALKELDER), &fl, &x, &y );
#ifdef _CHAR_NEWLOGOUT
if( flg == 1 ){//回纪录点
if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE){
CHAR_talkToCli( charaindex, -1, "战斗中无法回纪录点!", CHAR_COLORYELLOW);
return;
}
#ifdef _ITEM_CHECKWARES
if( CHAR_CheckInItemForWares( charaindex, 0) == FALSE ){
CHAR_talkToCli( charaindex, -1, "携带货物无法使用。", CHAR_COLORYELLOW);
return;
}
#endif
#ifdef _TEAM_WARP
if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE ) == CHAR_PARTY_CLIENT ){
CHAR_talkToCli( charaindex, -1, "团队中无法回纪录点!", CHAR_COLORYELLOW);
return;
}
if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE ) == CHAR_PARTY_LEADER ){
int i;
for( i = 0; i < CHAR_PARTYMAX; i ++ ){
int subindex = CHAR_getWorkInt( charaindex, CHAR_WORKPARTYINDEX1+i );
if( CHAR_CHECKINDEX( subindex ) == FALSE ) continue;
CHAR_talkToCli( subindex, -1, "全体瞬间飞行...", CHAR_COLORWHITE);
ITEM_WarpDelErrorItem( subindex );
CHAR_warpToSpecificPoint( subindex, fl, x, y );
}
return;
}
#endif
if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE ) != CHAR_PARTY_NONE ){
#ifdef _PLAYER_NPC
int i;
for( i = 1; i < CHAR_PARTYMAX; i ++ ){
int pindex = CHAR_getWorkInt( charaindex, i + CHAR_WORKPARTYINDEX1 );
if( CHAR_CHECKINDEX( pindex)){
if(CHAR_getInt( pindex, CHAR_WHICHTYPE) != CHAR_TYPEPLAYERNPC)break;
}
}
if(i < CHAR_MAXPETHAVE)
#endif
{
CHAR_talkToCli( charaindex, -1, "团队中无法回纪录点!", CHAR_COLORYELLOW);
return;
}
}
#ifdef _ITEM_CHECKDROPATLOGOUT
if( CheckDropatLogout( charaindex ) ){
CHAR_talkToCli( charaindex, -1, "携带的物品使你无法回纪录点!", CHAR_COLORYELLOW);
return;
}
#endif
#ifdef _AUTO_PK
if(CHAR_getInt(charaindex,CHAR_FLOOR)==20000
&& CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE) == BATTLE_CHARMODE_NONE
&& CHAR_getInt(charaindex,CHAR_AUTOPK)!=-1 ){
char buf[64];
int i,num=0,winindex;
int playernum = CHAR_getPlayerMaxNum();
#ifndef _YUANGUSA
sprintf(buf, "胆小鬼%s退出当前比赛",CHAR_getChar(charaindex,CHAR_NAME));
AutoPk_PKSystemTalk( buf, buf );
#endif
if(AutoPk_PKTimeGet()<=0){
for(i=0;i<playernum;i++){
if(CHAR_CHECKINDEX(i) == FALSE || CHAR_getInt(i,CHAR_AUTOPK)==-1 ) continue;
if(CHAR_getInt(i, CHAR_FLOOR) == 20000
){
if(CHAR_getInt(i,CHAR_AUTOPK)!=-1){
if(i!=charaindex)
winindex=i;
num++;
}
}
}
#ifdef _NONUM_AUTOPK
if(num==5){
AutoPk_ChampionShipSet( CHAR_getChar(charaindex,CHAR_CDKEY),
CHAR_getChar(charaindex,CHAR_NAME), CHAR_getInt(charaindex,CHAR_AUTOPK),4);
}else if(num==4){
AutoPk_ChampionShipSet( CHAR_getChar(charaindex,CHAR_CDKEY),
CHAR_getChar(charaindex,CHAR_NAME), CHAR_getInt(charaindex,CHAR_AUTOPK),3);
}else if(num==3){
AutoPk_ChampionShipSet( CHAR_getChar(charaindex,CHAR_CDKEY),
CHAR_getChar(charaindex,CHAR_NAME), CHAR_getInt(charaindex,CHAR_AUTOPK),2);
}else if(num==2){
int fl = 0, x = 0, y = 0;
CHAR_getElderPosition(CHAR_getInt(winindex, CHAR_LASTTALKELDER), &fl, &x, &y);
CHAR_warpToSpecificPoint(winindex, fl, x, y);
AutoPk_ChampionShipSet( CHAR_getChar(winindex,CHAR_CDKEY),
CHAR_getChar(winindex,CHAR_NAME), CHAR_getInt(winindex,CHAR_AUTOPK),0);
AutoPk_ChampionShipSet( CHAR_getChar(charaindex,CHAR_CDKEY),
CHAR_getChar(charaindex,CHAR_NAME), CHAR_getInt(charaindex,CHAR_AUTOPK),1);
AutoPk_GetChampionShip();
}
#else
if(num==2){
int fl = 0, x = 0, y = 0;
char pktoken1[256],pktoken2[256];
CHAR_getElderPosition(CHAR_getInt(winindex, CHAR_LASTTALKELDER), &fl, &x, &y);
CHAR_warpToSpecificPoint(winindex, fl, x, y);
autopkcnt++;
int autopkvigor = getAutoPkVigorPkNum()*CHAR_getInt(charaindex,CHAR_AUTOPK)+getAutoPkVigorPkCnt()*autopkcnt;
CHAR_setInt(charaindex,CHAR_VIGOR,CHAR_getInt(charaindex,CHAR_VIGOR)+autopkvigor);
sprintf(pktoken1,"[比赛战果]:「%s」击杀点数 %d 生存点数 %d 获得活力%d",CHAR_getChar(charaindex,CHAR_NAME),CHAR_getInt(charaindex,CHAR_AUTOPK),autopkcnt,autopkvigor);
autopkcnt++;
CHAR_setInt(winindex,CHAR_AUTOPK,CHAR_getInt(winindex,CHAR_AUTOPK)+2);
autopkvigor = getAutoPkVigorPkNum()*CHAR_getInt(winindex,CHAR_AUTOPK)+getAutoPkVigorPkCnt()*autopkcnt;
CHAR_setInt(winindex,CHAR_VIGOR,CHAR_getInt(winindex,CHAR_VIGOR)+autopkvigor);
sprintf(pktoken2,"[比赛战果]:「%s」击杀点数 %d 生存点数 %d 获得活力%d",CHAR_getChar(winindex,CHAR_NAME),CHAR_getInt(winindex,CHAR_AUTOPK),autopkcnt,autopkvigor);
i=0;
for(i=0;i<playernum;i++){
if(CHAR_CHECKINDEX(i) == FALSE) continue;
CHAR_talkToCli( i, -1, pktoken1, CHAR_COLORCYAN );
CHAR_talkToCli( i, -1, pktoken2, CHAR_COLORCYAN );
}
AutoPk_ChampionShipSet( CHAR_getChar(winindex,CHAR_CDKEY),
CHAR_getChar(winindex,CHAR_NAME), CHAR_getInt(winindex,CHAR_AUTOPK),0);
AutoPk_ChampionShipSet( CHAR_getChar(winindex,CHAR_CDKEY),
CHAR_getChar(winindex,CHAR_NAME), CHAR_getInt(winindex,CHAR_AUTOPK),1);
AutoPk_ChampionShipSet( CHAR_getChar(charaindex,CHAR_CDKEY),
CHAR_getChar(charaindex,CHAR_NAME), CHAR_getInt(charaindex,CHAR_AUTOPK),2);
AutoPk_GetChampionShip();
}
#endif
}
}
#endif
if( CHAR_getInt( charaindex,CHAR_FLOOR ) != 117 &&
CHAR_getInt( charaindex,CHAR_FLOOR ) != 887
#ifdef _ADD_DUNGEON //追加地牢
&& CHAR_getInt( charaindex,CHAR_FLOOR ) != 8513
#endif
){
CHAR_warpToSpecificPoint( charaindex, fl, x, y );
}
return;
}
#else
if( CHAR_getInt(charaindex,CHAR_FLOOR ) == 117){
CHAR_setInt(charaindex,CHAR_X,225);
CHAR_setInt(charaindex,CHAR_Y,13);
}else{
CHAR_setInt(charaindex,CHAR_FLOOR,fl);
CHAR_setInt(charaindex,CHAR_X,x);
CHAR_setInt(charaindex,CHAR_Y,y);
}
#endif
}
// Robin add
//CHAR_setInt( charaindex, CHAR_LASTLEAVETIME, (int)time(NULL));
}
CHAR_logout(charaindex,TRUE);
CONNECT_setState( fd, WHILELOGOUTSAVE );
CONNECT_setCharaindex( fd, -1 );
CONNECT_getCdkey( fd, cdkey, sizeof(cdkey ));
CONNECT_getCharname( fd, charname, sizeof(charname));
print( "Logout cdkey:%s charname=%s\n" , cdkey, charname );
}
void lssproto_CharDelete_recv( int fd , char* charname,char* safepass)
{
char cdkey[CDKEYLEN];//passwd[PASSWDLEN];
int fdid;
if( CONNECT_isCLI( fd ) == FALSE ){
CONNECT_endOne_debug(fd);
return;
}
if( CONNECT_isNOTLOGIN( fd ) == FALSE ){
lssproto_CharDelete_send( fd, FAILED, "Already Logged in\n" );
CONNECT_endOne_debug(fd);
return;
}
CONNECT_getCdkey( fd, cdkey, sizeof(cdkey));
//CONNECT_getPasswd( fd, passwd, sizeof(passwd));
// if(strstr(cdkey,safepass)!=NULL){
// lssproto_CharDelete_send( fd, FAILED, "安全码不安全,无法删除!\n" );
// return;
// }
int res=sasql_del_query(cdkey, safepass);
if(res!=1){
lssproto_CharDelete_send( fd, FAILED, "请使用安全码删除人物,否则无法删除。\n" );
return;
}
fdid = CONNECT_getFdid(fd);
unsigned long ip;
int a,b,c,d;
ip=CONNECT_get_userip(fd);
a=(ip % 0x100); ip=ip / 0x100;
b=(ip % 0x100); ip=ip / 0x100;
c=(ip % 0x100); ip=ip / 0x100;
d=(ip % 0x100);
char userip[32];
sprintf(userip,"%d.%d.%d.%d",a,b,c,d);
saacproto_ACCharDelete_send( acfd, cdkey,safepass, charname , "" ,fdid,userip );
{
char buff[512];
char escapebuf[1024];
snprintf( buff, sizeof(buff), "%s_%s", cdkey, charname);
makeEscapeString( buff, escapebuf, sizeof(escapebuf));
saacproto_DBDeleteEntryInt_send(acfd, DB_DUELPOINT, escapebuf, fdid, 0 );
saacproto_DBDeleteEntryString_send( acfd, DB_ADDRESSBOOK, escapebuf, fdid, 0 );
}
saacproto_Broadcast_send( acfd, cdkey, charname, "chardelete", 0);
CONNECT_setState( fd, WHILECHARDELETE );
}
void lssproto_CharList_recv( int fd )
{
char cdkey[CDKEYLEN], passwd[PASSWDLEN];
int fdid=-1;
if( CONNECT_isCLI( fd ) == FALSE ){
CONNECT_endOne_debug(fd);
return;
}
if( CONNECT_isNOTLOGIN( fd ) == FALSE ){
lssproto_CharList_send( fd, FAILED, "Already Logged in\n" );
CONNECT_endOne_debug(fd);
return;
}
CONNECT_getCdkey( fd, cdkey, sizeof(cdkey));
CONNECT_getPasswd( fd, passwd, sizeof(passwd));
int res=sasql_query(cdkey,passwd);
if(res!=1){
lssproto_CharList_send( fd, FAILED, "Pass Wrong\n" );
CONNECT_endOne_debug(fd);
return;
}
fdid = CONNECT_getFdid( fd );
{
int i;
int playernum = CHAR_getPlayerMaxNum();
for( i=0; i<playernum; i++){
if( !CHAR_CHECKINDEX( i) )continue;
if( !strcmp( CHAR_getChar( i, CHAR_CDKEY), cdkey) ){
#ifdef _OFFLINE_SYSTEM
if(CHAR_getWorkInt( i, CHAR_WORK_OFFLINE )!=0){
CHAR_logout(i,TRUE);
sasql_online(cdkey,NULL,NULL,NULL,NULL,0);
CONNECT_endOne_debug(fd);
//find=TRUE;
return;
}
#endif
CHAR_talkToCli(i, -1, "因重复登陆而掉线!",CHAR_COLORYELLOW);
CONNECT_setCloseRequest( getfdFromCharaIndex( i ) , 1 );
// lssproto_CharList_send( fd, FAILED, "-1" );
// CONNECT_setState( fd, NOTLOGIN );
}
}
}
//#ifdef _PKSEVER_VER
// saacproto_ACCharList_send(acfd, cdkey, passwd, fdid, star);
//#else
saacproto_ACCharList_send(acfd, cdkey, passwd, fdid );
//#endif
CONNECT_setState( fd, WHILEDOWNLOADCHARLIST );
CONNECT_setStarttime(fd,0);
}
void lssproto_Echo_recv( int fd,char* arg0 )
{
lssproto_Echo_send( fd , arg0 );
}
#define CHECKFD if( CONNECT_isCLI( fd ) == FALSE )return; if( CONNECT_isLOGIN(fd) == FALSE )return;
#define CHECKFDANDTIME if( CONNECT_isCLI(fd) == FALSE )return; if( CONNECT_isLOGIN(fd) == FALSE )return;
void lssproto_W_recv( int fd,int x,int y,char* direction )
{
//ttom +3
int fd_charaindex, ix, iy;
fd_charaindex = CONNECT_getCharaindex( fd );
ix=CHAR_getInt(fd_charaindex, CHAR_X);
iy=CHAR_getInt(fd_charaindex, CHAR_Y);
// CoolFish: Prevent Trade Cheat 2001/4/18
if (CHAR_getWorkInt(fd_charaindex, CHAR_WORKTRADEMODE) != CHAR_TRADE_FREE)
return;
if( CHAR_getWorkInt(fd_charaindex,CHAR_WORKSTREETVENDOR)!=-1) return;
// nuke 0407
if (checkNu(fd)<0) {
// Robin 0521
print(" NU-Err ");
CHAR_talkToCli(fd_charaindex, -1, "讯号错误。", CHAR_COLORYELLOW);
CONNECT_setCloseRequest( fd , 1 );
return;
}
//ttom debug
if((x==0)&&(y==0)){
//CHAR_talkToCli(fd_charaindex, -1, "因座标错误而断线。", CHAR_COLORYELLOW);
// Roibn 03/14
return;
}
//ttom avoid the warp at will 11/6
{
int i_diff_x,i_diff_y;
i_diff_x=abs(ix-x);
i_diff_y=abs(iy-y);
// Robin 03/14
if( (i_diff_x>1)||(i_diff_y>1) ){
// Robin 0518
//CHAR_talkToCli(fd_charaindex, -1, "因走路座标错误而断线。", CHAR_COLORYELLOW);
//return;
x = ix;
y = iy;
}
}
if(!(MAP_walkAble(fd_charaindex,CHAR_getInt(fd_charaindex, CHAR_FLOOR),x,y))){
// Robin 03/14
x = ix;
y = iy;
}else{
}
CHAR_walk_init( fd, x, y, direction, TRUE);
}
/*------------------------------------------------------------
------------------------------------------------------------*/
void lssproto_W2_recv( int fd,int x,int y,char* direction )
{
//ttom +3
int fd_charaindex, ix, iy, i_fl,wx,wy,w_fl,warfd;
char workxyd[30];
char workbuf[20];
char w_d[5];
//Char *chwk;// CoolFish: Rem 2001/4/18
fd_charaindex = CONNECT_getCharaindex( fd );
ix=CHAR_getInt(fd_charaindex, CHAR_X);
iy=CHAR_getInt(fd_charaindex, CHAR_Y);
i_fl=CHAR_getInt(fd_charaindex, CHAR_FLOOR);
// CoolFish: Prevent Trade Cheat 2001/4/18
if (CHAR_getWorkInt(fd_charaindex, CHAR_WORKTRADEMODE) != CHAR_TRADE_FREE)
return;
if( CHAR_getWorkInt(fd_charaindex,CHAR_WORKSTREETVENDOR)!=-1) return;
#ifdef _BATTLEEND_FIX
if( CHAR_getWorkInt(fd_charaindex,CHAR_WORKBALLTELENDTIME)>0)
CHAR_setWorkInt(fd_charaindex,CHAR_WORKBALLTELENDTIME,0);
#endif
#ifdef _NO_QUICK_WAR
if( strlen(direction)==1 && strstr("abcdefgh",direction)!=NULL ){
if(strlen(CHAR_getWorkChar(fd_charaindex,CHAR_WARWORKXYD))!=0){
strcpy(workxyd,CHAR_getWorkChar(fd_charaindex,CHAR_WARWORKXYD));
if(getStringFromIndexWithDelim(workxyd,"|", 1, workbuf, sizeof(workbuf)) == FALSE)
w_fl=-1;
w_fl=atoi(workbuf);
if(getStringFromIndexWithDelim(workxyd,"|", 2, workbuf, sizeof(workbuf)) == FALSE)
wx=-1;
wx=atoi(workbuf);
if(getStringFromIndexWithDelim(workxyd,"|", 3, workbuf, sizeof(workbuf)) == FALSE)
wy=-1;
wy=atoi(workbuf);
if(getStringFromIndexWithDelim(workxyd,"|", 4, workbuf, sizeof(workbuf)) == FALSE)
strcpy(w_d,"z");
strcpy(w_d,workbuf);
if(i_fl==w_fl && x == wx && y == wy && (strcmp(w_d,direction)==0 || (strcmp(w_d,"c")==0 && strcmp(direction,"g")==0) || (strcmp(w_d,"g")==0 && strcmp(direction,"c")==0)) ){
if(getStayEncount(fd)==1){
return;
}
setStayEncount(fd);
{
Char *ch;
ch = CHAR_getCharPointer( fd_charaindex);
if( ch == NULL ) return;
strcpysafe( ch->charfunctable[CHAR_LOOPFUNCTEMP1].string,
sizeof( ch->charfunctable[CHAR_LOOPFUNCTEMP1]), "CHAR_BattleStayLoop");//战斗
CHAR_setInt( fd_charaindex, CHAR_LOOPINTERVAL, 2500);
CHAR_constructFunctable( fd_charaindex);
}
return;
}
sprintf(workxyd,"%d|%d|%d|%s",i_fl,x,y,direction);
CHAR_setWorkChar(fd_charaindex,CHAR_WARWORKXYD,workxyd);
}
sprintf(workxyd,"%d|%d|%d|%s",i_fl,x,y,direction);
CHAR_setWorkChar(fd_charaindex,CHAR_WARWORKXYD,workxyd);
}else if(strcmp(direction,"gcgcgcgcgc")==0 || strcmp(direction,"gcgc")==0){
if(getStayEncount(fd)==1){
return;
}
setStayEncount(fd);
{
Char *ch;
ch = CHAR_getCharPointer( fd_charaindex);
if( ch == NULL ) return;
strcpysafe( ch->charfunctable[CHAR_LOOPFUNCTEMP1].string,
sizeof( ch->charfunctable[CHAR_LOOPFUNCTEMP1]), "CHAR_BattleStayLoop");//战斗
CHAR_setInt( fd_charaindex, CHAR_LOOPINTERVAL, 2500);
CHAR_constructFunctable( fd_charaindex);
}
return;
}
#endif
//ttom avoid the warp at will 11/6
{
int i_diff_x,i_diff_y;
//ix=CHAR_getInt(fd_charaindex, CHAR_X);
//iy=CHAR_getInt(fd_charaindex, CHAR_Y);
//i_fl=CHAR_getInt(fd_charaindex, CHAR_FLOOR);
i_diff_x=abs(ix-x);
i_diff_y=abs(iy-y);
if( (i_diff_x>1)||(i_diff_y>1) ){//2
//print("\n<www>Warp Error!!!!!!!!!");
//print("\n<www>the origion->fd=%d,x=%d,y=%d",fd,ix,iy);
//print("\n<www>the modify-->fd=%d,X=%d,Y=%d,dir=%s",fd,x,y,direction);
x=ix;
y=iy;
// Robin 03/14
//return;
}
//if((i_fl==117)&&(ix==225)&&(iy==13)) goto END_w;
}//ttom
if(!(MAP_walkAble(fd_charaindex,CHAR_getInt(fd_charaindex, CHAR_FLOOR),x,y))){
// print("\n<wwww> the map is invaild(f:%d,x:%d,y:%d)",CHAR_getInt(fd_charaindex, CHAR_FLOOR),x,y);
x = ix;
y = iy;
}
CHAR_walk_init( fd, x, y, direction, FALSE);
}
void lssproto_SKD_recv( int fd,int dir, int index)
{
CHECKFDANDTIME;
}
void lssproto_ID_recv( int fd,int x,int y,int haveitemindex,int toindex )
{
int to_charaindex;
int fd_charaindex;
CHECKFDANDTIME;
fd_charaindex = CONNECT_getCharaindex( fd );
// CoolFish: Prevent Trade Cheat 2001/4/18
if (CHAR_getWorkInt(fd_charaindex, CHAR_WORKTRADEMODE) != CHAR_TRADE_FREE)
return;
if( CHAR_getWorkInt(fd_charaindex,CHAR_WORKSTREETVENDOR)!=-1) return;
if( CHAR_getWorkInt( fd_charaindex, CHAR_WORKBATTLEMODE)
!= BATTLE_CHARMODE_NONE) return ;
//ttom avoid the warp at will 12/5
{
int ix,iy;
ix=CHAR_getInt(fd_charaindex, CHAR_X);
iy=CHAR_getInt(fd_charaindex, CHAR_Y);
x=ix;
y=iy;
}
// if( CHAR_getInt( fd_charaindex, CHAR_RIDEPET) + 1 == toindex ){
// CHAR_talkToCli( fd_charaindex , -1, "骑宠无法使用该物品,请下骑后使用!", CHAR_COLORRED);
// return;
// }
CHAR_setMyPosition( fd_charaindex, x,y,TRUE);
to_charaindex = Callfromcli_Util_getTargetCharaindex( fd, toindex);
CHAR_ItemUse( fd_charaindex, to_charaindex, haveitemindex );
}
/*------------------------------------------------------------
* 惫寞毛蓟少
------------------------------------------------------------*/
void lssproto_ST_recv( int fd,int titleindex )
{
CHECKFDANDTIME;
CHAR_selectTitle( CONNECT_getCharaindex( fd) , titleindex );
}
/*------------------------------------------------------------
* 惫寞毛绰轮允月
------------------------------------------------------------*/
void lssproto_DT_recv( int fd,int titleindex )
{
CHECKFDANDTIME;
CHAR_deleteTitle( CONNECT_getCharaindex(fd) , titleindex );
}
/*------------------------------------------------------------
------------------------------------------------------------*/
void lssproto_FT_recv( int fd,char* data )
{
CHECKFDANDTIME;
// Robin 04/23 debug
if( strlen(data) > 12 ) return;
if( checkStringErr(data) ) return;
CHAR_inputOwnTitle( CONNECT_getCharaindex(fd) , data);
}
/*------------------------------------------------------------
------------------------------------------------------------*/
void lssproto_PI_recv( int fd,int x, int y, int dir )
{
int fd_charaindex;
CHECKFDANDTIME;
fd_charaindex = CONNECT_getCharaindex( fd );
{//ttom avoid warp at will
int ix,iy;
ix=CHAR_getInt(fd_charaindex, CHAR_X);
iy=CHAR_getInt(fd_charaindex, CHAR_Y);
if( (ix!=x)||(iy!=y)){
//print("\n<PI>--Error!!!!");
//print("\n<PI>origion x=%d,y=%d",ix,iy);
//print("\n<PI>modify X=%d,Y=%d",x,y);
x=ix;
y=iy;
}
}//ttom end
CHAR_setMyPosition( fd_charaindex, x,y,TRUE);
if( CHAR_getWorkInt( fd_charaindex, CHAR_WORKBATTLEMODE)
!= BATTLE_CHARMODE_NONE) return ;
CHAR_PickUpItem( fd_charaindex, dir);
}
void lssproto_DI_recv( int fd,int x, int y, int itemindex )
{
int charaindex;
CHECKFDANDTIME;
charaindex = CONNECT_getCharaindex( fd );
if( CHAR_getWorkInt(charaindex, CHAR_WORKTRADEMODE) != CHAR_TRADE_FREE) return;
if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE) return;
if( CHAR_getWorkInt(charaindex,CHAR_WORKSTREETVENDOR)!=-1) return;
CHAR_setMyPosition( charaindex ,
CHAR_getInt( charaindex, CHAR_X), CHAR_getInt( charaindex, CHAR_Y), TRUE);
CHAR_DropItem( charaindex, itemindex );
}
void lssproto_DP_recv( int fd,int x, int y, int petindex )
{
int fd_charaindex;
CHECKFDANDTIME;
fd_charaindex = CONNECT_getCharaindex( fd );
if (CHAR_getWorkInt(fd_charaindex, CHAR_WORKTRADEMODE) != CHAR_TRADE_FREE)
return;
if( CHAR_getWorkInt(fd_charaindex,CHAR_WORKSTREETVENDOR)!=-1) return;
{
int ix,iy;
ix=CHAR_getInt(fd_charaindex, CHAR_X);
iy=CHAR_getInt(fd_charaindex, CHAR_Y);
x=ix;
y=iy;
}
CHAR_setMyPosition( fd_charaindex , x,y,TRUE);
if( CHAR_getWorkInt( fd_charaindex , CHAR_WORKBATTLEMODE)
!= BATTLE_CHARMODE_NONE) return ;
PET_dropPet( fd_charaindex, petindex);
}
/*------------------------------------------------------------
------------------------------------------------------------*/
void lssproto_DG_recv( int fd,int x, int y, int amount )
{
int fd_charaindex;
CHECKFDANDTIME;
fd_charaindex = CONNECT_getCharaindex( fd );
//ttom avoid the warp at will 12/15
{
int ix,iy;
ix=CHAR_getInt(fd_charaindex, CHAR_X);
iy=CHAR_getInt(fd_charaindex, CHAR_Y);
x=ix;
y=iy;
}
CHAR_setMyPosition( fd_charaindex, x,y,TRUE);
if( CHAR_getWorkInt( fd_charaindex, CHAR_WORKBATTLEMODE)
!= BATTLE_CHARMODE_NONE) return ;
// CoolFish: Prevent Trade Cheat 2001/4/18
if (CHAR_getWorkInt(fd_charaindex, CHAR_WORKTRADEMODE) != CHAR_TRADE_FREE)
return;
if( CHAR_getWorkInt(fd_charaindex,CHAR_WORKSTREETVENDOR)!=-1) return;
CHAR_DropMoney( fd_charaindex, amount );
}
/*------------------------------------------------------------
------------------------------------------------------------*/
void lssproto_MI_recv( int fd,int fromindex,int toindex )
{
int fd_charaindex;
CHECKFDANDTIME;
fd_charaindex = CONNECT_getCharaindex( fd );
// CoolFish: Prevent Trade Cheat 2001/4/18
if (CHAR_getWorkInt(fd_charaindex, CHAR_WORKTRADEMODE) != CHAR_TRADE_FREE)
return;
if( CHAR_getWorkInt( fd_charaindex, CHAR_WORKBATTLEMODE)
!= BATTLE_CHARMODE_NONE) return ;
if( CHAR_getWorkInt(fd_charaindex,CHAR_WORKSTREETVENDOR)!=-1) return;
CHAR_moveEquipItem( fd_charaindex, fromindex, toindex );
}
#ifdef _PET_ITEM
void lssproto_PETITEM_recv( int fd,int x,int y,int petindex,int fromindex,int toindex )
{
int fd_charaindex;
CHECKFDANDTIME;
fd_charaindex = CONNECT_getCharaindex( fd );
// CoolFish: Prevent Trade Cheat 2001/4/18
if (CHAR_getWorkInt(fd_charaindex, CHAR_WORKTRADEMODE) != CHAR_TRADE_FREE)
return;
if( CHAR_getWorkInt(fd_charaindex,CHAR_WORKSTREETVENDOR)!=-1) return;
/* 爵 反轮仁 仿弘匹仇木卞娄匀井井月第 岭丐曰 */
if( CHAR_getWorkInt( fd_charaindex, CHAR_WORKBATTLEMODE)
!= BATTLE_CHARMODE_NONE) return ;
CHAR_movePetItem( fd_charaindex, petindex, fromindex, toindex );
}
#endif
/*------------------------------------------------------------
* 旦平伙失永皿
------------------------------------------------------------*/
void lssproto_SKUP_recv( int fd,int skillid )
{
int fd_charaindex;
CHECKFDANDTIME;
fd_charaindex = CONNECT_getCharaindex(fd);
if( CHAR_getWorkInt( fd_charaindex, CHAR_WORKBATTLEMODE)
!= BATTLE_CHARMODE_NONE) return ;
CHAR_SkillUp(fd_charaindex,skillid);
}
/*------------------------------------------------------------
* 戊生弁扑亦件锹澎卞丢永本□斥毛霜耨
------------------------------------------------------------*/
void lssproto_MSG_recv( int fd,int index,char* message, int color )
{
int fd_charaindex;
CHECKFD;
fd_charaindex = CONNECT_getCharaindex( fd);
ADDRESSBOOK_sendMessage( fd_charaindex, index,message, color );
}
/*------------------------------------------------------------
------------------------------------------------------------*/
void lssproto_AB_recv( int fd )
{
int fd_charaindex;
CHECKFDANDTIME;
fd_charaindex = CONNECT_getCharaindex( fd );
ADDRESSBOOK_sendAddressbookTable( fd_charaindex );
}
/*------------------------------------------------------------
------------------------------------------------------------*/
void lssproto_DAB_recv( int fd , int index)
{
int fd_charaindex;
CHECKFDANDTIME;
fd_charaindex = CONNECT_getCharaindex( fd );
ADDRESSBOOK_deleteEntry( fd_charaindex ,index);
}
void lssproto_AAB_recv( int fd , int x, int y)
{
int fd_charaindex;
CHECKFDANDTIME;
fd_charaindex = CONNECT_getCharaindex( fd );
{
int ix,iy;
ix=CHAR_getInt(fd_charaindex, CHAR_X);
iy=CHAR_getInt(fd_charaindex, CHAR_Y);
if( (ix!=x)||(iy!=y)){
x=ix;
y=iy;
}
}
CHAR_setMyPosition( fd_charaindex , x,y,TRUE);
ADDRESSBOOK_addEntry( fd_charaindex );
}
void lssproto_L_recv( int fd, int dir )
{
int fd_charaindex;
CHECKFDANDTIME;
fd_charaindex = CONNECT_getCharaindex( fd );
CHAR_Look( fd_charaindex ,dir );
}
/*------------------------------------------------------------
* 民乓永玄迕丢永本□斥及霜耨
------------------------------------------------------------*/
void lssproto_TK_recv( int fd,int x, int y,char* message,int color, int area )
{
int fd_charaindex,ix,iy;//ttom+2
int fmindex, channel;
int i;
CHECKFD;
fd_charaindex = CONNECT_getCharaindex( fd );
fmindex = CHAR_getInt( fd_charaindex, CHAR_FMINDEX );
channel = CHAR_getWorkInt( fd_charaindex, CHAR_WORKFMCHANNEL );
{// Robin 0629 silent
int silentSec, talkCount;
silentSec = CHAR_getInt(fd_charaindex,CHAR_SILENT);
if( silentSec > 0 ) {
int loginTime;
char buf[256];
int leftSec;
loginTime = CHAR_getWorkInt(fd_charaindex, CHAR_WORKLOGINTIME );
// 防止时间修正回朔後 异常禁言 Robin 20040817
if( (int)NowTime.tv_sec < loginTime) {
CHAR_setInt(fd_charaindex, CHAR_SILENT, 0 );
return;
}
if( ((int)NowTime.tv_sec -loginTime) > silentSec ) {
CHAR_setInt(fd_charaindex, CHAR_SILENT, 0 );
return;
}
silentSec += 10; //多禁10秒
leftSec = silentSec - ((int)NowTime.tv_sec - loginTime);
sprintf(buf, "禁言中!!还有%d秒再讲多禁10秒钟。", leftSec );
CHAR_talkToCli(fd_charaindex, -1, buf, color);
CHAR_setInt(fd_charaindex, CHAR_SILENT, silentSec );
return;
}
talkCount = CHAR_getWorkInt(fd_charaindex, CHAR_WORKTALKCOUNT );
talkCount ++;
CHAR_setWorkInt( fd_charaindex, CHAR_WORKTALKCOUNT, talkCount);
if( talkCount > 40 ) {
int lastTalkTime = CHAR_getWorkInt(fd_charaindex, CHAR_WORKTALKTIME );
if( (int)NowTime.tv_sec - lastTalkTime < 10 ) {
CHAR_setInt( fd_charaindex,CHAR_SILENT, 60 );
CHAR_setWorkInt( fd_charaindex, CHAR_WORKLOGINTIME, (int)NowTime.tv_sec );
CHAR_talkToCli( fd_charaindex, -1, "你太多话了唷,请你的嘴巴先休息个一分钟吧!", color);
CHAR_setWorkInt(fd_charaindex, CHAR_WORKTALKCOUNT, 0 );
return;
}else {
CHAR_setWorkInt( fd_charaindex, CHAR_WORKTALKTIME, (int)NowTime.tv_sec );
CHAR_setWorkInt(fd_charaindex, CHAR_WORKTALKCOUNT, 0 );
}
}
}
ix=CHAR_getInt(fd_charaindex, CHAR_X);
iy=CHAR_getInt(fd_charaindex, CHAR_Y);
x=ix;
y=iy;
CHAR_setMyPosition( fd_charaindex, x,y,TRUE);
if(!CONNECT_get_shutup(fd)){ //ttom add the shut up function
#ifdef _UNTEXT_TALK
for(i=0;i<textcnt;i++){
if(strstr(message,getUnText(i))!=NULL){
strcpy(message,"P|hi");
break;
}
}
#endif
#ifdef _NO_DAOLUAN
{
int floori;
for(floori=1;floori<=30;floori++){
if(getTalkFloor(floori)==-1)break;
if(CHAR_getInt(fd_charaindex,CHAR_FLOOR)==getTalkFloor(floori)){
area = 2;
}
}
}
#endif
if(area<2){
area = 2;
}
CHAR_Talk( fd,fd_charaindex, message, color, area );
}
}
void lssproto_M_recv( int fd, int fl, int x1, int y1 , int x2, int y2 )
{
char* mapdata;
RECT seek={x1,y1,x2-x1,y2-y1},ret;
CHECKFD;
mapdata = MAP_getdataFromRECT(fl,&seek,&ret);
if( mapdata != NULL ){
lssproto_M_send( fd, fl, ret.x, ret.y,
ret.x+ret.width, ret.y+ret.height, mapdata );
}
}
/*------------------------------------------------------------
------------------------------------------------------------*/
void lssproto_C_recv( int fd, int index )
{
/* 仇木分仃凛棉及涩烂毛苇卅中仪卞允月 */
CHECKFD;
#ifdef _WAN_FIX
if(CHAR_getInt( CONNECT_getCharaindex( fd ), CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER)
return;
#endif
CHAR_sendCSpecifiedObjindex( fd, index);
}
void lssproto_S_recv( int fd, char* category )
{
char* string;
int fd_charaindex;
fd_charaindex = CONNECT_getCharaindex( fd );
string = CHAR_makeStatusString( fd_charaindex, category );
if( string != NULL )
lssproto_S_send( fd , string );
}
void lssproto_EV_recv( int fd,int event,int seqno,int x,int y, int dir )
{
int rc;
int fx,fy;
int fd_charaindex;
CHECKFD;
fd_charaindex = CONNECT_getCharaindex( fd );
{
int ix,iy;
ix=CHAR_getInt(fd_charaindex, CHAR_X);
iy=CHAR_getInt(fd_charaindex, CHAR_Y);
if( ( ix != x ) || ( iy != y ) ){
goto CK1;
}
goto OK;
}
CK1:
{
OBJECT object;
int ix,iy,ifloor,i,j;
int warp_point_x[9];
int warp_point_y[9];
int warp_point=0;
ix=CHAR_getInt(fd_charaindex, CHAR_X);
iy=CHAR_getInt(fd_charaindex, CHAR_Y);
ifloor=CHAR_getInt(fd_charaindex,CHAR_FLOOR);
for(i=iy-1;i<=iy+1;i++){
for(j=ix-1;j<=ix+1;j++){
for( object = MAP_getTopObj(ifloor,j,i) ; object ;object = NEXT_OBJECT(object ) ){
int o = GET_OBJINDEX(object);
if( OBJECT_getType(o) == OBJTYPE_CHARA ){
int etype;
int charaindex=OBJECT_getIndex(o);
if( !CHAR_CHECKINDEX(charaindex) ) continue;
etype = CHAR_getWorkInt( charaindex, CHAR_WORKEVENTTYPE);
if( etype != CHAR_EVENT_NONE ) {
if(etype==CHAR_EVENT_WARP){
warp_point_x[warp_point]=j;
warp_point_y[warp_point]=i;
warp_point++;
}
}
}
#ifdef _MAP_WARPPOINT
else if( OBJECT_getType(o) == OBJTYPE_WARPPOINT ){
int etype = OBJECT_getchartype( o);
if( etype != CHAR_EVENT_NONE ) {
warp_point_x[warp_point]=j;
warp_point_y[warp_point]=i;
warp_point++;
break;
}
}
#endif
}
}
}
for(i=0;i<warp_point;i++){
if((x==warp_point_x[i])&& (y==warp_point_y[i]))
goto OK;
}
x=CHAR_getInt(fd_charaindex, CHAR_X);
y=CHAR_getInt(fd_charaindex, CHAR_Y);
}
OK:
CHAR_setMyPosition( fd_charaindex, x,y,TRUE);
CHAR_setWorkChar( fd_charaindex , CHAR_WORKWALKARRAY,"");
if( dir < 0 || dir > 7) {
fx = CHAR_getInt(fd_charaindex, CHAR_X);
fy = CHAR_getInt(fd_charaindex, CHAR_Y);
}else {
CHAR_getCoordinationDir( dir, CHAR_getInt(fd_charaindex, CHAR_X),
CHAR_getInt(fd_charaindex, CHAR_Y),1,&fx,&fy);
}
rc = EVENT_main(fd_charaindex, event,fx,fy);
lssproto_EV_send( fd, seqno, rc);
}
/*------------------------------------------------------------
------------------------------------------------------------*/
void lssproto_EN_recv( int fd , int x,int y )
{
int ret = FALSE, err = 0;
int fd_charaindex;
CHECKFD;
fd_charaindex = CONNECT_getCharaindex( fd);
#ifdef _ALLBLUES_LUA_1_7
if( CHAR_getInt( fd_charaindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER ) {
if( CHAR_getWorkInt( fd_charaindex, CHAR_WORKBATTLEMODE ) == BATTLE_CHARMODE_NONE ){
if(CharVsEnemyFunction( fd_charaindex ) == TRUE)return;
}
}
#endif
//print(" EN_recv ");
if( CHAR_getWorkInt( fd_charaindex, CHAR_WORKPARTYMODE) != CHAR_PARTY_CLIENT){
CHAR_setMyPosition( fd_charaindex, x,y,TRUE);
CHAR_setWorkChar( fd_charaindex, CHAR_WORKWALKARRAY,"");
err = BATTLE_CreateVsEnemy( fd_charaindex,0, -1);
if( err != 0 ){
ret = FALSE;
}else{
ret = TRUE;
}
}
}
/*------------------------------------------------------------
------------------------------------------------------------*/
void lssproto_DU_recv( int fd , int x,int y )
{
int fd_charaindex;
fd_charaindex = CONNECT_getCharaindex( fd );
// if(CHAR_getWorkInt(fd_charaindex, CHAR_WORKSAFEMODE)==0)
// {
// lssproto_EN_send( fd, FALSE, 0 );
// CHAR_SafePassword(fd_charaindex);
// return;
// }
if(CHAR_getInt(fd_charaindex,CHAR_FLOOR)==20000){
lssproto_EN_send( fd, FALSE, 0 );
return;
}
if(CHAR_getInt(fd_charaindex,CHAR_FLOOR)==getNoPkMap()){
CHAR_talkToCli( fd_charaindex, -1, "该地图禁止PK", CHAR_COLORYELLOW);
lssproto_EN_send( fd, FALSE, 0 );
return;
}
OBJECT object;
int ret = FALSE, charaindex = -1, enemyindex;
int frontx,fronty;
int cnt = 0;
BOOL found = FALSE;
CHECKFDANDTIME;
{//ttom avoid warp at will
int ix,iy;
ix=CHAR_getInt(fd_charaindex, CHAR_X);
iy=CHAR_getInt(fd_charaindex, CHAR_Y);
if( (ix!=x)||(iy!=y)){
//print("\n<DU>--Error!!!!");
//print("\n<DU>origion x=%d,y=%d",ix,iy);
//print("\n<DU>modify X=%d,Y=%d",x,y);
x=ix;
y=iy;
}
}
if( CHAR_getWorkInt( fd_charaindex, CHAR_WORKPARTYMODE)
!= CHAR_PARTY_CLIENT)
{
int i;
// 愤坌及奶件犯永弁旦
charaindex = fd_charaindex;
CHAR_setMyPosition( charaindex, x,y,TRUE);
/* WALKARRAY毛弁伉失允月 */
CHAR_setWorkChar( charaindex, CHAR_WORKWALKARRAY,"");
/* 赓渝祭允月 */
for( i = 0; i < CONNECT_WINDOWBUFSIZE ; i ++ ) {
CONNECT_setDuelcharaindex( fd, i, -1 );
}
CHAR_getCoordinationDir( CHAR_getInt( charaindex, CHAR_DIR ) ,
CHAR_getInt( charaindex , CHAR_X ),
CHAR_getInt( charaindex , CHAR_Y ) ,
1 , &frontx , &fronty );
for( object = MAP_getTopObj( CHAR_getInt( charaindex, CHAR_FLOOR),
frontx,fronty) ;
object ;
object = NEXT_OBJECT(object ) )
{
int toindex;
int objindex = GET_OBJINDEX(object);
/* 平乓仿弁正□元扎卅中 */
if( OBJECT_getType( objindex) != OBJTYPE_CHARA) continue;
toindex = OBJECT_getIndex( objindex);
/* 皿伊奶乩□元扎卅中 */
if( CHAR_getInt( toindex, CHAR_WHICHTYPE) != CHAR_TYPEPLAYER
#ifdef _PLAYER_NPC
&& CHAR_getInt( toindex, CHAR_WHICHTYPE) != CHAR_TYPEPLAYERNPC
#endif
// && CHAR_getInt( toindex, CHAR_WHICHTYPE) != CHAR_TYPEPLAYERNPC
) continue;
found = TRUE;
if( CHAR_getWorkInt( toindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE )continue;
int floor = CHAR_getInt( charaindex, CHAR_FLOOR );
if(!CHAR_getFlg( toindex, CHAR_ISDUEL)
#ifdef _BATTLE_FLOOR
&& (!strcmp(getBattleFloorCF(),"")
&& floor!=getBattleFloor(1)
&& floor!=getBattleFloor(2)
&& floor!=getBattleFloor(3)
&& floor!=getBattleFloor(4)
&& floor!=getBattleFloor(5))
#endif
)continue;
#ifdef _ALLBLUES_LUA_1_5
int flg = FreeVsPlayer(charaindex, toindex);
if( flg == 1){
lssproto_EN_send( fd, FALSE, 0 );
return;
}else if( flg == 2){
return;
}else
#endif
#ifdef _AUTO_PK
if(!CHAR_getFlg( toindex, CHAR_ISDUEL)){
if(AutoPk_PKTimeGet()>0)continue;
if(floor!=20000)continue;
if(CHAR_getInt( charaindex, CHAR_AUTOPK ) == -1)continue;
if(CHAR_getInt( toindex, CHAR_AUTOPK ) == -1)continue;
}
#endif
// shan begin
{
int i;
for( i=0; i<FAMILY_FMPKFLOOR; i++){
if( fmpkflnum[i].fl == CHAR_getInt( charaindex, CHAR_FLOOR) ){
if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEFLAG) == -1 ){
lssproto_EN_send( fd, FALSE, 0 );
return;
}
if(CHAR_getInt( charaindex, CHAR_FMINDEX) == CHAR_getInt( toindex, CHAR_FMINDEX)){
lssproto_EN_send( fd, FALSE, 0 );
return;
}
}
}
}
// shan end
// 阂间卅日褪毛裟氏匹仁月
if( CHAR_getWorkInt( toindex, CHAR_WORKPARTYMODE )
== CHAR_PARTY_CLIENT )
{
int tmpindex = CHAR_getWorkInt( toindex, CHAR_WORKPARTYINDEX1 );
/* 锹澎互皿伊奶乩□匹卅中仪手丐月 */
if( CHAR_CHECKINDEX( tmpindex)) {
if( CHAR_getWorkInt( tmpindex, CHAR_WHICHTYPE) != CHAR_TYPEPLAYER
#ifdef _PLAYER_NPC
&& CHAR_getInt( tmpindex, CHAR_WHICHTYPE) != CHAR_TYPEPLAYERNPC
#endif
// && CHAR_getInt( tmpindex, CHAR_WHICHTYPE) != CHAR_TYPEPLAYERNPC
){
continue;
}
}
}
CONNECT_setDuelcharaindex( fd, cnt,toindex );
cnt++;
if( cnt == CONNECT_WINDOWBUFSIZE ) break;
}
/* 中卅井匀凶 */
if( cnt == 0 ) {
goto lssproto_DU_recv_Err;
}
/* ㄠ谛分仃分匀凶日穑巨件玄伉□ */
else if( cnt == 1 ) {
enemyindex = CONNECT_getDuelcharaindex(fd,0);
// 锹澎互褪卅日公及引引巨件市它件玄今六月互
// 阂间卅日褪毛裟氏匹仁月
if( CHAR_getWorkInt( enemyindex, CHAR_WORKPARTYMODE )
== CHAR_PARTY_CLIENT )
{
enemyindex = CHAR_getWorkInt( enemyindex, CHAR_WORKPARTYINDEX1 );
// 卅兮井褪互中卅中
if( enemyindex < 0 )goto lssproto_DU_recv_Err;
}
ret = BATTLE_CreateVsPlayer( charaindex, enemyindex );
if( ret != 0 ){
ret = FALSE;
}else{
ret = TRUE;
}
}
else if( cnt > 1 ) {
int strlength;
char msgbuf[1024];
char escapebuf[2048];
strcpy( msgbuf, "1\n要和谁战斗?\n");
strlength = strlen( msgbuf);
for( i = 0;
CONNECT_getDuelcharaindex( fd,i) != -1
&& i< CONNECT_WINDOWBUFSIZE;
i ++ )
{
char *a = CHAR_getChar(
CONNECT_getDuelcharaindex( fd,i) , CHAR_NAME);
char buf[256];
snprintf( buf, sizeof( buf),"%s [%s]\n", a,
CHAR_getWorkInt(
CONNECT_getDuelcharaindex(fd,i),
CHAR_WORKPARTYMODE )
!= CHAR_PARTY_NONE ? "团体": "单独");
if( strlength + strlen( buf) > arraysizeof( msgbuf)){
print( "%s:%d视窗讯息buffer不足。\n",
__FILE__,__LINE__);
break;
}
strcpy( &msgbuf[strlength], buf);
strlength += strlen(buf);
}
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_SELECT,
WINDOW_BUTTONTYPE_CANCEL,
CHAR_WINDOWTYPE_SELECTDUEL,
-1,
makeEscapeString( msgbuf, escapebuf, sizeof(escapebuf)));
ret = TRUE;
}
}
lssproto_DU_recv_Err:;
if( ret == FALSE ) {
/* 瑛绊霜耨 */
lssproto_EN_send( fd, FALSE, 0 );
if( cnt > 0 ) CHAR_talkToCli( charaindex, -1, "遭遇失败!", CHAR_COLORYELLOW);
else if( found ) CHAR_talkToCli( charaindex, -1, "无人可以对战。", CHAR_COLORYELLOW);
else CHAR_talkToCli( charaindex, -1, "那里没有任何人。", CHAR_COLORYELLOW);
}
}
/*------------------------------------------------------------
------------------------------------------------------------*/
void lssproto_EO_recv( int fd, int dummy )
{
int fd_charaindex;
int battle_index;//ttom++
CHECKFD;
fd_charaindex = CONNECT_getCharaindex( fd );
BattleEncountOut( fd_charaindex );
// Nuke start 0827 : Battle acceleration
battle_index=CHAR_getWorkInt(fd_charaindex,CHAR_WORKBATTLEINDEX);
if( BATTLE_CHECKINDEX( battle_index ) == FALSE ){
return;
}
if(BattleArray[battle_index].type != BATTLE_TYPE_P_vs_P){
if(CONNECT_get_watchmode(fd)) {
//print("fd= %d Watching the battle __ lssprot_EO_recv \n",fd);//for debug
CONNECT_set_watchmode(fd,FALSE);
return;
}
else if (checkBEOTime( fd ) < 0) {
//CHAR_talkToCli(fd_charaindex, -1, "你加速喔。", CHAR_COLORYELLOW);
}
}
// Nuke end
}
/*------------------------------------------------------------
------------------------------------------------------------*/
void lssproto_BU_recv( int fd, int dummy)
{
int fd_charaindex;
CHECKFD;
fd_charaindex = CONNECT_getCharaindex( fd );
// shan 2001/12/25
//BATTLE_WatchStop( fd_charaindex );
}
void lssproto_B_recv( int fd, char *command )
{
// if(strlen(command)<3 && strstr(command,"&")!=NULL)
// return;
int fd_charaindex;
int battle_index;//ttom++
CHECKFD;
fd_charaindex = CONNECT_getCharaindex( fd );
#ifdef _NOJOB_PK
if(CHAR_getInt(fd_charaindex,CHAR_FLOOR)==getNoJobPkMap() && strncmp( command, "P", 1 ) == 0 )
sprintf(command,"G");
#endif
BattleCommandDispach( fd, command );
// Nuke +1 0827: Battle acceleration
battle_index=CHAR_getWorkInt(fd_charaindex,CHAR_WORKBATTLEINDEX);
if( BATTLE_CHECKINDEX( battle_index ) == FALSE ){
return;
}
if(BattleArray[battle_index].type != BATTLE_TYPE_P_vs_P){
if(BattleArray[battle_index].type == BATTLE_TYPE_WATCH) {
CONNECT_set_watchmode(fd,TRUE);
return;
}
}
//Nuke end
}
void lssproto_FS_recv( int fd,int flg )
{
int fd_charaindex;
CHECKFDANDTIME;
fd_charaindex = CONNECT_getCharaindex( fd );
/* 椭瘀反竣卞六内卞公及引引白仿弘凳蕙 */
if(CHAR_getWorkInt( fd_charaindex, CHAR_WORKSAFEMODE)==0)
{
if((flg & CHAR_FS_TRADE ) ==32 )
{
CHAR_SafePassword(fd_charaindex);
return;
}
}
CHAR_setFlg( fd_charaindex, CHAR_ISPARTY,
(flg & CHAR_FS_PARTY )? TRUE:FALSE);
//CHAR_setFlg( fd_charaindex, CHAR_ISBATTLE,
// (flg & CHAR_FS_BATTLE )? TRUE:FALSE);
CHAR_setFlg( fd_charaindex, CHAR_ISDUEL,
(flg & CHAR_FS_DUEL )? TRUE:FALSE);
CHAR_setFlg( fd_charaindex, CHAR_ISPARTYCHAT,
(flg & CHAR_FS_PARTYCHAT )? TRUE:FALSE);
CHAR_setFlg( fd_charaindex, CHAR_ISTRADECARD,
(flg & CHAR_FS_TRADECARD )? TRUE:FALSE);
#ifdef _CHANNEL_MODIFY
//密语频道开关
CHAR_setFlg(fd_charaindex,CHAR_ISTELL,(flg & CHAR_FS_TELL )? TRUE:FALSE);
//家族频道开关
CHAR_setFlg(fd_charaindex,CHAR_ISFM,(flg & CHAR_FS_FM )? TRUE:FALSE);
//职业频道开关
CHAR_setFlg(fd_charaindex,CHAR_ISOCC,(flg & CHAR_FS_OCC )? TRUE:FALSE);
//聊天室
CHAR_setFlg(fd_charaindex,CHAR_ISCHAT,(flg & CHAR_FS_CHAT )? TRUE:FALSE);
//储存对话开关
CHAR_setFlg(fd_charaindex,CHAR_ISSAVE,(flg & CHAR_FS_SAVE )? TRUE:FALSE);
//世界频道开关
if(getSaType()==95){
CHAR_setFlg(fd_charaindex,CHAR_ISWORLD,(flg & CHAR_FS_WORLD )? TRUE:FALSE);
if(CHAR_getFlg(fd_charaindex,CHAR_ISWORLD)==FALSE)
CHAR_setWorkInt( fd_charaindex , CHAR_WORKALLTALKTYPE, 1);
else if(CHAR_getFlg(fd_charaindex,CHAR_ISWORLD)==TRUE)
CHAR_setWorkInt( fd_charaindex , CHAR_WORKALLTALKTYPE, 0);
}
#endif
// CoolFish: Trade 2001/4/18
CHAR_setFlg( fd_charaindex, CHAR_ISTRADE,
(flg & CHAR_FS_TRADE )? TRUE:FALSE);
/*
if (CHAR_getFlg(fd_charaindex, CHAR_ISTRADECARD) == TRUE)
CHAR_setFlg(fd_charaindex, CHAR_ISTRADE, FALSE);
if (CHAR_getFlg(fd_charaindex, CHAR_ISTRADE) == TRUE)
CHAR_setFlg(fd_charaindex, CHAR_ISTRADECARD, FALSE);
*/
lssproto_FS_send( fd, flg);
}
/*------------------------------------------------------------
------------------------------------------------------------*/
void lssproto_PR_recv( int fd,int x, int y, int request )
{
int result = FALSE;
int fd_charaindex;
CHECKFDANDTIME;
fd_charaindex = CONNECT_getCharaindex( fd );
#if 1 // 禁止组队区域
if( request == 1 )
{
int nowFloor;
nowFloor = CHAR_getInt( fd_charaindex, CHAR_FLOOR);
if( nowFloor == 31706
|| nowFloor == 10204
|| (10601 <= nowFloor && nowFloor <= 10605 )
|| nowFloor == 10919 || nowFloor == 10920
|| nowFloor == 20711 || nowFloor == 20712
|| nowFloor == 1008 || nowFloor == 1021
|| nowFloor == 3008 || nowFloor == 3021
|| ( nowFloor <= 8213 && nowFloor >= 8200 )
|| ( nowFloor >= 30017 && nowFloor <= 30021 )
#ifdef _TIME_TICKET
|| check_TimeTicketMap(nowFloor)
#endif
){
//print("\n 改封包!禁止组队区域!!:%s ", CHAR_getChar( fd_charaindex, CHAR_CDKEY) );
return;
}
}
#endif
{//ttom avoid warp at will
int ix,iy;
ix=CHAR_getInt(fd_charaindex, CHAR_X);
iy=CHAR_getInt(fd_charaindex, CHAR_Y);
if( (ix!=x)||(iy!=y)){
//print("\n<PR>--Error!!!!");
//print("\n<PR>origion x=%d,y=%d",ix,iy);
//print("\n<PR>modify X=%d,Y=%d",x,y);
x=ix;
y=iy;
}
}
CHAR_setMyPosition( fd_charaindex, x,y,TRUE);
if( request == 0 ) {
#ifdef _PLAYER_NPC
if( CHAR_getWorkInt( fd_charaindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_LEADER ) {
int i;
for( i = 0; i < CHAR_PARTYMAX; i ++ ) {
int pindex = CHAR_getWorkInt( fd_charaindex, i + CHAR_WORKPARTYINDEX1);
if( CHAR_CHECKINDEX( pindex) ) {
if(CHAR_getInt( pindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYERNPC){
CHAR_setWorkInt( fd_charaindex, i + CHAR_WORKPARTYINDEX1, -1);
CHAR_CharaDelete(pindex);
continue;
}
}
}
}
#endif
/* 轮迩允月 */
result = CHAR_DischargeParty(fd_charaindex, 0);
}
else if( request == 1 ) {
result = CHAR_JoinParty(fd_charaindex);
}
}
/*------------------------------------------------------------
------------------------------------------------------------*/
void lssproto_KS_recv( int fd,int petarray )
{
int ret , fd_charaindex,petindex;
CHECKFDANDTIME;
fd_charaindex = CONNECT_getCharaindex( fd );
#ifdef _PET_BUG
petindex = CHAR_getCharPet( fd_charaindex, petarray);
if( CHAR_CHECKINDEX( petindex ) == TRUE ){
if(CHAR_getInt(petindex,CHAR_VITAL)>=getPetPoint(0)*20 || CHAR_getInt(petindex,CHAR_STR)>=getPetPoint(1)*80 || CHAR_getInt(petindex,CHAR_TOUGH)>=getPetPoint(2)*80 || CHAR_getInt(petindex,CHAR_DEX)>=getPetPoint(3)*100){
lssproto_KS_send( fd, petarray, FALSE);
return;
}
}
#endif
if( CHAR_getInt( fd_charaindex, CHAR_RIDEPET) == petarray )
lssproto_KS_send( fd, petarray, FALSE);
ret = PET_SelectBattleEntryPet( fd_charaindex, petarray);
lssproto_KS_send( fd, petarray, ret);
}
#ifdef _STANDBYPET
void lssproto_SPET_recv( int fd, int standbypet )
{
int fd_charaindex;
int i, s_pet =0, cnt =0;
CHECKFDANDTIME;
fd_charaindex = CONNECT_getCharaindex( fd );
if( CHAR_getWorkInt( fd_charaindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE
&& standbypet >= CHAR_getWorkInt( fd_charaindex, CHAR_WORKSTANDBYPET) ) {
//print("\n 改封包!??战斗中用SPET增加待机宠!!:%s ", CHAR_getChar( fd_charaindex, CHAR_CDKEY) );
return;
}
//if( CHAR_getInt( fd_charaindex, CHAR_RIDEPET) == petarray ) {
// lssproto_SPET_send( fd, petarray, FALSE);
//}
for( i =0; i < CHAR_MAXPETHAVE; i++) {
if( standbypet & ( 1 << i ) ) {
//if( CHAR_getInt( fd_charaindex, CHAR_RIDEPET) == i )
// continue;
cnt++;
if( cnt > 3 ) {
//print("\n 改封包!待机宠超过数量!!:%s ", CHAR_getChar( fd_charaindex, CHAR_CDKEY) );
//lssproto_SPET_send( fd, s_pet, FALSE);
break;
}
s_pet |= ( 1 << i );
}
}
CHAR_setWorkInt( fd_charaindex, CHAR_WORKSTANDBYPET, s_pet);
lssproto_SPET_send( fd, s_pet, TRUE);
}
#endif
/*------------------------------------------------------------
------------------------------------------------------------*/
void lssproto_AC_recv( int fd,int x, int y,int actionno )
{
int fd_charaindex;
CHECKFDANDTIME;
fd_charaindex = CONNECT_getCharaindex( fd );
{//ttom avoid the warp at will
Char *ch;
ch = CHAR_getCharPointer( fd_charaindex);
// CoolFish: +1 2001/11/05
if (!ch) return;
if((ch->data[CHAR_X]!=x)||(ch->data[CHAR_Y]!=y)){
return;
}
}
CHAR_setMyPosition( fd_charaindex, x,y,TRUE);
CHAR_sendAction( fd_charaindex, actionno, FALSE);
return;
}
/*------------------------------------------------------------
------------------------------------------------------------*/
void lssproto_MU_recv( int fd,int x,int y,int array,int toindex )
{
int to_charaindex = -1, fd_charaindex;
CHECKFDANDTIME;
fd_charaindex = CONNECT_getCharaindex( fd );
{//ttom avoid warp at will
int ix,iy;
ix=CHAR_getInt(fd_charaindex, CHAR_X);
iy=CHAR_getInt(fd_charaindex, CHAR_Y);
if( (ix!=x)||(iy!=y)){
//print("\n<MU>--Error!!!!");
//print("\n<MU>origion x=%d,y=%d",ix,iy);
//print("\n<MU>modify X=%d,Y=%d",x,y);
x=ix;
y=iy;
}
}
CHAR_setMyPosition( fd_charaindex, x,y,TRUE);
to_charaindex = Callfromcli_Util_getTargetCharaindex( fd, toindex);
MAGIC_Use( fd_charaindex, array, to_charaindex);
}
void lssproto_JB_recv( int fd,int x,int y )
{
int charaindex, floor;
CHECKFDANDTIME;
charaindex = CONNECT_getCharaindex( fd );
{
int ix,iy;
ix=CHAR_getInt(charaindex, CHAR_X);
iy=CHAR_getInt(charaindex, CHAR_Y);
if( (ix!=x)||(iy!=y)){
x=ix;
y=iy;
}
}
CHAR_setMyPosition( charaindex, x,y,TRUE);
if( CHAR_CHECKINDEX( charaindex ) == FALSE )return;
floor = CHAR_getInt( charaindex, CHAR_FLOOR );
if( floor == 1007
|| floor == 2007
|| floor == 3007
|| floor == 4007
|| floor == 130
|| floor == 40001
|| floor == 40002
|| floor == 40003
|| floor == 40004
|| floor == 40005
|| floor == 40006
|| floor == 40007
|| floor == 40008
|| floor == 40009
|| floor == 40010
#ifdef _AUTO_PK
|| (floor == 20000 && CHAR_getInt( charaindex, CHAR_AUTOPK ) == -1)
#endif
#ifdef _WATCH_FLOOR
|| floor == getWatchFloor(1)
|| floor == getWatchFloor(2)
|| floor == getWatchFloor(3)
|| floor == getWatchFloor(4)
|| floor == getWatchFloor(5)
|| !strcmp(getWatchFloorCF(),"")
#endif
){
BATTLE_WatchTry( charaindex );
}else{
BATTLE_RescueTry( charaindex );
}
}
void lssproto_KN_recv( int fd,int havepetindex,char* data )
{
int fd_charaindex;
CHECKFD;
fd_charaindex = CONNECT_getCharaindex( fd );
// Robin 04/26 debug
if( strlen(data) > 16 ) return;
// CoolFish: Prevent Trade Cheat 2001/4/18
if (CHAR_getWorkInt(fd_charaindex, CHAR_WORKTRADEMODE) != CHAR_TRADE_FREE)
return;
if( CHAR_getWorkInt(fd_charaindex,CHAR_WORKSTREETVENDOR)!=-1) return;
if( checkStringErr(data) ) return;
#ifdef _CHANGE_PETNAME_FIX
if(strstr(data,"|")!=NULL){
CHAR_talkToCli( fd_charaindex, -1, "宠物名中请不要带有非法字符!", CHAR_COLORRED);
return;
}
#endif
CHAR_inputUserPetName( fd_charaindex, havepetindex, data);
}
/*------------------------------------------------------------
------------------------------------------------------------*/
void lssproto_WN_recv( int fd,int x,int y,int seqno,
int objindex,int select, char* data )
{
// printf("fd=%d\n",fd);
// printf("x=%d\n",x);
// printf("y=%d\n",y);
// printf("seqno=%d\n",seqno);
// printf("objindex=%d\n",objindex);
// printf("select=%d\n",select);
// printf("data=%s\n",data);
// if ( seqno == 285 && strlen(data) == 0 ) return;
int fd_charaindex;
CHECKFDANDTIME;
if( checkStringErr(data) ) return;
#ifdef _NO_WARP
{
if(seqno!=CONNECT_get_seqno(fd)){
// printf("get_seqno=%d\n",CONNECT_get_seqno(fd));
return;
}
if( !( (select)&(CONNECT_get_selectbutton(fd)) ) && select ){
if( CONNECT_get_seqno(fd)==CHAR_WINDOWTYPE_QUIZ_MAIN ){
}else if( ( (CONNECT_get_seqno(fd)==CHAR_WINDOWTYPE_SCHEDULEMAN_START)
|| (CONNECT_get_seqno(fd)==CHAR_WINDOWTYPE_SCHEDULEMAN_SELECT) )
&& (select==1) ){
}else{
return ;
}
}
} // shan End
#endif
fd_charaindex = CONNECT_getCharaindex( fd );
#ifdef _AVOIDATTACK_IN_lssproto_WN_recv_dataToLong
if( strlen(data) > 2048 )
return ;
#endif
// if(seqno == 285 && CHAR_getWorkInt(fd_charaindex,CHAR_WORKWNKEY) == 285 ) return;
// CHAR_setWorkInt(fd_charaindex,CHAR_WORKWNKEY,seqno);
// CoolFish: Prevent Trade Cheat 2001/4/18
if (CHAR_getWorkInt(fd_charaindex, CHAR_WORKTRADEMODE) != CHAR_TRADE_FREE) {
return;
}
// Robin
if( checkStringErr(data) ) return;
#ifdef _ANGEL_SUMMON
if( seqno == CHAR_WINDOWTYPE_ANGEL_ASK )
{
print("\n CHAR_WINDOWTYPE_ANGEL_ASK objindex:%d select:%d data:%s ",
objindex, select, data );
if(select==WINDOW_BUTTONTYPE_YES ) {
if( AngelCreate( fd_charaindex) == FALSE ) {
sendAngelCleanToCli( fd );
}
}
else if(select==WINDOW_BUTTONTYPE_NO ) {
int mindex;
char nameinfo[64];
mindex = checkIfAngel( fd_charaindex);
print(" ====不接受召唤任务==== ");
getMissionNameInfo( fd_charaindex, nameinfo);
saacproto_ACMissionTable_send( acfd, mindex, 3, nameinfo, "");
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK, -1, -1,
"真是遗憾。\n少了你的帮助,看来魔族会继续危害大陆的人民了。" );
//CHAR_talkToCli( fd_charaindex, -1, "天之声:真是可惜,这可是难得的机会呀。", CHAR_COLORYELLOW);
sendAngelCleanToCli( fd );
}
}
#endif
#ifdef _SAFE_PASSWORD
if( seqno == CHAR_WINDOWTYPE_SAFE_PASSWORD1 )
{
char *cdkey;
cdkey = CHAR_getChar(fd_charaindex, CHAR_CDKEY);
if(strlen(data)>5 && strlen(data)<13)
{
saacproto_QuerySafePasswd_recv(NULL,cdkey,sasql_query_safepasswd(cdkey,data),fd_charaindex);
}
else
{
CHAR_talkToCli( fd_charaindex, -1, "您输入的安全码小于6位或大于12位请重新输入", CHAR_COLORRED);
}
}
if( seqno == CHAR_WINDOWTYPE_SAFE_PASSWORD2 )
{
char *cdkey;
cdkey = CHAR_getChar(fd_charaindex, CHAR_CDKEY);
if (strlen(data)<6 || strlen(data)>12)
{
CHAR_talkToCli( fd_charaindex, -1, "您输入的安全码小于6位或大于12位请重新输入", CHAR_COLORRED);
}
else
{
saacproto_AddSafePasswd_recv( NULL, cdkey, sasql_add_safepasswd(cdkey,data), fd_charaindex );
}
}
if( seqno == CHAR_WINDOWTYPE_SAFE_PASSWORD3 )
{
char *cdkey;
cdkey = CHAR_getChar(fd_charaindex, CHAR_CDKEY);
if(strlen(data)>5 && strlen(data)<13)
{
int res = sasql_query_safepasswd(cdkey,data);
if(res == 1)
{
CHAR_setWorkInt( fd_charaindex, CHAR_WORKSAFEMODE, 1);
CHAR_setInt( fd_charaindex, CHAR_LOCK, 1);
CHAR_talkToCli( fd_charaindex, -1, "您输入的安全码正确,系统成功帮您永久解锁!", CHAR_COLORRED);
}
if(res == 2)
{
CHAR_talkToCli( fd_charaindex, -1, "您输入的安全码错误,系统无法帮您解锁!", CHAR_COLORRED);
}
if(res == 3)
{
CHAR_talkToCli( fd_charaindex, -1, "您还没有设置安全码,请尽快设置!", CHAR_COLORRED);
CHAR_AddSafePassword(fd_charaindex);
}
}
else
{
CHAR_talkToCli( fd_charaindex, -1, "您输入的安全码小于6位或大于12位请重新输入", CHAR_COLORRED);
}
}
#endif
#ifdef _POINT_CARD
if( seqno == CHAR_WINDOWTYPE_POINT_CARD )
{
char *cdkey;
cdkey = CHAR_getChar(fd_charaindex, CHAR_CDKEY);
CHAR_talkToCli( fd_charaindex, -1, "正在查询该冲值卡信息,请稍候!", CHAR_COLORRED);
sasql_query_card(cdkey,data,fd_charaindex);
}
#endif
#ifdef _SQL_BUY_FUNC
if( seqno == CHAR_WINDOWTYPE_ONLINE_BUY ){
char *ondata = sasql_OnlineBuy( CHAR_getChar(fd_charaindex, CHAR_CDKEY), data );
//saacproto_OnlineBuy_send(getfdFromCharaIndex( charaindex), CHAR_getChar(charaindex, CHAR_CDKEY), data);
CHAR_talkToCli( fd_charaindex, -1, "提货卡号检验中,请稍候...", CHAR_COLORYELLOW);
saacproto_OnlineBuy_recv(getfdFromCharaIndex( fd_charaindex),ondata);
}
#endif
if( seqno == CHAR_WINDOWTYPE_RAND_WARP )
{
if( CHAR_getWorkInt( fd_charaindex, CHAR_WORKPARTYMODE ) == CHAR_PARTY_LEADER || CHAR_getWorkInt( fd_charaindex, CHAR_WORKPARTYMODE ) == CHAR_PARTY_CLIENT)
{
CHAR_talkToCli( fd_charaindex, -1, "此道具只可以单人使用!", CHAR_COLORRED);
return;
}
char *arg;
char buftest[255];
int haveitemindex,pass,fltest,xtest,ytest;
arg = CHAR_getWorkChar(fd_charaindex,CHAR_WORKRANDMSG);
if(getStringFromIndexWithDelim(arg,"|", 1, buftest, sizeof(buftest)) == FALSE)
return;
haveitemindex = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 2, buftest, sizeof(buftest)) == FALSE)
return;
pass = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 3, buftest, sizeof(buftest)) == FALSE)
return;
fltest = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 4, buftest, sizeof(buftest)) == FALSE)
return;
xtest = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 5, buftest, sizeof(buftest)) == FALSE)
return;
ytest = atoi(buftest);
if(strlen(data)<1)
{
CHAR_talkToCli( fd_charaindex, -1, "请输入验证码!", CHAR_COLORRED);
return;
}
if(pass!=atoi(data))
{
CHAR_talkToCli( fd_charaindex, -1, "你输入的验证码不正确,请重新输入!", CHAR_COLORRED);
return;
}
CHAR_warpToSpecificPoint(fd_charaindex, fltest, xtest, ytest);
CHAR_DelItem( fd_charaindex, haveitemindex);
}
if( seqno == CHAR_WINDOWTYPE_RAND_MSG )
{
char *arg;
char buftest[255];
int haveitemindex,pass;
char *itemmsg;
arg = CHAR_getWorkChar(fd_charaindex,CHAR_WORKRANDMSG);
if(getStringFromIndexWithDelim(arg,"|", 1, buftest, sizeof(buftest)) == FALSE)
return;
haveitemindex = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 2, buftest, sizeof(buftest)) == FALSE)
return;
pass = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 3, buftest, sizeof(buftest)) == FALSE)
return;
itemmsg = buftest;
if(strlen(data)<1)
{
CHAR_talkToCli( fd_charaindex, -1, "请输入验证码!", CHAR_COLORRED);
return;
}
if(pass!=atoi(data))
{
CHAR_talkToCli( fd_charaindex, -1, "你输入的验证码不正确,请重新输入!", CHAR_COLORRED);
return;
}
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
CHAR_WINDOWTYPE_ITEM_MSG,
-1,
itemmsg);
}
if( seqno == CHAR_STREETVENDOR_SELECT )
{
if(strlen(data)<1) return;
if(atoi(data)>6 || atoi(data)<1) return;
if(atoi(data)==4 && getJiFenBaiTan()==1){
CHAR_talkToCli( fd_charaindex, -1, "该线路不允许积分摆摊!", CHAR_COLORRED);
return;
}
CHAR_setWorkInt(fd_charaindex,CHAR_WORKTRADETYPE,(atoi(data)-1));
lssproto_STREET_VENDOR_send(fd,"O|");
}
#ifdef _QUESTION_ONLINE
if( seqno == CHAR_WINDOWTYPE_QUESTIONONLINE )
{
if(strlen(data)<1) return;
time_t timep;
struct tm *p;
time(&timep);
p=localtime(&timep);
timep = mktime(p);
if(questionstarttime == 0){
CHAR_talkToCli( fd_charaindex, -1, "在线答题已结束或未开始!", CHAR_COLORYELLOW);
return;
}
if(timep - questionstarttime > 30 || questionman>=3){
CHAR_talkToCli( fd_charaindex, -1, "答题时间已过!", CHAR_COLORYELLOW);
return;
}
if(strcmp(data,answer)==0)
{
if(questionman<3)
{
questionman++;
int itemindex,playnum,itemret;
itemindex = ITEM_makeItemAndRegist( getQuestionItem(questionman));
itemret = CHAR_addItemSpecificItemIndex(fd_charaindex,itemindex);
if( itemret < 0 || itemret >= CHAR_MAXITEMHAVE )
{
ITEM_endExistItemsOne( itemindex);
}
char questionbuf[256];
sprintf(questionbuf,"【喜报】恭喜玩家%s第%d名答对本题",CHAR_getChar(fd_charaindex,CHAR_NAME),questionman);
int i,playmaxnum;
playmaxnum=CHAR_getPlayerMaxNum();
for( i = 0 ; i < playmaxnum ; i++) {
if( CHAR_getCharUse(i) != FALSE ) {
CHAR_talkToCli( i, -1, questionbuf, CHAR_COLORRED);
}
}
}
}
}
#endif
#ifdef _PET_RESET
if( seqno == CHAR_WINDOWTYPE_RESETPET )
{
if(select == WINDOW_BUTTONTYPE_YES){
int petworkindex,petindex,i;
petworkindex = CHAR_getWorkInt(fd_charaindex,CHAR_WORKRESETPETINDEX);
int petpoint = sasql_resetpet_point(CHAR_getInt(petworkindex, CHAR_PETENEMYID));
int mypoint = sasql_vippoint(CHAR_getChar(fd_charaindex,CHAR_CDKEY),0,0);
if(petpoint<0)return;
if(mypoint<petpoint){
CHAR_talkToCli( fd_charaindex, -1, "您的点数不足,无法回炉,请联系客服充值!", CHAR_COLORYELLOW);
return;
}
for(i = 0; i < CHAR_MAXPETHAVE; i ++){
petindex = CHAR_getCharPet(fd_charaindex,i);
if( petindex == petworkindex ) {
break;
}
}
if(i==CHAR_MAXPETHAVE) return;
int enemyid = CHAR_getInt(petworkindex, CHAR_PETENEMYID);
CHAR_setCharPet( fd_charaindex, i, -1);
CHAR_endCharOneArray( petworkindex );
char szPet[128];
snprintf( szPet, sizeof( szPet ), "K%d", i);
CHAR_sendStatusString( fd_charaindex, szPet );
int j;
int enemynum = ENEMY_getEnemyNum();
for(j=0;j<enemynum;j++){
if( ENEMY_getInt( j, ENEMY_ID) == enemyid){
break;
}
}
if( j == enemynum ) return;
int ret = ENEMY_createPetFromEnemyIndex( fd_charaindex, j);
for( i = 0; i < CHAR_MAXPETHAVE; i ++ ){
if( CHAR_getCharPet( fd_charaindex, i ) == ret )break;
}
if( i == CHAR_MAXPETHAVE ) i = 0;
if( CHAR_CHECKINDEX( ret ) == TRUE ){
CHAR_setMaxExpFromLevel( ret, CHAR_getInt( ret, CHAR_LV ));
}
petindex = CHAR_getCharPet(fd_charaindex,i);
if( !CHAR_CHECKINDEX( petindex) )return;
CHAR_complianceParameter( petindex );
char msgbuf[128];
snprintf( msgbuf, sizeof( msgbuf ), "K%d", i );
CHAR_sendStatusString( fd_charaindex, msgbuf );
snprintf( msgbuf, sizeof( msgbuf ), "W%d", i );
CHAR_sendStatusString( fd_charaindex, msgbuf );
snprintf( msgbuf,sizeof( msgbuf), "回炉%s成功。",
CHAR_getChar(petindex,CHAR_NAME));
CHAR_talkToCli( fd_charaindex, -1, msgbuf, CHAR_COLORWHITE);
snprintf( msgbuf,sizeof( msgbuf), "扣除%d会员点。",
petpoint);
CHAR_talkToCli( fd_charaindex, -1, msgbuf, CHAR_COLORYELLOW);
sasql_vippoint(CHAR_getChar(fd_charaindex,CHAR_CDKEY),-petpoint,1);
CHAR_charSaveFromConnect(fd_charaindex, FALSE);
CHAR_talkToCli(fd_charaindex, -1, "系统为你自动存档!", CHAR_COLORRED);
return;
}else
return;
}
if( seqno == CHAR_WINDOWTYPE_RESETBDPET )
{
if(select == WINDOW_BUTTONTYPE_YES){
int petworkindex,petindex,i;
petworkindex = CHAR_getWorkInt(fd_charaindex,CHAR_WORKRESETPETINDEX);
int petpoint = sasql_resetbdpet_point(CHAR_getInt(petworkindex, CHAR_PETENEMYID));
int mypoint = sasql_vippoint(CHAR_getChar(fd_charaindex,CHAR_CDKEY),0,0);
if(petpoint<0)return;
if(mypoint<petpoint){
CHAR_talkToCli( fd_charaindex, -1, "您的点数不足,无法完成本次回炉。", CHAR_COLORYELLOW);
return;
}
for(i = 0; i < CHAR_MAXPETHAVE; i ++){
petindex = CHAR_getCharPet(fd_charaindex,i);
if( petindex == petworkindex ) {
break;
}
}
if(i==CHAR_MAXPETHAVE) return;
int enemyid = CHAR_getInt(petworkindex, CHAR_PETENEMYID);
CHAR_setCharPet( fd_charaindex, i, -1);
CHAR_endCharOneArray( petworkindex );
char szPet[128];
snprintf( szPet, sizeof( szPet ), "K%d", i);
CHAR_sendStatusString( fd_charaindex, szPet );
int j;
int enemynum = ENEMY_getEnemyNum();
for(j=0;j<enemynum;j++){
if( ENEMY_getInt( j, ENEMY_ID) == enemyid){
break;
}
}
if( j == enemynum ) return;
int ret = ENEMY_createPetFromEnemyIndex( fd_charaindex, j);
for( i = 0; i < CHAR_MAXPETHAVE; i ++ ){
if( CHAR_getCharPet( fd_charaindex, i ) == ret )break;
}
if( i == CHAR_MAXPETHAVE ) i = 0;
if( CHAR_CHECKINDEX( ret ) == TRUE ){
CHAR_setMaxExpFromLevel( ret, CHAR_getInt( ret, CHAR_LV ));
}
petindex = CHAR_getCharPet(fd_charaindex,i);
if( !CHAR_CHECKINDEX( petindex) )return;
char tmpname[128];
sprintf(tmpname,"*%s",CHAR_getChar(petindex,CHAR_NAME));
CHAR_setChar(petindex,CHAR_NAME,tmpname);
CHAR_complianceParameter( petindex );
char msgbuf[128];
snprintf( msgbuf, sizeof( msgbuf ), "K%d", i );
CHAR_sendStatusString( fd_charaindex, msgbuf );
snprintf( msgbuf, sizeof( msgbuf ), "W%d", i );
CHAR_sendStatusString( fd_charaindex, msgbuf );
snprintf( msgbuf,sizeof( msgbuf), "回炉%s成功。",
CHAR_getChar(petindex,CHAR_NAME));
CHAR_talkToCli( fd_charaindex, -1, msgbuf, CHAR_COLORWHITE);
snprintf( msgbuf,sizeof( msgbuf), "扣除%d会员点。",
petpoint);
CHAR_talkToCli( fd_charaindex, -1, msgbuf, CHAR_COLORYELLOW);
sasql_vippoint(CHAR_getChar(fd_charaindex,CHAR_CDKEY),-petpoint,1);
CHAR_charSaveFromConnect(fd_charaindex, FALSE);
CHAR_talkToCli(fd_charaindex, -1, "系统为你自动存档!", CHAR_COLORRED);
return;
}else
return;
}
#endif
#ifdef _ZHIPIAO_SYSTEM
if( seqno == CHAR_WINDOWTYPE_ZHIPIAO_1 ){
if(select == WINDOW_BUTTONTYPE_OK){
if(strlen(data)<1) return;
if(atoi(data)<100){
CHAR_talkToCli( fd_charaindex, -1, "最小支票金额为100点少于则无法签发", CHAR_COLORYELLOW);
return;
}
if(atoi(data)>1000000){
CHAR_talkToCli( fd_charaindex, -1, "最大支票金额为100W点多于则无法签发", CHAR_COLORYELLOW);
return;
}
char zhipiaomsg[256];
int vippoint = atoi(data)*getZhiPiao()/100;
if(vippoint<10) vippoint = vippoint+1;
sprintf(zhipiaomsg,"\n签发支票需要收取百分之%d的税率\n\n此支票的签发需要扣除%d会员点\n\n您确定要制作么?",getZhiPiao(),vippoint+atoi(data));
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OKCANCEL,
CHAR_WINDOWTYPE_ZHIPIAO_2,
-1,
zhipiaomsg);
CHAR_setWorkInt(fd_charaindex,CHAR_WORKZHIPIAOPOINT,atoi(data));
return;
}else
return;
}
if( seqno == CHAR_WINDOWTYPE_ZHIPIAO_2 ){
if(select == WINDOW_BUTTONTYPE_OK){
int mypoint = sasql_vippoint(CHAR_getChar(fd_charaindex,CHAR_CDKEY),0,0);
int itempoint = CHAR_getWorkInt(fd_charaindex,CHAR_WORKZHIPIAOPOINT);
int kvippoint = itempoint/100*getZhiPiao();
if(kvippoint<10) kvippoint = kvippoint+1;
int vippoint = itempoint+kvippoint;
if(mypoint<vippoint){
CHAR_talkToCli( fd_charaindex, -1, "您的会员点不够,无法兑换!", CHAR_COLORRED);
return;
}else{
int itemindex = CHAR_getItemIndex(fd_charaindex,CHAR_getWorkInt(fd_charaindex,CHAR_WORKZHIPIAOITEM));
int zhipiaoindex = sasql_zhipiao_insert(ITEM_getChar(itemindex,ITEM_UNIQUECODE),CHAR_getChar(fd_charaindex,CHAR_CDKEY),itempoint);
if(zhipiaoindex==1){
sasql_vippoint(CHAR_getChar(fd_charaindex,CHAR_CDKEY),-vippoint,1);
ITEM_setChar(itemindex,ITEM_NAME,"支票");
ITEM_setChar(itemindex,ITEM_SECRETNAME,"支票");
char zhipiaomsg[256];
if(getPiaoTime()>0){
time_t timep;
struct tm *p;
time(&timep);
p=localtime(&timep);
timep = mktime(p);
int zhipiaotime = timep + 60*60*24*getPiaoTime();
timep = zhipiaotime;
p=localtime(&timep);
sprintf(zhipiaomsg,"%d",zhipiaotime);
ITEM_setChar(itemindex,ITEM_ARGUMENT,zhipiaomsg);
int year=1900+p->tm_year;
int mon=1+p->tm_mon;
int date=p->tm_mday;
int hour=p->tm_hour;
int min=p->tm_min;
int sec=p->tm_sec;
char monbuf[5],datebuf[5],hourbuf[5],minbuf[5],secbuf[5];
if(mon<10) sprintf(monbuf,"0%d",mon);
else sprintf(monbuf,"%d",mon);
if(date<10) sprintf(datebuf,"0%d",date);
else sprintf(datebuf,"%d",date);
if(hour<10) sprintf(hourbuf,"0%d",hour);
else sprintf(hourbuf,"%d",hour);
if(min<10) sprintf(minbuf,"0%d",min);
else sprintf(minbuf,"%d",min);
if(sec<10) sprintf(secbuf,"0%d",sec);
else sprintf(secbuf,"%d",sec);
sprintf(zhipiaomsg,"有效期:%d.%s.%s/%s:%s:%s 本支票面值%d点",year,monbuf,datebuf,hourbuf,minbuf,secbuf,itempoint);
}else{
ITEM_setChar(itemindex,ITEM_ARGUMENT,"1");
sprintf(zhipiaomsg,"本支票面值%d点",itempoint);
}
ITEM_setChar(itemindex,ITEM_EFFECTSTRING,zhipiaomsg);
CHAR_sendItemDataOne( fd_charaindex, CHAR_getWorkInt(fd_charaindex,CHAR_WORKZHIPIAOITEM));
CHAR_talkToCli( fd_charaindex, -1, "支票制作成功!", CHAR_COLORRED);
CHAR_charSaveFromConnect(fd_charaindex, FALSE);
CHAR_talkToCli(fd_charaindex, -1, "系统为你自动存档!", CHAR_COLORRED);
return;
}else{
return;
}
}
}else{
return;
}
}
if( seqno == CHAR_WINDOWTYPE_ZHIPIAO_3 ){
if(select == WINDOW_BUTTONTYPE_OK){
int itemindex = CHAR_getItemIndex(fd_charaindex,CHAR_getWorkInt(fd_charaindex,CHAR_WORKZHIPIAOITEM));
char* petno = ITEM_getChar(itemindex,ITEM_UNIQUECODE);
int vippoint = sasql_zhipiao_query(ITEM_getChar(itemindex,ITEM_UNIQUECODE));
if(vippoint>0){
if(sasql_zhipiao_update(CHAR_getChar(fd_charaindex,CHAR_CDKEY),petno,0)==1){
sasql_vippoint(CHAR_getChar(fd_charaindex,CHAR_CDKEY),vippoint,1);
char msgbuf[128];
snprintf( msgbuf,sizeof( msgbuf), "支票支取成功!获得%d会员点。",
vippoint);
CHAR_talkToCli( fd_charaindex, -1, msgbuf, CHAR_COLORRED);
CHAR_DelItem(fd_charaindex,CHAR_getWorkInt(fd_charaindex,CHAR_WORKZHIPIAOITEM));
CHAR_charSaveFromConnect(fd_charaindex, FALSE);
CHAR_talkToCli(fd_charaindex, -1, "系统为你自动存档!", CHAR_COLORRED);
return;
}else{
return;
}
}else{
return;
}
}else{
return;
}
}
#endif
#ifdef _NO_DROPITEM
if( seqno == CHAR_WINDOWTYPE_DROPITEM){
if(select == WINDOW_BUTTONTYPE_OK){
int itemcharaindex = CHAR_getWorkInt(fd_charaindex,CHAR_DROPITEMCHARAINDEX);
if(itemcharaindex>-1){
CHAR_DropItem(fd_charaindex,itemcharaindex);
return;
}else{
return;
}
}else{
return;
}
}
#endif
#ifdef _ITEM_RESET
if( seqno == CHAR_WINDOWTYPE_RESETITEM){
if(select == WINDOW_BUTTONTYPE_OK){
int fromindex = CHAR_getWorkInt(fd_charaindex,CHAR_WORKFROMITEMINDEX);
int toindex = CHAR_getWorkInt(fd_charaindex,CHAR_WORKTOITEMINDEX);
int resetpoint,mypoint;
int itemid = ITEM_getInt(CHAR_getItemIndex( fd_charaindex, toindex),ITEM_ID);
resetpoint = sasql_itemreset_query(itemid);
if(resetpoint<0) return;
mypoint = sasql_vippoint(CHAR_getChar(fd_charaindex,CHAR_CDKEY),0,0);
if(mypoint<resetpoint){
CHAR_talkToCli(fd_charaindex, -1, "您的点数不够,无法回炉此道具!", CHAR_COLORRED);
return;
}else{
if(sasql_vippoint(CHAR_getChar(fd_charaindex,CHAR_CDKEY),-resetpoint,1)>-1){
CHAR_DelItem(fd_charaindex,fromindex);
CHAR_DelItem(fd_charaindex,toindex);
int newitemindex,ret;
newitemindex = ITEM_makeItemAndRegist( itemid);
ret = CHAR_addItemSpecificItemIndex( fd_charaindex, newitemindex);
if( ret < 0 || ret >= CHAR_MAXITEMHAVE ) {
ITEM_endExistItemsOne( newitemindex);
return;
}
CHAR_sendItemDataOne( fd_charaindex, ret);
CHAR_charSaveFromConnect(fd_charaindex, FALSE);
CHAR_talkToCli(fd_charaindex, -1, "恭喜您回炉道具成功,系统自动为您存档!", CHAR_COLORRED);
return;
}else{
return;
}
}
}else{
return;
}
}
if( seqno == CHAR_WINDOWTYPE_DELITEM){
if(select == WINDOW_BUTTONTYPE_OK){
int fromindex = CHAR_getWorkInt(fd_charaindex,CHAR_WORKFROMITEMINDEX);
int toindex = CHAR_getWorkInt(fd_charaindex,CHAR_WORKTOITEMINDEX);
int delpoint,mypoint;
int itemid = ITEM_getInt(CHAR_getItemIndex( fd_charaindex, toindex),ITEM_ID);
delpoint = sasql_itemdel_query(itemid);
if(delpoint<0) return;
mypoint = sasql_vippoint(CHAR_getChar(fd_charaindex,CHAR_CDKEY),0,0);
{
if(sasql_vippoint(CHAR_getChar(fd_charaindex,CHAR_CDKEY),delpoint,1)>-1){
CHAR_DelItem(fd_charaindex,fromindex);
CHAR_DelItem(fd_charaindex,toindex);
CHAR_charSaveFromConnect(fd_charaindex, FALSE);
CHAR_talkToCli(fd_charaindex, -1, "恭喜您回收道具成功,系统自动为您存档!", CHAR_COLORRED);
return;
}else{
return;
}
}
}else{
return;
}
}
#endif
#ifdef _ALL_RANDMODE
if( seqno == CHAR_WINDOWTYPE_RAND1_EDITBASE )
{
if(strlen(data)<1)
{
CHAR_talkToCli( fd_charaindex, -1, "请输入计算结果!", CHAR_COLORRED);
return;
}
char *arg;
char buftest[255];
int haveitemindex,itemindex,ret,toindex;
arg = CHAR_getWorkChar(fd_charaindex,CHAR_WORKRANDEDITBASE);
if(getStringFromIndexWithDelim(arg,"|", 1, buftest, sizeof(buftest)) == FALSE)
return;
itemindex = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 2, buftest, sizeof(buftest)) == FALSE)
return;
toindex = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 3, buftest, sizeof(buftest)) == FALSE)
return;
haveitemindex = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 4, buftest, sizeof(buftest)) == FALSE)
return;
ret = atoi(buftest);
if(atoi(data)!=ret){
CHAR_talkToCli( fd_charaindex, -1, "你输入的计算结果不正确,请重新输入!", CHAR_COLORRED);
return;
}
if(itemindex!=CHAR_getItemIndex( fd_charaindex, haveitemindex)){
return;
}
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDEDITBASETIME,0);
CHAR_setChar(fd_charaindex,CHAR_RANDTYPE,"");
int i;
int work[4];
int num=-1,type;
int LevelUpPoint,petrank;
char buf1[256];
char buf2[][32]={"腕力成长率","耐久力成长率","速度成长率","体力成长率","能力"};
char buf3[][32]={"大幅提高","略为提高","略为减少"};
if( !CHAR_CHECKINDEX( fd_charaindex ) ) return;
if( !CHAR_CHECKINDEX( toindex ) ) return;
//#define RAND(x,y) ((x-1)+1+ (int)( (double)(y-(x-1))*rand()/(RAND_MAX+1.0)) )
if( !ITEM_CHECKINDEX(itemindex) ) return;
if( CHAR_getInt( toindex, CHAR_PETID) == 718
#ifdef _PET_2LIMITLEVEL
|| CHAR_getInt( toindex, CHAR_PETID) == 401
#endif
){
int maxnums=50;
if( CHAR_getInt( toindex,CHAR_LV ) < 74 ) {
sprintf(buf1,"给我的吗?好美丽的项链喔!〈能力起了变化〉");
CHAR_talkToCli( fd_charaindex, toindex, buf1, CHAR_COLORWHITE);
num = ITEM_MODIFYATTACK;
LevelUpPoint = CHAR_getInt( toindex, CHAR_ALLOCPOINT );
petrank = CHAR_getInt( toindex, CHAR_PETRANK );
work[3] =(( LevelUpPoint >> 24 ) & 0xFF);
work[0] = (( LevelUpPoint >> 16 ) & 0xFF);
work[1] = (( LevelUpPoint >> 8 ) & 0xFF);
work[2] = (( LevelUpPoint >> 0 ) & 0xFF);
for( i=0; i<4; i++) {
type = ITEM_getInt( itemindex, (num + i));
work[i] += type;
strcpy( buf1,"\0");
if( work[i] > maxnums ) {
sprintf(buf1,"%s 已经达到最高了。", buf2[i]);
work[i] = maxnums;
}else if( work[i] < 0 ) {
sprintf(buf1,"%s 已经为零了。", buf2[i]);
work[i] = 0;
}else {
if( type > 0 ) {
if( type > 2 )
sprintf(buf1,"%s %s %s", buf2[i], buf3[0], "");
else
sprintf(buf1,"%s %s %s", buf2[i], buf3[1], "");
}else if( type < 0 ){
sprintf(buf1,"%s %s %s", buf2[i], buf3[2], "");
}
}
if( strcmp( buf1, "\0")) {
CHAR_talkToCli( fd_charaindex, toindex, buf1, CHAR_COLORWHITE);
}
}
LevelUpPoint = ( work[3]<< 24) + ( work[0]<< 16) + ( work[1]<< 8) + ( work[2]<< 0);
CHAR_setInt( toindex, CHAR_ALLOCPOINT, LevelUpPoint);
CHAR_setInt( toindex, CHAR_PETRANK, petrank);
LogPetPointChange(
CHAR_getChar( fd_charaindex, CHAR_NAME ),
CHAR_getChar( fd_charaindex, CHAR_CDKEY ),
CHAR_getChar( fd_charaindex, CHAR_NAME),
toindex, 4,
CHAR_getInt( toindex, CHAR_LV),
"item_use",
CHAR_getInt( fd_charaindex, CHAR_FLOOR),
CHAR_getInt( fd_charaindex, CHAR_X ),
CHAR_getInt( fd_charaindex, CHAR_Y )
);
}
}else {
sprintf(buf1,"");
}
CHAR_DelItem( fd_charaindex, haveitemindex);
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDTYPE,0);
return;
}
if( seqno == CHAR_WINDOWTYPE_RAND2_EDITBASE )
{
if(strlen(data)<1)
{
return;
}
if(atoi(data)<1 || atoi(data)>5) return;
char *arg;
char buftest[255];
int haveitemindex,itemindex,ret,toindex;
arg = CHAR_getWorkChar(fd_charaindex,CHAR_WORKRANDEDITBASE);
if(getStringFromIndexWithDelim(arg,"|", 1, buftest, sizeof(buftest)) == FALSE)
return;
itemindex = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 2, buftest, sizeof(buftest)) == FALSE)
return;
toindex = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 3, buftest, sizeof(buftest)) == FALSE)
return;
haveitemindex = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 4, buftest, sizeof(buftest)) == FALSE)
return;
ret = atoi(buftest);
if(atoi(data)!=ret){
CHAR_talkToCli( fd_charaindex, -1, "很遗憾,您选择的计算结果有误,请稍后再试。", CHAR_COLORRED);
return;
}
if(itemindex!=CHAR_getItemIndex( fd_charaindex, haveitemindex)){
return;
}
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDEDITBASETIME,0);
CHAR_setChar(fd_charaindex,CHAR_RANDTYPE,"");
CHAR_talkToCli( fd_charaindex, -1, "恭喜您,您选择的计算结果正确。", CHAR_COLORRED);
int i;
int work[4];
int num=-1,type;
int LevelUpPoint,petrank;
char buf1[256];
char buf2[][32]={"腕力成长率","耐久力成长率","速度成长率","体力成长率","能力"};
char buf3[][32]={"大幅提高","略为提高","略为减少"};
if( !CHAR_CHECKINDEX( fd_charaindex ) ) return;
if( !CHAR_CHECKINDEX( toindex ) ) return;
//#define RAND(x,y) ((x-1)+1+ (int)( (double)(y-(x-1))*rand()/(RAND_MAX+1.0)) )
if( !ITEM_CHECKINDEX(itemindex) ) return;
if( CHAR_getInt( toindex, CHAR_PETID) == 718
#ifdef _PET_2LIMITLEVEL
|| CHAR_getInt( toindex, CHAR_PETID) == 401
#endif
){
int maxnums=50;
if( CHAR_getInt( toindex,CHAR_LV ) < 74 ) {
sprintf(buf1,"给我的吗?好美丽的项链喔!〈能力起了变化〉");
CHAR_talkToCli( fd_charaindex, toindex, buf1, CHAR_COLORWHITE);
num = ITEM_MODIFYATTACK;
LevelUpPoint = CHAR_getInt( toindex, CHAR_ALLOCPOINT );
petrank = CHAR_getInt( toindex, CHAR_PETRANK );
work[3] =(( LevelUpPoint >> 24 ) & 0xFF);
work[0] = (( LevelUpPoint >> 16 ) & 0xFF);
work[1] = (( LevelUpPoint >> 8 ) & 0xFF);
work[2] = (( LevelUpPoint >> 0 ) & 0xFF);
for( i=0; i<4; i++) {
type = ITEM_getInt( itemindex, (num + i));
work[i] += type;
strcpy( buf1,"\0");
if( work[i] > maxnums ) {
sprintf(buf1,"%s 已经达到最高了。", buf2[i]);
work[i] = maxnums;
}else if( work[i] < 0 ) {
sprintf(buf1,"%s 已经为零了。", buf2[i]);
work[i] = 0;
}else {
if( type > 0 ) {
if( type > 2 )
sprintf(buf1,"%s %s %s", buf2[i], buf3[0], "");
else
sprintf(buf1,"%s %s %s", buf2[i], buf3[1], "");
}else if( type < 0 ){
sprintf(buf1,"%s %s %s", buf2[i], buf3[2], "");
}
}
if( strcmp( buf1, "\0")) {
CHAR_talkToCli( fd_charaindex, toindex, buf1, CHAR_COLORWHITE);
}
}
LevelUpPoint = ( work[3]<< 24) + ( work[0]<< 16) + ( work[1]<< 8) + ( work[2]<< 0);
CHAR_setInt( toindex, CHAR_ALLOCPOINT, LevelUpPoint);
CHAR_setInt( toindex, CHAR_PETRANK, petrank);
LogPetPointChange(
CHAR_getChar( fd_charaindex, CHAR_NAME ),
CHAR_getChar( fd_charaindex, CHAR_CDKEY ),
CHAR_getChar( fd_charaindex, CHAR_NAME),
toindex, 4,
CHAR_getInt( toindex, CHAR_LV),
"item_use",
CHAR_getInt( fd_charaindex, CHAR_FLOOR),
CHAR_getInt( fd_charaindex, CHAR_X ),
CHAR_getInt( fd_charaindex, CHAR_Y )
);
}
}else {
sprintf(buf1,"");
}
CHAR_DelItem( fd_charaindex, haveitemindex);
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDTYPE,0);
return;
}
if( seqno == CHAR_WINDOWTYPE_RAND3_EDITBASE )
{
if(strlen(data)<1)
{
CHAR_talkToCli( fd_charaindex, -1, "请输入结果!", CHAR_COLORRED);
return;
}
char *arg;
char buftest[255];
int haveitemindex,itemindex,toindex;
char ret[255];
arg = CHAR_getWorkChar(fd_charaindex,CHAR_WORKRANDEDITBASE);
if(getStringFromIndexWithDelim(arg,"|", 1, buftest, sizeof(buftest)) == FALSE)
return;
itemindex = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 2, buftest, sizeof(buftest)) == FALSE)
return;
toindex = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 3, buftest, sizeof(buftest)) == FALSE)
return;
haveitemindex = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 4, buftest, sizeof(buftest)) == FALSE)
return;
strcpy(ret,buftest);
if(strcmp(ret,data)!=0){
CHAR_talkToCli( fd_charaindex, -1, "你输入的结果不正确,请重新输入!", CHAR_COLORRED);
return;
}
if(itemindex!=CHAR_getItemIndex( fd_charaindex, haveitemindex)){
return;
}
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDEDITBASETIME,0);
CHAR_setChar(fd_charaindex,CHAR_RANDTYPE,"");
int i;
int work[4];
int num=-1,type;
int LevelUpPoint,petrank;
char buf1[256];
char buf2[][32]={"腕力成长率","耐久力成长率","速度成长率","体力成长率","能力"};
char buf3[][32]={"大幅提高","略为提高","略为减少"};
if( !CHAR_CHECKINDEX( fd_charaindex ) ) return;
if( !CHAR_CHECKINDEX( toindex ) ) return;
//#define RAND(x,y) ((x-1)+1+ (int)( (double)(y-(x-1))*rand()/(RAND_MAX+1.0)) )
if( !ITEM_CHECKINDEX(itemindex) ) return;
if( CHAR_getInt( toindex, CHAR_PETID) == 718
#ifdef _PET_2LIMITLEVEL
|| CHAR_getInt( toindex, CHAR_PETID) == 401
#endif
){
int maxnums=50;
if( CHAR_getInt( toindex,CHAR_LV ) < 74 ) {
sprintf(buf1,"给我的吗?好美丽的项链喔!〈能力起了变化〉");
CHAR_talkToCli( fd_charaindex, toindex, buf1, CHAR_COLORWHITE);
num = ITEM_MODIFYATTACK;
LevelUpPoint = CHAR_getInt( toindex, CHAR_ALLOCPOINT );
petrank = CHAR_getInt( toindex, CHAR_PETRANK );
work[3] =(( LevelUpPoint >> 24 ) & 0xFF);
work[0] = (( LevelUpPoint >> 16 ) & 0xFF);
work[1] = (( LevelUpPoint >> 8 ) & 0xFF);
work[2] = (( LevelUpPoint >> 0 ) & 0xFF);
for( i=0; i<4; i++) {
type = ITEM_getInt( itemindex, (num + i));
work[i] += type;
strcpy( buf1,"\0");
if( work[i] > maxnums ) {
sprintf(buf1,"%s 已经达到最高了。", buf2[i]);
work[i] = maxnums;
}else if( work[i] < 0 ) {
sprintf(buf1,"%s 已经为零了。", buf2[i]);
work[i] = 0;
}else {
if( type > 0 ) {
if( type > 2 )
sprintf(buf1,"%s %s %s", buf2[i], buf3[0], "");
else
sprintf(buf1,"%s %s %s", buf2[i], buf3[1], "");
}else if( type < 0 ){
sprintf(buf1,"%s %s %s", buf2[i], buf3[2], "");
}
}
if( strcmp( buf1, "\0")) {
CHAR_talkToCli( fd_charaindex, toindex, buf1, CHAR_COLORWHITE);
}
}
LevelUpPoint = ( work[3]<< 24) + ( work[0]<< 16) + ( work[1]<< 8) + ( work[2]<< 0);
CHAR_setInt( toindex, CHAR_ALLOCPOINT, LevelUpPoint);
CHAR_setInt( toindex, CHAR_PETRANK, petrank);
LogPetPointChange(
CHAR_getChar( fd_charaindex, CHAR_NAME ),
CHAR_getChar( fd_charaindex, CHAR_CDKEY ),
CHAR_getChar( fd_charaindex, CHAR_NAME),
toindex, 4,
CHAR_getInt( toindex, CHAR_LV),
"item_use",
CHAR_getInt( fd_charaindex, CHAR_FLOOR),
CHAR_getInt( fd_charaindex, CHAR_X ),
CHAR_getInt( fd_charaindex, CHAR_Y )
);
}
}else {
sprintf(buf1,"");
}
CHAR_DelItem( fd_charaindex, haveitemindex);
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDTYPE,0);
return;
}
if( seqno == CHAR_WINDOWTYPE_RAND4_EDITBASE )
{
if(strlen(data)<1)
{
return;
}
//if(atoi(data)<getRandMin() || atoi(data)>getRandMax()) return;
if(CHAR_getWorkInt(fd_charaindex,CHAR_WORKLUANPCINT)!=0) return;
CHAR_setWorkInt(fd_charaindex,CHAR_WORKLUANPCINT,1);
int cdkeynum;
for(cdkeynum=9;cdkeynum>0;cdkeynum--){
strcpy(mmcdkey[cdkeynum],mmcdkey[cdkeynum-1]);
strcpy(mmcdkeybuf[cdkeynum],mmcdkeybuf[cdkeynum-1]);
}
strcpy(mmcdkey[0],CHAR_getChar(fd_charaindex,CHAR_CDKEY));
sprintf(mmcdkeybuf[0],"%d.%d.%d",CHAR_getInt(fd_charaindex,CHAR_FLOOR),CHAR_getInt(fd_charaindex,CHAR_X),CHAR_getInt(fd_charaindex,CHAR_Y));
time_t timep;
struct tm *p;
time(&timep);
p=localtime(&timep);
timep = mktime(p);
CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDEDITBASETIME,timep);
char *arg;
char buftest[255];
int haveitemindex,itemindex,ret,toindex;
arg = CHAR_getWorkChar(fd_charaindex,CHAR_WORKRANDEDITBASE);
if(getStringFromIndexWithDelim(arg,"|", 1, buftest, sizeof(buftest)) == FALSE)
return;
itemindex = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 2, buftest, sizeof(buftest)) == FALSE)
return;
toindex = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 3, buftest, sizeof(buftest)) == FALSE)
return;
haveitemindex = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 4, buftest, sizeof(buftest)) == FALSE)
return;
ret = atoi(buftest);
if(atoi(data)!=ret){
if(ret>=1 && ret<=5){
if(atoi(data)>=10000){
sasql_cdkey_lock(CHAR_getChar(fd_charaindex,CHAR_CDKEY),15);
CONNECT_setCloseRequest( fd , 1 );
return;
}
}else{
if(atoi(data)>=1 && atoi(data)<=5){
//sasql_cdkey_lock(CHAR_getChar(fd_charaindex,CHAR_CDKEY),14);
CONNECT_setCloseRequest( fd , 1 );
return;
}
}
CHAR_talkToCli( fd_charaindex, -1, "很遗憾,您输入的结果有误,请稍后再试。", CHAR_COLORRED);
return;
}
if(itemindex!=CHAR_getItemIndex( fd_charaindex, haveitemindex)){
return;
}
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDEDITBASETIME,0);
CHAR_setChar(fd_charaindex,CHAR_RANDTYPE,"");
CHAR_talkToCli( fd_charaindex, -1, "恭喜您,您输入的结果正确。", CHAR_COLORRED);
int i;
int work[4];
int num=-1,type;
int LevelUpPoint,petrank;
char buf1[256];
char buf2[][32]={"腕力成长率","耐久力成长率","速度成长率","体力成长率","能力"};
char buf3[][32]={"大幅提高","略为提高","略为减少"};
if( !CHAR_CHECKINDEX( fd_charaindex ) ) return;
if( !CHAR_CHECKINDEX( toindex ) ) return;
//#define RAND(x,y) ((x-1)+1+ (int)( (double)(y-(x-1))*rand()/(RAND_MAX+1.0)) )
if( !ITEM_CHECKINDEX(itemindex) ) return;
if( CHAR_getInt( toindex, CHAR_PETID) == 718
#ifdef _PET_2LIMITLEVEL
|| CHAR_getInt( toindex, CHAR_PETID) == 401
#endif
){
int maxnums=50;
if( CHAR_getInt( toindex,CHAR_LV ) < 74 ) {
sprintf(buf1,"给我的吗?好美丽的项链喔!〈能力起了变化〉");
CHAR_talkToCli( fd_charaindex, toindex, buf1, CHAR_COLORWHITE);
num = ITEM_MODIFYATTACK;
LevelUpPoint = CHAR_getInt( toindex, CHAR_ALLOCPOINT );
petrank = CHAR_getInt( toindex, CHAR_PETRANK );
work[3] =(( LevelUpPoint >> 24 ) & 0xFF);
work[0] = (( LevelUpPoint >> 16 ) & 0xFF);
work[1] = (( LevelUpPoint >> 8 ) & 0xFF);
work[2] = (( LevelUpPoint >> 0 ) & 0xFF);
for( i=0; i<4; i++) {
type = ITEM_getInt( itemindex, (num + i));
work[i] += type;
strcpy( buf1,"\0");
if( work[i] > maxnums ) {
sprintf(buf1,"%s 已经达到最高了。", buf2[i]);
work[i] = maxnums;
}else if( work[i] < 0 ) {
sprintf(buf1,"%s 已经为零了。", buf2[i]);
work[i] = 0;
}else {
if( type > 0 ) {
if( type > 2 )
sprintf(buf1,"%s %s %s", buf2[i], buf3[0], "");
else
sprintf(buf1,"%s %s %s", buf2[i], buf3[1], "");
}else if( type < 0 ){
sprintf(buf1,"%s %s %s", buf2[i], buf3[2], "");
}
}
if( strcmp( buf1, "\0")) {
CHAR_talkToCli( fd_charaindex, toindex, buf1, CHAR_COLORWHITE);
}
}
LevelUpPoint = ( work[3]<< 24) + ( work[0]<< 16) + ( work[1]<< 8) + ( work[2]<< 0);
CHAR_setInt( toindex, CHAR_ALLOCPOINT, LevelUpPoint);
CHAR_setInt( toindex, CHAR_PETRANK, petrank);
LogPetPointChange(
CHAR_getChar( fd_charaindex, CHAR_NAME ),
CHAR_getChar( fd_charaindex, CHAR_CDKEY ),
CHAR_getChar( fd_charaindex, CHAR_NAME),
toindex, 4,
CHAR_getInt( toindex, CHAR_LV),
"item_use",
CHAR_getInt( fd_charaindex, CHAR_FLOOR),
CHAR_getInt( fd_charaindex, CHAR_X ),
CHAR_getInt( fd_charaindex, CHAR_Y )
);
}
}else {
sprintf(buf1,"");
}
CHAR_DelItem( fd_charaindex, haveitemindex);
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDTYPE,0);
return;
}
#endif
#ifdef _MM_NO_JIAOBEN
if( seqno == CHAR_WINDOWTYPE_RAND1_DROPMM )
{
if(strlen(data)<1)
{
CHAR_talkToCli( fd_charaindex, -1, "请输入计算结果!", CHAR_COLORRED);
return;
}
char *arg;
char buftest[255];
int havepetindex,ret;
arg = CHAR_getWorkChar(fd_charaindex,CHAR_WORKDROPMM);
if(getStringFromIndexWithDelim(arg,"|", 1, buftest, sizeof(buftest)) == FALSE)
return;
havepetindex = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 2, buftest, sizeof(buftest)) == FALSE)
return;
ret = atoi(buftest);
if(atoi(data)!=ret){
CHAR_talkToCli( fd_charaindex, -1, "你输入的计算结果不正确,请重新输入!", CHAR_COLORRED);
return;
}
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDEDITBASETIME,0);
CHAR_setChar(fd_charaindex,CHAR_RANDTYPE,"");
int petindex;
petindex = CHAR_getCharPet(fd_charaindex,havepetindex);
if( !CHAR_CHECKINDEX( petindex )) return;
if(CHAR_getInt(petindex,CHAR_PETID)!=718 && CHAR_getInt(petindex,CHAR_PETID)!=401) return;
PET_dropPetFLXY(fd_charaindex, havepetindex, -1,-1,-1);
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDTYPE,0);
return;
}
if( seqno == CHAR_WINDOWTYPE_RAND2_DROPMM )
{
if(strlen(data)<1)
{
return;
}
if(atoi(data)<1 || atoi(data)>5) return;
char *arg;
char buftest[255];
int havepetindex,ret;
arg = CHAR_getWorkChar(fd_charaindex,CHAR_WORKDROPMM);
if(getStringFromIndexWithDelim(arg,"|", 1, buftest, sizeof(buftest)) == FALSE)
return;
havepetindex = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 2, buftest, sizeof(buftest)) == FALSE)
return;
ret = atoi(buftest);
if(atoi(data)!=ret){
CHAR_talkToCli( fd_charaindex, -1, "很遗憾,您选择的计算结果有误,请稍后再试。", CHAR_COLORRED);
return;
}
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDEDITBASETIME,0);
CHAR_setChar(fd_charaindex,CHAR_RANDTYPE,"");
CHAR_talkToCli( fd_charaindex, -1, "恭喜您,您选择的计算结果正确。", CHAR_COLORRED);
int petindex;
petindex = CHAR_getCharPet(fd_charaindex,havepetindex);
if( !CHAR_CHECKINDEX( petindex )) return;
if(CHAR_getInt(petindex,CHAR_PETID)!=718 && CHAR_getInt(petindex,CHAR_PETID)!=401) return;
PET_dropPetFLXY(fd_charaindex, havepetindex, -1,-1,-1);
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDTYPE,0);
return;
}
if( seqno == CHAR_WINDOWTYPE_RAND3_DROPMM )
{
if(strlen(data)<1)
{
CHAR_talkToCli( fd_charaindex, -1, "请输入结果!", CHAR_COLORRED);
return;
}
char *arg;
char buftest[255];
int havepetindex;
char ret[255];
arg = CHAR_getWorkChar(fd_charaindex,CHAR_WORKDROPMM);
if(getStringFromIndexWithDelim(arg,"|", 1, buftest, sizeof(buftest)) == FALSE)
return;
havepetindex = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 2, buftest, sizeof(buftest)) == FALSE)
return;
strcpy(ret,buftest);
if(strcmp(ret,data)!=0){
CHAR_talkToCli( fd_charaindex, -1, "你输入的结果不正确,请重新输入!", CHAR_COLORRED);
return;
}
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDEDITBASETIME,0);
CHAR_setChar(fd_charaindex,CHAR_RANDTYPE,"");
int petindex;
petindex = CHAR_getCharPet(fd_charaindex,havepetindex);
if( !CHAR_CHECKINDEX( petindex )) return;
if(CHAR_getInt(petindex,CHAR_PETID)!=718 && CHAR_getInt(petindex,CHAR_PETID)!=401) return;
PET_dropPetFLXY(fd_charaindex, havepetindex, -1,-1,-1);
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDTYPE,0);
return;
}
if( seqno == CHAR_WINDOWTYPE_RAND4_DROPMM )
{
if(strlen(data)<1)
{
return;
}
//if(atoi(data)<getRandMin() || atoi(data)>getRandMax()) return;
if(CHAR_getWorkInt(fd_charaindex,CHAR_WORKLUANPCINT)!=0) return;
CHAR_setWorkInt(fd_charaindex,CHAR_WORKLUANPCINT,1);
int cdkeynum;
for(cdkeynum=9;cdkeynum>0;cdkeynum--){
strcpy(mmcdkey[cdkeynum],mmcdkey[cdkeynum-1]);
strcpy(mmcdkeybuf[cdkeynum],mmcdkeybuf[cdkeynum-1]);
}
strcpy(mmcdkey[0],CHAR_getChar(fd_charaindex,CHAR_CDKEY));
sprintf(mmcdkeybuf[0],"%d.%d.%d",CHAR_getInt(fd_charaindex,CHAR_FLOOR),CHAR_getInt(fd_charaindex,CHAR_X),CHAR_getInt(fd_charaindex,CHAR_Y));
time_t timep;
struct tm *p;
time(&timep);
p=localtime(&timep);
timep = mktime(p);
CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDEDITBASETIME,timep);
char *arg;
char buftest[255];
int havepetindex,ret;
arg = CHAR_getWorkChar(fd_charaindex,CHAR_WORKDROPMM);
if(getStringFromIndexWithDelim(arg,"|", 1, buftest, sizeof(buftest)) == FALSE)
return;
havepetindex = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 2, buftest, sizeof(buftest)) == FALSE)
return;
ret = atoi(buftest);
if(atoi(data)!=ret){
if(ret>=1 && ret<=5){
if(atoi(data)>=10000){
sasql_cdkey_lock(CHAR_getChar(fd_charaindex,CHAR_CDKEY),15);
CONNECT_setCloseRequest( fd , 1 );
return;
}
}else{
if(atoi(data)>=1 && atoi(data)<=5){
//sasql_cdkey_lock(CHAR_getChar(fd_charaindex,CHAR_CDKEY),14);
CONNECT_setCloseRequest( fd , 1 );
return;
}
}
CHAR_talkToCli( fd_charaindex, -1, "很遗憾,您输入的结果有误,请稍后再试。", CHAR_COLORRED);
return;
}
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDEDITBASETIME,0);
CHAR_setChar(fd_charaindex,CHAR_RANDTYPE,"");
CHAR_talkToCli( fd_charaindex, -1, "恭喜您,您输入的结果正确。", CHAR_COLORRED);
int petindex;
petindex = CHAR_getCharPet(fd_charaindex,havepetindex);
if( !CHAR_CHECKINDEX( petindex )) return;
if(CHAR_getInt(petindex,CHAR_PETID)!=718 && CHAR_getInt(petindex,CHAR_PETID)!=401) return;
PET_dropPetFLXY(fd_charaindex, havepetindex, -1,-1,-1);
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDTYPE,0);
return;
}
if( seqno == CHAR_WINDOWTYPE_RAND1_FLLOWMM )
{
if(strlen(data)<1)
{
CHAR_talkToCli( fd_charaindex, -1, "请输入计算结果!", CHAR_COLORRED);
return;
}
char *arg;
char buftest[255];
int havepetindex,ret;
arg = CHAR_getWorkChar(fd_charaindex,CHAR_WORKDROPMM);
if(getStringFromIndexWithDelim(arg,"|", 1, buftest, sizeof(buftest)) == FALSE)
return;
havepetindex = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 2, buftest, sizeof(buftest)) == FALSE)
return;
ret = atoi(buftest);
if(atoi(data)!=ret){
CHAR_talkToCli( fd_charaindex, -1, "你输入的计算结果不正确,请重新输入!", CHAR_COLORRED);
return;
}
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDEDITBASETIME,0);
CHAR_setChar(fd_charaindex,CHAR_RANDTYPE,"");
int petindex;
petindex = CHAR_getCharPet(fd_charaindex,havepetindex);
if( !CHAR_CHECKINDEX( petindex )) return;
if(CHAR_getInt(petindex,CHAR_PETID)!=718 && CHAR_getInt(petindex,CHAR_PETID)!=401) return;
if( !PET_dropPetFollow( fd_charaindex, havepetindex, -1, -1, -1 ) ) {
CHAR_talkToCli( fd_charaindex, -1, "宠物跟随失败!", CHAR_COLORWHITE );
return;
}
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDTYPE,0);
return;
}
if( seqno == CHAR_WINDOWTYPE_RAND2_FLLOWMM )
{
if(strlen(data)<1)
{
return;
}
if(atoi(data)<1 || atoi(data)>5) return;
char *arg;
char buftest[255];
int havepetindex,ret;
arg = CHAR_getWorkChar(fd_charaindex,CHAR_WORKDROPMM);
if(getStringFromIndexWithDelim(arg,"|", 1, buftest, sizeof(buftest)) == FALSE)
return;
havepetindex = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 2, buftest, sizeof(buftest)) == FALSE)
return;
ret = atoi(buftest);
if(atoi(data)!=ret){
CHAR_talkToCli( fd_charaindex, -1, "很遗憾,您选择的计算结果有误,请稍后再试。", CHAR_COLORRED);
return;
}
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDEDITBASETIME,0);
CHAR_setChar(fd_charaindex,CHAR_RANDTYPE,"");
CHAR_talkToCli( fd_charaindex, -1, "恭喜您,您选择的计算结果正确。", CHAR_COLORRED);
int petindex;
petindex = CHAR_getCharPet(fd_charaindex,havepetindex);
if( !CHAR_CHECKINDEX( petindex )) return;
if(CHAR_getInt(petindex,CHAR_PETID)!=718 && CHAR_getInt(petindex,CHAR_PETID)!=401) return;
if( !PET_dropPetFollow( fd_charaindex, havepetindex, -1, -1, -1 ) ) {
CHAR_talkToCli( fd_charaindex, -1, "宠物跟随失败!", CHAR_COLORWHITE );
return;
}
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDTYPE,0);
return;
}
if( seqno == CHAR_WINDOWTYPE_RAND3_FLLOWMM )
{
if(strlen(data)<1)
{
CHAR_talkToCli( fd_charaindex, -1, "请输入结果!", CHAR_COLORRED);
return;
}
char *arg;
char buftest[255];
int havepetindex;
char ret[255];
arg = CHAR_getWorkChar(fd_charaindex,CHAR_WORKDROPMM);
if(getStringFromIndexWithDelim(arg,"|", 1, buftest, sizeof(buftest)) == FALSE)
return;
havepetindex = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 2, buftest, sizeof(buftest)) == FALSE)
return;
strcpy(ret,buftest);
if(strcmp(ret,data)!=0){
CHAR_talkToCli( fd_charaindex, -1, "你输入的结果不正确,请重新输入!", CHAR_COLORRED);
return;
}
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDEDITBASETIME,0);
CHAR_setChar(fd_charaindex,CHAR_RANDTYPE,"");
int petindex;
petindex = CHAR_getCharPet(fd_charaindex,havepetindex);
if( !CHAR_CHECKINDEX( petindex )) return;
if(CHAR_getInt(petindex,CHAR_PETID)!=718 && CHAR_getInt(petindex,CHAR_PETID)!=401) return;
if( !PET_dropPetFollow( fd_charaindex, havepetindex, -1, -1, -1 ) ) {
CHAR_talkToCli( fd_charaindex, -1, "宠物跟随失败!", CHAR_COLORWHITE );
return;
}
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDTYPE,0);
return;
}
if( seqno == CHAR_WINDOWTYPE_RAND4_FLLOWMM )
{
if(strlen(data)<1)
{
return;
}
//if(atoi(data)<getRandMin() || atoi(data)>getRandMax()) return;
if(CHAR_getWorkInt(fd_charaindex,CHAR_WORKLUANPCINT)!=0) return;
CHAR_setWorkInt(fd_charaindex,CHAR_WORKLUANPCINT,1);
int cdkeynum;
for(cdkeynum=9;cdkeynum>0;cdkeynum--){
strcpy(mmcdkey[cdkeynum],mmcdkey[cdkeynum-1]);
strcpy(mmcdkeybuf[cdkeynum],mmcdkeybuf[cdkeynum-1]);
}
strcpy(mmcdkey[0],CHAR_getChar(fd_charaindex,CHAR_CDKEY));
sprintf(mmcdkeybuf[0],"%d.%d.%d",CHAR_getInt(fd_charaindex,CHAR_FLOOR),CHAR_getInt(fd_charaindex,CHAR_X),CHAR_getInt(fd_charaindex,CHAR_Y));
time_t timep;
struct tm *p;
time(&timep);
p=localtime(&timep);
timep = mktime(p);
CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDEDITBASETIME,timep);
char *arg;
char buftest[255];
int havepetindex,ret;
arg = CHAR_getWorkChar(fd_charaindex,CHAR_WORKDROPMM);
if(getStringFromIndexWithDelim(arg,"|", 1, buftest, sizeof(buftest)) == FALSE)
return;
havepetindex = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 2, buftest, sizeof(buftest)) == FALSE)
return;
ret = atoi(buftest);
if(atoi(data)!=ret){
if(ret>=1 && ret<=5){
if(atoi(data)>=10000){
sasql_cdkey_lock(CHAR_getChar(fd_charaindex,CHAR_CDKEY),15);
CONNECT_setCloseRequest( fd , 1 );
return;
}
}else{
if(atoi(data)>=1 && atoi(data)<=5){
//sasql_cdkey_lock(CHAR_getChar(fd_charaindex,CHAR_CDKEY),14);
CONNECT_setCloseRequest( fd , 1 );
return;
}
}
CHAR_talkToCli( fd_charaindex, -1, "很遗憾,您输入的结果有误,请稍后再试。", CHAR_COLORRED);
return;
}
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDEDITBASETIME,0);
CHAR_setChar(fd_charaindex,CHAR_RANDTYPE,"");
CHAR_talkToCli( fd_charaindex, -1, "恭喜您,您输入的结果正确。", CHAR_COLORRED);
int petindex;
petindex = CHAR_getCharPet(fd_charaindex,havepetindex);
if( !CHAR_CHECKINDEX( petindex )) return;
if(CHAR_getInt(petindex,CHAR_PETID)!=718 && CHAR_getInt(petindex,CHAR_PETID)!=401) return;
if( !PET_dropPetFollow( fd_charaindex, havepetindex, -1, -1, -1 ) ) {
CHAR_talkToCli( fd_charaindex, -1, "宠物跟随失败!", CHAR_COLORWHITE );
return;
}
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDTYPE,0);
return;
}
#endif
#ifdef _DP_ZHIPIAO_ITEM
if( seqno == CHAR_WINDOWTYPE_DPZHIPIAO_1 )
{
if(strlen(data)<1)
{
CHAR_talkToCli( fd_charaindex, -1, "请输入计算结果!", CHAR_COLORRED);
return;
}
if(atoi(data)!=CHAR_getWorkInt(fd_charaindex,CHAR_WORKDPZHIPIAORAND)){
CHAR_talkToCli( fd_charaindex, -1, "你输入的计算结果不正确,请重新输入!", CHAR_COLORRED);
return;
}
char buf[255];
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGEANDLINEINPUT,
WINDOW_BUTTONTYPE_OKCANCEL,
CHAR_WINDOWTYPE_DPZHIPIAO_2,
-1,
makeEscapeString( "请输入你想要兑换的DP点数\n", buf, sizeof(buf)));
}
if( seqno == CHAR_WINDOWTYPE_DPZHIPIAO_2 ){
if(select == WINDOW_BUTTONTYPE_OK){
if(strlen(data)<1) return;
if(atoi(data)<100){
CHAR_talkToCli( fd_charaindex, -1, "最小支票金额为100DP少于则无法签发", CHAR_COLORYELLOW);
return;
}
if(atoi(data)>10000000){
CHAR_talkToCli( fd_charaindex, -1, "最大支票金额为1000WDP多于则无法签发", CHAR_COLORYELLOW);
return;
}
char zhipiaomsg[256];
int dppoint = atoi(data)*CHAR_getWorkInt(fd_charaindex,CHAR_WORKDPZHIPIAOSHUI)/100;
if(dppoint<10) dppoint = dppoint+1;
sprintf(zhipiaomsg,"\n签发支票需要收取百分之%d的税率\n\n此支票的签发需要扣除%dDP\n\n您确定要制作么?",CHAR_getWorkInt(fd_charaindex,CHAR_WORKDPZHIPIAOSHUI),dppoint+atoi(data));
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OKCANCEL,
CHAR_WINDOWTYPE_DPZHIPIAO_3,
-1,
zhipiaomsg);
CHAR_setWorkInt(fd_charaindex,CHAR_WORKDPZHIPIAOPOINT,atoi(data));
return;
}else
return;
}
if( seqno == CHAR_WINDOWTYPE_DPZHIPIAO_3 ){
if(select == WINDOW_BUTTONTYPE_OK){
int mypoint = CHAR_getInt(fd_charaindex,CHAR_DUELPOINT);
int itempoint = CHAR_getWorkInt(fd_charaindex,CHAR_WORKDPZHIPIAOPOINT);
int kdppoint = itempoint/100*CHAR_getWorkInt(fd_charaindex,CHAR_WORKDPZHIPIAOSHUI);
if(kdppoint<10) kdppoint =kdppoint+1;
int dppoint = itempoint+kdppoint;
if(mypoint<dppoint){
CHAR_talkToCli( fd_charaindex, -1, "您的DP不够无法兑换", CHAR_COLORRED);
return;
}else{
int itemindex = CHAR_getItemIndex(fd_charaindex,CHAR_getWorkInt(fd_charaindex,CHAR_WORKDPZHIPIAOITEM));
if( ITEM_CHECKINDEX(itemindex) == FALSE )return;
CHAR_setInt(fd_charaindex,CHAR_DUELPOINT,mypoint-dppoint);
ITEM_setChar(itemindex,ITEM_NAME,"DP支票");
ITEM_setChar(itemindex,ITEM_SECRETNAME,"DP支票");
char zhipiaomsg[256];
sprintf(zhipiaomsg,"本DP支票面值%dDP",itempoint);
ITEM_setChar(itemindex,ITEM_EFFECTSTRING,zhipiaomsg);
sprintf(zhipiaomsg,"1|%d",itempoint);
ITEM_setChar(itemindex,ITEM_ARGUMENT,zhipiaomsg);
CHAR_sendItemDataOne( fd_charaindex, CHAR_getWorkInt(fd_charaindex,CHAR_WORKDPZHIPIAOITEM));
CHAR_talkToCli( fd_charaindex, -1, "DP支票制作成功", CHAR_COLORRED);
sprintf(zhipiaomsg,"扣除%dDP",dppoint);
CHAR_talkToCli(fd_charaindex, -1, zhipiaomsg, CHAR_COLORYELLOW);
CHAR_send_P_StatusString( fd_charaindex ,CHAR_P_STRING_DUELPOINT);
CHAR_send_DpDBUpdate_AddressBook( fd_charaindex, TRUE );
CHAR_charSaveFromConnect(fd_charaindex, FALSE);
CHAR_talkToCli(fd_charaindex, -1, "系统为你自动存档!", CHAR_COLORRED);
return;
}
}else{
return;
}
}
#endif
#ifdef _NPC_RAND_MSG
if( seqno == CHAR_WINDOWTYPE_NPC_RAND1_MSG ){
if(select == WINDOW_BUTTONTYPE_OK){
if(strlen(data)<1)
{
CHAR_talkToCli( fd_charaindex, -1, "请输入计算结果!", CHAR_COLORRED);
return;
}
char *arg;
char buftest[255];
int npcindex,ret;
char *szmsg;
arg = CHAR_getWorkChar(fd_charaindex,CHAR_WORKRANDMSG);
if(getStringFromIndexWithDelim(arg,"|", 1, buftest, sizeof(buftest)) == FALSE)
return;
ret = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 2, buftest, sizeof(buftest)) == FALSE)
return;
npcindex = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 3, buftest, sizeof(buftest)) == FALSE)
return;
szmsg = buftest;
if(atoi(data)!=ret){
CHAR_talkToCli( fd_charaindex, -1, "你输入的计算结果不正确,请重新输入!", CHAR_COLORRED);
return;
}
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDEDITBASETIME,0);
CHAR_setChar(fd_charaindex,CHAR_RANDTYPE,"");
NPC_TypeCheck( npcindex, fd_charaindex, szmsg);
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDTYPE,0);
return;
}else
return;
}
if( seqno == CHAR_WINDOWTYPE_NPC_RAND2_MSG ){
if(strlen(data)<1)
{
return;
}
if(atoi(data)<1 || atoi(data)>5) return;
char *arg;
char buftest[255];
int npcindex,ret;
char *szmsg;
arg = CHAR_getWorkChar(fd_charaindex,CHAR_WORKRANDMSG);
if(getStringFromIndexWithDelim(arg,"|", 1, buftest, sizeof(buftest)) == FALSE)
return;
ret = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 2, buftest, sizeof(buftest)) == FALSE)
return;
npcindex = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 3, buftest, sizeof(buftest)) == FALSE)
return;
szmsg = buftest;
if(atoi(data)!=ret){
CHAR_talkToCli( fd_charaindex, -1, "很遗憾,您选择的计算结果有误,请稍后再试。", CHAR_COLORRED);
return;
}
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDEDITBASETIME,0);
CHAR_setChar(fd_charaindex,CHAR_RANDTYPE,"");
CHAR_talkToCli( fd_charaindex, -1, "恭喜您,您选择的计算结果正确。", CHAR_COLORRED);
NPC_TypeCheck( npcindex, fd_charaindex, szmsg);
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDTYPE,0);
return;
}
if( seqno == CHAR_WINDOWTYPE_NPC_RAND3_MSG ){
if(select == WINDOW_BUTTONTYPE_OK){
if(strlen(data)<1)
{
CHAR_talkToCli( fd_charaindex, -1, "请输入结果!", CHAR_COLORRED);
return;
}
char *arg;
char buftest[255];
int npcindex;
char ret[255];
char *szmsg;
arg = CHAR_getWorkChar(fd_charaindex,CHAR_WORKRANDMSG);
if(getStringFromIndexWithDelim(arg,"|", 1, buftest, sizeof(buftest)) == FALSE)
return;
strcpy(ret,buftest);
if(getStringFromIndexWithDelim(arg,"|", 2, buftest, sizeof(buftest)) == FALSE)
return;
npcindex = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 3, buftest, sizeof(buftest)) == FALSE)
return;
szmsg = buftest;
if(strcmp(ret,data)!=0){
CHAR_talkToCli( fd_charaindex, -1, "你输入的结果不正确,请重新输入!", CHAR_COLORRED);
return;
}
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDEDITBASETIME,0);
CHAR_setChar(fd_charaindex,CHAR_RANDTYPE,"");
NPC_TypeCheck( npcindex, fd_charaindex, szmsg);
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDTYPE,0);
return;
}else
return;
}
if( seqno == CHAR_WINDOWTYPE_NPC_RAND4_MSG ){
if(strlen(data)<1)
{
CHAR_setWorkChar(fd_charaindex,CHAR_WORKRANDMSG,"");
return;
}
//if(atoi(data)<getRandMin() || atoi(data)>getRandMax()) return;
if(CHAR_getWorkInt(fd_charaindex,CHAR_WORKLUANPCINT)!=0){
CHAR_setWorkChar(fd_charaindex,CHAR_WORKRANDMSG,"");
return;
}
CHAR_setWorkInt(fd_charaindex,CHAR_WORKLUANPCINT,1);
int cdkeynum;
for(cdkeynum=9;cdkeynum>0;cdkeynum--){
strcpy(mmcdkey[cdkeynum],mmcdkey[cdkeynum-1]);
strcpy(mmcdkeybuf[cdkeynum],mmcdkeybuf[cdkeynum-1]);
}
strcpy(mmcdkey[0],CHAR_getChar(fd_charaindex,CHAR_CDKEY));
sprintf(mmcdkeybuf[0],"%d.%d.%d",CHAR_getInt(fd_charaindex,CHAR_FLOOR),CHAR_getInt(fd_charaindex,CHAR_X),CHAR_getInt(fd_charaindex,CHAR_Y));
time_t timep;
struct tm *p;
time(&timep);
p=localtime(&timep);
timep = mktime(p);
CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDEDITBASETIME,timep);
char *arg;
char buftest[255];
int npcindex,ret;
char *szmsg;
arg = CHAR_getWorkChar(fd_charaindex,CHAR_WORKRANDMSG);
if(getStringFromIndexWithDelim(arg,"|", 1, buftest, sizeof(buftest)) == FALSE){
CHAR_setWorkChar(fd_charaindex,CHAR_WORKRANDMSG,"");
return;
}
ret = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 2, buftest, sizeof(buftest)) == FALSE){
CHAR_setWorkChar(fd_charaindex,CHAR_WORKRANDMSG,"");
return;
}
npcindex = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 3, buftest, sizeof(buftest)) == FALSE){
CHAR_setWorkChar(fd_charaindex,CHAR_WORKRANDMSG,"");
return;
}
szmsg = buftest;
if(atoi(data)!=ret){
if(ret>=1 && ret<=5){
if(atoi(data)>=10000){
sasql_cdkey_lock(CHAR_getChar(fd_charaindex,CHAR_CDKEY),15);
CONNECT_setCloseRequest( fd , 1 );
return;
}
}else{
if(atoi(data)>=1 && atoi(data)<=5){
//sasql_cdkey_lock(CHAR_getChar(fd_charaindex,CHAR_CDKEY),14);
CONNECT_setCloseRequest( fd , 1 );
return;
}
}
CHAR_setWorkChar(fd_charaindex,CHAR_WORKRANDMSG,"");
CHAR_talkToCli( fd_charaindex, -1, "很遗憾,您输入的结果有误,请稍后再试。", CHAR_COLORRED);
return;
}
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDEDITBASETIME,0);
CHAR_setWorkChar(fd_charaindex,CHAR_WORKRANDMSG,"");
CHAR_setChar(fd_charaindex,CHAR_RANDTYPE,"");
CHAR_talkToCli( fd_charaindex, -1, "恭喜您,您输入的结果正确。", CHAR_COLORRED);
NPC_TypeCheck( npcindex, fd_charaindex, szmsg);
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDTYPE,0);
return;
}
if( seqno == CHAR_WINDOWTYPE_NPCENEMY_RAND_MSG ){
if(strlen(data)<1)
{
CHAR_setWorkChar(fd_charaindex,CHAR_WORKRANDMSG,"");
return;
}
//if(atoi(data)<getRandMin() || atoi(data)>getRandMax()) return;
if(CHAR_getWorkInt(fd_charaindex,CHAR_WORKLUANPCINT)!=0){
CHAR_setWorkChar(fd_charaindex,CHAR_WORKRANDMSG,"");
return;
}
CHAR_setWorkInt(fd_charaindex,CHAR_WORKLUANPCINT,1);
int cdkeynum;
for(cdkeynum=9;cdkeynum>0;cdkeynum--){
strcpy(mmcdkey[cdkeynum],mmcdkey[cdkeynum-1]);
strcpy(mmcdkeybuf[cdkeynum],mmcdkeybuf[cdkeynum-1]);
}
strcpy(mmcdkey[0],CHAR_getChar(fd_charaindex,CHAR_CDKEY));
sprintf(mmcdkeybuf[0],"%d.%d.%d",CHAR_getInt(fd_charaindex,CHAR_FLOOR),CHAR_getInt(fd_charaindex,CHAR_X),CHAR_getInt(fd_charaindex,CHAR_Y));
time_t timep;
struct tm *p;
time(&timep);
p=localtime(&timep);
timep = mktime(p);
CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDEDITBASETIME,timep);
char *arg;
char buftest[255];
int npcindex,ret;
arg = CHAR_getWorkChar(fd_charaindex,CHAR_WORKRANDMSG);
if(getStringFromIndexWithDelim(arg,"|", 1, buftest, sizeof(buftest)) == FALSE){
CHAR_setWorkChar(fd_charaindex,CHAR_WORKRANDMSG,"");
return;
}
ret = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 2, buftest, sizeof(buftest)) == FALSE){
CHAR_setWorkChar(fd_charaindex,CHAR_WORKRANDMSG,"");
return;
}
npcindex = atoi(buftest);
if(atoi(data)!=ret){
if(ret>=1 && ret<=5){
if(atoi(data)>=10000){
sasql_cdkey_lock(CHAR_getChar(fd_charaindex,CHAR_CDKEY),15);
CONNECT_setCloseRequest( fd , 1 );
return;
}
}else{
if(atoi(data)>=1 && atoi(data)<=5){
CONNECT_setCloseRequest( fd , 1 );
return;
}
}
CHAR_setWorkChar(fd_charaindex,CHAR_WORKRANDMSG,"");
CHAR_talkToCli( fd_charaindex, -1, "很遗憾,您输入的结果有误,请稍后再试。", CHAR_COLORRED);
return;
}
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDEDITBASETIME,0);
CHAR_setWorkChar(fd_charaindex,CHAR_WORKRANDMSG,"");
CHAR_setChar(fd_charaindex,CHAR_RANDTYPE,"");
CHAR_talkToCli( fd_charaindex, -1, "恭喜您,您输入的结果正确。", CHAR_COLORRED);
NPC_NPCEnemy_Encount( npcindex, fd_charaindex, 1);
//CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDTYPE,0);
return;
}
if( seqno == CHAR_WINDOWTYPE_LUANPC_RANDMSG ){
if(strlen(data)<1)
{
CHAR_setWorkChar(fd_charaindex,CHAR_WORKRANDMSG,"");
return;
}
//if(atoi(data)<getRandMin() || atoi(data)>getRandMax()) return;
if(CHAR_getWorkInt(fd_charaindex,CHAR_WORKLUANPCINT)!=0){
CHAR_setWorkChar(fd_charaindex,CHAR_WORKRANDMSG,"");
return;
}
CHAR_setWorkInt(fd_charaindex,CHAR_WORKLUANPCINT,1);
int cdkeynum;
for(cdkeynum=9;cdkeynum>0;cdkeynum--){
strcpy(mmcdkey[cdkeynum],mmcdkey[cdkeynum-1]);
strcpy(mmcdkeybuf[cdkeynum],mmcdkeybuf[cdkeynum-1]);
}
strcpy(mmcdkey[0],CHAR_getChar(fd_charaindex,CHAR_CDKEY));
sprintf(mmcdkeybuf[0],"%d.%d.%d",CHAR_getInt(fd_charaindex,CHAR_FLOOR),CHAR_getInt(fd_charaindex,CHAR_X),CHAR_getInt(fd_charaindex,CHAR_Y));
time_t timep;
struct tm *p;
time(&timep);
p=localtime(&timep);
timep = mktime(p);
CHAR_setWorkInt(fd_charaindex,CHAR_WORKRANDEDITBASETIME,timep);
char *arg;
char buftest[255];
int npcindex,talkindex,ret,flag;
arg = CHAR_getWorkChar(fd_charaindex,CHAR_WORKRANDMSG);
if(getStringFromIndexWithDelim(arg,"|", 1, buftest, sizeof(buftest)) == FALSE){
CHAR_setWorkChar(fd_charaindex,CHAR_WORKRANDMSG,"");
return;
}
ret = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 2, buftest, sizeof(buftest)) == FALSE){
CHAR_setWorkChar(fd_charaindex,CHAR_WORKRANDMSG,"");
return;
}
npcindex = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 3, buftest, sizeof(buftest)) == FALSE){
CHAR_setWorkChar(fd_charaindex,CHAR_WORKRANDMSG,"");
return;
}
talkindex = atoi(buftest);
if(getStringFromIndexWithDelim(arg,"|", 4, buftest, sizeof(buftest)) == FALSE){
CHAR_setWorkChar(fd_charaindex,CHAR_WORKRANDMSG,"");
return;
}
flag = atoi(buftest);
if(atoi(data)!=ret){
if(ret>=1 && ret<=5){
if(atoi(data)>=10000){
sasql_cdkey_lock(CHAR_getChar(fd_charaindex,CHAR_CDKEY),15);
CONNECT_setCloseRequest( fd , 1 );
return;
}
}else{
if(atoi(data)>=1 && atoi(data)<=5){
//sasql_cdkey_lock(CHAR_getChar(fd_charaindex,CHAR_CDKEY),14);
CONNECT_setCloseRequest( fd , 1 );
return;
}
}
CHAR_setWorkChar(fd_charaindex,CHAR_WORKRANDMSG,"");
CHAR_talkToCli( fd_charaindex, -1, "很遗憾,您输入的结果有误,请稍后再试。", CHAR_COLORRED);
return;
}
sprintf(buftest,"%d|%d|%d|%d",ret,npcindex,talkindex,1);
CHAR_setWorkChar(fd_charaindex,CHAR_WORKRANDMSG,buftest);
CHAR_setChar(fd_charaindex,CHAR_RANDTYPE,"");
CHAR_talkToCli( fd_charaindex, -1, "恭喜您,您输入的结果正确。", CHAR_COLORRED);
NPC_Lua_TalkedCallBack(npcindex,fd_charaindex,"hi",0,-1);
return;
}
#endif
{//ttom avoid the warp at will
Char *ch;
ch = CHAR_getCharPointer( fd_charaindex);
// CoolFish: +1 2001/11/05
if (!ch) return;
if((ch->data[CHAR_X]!=x)||(ch->data[CHAR_Y]!=y)){
// Robin 04/20 test
return;
x=ch->data[CHAR_X];
y=ch->data[CHAR_Y];
}
//ttom avoid WN at will
if(seqno==CHAR_WINDOWTYPE_NPCENEMY_START){
//print("12121212\n");
// Char *ch;
OBJECT object;
int ix,iy,ifloor,i,j;
int whichtype= -1;
int enemy=0;
int enemy_index;
if(!CHECKOBJECT(objindex)){
goto FIRST;
}
enemy_index=OBJECT_getIndex(objindex);//ttom 11/15/2000
ix =ch->data[CHAR_X];
iy =ch->data[CHAR_Y];
ifloor=ch->data[CHAR_FLOOR];
for(i=iy-1;i<=iy+1;i++){
for(j=ix-1;j<=ix+1;j++){
for( object = MAP_getTopObj(ifloor,j,i) ; object ;
object = NEXT_OBJECT(object ) ){
int objindex = GET_OBJINDEX(object);
switch( OBJECT_getType(objindex) ){
case OBJTYPE_CHARA:
whichtype = CHAR_getInt( OBJECT_getIndex( objindex), CHAR_WHICHTYPE);
if( whichtype == CHAR_TYPENPCENEMY){
int i_ene_temp;
i_ene_temp=OBJECT_getIndex( objindex);
//print("\n<WN>--enetemp=%d",i_ene_temp);
if(i_ene_temp== enemy_index){
goto START_WN;
}else{
enemy=0;
}
}
break;
case OBJTYPE_ITEM:
break;
case OBJTYPE_GOLD:
break;
default:
break;
}
}
}
}
if(enemy==0){
FIRST:
lssproto_EN_send( fd, FALSE, 0 );
CHAR_talkToCli(fd_charaindex, -1, "事件错误。", CHAR_COLORYELLOW);
goto END_WN;
}
}
}
//ttom end
START_WN:
CHAR_setMyPosition( fd_charaindex, x,y,TRUE);
if( CHAR_getWorkInt( fd_charaindex, CHAR_WORKBATTLEMODE) == BATTLE_CHARMODE_NONE){
if(seqno==CHAR_WINDOWTYPE_WINDOWWARPMAN_MAIN){
if(!CONNECT_get_first_warp(fd)){
select=1;
}
}
CHAR_processWindow( fd_charaindex, seqno,
select, objindex, makeStringFromEscaped(data));
//#ifdef _NO_WARP
// if (CONNECT_get_seqno(fd)==CHAR_WINDOWTYPE_WINDOWWARPMAN_MAIN)
// {
// CONNECT_set_seqno(fd,-1);
// CONNECT_set_selectbutton(fd,1);
// }
//#endif
}
//ttom+1
END_WN:
return;
//CONNECT_set_pass(fd,TRUE);//ttom
}
/*------------------------------------------------------------
------------------------------------------------------------*/
void lssproto_HL_recv( int fd,int flg )
{
char msgbuf[128];
int i, fd_charaindex;
CHECKFD;
fd_charaindex = CONNECT_getCharaindex( fd );
if( CHAR_getWorkInt( fd_charaindex, CHAR_WORKBATTLEMODE)
== BATTLE_CHARMODE_NONE)
{
return;
}
#ifdef _LOCKHELP_OK // (不可开) Syu ADD 锁定不可加入战斗
if((CHAR_getInt(fd_charaindex,CHAR_FLOOR) >= 8200 && CHAR_getInt(fd_charaindex,CHAR_FLOOR) <= 8213) ||
(CHAR_getInt(fd_charaindex,CHAR_FLOOR) >= 30017 && CHAR_getInt(fd_charaindex,CHAR_FLOOR) <= 30021)
|| CHAR_getInt(fd_charaindex,CHAR_FLOOR) == 20000
){
return ;
}
#endif
#ifdef _NPCENEMY_1
if(CHAR_getWorkInt(fd_charaindex,CHAR_WORKBATTLEHELP)==1) return;
#endif
if( flg == TRUE ) {
BattleArray[CHAR_getWorkInt( fd_charaindex,
CHAR_WORKBATTLEINDEX)].Side[
CHAR_getWorkInt( fd_charaindex,
CHAR_WORKBATTLESIDE)].flg |= BSIDE_FLG_HELP_OK;
snprintf( msgbuf, sizeof( msgbuf),
"%s 在求救!",
CHAR_getChar( fd_charaindex, CHAR_NAME));
}
else {
BattleArray[CHAR_getWorkInt( fd_charaindex,
CHAR_WORKBATTLEINDEX)].Side[
CHAR_getWorkInt( fd_charaindex,
CHAR_WORKBATTLESIDE)].flg &= ~BSIDE_FLG_HELP_OK;
snprintf( msgbuf, sizeof( msgbuf),
"%s 决定拒绝帮助。",
CHAR_getChar( fd_charaindex, CHAR_NAME));
}
for( i = 0; i < 5; i ++ ) {
int toindex = BattleArray[CHAR_getWorkInt(
fd_charaindex, CHAR_WORKBATTLEINDEX)].Side[
CHAR_getWorkInt( fd_charaindex,
CHAR_WORKBATTLESIDE)].Entry[i].charaindex;
if( CHAR_CHECKINDEX( toindex)) {
int tofd = getfdFromCharaIndex( toindex );
if( tofd != -1 ) {
lssproto_HL_send( tofd, flg);
}
/* 丢永本□斥霜耨 */
CHAR_talkToCli( toindex, -1, msgbuf, CHAR_COLORYELLOW);
CHAR_sendBattleEffect( toindex, ON);
}
}
}
/*------------------------------------------------------------
------------------------------------------------------------*/
void lssproto_ProcGet_recv( int fd )
{
outputNetProcLog( fd, 1);
}
/*------------------------------------------------------------
------------------------------------------------------------*/
void lssproto_PlayerNumGet_recv( int fd )
{
int i;
int clicnt =0;
int playercnt = 0;
for( i = 0; i < ConnectLen; i ++ ) {
if( CONNECT_getUse_debug(i,1017) ){
if( CONNECT_getCtype(i) == CLI) {
clicnt ++;
if( CONNECT_getCharaindex(i) >= 0 ) playercnt++;
}
}
}
lssproto_PlayerNumGet_send( fd, clicnt, playercnt);
}
/*------------------------------------------------------------
------------------------------------------------------------*/
void lssproto_LB_recv( int fd,int x,int y )
{
int fd_charaindex;
CHECKFDANDTIME;
fd_charaindex = CONNECT_getCharaindex( fd );
{//ttom avoid warp at will
int ix,iy;
ix=CHAR_getInt(fd_charaindex, CHAR_X);
iy=CHAR_getInt(fd_charaindex, CHAR_Y);
if( (ix!=x)||(iy!=y)){
//print("\n<LB>--Error!!!!");
//print("\n<LB>origion x=%d,y=%d",ix,iy);
//print("\n<LB>modify X=%d,Y=%d",x,y);
x=ix;
y=iy;
}
}
CHAR_setMyPosition( fd_charaindex, x,y,TRUE);
/* 杀梁匹五月井民尼永弁仄化杀梁允月 */
BATTLE_WatchTry( fd_charaindex );
}
/*------------------------------------------------------------
------------------------------------------------------------*/
void lssproto_Shutdown_recv( int fd,char* passwd,int min )
{
char buff[32];
if( strcmp( passwd, "hogehoge") == 0 ) {
int i;
int playernum = CHAR_getPlayerMaxNum();
snprintf( buff, sizeof( buff),"%s公告。",getGameserverID());
for( i = 0 ; i < playernum ; i++) {
if( CHAR_getCharUse(i) != FALSE ) {
CHAR_talkToCli( i, -1, buff, CHAR_COLORYELLOW);
}
}
SERVSTATE_setLimittime(min);
SERVSTATE_setShutdown( NowTime.tv_sec );
SERVSTATE_setDsptime( 0 );
}
}
void lssproto_PMSG_recv( int fd,int index,int petindex,int itemindex,
char* message,int color )
{
// CoolFish: Prevent Trade Cheat 2001/4/18
int fd_charaindex;
fd_charaindex = CONNECT_getCharaindex(fd);
if (CHAR_getWorkInt(fd_charaindex, CHAR_WORKTRADEMODE) != CHAR_TRADE_FREE)
return;
if( CHAR_getWorkInt(fd_charaindex,CHAR_WORKSTREETVENDOR)!=-1) return;
PETMAIL_sendPetMail( CONNECT_getCharaindex( fd ),
index, petindex, itemindex, message, color);
}
/*------------------------------------------------------------
------------------------------------------------------------*/
void lssproto_PS_recv( int fd, int havepetindex, int havepetskill, int toindex, char* data )
{
int to_charaindex = Callfromcli_Util_getTargetCharaindex( fd, toindex);
int charaindex = CONNECT_getCharaindex( fd );
int petindex;
BOOL ret;
petindex = CHAR_getCharPet( charaindex, havepetindex);
if( !CHAR_CHECKINDEX( petindex)) return;
if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE && strlen(data)>0) return;
ret = PETSKILL_Use( petindex, havepetskill, to_charaindex, data );
lssproto_PS_send( fd, ret, havepetindex, havepetskill, toindex);
}
/*------------------------------------------------------------
------------------------------------------------------------*/
void lssproto_SP_recv( int fd,int x,int y, int dir )
{
int fd_charaindex;
fd_charaindex = CONNECT_getCharaindex( fd );
{//ttom avoid the warp at will
int i_x,i_y;
i_x=CHAR_getInt(fd_charaindex, CHAR_X);
i_y=CHAR_getInt(fd_charaindex, CHAR_Y);
if((i_x!=x)||(i_y!=y)){
x=i_x;
y=i_y;
}
}//ttom
CHAR_setMyPosition_main( fd_charaindex, x,y,dir,TRUE);
}
/*------------------------------------------------------------
* CoolFish: Trade Command 2001/4/18
------------------------------------------------------------*/
void lssproto_TD_recv( int fd, char* message )
{
int fd_charaindex;
CHECKFDANDTIME;
fd_charaindex = CONNECT_getCharaindex( fd );
// print(" MAP_TRADEPICKUP_check0 ");
CHAR_Trade(fd, fd_charaindex, message);
}
/*------------------------------------------------------------
* CoolFish: Family Command 2001/5/24
------------------------------------------------------------*/
void lssproto_FM_recv( int fd, char* message )
{
int fd_charaindex;
struct timeval recvtime;
CHECKFDANDTIME;
// add code by shan
CONNECT_getLastrecvtime( fd, &recvtime);
if( time_diff( NowTime, recvtime) < 0.5 ){
return;
}
CONNECT_setLastrecvtime(fd, &NowTime);
fd_charaindex = CONNECT_getCharaindex( fd );
if( checkStringErr( message ) ) return;
CHAR_Family(fd, fd_charaindex, message);
}
// shan 2002/01/10
void lssproto_PETST_recv( int fd, int nPet, int sPet )
{
if(nPet<0 || nPet>4) return;
int charaindex;
int i, nums=0;
CHECKFDANDTIME;
charaindex = CONNECT_getCharaindex( fd );
if (!CHAR_CHECKINDEX( charaindex ) ) return;
if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE)
!= BATTLE_CHARMODE_NONE) return ;
for( i=0; i<5; i++) {
if( CHAR_getWorkInt( charaindex, CHAR_WORK_PET0_STAT+i) == TRUE )
nums++;
}
if( nums <= 3 )
CHAR_setWorkInt( charaindex, CHAR_WORK_PET0_STAT+nPet, sPet);
// if( nums ==3 && CHAR_getWorkInt(charaindex,CHAR_WORK_PET0_STAT+nPet)==0){
// CHAR_setWorkInt( charaindex, CHAR_WORK_PET0_STAT+nPet, 1);
// lssproto_SPET_recv(fd,nPet+1);
// }
}
#ifdef _MIND_ICON
void lssproto_MA_recv(int fd, int x, int y, int nMind)
{
int charaindex;
CHECKFDANDTIME;
charaindex = CONNECT_getCharaindex( fd);
if(!CHAR_CHECKINDEX( charaindex)) return;
if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE) return ;
{
int i_x, i_y;
i_x = CHAR_getInt( charaindex, CHAR_X);
i_y = CHAR_getInt( charaindex, CHAR_Y);
if((i_x!=x)||(i_y!=y)){
x = i_x;
y = i_y;
}
}
//print("\nshan------------------>mind action->%d x->%d y->%d", nMind, x, y);
CHAR_setMyPosition( charaindex, x, y, TRUE);
CHAR_setWorkInt( charaindex, CHAR_MIND_NUM, nMind);
CHAR_sendMindEffect( charaindex, CHAR_getWorkInt( charaindex, CHAR_MIND_NUM));
if(CHAR_getWorkInt( charaindex, CHAR_MIND_NUM) != 101290 &&
CHAR_getWorkInt( charaindex, CHAR_MIND_NUM) != 101294 &&
CHAR_getWorkInt( charaindex, CHAR_MIND_NUM) != 101288 )
CHAR_setWorkInt( charaindex, CHAR_MIND_NUM, 0);
//print("\nshan------------------>end");
return;
}
#endif
BOOL checkStringErr( char *checkstring )
{
int i,ach;
for (i=0,ach=0;i<strlen(checkstring);i++) {
if ((unsigned char)checkstring[i]==0xff) { ach=1; break; } // Force no 0xff
if ((unsigned char)checkstring[i]==0x80) { ach=1; break; } // Force no 0x80
if ((unsigned char)checkstring[i]==0x7f) { ach=1; break; } // Force no 0x7f
if ((unsigned char)checkstring[i]<=0x20) { ach=1; break; } // Force greater than 0x20
if (ach) {
if ((((unsigned char)checkstring[i]>=0x40)&&((unsigned char)checkstring[i]<=0x7e))||
(((unsigned char)checkstring[i]>=0xa1)&&((unsigned char)checkstring[i]<=0xfe))) ach=0;
} else {
if (((unsigned char)checkstring[i]>=0xa1)&&((unsigned char)checkstring[i]<=0xfe)) ach=1;
}
}
if (ach)
{
print(" StringDog! ");
return TRUE;
}
return FALSE;
}
#ifdef _TEAM_KICKPARTY
void lssproto_KTEAM_recv( int fd, int si)
{
int charaindex=-1, pindex;
if( si < 0 || si > 5 ) return;
charaindex = CONNECT_getCharaindex( fd );
if( !CHAR_CHECKINDEX( charaindex) ) return;
if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE) != CHAR_PARTY_LEADER ) return;
pindex = CHAR_getWorkInt( charaindex, si + CHAR_WORKPARTYINDEX1);
if( !CHAR_CHECKINDEX( pindex) ) return;
if( CHAR_getWorkInt( pindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_LEADER ) return;
if( CHAR_DischargeParty( pindex, 0) == FALSE ){
CHAR_talkToCli( charaindex, -1, "踢除失败!", CHAR_COLORYELLOW);
}else{
char buf1[256];
sprintf( buf1, "队长[%s]将你踢除!", CHAR_getUseName( charaindex ));
CHAR_talkToCli( pindex, -1, buf1, CHAR_COLORYELLOW);
sprintf( buf1, "将[%s]踢除出团队!", CHAR_getUseName( pindex ));
CHAR_talkToCli( charaindex, -1, buf1, CHAR_COLORYELLOW);
}
}
#endif
#ifdef _CHATROOMPROTOCOL // (不可开) Syu ADD 聊天室频道
void lssproto_CHATROOM_recv (int fd , char *data)
{
ChatRoom_recvall ( fd , data ) ;
}
#endif
#ifdef _NEWREQUESTPROTOCOL // (不可开) Syu ADD 新增Protocol要求细项
void lssproto_RESIST_recv (int fd )
{
int charindex = -1 ;
char token[256];
charindex = CONNECT_getCharaindex( fd );
if( !CHAR_CHECKINDEX( charindex) ) return;
sprintf ( token , "%d|%d|%d|%d|%d|%d|%d|%d" ,
CHAR_getInt( charindex, CHAR_EARTH_RESIST ) ,
CHAR_getInt( charindex, CHAR_WATER_RESIST ) ,
CHAR_getInt( charindex, CHAR_FIRE_RESIST ) ,
CHAR_getInt( charindex, CHAR_WIND_RESIST ) ,
CHAR_getInt( charindex, CHAR_EARTH_EXP ) ,
CHAR_getInt( charindex, CHAR_WATER_EXP ) ,
CHAR_getInt( charindex, CHAR_FIRE_EXP ) ,
CHAR_getInt( charindex, CHAR_WIND_EXP )
);
lssproto_RESIST_send ( fd , token ) ;
}
#endif
#ifdef _OUTOFBATTLESKILL // (不可开) Syu ADD 非战斗时技能Protocol
void lssproto_BATTLESKILL_recv (int fd, int iNum)
{
int charaindex = CONNECT_getCharaindex( fd );
#ifndef _PROSKILL_OPTIMUM
int skillindex=-1,char_pskill=-1,profession_skill=-1;
#endif
if( !CHAR_CHECKINDEX( charaindex) ) return;
if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE ) return;
#ifndef _PROSKILL_OPTIMUM // Robin fix cancel 此处略过职业检查, 改在 PROFESSION_SKILL_Use 中检查
// 人物的职业
char_pskill = CHAR_getInt( charaindex, PROFESSION_CLASS );
skillindex = PROFESSION_SKILL_GetArray( charaindex, iNum);
int Pskillid = skillindex;
// 技能的职业
profession_skill = PROFESSION_SKILL_getInt( Pskillid, PROFESSION_SKILL_PROFESSION_CLASS);
if( (char_pskill > 0) && (char_pskill == profession_skill) ){
#else
if( 1 ){
#endif
if( PROFESSION_SKILL_Use( charaindex, iNum, 0, NULL ) != 1 ){
if(CHAR_getWorkInt( charaindex, CHAR_ENCOUNT_NUM)-(int)time(NULL)>0){
// print("\n 玩家(%s)使用技能错误!", CHAR_getUseName( charaindex ) );
#ifdef _PROSKILL_ERR_KICK
CONNECT_setCloseRequest( fd , 1 );
#endif
}
}
}
}
#endif
#ifdef _STREET_VENDOR
void lssproto_STREET_VENDOR_recv(int fd,char *message)
{
int charaindex = CONNECT_getCharaindex(fd);
if(!CHAR_CHECKINDEX(charaindex)) return;
if(CHAR_getWorkInt(charaindex,CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE) return;
if(CHAR_getWorkInt(charaindex,CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE){
CHAR_talkToCli(charaindex,-1,"组队状态下不能交易",CHAR_COLORYELLOW);
return;
}
if (CHAR_getWorkInt( charaindex, CHAR_WORKSAFEMODE)==0)
{
CHAR_SafePassword(charaindex);
return;
}
CHAR_sendStreetVendor(charaindex,message);
}
#endif
#ifdef _RIGHTCLICK
void lssproto_RCLICK_recv(int fd, int type, char* data)
{
print("\n RCLICK_recv( type=%d data=%s) ", type, data);
}
#endif
#ifdef _JOBDAILY
void lssproto_JOBDAILY_recv(int fd,char *data)
{
int charaindex = CONNECT_getCharaindex(fd);
if(!CHAR_CHECKINDEX(charaindex)) return;
CHAR_JobDaily(charaindex,data);
}
#endif
#ifdef _TEACHER_SYSTEM
void lssproto_TEACHER_SYSTEM_recv(int fd,char *data)
{
int charaindex = CONNECT_getCharaindex(fd);
if(!CHAR_CHECKINDEX(charaindex)) return;
CHAR_Teacher_system(charaindex,data);
}
#endif
#ifdef _ONLINE_SHOP
void lssproto_SHOP_recv(int fd,int shopflag,int piece)
{
int charaindex = CONNECT_getCharaindex(fd);
if(!CHAR_CHECKINDEX(charaindex)) return;
char *mycdkey=CHAR_getChar(charaindex,CHAR_CDKEY);
//saacproto_ACShop_send(fd,mycdkey,charaindex,shopflag,piece);
char dataname[20];
char res[2048];
int rownum=0,pieces=0,shopnum=0,startrow,vippoint=0;
sprintf(dataname,"OnlineShop%d",shopflag);
vippoint=sasql_vippoint(mycdkey,0,0);
rownum=sasql_chehk_shop(dataname);
if(rownum>0)
{
pieces=rownum/8+1;
shopnum=rownum-8*(piece-1);
if(shopnum>8) shopnum=8;
startrow=8*(piece-1);
char* shopres;
shopres=sasql_query_shop(dataname,startrow,shopnum);
lssproto_SHOP_send(fd,shopnum,vippoint,piece,pieces,shopflag,shopres);
}
}
void lssproto_SHOPBUY_recv(int fd,int shopflag,int piece,int shopno,int buynum)
{
int charaindex = CONNECT_getCharaindex(fd);
int i,petindex;
if(!CHAR_CHECKINDEX(charaindex)) return;
if (CHAR_getWorkInt( charaindex, CHAR_WORKSAFEMODE)==0)
{
CHAR_SafePassword(charaindex);
return;
}
if(shopflag==1)
{
for( i = 0 ;i < CHAR_MAXPETHAVE ; i++) {
petindex = CHAR_getCharPet( charaindex, i);
if( petindex == -1 )
break;
}
if( i+buynum > CHAR_MAXPETHAVE ) {
CHAR_talkToCli( charaindex, -1, "宠物已满!!", CHAR_COLORYELLOW);
return;
}
}
else
{
if(buynum>CHAR_findSurplusItemBox(charaindex)){
CHAR_talkToCli( charaindex, -1, "物品栏位不足。", CHAR_COLORYELLOW);
return;
}
}
char *mycdkey=CHAR_getChar(charaindex,CHAR_CDKEY);
char dataname[20];
int rownum=0,pieces=0,shopnum=0,startrow,vippoint=0;
sprintf(dataname,"OnlineShop%d",shopflag);
vippoint=sasql_vippoint(mycdkey,0,0);
rownum=sasql_chehk_shop(dataname);
if(rownum>0)
{
pieces=rownum/8+1;
shopnum=rownum-8*(piece-1);
if(shopnum>8) shopnum=8;
startrow=8*(piece-1);
char* shopres;
shopres=sasql_query_shop(dataname,startrow,shopnum);
int pvippoint = - sasql_buy_shop(dataname,startrow,shopnum,shopno) * buynum;
vippoint=sasql_vippoint(mycdkey,pvippoint,1);
//saacproto_ACShopBuy_send(fd, charaindex,0,vippoint,piece,pieces,shopflag,shopres,shopno,buynum);
}
//saacproto_ACShopBuy_send(fd,mycdkey,charaindex,shopflag,piece,shopno,buynum);
}
#endif