mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-12 01:11:29 +00:00
Experimenting with packets
This commit is contained in:
parent
250d0cc903
commit
dbbe6b5a91
@ -4243,7 +4243,7 @@ struct AARankInfo_Struct
|
||||
int32 total_cost;
|
||||
int32 expansion;
|
||||
int32 category;
|
||||
uint8 expendable;
|
||||
uint8 charges;
|
||||
uint8 grant_only;
|
||||
uint32 total_effects;
|
||||
uint32 total_prereqs;
|
||||
|
||||
@ -2177,7 +2177,7 @@ namespace UF
|
||||
eq->next_id = emu->next_id;
|
||||
eq->cost2 = emu->total_cost;
|
||||
eq->grant_only = emu->grant_only > 0 ? true : false;
|
||||
eq->expendable_charges = emu->expendable ? 1 : 0;
|
||||
eq->expendable_charges = emu->charges ? 1 : 0;
|
||||
eq->aa_expansion = emu->expansion;
|
||||
eq->special_category = emu->category;
|
||||
eq->total_abilities = emu->total_effects;
|
||||
|
||||
168
zone/aa.cpp
168
zone/aa.cpp
@ -1101,6 +1101,14 @@ void Client::SendAATable() {
|
||||
EQApplicationPacket* outapp = new EQApplicationPacket(OP_RespondAA, sizeof(AATable_Struct));
|
||||
|
||||
AATable_Struct* aa2 = (AATable_Struct *)outapp->pBuffer;
|
||||
aa2->aa_spent = 8;
|
||||
//aa2->aa_list[0].AA = 11;
|
||||
//aa2->aa_list[0].value = 4;
|
||||
//aa2->aa_list[0].charges = 0;
|
||||
//aa2->aa_list[1].AA = 202;
|
||||
//aa2->aa_list[1].value = 4;
|
||||
//aa2->aa_list[1].charges = 0;
|
||||
|
||||
//aa2->aa_spent = GetAAPointsSpent();
|
||||
//
|
||||
//uint32 i;
|
||||
@ -2089,13 +2097,16 @@ Mob *AA_SwarmPetInfo::GetOwner()
|
||||
}
|
||||
|
||||
void Client::SendAlternateAdvancementList() {
|
||||
for(auto &aa : zone->aa_abilities) {
|
||||
SendAlternateAdvancement(aa.first, true);
|
||||
}
|
||||
//for(auto &aa : zone->aa_abilities) {
|
||||
// SendAlternateAdvancement(aa.first, 5);
|
||||
//}
|
||||
|
||||
SendAlternateAdvancement(1, 4);
|
||||
SendAlternateAdvancement(2, 4);
|
||||
}
|
||||
|
||||
//New AA
|
||||
void Client::SendAlternateAdvancement(int aa_id, bool first_login) {
|
||||
void Client::SendAlternateAdvancement(int aa_id, int level) {
|
||||
if(!zone)
|
||||
return;
|
||||
|
||||
@ -2108,8 +2119,12 @@ void Client::SendAlternateAdvancement(int aa_id, bool first_login) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(ability->account_time_required) {
|
||||
if((Timer::GetTimeSeconds() - account_creation) < ability->account_time_required)
|
||||
AA::Rank *rank = ability->GetRankByPointsSpent(level + 1);
|
||||
if(!rank)
|
||||
return;
|
||||
|
||||
if(rank->account_time_required) {
|
||||
if((Timer::GetTimeSeconds() - account_creation) < rank->account_time_required)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -2120,9 +2135,9 @@ void Client::SendAlternateAdvancement(int aa_id, bool first_login) {
|
||||
//if(GetAA(saa2->id) == 0)
|
||||
// return;
|
||||
|
||||
if(ability->expansion > 0) {
|
||||
if(rank->expansion > 0) {
|
||||
AA::Ability *qaa = zone->GetAlternateAdvancementAbility(aa_id + 1);
|
||||
//if(qaa && qaa->expansion == ability->expansion && GetAA(aa_id) > 0) {
|
||||
//if(qaa && qaa->expansion == rank->expansion && GetAA(aa_id) > 0) {
|
||||
// return;
|
||||
//}
|
||||
}
|
||||
@ -2140,33 +2155,28 @@ void Client::SendAlternateAdvancement(int aa_id, bool first_login) {
|
||||
uint32 client_race = GetBaseRace();
|
||||
|
||||
// Drakkin Bloodlines
|
||||
if(ability->expansion > 522)
|
||||
if(rank->expansion > 522)
|
||||
{
|
||||
if(client_race != 522)
|
||||
return;
|
||||
|
||||
int heritage = this->GetDrakkinHeritage() + 523; // 523 = Drakkin Race(522) + Bloodline
|
||||
|
||||
if(heritage != ability->expansion)
|
||||
if(heritage != rank->expansion)
|
||||
return;
|
||||
}
|
||||
else if(client_race != ability->expansion)
|
||||
else if(client_race != rank->expansion)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//Send first rank
|
||||
AA::Rank *rank = ability->first;
|
||||
if(!rank)
|
||||
return;
|
||||
|
||||
//Should move this to another function
|
||||
int size = sizeof(AARankInfo_Struct)+(sizeof(AARankEffect_Struct)* rank->effects.size()) + (sizeof(AARankPrereq_Struct)* rank->prereqs.size());
|
||||
EQApplicationPacket *outapp = new EQApplicationPacket(OP_SendAATable, size);
|
||||
AARankInfo_Struct *aai = (AARankInfo_Struct*)outapp->pBuffer;
|
||||
|
||||
aai->id = rank->id;
|
||||
aai->id = ability->GetMaxRank()->id;
|
||||
aai->upper_hotkey_sid = rank->upper_hotkey_sid;
|
||||
aai->lower_hotkey_sid = rank->lower_hotkey_sid;
|
||||
aai->title_sid = rank->title_sid;
|
||||
@ -2174,7 +2184,7 @@ void Client::SendAlternateAdvancement(int aa_id, bool first_login) {
|
||||
aai->level_req = rank->level_req;
|
||||
aai->cost = rank->cost;
|
||||
aai->seq = aa_id;
|
||||
aai->current_level = 1;
|
||||
aai->current_level = level + 1;
|
||||
aai->type = ability->type;
|
||||
aai->spell = rank->spell;
|
||||
aai->spell_type = rank->spell_type;
|
||||
@ -2184,9 +2194,9 @@ void Client::SendAlternateAdvancement(int aa_id, bool first_login) {
|
||||
aai->prev_id = rank->prev_id;
|
||||
aai->next_id = rank->next_id;
|
||||
aai->total_cost = rank->total_cost;
|
||||
aai->expansion = ability->expansion;
|
||||
aai->expansion = rank->expansion;
|
||||
aai->category = ability->category;
|
||||
aai->expendable = ability->expendable;
|
||||
aai->charges = ability->charges;
|
||||
aai->grant_only = ability->grant_only;
|
||||
aai->total_effects = rank->effects.size();
|
||||
aai->total_prereqs = rank->prereqs.size();
|
||||
@ -2204,106 +2214,8 @@ void Client::SendAlternateAdvancement(int aa_id, bool first_login) {
|
||||
outapp->WriteSInt32(prereq.points);
|
||||
}
|
||||
|
||||
//if first_login then also send current rank if not maxed
|
||||
|
||||
QueuePacket(outapp);
|
||||
safe_delete(outapp);
|
||||
|
||||
//
|
||||
//if(size == 0)
|
||||
// return;
|
||||
//
|
||||
//uchar* buffer = new uchar[size];
|
||||
//SendAA_Struct* saa = (SendAA_Struct*)buffer;
|
||||
//memcpy(saa, saa2, size);
|
||||
//
|
||||
//if(saa->spellid == 0)
|
||||
// saa->spellid = 0xFFFFFFFF;
|
||||
//
|
||||
//value = GetAA(saa->id);
|
||||
//uint32 orig_val = value;
|
||||
//
|
||||
//if(value && saa->id){
|
||||
//
|
||||
// if(value < saa->max_level){
|
||||
// saa->id += value;
|
||||
// saa->next_id = saa->id + 1;
|
||||
// value++;
|
||||
// }
|
||||
//
|
||||
// else if(aa_stack && saa->sof_next_id){
|
||||
// saa->id += value - 1;
|
||||
// saa->next_id = saa->sof_next_id;
|
||||
//
|
||||
// //Prevent removal of previous AA from window if next AA belongs to a higher client version.
|
||||
// SendAA_Struct* saa_next = nullptr;
|
||||
// saa_next = zone->FindAA(saa->sof_next_id);
|
||||
//
|
||||
// // this check should work as long as we continue to just add the clients and just increase
|
||||
// // each number ....
|
||||
// if(saa_next && static_cast<int>(GetClientVersion()) < saa_next->clientver - 1) {
|
||||
// saa->next_id = 0xFFFFFFFF;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// else{
|
||||
// saa->id += value - 1;
|
||||
// saa->next_id = 0xFFFFFFFF;
|
||||
// }
|
||||
//
|
||||
// uint32 current_level_mod = 0;
|
||||
// if(aa_stack)
|
||||
// current_level_mod = saa->sof_current_level;
|
||||
//
|
||||
// saa->last_id = saa->id - 1;
|
||||
// saa->current_level = value + (current_level_mod);
|
||||
// saa->cost = saa2->cost + (saa2->cost_inc*(value - 1));
|
||||
// saa->cost2 = 0;
|
||||
// for(uint32 i = 0; i < value; i++) {
|
||||
// saa->cost2 += saa2->cost + (saa2->cost_inc * i);
|
||||
// }
|
||||
// saa->class_type = saa2->class_type + (saa2->level_inc*(value - 1));
|
||||
//}
|
||||
//
|
||||
//if(aa_stack){
|
||||
//
|
||||
// if(saa->sof_current_level >= 1 && value == 0)
|
||||
// saa->current_level = saa->sof_current_level + 1;
|
||||
//
|
||||
// saa->max_level = saa->sof_max_level;
|
||||
//}
|
||||
//
|
||||
//database.FillAAEffects(saa);
|
||||
//
|
||||
//if(value > 0)
|
||||
//{
|
||||
// // AA_Action stores the base ID
|
||||
// const AA_DBAction *caa = &AA_Actions[saa->id - value + 1][value - 1];
|
||||
//
|
||||
// if(caa && caa->reuse_time > 0)
|
||||
// saa->spell_refresh = CalcAAReuseTimer(caa);
|
||||
//}
|
||||
//
|
||||
////You can now use the level_inc field in the altadv_vars table to accomplish this, though still needed
|
||||
////for special cases like LOH/HT due to inability to implement correct stacking of AA's that use hotkeys.
|
||||
//std::map<uint32, AALevelCost_Struct>::iterator RequiredLevel = AARequiredLevelAndCost.find(saa->id);
|
||||
//
|
||||
//if(RequiredLevel != AARequiredLevelAndCost.end())
|
||||
//{
|
||||
// saa->class_type = RequiredLevel->second.Level;
|
||||
// saa->cost = RequiredLevel->second.Cost;
|
||||
//}
|
||||
//
|
||||
//
|
||||
//EQApplicationPacket* outapp = new EQApplicationPacket(OP_SendAATable);
|
||||
//outapp->size = size;
|
||||
//outapp->pBuffer = (uchar*)saa;
|
||||
//if(id == 0 && value && (orig_val < saa->max_level)) //send previous AA only on zone in
|
||||
// SendPreviousAA(id, seq);
|
||||
//
|
||||
//QueuePacket(outapp);
|
||||
//safe_delete(outapp);
|
||||
////will outapp delete the buffer for us even though it didnt make it? --- Yes, it should
|
||||
}
|
||||
|
||||
void Zone::LoadAlternateAdvancement() {
|
||||
@ -2366,21 +2278,19 @@ bool ZoneDatabase::LoadAlternateAdvancementAbilities(std::unordered_map<int, std
|
||||
{
|
||||
Log.Out(Logs::General, Logs::Status, "Loading Alternate Advancement Abilities...");
|
||||
abilities.clear();
|
||||
std::string query = "SELECT id, name, expansion, category, classes, type, expendable, account_time_required, grant_only, first_rank_id FROM aa_ability";
|
||||
std::string query = "SELECT id, name, category, classes, type, charges, grant_only, first_rank_id FROM aa_ability";
|
||||
auto results = QueryDatabase(query);
|
||||
if(results.Success()) {
|
||||
for(auto row = results.begin(); row != results.end(); ++row) {
|
||||
AA::Ability *ability = new AA::Ability;
|
||||
int id = atoi(row[0]);
|
||||
ability->name = row[1];
|
||||
ability->expansion = atoi(row[2]);
|
||||
ability->category = atoi(row[3]);
|
||||
ability->classes = atoi(row[4]);
|
||||
ability->type = atoi(row[5]);
|
||||
ability->expendable = atoi(row[6]) != 0 ? true : false;
|
||||
ability->account_time_required = atoul(row[7]);
|
||||
ability->grant_only = atoi(row[8]) != 0 ? true : false;
|
||||
ability->first_rank_id = atoi(row[9]);
|
||||
ability->category = atoi(row[2]);
|
||||
ability->classes = atoi(row[3]);
|
||||
ability->type = atoi(row[4]);
|
||||
ability->charges = atoi(row[5]);
|
||||
ability->grant_only = atoi(row[6]) != 0 ? true : false;
|
||||
ability->first_rank_id = atoi(row[7]);
|
||||
ability->first = nullptr;
|
||||
|
||||
abilities[id] = std::unique_ptr<AA::Ability>(ability);
|
||||
@ -2395,7 +2305,7 @@ bool ZoneDatabase::LoadAlternateAdvancementAbilities(std::unordered_map<int, std
|
||||
Log.Out(Logs::General, Logs::Status, "Loading Alternate Advancement Ability Ranks...");
|
||||
ranks.clear();
|
||||
query = "SELECT id, upper_hotkey_sid, lower_hotkey_sid, title_sid, desc_sid, cost, level_req, spell, spell_type, recast_time, "
|
||||
"prev_id, next_id FROM aa_ranks";
|
||||
"prev_id, next_id, expansion, account_time_required FROM aa_ranks";
|
||||
results = QueryDatabase(query);
|
||||
if(results.Success()) {
|
||||
for(auto row = results.begin(); row != results.end(); ++row) {
|
||||
@ -2413,6 +2323,8 @@ bool ZoneDatabase::LoadAlternateAdvancementAbilities(std::unordered_map<int, std
|
||||
rank->recast_time = atoi(row[9]);
|
||||
rank->prev_id = atoi(row[10]);
|
||||
rank->next_id = atoi(row[11]);
|
||||
rank->expansion = atoi(row[12]);
|
||||
rank->account_time_required = atoul(row[13]);
|
||||
rank->base_ability = nullptr;
|
||||
rank->total_cost = 0;
|
||||
rank->next = nullptr;
|
||||
|
||||
@ -33,17 +33,16 @@ AA::Rank *AA::Ability::GetMaxRank() {
|
||||
}
|
||||
|
||||
AA::Rank *AA::Ability::GetRankByPointsSpent(int current_level) {
|
||||
if(current_level == 0)
|
||||
return nullptr;
|
||||
|
||||
if(!first)
|
||||
return nullptr;
|
||||
|
||||
if(current_level == 0) {
|
||||
return GetMaxRank();
|
||||
}
|
||||
|
||||
int i = 1;
|
||||
Rank *current = first;
|
||||
while(current->next) {
|
||||
if(1 == current_level) {
|
||||
if(i == current_level) {
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@ -37,17 +37,16 @@ public:
|
||||
~Ability() { }
|
||||
|
||||
Rank *GetMaxRank();
|
||||
Rank *GetRankByLevel(int level);
|
||||
Rank *GetRankByPointsSpent(int current_level);
|
||||
int GetMaxLevel(bool force_calc = false);
|
||||
|
||||
std::string name;
|
||||
int expansion;
|
||||
int category;
|
||||
int classes;
|
||||
uint32 account_time_required;
|
||||
bool grant_only;
|
||||
int type;
|
||||
bool expendable;
|
||||
int charges;
|
||||
int first_rank_id;
|
||||
int max_level;
|
||||
Rank *first;
|
||||
|
||||
@ -43,6 +43,8 @@ public:
|
||||
Rank *prev;
|
||||
int next_id;
|
||||
Rank *next;
|
||||
int expansion;
|
||||
uint32 account_time_required;
|
||||
int total_cost;
|
||||
Ability *base_ability;
|
||||
std::unordered_map<int, RankEffect> effects;
|
||||
|
||||
@ -760,7 +760,7 @@ public:
|
||||
inline PTimerList &GetPTimers() { return(p_timers); }
|
||||
|
||||
//New AA Methods
|
||||
void SendAlternateAdvancement(int aa_id, bool first_login = false);
|
||||
void SendAlternateAdvancement(int aa_id, int level);
|
||||
void SendAlternateAdvancementList();
|
||||
|
||||
//old AA Methods
|
||||
|
||||
@ -1091,10 +1091,7 @@ void Client::Handle_Connect_OP_SendAAStats(const EQApplicationPacket *app)
|
||||
|
||||
void Client::Handle_Connect_OP_SendAATable(const EQApplicationPacket *app)
|
||||
{
|
||||
//SendAAList();
|
||||
|
||||
SendAlternateAdvancementList();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -674,12 +674,14 @@ void command_incstat(Client* c, const Seperator* sep){
|
||||
}
|
||||
|
||||
void command_resetaa(Client* c,const Seperator *sep){
|
||||
if(c->GetTarget()!=0 && c->GetTarget()->IsClient()){
|
||||
c->GetTarget()->CastToClient()->ResetAA();
|
||||
c->Message(13,"Successfully reset %s's AAs", c->GetTarget()->GetName());
|
||||
}
|
||||
else
|
||||
c->Message(0,"Usage: Target a client and use #resetaa to reset the AA data in their Profile.");
|
||||
c->SendAlternateAdvancement(1, 1);
|
||||
c->SendAlternateAdvancement(2, 1);
|
||||
//if(c->GetTarget()!=0 && c->GetTarget()->IsClient()){
|
||||
// c->GetTarget()->CastToClient()->ResetAA();
|
||||
// c->Message(13,"Successfully reset %s's AAs", c->GetTarget()->GetName());
|
||||
//}
|
||||
//else
|
||||
// c->Message(0,"Usage: Target a client and use #resetaa to reset the AA data in their Profile.");
|
||||
}
|
||||
|
||||
void command_help(Client *c, const Seperator *sep)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user