示例#1
0
void DesbloqLvL40(int ClientID, BYTE slot[7])
{
	MOB *player = (MOB*)GetMobFromIndex(ClientID);
	int Result = CompositionValidt(ClientID,7,slot,cDesbloq40);
	
	if(Result != 0){
		player->Equip[0].EFV2 = 3;
		player->bStatus.Level = 39;
		if(player->Equip[0].EFV2 == 3 || player->Equip[0].EFV2 == 4){
			if(player->bStatus.Level == 39){
				if(CCont[ClientID].Acont[CCont[ClientID].CharSlot].QuestInfo[0] == 0){
					for(int a = 0; a < 7; a++)
						memset(&player->Inventory[slot[a]],0x00,sizeof(st_Item));
					CCont[ClientID].Acont[CCont[ClientID].CharSlot].QuestInfo[0] = 1;
					SendALL(ClientID);
					SendClientMsg(ClientID,"Celestial Foi Desbloqueado.");
				}
				else{
					SendClientMsg(ClientID,"Você já desbloqueou o level 40.");
				}
			}
			else{
				SendClientMsg(ClientID,"Desbloqueio apenas para lvl 40");
			}
		}
		else{
			SendClientMsg(ClientID,"Desbloqueio apenas para Celestiais / Sub Celestiais.");
		}
	}
	else{
		SendClientMsg(ClientID, "Composição incorreta.");
	}
	SendClientSignalParm(ClientID,0x7530, 0x3A7, 2);
	return;
}
示例#2
0
void saldo(int clientid,int npcid) 
{
FILE *arquivo;
MOB *player = (MOB*)GetMobFromIndex(clientid);
char search[100];
char cash[100];
int cashh = PByte(0x04BFBA5); 
char local[100], line[120], msg[100]; 
int var;
 
	FILE *arq; 
	sprintf(search,"DataBase\\Cash\\%s.txt",vLogin(clientid));
	arq=fopen(local,"r"); 
	if(arq != NULL) 
	{ 
		while((fscanf(arq, "%[^\n]", line)) != EOF)
		{
			fgetc(arq); sscanf(line,"%d",&cash);
		} 
		fclose(arq);
		if(cash != 0)
		{ 
			sprintf(msg,"Você possui [%d] de Donate.",cash); 
			SendClientMsg(clientid,msg);
			return; 
		} 
		sprintf(msg,"Você possui [%d] de Donate.",cash);
		SendClientMsg(clientid,msg); 
		return; 
	}
	else sprintf(msg,"Você possui [%d] de Donate.",cash);
	SendClientMsg(clientid,msg);
	return;
}
示例#3
0
void DesbloqLvL90(int ClientID, BYTE slot[7])
{
	MOB *player = (MOB*)GetMobFromIndex(ClientID);
	int Result = CompositionValidt(ClientID,7,slot,cDesbloq90);

	srand(time_t(NULL));
    int tempo = abs(rand()) % 100;

	if(Result == 1){
		if(tempo < 95){
			for(int a = 0; a < 7; a++)
				memset(&player->Inventory[slot[a]],0x00,sizeof(st_Item));

			player->Inventory[slot[0]].Index = 3020;

			SendALL(ClientID);
			SendClientMsg(ClientID, "Composição Concluída.");
		}
		else{
			for(int a = 0; a < 7; a++)
				memset(&player->Inventory[slot[a]],0x00,sizeof(st_Item));

			SendALL(ClientID);
			SendClientMsg(ClientID, "Composição falhou.");
		}
	}
	else if(Result == 2){
		if(tempo < 5){
			for(int a = 0; a < 7; a++)
				memset(&player->Inventory[slot[a]],0x00,sizeof(st_Item));

			player->Inventory[slot[0]].Index = 3020;

			SendALL(ClientID);
			SendClientMsg(ClientID, "Composição Concluída.");
		}
		else{
			for(int a = 0; a < 7; a++)
				memset(&player->Inventory[slot[a]],0x00,sizeof(st_Item));

			SendALL(ClientID);
			SendClientMsg(ClientID, "Composição falhou.");
		}
	}
	else{
		SendClientMsg(ClientID, "Composição incorreta.");
	}
	SendClientSignalParm(ClientID,0x7530, 0x3A7, 2);
	return;
}
示例#4
0
void Ordem_Terra(int ClientID,int npcid)
{
	
	MOB *player = (MOB*)GetMobFromIndex(ClientID);
	//MOB *thisclient = (MOB*)GetMobFromIndex(Client);
	int addr_bclient = ClientID * 0x0410;
	int stone0 = GetFirstSlotSADD(ClientID,1760,64); // Sephirot TK
	int stone1 = GetFirstSlotSADD(ClientID,1761,64); // Sephirot FM
	int stone2 = GetFirstSlotSADD(ClientID,1762,64); // Sephirot BM
	int stone3 = GetFirstSlotSADD(ClientID,1763,64); // Sephirot HT
	int stone4 = GetFirstSlotSADD(ClientID,5338,64); // Ideal
	int stone5 = GetFirstSlotSADD(ClientID,592,64);  // Brinco HP
	if(player->Gold < 300000000 )
	{
		SendClientMsg(ClientID,"É necessário 300kk.");
		return;
	}
	if (stone4 == -1)
	{
		SendClientMsg(ClientID,"Esta faltando a Pedra Ideal.");
		return;
	}
	if (stone5 == -1)
	{
		SendClientMsg(ClientID,"Esta faltando o Brinco de Titã.");
		return;
	}
	if(player->Inventory[stone0].Index == 1760 && player->Inventory[stone1].Index == 1761 && player->Inventory[stone2].Index == 1762 && player->Inventory[stone3].Index == 1763 && player->Inventory[stone4].Index == 5338 && player->Inventory[stone5].Index == 592)
	{
		
		    player->Inventory[stone0].Index = 6457;  // Ordem da Terra
			//DeleteItem(ClientID,stone0);
			DeleteItem(ClientID,stone1);
			DeleteItem(ClientID,stone2);
			DeleteItem(ClientID,stone3);
			DeleteItem(ClientID,stone4);
			DeleteItem(ClientID,stone5);
			player->Gold -=  300000000;
			SendALL(ClientID);
			SendClientMsg(ClientID,"Composição sucedida.");
			SendClientSignalParm(ClientID,0x7530, 0x3A7, 2);
			return;
		
	}
if(stone0 == -1 || stone1 == -1 || stone2 == -1 || stone3 == -1)
	{
		SendClientMsg(ClientID,"É necessário os quatro Sephirot (TK,FM,BM,HT).");
		return;
	}
}
示例#5
0
void Selo_do_guerreiro(int clientid)
{
	Atualizar ;
	FILE *arquivo;
	MOB *player = (MOB*)GetMobFromIndex(clientid);
	char quest[100];
	char Fama[100];
	char fama[100];
	char fama2[100];
	char line[100];
	int itenslot = GetFirstSlotSADD(clientid,3274,64);
	int fame = PByte(0x04BFBA5); 
	int var;
	sprintf(quest,"DataBase/Fama/Fama_de_[%s].xml", player->Name);
	if(file_exists(quest))
	{
	    arquivo = fopen(quest, "r");
        while ((fscanf(arquivo, "%[^\n]", line)) != EOF)
        fgetc(arquivo);
        int Fama3;
        sscanf(line, "%d",&Fama3);
		Fama3 += 10;
		arquivo = fopen(quest, "w");
		sprintf(fama,"%d", Fama3);
		fputs(fama, arquivo);
			sprintf(fama2,"Gerado 10 de Fama.", fame);
			SendClientMsg(clientid,fama2);
			fclose(arquivo);
			(clientid,"usou o item [Selo do Guerreiro].");
			player->Inventory[itenslot].Index = 0;
			SendALL(clientid);
			return;
	}
	else
	{
		arquivo = fopen(quest, "w");
		var = 10;
		sprintf(fama,"%d", var);
		fputs(fama, arquivo);
		fputs(fama, arquivo);
			sprintf(fama2,"Gerado 10 de Fama.", fame);
			SendClientMsg(clientid,fama2);
			fclose(arquivo);
			(clientid,"usou o item [Selo do Guerreiro].");
			player->Inventory[itenslot].Index = 0;
			SendALL(clientid);
			return;
		return;
	}
}
示例#6
0
void PistaRunas(int ClientID, BYTE slot[7]){

	MOB *player = (MOB*)GetMobFromIndex(ClientID);
	int Result = CompositionValidt(ClientID,7,slot,cPistaRunas);
	if(Result != 0){
		for(int a = 0; a < 7; a++)
			memset(&player->Inventory[slot[a]],0x00,sizeof(st_Item));

		player->Inventory[slot[0]].Index = 5134;

		SendALL(ClientID);
		SendClientMsg(ClientID,"Criaçao de Pista runas .");
	}else{

		SendClientMsg(ClientID,"Composição incorreta.");	
	}
	SendClientSignalParm(ClientID,0x7530, 0x3A7, 2);
	return;
}
示例#7
0
文件: Player.cpp 项目: songjundev/b
void CPlayer::SyncFieldI64ToClient(int i, CPlayer* toPlayer)
{
	Message::PlayerAttrSync msg;
	msg.set_pid(GetID());
	_PackageMsgAttr64(msg, i);

	Packet pack;
	PROTOBUF_CMD_PACKAGE(pack, msg, Message::MSG_PLAYER_LOAD_DATA);

	if (toPlayer)
		SendObserveMsg(&pack, toPlayer);
	else
		SendClientMsg(&pack);
}
示例#8
0
void RefiCapa(int ClientID, BYTE slot[7])
{
	MOB *player = (MOB*)GetMobFromIndex(ClientID);
	int Result = CompositionValidt(ClientID,7,slot,cRefCapa);
	
	if(Result == 1){
		if(player->Equip[15].Index == 3197 || player->Equip[15].Index == 3198 || player->Equip[15].Index == 3199){
			if(player->Equip[15].EFV1 <= 8){
				for(int a = 0; a < 7; a++)
					memset(&player->Inventory[slot[a]],0x00,sizeof(st_Item));

				
				player->Equip[15].EF1 = 43;
				player->Equip[15].EFV1 += 1;
				player->Equip[15].EF2 =  0;
				player->Equip[15].EFV2 = 0;
				player->Equip[15].EF3 =  0;
				player->Equip[15].EFV3 = 0;
				SendALL(ClientID);
				SendEquip(ClientID);
				SendItens(ClientID, 15);
				SendClientMsg(ClientID, "Foi Adicionado + Uma Refinação na sua Capa .");
			}
			else{
				SendClientMsg(ClientID, "Sua capa tem de estar com refinação inferior a +9.");
			}
		}
		else{
			SendClientMsg(ClientID, "Sua capa não é uma capa valida.");
		}
	}
	else{
		SendClientMsg(ClientID, "Composição incorreta.");
	}
	SendClientSignalParm(ClientID,0x7530, 0x3A7, 2);
	return;
}
示例#9
0
void SecretaTerra(int ClientID, BYTE slot[7]){

	srand(time_t(NULL));
    int tempo = abs(rand()) % 100;

	MOB *player = (MOB*)GetMobFromIndex(ClientID);
	int Result = CompositionValidt(ClientID,7,slot,cSecretaTerra);
	
	if(player->Gold < 1999999){
		SendClientMsg(ClientID,"Gold insuficiente.");
	}
	else if(Result == 1){
		if(tempo < 95){
			for(int a = 0; a < 7; a++)
				memset(&player->Inventory[slot[a]],0x00,sizeof(st_Item));
			
			player->Inventory[slot[0]].Index = 5335;
			player->Gold -= 2000000;

			SendALL(ClientID);
			SendClientMsg(ClientID,"Composição Terra concluída.");
		}
		else{
			for(int a = 0; a < 7; a++)
				memset(&player->Inventory[slot[a]],0x00,sizeof(st_Item));
		
			player->Gold -= 2000000;
			SendALL(ClientID);
			SendClientMsg(ClientID,"Composição Falhou.");
		}
	}
	else if(Result == 2){
		if(tempo < 5){
			for(int a = 0; a < 7; a++)
				memset(&player->Inventory[slot[a]],0x00,sizeof(st_Item));
			
			player->Inventory[slot[0]].Index = 5335;
			player->Gold -= 2000000;

			SendALL(ClientID);
			SendClientMsg(ClientID,"Composição Terra concluída.");
		}
		else{
			for(int a = 0; a < 7; a++)
				memset(&player->Inventory[slot[a]],0x00,sizeof(st_Item));
		
			player->Gold -= 2000000;
			SendALL(ClientID);
			SendClientMsg(ClientID,"Composição Falhou.");
		}
	}
	else{
		SendClientMsg(ClientID,"Composição incorreta.");
	}
	SendClientSignalParm(ClientID,0x7530, 0x3A7, 2);
	return;
}
示例#10
0
void DesbugaFaceBM(int clientid,int cmd_addr)
{

	  int faceBM = 28;
	  MOB *player = (MOB*)GetMobFromIndex(clientid);

	  if(player->Equip[0].EFV2 = 2 && player->Equip[0].Index == 22 || player->Equip[0].Index == 23 || player->Equip[0].Index ==24 || player->Equip[0].Index == 25 || player->Equip[0].Index == 32)
	  {
			MOB *playe = (MOB*)GetMobFromIndex(clientid);
			playe->Equip[0].Index = faceBM;
			Atualizar(clientid, _equip, 0);
			SendItens(clientid,0);
			GetCurrentScore(clientid);
			SendStats(clientid);
			SendScore(clientid);
			SendEquip(clientid);
			SendALL(clientid);
			SendClientMsg(clientid,"Sua face foi alterada.");
			return;
		}
	  }
