Ну собственно говоря все сказано в заголовке
Извлеченные простеньким скриптом данные из a.obj по тому что продают те или иные NPC и сохраненные в JSON.
По этим данным уже можно по необходимости сгенерировать списки под свой сервер в нужном формате.
В архиве данные от следующих хроник:
- C0
- C4
- Gracia Final
- Freya
- High Five
- Glory Days
- Ertheia
- Homunculus + Classic + Essence (287 protocol)
<?php
//
// Данный скрипт пытается вытащить из ai.obj всю информацию о предметах, продаваемых NPC, и сохраняет ее в файл формата JSON
//
require_once "L2Data.php";
// Путь к серверным скриптам
$serverFiles = "pts_scripts/";
echo "Reading ai.obj ...";
$fh = fopen("{$serverFiles}ai.obj", "r");
$data = [];
$show = false;
while (!feof($fh))
{
$str = fgets($fh);
$str = mb_convert_encoding($str, "CP1251", "Unicode");
$str = trim($str);
if (stripos($str, "class ") === 0)
{
$class = str_replace(["class", " 0 ", " 1 ", " 2 ", " "], "", $str);
$temp = explode(":", $class);
$class = $temp[0];
$show = true;
}
if (stripos($str, "buyselllist_begin") !== false && stripos($str, " SellList") !== false)
{
if ($show)
{
echo "\n >>> {$class}:";
$show = false;
}
$list = substr($str, stripos($str, "buyselllist_begin") + 18);
echo " {$list}";
$str = fgets($fh);
$str = mb_convert_encoding($str, "CP1251", "Unicode");
$str = trim($str);
while (stripos($str, "buyselllist_end") === false)
{
$str = str_replace(" ", "", $str);
if (stripos($str, "//") !== false)
$str = trim(substr($str, 0, stripos($str, "//")));
$data[$class][$list][] = explode(";", L2SData::trim($str));
$str = fgets($fh);
$str = mb_convert_encoding($str, "CP1251", "Unicode");
$str = trim($str);
}
}
}
fclose($fh);
echo "\nReading npcdata ... ";
$npcs = L2SData::loadData("{$serverFiles}npcdata.txt");
echo "\nMaking relations between AI and npc id(s) ... ";
$npcAI = [];
foreach ($npcs as $npc)
{
$id = $npc[2];
$ai = L2SData::trim(L2SData::getValue($npc, "npc_ai", "{}"));
$temp = explode(";", $ai);
$ai = L2SData::trim($temp[0]);
$npcAI[$ai] = $id;
}
echo "\nSearch npc id(s) by AI ...";
foreach ($data as $k => &$v)
{
if (!isset($npcAI[$k]))
{
$v["id"] = -1;
echo "\n >>> not found npc id for AI [{$k}]";
}
else
$v["id"] = $npcAI[$k];
}
echo "\nSaving traders.json ...";
file_put_contents("traders.json", json_encode($data, JSON_PRETTY_PRINT));
?>
ОНО СУЩЕСВУЕТ, ОНО СУЩЕСТВУЕТ!Ertheia
хоть L2Data.php расположен там же где и парсер, но все равно:Для работы скрипта потребуется класс L2Data, расшаренный мною ранее.
Uncaught Error: Class "L2Data" not found in parser.php:51
Это для увеличения единицы предмета или обновленя количества предмета до максимального значения?Формула обновлении по времени в мс
restockFactor * 24 * 60 * 60 * 1000
Весь стокЭто для увеличения единицы предмета или обновленя количества предмета до максимального значения?
public synchronized List<ItemInfo> getItems()
{
List<ItemInfo> items = new ArrayList<>();
int currentTime = (int) (System.currentTimeMillis() / 60_000);
for (ItemInfo item : _list)
{
if (item.isCountLimited())
{
if (item.getCurrentValue() < item.getCount() && currentTime > (item.getLastRefillTime() + item.getRefillTime()))
{
if (item.getRefillTime() > 0)
{
while (currentTime > (item.getLastRefillTime() + item.getRefillTime()))
{
item.setLastRefillTime(item.getLastRefillTime() + item.getRefillTime());
item.incCurrentValue();
}
}
if (item.getCurrentValue() > item.getCount())
item.setCurrentValue(item.getCount());
}
item.setUseable(item.getCurrentValue() > 0);
}
items.add(item);
}
return items;
}
while ( currentTime > (item.getLastRefillTime() + item.getRefillTime())) { ... }
int iterations = Math.max(0, (currentTime - item.LastRefillTime()) % item.getRefillTime())
item.setCurrentValue(Math.min( iterations, item.getCount()));
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?