case PACKET_OPEN: // Talked to a skill master NPC
{
if (this->state < EOClient::Playing) return false;
CLIENT_QUEUE_ACTION(0.0)
short id = reader.GetShort();
UTIL_PTR_VECTOR_FOREACH(this->player->character->map->npcs, NPC, npc)
{
if (npc->index == id && (npc->spell_shop.size() > 0 || npc->spell_shop.size() > 0))
{
this->player->character->npc = *npc;
this->player->character->npc_type = ENF::Skills;
reply.SetID(PACKET_STATSKILL, PACKET_OPEN);
reply.AddShort(npc->id);
reply.AddBreakString(npc->skill_name.c_str());
UTIL_PTR_VECTOR_FOREACH(npc->spell_shop, NPC_Spell_Trade, spell)
{
reply.AddShort(spell->id);
reply.AddShort(spell->level);
reply.AddInt(spell->gold);
reply.AddShort(spell->spell1);
reply.AddShort(spell->spell2);
reply.AddShort(spell->spell3);
reply.AddShort(spell->spell4);
reply.AddShort(spell->str);
reply.AddShort(spell->wis);
reply.AddShort(spell->intt);
reply.AddShort(spell->agi);
reply.AddShort(spell->con);
reply.AddShort(spell->cha);
}
CLIENT_SEND(reply);
}
}
}
break;
case PACKET_TAKE:
{
int amount = reader.GetInt();
int spell = reader.GetShort();
if (this->player->character->npc_type == ENF::Skills)
{
UTIL_PTR_VECTOR_FOREACH(this->player->character->npc->spell_shop, NPC_Spell_Trade, checkspell)
{
if (checkspell->id == spell && this->player->character->HasItem(1) >= checkspell->gold)
{
this->player->character->DelItem(1, checkspell->gold);
this->player->character->AddSpell(spell, 0);
PacketBuilder builder(PACKET_STATSKILL, PACKET_TAKE);
builder.AddShort(spell);
builder.AddInt(this->player->character->HasItem(1));
CLIENT_SEND(builder);
break;
}
}
}
}
break;
case PACKET_REMOVE:
{
int data1 = reader.GetInt();
int spellid = reader.GetShort();
int data3 = reader.GetChar();
if(this->player->character->HasSpell(spellid))
{
UTIL_PTR_LIST_FOREACH(this->player->character->spells, Character_Spell, spl)
{
if(spellid == spl->id)
{
this->player->character->skillpoints += spl->level;
this->player->character->DelSpell(spellid);
reply.SetID(PACKET_STATSKILL, PACKET_REMOVE);
reply.AddShort(spellid);
CLIENT_SEND(reply);
break;
}
}
}
}
break;