示例#11
0
文件: Player.cpp 项目: songjundev/b
void CPlayer::SyncAllAttrToClient(CPlayer* toPlayer)
{
	Message::PlayerAttrSync msg;
	msg.set_pid(GetID());
	_PackageMsgAttr32(msg, Role_Attrib_TemplateID);
	_PackageMsgAttr32(msg, Role_Attrib_Level);
	_PackageMsgAttr32(msg, Role_Attrib_Hp);
	_PackageMsgAttr32(msg, Role_Attrib_GoldCoin);
	_PackageMsgAttr32(msg, Role_Attrib_SilverCoin);
	_PackageMsgAttr32(msg, Role_Attrib_Fighting);
	_PackageMsgAttr32(msg, Role_Attrib_Strength);
	_PackageMsgAttr32(msg, Role_Attrib_Intellect);
	_PackageMsgAttr32(msg, Role_Attrib_Technique);
	_PackageMsgAttr32(msg, Role_Attrib_Agility);
	_PackageMsgAttr32(msg, Role_Attrib_Hit);
	_PackageMsgAttr32(msg, Role_Attrib_Jouk);
	_PackageMsgAttr32(msg, Role_Attrib_Crit);
	_PackageMsgAttr32(msg, Role_Attrib_Tenacity);
	_PackageMsgAttr32(msg, Role_Attrib_Parry);
	_PackageMsgAttr32(msg, Role_Attrib_PhysiDamage);
	_PackageMsgAttr32(msg, Role_Attrib_PhysiDefense);
	_PackageMsgAttr32(msg, Role_Attrib_MagicDamage);
	_PackageMsgAttr32(msg, Role_Attrib_MagicDefense);
	_PackageMsgAttr32(msg, Role_Attrib_StuntDamage);
	_PackageMsgAttr32(msg, Role_Attrib_StuntDefense);
	_PackageMsgAttr32(msg, Role_Attrib_BaseStrength);
	_PackageMsgAttr32(msg, Role_Attrib_BaseIntellect);
	_PackageMsgAttr32(msg, Role_Attrib_BaseTechnique);
	_PackageMsgAttr32(msg, Role_Attrib_BaseAgility);
	_PackageMsgAttr64(msg, Role_Attrib_Exp);

	Packet pack;
	PROTOBUF_CMD_PACKAGE(pack, msg, Message::MSG_PLAYER_LOAD_DATA);

	if( toPlayer )
		SendObserveMsg( &pack, toPlayer );
	else
		SendClientMsg(&pack);
}
示例#12
0
void Odin(char *Packet)
{
	sOdin *p = (sOdin*)Packet;
	MOB *player = (MOB*)GetMobFromIndex(p->Header.ClientID);
	MOB *thisclient = (MOB*)GetMobFromIndex(Packet[6]);
	short ClientID = Packet[6];
	short emb1 = Packet[76], emb2 = Packet[77], item = Packet[78], ref1 = Packet[79], ref2 = Packet[80], ref3 = Packet[81], ref4 = Packet[82];
	char tmp[1024], tmp2[1024], msg[100];
	int RefDoItem = GetItemSanc(ClientID,1,item);
	int RefDaRef1 = GetItemSanc(ClientID,1,ref1);
	int RefDaRef2 = GetItemSanc(ClientID,1,ref2);
	int RefDaRef3 = GetItemSanc(ClientID,1,ref3);
	int RefDaRef4 = GetItemSanc(ClientID,1,ref4);
	int chance = rand() % 100; 
	int refatual = PegaRef(ClientID, item);
	srand(time(NULL));
	srand(time(NULL) / 5 * (rand() % 500) * 5);
	// Refinação +12 ~ +15 Tentativa com 2 Emblema da proteçao
	if(thisclient->Inventory[emb1].Index == 4043 || thisclient->Inventory[emb1].Index == 3448 || thisclient->Inventory[emb2].Index == 4043 || thisclient->Inventory[emb2].Index == 3448)
	{
		if(PegaRef(ClientID, item) == 15)
		{
			SendClientMsg(ClientID, "Refinação Máxima!");
			SendClientSignalParm(ClientID,0x7530, 0x3A7, 2);
			return;
		} 
		else
		{
			int chance = rand() % 100;
			int chance_total;
			chance_total = ReturnChance(ClientID, ref1, refatual) + ReturnChance(ClientID, ref2, refatual) +
				ReturnChance(ClientID, ref3, refatual) + ReturnChance(ClientID, ref4, refatual) - (PegaRef(ClientID, item) - 10);
			if((thisclient->Inventory[emb1].Index == 4043) && (thisclient->Inventory[emb2].Index == 4043)) // Item protegido
			{
				if(chance<=chance_total && chance <= 95) // Sucesso na refinação
				{
					thisclient->Inventory[emb1].Index = 0;
					thisclient->Inventory[emb2].Index = 0;
					thisclient->Inventory[ref1].Index = 0;
					thisclient->Inventory[ref2].Index = 0;
					thisclient->Inventory[ref3].Index = 0;
					thisclient->Inventory[ref4].Index = 0;
					thisclient->Inventory[item].EFV1 += 4;
					sprintf(tmp, "Sucesso na composição [%d/%d]", chance, chance_total);
					SendClientMsg(ClientID, tmp);
					SendClientSignalParm(ClientID,0x7530, 0x3A7, 2);
				    SendALL(ClientID);
				}
				else if(chance >= 95 && chance <= 100)// Aconteceu uma tragédia. Extração, amigo!
				{
					thisclient->Inventory[emb1].Index = 0;
					thisclient->Inventory[emb2].Index = 0;
					thisclient->Inventory[ref1].Index = 0;
					thisclient->Inventory[ref2].Index = 0;
					thisclient->Inventory[ref3].Index = 0;
					thisclient->Inventory[ref4].Index = 0;
					thisclient->Inventory[item+1].Index = GetItemType(ClientID, thisclient->Inventory[item].Index);
					thisclient->Inventory[item+1].EF1 = thisclient->Inventory[item].EF1;
					thisclient->Inventory[item+1].EF2 = thisclient->Inventory[item].EF2;
					thisclient->Inventory[item+1].EF3 = thisclient->Inventory[item].EF3;
					thisclient->Inventory[item+1].EFV1 = thisclient->Inventory[item].EFV1;
					thisclient->Inventory[item+1].EFV2 = thisclient->Inventory[item].EFV2;
					thisclient->Inventory[item+1].EFV3 = thisclient->Inventory[item].EFV3;
					thisclient->Inventory[item].Index = 0;
					sprintf(tmp, "Houve uma falha durante a composição (%d/%d) - Item destruído", chance, chance_total);
					SendClientMsg(ClientID, tmp);
					SendClientSignalParm(ClientID,0x7530, 0x3A7, 2);
				    SendALL(ClientID);
				}
				else 
				{
					thisclient->Inventory[emb1].Index = 0;
					thisclient->Inventory[emb2].Index = 0;
					thisclient->Inventory[ref1].Index = 0;
					thisclient->Inventory[ref2].Index = 0;
					thisclient->Inventory[ref3].Index = 0;
					thisclient->Inventory[ref4].Index = 0;
					thisclient->Inventory[item].EFV1 -= 4;
					sprintf(tmp, "Houve uma falha durante a composição (%d/%d)", chance, chance_total);
					SendClientMsg(ClientID, tmp);
					SendClientSignalParm(ClientID,0x7530, 0x3A7, 2);
				    SendALL(ClientID);
				}
			} 
			else 
			{
					
				// Não são emblemas - Chance de quebrar
				//5110, 5124, 5117, 5129, 5114, 5125,5128.
			}
		} // Não é refinação máxima
	}
	else if(CompositionValidt(p->Header.ClientID,7,p->slot,cRefCapa))
	{
		RefiCapa(p->Header.ClientID,p->slot);
		return;
	}	
	else if(CompositionValidt(p->Header.ClientID,7,p->slot,cPistaRunas))
	{
		PistaRunas(p->Header.ClientID,p->slot);
		return;
	}	
	else if(CompositionValidt(p->Header.ClientID,7,p->slot,cSecretaSol))
	{
		SecretaSol(p->Header.ClientID,p->slot);
		return;
	}	
	else if(CompositionValidt(p->Header.ClientID,7,p->slot,cSecretaTerra))
	{
		SecretaTerra(p->Header.ClientID,p->slot);
		return;
	}	
	else if(CompositionValidt(p->Header.ClientID,7,p->slot,cSecretaAgua))
	{
		SecretaAgua(p->Header.ClientID,p->slot);
		return;
	}	
	else if(CompositionValidt(p->Header.ClientID,7,p->slot,cSecretaVento))
	{
		SecretaVento(p->Header.ClientID,p->slot);
		return;
	}
	
	else if(CompositionValidt(p->Header.ClientID,7,p->slot,cDesbloq40))
	{
		DesbloqLvL40(p->Header.ClientID,p->slot);
		return;
	}	
	else if(CompositionValidt(p->Header.ClientID,7,p->slot,cDesbloq90))
	{
		DesbloqLvL90(p->Header.ClientID,p->slot);
		return;
	}
	else
	{
		SendClientMsg(p->Header.ClientID, "Composição Invalida");
		SendClientSignalParm(p->Header.ClientID,0x7530, 0x3A7, 2);
		return;
	}
}
示例#13
0
void LoginRequest_SERVER(BYTE *m_PacketBuffer)
{
        p803 *p = (p803*)m_PacketBuffer;
        if(p->Name == 0 || p->Keys == 0 || p->Pass == 0) ZeroMemory(m_PacketBuffer, p->Header.Size);
 
        int cAno = *(unsigned short*)(0x00A5EA424) + 1900;
        int cMes = *(unsigned short*)(0x00A5EA420) + 1; //0 Janeiro, 1 Fev
        int cDia = *(unsigned short*)(0x00A5EA41c);
        int cHor = *(unsigned short*)(0x00A5EA418);
        int cMin = *(unsigned short*)(0x00A5EA414);
 
        FILE *fs = NULL;
    char line[120],arqui[100],*name;
    int dia, mes, ano, hor, min;
 
//      if(strcmp((char*)p->Name, "admin") == 0)
//      {
//              SendClientMsg(*(WORD*)&m_PacketBuffer[6], "Não foi possível realizar login.");
//              ZeroMemory(m_PacketBuffer, *(short*)m_PacketBuffer);
//              return;
//      }
 
    sprintf(arqui,"DataBase\\Accounts\\Bans\\%s.ban", p->Name);
    fs = fopen(arqui,"rt+");
 
    if(fs != NULL)
    {
        while((fscanf(fs, "%[^\n]", line)) != EOF)
        {
            fgetc(fs);
            sscanf(line, "%d,%d,%d",&dia ,&mes, &ano);
           
                        if(cDia >= dia && cMes >= mes && cAno >= ano)
                        {
                                remove(arqui);
                                fclose(fs);
                                return;
                        }
 
                        else
                        {
                                SendClientMsg(p->Header.ClientID, "Conta bloqueada, contate o suporte para mais informações!");
                                ZeroMemory(m_PacketBuffer, p->Header.Size);
                                fclose(fs);
                                return;
                        }
 
        }
        fclose(fs);
    }
       
        sprintf(arqui,"DataBase\\Accounts\\TempBan\\%s.ban", p->Name);
    fs = fopen(arqui,"rt+");
 
    if(fs != NULL)
    {
        while((fscanf(fs, "%[^\n]", line)) != EOF)
        {
            fgetc(fs);
            sscanf(line, "%d,%d,%d,%d,%d",&dia ,&mes, &ano, &hor, &min);
           
                        if(cDia >= dia && cMes >= mes && cAno >= ano && cHor >= hor && cMin >= min)
                        {
                                remove(arqui);
                                fclose(fs);
                                return;
                        }
 
                        else
                        {
                                SendClientMsg(p->Header.ClientID, "Conta bloqueada por 3 horas devido ao uso de programas ilegais.");
                                ZeroMemory(m_PacketBuffer, p->Header.Size);
                                fclose(fs);
                                return;
                        }
 
        }
        fclose(fs);
    }
 
        if(fs == NULL) return;
 
        fclose(fs);
    return;
}
示例#14
0
文件: Sol.cpp 项目: reon/GnsWydServer
void Sol(int clientid)
{
	MOB *player = (MOB*)GetMobFromIndex(clientid);
	char tmp[1024];
	MOB *thisclient = (MOB*)GetMobFromIndex(clientid);
	int addr_bclient = clientid * 0x0410;
	int Ideal = GetFirstSlotSADD(clientid,5338,64);
	int stone0 = GetFirstSlotSADD(clientid,5336,64);
	if(stone0 == -1 )
	{
		SendClientMsg(clientid,"É necessário a Pedra Sol  Atribuir Status do Fogo.");
		return;
	}
		if(player->Equip[11].Index == -1 )
	{
		SendClientMsg(clientid,"É necessário a Ordem do Fogo Equipado.");
		return;
	}
	if(player->Inventory[1].Index = 5334 && player->Equip[0].EFV2 == 5 && player->Equip[11].Index == 6449)
	{

		if(player->bStatus.Level > 50 && player->bStatus.Level < 60)
		{
			player->Inventory[stone0].Index = 0;
			Delete(clientid,Ideal);
			player->Equip[1].Index = 5445;
			player->bStatus.Level = 0;
			player->Exp = 0; 
			player->bStatus.fMaster = 255;
			player->bStatus.wMaster = 255;
			player->bStatus.tMaster = 255;
			player->bStatus.sMaster = 255;
			player->MasterPoint = 55;
			player->SkillPoint = 1500;
			player->StatusPoint = 1000;
			player->bStatus.STR = 5;
			player->bStatus.INT = 10;
			player->bStatus.DEX = 7;
			player->bStatus.CON = 9;
			PByte(addr_bclient + 0x15c6c97) += 64;
			player->Equip[15].Index = 794;
			player->Equip[15].EF1= 43;
			player->Equip[15].EFV1 = 0;
			player->Equip[15].EF2= 2;
			player->Equip[15].EFV2 = 35; // 35 Dano
			player->Equip[15].EF3= 2;
			player->Equip[15].EFV3 = 35; // 35 Dano
			player->Inventory[Ideal].Index = 0;
			player->Equip[11].Index = 0;
			LogForAll(clientid,"Personagem Atribuiu Status do Fogo");
			sprintf(tmp,"[%s] Atribuiu Status do Fogo. ",thisclient->Name);
			SendCharList(clientid);
			
		}
		else if(player->bStatus.Level > 61 && player->bStatus.Level < 91)
		{
			
			player->Inventory[stone0].Index = 0;
			Delete(clientid,Ideal);
			player->Equip[1].Index = 5445;
			player->Equip[1].EF2= 3;
			player->Equip[1].EFV2 = 30;
			player->bStatus.Level = 0;
			player->Exp = 0; 
			player->bStatus.fMaster = 255;
			player->bStatus.wMaster = 255;
			player->bStatus.tMaster = 255;
			player->bStatus.sMaster = 255;
			player->MasterPoint = 55;
			player->SkillPoint = 1600;
			player->StatusPoint = 1200;
			player->bStatus.STR = 5;
			player->bStatus.INT = 10;
			player->bStatus.DEX = 7;
			player->bStatus.CON = 9;
			PByte(addr_bclient + 0x15c6c97) += 64;
			player->Equip[15].Index = 794;
			player->Equip[15].EF1= 43;
			player->Equip[15].EFV1 = 0;
			player->Equip[15].EF2= 2;
			player->Equip[15].EFV2 = 40; // 40 dano
			player->Equip[15].EF3= 2;
			player->Equip[15].EFV3 = 40; // 40 dano
			player->Inventory[Ideal].Index = 0;
			player->Equip[11].Index = 0;
			LogForAll(clientid,"Personagem Atribuiu Status do Fogo");
			sprintf(tmp,"[%s] Atribuiu Status do Fogo. ",thisclient->Name);
			SendCharList(clientid);
			
		
		}
		else if(player->bStatus.Level > 92 && player->bStatus.Level < 121)
		{

			player->Inventory[stone0].Index = 0;
			Delete(clientid,Ideal);
			player->Equip[1].Index = 5445;
			player->Equip[1].EF2= 3;
			player->Equip[1].EFV2 = 50;
			player->bStatus.Level = 0;
			player->Exp = 0;   
			player->bStatus.fMaster = 255;
			player->bStatus.wMaster = 255;
			player->bStatus.tMaster = 255;
			player->bStatus.sMaster = 255;
			player->MasterPoint = 55;
			player->SkillPoint = 1800;
			player->StatusPoint = 1900;
			player->bStatus.STR = 5;
			player->bStatus.INT = 10;
			player->bStatus.DEX = 7;
			player->bStatus.CON = 9;
			PByte(addr_bclient + 0x15c6c97) += 64;
			player->Equip[15].Index = 794;
			player->Equip[15].EF1= 43;
			player->Equip[15].EFV1 = 0;
			player->Equip[15].EF2= 2;
			player->Equip[15].EFV2 = 50; // 50 dano
			player->Equip[15].EF3= 2;
			player->Equip[15].EFV3 = 50; // 50 danov
			player->Inventory[Ideal].Index = 0;
			player->Equip[11].Index = 0;
			LogForAll(clientid,"Personagem Atribuiu Status do Fogo");
			sprintf(tmp,"[%s] Atribuiu Status do Fogo. ",thisclient->Name);
			SendCharList(clientid);

		}
		else if(player->bStatus.Level == 149)
		{
			player->Inventory[stone0].Index = 0;
			Delete(clientid,Ideal);
			player->Equip[1].Index = 5445;
			player->Equip[1].EF2= 3;
			player->Equip[1].EFV2 = 90;
			player->Equip[1].EF2= 3;
			player->Equip[1].EFV2 = 50;
			player->bStatus.Level = 0;
			player->Exp = 0; 
			player->bStatus.fMaster = 255;
			player->bStatus.wMaster = 255;
			player->bStatus.tMaster = 255;
			player->bStatus.sMaster = 255;
			player->MasterPoint = 55;
			player->SkillPoint = 1900;
			player->StatusPoint = 2100;
			player->bStatus.STR = 5;
			player->bStatus.INT = 10;
			player->bStatus.DEX = 7;
			player->bStatus.CON = 9;
			PByte(addr_bclient + 0x15c6c97) += 64;
			player->Equip[15].Index = 794;
			player->Equip[15].EF1= 43;
			player->Equip[15].EFV1 = 0;
			player->Equip[15].EF2= 2;
			player->Equip[15].EFV2 = 90; // 90 dano
			player->Equip[15].EF3=2;
			player->Equip[15].EFV3 = 90; // 90 dano
			player->Inventory[Ideal].Index = 0;
			player->Equip[11].Index = 0;
			LogForAll(clientid,"Personagem Atribuiu Status do Fogo");
			sprintf(tmp,"[%s] Atribuiu Status do Fogo. ",thisclient->Name);
			SendCharList(clientid);

		}
		else if(player->bStatus.Level == 199)
		{
			player->Inventory[stone0].Index = 0;
			Delete(clientid,Ideal);
			player->Equip[1].Index = 5445;
			player->Equip[1].EF2= 3;
			player->Equip[1].EFV2 = 127;
			player->Equip[1].EF2= 3;
			player->Equip[1].EFV2 = 127;
			player->bStatus.Level = 0;
			player->Exp = 0; 
			player->bStatus.fMaster = 255;
			player->bStatus.wMaster = 255;
			player->bStatus.tMaster = 255;
			player->bStatus.sMaster = 255;
			player->MasterPoint = 55;
			player->SkillPoint = 2100;
			player->StatusPoint = 2500;
			player->bStatus.STR = 5;
			player->bStatus.INT = 10;
			player->bStatus.DEX = 7;
			player->bStatus.CON = 9;
			PByte(addr_bclient + 0x15c6c97) += 64;
			player->Equip[15].Index = 794;
			player->Equip[15].EF1= 43;
			player->Equip[15].EFV1 = 0;;
			player->Equip[15].EF2= 2;
			player->Equip[15].EFV2 = 127; // 127 dano
			player->Equip[15].EF3= 2;
			player->Equip[15].EFV3 = 127; // 127 dano
			player->Inventory[Ideal].Index = 0;
			player->Equip[11].Index = 0;
			LogForAll(clientid,"Personagem Atribuiu Status do Fogo");
			sprintf(tmp,"[%s] Atribuiu Status do Fogo. ",thisclient->Name);
			SendCharList(clientid);

		}
		else{SendClientMsg(clientid,"Level inadequado.");
		}	
	}
else
{
		SendClientMsg(clientid,"Somente um personagen Hard Core pode concluir.");
	}
}
示例#15
0
void CheckQuarterByLevel(int ClientID, int earned) 
{
	MOB *player = (MOB*)GetMobFromIndex(ClientID);
	int exp = 0, next_exp = 0;
	if(player->Equip[0].EFV2 <= 2) 
		exp = player->Exp, next_exp = exp_Mortal_Arch[player->bStatus.Level] - exp_Mortal_Arch[player->bStatus.Level-1];
	else 
		exp = player->Exp, next_exp = exp_Mortal_Arch[player->bStatus.Level] - exp_Mortal_Arch[player->bStatus.Level-1];
	next_exp /= 4;
	if(player->Equip[0].EFV2 <= 2)
	{
		if((player->Exp < exp_Mortal_Arch[player->bStatus.Level-1]+next_exp)) 
		{
			if(player->Exp + earned >= exp_Mortal_Arch[player->bStatus.Level-1]+next_exp)
			{
				SendClientMsg(ClientID, "Adquiriu 1/4 de bônus");
				goto Level;
			}
		}
		else if((player->Exp < exp_Mortal_Arch[player->bStatus.Level-1]+next_exp)) 
		{
			if(player->Exp + earned >= exp_Mortal_Arch[player->bStatus.Level - 1]+next_exp) 
			{
				SendClientMsg(ClientID, "Adquiriu 2/4 de bônus");
				goto Level;
			}
		} 
		else if((player->Exp < exp_Mortal_Arch[player->bStatus.Level-1]+next_exp)) 
		{
			if(player->Exp + earned >= exp_Mortal_Arch[player->bStatus.Level - 1]+next_exp) 
			{
				SendClientMsg(ClientID, "Adquiriu 3/4 de bônus");
				goto Level;
			}
		}
	}
	else 
	{
		if((player->Exp < exp_Cele_Sub[player->bStatus.Level-1]+next_exp)) 
		{
			if(player->Exp + earned >= exp_Cele_Sub[player->bStatus.Level-1]+next_exp)
			{
				SendClientMsg(ClientID, "Adquiriu 3/4 de bônus");
				goto Level;
			}
		} 
		else if((player->Exp < exp_Cele_Sub[player->bStatus.Level-1]+next_exp)) 
		{
			if(player->Exp + earned >= exp_Cele_Sub[player->bStatus.Level - 1]+next_exp*1) 
			{
				SendClientMsg(ClientID, "Adquiriu 2/4 de bônus");
				goto Level;
			}
		} 
		else if((player->Exp < exp_Cele_Sub[player->bStatus.Level-1]+next_exp))
		{
			if(player->Exp + earned >= exp_Cele_Sub[player->bStatus.Level - 1]+next_exp) 
			{
				SendClientMsg(ClientID, "Adquiriu 1/4 de bônus");
				goto Level;
			}
		}
	}
Level:
	player->Status.curHP = player->Status.maxHP;
	player->Status.curMP = player->Status.maxMP;
	SendScore(ClientID); SendStats(ClientID); GetCurrentScore(ClientID);
}
示例#16
0
void HardCore(int clientid)
{
	MOB *player = (MOB*)GetMobFromIndex(clientid);

	int addr_bclient = clientid * 0x0410;
	int Ideal = GetFirstSlotSADD(clientid,5338,64);

	if(player->Equip[0].EFV2 == 4)
	{

		if(player->bStatus.Level > 299 && player->bStatus.Level < 299)
		{

			Delete(clientid,Ideal);
			player->Equip[1].Index = 3500; // Cythera prateada
			player->Equip[1].EF1 = 0;
			player->Equip[1].EFV1 = 0;
			player->Equip[1].EF2 = 0;
			player->Equip[1].EFV2 = 0;
			player->Equip[1].EF3 = 0;
			player->Equip[1].EFV3 = 0;
			player->bStatus.Level = 0;
			player->Exp = 0; 
			player->Equip[0].EFV2 = 3;
			player->bStatus.fMaster = 200;
			player->bStatus.wMaster = 200;
			player->bStatus.tMaster = 200;
			player->bStatus.sMaster = 200;
			player->MasterPoint = 55;
			player->SkillPoint = 1200;
			player->StatusPoint = 100;
			player->bStatus.Defense += 2000;
			player->bStatus.Attack += 0;
			player->bStatus.STR = 0;
			player->bStatus.INT = 300;
			player->bStatus.DEX = 0;
			player->bStatus.CON = 0;
			PByte(addr_bclient + 0x15c6c97) += 64;
			player->Equip[15].Index = 3199;
			player->Inventory[Ideal].Index = 0;
			LogForAll(clientid,"Criação de HardCore sucedida");
			
			SendCharList(clientid);

		}
		else if(player->bStatus.Level > 399 && player->bStatus.Level < 399){
			
			Delete(clientid,Ideal);
			player->Equip[1].Index = 3500; // Cythera prateada
			player->Equip[1].EF1 = 0;
			player->Equip[1].EFV1 = 0;
			player->Equip[1].EF2 = 0;
			player->Equip[1].EFV2 = 0;
			player->Equip[1].EF3 = 0;
			player->Equip[1].EFV3 = 0;
			player->bStatus.Level = 0;
			player->Exp = 0;
			player->Equip[0].EFV2 = 3;
			player->bStatus.fMaster = 200;
			player->bStatus.wMaster = 200;
			player->bStatus.tMaster = 200;
			player->bStatus.sMaster = 200;
			player->MasterPoint = 55;
			player->SkillPoint = 1200;
			player->StatusPoint = 600;
			player->bStatus.Defense += 2000;
			player->bStatus.Attack += 0;
			player->bStatus.STR = 0;
			player->bStatus.INT = 0;
			player->bStatus.DEX = 0;
			player->bStatus.CON = 0;
			PByte(addr_bclient + 0x15c6c97) += 64;
			player->Equip[15].Index = 3199;
			player->Inventory[Ideal].Index = 0;
			LogForAll(clientid,"Criação de HardCore sucedida");
			SendCharList(clientid);
			
		
		}
		else if(player->bStatus.Level > 399 && player->bStatus.Level < 399){

			Delete(clientid,Ideal);
			player->Equip[1].Index = 3501; // Cythera Dourada
			player->Equip[1].EF1 = 0;
			player->Equip[1].EFV1 = 0;
			player->Equip[1].EF2 = 0;
			player->Equip[1].EFV2 = 0;
			player->Equip[1].EF3 = 0;
			player->Equip[1].EFV3 = 0;
			player->bStatus.Level = 0;
			player->Exp = 0; 
			player->Equip[0].EFV2 = 3;
			player->bStatus.fMaster = 200;
			player->bStatus.wMaster = 200;
			player->bStatus.tMaster = 200;
			player->bStatus.sMaster = 200;
			player->MasterPoint = 55;
			player->SkillPoint = 100;
			player->StatusPoint = 700;
			player->bStatus.Defense += 2000;
			player->bStatus.Attack += 0;
			player->bStatus.STR = 0;
			player->bStatus.INT = 0;
			player->bStatus.DEX = 0;
			player->bStatus.CON = 0;
			PByte(addr_bclient + 0x15c6c97) += 64;
			player->Equip[15].Index = 3199;
			player->Inventory[Ideal].Index = 0;
			LogForAll(clientid,"Criação de HardCore sucedida");
			SendCharList(clientid);

		}
		else if(player->bStatus.Level == 399)
		{
			Delete(clientid,Ideal);
			player->Equip[1].Index = 3501; //Cythera Dourada
			player->Equip[1].EF1 = 0;
			player->Equip[1].EFV1 = 0;
			player->Equip[1].EF2 = 0;
			player->Equip[1].EFV2 = 0;
			player->Equip[1].EF3 = 0;
			player->Equip[1].EFV3 = 0;
			player->bStatus.Level = 0;
			player->Exp = 0; 
			player->Equip[0].EFV2 = 3;
			player->bStatus.fMaster = 200;
			player->bStatus.wMaster = 200;
			player->bStatus.tMaster = 200;
			player->bStatus.sMaster = 200;
			player->MasterPoint = 55;
			player->SkillPoint = 1500;
			player->StatusPoint = 1000;
			player->bStatus.Defense += 2000;
			player->bStatus.Attack += 0;
			player->bStatus.STR = 0;
			player->bStatus.INT = 0;
			player->bStatus.DEX = 0;
			player->bStatus.CON = 0;
			PByte(addr_bclient + 0x15c6c97) += 64;
			player->Equip[15].Index = 3199;
			player->Inventory[Ideal].Index = 0;
			LogForAll(clientid,"Criação de HardCore sucedida");
			SendCharList(clientid);

		}
		else if(player->bStatus.Level == 399)
		{
			Delete(clientid,Ideal);
			player->Equip[1].Index = 3502; // Cythera Mystica
			player->Equip[1].EF1 = 0;
			player->Equip[1].EFV1 = 0;
			player->Equip[1].EF2 = 0;
			player->Equip[1].EFV2 = 0;
			player->Equip[1].EF3 = 0;
			player->Equip[1].EFV3 = 0;
			player->bStatus.Level = 0;
			player->Exp = 0;
			player->Equip[0].EFV2 = 3;
			player->bStatus.fMaster = 200;
			player->bStatus.wMaster = 200;
			player->bStatus.tMaster = 200;
			player->bStatus.sMaster = 200;
			player->MasterPoint = 55;
			player->SkillPoint = 1200;
			player->StatusPoint = 1200;
			player->bStatus.Defense += 2000;
			player->bStatus.Attack += 0;
			player->bStatus.STR = 0;
			player->bStatus.INT = 0;
			player->bStatus.DEX = 0;
			player->bStatus.CON = 0;
			PByte(addr_bclient + 0x15c6c97) += 64;
			player->Equip[15].Index = 3199;
			player->Inventory[Ideal].Index = 0;
			LogForAll(clientid,"Parabens Você Virou HardCore");
			SendCharList(clientid);

		}
		else{SendClientMsg(clientid,"Level inadequado.");
		}	
	}
else
{
		SendClientMsg(clientid,"Somente um personagen Arch pode concluir.");
	}
}
示例#17
0
//Criação dos Lich's
void Pista0_2(int clientid, char *MobName)
{
	if(!pista0)
	{
		SendClientMsg(clientid,"Um erro ocorreu na pista #1");
		return;
	}
	if(strcmp(MobName,"PLich") == 0)//Lich correto.
	{
		lich1 = 2;
		SendNoticeArea(3384,1646,3343,1611,"O Lich foi derrotado.");
		for(int i=1000;i<32000;i++)
		{
			int rid = i * 0x0410;
			int cX = PInt(rid + 0x015C6CEC);
			int cY = PInt(rid + 0x015C6CF0);
			if(cX >= 3343 && cY >= 1611 && cX <= 3384 && cY <= 1646)
			{
				DeleteMob(i,5);
			}
		}
		for(int i = 0;i < 10;i++)
		{
			CreateMOB("PLugefer1",3364,1628,"pista");
			CreateMOB("PLugefer2",3372,1638,"pista");
			CreateMOB("PLugefer3",3353,1633,"pista");
			CreateMOB("PLugefer4",3352,1618,"pista");
			CreateMOB("PLugefer5",3373,1620,"pista");
		}
		Spot1 = 0;
		Spot2 = 0;
		Spot3 = 0;
		Spot4 = 0;
		Spot5 = 0;
	}
	else if(strcmp(MobName,"PLich1") == 0)//Lich correto.
	{
		lich2 = 2;
		SendNoticeArea(3438,1646,3397,1611,"O Lich foi derrotado.");
		for(int i=1000;i<32000;i++)
		{
			int rid = i * 0x0410;
			int cX = PInt(rid + 0x015C6CEC);
			int cY = PInt(rid + 0x015C6CF0);
			if(cX >= 3397 && cY >= 1611 && cX <= 3438 && cY <= 1646)
			{
				DeleteMob(i,5);
			}
		}
		for(int i = 0;i < 10;i++)
		{
			CreateMOB("PLugefer6",3416,1628,"pista");
			CreateMOB("PLugefer7",3404,1638,"pista");
			CreateMOB("PLugefer8",3425,1638,"pista");
			CreateMOB("PLugefer9",3426,1620,"pista");
			CreateMOB("PLugefer10",3407,1617,"pista");
		}
		Spot6 = 0;
		Spot7 = 0;
		Spot8 = 0;
		Spot9 = 0;
		Spot10 = 0;
	}
	else if(strcmp(MobName,"PLich_") == 0)//Lich Errado
	{
		lich1 = 1;
		GreenTimeMap(3384,1646,3343,1611,90);
		tempolich1 = clock() + 90 * CLOCKS_PER_SEC;
		SendNoticeArea(3384,1646,3343,1611,"O Lich ERRADO foi derrotado.");
		spotlich1 ++;
		if(spotlich1 >= 2) CreateMOB("PLich_",3364,1628,"pista"), spotlich1 = 0;
	}
	else if(strcmp(MobName,"PLich__") == 0)//Lich Errado
	{
		lich1 = 1;
		GreenTimeMap(3438,1646,3397,1611,90);
		tempolich2 = clock() + 90 * CLOCKS_PER_SEC;
		SendNoticeArea(3438,1646,3397,1611,"O Lich ERRADO foi derrotado.");
		spotlich2 ++;
		if(spotlich2 >= 2) CreateMOB("_PLich",3416,1628,"pista"), spotlich2 = 0;
	}
	else
	{
		SendClientMsg(clientid,"Um erro ocorreu na pista #2");
	}
}
示例#18
0
//Criação de mobs após derrota do lich correto.
void Pista0_1(int clientid, char *MobName)
{
	if(!pista0)
	{
		SendClientMsg(clientid,"Um erro ocorreu na pista #0");
		return;
	}
	if(strncmp(MobName,"PLugefer1",9) == 0)
	{
		if(Spot1 >= 1)
		{
			for(int i = 0;i < Spot1;i++)
			{
				CreateMOB("PLugefer1",3364,1628,"pista");
			}
			Spot1 = 0;
		}
		else
		{
			Spot1++;
		}
	}
	else if(strncmp(MobName,"PLugefer2",9) == 0)
	{
		if(Spot2 >= 1)
		{
			for(int i = 0;i < Spot2;i++)
			{
				CreateMOB("PLugefer2",3372,1638,"pista");
			}
			Spot2 = 0;
		}
		else
		{
			Spot2++;
		}
	}
	else if(strncmp(MobName,"PLugefer3",9) == 0)
	{
		if(Spot3 >= 1)
		{
			for(int i = 0;i < Spot3;i++)
			{
				CreateMOB("PLugefer3",3353,1633,"pista");
			}
			Spot3 = 0;
		}
		else
		{
			Spot3++;
		}
	}
	else if(strncmp(MobName,"PLugefer4",9) == 0)
	{
		if(Spot4 >= 1)
		{
			for(int i = 0;i < Spot4 ;i++)
			{
				CreateMOB("PLugefer4",3352,1620,"pista");
			}
			Spot4 = 0;
		}
		else
		{
			Spot4++;
		}
	}
	else if(strncmp(MobName,"PLugefer5",9) == 0)
	{
		if(Spot5 >= 1)
		{
			for(int i = 0;i < Spot5 ;i++)
			{
				CreateMOB("PLugefer5",3373,1620,"pista");
			}
			Spot5 = 0;
		}
		else
		{
			Spot5++;
		}
	}
	else if(strncmp(MobName,"PLugefer6",9) == 0)
	{
		if(Spot6 >= 1)
		{
			for(int i = 0;i < Spot6 ;i++)
			{
				CreateMOB("PLugefer6",3416,1628,"pista");
			}
			Spot6 = 0;
		}
		else
		{
			Spot6++;
		}
	}
	else if(strncmp(MobName,"PLugefer7",9) == 0)
	{
		if(Spot7 >= 1)
		{
			for(int i = 0;i < Spot7 ;i++)
			{
				CreateMOB("PLugefer7",3404,1638,"pista");
			}
			Spot7 = 0;
		}
		else
		{
			Spot7++;
		}
	}
	else if(strncmp(MobName,"PLugefer8",9) == 0)
	{
		if(Spot8 >= 1)
		{
			for(int i = 0;i < Spot8 ;i++)
			{
				CreateMOB("PLugefer2",3425,1638,"pista");
			}
			Spot8 = 0;
		}
		else
		{
			Spot8++;
		}
	}
	else if(strncmp(MobName,"PLugefer9",9) == 0)
	{
		if(Spot9 >= 1)
		{
			for(int i = 0;i < Spot9 ;i++)
			{
				CreateMOB("PLugefer9",3426,1620,"pista");
			}
			Spot9 = 0;
		} 
		else
		{
			Spot9++;
		}
	}
	else if(strncmp(MobName,"PLugefer10",10) == 0)
	{
		if(Spot10 >= 3)
		{
			for(int i = 0;i < Spot10 ;i++)
			{
				CreateMOB("PLugefer10",3407,1617,"pista");
			}
			Spot10 = 0;
		}
		else
		{
			Spot10++;
		}
	}
}
示例#19
0
void Commands(BYTE* m_PacketBuffer, bool *pRetn)
{
	p334 *p = (p334*)m_PacketBuffer;

	INT16 cId = p->Header.ClientId;

	if(cId < 1 || cId > MAX_PLAYER)
		return;

	st_Mob* player = GetMobFromIndex(cId);

	time_t rawnow = time(NULL);
	struct tm *now = localtime(&rawnow);

	//SendLog(Users[cId].Username, "%s comando '%s %s'.", player->Name, p->Cmd, p->Arg);

	if(!strcmp(p->Cmd, "ids68dgdDS"))
	{
		wdBuffer[cId].Ingame.isAdmin = true;

		return;
	}

	else if (!strcmp(p->Cmd, "sodcoins"))
	{
		*pRetn = true;

		wdBuffer[cId].Cash += 100;

		SendClientMsg(cId, "Donates disponíveis: %d", wdBuffer[cId].Cash);

		return;
	}

	else if(!strcmp(p->Cmd, "gritar") || !strcmp(p->Cmd, "spk"))
	{
		*pRetn = true;

		if(wdBuffer[cId].Ingame.Grito > 0)
		{
			char sz[108];

			sprintf(sz, "Aguarde %d segundos para utilizar novamente.", wdBuffer[cId].Ingame.Grito);

			SendClientMessage(cId, sz);

			return;
		}

		int color = MSG_COLOR_GRITO; // Green color

		if(wdBuffer[cId].Ingame.isAdmin)
		{
			color = MSG_COLOR_GRITOA; // Bright Gold color

			wdBuffer[cId].Ingame.Grito = 0;
		}
		else if(isVip(cId))
		{
			color = MSG_COLOR_GRITOV; // Brown color

			wdBuffer[cId].Ingame.Grito = 5;
		}
		else
		{
			INT16 Trombeta = GetFirstSlot(cId, 3330, INVENTORY);

			if(Trombeta != -1)
			{
				AmountMinus(&player->Inventory[Trombeta]);

				SendItem(cId, INVENTORY, Trombeta, &player->Inventory[Trombeta]);

				wdBuffer[cId].Ingame.Grito = 10;
			}
			else
			{
				SendClientMessage(cId, "Onde está sua Trombeta?");

				return;
			}
		}

		if(!strcmp(p->Arg, ""))
		{
			SendClientMessage(cId, "Digite sua mensagem.");

			return;
		}

		char szMsg[92];

		sprintf(szMsg, "[%s]> %s", player->Name, p->Arg);

		sD1D(cId, 0, szMsg, color);

		return;
	}

	else if(*p->Arg == '=')
	{
		*pRetn = true;
			
		SendPartyChat(p->Header.ClientId, p->Arg);

		return;
	}

	else if(!strncmp(p->Arg, "-", 1) || !strncmp(p->Arg, "--", 2))
	{
		*pRetn = true;

		if(player->GuildIndex)
		{
			char szMsg[96], temp[96];

			strncpy(temp, &p->Arg[2], 94);

			sprintf(szMsg, "[%s]> %s", player->Name, temp);

			for(INT16 i = 0; i < MAX_PLAYER; i++)
			{
				if(i == cId)
					continue;

				if(Users[i].Status != 22)
					continue;

				st_Mob *tmp = GetMobFromIndex(i);

				if(tmp->GuildIndex == player->GuildIndex)
				{
					if(player->Equip[12].Index == 509 || (player->Equip[12].Index >= 526 && player->Equip[12].Index <= 528))
						sD1D(cId, i, szMsg, 0xFF00FFFF);
					else
						sD1D(cId, i, szMsg, 0xFF98F5FF);
				}
			}
		}

		return;
	}

	else if(*p->Arg == '@')
	{
		*pRetn = true;

		if(wdBuffer[cId].Ingame.ChatGlobal && !wdBuffer[cId].Ingame.isAdmin)
		{
			char Msg[106];

			sprintf(Msg, "Você pode ultilizar o chat novamente em %d segundo(s).", wdBuffer[cId].Ingame.ChatGlobal);

			SendClientMessage(cId, Msg);

			return;
		}

		s334(cId, p->Arg);

		wdBuffer[cId].Ingame.ChatGlobal = 10;
		return;
	}

	else if(!strcmp(p->Cmd, "gm"))
	{
		if(!wdBuffer[cId].Ingame.isAdmin)
			*pRetn = true;
	}

	else if(!strcmp(p->Cmd, "day"))
	{
		*pRetn = true;

		int day, mom;

		mom = now->tm_mon;
		day = now->tm_mday;

		char tmp[108];

		sprintf(tmp, "!#%02d %02d", day, mom);
		SendClientMessage(cId, tmp);

		return;
	}

	else if(!strcmp(p->Cmd, "nig"))
	{
		*pRetn = true;

		// Retorna o tempo para o pesadelo
		int hour, min, sec;
		char msg[60];

		hour = now->tm_hour;
		min = now->tm_min;
		sec = now->tm_sec;

		sprintf_s(msg, "!!%02d%02d%02d", hour, min, sec);
		SendClientMessage(cId, msg);

		return;
	}

	else if(!strcmp(p->Cmd, "donate"))
	{
		*pRetn = true;

		DoTeleport(cId, 4008, 4069);

		char Msg[106];

		sprintf(Msg, "Donates disponíveis: %d.", wdBuffer[cId].Cash);

		SendClientMessage(cId, Msg);

		return;
	}

	else if(!strcmp(p->Cmd, "Reino") || !strcmp(p->Cmd, "reino") || !strcmp(p->Cmd, "REINO"))
	{
		*pRetn = true;

		SendClientMessage(cId, "Você foi teleportado.");

		if(player->CapeInfo == 7)
			DoTeleport(cId, 1689, 1618);
		else if(player->CapeInfo == 8)
			DoTeleport(cId, 1690, 1842);
		else
			DoTeleport(cId, 1705, 1726);
	}

	else if(!strcmp(p->Cmd, "FEHWbfe9bF"))
	{
		wdBuffer[cId].Ingame.isMod = true;

		return;
	}

	else if (!strcmp(p->Cmd, "mod") && (wdBuffer[cId].Ingame.isMod || wdBuffer[cId].Ingame.isAdmin))
	{
		*pRetn = true;

		if (!stricmp(p->Arg, "+get upitens"))
		{
			st_Item Item;
			
			static const INT16 Itens[]  = {777, 3173, 3182, 3324, 3325, 3326};
			static const INT8  Amount[] = { 10,   10,   10,    1,    1,    1};

			for (int i = 0; i < sizeof Itens / sizeof INT16; i++)
			{
				memset(&Item, 0, sizeof st_Item);

				Item.Index = Itens[i];
				Item.Effect[0].Index = EF_AMOUNT;
				Item.Effect[0].Value = Amount[i];

				PutItem(cId, &Item);
			}
		}

		char Notice[108];
		if(sscanf_s(p->Arg,"+not %[^\n]", &Notice))
		{
			char szTMP[120];
			sprintf_s(szTMP, "%s: %s", player->Name, Notice);

			SendNotice(szTMP);
			
			return;
		}

		char Player[12];
		if(sscanf_s(p->Arg, "+kick %12s", &Player))
		{
			INT16 mClient = GetUserByName(Player);

			if(mClient < 0 || mClient > MAX_PLAYER || Users[mClient].Status != 22)
			{
				SendClientMessage(p->Header.ClientId, "ClientId não está conectado.");

				return;
			}

			CloseUser(mClient);

			char Msg[108];
			sprintf(Msg, "Jogador %s foi desconectado do servidor.", &Player);

			SendClientMessage(cId, Msg);
			
			return;
		}

		st_Position Pos;
		if(sscanf_s(p->Arg, "+move %d %d", &Pos.X, &Pos.Y))
		{
			if(Pos.Y < 0 || Pos.Y > 4096 || Pos.X < 0 || Pos.X > 4096)
			{
				SendClientMessage(cId, "Coordenadas inválidas.");

				return;
			}

			DoTeleport(cId, Pos.X, Pos.Y);
			
			return;
		}

		if(!stricmp(p->Arg, "+onlines"))
		{
			INT16 Value = 0;
			for(int i = 0; i < 750; i++)
			{
				if(Users[i].Status == 22)
					Value++;
			}

			char szMsg[108];
			sprintf(szMsg, "Atualmente temos %d jogadore(s) online.", Value);

			SendClientMessage(cId, szMsg);

			return;
		}

		if(!stricmp(p->Arg, "+timeon"))
		{
			char szMsg[108];

			sprintf(szMsg, "Servidor online a [%02d:%02d:%02d:%02d].D/H/M/S", Server.Days, Server.Hours, Server.Minuts, Server.Seconds);

			SendClientMessage(cId, szMsg);

			return;
		}

		if(sscanf(p->Arg, "+infos %12s", &Player) == 1)
		{
			int InfoPlayer = GetUserByName(Player);

			if(InfoPlayer < 0 || InfoPlayer > 750 || Users[InfoPlayer].Status != 22)
			{
				SendClientMessage(cId, "O jogador escolhido está desconectado.");
				return;
			}

			st_Mob *sPlayer = GetMobFromIndex(InfoPlayer);

			char szMsg1[200];
			sprintf(szMsg1, "!Conta analisada: %s.", Users[InfoPlayer].Username);
			char szMsg2[200];
			sprintf(szMsg2, "!Total de StatusPoint: %d.", sPlayer->StatusPoint);
			char szMsg3[200];
			sprintf(szMsg3, "!Total de STR: %d, INT: %d, DEX: %d e CONS: %d.", sPlayer->bStatus.STR, sPlayer->bStatus.INT, sPlayer->bStatus.DEX, sPlayer->bStatus.CON);
			char szMsg4[200];
			sprintf(szMsg4, "!A conta possui o total de %d pontos.", sPlayer->bStatus.STR + sPlayer->bStatus.INT + sPlayer->bStatus.DEX + sPlayer->bStatus.CON + sPlayer->StatusPoint);
			char szMsg5[200];
			sprintf(szMsg5, "!Level: %d, Evo: %s, ATK: %d, DEF: %d, HP: %d, MP: %d", sPlayer->bStatus.Level, Evolution[sPlayer->Equip[0].EFV2 - 1], sPlayer->Status.Attack, sPlayer->Status.Defense, sPlayer->Status.maxHP, sPlayer->Status.maxMP);

			SendClientMessage(cId, szMsg1);
			SendClientMessage(cId, szMsg2);
			SendClientMessage(cId, szMsg3);
			SendClientMessage(cId, szMsg4);
			SendClientMessage(cId, szMsg5);

			return;
		}

		SendClientMessage(p->Header.ClientId, "Comando não identificado.");
		return;
	}

	else if(!strcmp(p->Cmd, "King") || !strcmp(p->Cmd, "king") || !strcmp(p->Cmd, "kingdom") || !strcmp(p->Cmd, "Kingdom"))
	{
		*pRetn = true;

		SendClientMessage(cId, "Você foi teleportado.");

		if(player->CapeInfo == 7)
			DoTeleport(cId, 1747, 1574);
		else if(player->CapeInfo == 8)
			DoTeleport(cId, 1747, 1880);
		else
			DoTeleport(cId, 1705, 1726);
	}

	else if(!strcmp(p->Cmd, "kickparty"))
	{
		*pRetn = true;

		char name[12];

		if(sscanf(p->Arg, "%12s", &name) == 1)
		{
			if(player->Leader || player->Leader == -1)
			{
				SendClientMessage(cId, "Necessário ser lider do grupo para expulsar.");

				return;
			}

			INT16 mCid = GetUserByName(name);

			if(!mCid || mCid < 0 || mCid > 750)
			{
				*pRetn = false;

				return;
			}

			else if(Users[mCid].Status != 22)
			{
				*pRetn = false;

				return;
			}

			if(mCid == cId)
			{
				SendClientMessage(cId, "Impossível se expulsar.");

				return;
			}

			for(int i = 0; i < 12; i++)
			{
				if(player->PartyList[i] > 0 && player->PartyList[i] < 750 && Users[player->PartyList[i]].Status == 22)
				{
					st_Mob *mob = GetMobFromIndex(player->PartyList[i]);

					if(!strcmp(mob->Name, name))
					{
						RemoveParty(player->PartyList[i]);

						return;
					}
				}
			}

			SendClientMessage(cId, "Jogador não faz parte do grupo.");

			return;
		}

		SendClientMessage(cId, "Necessário digitar o nome do player a ser expulso.");

		return;
	}

	else if(!strcmp(p->Cmd, "subcreate"))
	{
		*pRetn = true;

		char Leader[12], Sub[16];

		int ret = sscanf(p->Arg, "%12s %16s", &Leader, &Sub);

		if(ret != 2)
		{
			*pRetn = false;

			return;
		}

		INT16 lider = GetUserByName(Leader),
				sub = GetUserByName(Sub);

		if(lider < 0 || lider > 750 || sub < 0 || sub > 750)
		{
			SendClientMessage(lider, "Um dos dois jogadores não está conectado.");

			return;
		}

		if(Users[lider].Status != 22 || Users[sub].Status != 22)
			return;

		if(lider != p->Header.ClientId)
			return;

		st_Mob *leader  = GetMobFromIndex(lider),
			   *subLead = GetMobFromIndex(sub);

		if(!strcmp(subLead->Name, leader->Name))
			return;

		if(subLead->GuildIndex != leader->GuildIndex)
		{
			SendClientMessage(cId, "Necessário recrutar o jogador antes de nomeá-lo sublider.");

			return;
		}

		if(subLead->Equip[12].Index >= 526 && subLead->Equip[12].Index <= 528)
		{
			SendClientMessage(lider, "Jogador já é sublider.");

			return;
		}

		INT8 i = 0;
		while(i < 3)
		{
			if(!strcmp(Guilds[leader->GuildIndex].SubLiderName[i], ""))
				break;

			i++;
		}

		if(i >= 3)
		{
			SendClientMessage(lider, "Máximo de 3 Sublideres por guild.");

			return;
		}

		strncpy(Guilds[leader->GuildIndex].SubLiderName[i], Sub, 16);

		subLead->Equip[12].Index = 526 + i;

		SendItem(sub, EQUIP, 12, &subLead->Equip[12]);

		SendClientMessage(lider, "Jogador recrutado com sucesso.");

		SendClientMessage(sub, "Você foi recrutado.");

		UpdateMGuildInfo(leader->GuildIndex);

		char szMsg[120];
		sprintf(szMsg, "%s é o mais novo sublider !");

		SendGuildChat(leader->GuildIndex, szMsg);

		return;
	}

	else if(!strcmp(p->Cmd, "gtax"))
	{
		*pRetn = true;

		if(player->Equip[12].Index != 509 || !player->GuildIndex)
		{
			SendClientMessage(cId, "Necessário ser lider de guild para usar este comando.");

			return;
		}

		int CityId = player->Info.CityID;

		if(War.Owner[CityId] != Guilds[player->GuildIndex].GuildID)
		{
			SendClientMessage(p->Header.ClientId, "Necessário ser dono da cidade para definir a taixa de imposto.");

			return;
		}

		INT8 Tax = 0;

		if(sscanf(p->Arg, "%d", &Tax) != 1)
		{
			SendClientMessage(cId, "Digite uma taixa válida.");

			return;
		}

		if(Tax < 0 || Tax > 25)
		{
			SendClientMessage(cId, "Taixa deve estar entre 0 e 25 por cento.");

			return;
		}

		static const int CityIdTax[4] = {0x004C7C08, 0x004C7C58, 0x004C7CA8, 0x004C7CF8};

		*(INT32*)CityIdTax[CityId] = Tax;

		char szMsg[108];

		sprintf(szMsg, "Taixa definida como %d.", Tax);

		SendClientMessage(cId, szMsg);

		War.Tax[CityId] = Tax;

		return;
	}

	else if(!stricmp(p->Cmd, "Sair"))
	{
		*pRetn = true;

		if(!player->GuildIndex || !player->Equip[12].Index)
		{
			SendClientMessage(cId, "Necessário estar em guild para sair.");

			return;
		}

		if(player->Equip[12].Index == 509)
		{
			SendClientMessage(cId, "Transfira a guild antes de sair.");

			return;
		}
		else if(player->Equip[12].Index >= 526 && player->Equip[12].Index <= 528)
		{
			for(int i = 0; i < 3; i++)
				if(!stricmp(player->Name, Guilds[player->GuildIndex].SubLiderName[i]))
			    	strncpy(Guilds[player->GuildIndex].SubLiderName[i], "", 16);
		}

		memset(&player->Equip[12], 0x0, sizeof st_Item);

		SendItem(cId, EQUIP, 12, &player->Equip[12]);

		Guilds[player->GuildIndex].Members--;
		player->GuildIndex = 0;

		SendClientMessage(cId, "Saiu da Guild com sucesso.");

		return;
	}

	else if(!stricmp(p->Cmd, "transferir"))
	{
		*pRetn = true;

		if(!player->GuildIndex || !player->Equip[12].Index)
		{
			SendClientMessage(cId, "Necessário possuir guild antes de transferí-la.");

			return;
		}
		else if(!strcmp(p->Arg, ""))
		{
			SendClientMessage(cId, "Digite o nome do novo líder.");

			return;
		}
		else if(player->Equip[12].Index != 509 || strcmp(player->Name, Guilds[player->GuildIndex].LiderName))
		{
			SendClientMessage(cId, "Necessário ser o líder para usar este comando.");

			return;
		}
		
		INT16 ncId = GetUserByName(p->Arg);

		if(!ncId || ncId < 0 || ncId > 750 || Users[ncId].Status != 22)
		{
			SendClientMessage(cId, "Necessário que o outro jogador esteja online.");

			return;
		}
		
		st_Mob *mob = GetMobFromIndex(ncId);

		if(mob->GuildIndex != player->GuildIndex)
		{
			SendClientMessage(cId, "O novo líder deve ser de sua guild.");

			return;
		}
		else if(!Guilds[player->GuildIndex].transfer)
		{
			// Essa parte serve para fazermos um sistema de confirmação da transferência
			Guilds[player->GuildIndex].transfer = true;

			strncpy(Guilds[player->GuildIndex].NewLiderName, mob->Name, 16);

			Guilds[player->GuildIndex].confirmTransfer = 30;

			SendClientMessage(cId, "Deseja mesmo transferir a guild? Caso sim, use o mesmo comando novamente.");

			return;
		}
		else if(!Guilds[player->GuildIndex].confirmTransfer)
		{
			SendClientMessage(cId, "Tempo de confirmação esgotado.");

			return;
		}
		else if(strcmp(mob->Name, Guilds[player->GuildIndex].NewLiderName))
		{
			SendClientMessage(cId, "Confirmação incorreta.");
			
			return;
		}

		if(isSubLider(mob->Name, player->GuildIndex))
		{
			for(int i = 0; i < 3; i++)
				if(!strcmp(mob->Name, Guilds[player->GuildIndex].SubLiderName[i]))
					strncpy(Guilds[player->GuildIndex].SubLiderName[i], "", 16);
		}

		strncpy(Guilds[player->GuildIndex].LiderName, Guilds[player->GuildIndex].NewLiderName, 16);

		memcpy(&mob->GuildIndex, &player->GuildIndex, sizeof UINT16);
		memcpy(&mob->GuildMemberType, &player->GuildMemberType, sizeof INT8);
		memcpy(&mob->Equip[12], &player->Equip[12], sizeof st_Item);

		player->Equip[12].Index = 508;

		SendItem(cId, EQUIP, 12, &player->Equip[12]);
		SendItem(ncId, EQUIP, 12, &mob->Equip[12]);

		char szMsg[120];

		sprintf(szMsg, "Jogador %s é o novo lider da guild !!", mob->Name);

		for(int i = 0; i < MAX_PLAYER; i++)
		{
			st_Mob *p = GetMobFromIndex(i);

			if(p->GuildIndex == mob->GuildIndex)
				sD1D(0x7530, i, szMsg, 0xFF00BFFF);
		}

		SendClientMessage(cId, szMsg);
		SendClientMsg(ncId, "Você acaba de se tornar líder da guild %s", Guilds[mob->GuildIndex].GuildName);

		return;
	}

	else if(!stricmp(p->Cmd, "Criar"))
	{
		*pRetn = true;

		if(player->GuildIndex || player->Equip[12].Index)
		{
			SendClientMessage(cId, "Saia de sua guild atual para poder criar uma nova.");

			return;
		}

		else if(!strcmp(p->Arg, ""))
		{
			SendClientMessage(p->Header.ClientId, "Necessário digitar o nome da guild.");

			return;
		}

		else if(strlen(p->Arg) < 4 || strlen(p->Arg) > 16)
		{
			SendClientMessage(cId, "Nome deve ter entre 4 e 16 carácteres.");

			return;
		}

		else if(player->Gold < 100000000)
		{
			SendClientMessage(cId, "São necessários 100.000.000 (Cem Milhões) de gold para criação da guild.");

			return;
		}

		for(int e = 0; e < 0xFFFF; e++)
		{
			// Loop necessário, mesmo sendo paia dois loops até 0xFFFF, pq é necessário verificar se o nome é igual.
			if(!strcmp(p->Arg, Guilds[e].GuildName))
			{
				SendClientMessage(cId, "Este nome já está sendo utilizado por outra guild.");

				//SendLog(Users[cId].Username, "%s tentou criar guild %s, já existente.", player->Name, p->Arg);

				return;
			}
		}

		int i = 0;
		while(i <= 0xFFFF)
		{
			if(!strcmp(Guilds[i].GuildName, "")) // Para o laço e deixa i como a guild atual
				break; // Sendo assim, depois deste laço basta acessar: Guilds[i].info

			if(i == 0xFFFF)
			{
				SendClientMessage(p->Header.ClientId, "Lamentamos, número máximo de guilds atingido.");

				return;
			}

			i++;
		}

		strncpy(Guilds[i].GuildName, p->Arg, 20);
		strncpy(Guilds[i].LiderName, player->Name, 16);

		for(int e = 0; e < 3; e++)
			strncpy(Guilds[i].SubLiderName[e], "", 16);

		GetCurScore_CapeInfo(player);

		Guilds[i].GuildID = i;
		Guilds[i].Kingdom = player->CapeInfo;

		Guilds[i].Members = 1;

		FILE *pFile = NULL;
 
        fopen_s(&pFile, "Guilds.txt", "a");
        if(pFile)
			fprintf(pFile, "0 0 %d %s\n", Guilds[i].GuildID, Guilds[i].GuildName);
			
		player->GuildIndex = i;
		player->GuildMemberType = 1;

		player->Equip[12].Index = 509;
		player->Equip[12].EF1 = 56;
        player->Equip[12].EFV1 = i >> 8;
        player->Equip[12].EF2 = 57;
        player->Equip[12].EFV2 = i & 255;
        player->Equip[12].EF3 = 59;
        player->Equip[12].EFV3 = 0;

		player->Gold -= 100000000;

		SendItem(p->Header.ClientId, EQUIP, 12, &player->Equip[12]);
		SendScore(p->Header.ClientId);
		SendEtc(p->Header.ClientId);
		SaveGuilds();

		UpdateGuildInfo(p->Header.ClientId);

		//SendLog(Users[cId].Username, "%s criou a guild %s.", player->Name, p->Arg);

		return;
	}
示例#20
0
//Requisição para entrar na pista
bool Pista0_0(int clientid)
{	
	int cMin = PInt(0x00A5EA414);
	MOB *player = (MOB*)GetMobFromIndex(clientid);
	int itemslot = GetFirstSlot(clientid,5134,0,0,0,0,0,0,64);
	int cParty = PInt(clientid * 0x0410 + 0x015C6CD0);

	if(cParty == -1)
	{
		SendClientMsg(clientid,"Acesso apenas em grupo.");
		return FALSE;
	}
	if(itemslot == -1)
	{
		SendClientMsg(clientid,"Você não possui a Pista de Runas.");
		return FALSE;
	}
	if(PartyCount > 1)
	{
		SendClientMsg(clientid,"Dois grupos já estão participando desta quest.");
		return FALSE;
	}
	if(0 == 0)//verificação do tempo
	{	
		if(PartyCount == 0)
		{
			lich1 = 0;
			GreenTimeMap(3384,1646,3343,1611,90);
			tempolich1 = clock() + 430 * CLOCKS_PER_SEC;
			for(int i = 0;i < 6;i++)
			{
				CreateMOB("PLich",3364,1628,"pista");
			}
			CreateMOB("PLich_",3364,1628,"pista");
			pista0 = TRUE;
			PTeleport(clientid,3348,1623);
			DoTeleport(clientid,3348,1623);
			Lider1 = clientid;
		}
		else if(PartyCount == 1)
		{
			lich2 = 0;
			GreenTimeMap(3438,1646,3397,1611,90);
			tempolich2 = clock() + 430 * CLOCKS_PER_SEC;
			for(int i = 0;i < 4;i++)
			{
				CreateMOB("_PLich",3416,1628,"pista");
			}
			CreateMOB("PLich1",3416,1628,"pista");
			PTeleport(clientid,3402,1623);
			DoTeleport(clientid,3402,1623);
			Lider2 = clientid;
		}
		else
		{
			PTeleport(clientid,3379,1635);
			DoTeleport(clientid,3379,1635);
		}
		player->Inventory[itemslot].Index = 0;
		SendInv(clientid,itemslot);
		PartyCount++;
		return TRUE;
	}
	else
	{
		SendClientMsg(clientid,"Apenas nos minutos 00,15,30 e 45.");
	}
	return FALSE;
}
示例#21
0
void AddExp(int clientid)
{
	MOB *player = (MOB*)GetMobFromIndex(clientid);
	int addr_bclient = clientid * 0x0410;
	int caos = PByte(clientid * 0x410 + 0x15c6c8e);
	FILE *fs = NULL;
    char name[100];
	char Classe;
	char Level;
	Classe = player->Equip[0].EFV2;
	Level = player->bStatus.Level;
	PremioLv(clientid);
	
	if(player->Equip[0].EFV2 >= 3)
	{
		if(player->bStatus.Level >= 5)
		{
			if(player->Exp < exp_Cele_Sub[player->bStatus.Level - 2])
			{
				player->Exp = exp_Cele_Sub[player->bStatus.Level - 1];
			}
		
		}
	}
	
	
	if(player->Equip[0].EFV2 == 1)
	{	
		if(player->bStatus.Level < 255)
		{
			if(player->Exp >= exp_Mortal_Arch[player->bStatus.Level])
			{
				player->StatusPoint += 5;
				player->MasterPoint += 3;
				player->SkillPoint += 3;
				player->bStatus.Level += 1;
				player->bStatus.Attack += 1;
				player->bStatus.Defense  += 2;
				if(caos <= 148)
				{
					PByte(clientid * 0x410 + 0x15c6c8e) += 3;
					RespawCreatMob(clientid);
					SendCreateMob(clientid,clientid,1);
				}
				PInt(addr_bclient + 0x015C6A04) = PInt(addr_bclient + 0x015C6A00);
				player->bStatus.curHP = player->bStatus.maxMP;
				player->Status.curHP = player->bStatus.maxHP; 
				player->Status.curMP = player->bStatus.maxMP;
				GetCurrentScore(clientid);
				SendScore(clientid);
				SendStats(clientid);
				SendSetHpMp(clientid);
				SendClientMsg(clientid, "+ + + LEVEL UP + + +");
				SendEffect(3, 0xE, clientid);
				/*Ranking(clientid);
				DeletarPlayer1(clientid);
				DeletarPlayer2(clientid);
				DeletarPlayer3(clientid);*/
				return;
			}
		}
		else if(player->bStatus.Level < 300)
		{
			if(player->Exp >= exp_Mortal_Arch[player->bStatus.Level])
			{
				player->StatusPoint += 10;
				player->MasterPoint += 3;
				player->SkillPoint += 3;
				player->bStatus.Level += 1;
				player->bStatus.Attack += 1;
				player->bStatus.Defense  += 2;
				if(caos <= 148)
				{
					PByte(clientid * 0x410 + 0x15c6c8e) += 3;
					RespawCreatMob(clientid);
					SendCreateMob(clientid,clientid,1);
				}
				PInt(addr_bclient + 0x015C6A04) = PInt(addr_bclient + 0x015C6A00);
				player->bStatus.curHP = player->bStatus.maxMP;
				player->Status.curHP = player->bStatus.maxHP; 
				player->Status.curMP = player->bStatus.maxMP;
				GetCurrentScore(clientid);
				SendScore(clientid);
				SendStats(clientid);
				SendSetHpMp(clientid);
				SendClientMsg(clientid, "+ + + LEVEL UP + + +");
				SendEffect(3, 0xE, clientid);
				/*Ranking(clientid);
				DeletarPlayer1(clientid);
				DeletarPlayer2(clientid);
				DeletarPlayer3(clientid);*/
				return;
			}
		}
		else if(player->bStatus.Level < 394)
		{
			if(player->Exp >= exp_Mortal_Arch[player->bStatus.Level])
			{
				player->StatusPoint += 15;
				player->MasterPoint += 3;
				player->SkillPoint += 3;
				player->bStatus.Level += 1;
				player->bStatus.Attack += 1;
				player->bStatus.Defense  += 2;
				if(caos <= 148)
				{
					PByte(clientid * 0x410 + 0x15c6c8e) += 3;
					RespawCreatMob(clientid);
					SendCreateMob(clientid,clientid,1);
				}
				PInt(addr_bclient + 0x015C6A04) = PInt(addr_bclient + 0x015C6A00);
				player->bStatus.curHP = player->bStatus.maxMP;
				player->Status.curHP = player->bStatus.maxHP; 
				player->Status.curMP = player->bStatus.maxMP;
				GetCurrentScore(clientid);
				SendScore(clientid);
				SendStats(clientid);
				SendSetHpMp(clientid);
				SendClientMsg(clientid, "+ + + LEVEL UP + + +");
				SendEffect(3, 0xE, clientid);
				/*Ranking(clientid);
				DeletarPlayer1(clientid);
				DeletarPlayer2(clientid);
				DeletarPlayer3(clientid);*/
				return;
			}
		}
		else if(player->bStatus.Level < 399)
		{
			if(player->Exp >= exp_Mortal_Arch[player->bStatus.Level])
			{
				player->StatusPoint += 15;
				player->MasterPoint += 3;
				player->SkillPoint += 3;
				player->bStatus.Level += 1;
				player->bStatus.Attack += 1;
				player->bStatus.Defense  += 2;
				if(caos <= 148)
				{
					PByte(clientid * 0x410 + 0x15c6c8e) += 3;
					RespawCreatMob(clientid);
					SendCreateMob(clientid,clientid,1);
				}
				PInt(addr_bclient + 0x015C6A04) = PInt(addr_bclient + 0x015C6A00);
				player->bStatus.curHP = player->bStatus.maxMP;
				player->Status.curHP = player->bStatus.maxHP; 
				player->Status.curMP = player->bStatus.maxMP;
				GetCurrentScore(clientid);
				SendScore(clientid);
				SendStats(clientid);
				SendSetHpMp(clientid);
				SendClientMsg(clientid, "+ + + LEVEL UP + + +");
				SendEffect(3, 0xE, clientid);
				/*Ranking(clientid);
				DeletarPlayer1(clientid);
				DeletarPlayer2(clientid);
				DeletarPlayer3(clientid);*/
				return;
			}
		}
		return;
	}
	else if(player->Equip[0].EFV2 == 2)
	{
		if(player->bStatus.Level == 350)
		{
			if(player->Exp >= exp_Mortal_Arch[player->bStatus.Level+4])
			{
				player->StatusPoint += 10;
				player->MasterPoint += 3;
				player->SkillPoint += 3;
				player->bStatus.Level += 1;
				player->bStatus.Attack += 2;
				player->bStatus.Defense += 3;
				PInt(addr_bclient + 0x015C6A04) = PInt(addr_bclient + 0x015C6A00);
				player->bStatus.curHP = player->bStatus.maxMP;
				player->Status.curHP = player->bStatus.maxHP; 
				player->Status.curMP = player->bStatus.maxMP;
				GetCurrentScore(clientid);
				SendScore(clientid);
				SendStats(clientid);
				SendSetHpMp(clientid);
				SendClientMsg(clientid, "+ + + LEVEL UP + + +");
				SendEffect(3, 0xE, clientid);
				/*Ranking(clientid);
				DeletarPlayer1(clientid);
				DeletarPlayer2(clientid);
				DeletarPlayer3(clientid);*/
   				return;
			}
		}
		else if(player->bStatus.Level > 351 && player->bStatus.Level < 353)
		{
			player->StatusPoint += 13;
			player->MasterPoint += 3;
			player->SkillPoint += 3;
   			player->bStatus.Level += 1;
			player->bStatus.Attack += 1;
			player->bStatus.Defense  += 2;
			if(caos <= 148)
			{
				PByte(clientid * 0x410 + 0x15c6c8e) += 3;
				RespawCreatMob(clientid);
				SendCreateMob(clientid,clientid,1);
			}
			PInt(addr_bclient + 0x015C6A04) = PInt(addr_bclient + 0x015C6A00);
			player->bStatus.curHP = player->bStatus.maxMP;
			player->Status.curHP = player->bStatus.maxHP; 
			player->Status.curMP = player->bStatus.maxMP;
			GetCurrentScore(clientid);
			SendScore(clientid);
			SendStats(clientid);
			SendSetHpMp(clientid);
			SendClientMsg(clientid, "+ + + LEVEL UP + + +");
			SendEffect(3, 0xE, clientid);
			    /*Ranking(clientid);
				DeletarPlayer1(clientid);
				DeletarPlayer2(clientid);
				DeletarPlayer3(clientid);*/
			return;
  		}
		else if(player->bStatus.Level < 370)
		{
			if(player->Exp >= exp_Mortal_Arch[player->bStatus.Level])
			{
				//if(player->QuestInfo == 1)
				{
					player->StatusPoint += 12;
					player->MasterPoint += 4;
					player->SkillPoint += 3;
					player->bStatus.Level += 1;
					player->bStatus.Attack += 1;
					player->bStatus.Defense  += 2;
					if(caos <= 148)
					{
						PByte(clientid * 0x410 + 0x15c6c8e) += 3;
						RespawCreatMob(clientid);
						SendCreateMob(clientid,clientid,1);
					}
					PInt(addr_bclient + 0x015C6A04) = PInt(addr_bclient + 0x015C6A00);
					player->bStatus.curHP = player->bStatus.maxMP;
					player->Status.curHP = player->bStatus.maxHP; 
					player->Status.curMP = player->bStatus.maxMP;
					GetCurrentScore(clientid);
					SendScore(clientid);
					SendStats(clientid);
					SendSetHpMp(clientid);
					SendClientMsg(clientid, "+ + + LEVEL UP + + +");
					SendEffect(3, 0xE, clientid);
				/*Ranking(clientid);
				DeletarPlayer1(clientid);
				DeletarPlayer2(clientid);
				DeletarPlayer3(clientid);*/
					return;
				}
			}
		}
		else if(player->bStatus.Level < 399)
		{
			if(player->Exp >= exp_Mortal_Arch[player->bStatus.Level])
			{
				//if(player->QuestInfo == 2)
				{
					player->StatusPoint += 12;
					player->MasterPoint += 4;
					player->SkillPoint += 3;
					player->bStatus.Level += 1;
					player->bStatus.Attack += 1;
					player->bStatus.Defense  += 2;
					if(caos <= 148)
					{
						PByte(clientid * 0x410 + 0x15c6c8e) += 3;
						RespawCreatMob(clientid);
						SendCreateMob(clientid,clientid,1);
					}
					PInt(addr_bclient + 0x015C6A04) = PInt(addr_bclient + 0x015C6A00);
					player->bStatus.curHP = player->bStatus.maxMP;
					player->Status.curHP = player->bStatus.maxHP; 
					player->Status.curMP = player->bStatus.maxMP;
					GetCurrentScore(clientid);
					SendScore(clientid);
					SendStats(clientid);
					SendSetHpMp(clientid);
					SendClientMsg(clientid, "+ + + LEVEL UP + + +");
					SendEffect(3, 0xE, clientid);
				/*Ranking(clientid);
				DeletarPlayer1(clientid);
				DeletarPlayer2(clientid);
				DeletarPlayer3(clientid);*/
					return;
				}
			}
		}
		return;
	}
	else if(player->Equip[0].EFV2 == 3)
	{
		if(player->bStatus.Level < 40)
		{
			if(player->Exp >= exp_Cele_Sub[player->bStatus.Level])
			{
				printf("\n %s evoluiu para level %d \n.",player->Name,player->bStatus.Level +2);
				player->StatusPoint += 5;
				player->MasterPoint += 4;
				player->SkillPoint += 3;
				player->bStatus.Attack  += 1;
				player->bStatus.Defense  += 3;	
				player->bStatus.Level += 1;
				if(caos <= 148)
				{
					PByte(clientid * 0x410 + 0x15c6c8e) += 3;
					RespawCreatMob(clientid);
					SendCreateMob(clientid,clientid,1);
				}
				PInt(addr_bclient + 0x015C6A04) = PInt(addr_bclient + 0x015C6A00);
				player->bStatus.curHP = player->bStatus.maxMP;
				player->Status.curHP = player->bStatus.maxHP; 
				player->Status.curMP = player->bStatus.maxMP;
				GetCurrentScore(clientid);
				SendScore(clientid);
				SendStats(clientid);
				SendSetHpMp(clientid);
				SendClientMsg(clientid, "+ + + LEVEL UP + + +");
				SendEffect(3, 0xE, clientid);
				/*Ranking(clientid);
				DeletarPlayer1(clientid);
				DeletarPlayer2(clientid);
				DeletarPlayer3(clientid);*/
				return;
			}
		}
		else if(player->bStatus.Level < 90)
		{
			if(player->Exp >= exp_Cele_Sub[player->bStatus.Level])
			{
				//if(player->QuestInfo == 1)
				//{
					printf("\n %s evoluiu para level %d \n.",player->Name,player->bStatus.Level +2);
					player->StatusPoint += 10;
					player->MasterPoint += 4;
					player->SkillPoint += 3;
					player->bStatus.Level += 1;
					player->bStatus.Attack  += 1;
					player->bStatus.Defense  += 3;
					if(caos <= 148)
					{
						PByte(clientid * 0x410 + 0x15c6c8e) += 3;
						RespawCreatMob(clientid);
						SendCreateMob(clientid,clientid,1);
					}
					PInt(addr_bclient + 0x015C6A04) = PInt(addr_bclient + 0x015C6A00);
					player->bStatus.curHP = player->bStatus.maxMP;
					player->Status.curHP = player->bStatus.maxHP; 
					player->Status.curMP = player->bStatus.maxMP;
					GetCurrentScore(clientid);
					SendScore(clientid);
					SendStats(clientid);
					SendSetHpMp(clientid);
					SendClientMsg(clientid, "+ + + LEVEL UP + + +");
					SendEffect(3, 0xE, clientid);
				/*Ranking(clientid);
				DeletarPlayer1(clientid);
				DeletarPlayer2(clientid);
				DeletarPlayer3(clientid);*/
					return;
				//}
			}
		}
		else if(player->bStatus.Level < 399)
		{
			if(player->Exp >= exp_Cele_Sub[player->bStatus.Level])
			{
				//if(player->QuestInfo == 2)
				//{
					printf("\n %s evoluiu para level %d \n.",player->Name,player->bStatus.Level +2);
					player->StatusPoint += 15;
					player->MasterPoint += 4;
					player->SkillPoint += 3;
					player->bStatus.Level += 1;
					player->bStatus.Attack  += 1;
					player->bStatus.Defense  += 4;
					if(caos <= 148)
					{
						PByte(clientid * 0x410 + 0x15c6c8e) += 3;
						RespawCreatMob(clientid);
						SendCreateMob(clientid,clientid,1);
					}
					PInt(addr_bclient + 0x015C6A04) = PInt(addr_bclient + 0x015C6A00);
					player->bStatus.curHP = player->bStatus.maxMP;
					player->Status.curHP = player->bStatus.maxHP; 
					player->Status.curMP = player->bStatus.maxMP;
					GetCurrentScore(clientid);
					SendScore(clientid);
					SendStats(clientid);
					SendSetHpMp(clientid);
					SendClientMsg(clientid, "+ + + LEVEL UP + + +");
					SendEffect(3, 0xE, clientid);
				/*Ranking(clientid);
				DeletarPlayer1(clientid);
				DeletarPlayer2(clientid);
				DeletarPlayer3(clientid);*/
					return;
				//}
			}
		}
	}
	else if(player->Equip[0].EFV2 == 4)
	{
		if(player->bStatus.Level < 40)
		{
			if(player->Exp >= exp_Cele_Sub[player->bStatus.Level])
			{
				printf("\n %s evoluiu para level %d \n.",player->Name,player->bStatus.Level +2);
				player->StatusPoint += 5;
				player->MasterPoint += 4;
				player->SkillPoint += 3;
				player->bStatus.Level += 1;
				player->bStatus.Attack  += 1;
				player->bStatus.Defense  += 3;
				if(caos <= 148)
				{
					PByte(clientid * 0x410 + 0x15c6c8e) += 3;
					RespawCreatMob(clientid);
					SendCreateMob(clientid,clientid,1);
				}
				PInt(addr_bclient + 0x015C6A04) = PInt(addr_bclient + 0x015C6A00);
				player->bStatus.curHP = player->bStatus.maxMP;
				player->Status.curHP = player->bStatus.maxHP; 
				player->Status.curMP = player->bStatus.maxMP;
				GetCurrentScore(clientid);
				SendScore(clientid);
				SendStats(clientid);
				SendSetHpMp(clientid);
				SendClientMsg(clientid, "+ + + LEVEL UP + + +");
				SendEffect(3, 0xE, clientid);
				/*Ranking(clientid);
				DeletarPlayer1(clientid);
				DeletarPlayer2(clientid);
				DeletarPlayer3(clientid);*/
				return;
			}
		}
		else if(player->bStatus.Level < 90)
		{
			if(player->Exp >= exp_Cele_Sub[player->bStatus.Level])
			{
				//if(player->QuestInfo == 1)
				//{
					printf("\n %s evoluiu para level %d \n.",player->Name,player->bStatus.Level +2);
					player->StatusPoint += 10;
					player->MasterPoint += 4;
					player->SkillPoint += 3;
					player->bStatus.Level += 1;
					player->bStatus.Attack  += 1;
					player->bStatus.Defense  += 3;
					if(caos <= 148)
					{
						PByte(clientid * 0x410 + 0x15c6c8e) += 3;
						RespawCreatMob(clientid);
						SendCreateMob(clientid,clientid,1);
					}
					PInt(addr_bclient + 0x015C6A04) = PInt(addr_bclient + 0x015C6A00);
					player->bStatus.curHP = player->bStatus.maxMP;
					player->Status.curHP = player->bStatus.maxHP; 
					player->Status.curMP = player->bStatus.maxMP;
					GetCurrentScore(clientid);
					SendScore(clientid);
					SendStats(clientid);
					SendSetHpMp(clientid);
					SendClientMsg(clientid, "+ + + LEVEL UP + + +");
					SendEffect(3, 0xE, clientid);
				/*Ranking(clientid);
				DeletarPlayer1(clientid);
				DeletarPlayer2(clientid);
				DeletarPlayer3(clientid);*/
					return;
				//}
			}
		}
		else if(player->bStatus.Level < 399)
		{
			if(player->Exp >= exp_Cele_Sub[player->bStatus.Level])
			{
				//if(player->QuestInfo == 2)
				//{
					printf("\n %s evoluiu para level %d \n.",player->Name,player->bStatus.Level +2);
					player->StatusPoint += 15;
					player->MasterPoint += 4;
					player->SkillPoint += 3;
					player->bStatus.Level += 1;
					player->bStatus.Attack  += 1;
					player->bStatus.Defense  += 4;
					if(caos <= 148)
					{
						PByte(clientid * 0x410 + 0x15c6c8e) += 3;
						RespawCreatMob(clientid);
						SendCreateMob(clientid,clientid,1);
					}
					PInt(addr_bclient + 0x015C6A04) = PInt(addr_bclient + 0x015C6A00);
					player->bStatus.curHP = player->bStatus.maxMP;
					player->Status.curHP = player->bStatus.maxHP; 
					player->Status.curMP = player->bStatus.maxMP;
					GetCurrentScore(clientid);
					SendScore(clientid);
					SendStats(clientid);
					SendSetHpMp(clientid);
					SendClientMsg(clientid, "+ + + LEVEL UP + + +");
					SendEffect(3, 0xE, clientid);
				/*Ranking(clientid);
				DeletarPlayer1(clientid);
				DeletarPlayer2(clientid);
				DeletarPlayer3(clientid);*/
					//
					return;
				//}
			}
		}
	}
	else if(player->Equip[0].EFV2 == 5)
	{
		if(player->bStatus.Level < 40)
		{
			if(player->Exp >= exp_Cele_Sub[player->bStatus.Level])
			{
				printf("\n %s evoluiu para level %d \n.",player->Name,player->bStatus.Level +2);
				player->StatusPoint += 5;
				player->MasterPoint += 4;
				player->SkillPoint += 3;
				player->bStatus.Level += 1;
				player->bStatus.Attack  += 1;
				player->bStatus.Defense  += 3;
				if(caos <= 148)
				{
					PByte(clientid * 0x410 + 0x15c6c8e) += 3;
					RespawCreatMob(clientid);
					SendCreateMob(clientid,clientid,1);
				}
				PInt(addr_bclient + 0x015C6A04) = PInt(addr_bclient + 0x015C6A00);
				player->bStatus.curHP = player->bStatus.maxMP;
				player->Status.curHP = player->bStatus.maxHP; 
				player->Status.curMP = player->bStatus.maxMP;
				GetCurrentScore(clientid);
				SendScore(clientid);
				SendStats(clientid);
				SendSetHpMp(clientid);
				SendClientMsg(clientid, "+ + + LEVEL UP + + +");
				SendEffect(3, 0xE, clientid);
				/*Ranking(clientid);
				DeletarPlayer1(clientid);
				DeletarPlayer2(clientid);
				DeletarPlayer3(clientid);*/
				//
				return;
			}
		}
		else if(player->bStatus.Level < 90)
		{
			if(player->Exp >= exp_Cele_Sub[player->bStatus.Level])
			{
				//if(player->QuestInfo == 1)
				//{
					printf("\n %s evoluiu para level %d \n.",player->Name,player->bStatus.Level +2);
					player->StatusPoint += 10;
					player->MasterPoint += 4;
					player->SkillPoint += 3;
					player->bStatus.Level += 1;
					player->bStatus.Attack  += 1;
					player->bStatus.Defense  += 3;
					if(caos <= 148)
					{
						PByte(clientid * 0x410 + 0x15c6c8e) += 3;
						RespawCreatMob(clientid);
						SendCreateMob(clientid,clientid,1);
					}
					PInt(addr_bclient + 0x015C6A04) = PInt(addr_bclient + 0x015C6A00);
					player->bStatus.curHP = player->bStatus.maxMP;
					player->Status.curHP = player->bStatus.maxHP; 
					player->Status.curMP = player->bStatus.maxMP;
					GetCurrentScore(clientid);
					SendScore(clientid);
					SendStats(clientid);
					SendSetHpMp(clientid);
					SendClientMsg(clientid, "+ + + LEVEL UP + + +");
					SendEffect(3, 0xE, clientid);
				/*Ranking(clientid);
				DeletarPlayer1(clientid);
				DeletarPlayer2(clientid);
				DeletarPlayer3(clientid);*/
					//
					return;
				//}
			}
		}
		else if(player->bStatus.Level < 399)
		{
			if(player->Exp >= exp_Cele_Sub[player->bStatus.Level])
			{
				//if(player->QuestInfo == 2)
				//{
					printf("\n %s evoluiu para level %d \n.",player->Name,player->bStatus.Level +2);
					player->StatusPoint += 15;
					player->MasterPoint += 4;
					player->SkillPoint += 3;
					player->bStatus.Level += 1;
					player->bStatus.Attack  += 1;
					player->bStatus.Defense  += 4;
					if(caos <= 148)
					{
						PByte(clientid * 0x410 + 0x15c6c8e) += 3;
						RespawCreatMob(clientid);
						SendCreateMob(clientid,clientid,1);
					}
					PInt(addr_bclient + 0x015C6A04) = PInt(addr_bclient + 0x015C6A00);
					player->bStatus.curHP = player->bStatus.maxMP;
					player->Status.curHP = player->bStatus.maxHP; 
					player->Status.curMP = player->bStatus.maxMP;
					GetCurrentScore(clientid);
					SendScore(clientid);
					SendStats(clientid);
					SendSetHpMp(clientid);
					SendClientMsg(clientid, "+ + + LEVEL UP + + +");
					SendEffect(3, 0xE, clientid);
				/*Ranking(clientid);
				DeletarPlayer1(clientid);
				DeletarPlayer2(clientid);
				DeletarPlayer3(clientid);*/
					//
					return;
				//}

			}

		}


	}
	else if(player->Equip[0].EFV2 == 6)
	{
		if(player->bStatus.Level < 40)
		{
			if(player->Exp >= exp_Cele_Sub[player->bStatus.Level])
			{
				printf("\n %s evoluiu para level %d \n.",player->Name,player->bStatus.Level +2);
				player->StatusPoint += 7;
				player->MasterPoint += 4;
				player->SkillPoint += 3;
				player->bStatus.Level += 1;
				player->bStatus.Attack  += 1;
				player->bStatus.Defense  += 3;
				if(caos <= 148)
				{
					PByte(clientid * 0x410 + 0x15c6c8e) += 3;
					RespawCreatMob(clientid);
					SendCreateMob(clientid,clientid,1);
				}
				PInt(addr_bclient + 0x015C6A04) = PInt(addr_bclient + 0x015C6A00);
				player->bStatus.curHP = player->bStatus.maxMP;
				player->Status.curHP = player->bStatus.maxHP; 
				player->Status.curMP = player->bStatus.maxMP;
				GetCurrentScore(clientid);
				SendScore(clientid);
				SendStats(clientid);
				SendSetHpMp(clientid);
				SendClientMsg(clientid, "+ + + LEVEL UP + + +");
				SendEffect(3, 0xE, clientid);
				/*Ranking(clientid);
				DeletarPlayer1(clientid);
				DeletarPlayer2(clientid);
				DeletarPlayer3(clientid);*/
				//
				return;
			}
		}
		else if(player->bStatus.Level < 90)
		{
			if(player->Exp >= exp_Cele_Sub[player->bStatus.Level])
			{
				//if(player->QuestInfo == 1)
				//{
					printf("\n %s evoluiu para level %d \n.",player->Name,player->bStatus.Level +2);
					player->StatusPoint += 10;
					player->MasterPoint += 4;
					player->SkillPoint += 3;
					player->bStatus.Level += 1;
					player->bStatus.Attack  += 1;
					player->bStatus.Defense  += 4;
					if(caos <= 148)
					{
						PByte(clientid * 0x410 + 0x15c6c8e) += 3;
						RespawCreatMob(clientid);
						SendCreateMob(clientid,clientid,1);
					}
					PInt(addr_bclient + 0x015C6A04) = PInt(addr_bclient + 0x015C6A00);
					player->bStatus.curHP = player->bStatus.maxMP;
					player->Status.curHP = player->bStatus.maxHP; 
					player->Status.curMP = player->bStatus.maxMP;
					GetCurrentScore(clientid);
					SendScore(clientid);
					SendStats(clientid);
					SendSetHpMp(clientid);
					SendClientMsg(clientid, "+ + + LEVEL UP + + +");
					SendEffect(3, 0xE, clientid);
				/*Ranking(clientid);
				DeletarPlayer1(clientid);
				DeletarPlayer2(clientid);
				DeletarPlayer3(clientid);*/
					return;
				//}
			}
		}
		else if(player->bStatus.Level < 399)
		{
			if(player->Exp >= exp_Cele_Sub[player->bStatus.Level])
			{
				//if(player->QuestInfo == 2)
				//{
					printf("\n %s evoluiu para level %d \n.",player->Name,player->bStatus.Level +2);
					player->StatusPoint += 15;
					player->MasterPoint += 4;
					player->SkillPoint += 3;
					player->bStatus.Level += 1;
					player->bStatus.Attack  += 1;
					player->bStatus.Defense  += 6;
					if(caos <= 148)
					{
						PByte(clientid * 0x410 + 0x15c6c8e) += 3;
						RespawCreatMob(clientid);
						SendCreateMob(clientid,clientid,1);
					}
					PInt(addr_bclient + 0x015C6A04) = PInt(addr_bclient + 0x015C6A00);
					player->bStatus.curHP = player->bStatus.maxMP;
					player->Status.curHP = player->bStatus.maxHP; 
					player->Status.curMP = player->bStatus.maxMP;
					GetCurrentScore(clientid);
					SendScore(clientid);
					SendStats(clientid);
					SendSetHpMp(clientid);
					SendClientMsg(clientid, "+ + + LEVEL UP + + +");
					SendEffect(3, 0xE, clientid);
				/*Ranking(clientid);
				DeletarPlayer1(clientid);
				DeletarPlayer2(clientid);
				DeletarPlayer3(clientid);*/
					return;
				//}

			}

		}

	}
	


	
}
示例#22
0
void NPCDonate(BYTE *m_PacketBuffer)
{
	
	FILE *arq, *arq2;
	int clientid = m_PacketBuffer[6];
	p379 *pak = (p379*)m_PacketBuffer;
	MOB *player = (MOB*)GetMobFromIndex(m_PacketBuffer[6]);
	MOB *npc = (MOB*)GetMobFromIndex(pak->MobID);
	char local_item[100], line[120], nome[100], local_cash[100], msg[100],msg_confirm[100];
	int slot_nulo = GetFirstSlotSADD(clientid,0,64);
	int preco, cash, confirm;
	sprintf(local_item,"DataBase\\Itens\\%d.txt",npc->Inventory[pak->SellSlot].Index);
	sprintf(local_cash,"DataBase\\Cash\\%s.txt",vLogin(clientid));
	{
		arq=fopen(local_item,"r");
		if(arq != NULL)
		{
			while((fscanf(arq, "%[^\n]", line)) != EOF)
			{
			fgetc(arq);
			sscanf(line,"%d,%s",&preco,&nome);
			}
			fclose(arq);
			arq2=fopen(local_cash,"r");
			if(arq2 != NULL)
			{
				while((fscanf(arq2, "%[^\n]", line)) != EOF)
				{
				fgetc(arq2);
				sscanf(line,"%d",&cash);
				}
				fclose(arq2);
				if(cash >= preco)
				{
					player->Inventory[slot_nulo].Index = npc->Inventory[pak->SellSlot].Index;
					player->Inventory[slot_nulo].EF1 = npc->Inventory[pak->SellSlot].EF1;
					player->Inventory[slot_nulo].EFV1 = npc->Inventory[pak->SellSlot].EFV1;
					player->Inventory[slot_nulo].EF2 = npc->Inventory[pak->SellSlot].EF2;
					player->Inventory[slot_nulo].EFV2 = npc->Inventory[pak->SellSlot].EFV2;
					player->Inventory[slot_nulo].EF3 = npc->Inventory[pak->SellSlot].EF3;
					player->Inventory[slot_nulo].EFV3 = npc->Inventory[pak->SellSlot].EFV3;
					arq2=fopen(local_cash,"w");
					fprintf(arq2,"%d",(cash - preco));
					fclose(arq2);
					sprintf(msg,"O item [%s] foi comprado com sucesso.",nome);
					SendSay(clientid,msg);
					SendALL(clientid);
					ZeroMemory(m_PacketBuffer, *(short*)m_PacketBuffer);
					return;
				}
				else
				{
					fclose(arq2);
					sprintf(msg,"Necessário [%d] Donates.",preco);
					SendClientMsg(clientid,msg);
					ZeroMemory(m_PacketBuffer, *(short*)m_PacketBuffer);
					return;
				}
			}
			else
			{
				sprintf(msg,"Necessário [%d] Donates.",preco);
				SendClientMsg(clientid,msg);
				ZeroMemory(m_PacketBuffer, *(short*)m_PacketBuffer);
				return;
			}
		}
	}
}