📄 char.c
字号:
CHAR_setInt(charaindex,CHAR_SKILLUPPOINT,
CHAR_getInt(charaindex,CHAR_SKILLUPPOINT)+(max-total));
}*/
}
#endif
{
int EQ_BBI=-1, EQ_ARM=-1, EQ_NUM=-1, EQ_BI=-1, CH_BI=-1;
CH_BI = CHAR_getInt( charaindex, CHAR_BASEIMAGENUMBER);
EQ_BBI = CHAR_getInt( charaindex, CHAR_BASEBASEIMAGENUMBER);
if(CH_BI != EQ_BBI){
EQ_ARM = CHAR_getItemIndex(charaindex,CHAR_ARM);
EQ_NUM=ITEM_FIST;
if ( ITEM_CHECKINDEX( EQ_ARM)) {
EQ_NUM=ITEM_getInt(EQ_ARM,ITEM_TYPE);
}
EQ_BI=CHAR_getNewImagenumberFromEquip( EQ_BBI, EQ_NUM);
if( CHAR_getInt( charaindex, CHAR_RIDEPET) == -1 ) { //非骑宠
if( EQ_BI != CH_BI ) {
print("\n 非骑宠形象 %d [%d=>%d]", charaindex,
CHAR_getInt( charaindex, CHAR_BASEIMAGENUMBER),
EQ_BI );
CHAR_setInt( charaindex, CHAR_BASEIMAGENUMBER, EQ_BI);
}
}
}
}
{
int x,y;
if( CHAR_isAppearPosition( CHAR_getInt( charaindex, CHAR_FLOOR),&x, &y )) {
int flelder, xelder, yelder;
CHAR_getElderPosition(CHAR_getInt(charaindex, CHAR_LASTTALKELDER),
&flelder, &xelder, &yelder);
CHAR_setInt(charaindex, CHAR_FLOOR, flelder);
CHAR_setInt(charaindex, CHAR_X, xelder);
CHAR_setInt(charaindex, CHAR_Y, yelder);
}
}
#ifdef _FIX_GAMBLENUM
{
if( CHAR_getInt(charaindex, CHAR_GAMBLENUM) < 0){
CHAR_setInt(charaindex, CHAR_GAMBLENUM, 0);
}
}
#endif
#ifdef _MAP_NOEXIT
{
int exfloor=-1,ex_X=-1,ex_Y=-1;
int map_type=0;
unsigned int point;
point = MAP_getExFloor_XY( CHAR_getInt(charaindex, CHAR_FLOOR) , &map_type);
if( point > 0 ) {
if( CHAR_getInt( charaindex, CHAR_LASTTALKELDER) >= 0 ) {
CHAR_getElderPosition(CHAR_getInt(charaindex, CHAR_LASTTALKELDER),
&exfloor, &ex_X, &ex_Y);
}
if( map_type >= 0 ) { // map_type >= 0 优先回纪录点
if( exfloor == map_type && exfloor >= 0 ) {//回纪录点
}else {
exfloor = (point>>16)&0xffffff;
ex_X = (point>>8)&0xff;
ex_Y = (point>>0)&0xff;
}
}
if( CHECKFLOORID( exfloor) ) { //检查房间号
CHAR_setInt(charaindex, CHAR_FLOOR, exfloor);
CHAR_setInt(charaindex, CHAR_X, ex_X);
CHAR_setInt(charaindex, CHAR_Y, ex_Y);
}
}
}
#endif
if( CHAR_getInt(charaindex,CHAR_X) < 0 || CHAR_getInt(charaindex,CHAR_Y) < 0 ){
CHAR_setInt(charaindex,CHAR_X,1);
CHAR_setInt(charaindex,CHAR_Y,1);
}
#ifdef _MAP_TIME
// 如果登入的地图是这些编号的话,回到入口
if(CHAR_getInt(charaindex,CHAR_FLOOR) >= 30017 && CHAR_getInt(charaindex, CHAR_FLOOR) <= 30021){
CHAR_setInt(charaindex,CHAR_FLOOR,30008);
CHAR_setInt(charaindex,CHAR_X,39);
CHAR_setInt(charaindex,CHAR_Y,38);
}
#endif
#ifdef _FM_METAMO
if( CHAR_getInt( charaindex , CHAR_BASEIMAGENUMBER)>=100700 && CHAR_getInt( charaindex , CHAR_BASEIMAGENUMBER)<100819
&& (CHAR_getInt( charaindex, CHAR_FMLEADERFLAG ) == FMMEMBER_NONE || CHAR_getInt( charaindex, CHAR_FMLEADERFLAG ) == FMMEMBER_APPLY)){
switch( CHAR_getWorkInt( charaindex, CHAR_WORKFMFLOOR) ){
case 1041:
case 2031:
case 3031:
case 4031:
case 5031:
case 6031:
case 7031:
case 8031:
case 9031:
case 10031:
break;
default:
CHAR_ReMetamo(charaindex);
}
}
#endif
#ifdef _AUTO_PK
int exfloor=-1,ex_X=-1,ex_Y=-1;
if( CHAR_getInt(charaindex, CHAR_FLOOR) == 20000 ){
CHAR_getElderPosition(CHAR_getInt(charaindex, CHAR_LASTTALKELDER), &exfloor, &ex_X, &ex_Y);
CHAR_setInt(charaindex, CHAR_FLOOR, exfloor);
CHAR_setInt(charaindex, CHAR_X, ex_X);
CHAR_setInt(charaindex, CHAR_Y, ex_Y);
}
CHAR_setInt(charaindex, CHAR_AUTOPK, 0);
#endif
if( CHAR_getInt(charaindex, CHAR_FLOOR) == 10032 ){
CHAR_setInt(charaindex, CHAR_FLOOR, 10030);
CHAR_setInt(charaindex, CHAR_X, 52);
CHAR_setInt(charaindex, CHAR_Y, 36);
}
objindex = initObjectFromObjectMember(OBJTYPE_CHARA,charaindex,
CHAR_getInt(charaindex,CHAR_X),
CHAR_getInt(charaindex,CHAR_Y),
CHAR_getInt(charaindex,CHAR_FLOOR));
if( objindex == -1 ){
fprint ("始化对象错误!\n");
goto DELETECHARDATA;
}
CHAR_setWorkInt( charaindex,CHAR_WORKOBJINDEX,objindex );
CONNECT_setState( clifd, LOGIN );
CONNECT_setCharaindex( clifd, charaindex );
CHAR_LoginBesideSetWorkInt( charaindex, clifd);
CHAR_complianceParameter( charaindex );
//检查人物身上
{
int i;
// char *petstring;
int ID1;
for( i = 0; i < CHAR_MAXPETHAVE; i ++ ) {
int petindex = CHAR_getCharPet(charaindex,i);
if( CHAR_CHECKINDEX( petindex) ) {
/*
if(CHAR_getInt( petindex, CHAR_FUSIONBEIT )==1
&& CHAR_getInt( petindex, CHAR_TRANSMIGRATION )<2)
CHAR_setInt( petindex, CHAR_FUSIONBEIT, 0 );
if(CHAR_getInt( petindex, CHAR_FUSIONBEIT )==1
&& CHAR_getInt( petindex, CHAR_TRANSMIGRATION )>2){
int vital=CHAR_getInt( petindex, CHAR_VITAL);
int str=CHAR_getInt( petindex, CHAR_STR);
int tough=CHAR_getInt( petindex, CHAR_TOUGH);
int dex=CHAR_getInt( petindex, CHAR_DEX);
int lv=CHAR_getInt( petindex, CHAR_LV);
int LevelUpPoint = CHAR_getInt( petindex, CHAR_ALLOCPOINT );
int work[4];
float fRand, cvitl, cstr, ctough, cdex;
float rnd=(rand()%5+95)/100.0;
float Param[4] = { 0.0, 0.0, 0.0, 0.0 };
work[3] =(( LevelUpPoint >> 24 ) & 0xFF);
work[0] = (( LevelUpPoint >> 16 ) & 0xFF);
work[1] = (( LevelUpPoint >> 8 ) & 0xFF);
work[2] = (( LevelUpPoint >> 0 ) & 0xFF);
struct _RankRandTbl{
int min;
int max;
}RankRandTbl[] = {
{ 450, 500 },
{ 470, 520 },
{ 490, 540 },
{ 510, 560 },
{ 530, 580 },
{ 550, 600 },
};
int petrank = CHAR_getInt( petindex, CHAR_PETRANK );
if( petrank < 0 || petrank > 5 ) petrank = 0;
printf("\n.........................\n");
printf("名:%s\n",CHAR_getChar( petindex, CHAR_NAME));
printf("血:%d\n",vital/15);
printf("攻:%d\n",str/80);
printf("防:%d\n",tough/80);
printf("敏:%d\n",dex/100);
printf("成:%f\n",((str/80-20.0)/lv+(tough/80-15.0)/lv+(dex/100-15.0)/lv));
printf(".........................\n");
while(((str/80-20.0)/lv+(tough/80-15.0)/lv+(dex/100-15.0)/lv)>8.5){
vital*=rnd;
str*=rnd;
tough*=rnd;
dex*=rnd;
rnd=(rand()%5+95)/100.0;
}
for(i=0;i<160;i++){
fRand = (float)RAND( RankRandTbl[petrank].min, RankRandTbl[petrank].max ) * 0.01;
cvitl += (float)work[3] * fRand + Param[0] * fRand;
cstr += (float)work[0] * fRand + Param[1] * fRand;
ctough += (float)work[1] * fRand + Param[2] * fRand;
cdex += (float)work[2] * fRand + Param[3] * fRand;
}
rnd=(cstr/80/160.0+ctough/80/160.0+cdex/100/160.0);
printf("血:%d\n",work[3]);
printf("攻:%d\n",work[0]);
printf("防:%d\n",work[1]);
printf("敏:%d\n",work[2]);
printf("成:%f\n",rnd);
if(rnd>8.5){
work[3]*=(8.5/rnd);
work[0]*=(8.5/rnd);
work[1]*=(8.5/rnd);
work[2]*=(8.5/rnd);
}
LevelUpPoint = ( work[3]<< 24) + ( work[0]<< 16) + ( work[1]<< 8) + ( work[2]<< 0);
CHAR_setInt( petindex, CHAR_ALLOCPOINT, LevelUpPoint);
CHAR_setInt( petindex, CHAR_VITAL, vital);
CHAR_setInt( petindex, CHAR_STR, str);
CHAR_setInt( petindex, CHAR_TOUGH, tough);
CHAR_setInt( petindex, CHAR_DEX, dex);
CHAR_setInt( petindex, CHAR_FUSIONBEIT, 2 );
CHAR_setInt( petindex, CHAR_TRANSMIGRATION,3 );
printf("\n.........................\n");
printf("名:%s\n",CHAR_getChar( petindex, CHAR_NAME));
printf("血:%d\n",vital/15);
printf("攻:%d\n",str/80);
printf("防:%d\n",tough/80);
printf("敏:%d\n",dex/100);
printf("成:%f\n",((str/80-20.0)/lv+(tough/80-15.0)/lv+(dex/100-15.0)/lv));
printf(".........................\n");
printf("血:%d\n",work[3]);
printf("攻:%d\n",work[0]);
printf("防:%d\n",work[1]);
printf("敏:%d\n",work[2]);
}
*/
#ifdef _UNIQUE_P_I
// CoolFish: 2001/10/11 Set Pet Unicode
CHAR_setPetUniCode(petindex);
#endif
#ifdef _NEWOPEN_MAXEXP
if( CHAR_getInt( petindex, CHAR_OLDEXP) > 0 || CHAR_getInt( charaindex, CHAR_OLDEXP) < 0 ){
CHAR_ChangeExp( petindex);
}
#endif
ID1=CHAR_getInt( petindex, CHAR_PETID);
// petstring = CHAR_makePetStringFromPetIndex( petindex);
#ifdef _REEDIT_PETBBIS
if( ID1 == 1133 ){
CHAR_setInt( petindex, CHAR_BASEIMAGENUMBER, 101578);
CHAR_setInt( petindex, CHAR_BASEBASEIMAGENUMBER, 101578);
print("PET:%s fix BBI\n", CHAR_getUseName(petindex));
}
#endif
// WON ADD 修正白虎七技
if( ID1 == 777 )CHAR_setInt( petindex, CHAR_SLOT, 7);
CHAR_setWorkInt( petindex, CHAR_WORKPLAYERINDEX, charaindex);
// 修正宠技最大值变-1 Robin 20040803
if( CHAR_getInt( petindex, CHAR_SLOT) < 0 ) {
int j;
for( j=0; j<CHAR_MAXPETSKILLHAVE; j++) {
if( CHAR_getPetSkill( petindex, j) >= 0)
CHAR_setInt( petindex, CHAR_SLOT, j+1);
}
//print(" 宠技MAX变-1改6 ");
}
CHAR_complianceParameter( petindex );
#ifdef _FIX_GP_PET_SKILL // WON ADD 修正gp宠会落马术
if( ID1 == 1133){
int j;
for( j=0; j<CHAR_MAXPETSKILLHAVE; j++){
if( CHAR_getPetSkill( petindex, j) == 210 ){ // 落马术
CHAR_setPetSkill( petindex, j, -1);
}
}
}
#endif
}
}
}
{
int i;
// char *petstring;//ttom
// char *c_ptr_index;
// char c_temp[4096];
// char c_temp1[4096];
int ID1;
// int tran_no;
BOOL b_find=FALSE;
//ttom
for( i = 0; i < CHAR_MAXPOOLPETHAVE; i ++ ) {
int petindex = CHAR_getCharPoolPet(charaindex,i);
if( CHAR_CHECKINDEX( petindex) ) {
#ifdef _UNIQUE_P_I
// CoolFish: 2001/10/11 Set Pet Unicode
CHAR_setPetUniCode(petindex);
#endif
#ifdef _NEWOPEN_MAXEXP
if( CHAR_getInt( petindex, CHAR_OLDEXP) > 0 ||
CHAR_getInt( charaindex, CHAR_OLDEXP) < 0 ){
CHAR_ChangeExp( petindex);
}
#endif
b_find=FALSE;
ID1=CHAR_getInt( petindex, CHAR_PETID);
#ifdef _REEDIT_PETBBIS
if( ID1 == 1133 ){
CHAR_setInt( petindex, CHAR_BASEIMAGENUMBER, 101578);
CHAR_setInt( petindex, CHAR_BASEBASEIMAGENUMBER, 101578);
}
#endif
/*
tran_no=CHAR_getInt( charaindex, CHAR_TRANSMIGRATION);
petstring = CHAR_makePetStringFromPetIndex( petindex);
c_ptr_index=strstr(petstring,"name:");
getStringFromIndexWithDelim(c_ptr_index,":",2,c_temp,sizeof(c_temp));
c_ptr_index=c_temp;
getStringFromIndexWithDelim(c_ptr_index,"|",1,c_temp1,sizeof(c_temp1));
if(b_find){//ttom
CHAR_setCharPoolPet( charaindex, i, -1);
print("\nKill pool pet ID=%d name=%s",ID1,c_temp1);
sprintf(c_temp2,"Kill pool pet ID=%d name=%s",ID1,c_temp1);
LogKill(CHAR_getChar( charaindex, CHAR_NAME ),
CHAR_getChar( charaindex, CHAR_CDKEY ),
c_temp2);
}else{//ttom
*/
CHAR_setWorkInt( petindex, CHAR_WORKPLAYERINDEX, charaindex);
CHAR_complianceParameter( petindex );
// }//ttom
}
}
}
CHAR_loginCheckUserItem( charaindex);
CHAR_complianceParameter( charaindex );
#ifdef _PROFESSION_FIX_LEVEL // WON ADD 修正职业经验值
{
int i=0;
for( i = 0 ; i < CHAR_SKILLMAXHAVE ; i ++ ){
CHAR_HaveSkill* hskill;
hskill = CHAR_getCharHaveSkill( charaindex, i );
if( hskill != NULL && hskill->use == TRUE ){
int skill_level = SKILL_getInt( &hskill->skill, SKILL_LEVEL);
if( skill_level < 10 ){
SKILL_setInt( &hskill->skill, SKILL_LEVEL, 10* 100 );
}
}
}
}
#endif
#ifdef _PETSKILL_BECOMEPIG
if( CHAR_getInt( charaindex, CHAR_BECOMEPIG) > -1 ){
CHAR_setInt( charaindex, CHAR_BASEIMAGENUMBER, CHAR_getInt( charaindex, CHAR_BECOMEPIG_BBI ) );
}
//change fix 处理负很大的乌力时间
else{
CHAR_setInt( charaindex, CHAR_BECOMEPIG, -1 );
}
#endif
lssproto_CharLogin_send( clifd, SUCCESSFUL,"" );
per = ENCOUNT_getEncountPercentMin( charaindex,
CHAR_getInt( charaindex, CHAR_FLOOR),
CHAR_getInt( charaindex, CHAR_X),
CHAR_getInt( charaindex, CHAR_Y));
if( per != -1) {
CHAR_setWorkInt( charaindex, CHAR_WORKENCOUNTPROBABILITY_MIN, per);
}
per = ENCOUNT_getEncountPercentMax( charaindex,
CHAR_getInt( charaindex, CHAR_FLOOR),
CHAR_getInt( charaindex, CHAR_X),
CHAR_getInt( charaindex, CHAR_Y));
if( per != -1) {
CHAR_setWorkInt( charaindex, CHAR_WORKENCOUNTPROBABILITY_MAX, per);
}
CHAR_setLuck( charaindex);
{
int i;
char* statuscat[]={"C","P","I","S","D","E","F"};
for( i=0 ; i<arraysizeof(statuscat) ; i++ )
CHAR_sendStatusString( charaindex, statuscat[i] );
}
{
int i;
char category[3];
for( i = 0; i < CHAR_MAXPETHAVE; i ++ ) {
snprintf( category, sizeof( category), "K%d",i);
CHAR_sendStatusString( charaindex, category );
snprintf( category, sizeof( category), "W%d",i);
CHAR_sendStatusString( charaindex, category );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -