Example #1
0
void ListUiStats(json::Value& value, json::Value& data) {
  TransformJson(value, data, FormatTag);
  std::string pane = "$StatsPane/";

  for (auto& cat : value["uiStats"]) {
    for (auto& stat : cat["stats"]) {
      if (!stat.has("tooltip") || !stat.has("name")) continue;

      std::string tip = stat["tooltip"].getString();
      if (tip.find(pane) == 0) {
        std::string alt = stat["name"].getString();
        if (alt.find(pane) == 0) {
          alt = alt.substr(pane.length(), alt.length() - pane.length() - 1);
        }
        alt.append(" - Tip");
        data["stringlist"]["StatsPane"][alt]["text"] = tip.substr(pane.length(), tip.length() - pane.length() - 1);
        stat["tooltip"] = fmtstring("$StatsPane/%s$", alt.c_str());
      }
      std::string suffix = stat["suffix"].getString();
      if (suffix.find(pane) == 0) {
        std::string alt = stat["name"].getString();
        if (alt.find(pane) == 0) {
          alt = alt.substr(pane.length(), alt.length() - pane.length() - 1);
        }
        alt.append(" - Extra tip");
        data["stringlist"]["StatsPane"][alt]["text"] = tip.substr(pane.length(), tip.length() - pane.length() - 1);
        stat["suffix"] = fmtstring("$StatsPane/%s$", alt.c_str());
      }
    }
  }

  TransformJson(value, data, StoreTag);
}
Example #2
0
 void DumpActorLook(json::Value& value, uint32 aid) {
   SnoFile<Actor> actor(Actor::name(aid));
   if (!actor) return;
   SnoFile<Appearance> app(actor->x014_AppearanceSno.name());
   if (!app) return;
   auto& val = value[fmtstring("%d", aid)]["looks"];
   uint32 index = 0;
   for (auto& look : app->x1C0_AppearanceLooks) {
     val[fmtstring("%u", HashName(look.x00_Text))] = index++;
   }
 }
Example #3
0
std::string FormulaParser::Value::format() {
  if (!text.empty()) {
    if (text == "%") {
      std::string res = (digits ? fmtstring("%%.%df", digits) : "%d");
      if (plus) res.insert(res.begin(), '+');
      return res;
    }
    return text;
  } else if (min == max) {
    return fmtstring(plus ? "%+.*lf" : "%.*lf", digits, max);
  } else {
    return fmtstring(plus ? "%+.*lf-%.*lf" : "%.*lf-%.*lf", digits, min, digits, max);
  }
}
Example #4
0
File: dns.c Project: GNS3/vpcs
static int dnsrequest(u_short id, const char *name, int type, char *data, int *namelen)
{
	u_char buf[256];	
	dnshdr dh;
	int dlen = sizeof(dnshdr);
	int i;
	
	memset(&dh, 0, sizeof(dnshdr));
	dh.id = id;
	dh.flags = 0x0001; /* QR|OC|AA|TC|RD -  RA|Z|RCODE  */
	dh.query = htons(0x0001); /* one query */
	  	
	memcpy(data, (void *)&dh, sizeof(dnshdr));
	
	/* query name */
	memset(buf, 0, sizeof(buf));
	i = fmtstring(name, (char *)buf);
	if (i == 0)
		return 0;
	*namelen = i;
	memcpy(data + dlen, buf, i);
	dlen += i;
	
	/* A record */
	data[dlen++] = 0x00;
	data[dlen++] = type;
	/* IN class */
	data[dlen++] = 0x00;
	data[dlen++] = 0x01;
	
	return dlen;
}
Example #5
0
Dictionary PowerTag::formulas() {
  auto& tags = PowerTags::instance().reverse_;
  Dictionary values;
  for (auto& kv : formulas_) {
    values.emplace(tags[kv.first], kv.second.state == sDone ? fmtstring("%d", kv.second.value) : kv.second.text);
  }
  return values;
}
Example #6
0
 void AddActorInfo(json::Value& values, uint32 aid, bool hair, bool fixEmitter, uint32 orig = 0) {
   SnoFile<Actor> actor(Actor::name(aid));
   if (!actor) return;
   uint32 emitId = (fixEmitter ? FixEmitter(actor) : aid);
   if (emitId != actor->x000_Header.id) {
     AddActorInfo(values, emitId, hair, false, aid);
     return;
   }
   auto& value = values[fmtstring("%d", orig ? orig : aid)];
   if (hair) {
     std::map<uint32, uint32> tags;
     for (uint32 i = 1; i + 3 <= actor->x060_TagMap.size(); i += 3) {
       tags[actor->x060_TagMap[i + 1]] = actor->x060_TagMap[i + 2];
     }
     value["hair"] = tags[66564];
   }
   SnoFile<AnimSet> animSet(actor->x068_AnimSetSno.name());
   if (animSet) {
     uint32 anim = 0;
     for (auto& tm : animSet->x010_AnimSetTagMaps) {
       if (!tm.x08_TagMap.size() || tm.x08_TagMap.size() != tm.x08_TagMap[0] * 3 + 1) continue;
       for (uint32 i = 1; i + 3 <= tm.x08_TagMap.size(); i += 3) {
         if (Anim::name(tm.x08_TagMap[i + 2])) {
           anim = tm.x08_TagMap[i + 2];
         }
       }
     }
     if (anim) {
       value["animation"] = anim;
     }
   }
   SnoFile<Appearance> app(actor->x014_AppearanceSno.name());
   if (app) {
     json::Value enable(json::Value::tObject);
     uint32 index = 0;
     for (auto& object : app->x010_Structure.x088_GeoSets[0].x10_SubObjects) {
       if (strcmp(object.x05C_Text, "FX_EMIT")) {
         enable[fmtstring("%d", index)] = 0;
       }
       ++index;
     }
     value["enable"] = enable;
   }
 }
Example #7
0
bool ChatHandler::HandleLearnCommand(const char* args)
{
    WorldPacket data;

    if (!*args)
        return false;

    if (!strcmp(args, "all"))
    {
        int loop = 0;

        FillSystemMessageData(&data, m_session, fmtstring("%s - Learning default GM spells/skills.", m_session->GetPlayer()->GetName()));
        m_session->SendPacket(&data);

        while (strcmp(gmSpellList[loop], "0"))
        {
            uint32 spell = atol((char*)gmSpellList[loop]);

            
            

            if (m_session->GetPlayer()->HasSpell(spell))  
            {
                
                
                loop++;
                continue;
            }

            data.Initialize( SMSG_LEARNED_SPELL );
            data << (uint32)spell;
            m_session->SendPacket( &data );
            m_session->GetPlayer()->addSpell((uint16)spell);

            loop++;
        }

        return true;
    }

    uint32 spell = atol((char*)args);

    if (m_session->GetPlayer()->HasSpell(spell))  
    {
        FillSystemMessageData(&data, m_session, "You already know that spell.");
        m_session->SendPacket(&data);
        return true;
    }

    data.Initialize( SMSG_LEARNED_SPELL );
    data << (uint32)spell;
    m_session->SendPacket( &data );
    m_session->GetPlayer()->addSpell((uint16)spell);

    return true;
}
Example #8
0
bool ChatHandler::HandleCreateGuildCommand(const char* args)
{
	WorldPacket data;
	Guild *guild;
	Player * player;
	std::string lname,gname;
	
	if (!*args)
        return false;
	
	lname = strtok((char*)args, " ");
	gname = strtok(NULL, " ");
	if(!gname.c_str())
	{
		FillSystemMessageData(&data, m_session, fmtstring("You need to insert a Guild Name!"));
		m_session->SendPacket(&data);
		return true;
	}

	player = ObjectAccessor::Instance().FindPlayerByName(lname.c_str());

	if(!player)
	{
		FillSystemMessageData(&data, m_session, fmtstring("Player not found!"));
		m_session->SendPacket(&data);
		return true;
	}

	if(!player->GetGuildId())
	{
		guild = new Guild;
		guild->create(player->GetGUID(),gname);
		objmgr.AddGuild(guild);
	}
	else
	{
		FillSystemMessageData(&data, m_session, fmtstring("Player already have a guild!"));
		m_session->SendPacket(&data);
	}
	
	return true;
}
Example #9
0
ChunkQueue::ChunkQueue(json::Value const& config)
  : config_(config)
  , vod_(Video::open(config))
  , path_(config["path"].getString())
  , ctx_(cv::Size(vod_->width(), vod_->height() / 5))
  , last_index_(0)
{
  double factor = vod_->width() / 1920.0;
  assemble_ = cv::imread(path::root() / "heroes/assemble.png");
  prepare_ = cv::imread(path::root() / "heroes/prepare.png");
  cv::cvtColor(assemble_, assemble_, cv::COLOR_BGR2GRAY);
  cv::cvtColor(prepare_, prepare_, cv::COLOR_BGR2GRAY);
  cv::resize(assemble_, assemble_, cv::Size(), factor, factor, cv::INTER_LANCZOS4);
  cv::resize(prepare_, prepare_, cv::Size(), factor, factor, cv::INTER_LANCZOS4);

  json::Value hero_list;
  json::parse(File(path::root() / "heroes/list.js"), hero_list, json::mJS, nullptr, true);
  std::vector<Sprite> sprites;

  for (auto const& kv : hero_list.getMap()) {
    cv::Mat icon = cv::imread(path::root() / fmtstring("heroes/%s.png", kv.first.c_str()), -1);
    if (icon.empty()) continue;
    if (icon.rows > 30) {
      icon = icon(cv::Rect(0, icon.rows - 30, icon.cols, 30));
    }
    sprites_.emplace_back(kv.first, icon, kv.second.getNumber(), ctx_);
  }

  size_t current = 0;
  if (!json::parse(File(path_ / "status.json"), result_)) {
    result_.clear();
    result_["config"] = config;
    json::write(File(path_ / "status.json", "wb"), result_);
  } else {
    if (result_.has("current")) {
      current = result_["current"].getInteger();
    }
  }

  double start_time = config["start_time"].getNumber();
  double end_time = config["end_time"].getNumber();
  for (size_t index = current; index < vod_->size(); ++index) {
    if (vod_->duration(index + 1) <= start_time) continue;
    if (vod_->duration(index) >= end_time) break;

    push(index);
    last_index_ = index + 1;
  }
  finish();

  consumer_.reset(new std::thread(consume, this));
}
Example #10
0
bool ChatHandler::HandleCreatureDistanceCommand(const char* args)
{
    WorldPacket data;

    if (!*args)
        return false;

    max_creature_distance = (float)atof((char*)args);

    FillSystemMessageData(&data, m_session, fmtstring("Creature max think distance set to %f (units from nearest player).", max_creature_distance));
    m_session->SendPacket(&data);

    return true;
}
Example #11
0
// wrapper around cmd_plan, fork here
static int start_plan(struct myfile *req,int do_fork)
{
  int rv;
  char logname[1024];
  char filename[1024];
  char *file,*ext;
  int pid;

  search src;

  oclear(src);

  file = strrchr(req->name,'/');
  if (file) file++; else file = req->name;
  ext = strrchr(req->name,'.');
  if (ext) fmtstring(filename,"%.*s",(ub4)(ext - file),file);
  else strcopy(filename,file);

  if (do_fork) {
    pid = fork();
    if (pid == -1) { oserror(0,"Cannot fork from %u for %s",globs.pid,filename); return -1; }
    else if (pid) { info(0,"create process %u for %s",pid,filename); return pid; }

    globs.pid = getpid();
    fmtstring(logname,"log/%s_%u.log",filename,globs.pid);
    setmsglog(globs.netdir,logname,1);
  }

  gnet *net = getgnet();

  rv = cmd_plan(net,req,&src);
  if (rv) info(0,"plan returned %d",rv);
  if (do_fork) {
    eximsg(0);
    exit(rv);
  } else return rv;
}
Example #12
0
 json::Value MakeActor(SnoFile<Actor>& actor, std::map<uint32, uint32>& tags, json::Value& actors, bool fixEmitter, bool right = false, bool hair = false) {
   static int charActors[] = {3301, 3285, 6544, 6526, 6485, 6481, 4721, 4717, 75207, 74706, 238284, 238286};
   if (tags[94240]) {
     json::Value res(json::Value::tObject);
     for (uint32 id = (right ? 94720 : 94208), idx = 0; idx < 12; ++id, ++idx) {
       if (Actor::name(tags[id])) {
         res[fmtstring("%d", charActors[idx])] = tags[id];
         AddActorInfo(actors, tags[id], hair, fixEmitter);
       }
     }
     return res;
   } else {
     AddActorInfo(actors, actor->x000_Header.id, hair, fixEmitter);
     return actor->x000_Header.id;
   }
 }
Example #13
0
 static bool HandleTausendwinterWechselnCmd(ChatHandler* handler, const char* /*args*/)
 {
     Tausendwinter * pTW = (Tausendwinter*)sOutdoorPvPMgr->GetOutdoorPvPToZoneId(NORDEND_TAUSENDWINTER);
     if (!pTW)
     {
         handler->SendSysMessage(LANG_TAUSENDWINTER_VAR_INIT_FEHLER);
         handler->SetSentErrorMessage(true);
         return false;
     }
     else
     {
         pTW->ErzwingeTeamwechsel();
         sWorld->SendZoneText(NORDEND_TAUSENDWINTER, fmtstring(sObjectMgr->GetTrinityStringForDBCLocale(LANG_TAUSENDWINTER_WECHSEL_DES_BESITZERS),
             pTW->HoleAngreiferTeamId() == TEAM_ALLIANCE ? sObjectMgr->GetTrinityStringForDBCLocale(LANG_BG_AB_ALLY) : sObjectMgr->GetTrinityStringForDBCLocale(LANG_BG_AB_HORDE)));
         return true;
     }
 }
Example #14
0
    static bool HandleTausendwinterZeitCmd(ChatHandler* handler, const char* args)
    {
        if (!args)
        {
            handler->SendSysMessage(LANG_TAUSENDWINTER_KEINE_ZEIT);
            handler->SetSentErrorMessage(true);
            return false;
        }

        Tausendwinter * pTW = (Tausendwinter*)sOutdoorPvPMgr->GetOutdoorPvPToZoneId(NORDEND_TAUSENDWINTER);
        if (!pTW)
        {
            handler->SendSysMessage(LANG_TAUSENDWINTER_VAR_INIT_FEHLER);
            handler->SetSentErrorMessage(true);
            return false;
        }

        int32 Zeit = atoi(args);

        if (Zeit < 1)
            Zeit = 1;

        if (pTW->IstKampf() && Zeit > 60)
        {
            handler->SendSysMessage(LANG_TAUSENDWINTER_IM_KAMPF_MAX_60);
            handler->SetSentErrorMessage(true);
            return false;
        }
        else if (Zeit > 1440)
        {
            handler->SendSysMessage(LANG_TAUSENDWINTER_MAX_1440);
            handler->SetSentErrorMessage(true);
            return false;
        }
        pTW->SetzeZeit(uint32(Zeit *= IN_MILLISECONDS * MINUTE));
        sWorld->SendZoneText(NORDEND_TAUSENDWINTER, fmtstring(sObjectMgr->GetTrinityStringForDBCLocale(LANG_TAUSENDWINTER_ZEIT_GEAENDERT), handler->GetSession()->GetPlayerName(),
            secsToTimeString(pTW->HoleZeitInSekunden(), true).c_str()));

        return true;
    }
Example #15
0
json::Value PowerTag::dump() const {
  auto& rawnames = PowerTags::instance().rawnames_;
  json::Value dst;
  for (auto& kv : formulas_) {
    auto& cur = dst[rawnames[kv.first]];
    if (kv.second.state == sDone) {
      cur = (uint32) kv.second.value;
    } else {
      cur.append(kv.second.text);
      std::string fmt;
      for (uint32 val : kv.second.formula) {
        if (!fmt.empty()) fmt.push_back(',');
        fmt.append(fmtstring("%08x", val));
      }
      cur.append(fmt);
      if (!kv.second.comment.empty()) {
        cur.append(kv.second.comment);
      }
    }
  }
  return dst;
}
Example #16
0
 static bool HandleTausendwinterStopCmd(ChatHandler* handler, const char* /*args*/)
 {
     Tausendwinter * pTW = (Tausendwinter*)sOutdoorPvPMgr->GetOutdoorPvPToZoneId(NORDEND_TAUSENDWINTER);
     if (!pTW)
     {
         handler->SendSysMessage(LANG_TAUSENDWINTER_VAR_INIT_FEHLER);
         handler->SetSentErrorMessage(true);
         return false;
     }
     else if (!sWorld->getBoolConfig(CONFIG_TW_AKTIVIERT))
     {
         handler->SendSysMessage(LANG_TAUSENDWINTER_DEAKTIVIERT);
         handler->SetSentErrorMessage(true);
         return false;
     }
     else
     {
         pTW->ErzwingeKampfBeenden();
         sWorld->SendZoneText(NORDEND_TAUSENDWINTER, fmtstring(sObjectMgr->GetTrinityStringForDBCLocale(LANG_TAUSENDWINTER_KAMPF_WURDE_BEENDET), handler->GetSession()->GetPlayerName()));
         return true;
     }
 }
