public boolean purchaseSkill(int skill, String name, int cid) {
        final MapleStatEffect skillid = SkillFactory.getSkill(skill).getEffect(getSkillLevel(skill) + 1);
        if (skillid.getReqGuildLevel() > getLevel() || skillid.getLevel() <= getSkillLevel(skill)) {
            return false;
        }
        MapleGuildSkill ourSkill = guildSkills.get(skill);
        if (ourSkill == null) {
            ourSkill = new MapleGuildSkill(skill, skillid.getLevel(), 0, name, name);
            guildSkills.put(skill, ourSkill);
        } else {
            ourSkill.level = skillid.getLevel();
            ourSkill.purchaser = name;
            ourSkill.activator = name;
        }
        if (skillid.getPeriod() <= 0) {
            ourSkill.timestamp = -1L;
        } else {
            ourSkill.timestamp = System.currentTimeMillis() + (skillid.getPeriod() * 60000L);
        }
        changed_skills = true;
        gainGP(1000, true, cid);
        broadcast(GuildPacket.guildSkillPurchased(id, skill, ourSkill.level, ourSkill.timestamp, name, name));
        return true;
    }