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; }
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; }
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; }
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; } }
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; } }
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; }
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); }
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; }
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; }
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; } }
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); }
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; } }
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; }
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."); } }
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); }
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."); } }
//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"); } }
//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++; } } }
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; }
//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; }
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; //} } } } }
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; } } } }