Example #17
0
void GenerateItems(json::Value& value, json::Value& data) {
  auto names = Strings::list("Items");
  auto powers = Strings::list("ItemPassivePowerDescriptions");
  uint32 powId = fixAttrId(1270, true);
  std::map<std::string, std::string> powerFix;
  powerFix.emplace("Unique_Amulet_109_x1_210", "ItemPassive_x1_Amulet_norm_unique_25_DemonHunter");

  std::map<uint32, GameBalance::Type::AffixTableEntry*> affixes;
  SnoFile<GameBalance> affixFile("1xx_AffixList");
  for (auto& afx : affixFile->x078_AffixTable) {
    affixes.emplace(HashNameLower(afx.x000_Text), &afx);
  }
  for (auto& rcp : SnoLoader::All<Recipe>()) {
    std::string item = rcp->x0C_ItemSpecifierData.x00_ItemsGameBalanceId.name();
    if (item.empty()) continue;
    uint32 power = 0;
    for (auto& id : rcp->x0C_ItemSpecifierData.x08_GameBalanceIds) {
      if (affixes.count(id)) {
        for (auto& attr : affixes[id]->x260_AttributeSpecifiers) {
          if (attr.x00_Type == powId) {
            power = attr.x04_Param;
            break;
          }
        }
      }
      if (power) break;
    }
    char const* pname = (power ? Power::name(power) : nullptr);
    if (pname) powerFix.emplace(item, pname);
  }

  for (auto& kv : data["itemById"].getMap()) {
    if (kv.second.has("required")) {
      std::string key = kv.second["required"]["custom"]["id"].getString();
      data["legendaryMap"][key] = kv.first;
    }
    auto* item = ItemLibrary::get(kv.first);
    if (!names.has(kv.first) || !item) {
      if (kv.first != "Unique_Ring_017_p4") {
        Logger::log("Item not found: %s", kv.first.c_str());
        continue;
      }
    }
    auto& dst = value["itemById"][kv.first];
    dst["name"] = names[kv.first == "Unique_Ring_017_p4" ? "Unique_Ring_017_p2" : kv.first];
    if (kv.second.has("required")) {
      std::string key = kv.second["required"]["custom"]["id"].getString();
      data["stringlist"]["Items"][key]["text"] = kv.second["required"]["custom"]["name"];
      data["stringlist"]["Items"][key]["tip"] = names[kv.first] + " (short effect name)";
      dst["required"]["custom"]["name"] = fmtstring("$Items/%s$", key.c_str());
      bool found = false;
      for (auto& attr : item->x1F8_AttributeSpecifiers) {
        if (attr.x00_Type != powId) continue;
        char const* name = Power::name(attr.x04_Param);
        auto* tag = PowerTags::getraw(attr.x04_Param);
        if (!name || !tag || !powers.has(name)) {
          Logger::log("Power not found for %s", kv.first.c_str());
          continue;
        }
        auto values = GameAffixes::defaultMap();
        AttributeValue value = ExecFormula(
          reinterpret_cast<uint32 const*>(attr.x08_Data.begin()),
          reinterpret_cast<uint32 const*>(attr.x08_Data.end()),
          values);
        if (value.min != value.max) {
          values["value1"] = AttributeValue("%");
        } else {
          values["value1"] = value;
        }
        dst["required"]["custom"]["format"] = FormatDescription(powers[name], FormatTags, values, tag);
        found = true;
        break;
      }
      if (!found) {
        if (powerFix.count(kv.first)) {
          auto* tag = PowerTags::get(powerFix[kv.first]);
          auto values = GameAffixes::defaultMap();
          values["value1"] = AttributeValue("%");
          dst["required"]["custom"]["format"] = FormatDescription(powers[powerFix[kv.first]], FormatTags, values, tag);
        } else if (kv.first == "x1_Amulet_norm_unique_25") {
          // hellfire
          std::string x = powers["ItemPassive_Unique_Ring_770_x1"];
          std::string y = Strings::get("Powers", "Trait_PoundOfFlesh");
          size_t pos = x.find(y);
          if (pos != std::string::npos) {
            x.replace(pos, y.length(), "%p");
            dst["required"]["custom"]["format"] = x;
          }
        } else {
          Logger::log("Power not found for %s", kv.first.c_str());
        }
      }
      if (dst["required"]["custom"].has("format")) {
        data["locale_tips"]["Items"][key] = dst["required"]["custom"]["format"];
      }
    }
  }
}
Example #18
0
FormulaParser::Value FormulaParser::eval() {
  int digits = 0;
  bool plus = false;

  EvalStack stack;
  stack.ops.push('{');
  while (int type = fnext()) {
    if (type == tChar && chr == ']') break;
    if (type == tChar && chr == '|') {
      type = fnext();
      if (type == tNum) {
        digits = static_cast<int>(val);
      } else if (type == tChar && chr == '+') {
        plus = true;
      }
      fnext();
    } else if (type == tName) {
      std::vector<std::string> parts;
      bool isfunc = false;
      while (type == tName) {
        parts.push_back(tag);
        size_t prev = pos;
        if ((type = fnext()) != tChar || chr != '.') {
          if (type == tChar && chr == '(') {
            isfunc = true;
          } else {
            pos = prev;
          }
          break;
        }
        type = fnext();
      }
      std::string result = "";
      for (auto& part : parts) {
        if (!result.empty()) result.push_back('.');
        result.append(part);
      }
      if (isfunc) {
        char funcId = getFunction(result);
        OpInfo const& op = opInfo(funcId);
        while (stack.ops.size() && opInfo(stack.ops.top()).rprio >= op.lprio) {
          stack.exec(stack.ops.top());
          stack.ops.pop();
        }
        stack.ops.push(funcId);
        stack.needval = op.rval;
      } else if (!stack.ops.empty() && stack.ops.top() == funcTable) {
        stack.vals.push(AttributeValue(PowerTags::table(result)));
      } else {
        static re::Prog sfid("sf_(\\d+)", -1, re::Prog::CaseInsensitive);
        static re::Prog sftag(R"/(powertag.(\w+)."(.*)")/", -1, re::Prog::CaseInsensitive);
        //static re::Prog lookup(R"(table.(\w+).(\w+))", -1, re::Prog::CaseInsensitive);
        std::vector<std::string> match;
        if (context && sfid.match(result, &match)) {
          stack.vals.emplace(context->get(atoi(match[1].c_str()), values));
        } else if (sftag.match(result, &match)) {
          stack.vals.emplace(PowerTags::get(match[1], match[2], values));
        } else {
          auto it = values.find(result);
          stack.vals.push(it == values.end() ? 0.0 : it->second);
        }
      }
      stack.needval = 0;
    } else if (type == tTag) {
      auto it = values.find(tag);
      if (it != values.end()) {
        prevtag = it->second;
      } else if (context) {
        prevtag = context->get(tag, values);
      } else {
        prevtag = 0.0;
      }
      stack.vals.push(prevtag);
      stack.needval = 0;
    } else if (type == tNum) {
      stack.vals.push(val);
      stack.needval = 0;
    } else if (type == tChar) {
      if (chr == '-' && stack.needval) chr = '~';
      OpInfo const& op = opInfo(chr);
      while (stack.ops.size() && opInfo(stack.ops.top()).rprio >= op.lprio) {
        char top = stack.ops.top();
        stack.exec(top);
        stack.ops.pop();
        if (opInfo(top).rprio == 0) break;
      }
      if (chr != ')') stack.ops.push(chr);
      stack.needval = op.rval;
    }
  }
  OpInfo const& op = opInfo('}');
  while (stack.ops.size() && opInfo(stack.ops.top()).rprio >= op.lprio) {
    stack.exec(stack.ops.top());
    stack.ops.pop();
  }
  AttributeValue res;
  if (stack.vals.size()) res = stack.vals.top();
  return Value(res, digits, plus);
}

