209 lines
6.1 KiB
C
209 lines
6.1 KiB
C
#include <string.h>
|
|
#include "version.h"
|
|
#include "longzoro/luckstar.h"
|
|
#include "char_base.h"
|
|
#include "char.h"
|
|
#include "autil.h"
|
|
#include "enemy.h"
|
|
#include "item.h"
|
|
|
|
#ifdef _LUCK_STAR
|
|
|
|
Luck_Star_t luckstar[MAXLUCKSTAR];
|
|
|
|
static int lucknum=0;
|
|
BOOL LuckStar_init()
|
|
{
|
|
FILE* fp;
|
|
int i;
|
|
#ifdef _CRYPTO_DATA
|
|
BOOL crypto = FALSE;
|
|
fp = fopen( "data/luckstar.txt.allblues", "r");
|
|
if( fp != NULL ){
|
|
crypto = TRUE;
|
|
}else
|
|
#endif
|
|
{
|
|
fp = fopen("data/luckstar.txt", "r");
|
|
}
|
|
if (fp == NULL)
|
|
{
|
|
print("ÎÞ·¨´ò¿ªÎļþ\n");
|
|
return FALSE;
|
|
}
|
|
memset( &luckstar, 0, sizeof( luckstar ) );
|
|
lucknum = 0;
|
|
for(i=0;i<MAXLUCKSTAR;i++){
|
|
char line[64], buf[16];
|
|
if (fgets(line, sizeof(line), fp) == NULL){
|
|
continue;
|
|
}
|
|
|
|
#ifdef _CRYPTO_DATA
|
|
if(crypto==TRUE){
|
|
DecryptKey(line);
|
|
}
|
|
#endif
|
|
|
|
if( line[0] == '#' )continue;
|
|
if( line[0] == '\n' )continue;
|
|
|
|
chop(line);
|
|
|
|
if(getStringFromIndexWithDelim(line,",", 1, buf, sizeof(buf))==TRUE){
|
|
luckstar[lucknum].pet=atoi(buf);
|
|
}else{
|
|
luckstar[lucknum].pet=-1;
|
|
}
|
|
if(getStringFromIndexWithDelim(line,",", 2, buf, sizeof(buf))==TRUE){
|
|
luckstar[lucknum].item=atoi(buf);
|
|
}else{
|
|
luckstar[lucknum].item=-1;
|
|
}
|
|
/*
|
|
if(getStringFromIndexWithDelim(line,",", 3, buf, sizeof(buf))==TRUE){
|
|
luckstar[lucknum].gold=atoi(buf);
|
|
}else{
|
|
luckstar[lucknum].gold=0;
|
|
}
|
|
if(getStringFromIndexWithDelim(line,",", 4, buf, sizeof(buf))==TRUE){
|
|
luckstar[lucknum].vippoint=atoi(buf);
|
|
}else{
|
|
luckstar[lucknum].vippoint=0;
|
|
}
|
|
*/
|
|
lucknum++;
|
|
}
|
|
lucknum--;
|
|
fclose(fp);
|
|
return TRUE;
|
|
}
|
|
|
|
void LuckStar()
|
|
{
|
|
if(lucknum==0)return;
|
|
if(getLuckStarChances()<0)return;
|
|
if((rand() % 100) <= getLuckStarChances()){
|
|
int k;
|
|
char token[256]="";
|
|
char strPet[128]="";
|
|
char strItem[128]="";
|
|
// char strGold[128]="";
|
|
// char strVippoint[128]="";
|
|
int luckid = rand() % lucknum;
|
|
int charaindex;
|
|
for(k=0;k<3;k++){
|
|
charaindex = rand() % CHAR_getPlayerMaxNum();
|
|
if(CHAR_CHECKINDEX(charaindex) == TRUE){
|
|
if(luckstar[luckid].pet > 0){
|
|
int ret;
|
|
int enemynum;
|
|
int i;
|
|
enemynum = ENEMY_getEnemyNum();
|
|
for( i = 0; i < enemynum; i ++ ){
|
|
if( ENEMY_getInt( i, ENEMY_ID) == luckstar[luckid].pet) {
|
|
break;
|
|
}
|
|
}
|
|
if( i != enemynum ){
|
|
ret = ENEMY_createPetFromEnemyIndex(charaindex, i);
|
|
if( CHAR_CHECKINDEX( ret)){
|
|
snprintf( token,sizeof( token), "¹§Ï²Ä㣬»ñµÃ±¾´ÎÐÒÔËÔùËͳèÎï %s £¡",ENEMY_getChar( i, ENEMY_NAME));
|
|
CHAR_talkToCli( charaindex, -1, token, CHAR_COLORGREEN);
|
|
int j;
|
|
for( j = 0; j < CHAR_MAXPETHAVE; j ++ ){
|
|
if( CHAR_getCharPet( charaindex, j ) == ret )break;
|
|
}
|
|
if( j != CHAR_MAXPETHAVE ){
|
|
if( CHAR_CHECKINDEX( ret ) == TRUE ){
|
|
CHAR_setMaxExpFromLevel( ret, CHAR_getInt( ret, CHAR_LV ));
|
|
CHAR_setInt(ret, CHAR_VARIABLEAI, 10000);
|
|
}
|
|
|
|
CHAR_setInt( ret, CHAR_HP, CHAR_getWorkInt( ret, CHAR_WORKMAXHP ));
|
|
CHAR_complianceParameter( ret );
|
|
snprintf( token, sizeof( token ), "K%d", j );
|
|
CHAR_sendStatusString( charaindex, token );
|
|
snprintf( token, sizeof( token ), "W%d", j );
|
|
CHAR_sendStatusString( charaindex, token );
|
|
}
|
|
}else{
|
|
CHAR_talkToCli( charaindex, -1, "ºÜ±§Ç¸£¬ÓÉÓÚÄãÉíÉϳèÎïÒÑÂú£¬ÒÑ´í¹ýÕâ´ÎÐÒÔËÔùËͳèÎ", CHAR_COLORYELLOW);
|
|
}
|
|
snprintf( strPet,sizeof( strPet), "³èÎ%s", ENEMY_getChar( i, ENEMY_NAME));
|
|
}else{
|
|
snprintf( strPet,sizeof( strPet), "³èÎ±àºÅ %d ²»´æÔÚ", luckstar[luckid].pet);
|
|
}
|
|
}
|
|
if(luckstar[luckid].item > 0){
|
|
int itemindex = ITEM_makeItemAndRegist( luckstar[luckid].item );
|
|
if( ITEM_CHECKINDEX( itemindex) ){
|
|
int emptyitemindexinchara = CHAR_findEmptyItemBox( charaindex );
|
|
if( emptyitemindexinchara >= 0 ){
|
|
if( itemindex != -1 ){
|
|
CHAR_setItemIndex( charaindex, emptyitemindexinchara, itemindex );
|
|
ITEM_setWorkInt(itemindex, ITEM_WORKOBJINDEX,-1);
|
|
ITEM_setWorkInt(itemindex, ITEM_WORKCHARAINDEX,charaindex);
|
|
CHAR_sendItemDataOne( charaindex, emptyitemindexinchara);
|
|
|
|
snprintf( token, sizeof( token), "¹§Ï²Ä㣬»ñµÃ±¾´ÎÐÒÔËÔùËÍÎïÆ· %s", ITEM_getChar( itemindex, ITEM_NAME));
|
|
CHAR_talkToCli( charaindex, -1,token, CHAR_COLORGREEN);
|
|
}
|
|
}else{
|
|
CHAR_talkToCli( charaindex, -1, "ºÜ±§Ç¸£¬ÓÉÓÚÄãÉíÉÏÎïÆ·ÒÑÂú£¬ÒÑ´í¹ýÕâ´ÎÐÒÔËÔùËÍÎïÆ·£¡", CHAR_COLORYELLOW);
|
|
}
|
|
snprintf( strItem,sizeof( strItem), "땮᣼%s", ITEM_getChar( itemindex, ITEM_NAME));
|
|
}else{
|
|
snprintf( strPet,sizeof( strPet), "ÎïÆ·£º±àºÅ %d ²»´æÔÚ", luckstar[luckid].item);
|
|
}
|
|
}
|
|
/*
|
|
if(luckstar[luckid].gold > 0){
|
|
CHAR_setInt( charaindex , CHAR_GOLD , CHAR_getInt( charaindex , CHAR_GOLD ) + luckstar[luckid].gold);
|
|
CHAR_complianceParameter( charaindex );
|
|
CHAR_send_P_StatusString( charaindex , CHAR_P_STRING_GOLD);
|
|
snprintf( strGold,sizeof( strGold), "ʯ±Ò£º%d", luckstar[luckid].gold);
|
|
sprintf( token, "¹§Ï²Ä㣬»ñµÃ±¾´ÎÐÒÔËÔùËÍ %d ʯ±Ò£¡", luckstar[luckid].gold);
|
|
CHAR_talkToCli( charaindex, -1,token, CHAR_COLORPURPLE );
|
|
}
|
|
if(luckstar[luckid].vippoint > 0){
|
|
CHAR_setInt( charaindex , CHAR_AMPOINT , CHAR_getInt( charaindex , CHAR_AMPOINT ) + luckstar[luckid].vippoint);
|
|
snprintf( strVippoint,sizeof( strVippoint), "»ý·Öµã£º%d", luckstar[luckid].vippoint);
|
|
sprintf( token, "¹§Ï²Ä㣬»ñµÃ±¾´ÎÐÒÔËÔùËÍ %d »ý·Öµã£¡", luckstar[luckid].vippoint);
|
|
CHAR_talkToCli( charaindex, -1,token, CHAR_COLORPURPLE );
|
|
}
|
|
*/
|
|
break;
|
|
}
|
|
}
|
|
|
|
int playernum = CHAR_getPlayerMaxNum();
|
|
|
|
if(k < 3){
|
|
sprintf(token, "ÈÃÎÒÃÇÒ»Æð×£ºØ %s ³ÉΪ±¾´ÎÐÒÔËÐÇÍæ¼Ò~»ñµÃÒÔϽ±Æ·£º", CHAR_getChar( charaindex, CHAR_NAME));
|
|
}else{
|
|
sprintf(token, "ºÜÒź¶£¬±¾´ÎÐÒÔËÐÇδ²úÉú~×£Ô¸Äú³ÉΪÏÂÒ»´ÎÐÒÔËÐÇ»ñµÃÕߣ¡");
|
|
}
|
|
|
|
for(k=0;k<playernum;k++){
|
|
if(CHAR_CHECKINDEX(k) == FALSE) continue;
|
|
CHAR_talkToCli( k, -1, token, CHAR_COLORPURPLE );
|
|
if(strlen(strPet) > 0){
|
|
CHAR_talkToCli( k, -1, strPet, CHAR_COLORPURPLE );
|
|
}
|
|
if(strlen(strItem) > 0){
|
|
CHAR_talkToCli( k, -1, strItem, CHAR_COLORPURPLE );
|
|
}
|
|
/*
|
|
if(strlen(strGold) > 0){
|
|
CHAR_talkToCli( k, -1, strGold, CHAR_COLORPURPLE );
|
|
}
|
|
if(strlen(strVippoint)> 0){
|
|
CHAR_talkToCli( k, -1, strVippoint, CHAR_COLORPURPLE );
|
|
}
|
|
*/
|
|
}
|
|
}
|
|
}
|
|
#endif
|