4737 lines
156 KiB
C
4737 lines
156 KiB
C
#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,"gm") || strstr(charname,"GM")
|
||
|| strstr(charname,"Gm") || strstr(charname,"gM")
|
||
|| 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
|