04-12-2013, 05:47 PM
Файлы ddf для Lindvior (PTS клиент Lindvior c l2.ru от 12 апреля 2013).
questname-e.ddf:
recipe-c.ddf:
npcgrp.ddf:
Так как ENBBY стало очень много, написал скрипт для их генерации:
questname-e.ddf:
Код:
// Lindvior (12.04.2013). Editors: Anonymous, Hint.
FS = "\t";
HEADER = 1;
RECCNT = OFF;
MTXCNT_OUT = 1;
MATCNT_OUT = 1;
ORD_IGNORE = 0;
{
UINT tag_?;
UINT quest_id;
INT quest_prog;
ASCF main_name;
ASCF prog_name;
ASCF description;
CNTR item_id_cnt;
INT item_id[item_id_cnt];
CNTR item_unk_cnt;
INT item_unk[item_unk_cnt]; // ? (0 or 1)
CNTR item_count_cnt;
INT item_count[item_count_cnt];
FLOAT quest_x;
FLOAT quest_y;
FLOAT quest_z;
UCHAR quest_pos_cnt;
FLOAT quest_x_1; ENBBY = [(quest_pos_cnt:1,1)]; ENBBY = [(quest_pos_cnt:2,2)]; ENBBY = [(quest_pos_cnt:4,4)]; ENBBY = [(quest_pos_cnt:8,8)];
FLOAT quest_y_1; ENBBY = [(quest_pos_cnt:1,1)]; ENBBY = [(quest_pos_cnt:2,2)]; ENBBY = [(quest_pos_cnt:4,4)]; ENBBY = [(quest_pos_cnt:8,8)];
FLOAT quest_z_1; ENBBY = [(quest_pos_cnt:1,1)]; ENBBY = [(quest_pos_cnt:2,2)]; ENBBY = [(quest_pos_cnt:4,4)]; ENBBY = [(quest_pos_cnt:8,8)];
FLOAT quest_x_2; ENBBY = [(quest_pos_cnt:2,2)]; ENBBY = [(quest_pos_cnt:4,4)]; ENBBY = [(quest_pos_cnt:8,8)];
FLOAT quest_y_2; ENBBY = [(quest_pos_cnt:2,2)]; ENBBY = [(quest_pos_cnt:4,4)]; ENBBY = [(quest_pos_cnt:8,8)];
FLOAT quest_z_2; ENBBY = [(quest_pos_cnt:2,2)]; ENBBY = [(quest_pos_cnt:4,4)]; ENBBY = [(quest_pos_cnt:8,8)];
FLOAT quest_x_3; ENBBY = [(quest_pos_cnt,3)]; ENBBY = [(quest_pos_cnt:4,4)]; ENBBY = [(quest_pos_cnt:8,8)];
FLOAT quest_y_3; ENBBY = [(quest_pos_cnt,3)]; ENBBY = [(quest_pos_cnt:4,4)]; ENBBY = [(quest_pos_cnt:8,8)];
FLOAT quest_z_3; ENBBY = [(quest_pos_cnt,3)]; ENBBY = [(quest_pos_cnt:4,4)]; ENBBY = [(quest_pos_cnt:8,8)];
FLOAT quest_x_4; ENBBY = [(quest_pos_cnt:4,4)]; ENBBY = [(quest_pos_cnt:8,8)];
FLOAT quest_y_4; ENBBY = [(quest_pos_cnt:4,4)]; ENBBY = [(quest_pos_cnt:8,8)];
FLOAT quest_z_4; ENBBY = [(quest_pos_cnt:4,4)]; ENBBY = [(quest_pos_cnt:8,8)];
FLOAT quest_x_5; ENBBY = [(quest_pos_cnt,5)]; ENBBY = [(quest_pos_cnt,6)]; ENBBY = [(quest_pos_cnt,7)]; ENBBY = [(quest_pos_cnt:8,8)];
FLOAT quest_y_5; ENBBY = [(quest_pos_cnt,5)]; ENBBY = [(quest_pos_cnt,6)]; ENBBY = [(quest_pos_cnt,7)]; ENBBY = [(quest_pos_cnt:8,8)];
FLOAT quest_z_5; ENBBY = [(quest_pos_cnt,5)]; ENBBY = [(quest_pos_cnt,6)]; ENBBY = [(quest_pos_cnt,7)]; ENBBY = [(quest_pos_cnt:8,8)];
FLOAT quest_x_6; ENBBY = [(quest_pos_cnt,6)]; ENBBY = [(quest_pos_cnt,7)]; ENBBY = [(quest_pos_cnt:8,8)];
FLOAT quest_y_6; ENBBY = [(quest_pos_cnt,6)]; ENBBY = [(quest_pos_cnt,7)]; ENBBY = [(quest_pos_cnt:8,8)];
FLOAT quest_z_6; ENBBY = [(quest_pos_cnt,6)]; ENBBY = [(quest_pos_cnt,7)]; ENBBY = [(quest_pos_cnt:8,8)];
FLOAT quest_x_7; ENBBY = [(quest_pos_cnt,7)]; ENBBY = [(quest_pos_cnt:8,8)];
FLOAT quest_y_7; ENBBY = [(quest_pos_cnt,7)]; ENBBY = [(quest_pos_cnt:8,8)];
FLOAT quest_z_7; ENBBY = [(quest_pos_cnt,7)]; ENBBY = [(quest_pos_cnt:8,8)];
FLOAT quest_x_8; ENBBY = [(quest_pos_cnt:8,8)];
FLOAT quest_y_8; ENBBY = [(quest_pos_cnt:8,8)];
FLOAT quest_z_8; ENBBY = [(quest_pos_cnt:8,8)];
INT UNK_VAL[quest_pos_cnt];
UCHAR UNK_2;
UINT lvl_min;
UINT lvl_max;
UINT quest_type;
ASCF entity_name;
UINT get_item_in_quest;
UINT UNK_3; // 1 = same tab stack, 0 = end of stack (ex: |11110|10| if ur in the 2nd stack id 6 or 7 in quest prog |12345|67| the displayed stack would be |167| in the display)
UINT UNK_4;
CNTR contact_npc_cnt;
UINT contact_npc[contact_npc_cnt];
FLOAT contact_npc_x;
FLOAT contact_npc_y;
FLOAT contact_npc_z;
ASCF restricions;
ASCF short_description;
UCHAR req_class_cnt; // race restriction count
UCHAR UNK_6; // id of class that can do quest
ENBBY = [(req_class_cnt:64,64)];
INT req_class[req_class_cnt]; // id of class that can do quest
CNTR req_item_cnt;
INT req_item[req_item_cnt]; // id of items needed to do quest
UINT clan_pet_quest;
UINT req_quest_complete; // id of quest that must be completed first
UINT UNK_7;
UINT area_id;
UINT UNK_8;
CNTR reward_id_cnt;
INT reward_id[reward_id_cnt];
CNTR reward_count_cnt;
INT reward_count[reward_count_cnt];
CNTR parent_step_cnt;
INT parent_step[parent_step_cnt];
}
recipe-c.ddf:
Код:
// Lindvior (12.04.2013). Editors: Anonymous, Hint.
FS = "\t";
HEADER = 1;
RECCNT = OFF;
MTXCNT_OUT = 1;
MATCNT_OUT = 1;
ORD_IGNORE = 0;
{
ASCF name;
UINT id_mk;
UINT id_recipe;
UINT level;
UINT id_item;
UINT count;
UINT UNK1;
UINT UNK2;
UINT mp_cost;
UINT success_rate;
UINT mat_cnt;
UINT mat_id_1; ENBBY = [(mat_cnt:1,1)]; ENBBY = [(mat_cnt:2,2)]; ENBBY = [(mat_cnt:4,4)]; ENBBY = [(mat_cnt:8,8)];
UINT mat_cnt_1; ENBBY = [(mat_cnt:1,1)]; ENBBY = [(mat_cnt:2,2)]; ENBBY = [(mat_cnt:4,4)]; ENBBY = [(mat_cnt:8,8)];
UINT mat_unk_1; ENBBY = [(mat_cnt:1,1)]; ENBBY = [(mat_cnt:2,2)]; ENBBY = [(mat_cnt:4,4)]; ENBBY = [(mat_cnt:8,8)];
UINT mat_id_2; ENBBY = [(mat_cnt:2,2)]; ENBBY = [(mat_cnt:4,4)]; ENBBY = [(mat_cnt:8,8)];
UINT mat_cnt_2; ENBBY = [(mat_cnt:2,2)]; ENBBY = [(mat_cnt:4,4)]; ENBBY = [(mat_cnt:8,8)];
UINT mat_unk_2; ENBBY = [(mat_cnt:2,2)]; ENBBY = [(mat_cnt:4,4)]; ENBBY = [(mat_cnt:8,8)];
UINT mat_id_3; ENBBY = [(mat_cnt,3)]; ENBBY = [(mat_cnt:4,4)]; ENBBY = [(mat_cnt:8,8)];
UINT mat_cnt_3; ENBBY = [(mat_cnt,3)]; ENBBY = [(mat_cnt:4,4)]; ENBBY = [(mat_cnt:8,8)];
UINT mat_unk_3; ENBBY = [(mat_cnt,3)]; ENBBY = [(mat_cnt:4,4)]; ENBBY = [(mat_cnt:8,8)];
UINT mat_id_4; ENBBY = [(mat_cnt:4,4)]; ENBBY = [(mat_cnt:8,8)];
UINT mat_cnt_4; ENBBY = [(mat_cnt:4,4)]; ENBBY = [(mat_cnt:8,8)];
UINT mat_unk_4; ENBBY = [(mat_cnt:4,4)]; ENBBY = [(mat_cnt:8,8)];
UINT mat_id_5; ENBBY = [(mat_cnt,5)]; ENBBY = [(mat_cnt,6)]; ENBBY = [(mat_cnt,7)]; ENBBY = [(mat_cnt:8,8)];
UINT mat_cnt_5; ENBBY = [(mat_cnt,5)]; ENBBY = [(mat_cnt,6)]; ENBBY = [(mat_cnt,7)]; ENBBY = [(mat_cnt:8,8)];
UINT mat_unk_5; ENBBY = [(mat_cnt,5)]; ENBBY = [(mat_cnt,6)]; ENBBY = [(mat_cnt,7)]; ENBBY = [(mat_cnt:8,8)];
UINT mat_id_6; ENBBY = [(mat_cnt,6)]; ENBBY = [(mat_cnt,7)]; ENBBY = [(mat_cnt:8,8)];
UINT mat_cnt_6; ENBBY = [(mat_cnt,6)]; ENBBY = [(mat_cnt,7)]; ENBBY = [(mat_cnt:8,8)];
UINT mat_unk_6; ENBBY = [(mat_cnt,6)]; ENBBY = [(mat_cnt,7)]; ENBBY = [(mat_cnt:8,8)];
UINT mat_id_7; ENBBY = [(mat_cnt,7)]; ENBBY = [(mat_cnt:8,8)];
UINT mat_cnt_7; ENBBY = [(mat_cnt,7)]; ENBBY = [(mat_cnt:8,8)];
UINT mat_unk_7; ENBBY = [(mat_cnt,7)]; ENBBY = [(mat_cnt:8,8)];
UINT mat_id_8; ENBBY = [(mat_cnt:8,8)];
UINT mat_cnt_8; ENBBY = [(mat_cnt:8,8)];
UINT mat_unk_8; ENBBY = [(mat_cnt:8,8)];
UINT mat_id_9; ENBBY = [(mat_cnt,9)]; ENBBY = [(mat_cnt,10)];
UINT mat_cnt_9; ENBBY = [(mat_cnt,9)]; ENBBY = [(mat_cnt,10)];
UINT mat_unk_9; ENBBY = [(mat_cnt,9)]; ENBBY = [(mat_cnt,10)];
UINT mat_id_10; ENBBY = [(mat_cnt,10)];
UINT mat_cnt_10; ENBBY = [(mat_cnt,10)];
UINT mat_unk_10; ENBBY = [(mat_cnt,10)];
}
npcgrp.ddf:
Код:
// Lindvior (12.04.2013). Editors: Anonymous, Allen (L2Sexi), Hint.
FS = "\t";
HEADER = 1;
RECCNT = OFF;
MTXCNT_OUT = 1;
MATCNT_OUT = 1;
ORD_IGNORE = 0;
{
UINT tag;
UNICODE class;
UNICODE mesh;
UINT cnt_tex1;
UNICODE tex1[cnt_tex1];
UINT cnt_tex2;
UNICODE tex1[cnt_tex2];
CNTR cnt_dtab1;
UINT dtab1[cnt_dtab1];
FLOAT npc_speed;
UINT unk0_cnt;
UNICODE unk0_tab[unk0_cnt];
CNTR cnt_snd1;
UNICODE snd1[cnt_snd1];
CNTR cnt_snd2;
UNICODE snd2[cnt_snd2];
CNTR cnt_snd3;
UNICODE snd3[cnt_snd3];
UINT rb_effect_cnt;
UNICODE rb_effect_1; ENBBY = [(rb_effect_cnt:1,1)]; ENBBY = [(rb_effect_cnt:2,2)]; ENBBY = [(rb_effect_cnt:4,4)];
FLOAT rb_effect_fl_1; ENBBY = [(rb_effect_cnt:1,1)]; ENBBY = [(rb_effect_cnt:2,2)]; ENBBY = [(rb_effect_cnt:4,4)];
UNICODE rb_effect_2; ENBBY = [(rb_effect_cnt:2,2)]; ENBBY = [(rb_effect_cnt:4,4)];
FLOAT rb_effect_fl_2; ENBBY = [(rb_effect_cnt:2,2)]; ENBBY = [(rb_effect_cnt:4,4)];
UNICODE rb_effect_3; ENBBY = [(rb_effect_cnt,3)]; ENBBY = [(rb_effect_cnt:4,4)];
FLOAT rb_effect_fl_3; ENBBY = [(rb_effect_cnt,3)]; ENBBY = [(rb_effect_cnt:4,4)];
UNICODE rb_effect_4; ENBBY = [(rb_effect_cnt:4,4)];
FLOAT rb_effect_fl_4; ENBBY = [(rb_effect_cnt:4,4)];
CNTR quests_cnt;
UINT quests[quests_cnt];
CNTR unk2_cnt;
UINT unk2_tab[unk2_cnt];
UNICODE effect;
UINT UNK_3;
FLOAT sound_rad;
FLOAT sound_vol;
FLOAT sound_rnd;
UINT quest_be;
UINT class_lim_?;
UINT npcend_cnt;
ASCF npcend[npcend_cnt];
UINT unk1[4];
FLOAT unk_glory;
ASCF icon;
UINT unk_glory_null; // always 0
}
Так как ENBBY стало очень много, написал скрипт для их генерации:
PHP код:
<?php
/**
* @author Hint (12.04.2013)
*/
function generateEnbby($counter, $fields, $count)
{
$count = max(1, min(24, (int)$count));
if (!is_string($counter) || !$counter) return false;
if (!is_array($fields) || !$fields) return false;
$p = array();
$i = 1;
do
{
$p[] = $i;
$i *= 2;
}
while ($i <= $count);
$result = '';
for ($i = 1; $i <= $count; ++$i)
{
$c = '';
$l = null;
foreach ($p as $n)
{
if ($n >= $i)
{
if (is_null($l))
{
$l = $n;
}
$c .= ' ENBBY = [(' . $counter . ':' . $n . ',' . $n . ')];';
}
}
$s = '';
if (is_null($l))
{
$l = $count + 1;
}
for ($j = $i; $j < $l; ++$j)
{
$s .= ' ENBBY = [(' . $counter . ',' . $j . ')];';
}
$c = $s . $c;
foreach ($fields as $f)
{
$result .= str_replace('%', $i, $f) . ';' . $c . "\n";
}
}
return $result;
}
$s = generateEnbby('rb_effect_cnt', array('UNICODE rb_effect_%', 'FLOAT rb_effect_fl_%'), 10);
echo '<html><body><pre>' . $s . '</pre></body></html>';