std::string FormulaParser::parse() {
  std::string result;
  int newlines = 0;
  while (int type = next()) {
    if ((flags & FormatHTML) && newlines && (type != tChar || chr != '\n')) {
      if (newlines == 1) {
        result.append("<br/>");
      } else {
        result.append("</p><p>");
      }
      newlines = 0;
    }
    switch (type) {
    case tChar:
      if (chr == '[') {
        result.append(eval().format());
      } else if (chr == '|') {
        next(); // 4
        std::string lhs, rhs;
        while (next() == tChar && chr != ':') {
          lhs.push_back(chr);
        }
        while (next() == tChar && chr != ';') {
          rhs.push_back(chr);
        }
        if (prevtag.min != 1 || prevtag.max != 1) {
          result.append(rhs);
        } else {
          result.append(lhs);
        }
      } else if (chr == '\n' && (flags & FormatHTML)) {
        ++newlines;
      } else {
        if (flags & FormatTags) {
          if (chr == ' ' && (result.empty() || result.back() == '\n')) {
            break;
          }
          if (chr == '%') {
            result.push_back('%');
          }
        }
        result.push_back(chr);
      }
      break;
    case tTag:
      if (tag.substr(0, 2) == "/c" || tag.substr(0, 2) == "c:" || pretags.find(tag) != pretags.end()) {
        if (flags & FormatHTML) {
          if (tag.substr(0, 2) == "/c") {
            result.append("</span>");
          } else if (tag.substr(0, 2) == "c:") {
            result.append(fmtstring("<span style=\"color: #%s\">", tag.substr(4).c_str()));
          } else {
            result.append(pretags[tag]);
          }
        } else if ((flags & FormatTags) && tag == "icon:bullet") {
          result.push_back('*');
        }
      } else {
        auto it = values.find(tag);
        if (it != values.end()) {
          prevtag = it->second;
        } else if (context) {
          prevtag = context->get(tag, values);
        } else {
          prevtag = 0.0;
        }
        result.append(Value(prevtag).format());
      }
      break;
    }
Example #19
0
// parse parameters and invoke actual planning. Runs in separate process
// to be elaborated: temporary simple interface
static int cmd_plan(gnet *net,struct myfile *req,search *src)
{
  struct myfile rep;
  char *vp,*lp = req->buf;
  ub4 n,pos = 0,len = (ub4)req->len;
  ub4 ival;
  ub4 varstart,varend,varlen,valstart,valend,type;

  ub4 portcnt = net->portcnt;
  ub4 sportcnt = net->sportcnt;

  ub4 dep = 0,arr = 0,lostop = 0,histop = 3,tdep = 0,ttdep = 0,utcofs=2200;
  ub4 plusday = 1,minday = 0;
  ub4 costperstop = 1;
  ub4 mintt = globs.mintt;
  ub4 maxtt = globs.maxtt;
  ub4 walklimit = globs.walklimit;
  ub4 sumwalklimit = globs.sumwalklimit;
  ub4 nethistop = hi32;
  ub4 delay = 0;
  ub4 testiter = 0;

  int rv;
  enum Vars {
    Cnone,
    Cdep,
    Carr,
    Ctdep,
    Cttdep,
    Cplusday,
    Cminday,
    Clostop,
    Chistop,
    Cmintt,
    Cmaxtt,
    Ccostperstop,
    Cwalklimit,
    Csumwalklimit,
    Cnethistop,
    Cutcofs,
    Cdelay,
    Ctestiter
  } var;

  ub4 *evpool;

  if (len == 0) return 1;

  oclear(rep);

  while (pos < len && lp[pos] >= 'a' && lp[pos] <= 'z') {
    ival = 0;
    varstart = varend = pos;
    while (varend < len && lp[varend] >= 'a' && lp[varend] <= 'z') varend++;
    varlen = varend - varstart; pos = varend;
    if (varlen == 0) break;

    while (pos < len && lp[pos] == ' ') pos++;
    if (pos == len) break;
    type = lp[pos++];
    if (type == '\n' || pos == len) break;
    while (pos < len && lp[pos] == ' ') pos++;
    lp[varend] = 0;

    valstart = valend = pos;
    while (valend < len && lp[valend] != '\n') valend++;
    if (valend == len) break;
    pos = valend;
    while (pos < len && lp[pos] != '\n') pos++;
    if (lp[pos] == '\n') pos++;
    if (pos == len) break;
    lp[valend] = 0;

    if (type == 'i') {
      n = str2ub4(lp + valstart,&ival);
      if (n == 0) return error(0,"expected integer for %s, found '%.*s'",lp + varstart,valend - valstart,lp + valstart);
    }
    vp = lp + varstart;
    if (varlen == 3 && memeq(vp,"dep",3)) var = Cdep;
    else if (varlen == 3 && memeq(vp,"arr",3)) var = Carr;
    else if (varlen == 7 && memeq(vp,"deptmin",7)) var = Ctdep;
    else if (varlen == 8 && memeq(vp,"depttmin",8)) var = Cttdep;
    else if (varlen == 7 && memeq(vp,"plusday",7)) var = Cplusday;
    else if (varlen == 6 && memeq(vp,"minday",6)) var = Cminday;
    else if (varlen == 6 && memeq(vp,"lostop",6)) var = Clostop;
    else if (varlen == 6 && memeq(vp,"histop",6)) var = Chistop;
    else if (varlen == 5 && memeq(vp,"mintt",5)) var = Cmintt;
    else if (varlen == 5 && memeq(vp,"maxtt",5)) var = Cmaxtt;
    else if (varlen == 11 && memeq(vp,"costperstop",11)) var = Ccostperstop;
    else if (varlen == 9 && memeq(vp,"walklimit",9)) var = Cwalklimit;
    else if (varlen == 12 && memeq(vp,"sumwalklimit",12)) var = Csumwalklimit;
    else if (varlen == 9 && memeq(vp,"nethistop",9)) var = Cnethistop;
    else if (varlen == 6 && memeq(vp,"utcofs",6)) var = Cutcofs;
    else if (varlen == 5 && memeq(vp,"delay",5)) var = Cdelay;
    else if (varlen == 8 && memeq(vp,"testiter",8)) var = Ctestiter;
    else {
      warn(0,"ignoring unknown var '%s'",vp);
      var = Cnone;
    }
    switch (var) {
    case Cnone: break;
    case Cdep: dep = ival; break;
    case Carr: arr = ival; break;
    case Ctdep: tdep = ival; break;
    case Cttdep: ttdep = ival; break;
    case Cplusday: plusday = ival; break;
    case Cminday: minday = ival; break;
    case Clostop:  lostop = ival; break;
    case Chistop: histop = ival; break;
    case Cmintt: mintt = ival; break;
    case Cmaxtt: maxtt = ival; break;
    case Ccostperstop: costperstop = ival; break;
    case Cwalklimit: walklimit = ival; break;
    case Csumwalklimit: sumwalklimit = ival; break;
    case Cnethistop: nethistop = ival; break;
    case Cutcofs: utcofs = ival; break;
    case Cdelay: delay = ival; break;
    case Ctestiter: testiter = ival; break;
    }
  }

  if (mintt > maxtt) {
    warn(0,"min transfer time %u cannot be above max %u",mintt,maxtt);
    maxtt = mintt + 2;
  }
  if (sumwalklimit < walklimit) {
    warn(0,"max distance for single go walk %u above summed max %u",walklimit,sumwalklimit);
    sumwalklimit = walklimit;
  }

  if (dep > portcnt && dep - portcnt >= sportcnt) return error(0,"dep %u not in %u member net",dep - portcnt,sportcnt);
  if (arr > portcnt && arr - portcnt >= sportcnt) return error(0,"arr %u not in %u member net",arr - portcnt,sportcnt);

  if (dep == arr) warning(0,"dep %u equal to arr",dep);
  evpool = src->evpool;
  clear(src);
  src->evpool = evpool;

  src->depttmin_cd = ttdep;
  src->deptmin_cd = tdep;
  src->utcofs12 = utcofs;
  src->plusday = plusday;
  src->minday = minday;
  src->nethistop = min(nethistop,histop);
  src->mintt = mintt;
  src->maxtt = maxtt;
  src->costperstop = costperstop;

  src->walklimit = m2geo(walklimit);
  src->sumwalklimit = m2geo(sumwalklimit);

  // invoke actual plan here
  info(0,"plan %u to %u in %u to %u stop\as from %u.%u for +%u -%u days",dep,arr,lostop,histop,tdep,ttdep,plusday,minday);
  info(0,"mintt %u maxtt %u maxwalk %u costperstop %u",mintt,maxtt,walklimit,costperstop);
  info(0,"utcofs %u",utcofs);

  rv = plantrip(src,req->name,dep,arr,lostop,histop);

  // prepare reply
  rep.buf = rep.localbuf;
  if (rv) len = fmtstring(rep.localbuf,"reply plan %u-%u error code %d\n",dep,arr,rv);
  else if (src->reslen) {
    len = min(src->reslen,sizeof(rep.localbuf));
    memcpy(rep.localbuf,src->resbuf,len);
  } else len = fmtstring(rep.localbuf,"reply plan %u-%u : no trip found\n",dep,arr);
  vrb0(0,"reply len %u",len);
  rep.len = len;

  if (delay) osmillisleep(delay);

  rv |= setqentry(req,&rep,".rep");

  if (testiter == 0 || dep == arr) return rv;

  ub4 iter = 0;

  while (iter < testiter) {
    if (++arr == portcnt) {
      arr = 0;
      if (++dep == portcnt) dep = 0;
    }
    if (dep == arr) continue;
    iter++;
    rv = plantrip(src,req->name,dep,arr,lostop,histop);
    if (rv) return rv;
  }

  ub4 iv,cnt,cumcnt = 0;

  cnt = src->notrips;
  infocc(cnt,0,"%u of %u trips not found",cnt,testiter);
  info(0,"max dur %lu msec for dep %u arr %u",src->querymaxdur / 1000,src->querymaxdep,src->querymaxarr);
  info(0,"query times in msec for %u iters",testiter);
  for (iv = 0; iv < Elemcnt(src->querydurs); iv++) {
    cnt = src->querydurs[iv];
    cumcnt += cnt;
    infocc(cnt,0,"%02u: %u %u",iv,cnt,cumcnt);
  }

  return 0;
}
Example #20
0
ChatCommand * ChatHandler::getCommandTable()
{
    static ChatCommand modifyCommandTable[] =
    {
        { "hp",          SEC_MODERATOR,     &ChatHandler::HandleModifyHPCommand,         "",   NULL },
        { "mana",        SEC_MODERATOR,     &ChatHandler::HandleModifyManaCommand,       "",   NULL },
        { "rage",        SEC_MODERATOR,     &ChatHandler::HandleModifyRageCommand,       "",   NULL },
        { "energy",      SEC_MODERATOR,     &ChatHandler::HandleModifyEnergyCommand,     "",   NULL },
        { "money",       SEC_MODERATOR,     &ChatHandler::HandleModifyMoneyCommand,      "",   NULL },
        { "speed",       SEC_MODERATOR,     &ChatHandler::HandleModifySpeedCommand,      "",   NULL },
        { "swim",        SEC_MODERATOR,     &ChatHandler::HandleModifySwimCommand,       "",   NULL },
        { "scale",       SEC_MODERATOR,     &ChatHandler::HandleModifyScaleCommand,      "",   NULL },
        { "bit",         SEC_MODERATOR,     &ChatHandler::HandleModifyBitCommand,        "",   NULL },
        { "bwalk",       SEC_MODERATOR,     &ChatHandler::HandleModifyBWalkCommand,      "",   NULL },
        { "fly",         SEC_MODERATOR,     &ChatHandler::HandleModifyFlyCommand,        "",   NULL },
        { "aspeed",      SEC_MODERATOR,     &ChatHandler::HandleModifyASpeedCommand,     "",   NULL },
        { "faction",     SEC_MODERATOR,     &ChatHandler::HandleModifyFactionCommand,    "",   NULL },
        { "spell",       SEC_MODERATOR,     &ChatHandler::HandleModifySpellCommand,      "",   NULL },
        { "tp",          SEC_MODERATOR,     &ChatHandler::HandleModifyTalentCommand,     "",   NULL },
        { "titles",      SEC_MODERATOR,     &ChatHandler::HandleModifyKnownTitlesCommand, "",  NULL },
        { "mount",       SEC_MODERATOR,     &ChatHandler::HandleModifyMountCommand,       "",  NULL },
        { "honor",       SEC_MODERATOR,     &ChatHandler::HandleModifyHonorCommand,       "",  NULL },

        { NULL,          0, NULL,                                        "",   NULL }
    };

    static ChatCommand wpCommandTable[] =
    {
        { "show",        SEC_GAMEMASTER,   &ChatHandler::HandleWpShowCommand,           "",   NULL },
        { "add",         SEC_GAMEMASTER,   &ChatHandler::HandleWpAddCommand,            "",   NULL },
        { "modify",      SEC_GAMEMASTER,   &ChatHandler::HandleWpModifyCommand,         "",   NULL },

        { NULL,          0, NULL,                                       "",   NULL }
    };

    static ChatCommand debugCommandTable[] =
    {
        { "inarc",       SEC_ADMINISTRATOR, &ChatHandler::HandleDebugInArcCommand,         "",   NULL },
        { "spellfail",   SEC_ADMINISTRATOR, &ChatHandler::HandleDebugSpellFailCommand,     "",   NULL },
        { "setpoi",      SEC_ADMINISTRATOR, &ChatHandler::HandleSetPoiCommand,             "",   NULL },
        { "qpartymsg",   SEC_ADMINISTRATOR, &ChatHandler::HandleSendQuestPartyMsgCommand,  "",   NULL },
        { "qinvalidmsg", SEC_ADMINISTRATOR, &ChatHandler::HandleSendQuestInvalidMsgCommand,"",   NULL },
        { "itemmsg",     SEC_ADMINISTRATOR, &ChatHandler::HandleSendItemErrorMsg,          "",   NULL },
        { "getitemstate",SEC_ADMINISTRATOR, &ChatHandler::HandleGetItemState,              "",   NULL },
        { NULL,          0, NULL,                                                          "",   NULL }
    };

    static ChatCommand learnCommandTable[] =
    {
        { "all",         SEC_ADMINISTRATOR, &ChatHandler::HandleLearnAllCommand,         "",   NULL },
        { "all_gm",      SEC_GAMEMASTER,    &ChatHandler::HandleLearnAllGMCommand,       "",   NULL },
        { "all_crafts",  SEC_GAMEMASTER,    &ChatHandler::HandleLearnAllCraftsCommand,   "",   NULL },
        { "all_lang",    SEC_MODERATOR,     &ChatHandler::HandleLearnAllLangCommand,     "",   NULL },
        { "all_myclass", SEC_ADMINISTRATOR, &ChatHandler::HandleLearnAllMyClassCommand,  "",   NULL },
        { "all_myspells",SEC_ADMINISTRATOR, &ChatHandler::HandleLearnAllMySpellsCommand, "",   NULL },
        { "all_mytalents",SEC_ADMINISTRATOR,&ChatHandler::HandleLearnAllMyTalentsCommand,"",   NULL },
        { "",            SEC_ADMINISTRATOR, &ChatHandler::HandleLearnCommand,            "",   NULL },
        { NULL,          0, NULL,                                                        "",   NULL }
    };

    static ChatCommand reloadCommandTable[] =
    {
        { "all",                SEC_ADMINISTRATOR, &ChatHandler::HandleReloadAllCommand,                 "", NULL },
        { "all_quest",          SEC_ADMINISTRATOR, &ChatHandler::HandleReloadAllQuestCommand,            "", NULL },
        { "all_loot",           SEC_ADMINISTRATOR, &ChatHandler::HandleReloadAllLootCommand,             "", NULL },
        { "all_scripts",        SEC_ADMINISTRATOR, &ChatHandler::HandleReloadAllSpellCommand,            "", NULL },
        { "all_spell",          SEC_ADMINISTRATOR, &ChatHandler::HandleReloadAllSpellCommand,            "", NULL },

        { "areatrigger_tavern",          SEC_ADMINISTRATOR, &ChatHandler::HandleReloadAreaTriggerTavernCommand,       "", NULL },
        { "areatrigger_template",        SEC_ADMINISTRATOR, &ChatHandler::HandleReloadAreaTriggerTemplateCommand,     "", NULL },
        { "areatrigger_involvedrelation",SEC_ADMINISTRATOR, &ChatHandler::HandleReloadQuestAreaTriggersCommand,       "", NULL },
        { "button_scripts",              SEC_ADMINISTRATOR, &ChatHandler::HandleReloadButtonScriptsCommand,           "", NULL },
        { "command",                     SEC_ADMINISTRATOR, &ChatHandler::HandleReloadCommandCommand,                 "", NULL },
        { "creature_involvedrelation",   SEC_ADMINISTRATOR, &ChatHandler::HandleReloadCreatureQuestInvRelationsCommand,"",NULL },
        { "creature_loot_template",      SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLootTemplatesCreatureCommand,   "", NULL },
        { "creature_questrelation",      SEC_ADMINISTRATOR, &ChatHandler::HandleReloadCreatureQuestRelationsCommand,  "", NULL },
        { "disenchant_loot_template",    SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLootTemplatesDisenchantCommand, "", NULL },
        { "fishing_loot_template",       SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLootTemplatesFishingCommand,    "", NULL },
        { "game_graveyard_zone",         SEC_ADMINISTRATOR, &ChatHandler::HandleReloadGameGraveyardZoneCommand,       "", NULL },
        { "gameobject_involvedrelation", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadGOQuestInvRelationsCommand,     "", NULL },
        { "gameobject_questrelation",    SEC_ADMINISTRATOR, &ChatHandler::HandleReloadGOQuestRelationsCommand,        "", NULL },
        { "gameobject_loot_template",    SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLootTemplatesGameobjectCommand, "", NULL },
        { "item_loot_template",          SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLootTemplatesItemCommand,       "", NULL },
        { "pickpocketing_loot_template", SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLootTemplatesPickpocketingCommand,"",NULL},
        { "prospecting_loot_template",   SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLootTemplatesProspectingCommand,"", NULL },
        { "prospecting_loot_template",   SEC_ADMINISTRATOR, &ChatHandler::HandleReloadLootTemplatesProspectingCommand,"", NULL },
        { "quest_end_scripts",           SEC_ADMINISTRATOR, &ChatHandler::HandleReloadQuestEndScriptsCommand,         "", NULL },
        { "quest_start_scripts",         SEC_ADMINISTRATOR, &ChatHandler::HandleReloadQuestStartScriptsCommand,       "", NULL },
        { "quest_template",              SEC_ADMINISTRATOR, &ChatHandler::HandleReloadQuestTemplateCommand,           "", NULL },
        { "reserved_name",               SEC_ADMINISTRATOR, &ChatHandler::HandleReloadReservedNameCommand,            "", NULL },
        { "spell_affect",                SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellAffectCommand,             "", NULL },
        { "spell_chain",                 SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellChainCommand,              "", NULL },
        { "spell_learn_skill",           SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellLearnSkillCommand,         "", NULL },
        { "spell_learn_spell",           SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellLearnSpellCommand,         "", NULL },
        { "spell_proc_event",            SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellProcEventCommand,          "", NULL },
        { "spell_script_target",         SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellScriptTargetCommand,       "", NULL },
        { "spell_scripts",               SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellScriptsCommand,            "", NULL },

        { "",                            SEC_ADMINISTRATOR, &ChatHandler::HandleReloadCommand,                        "", NULL },
        { NULL,                          0,                 NULL,                                                     "", NULL }
    };

    static ChatCommand honorCommandTable[] =
    {
        { "add",            SEC_GAMEMASTER,     &ChatHandler::HandleAddHonorCommand,            "", NULL },
        { "addkill",        SEC_GAMEMASTER,     &ChatHandler::HandleHonorAddKillCommand,        "", NULL },
        { "flushkills",     SEC_GAMEMASTER,     &ChatHandler::HandleHonorFlushKillsCommand,     "", NULL },
        { "update",         SEC_GAMEMASTER,     &ChatHandler::HandleUpdateHonorFieldsCommand,   "", NULL },

        { NULL,             0,                  NULL,                                           "",   NULL }
    };

    static ChatCommand resetCommandTable[] =
    {
        { "honor",          SEC_ADMINISTRATOR,  &ChatHandler::HandleResetHonorCommand,          "", NULL },
        { "level",          SEC_ADMINISTRATOR,  &ChatHandler::HandleResetLevelCommand,          "", NULL },
        { "spells",         SEC_ADMINISTRATOR,  &ChatHandler::HandleResetSpellsCommand,         "", NULL },
        { "stats",          SEC_ADMINISTRATOR,  &ChatHandler::HandleResetStatsCommand,          "", NULL },
        { "talents",        SEC_ADMINISTRATOR,  &ChatHandler::HandleResetTalentsCommand,        "", NULL },

        { NULL,             0,                  NULL,                                           "",   NULL }
    };

    static ChatCommand commandTable[] =
    {
        { "acct",        SEC_PLAYER,        &ChatHandler::HandleAcctCommand,             "",   NULL },
        { "addmove",     SEC_GAMEMASTER,    &ChatHandler::HandleAddMoveCommand,          "",   NULL },
        { "setmovetype", SEC_GAMEMASTER,    &ChatHandler::HandleSetMoveTypeCommand,      "",   NULL },
        { "anim",        SEC_GAMEMASTER,    &ChatHandler::HandleAnimCommand,             "",   NULL },
        { "announce",    SEC_MODERATOR,     &ChatHandler::HandleAnnounceCommand,         "",   NULL },
        { "notify",      SEC_MODERATOR,     &ChatHandler::HandleNotifyCommand,           "",   NULL },
        { "go",          SEC_MODERATOR,     &ChatHandler::HandleGoXYZCommand,            "",   NULL },
        { "goxy",        SEC_MODERATOR,     &ChatHandler::HandleGoXYCommand,             "",   NULL },
        { "goxyz",       SEC_MODERATOR,     &ChatHandler::HandleGoXYZCommand,            "",   NULL },
        { "goname",      SEC_MODERATOR,     &ChatHandler::HandleGonameCommand,           "",   NULL },
        { "namego",      SEC_MODERATOR,     &ChatHandler::HandleNamegoCommand,           "",   NULL },
        { "groupgo",     SEC_MODERATOR,     &ChatHandler::HandleGroupgoCommand,          "",   NULL },
        { "aura",        SEC_ADMINISTRATOR, &ChatHandler::HandleAuraCommand,             "",   NULL },
        { "unaura",      SEC_ADMINISTRATOR, &ChatHandler::HandleUnAuraCommand,           "",   NULL },
        { "changelevel", SEC_GAMEMASTER,    &ChatHandler::HandleChangeLevelCommand,      "",   NULL },
        { "commands",    SEC_PLAYER,        &ChatHandler::HandleCommandsCommand,         "",   NULL },
        { "delete",      SEC_GAMEMASTER,    &ChatHandler::HandleDeleteCommand,           "",   NULL },
        { "demorph",     SEC_GAMEMASTER,    &ChatHandler::HandleDeMorphCommand,          "",   NULL },
        { "die",         SEC_ADMINISTRATOR, &ChatHandler::HandleDieCommand,              "",   NULL },
        { "revive",      SEC_ADMINISTRATOR, &ChatHandler::HandleReviveCommand,           "",   NULL },
        { "dismount",    SEC_PLAYER,        &ChatHandler::HandleDismountCommand,         "",   NULL },
        { "setmodel",    SEC_GAMEMASTER,    &ChatHandler::HandleSetModelCommand,         "",   NULL },
        { "factionid",   SEC_GAMEMASTER,    &ChatHandler::HandleFactionIdCommand,        "",   NULL },
        { "listgm",      SEC_PLAYER,        &ChatHandler::HandleGMListCommand,           "",   NULL },
        { "gm",          SEC_MODERATOR,     &ChatHandler::HandleGMmodeCommand,           "",   NULL },
        { "gps",         SEC_MODERATOR,     &ChatHandler::HandleGPSCommand,              "",   NULL },
        { "guid",        SEC_GAMEMASTER,    &ChatHandler::HandleGUIDCommand,             "",   NULL },
        { "help",        SEC_PLAYER,        &ChatHandler::HandleHelpCommand,             "",   NULL },
        { "info",        SEC_PLAYER,        &ChatHandler::HandleInfoCommand,             "",   NULL },
        { "npcinfo",     SEC_ADMINISTRATOR, &ChatHandler::HandleNpcInfoCommand,          "",   NULL },
        { "npcinfoset",  SEC_ADMINISTRATOR, &ChatHandler::HandleNpcInfoSetCommand,       "",   NULL },
        { "addvendoritem",SEC_GAMEMASTER,   &ChatHandler::HandleAddVendorItemCommand,    "",   NULL },
        { "delvendoritem",SEC_GAMEMASTER,   &ChatHandler::HandleDelVendorItemCommand,    "",   NULL },
        { "itemmove",    SEC_GAMEMASTER,    &ChatHandler::HandleItemMoveCommand,         "",   NULL },
        { "kick",        SEC_GAMEMASTER,    &ChatHandler::HandleKickPlayerCommand,       "",   NULL },
        { "learn",       SEC_MODERATOR,     NULL,                                        "",   learnCommandTable },
        { "cooldown",    SEC_ADMINISTRATOR, &ChatHandler::HandleCooldownCommand,         "",   NULL },
        { "unlearn",     SEC_ADMINISTRATOR, &ChatHandler::HandleUnLearnCommand,          "",   NULL },
        { "modify",      SEC_MODERATOR,     NULL,                                        "",   modifyCommandTable },
        { "debug",       SEC_MODERATOR,     NULL,                                        "",   debugCommandTable },
        { "morph",       SEC_GAMEMASTER,    &ChatHandler::HandleMorphCommand,            "",   NULL },
        { "name",        SEC_GAMEMASTER,    &ChatHandler::HandleNameCommand,             "",   NULL },
        { "subname",     SEC_GAMEMASTER,    &ChatHandler::HandleSubNameCommand,          "",   NULL },
        { "npcflag",     SEC_GAMEMASTER,    &ChatHandler::HandleNPCFlagCommand,          "",   NULL },
        { "distance",    SEC_ADMINISTRATOR, &ChatHandler::HandleGetDistanceCommand,      "",   NULL },
        { "addgo",       SEC_GAMEMASTER,    &ChatHandler::HandleGameObjectCommand,       "",   NULL },
        { "recall",      SEC_MODERATOR,     &ChatHandler::HandleRecallCommand,           "",   NULL },
        { "save",        SEC_PLAYER,        &ChatHandler::HandleSaveCommand,             "",   NULL },
        { "saveall",     SEC_MODERATOR,     &ChatHandler::HandleSaveAllCommand,          "",   NULL },
        { "security",    SEC_ADMINISTRATOR, &ChatHandler::HandleSecurityCommand,         "",   NULL },
        { "ban",         SEC_ADMINISTRATOR, &ChatHandler::HandleBanCommand,              "",   NULL },
        { "unban",       SEC_ADMINISTRATOR, &ChatHandler::HandleUnBanCommand,            "",   NULL },
        { "baninfo",     SEC_ADMINISTRATOR, &ChatHandler::HandleBanInfoCommand,          "",   NULL },
        { "banlist",     SEC_ADMINISTRATOR, &ChatHandler::HandleBanListCommand,          "",   NULL },
        { "standstate",  SEC_GAMEMASTER,    &ChatHandler::HandleStandStateCommand,       "",   NULL },
        { "start",       SEC_PLAYER,        &ChatHandler::HandleStartCommand,            "",   NULL },
        { "taxicheat",   SEC_MODERATOR,     &ChatHandler::HandleTaxiCheatCommand,        "",   NULL },
        { "gogrid",      SEC_MODERATOR,     &ChatHandler::HandleGoGridCommand,           "",   NULL },
        { "addweapon",   SEC_ADMINISTRATOR, &ChatHandler::HandleAddWeaponCommand,        "",   NULL },
        { "allowmove",   SEC_ADMINISTRATOR, &ChatHandler::HandleAllowMovementCommand,    "",   NULL },
        { "linkgrave",   SEC_ADMINISTRATOR, &ChatHandler::HandleLinkGraveCommand,        "",   NULL },
        { "neargrave",   SEC_ADMINISTRATOR, &ChatHandler::HandleNearGraveCommand,        "",   NULL },
        { "transport",   SEC_ADMINISTRATOR, &ChatHandler::HandleSpawnTransportCommand,   "",   NULL },
        { "explorecheat",SEC_ADMINISTRATOR, &ChatHandler::HandleExploreCheatCommand,     "",   NULL },
        { "hover",       SEC_ADMINISTRATOR, &ChatHandler::HandleHoverCommand,            "",   NULL },
        { "levelup",     SEC_ADMINISTRATOR, &ChatHandler::HandleLevelUpCommand,          "",   NULL },
        { "playemote",   SEC_ADMINISTRATOR, &ChatHandler::HandlePlayEmoteCommand,        "",   NULL },
        { "showarea",    SEC_ADMINISTRATOR, &ChatHandler::HandleShowAreaCommand,         "",   NULL },
        { "hidearea",    SEC_ADMINISTRATOR, &ChatHandler::HandleHideAreaCommand,         "",   NULL },
        { "addspw",      SEC_GAMEMASTER,    &ChatHandler::HandleAddSpwCommand,           "",   NULL },
        { "spawndist",   SEC_GAMEMASTER,    &ChatHandler::HandleSpawnDistCommand,        "",   NULL },
        { "spawntime",   SEC_GAMEMASTER,    &ChatHandler::HandleSpawnTimeCommand,        "",   NULL },
        { "additem",     SEC_ADMINISTRATOR, &ChatHandler::HandleAddItemCommand,          "",   NULL },
        { "additemset",  SEC_ADMINISTRATOR, &ChatHandler::HandleAddItemSetCommand,       "",   NULL },
        { "createguild", SEC_ADMINISTRATOR, &ChatHandler::HandleCreateGuildCommand,      "",   NULL },
        { "update",      SEC_ADMINISTRATOR, &ChatHandler::HandleUpdate,                  "",   NULL },
        { "bank",        SEC_ADMINISTRATOR, &ChatHandler::HandleBankCommand,             "",   NULL },
        { "wchange",     SEC_ADMINISTRATOR, &ChatHandler::HandleChangeWeather,           "",   NULL },
        { "reload",      SEC_ADMINISTRATOR, NULL,                                        "",   reloadCommandTable },
        { "loadscripts", SEC_ADMINISTRATOR, &ChatHandler::HandleLoadScriptsCommand,      "",   NULL },
        { "tele",        SEC_MODERATOR,     &ChatHandler::HandleTeleCommand,             "",   NULL },
        { "lookuptele",  SEC_MODERATOR,     &ChatHandler::HandleLookupTeleCommand,       "",   NULL },
        { "addtele",     SEC_ADMINISTRATOR, &ChatHandler::HandleAddTeleCommand,          "",   NULL },
        { "deltele",     SEC_ADMINISTRATOR, &ChatHandler::HandleDelTeleCommand,          "",   NULL },
        { "listauras",   SEC_ADMINISTRATOR, &ChatHandler::HandleListAurasCommand,        "",   NULL },
        { "reset",       SEC_ADMINISTRATOR, NULL,                                        "",   resetCommandTable },
        { "resetall",    SEC_ADMINISTRATOR, &ChatHandler::HandleResetAllCommand,         "",   NULL },
        { "ticket",      SEC_GAMEMASTER,    &ChatHandler::HandleTicketCommand,           "",   NULL },
        { "delticket",   SEC_GAMEMASTER,    &ChatHandler::HandleDelTicketCommand,        "",   NULL },
        { "maxskill",    SEC_ADMINISTRATOR, &ChatHandler::HandleMaxSkillCommand,         "",   NULL },
        { "setskill",    SEC_ADMINISTRATOR, &ChatHandler::HandleSetSkillCommand,         "",   NULL },
        { "whispers",    SEC_MODERATOR,     &ChatHandler::HandleWhispersCommand,         "",   NULL },
        { "say",         SEC_MODERATOR,     &ChatHandler::HandleSayCommand,              "",   NULL },
        { "npcwhisper",  SEC_MODERATOR,     &ChatHandler::HandleNpcWhisperCommand,       "",   NULL },
        { "yell",        SEC_MODERATOR,     &ChatHandler::HandleYellCommand,             "",   NULL },
        { "textemote",   SEC_MODERATOR,     &ChatHandler::HandleTextEmoteCommand,        "",   NULL },
        { "gocreature",  SEC_GAMEMASTER,    &ChatHandler::HandleGoCreatureCommand,       "",   NULL },
        { "goobject",    SEC_GAMEMASTER,    &ChatHandler::HandleGoObjectCommand,         "",   NULL },
        { "targetobject",SEC_GAMEMASTER,    &ChatHandler::HandleTargetObjectCommand,     "",   NULL },
        { "delobject",   SEC_GAMEMASTER,    &ChatHandler::HandleDelObjectCommand,        "",   NULL },
        { "turnobject",  SEC_GAMEMASTER,    &ChatHandler::HandleTurnObjectCommand,       "",   NULL },
        { "movecreature",SEC_GAMEMASTER,    &ChatHandler::HandleMoveCreatureCommand,     "",   NULL },
        { "moveobject",  SEC_GAMEMASTER,    &ChatHandler::HandleMoveObjectCommand,       "",   NULL },
        { "idleshutdown",SEC_ADMINISTRATOR, &ChatHandler::HandleIdleShutDownCommand,     "",   NULL },
        { "shutdown",    SEC_ADMINISTRATOR, &ChatHandler::HandleShutDownCommand,         "",   NULL },
        { "pinfo",       SEC_GAMEMASTER,    &ChatHandler::HandlePInfoCommand,            "",   NULL },
        { "plimit",      SEC_ADMINISTRATOR, &ChatHandler::HandlePLimitCommand,           "",   NULL },
        { "visible",     SEC_MODERATOR,     &ChatHandler::HandleVisibleCommand,          "",   NULL },
        { "playsound",   SEC_MODERATOR,     &ChatHandler::HandlePlaySoundCommand,        "",   NULL },
        { "listcreature",SEC_ADMINISTRATOR, &ChatHandler::HandleListCreatureCommand,     "",   NULL },
        { "listitem",    SEC_ADMINISTRATOR, &ChatHandler::HandleListItemCommand,         "",   NULL },
        { "listobject",  SEC_ADMINISTRATOR, &ChatHandler::HandleListObjectCommand,       "",   NULL },
        { "lookupitem",  SEC_ADMINISTRATOR, &ChatHandler::HandleLookupItemCommand,       "",   NULL },
        { "lookupitemset",SEC_ADMINISTRATOR,&ChatHandler::HandleLookupItemSetCommand,    "",   NULL },
        { "lookupskill", SEC_ADMINISTRATOR, &ChatHandler::HandleLookupSkillCommand,      "",   NULL },
        { "lookupspell", SEC_ADMINISTRATOR, &ChatHandler::HandleLookupSpellCommand,      "",   NULL },
        { "lookupquest", SEC_ADMINISTRATOR, &ChatHandler::HandleLookupQuestCommand,      "",   NULL },
        { "lookupcreature",SEC_ADMINISTRATOR,&ChatHandler::HandleLookupCreatureCommand,  "",   NULL },
        { "lookupobject",SEC_ADMINISTRATOR, &ChatHandler::HandleLookupObjectCommand,     "",   NULL },
        { "money",       SEC_MODERATOR,     &ChatHandler::HandleModifyMoneyCommand,      "",   NULL },
        { "titles",      SEC_MODERATOR,     &ChatHandler::HandleModifyKnownTitlesCommand, "",   NULL },
        { "speed",       SEC_MODERATOR,     &ChatHandler::HandleModifySpeedCommand,      "",   NULL },
        { "addquest",    SEC_ADMINISTRATOR, &ChatHandler::HandleAddQuest,                "",   NULL },
        { "removequest", SEC_ADMINISTRATOR, &ChatHandler::HandleRemoveQuest,             "",   NULL },
        { "password",    SEC_PLAYER,        &ChatHandler::HandlePasswordCommand,         "",   NULL },
        { "lockaccount", SEC_PLAYER,        &ChatHandler::HandleLockAccountCommand,      "",   NULL },
        { "respawn",     SEC_ADMINISTRATOR, &ChatHandler::HandleRespawnCommand,          "",   NULL },
        { "wp",          SEC_GAMEMASTER,    NULL,                                        "",   wpCommandTable },
        { "flymode",     SEC_ADMINISTRATOR, &ChatHandler::HandleFlyModeCommand,          "",   NULL },
        { "sendopcode",  SEC_ADMINISTRATOR, &ChatHandler::HandleSendOpcodeCommand,       "",   NULL },
        { "sellerr",     SEC_ADMINISTRATOR, &ChatHandler::HandleSellErrorCommand,        "",   NULL },
        { "buyerr",      SEC_ADMINISTRATOR, &ChatHandler::HandleBuyErrorCommand,         "",   NULL },
        { "uws",         SEC_ADMINISTRATOR, &ChatHandler::HandleUpdateWorldStateCommand, "",   NULL },
        { "ps",          SEC_ADMINISTRATOR, &ChatHandler::HandlePlaySound2Command,       "",   NULL },
        { "scn",         SEC_MODERATOR,     &ChatHandler::HandleSendChannelNotifyCommand,"",   NULL },
        { "scm",         SEC_MODERATOR,     &ChatHandler::HandleSendChatMsgCommand,      "",   NULL },
        { "sendmail",    SEC_MODERATOR,     &ChatHandler::HandleSendMailCommand,         "",   NULL },
        { "rename",      SEC_GAMEMASTER,    &ChatHandler::HandleRenameCommand,           "",   NULL },
        { "nametele",    SEC_MODERATOR,     &ChatHandler::HandleNameTeleCommand,         "",   NULL },
        { "grouptele",   SEC_MODERATOR,     &ChatHandler::HandleGroupTeleCommand,        "",   NULL },
        { "loadpdump",   SEC_ADMINISTRATOR, &ChatHandler::HandleLoadPDumpCommand,        "",   NULL },
        { "writepdump",  SEC_ADMINISTRATOR, &ChatHandler::HandleWritePDumpCommand,       "",   NULL },
        { "mute",        SEC_GAMEMASTER,    &ChatHandler::HandleMuteCommand,             "",   NULL },
        { "unmute",      SEC_GAMEMASTER,    &ChatHandler::HandleUnmuteCommand,           "",   NULL },
        { "honor",       SEC_GAMEMASTER,    NULL,                                        "",   honorCommandTable },
        { "movegens",    SEC_ADMINISTRATOR, &ChatHandler::HandleMovegensCommand,         "",   NULL },
        { "cast",        SEC_ADMINISTRATOR, &ChatHandler::HandleCastCommand,             "",   NULL },
        { "castback",    SEC_ADMINISTRATOR, &ChatHandler::HandleCastBackCommand,         "",   NULL },

        //! Development Commands
        { "setvalue",    SEC_ADMINISTRATOR, &ChatHandler::HandleSetValue,                "",   NULL },
        { "getvalue",    SEC_ADMINISTRATOR, &ChatHandler::HandleGetValue,                "",   NULL },
        { "Mod32Value",  SEC_ADMINISTRATOR, &ChatHandler::HandleMod32Value,              "",   NULL },

        { NULL,          0, NULL,                                        "",   NULL }
    };

    if(load_command_table)
    {
        load_command_table = false;

        QueryResult *result = sDatabase.Query("SELECT `name`,`security`,`help` FROM `command`");
        if (result)
        {
            do
            {
                Field *fields = result->Fetch();
                std::string name = fields[0].GetCppString();
                for(uint32 i = 0; commandTable[i].Name != NULL; i++)
                {
                    if (name == commandTable[i].Name)
                    {
                        commandTable[i].SecurityLevel = (uint16)fields[1].GetUInt16();
                        commandTable[i].Help = fields[2].GetCppString();
                    }
                    if(commandTable[i].ChildCommands != NULL)
                    {
                        ChatCommand *ptable = commandTable[i].ChildCommands;
                        for(uint32 j = 0; ptable[j].Name != NULL; j++)
                        {
                            // first case for "" named subcommand
                            if (ptable[j].Name == "" && name == commandTable[i].Name ||
                                name == fmtstring("%s %s", commandTable[i].Name, ptable[j].Name) )
                            {
                                ptable[j].SecurityLevel = (uint16)fields[1].GetUInt16();
                                ptable[j].Help = fields[2].GetCppString();
                            }
                        }
                    }
                }
            } while(result->NextRow());
            delete result;
        }
    }

    return commandTable;
}
Example #21
0
void GenerateSimBuffs(json::Value& value, json::Value& data) {
  TransformJson(value, data, FormatTag);

  auto powers = Strings::list("Powers");
  auto attrs = Strings::list("AttributeDescriptions");
  auto powersEn = Strings::list("Powers", SnoLoader::default);
  auto attrsEn = Strings::list("AttributeDescriptions", SnoLoader::default);
  auto sets = Strings::list("ItemSets");
  auto setsEn = Strings::list("ItemSets", SnoLoader::default);
  auto items = Strings::list("Items");
  auto itemsEn = Strings::list("Items", SnoLoader::default);

  for (auto& kv : data["simMapping"]["buffs"].getMap()) {
    std::string type = kv.second["category"].getString();
    auto& dst = value["simMapping"]["buffs"][kv.first];
    dst["category"] = fmtstring("$Simulator/%s$", type.c_str());
    if (type == "Status") {
      dst["name"] = value["simMapping"]["status"][kv.first];
    } else {
      std::string name, repl;
      std::string realname = kv.second["name"].getString();
      if (kv.second.has("skill")) {
        auto& skill = kv.second["skill"];
        std::string id = skill[0].getString();
        if (!data["skillMap"].has(id)) {
          Logger::log("Unknown skill: %s", id.c_str());
        } else {
          std::string power = data["skillMap"][id].getString();
          name = powersEn[power + "_name"];
          repl = powers[power + "_name"];
          if (skill.length() > 1) {
            char rune = skill[1].getString()[0];
            name.append(" - ");
            name.append(attrsEn.getfmt("NameRune_%c#%s", rune - 'a' + 'A', power.c_str()));
            repl.append(" - ");
            repl.append(attrs.getfmt("NameRune_%c#%s", rune - 'a' + 'A', power.c_str()));
          }
        }
      } else if (kv.second.has("passive")) {
        std::string id = kv.second["passive"].getString();
        if (!data["skillMap"].has(id)) {
          Logger::log("Unknown passive: %s", id.c_str());
        } else {
          std::string power = data["skillMap"][id].getString();
          name = powersEn[power + "_name"];
          repl = powers[power + "_name"];
        }
      } else if (kv.second.has("set")) {
        std::string id = kv.second["set"][0].getString();
        int count = kv.second["set"][1].getInteger();
        if (!data["setMap"].has(id)) {
          Logger::log("Unknown item set: %s", id.c_str());
        } else {
          id = data["setMap"][id].getString();
          name = setsEn[id];
          repl = sets[id];
          if (name != realname) {
            std::string suffix = fmtstring(" (%d)", count);
            name.append(suffix);
            repl.append(suffix);
          }
        }
      } else if (kv.second.has("stat")) {
        std::string id;
        if (kv.second["stat"].type() == json::Value::tString) {
          id = kv.second["stat"].getString();
        } else {
          id = kv.second["stat"][0].getString();
        }
        if (!data["legendaryMap"].has(id)) {
          Logger::log("Unknown item: %s", id.c_str());
        } else {
          id = data["legendaryMap"][id].getString();
          name = itemsEn[id];
          repl = (items.has(id) ? items[id] : name);
        }
      } else if (kv.second.has("gem")) {
        std::string id = kv.second["gem"][0].getString();
        if (!data["legendaryGems"].has(id)) {
          Logger::log("Unknown gem: %s", id.c_str());
        } else {
          id = data["legendaryGems"][id]["id"].getString();
          name = itemsEn[id];
          repl = items[id];
        }
      }
      if (realname == "Boots of Disregard") {
        int adsf = 0;
      }
      if (realname == name) {
        dst["name"] = repl;
      } else {
        dst["name"] = fmtstring("$Simulator/%s$", realname.c_str());
        data["stringlist"]["Simulator"][realname]["text"] = realname;
        data["stringlist"]["Simulator"][realname]["tip"] = type + " buff";
      }
    }
  }

  StoreJson(value, data);
}
Example #22
0
void FormulaParser::addcolor(char const* color, char const* val) {
  if (!val) val = color;
  pretags.emplace(fmtstring("c_%s", color), fmtstring("<span class=\"d3-color-%s\">", val));
  pretags.emplace(fmtstring("/c_%s", color), "</span>");
}
Example #23
0
std::string FormatTag(std::string const& src, json::Value& data) {
  if (src.empty()) return src;
  if (src[0] == '$' && src.back() == '$') return src;
  size_t slash = src.find('/');
  if (slash == std::string::npos) return src;
  auto list = Strings::list(src.substr(0, slash));
  if (!list) {
    Logger::log("StringList not found: %s", src.substr(0, slash).c_str());
    return src;
  }
  size_t at = src.find('@', slash);
  std::string text = src.substr(slash + 1, at == std::string::npos ? at : at - slash - 1);
  if (!list.has(text)) {
    Logger::log("String not found: %s", src.substr(0, at).c_str());
    return src;
  }
  text = list[text];
  if (at != std::string::npos) {
    size_t quest = src.find('?', at);
    if (quest == std::string::npos) quest = src.length();
    FormatFlags flags = FormatTags;
    PowerTag* context = nullptr;
    AttributeMap values = GameAffixes::defaultMap();
    if (quest > at + 1) {
      flags = FormatHTML;
      context = PowerTags::get(src.substr(at + 1, quest - at - 1));
      if (!context) {
        Logger::log("PowerTag not found: %s", src.substr(at + 1, quest - at - 1).c_str());
      }
    } else {
      values["value"] = AttributeValue("%");
      values["value1"] = AttributeValue("%");
      values["value2"] = AttributeValue("%");
      values["value3"] = AttributeValue("%");
    }
    std::map<std::string, std::string> replace;
    if (quest < src.length()) {
      std::vector<std::string> parts = split(src.substr(quest + 1), '&');
      for (auto& p : parts) {
        size_t eq = p.find('=');
        if (eq == std::string::npos) continue;
        std::string key = p.substr(0, eq);
        std::string value = p.substr(eq + 1);
        if (!testString(key, isalnum)) {
          size_t pos = text.find(key);
          if (pos == std::string::npos) continue;
          std::string rval = fmtstring("@%d", replace.size() + 1);
          replace.emplace(rval, value);
          text.replace(pos, key.length(), rval);
          continue;
        }
        if (testString(value, isdigit)) {
          values.emplace(key, atof(value.c_str()));
          continue;
        }
        size_t ss = value.find('/');
        if (ss == std::string::npos) {
          values[key] = AttributeValue(value);
        } else {
          std::string listname = value.substr(0, ss);
          if (!testString(listname, isalpha)) {
            values[key] = AttributeValue(value); continue;
          }
          auto sublist = Strings::list(listname);
          if (!sublist) {
            Logger::log("StringList not found: %s", listname.c_str());
            continue;
          }
          std::string subtext = value.substr(ss + 1);
          if (!sublist.has(subtext)) {
            Logger::log("String not found: %s", value.c_str());
            continue;
          }
          values[key] = AttributeValue(sublist[subtext]);
        }
      }
    }
    text = FormatDescription(text, flags, values, context);
    for (auto& kv : replace) {
      size_t pos = text.find(kv.first);
      if (pos == std::string::npos) continue;
      text.replace(pos, kv.first.length(), kv.second);
    }
  }
  return text;
}