ОБСУЖДЕНИЕ

"система" боя в онлайн-игре

26 сообщений1 просмотровОткрыта
#1
Всем привет, хотел бы поделиться своим решением, может кому-то будет полезно)
Итак, что мы имеем? У персонажа такие параметры:

атака - влияет на наносимый урон
защита - влияет на получаемый урон
крит.удар - при срабатывании увеличивает урон на 1.5%
блок - при срабатывании уменьшает получаемый урон на 25-30%

Сама формула имеет такой вид:
Средний урон=((АтакаИгрока-ЗащитаВрага)/2)*все возможные модификаторы(пока что это Крит(1.5%))

ничего космического.. если АтакаПерсонажа меньше чем 90% от ЗащитыВрага, то в любом случаи минимальный урон будет равен 10% от АтакиПерсонажа без учёта Крита...


далее про крит/блок...
#2
Крит.Удар - не буду долго извращаться,попробую по-короче:
берём АтакуИгрока, получаем от неё 20%, далее берём значение Крит.Удара игрока,
после вычисляем сколько значение Крит.Удара будет от 20% атаки в процентах..
если значение Крит.Удара равно или более чем 20% от атаки,то шанс нанести Критический Удар равняется 90%..

с Блоком почти такая же ситуация, только берёшь не 20% от АтакиИгрока, а 40% от атаки противника и далее идут вычисления как и с критом:


код ниже..
#3
PHP

$char['attack'] = 60; // АТАКА ИГРОКА
$char['defense'] = 8; // ЗАЩИТА ИГРОКА
$char['krit'] = 6; // КРИТ.УДАР ИГРОКА
$char['block'] = 8; // БЛОК ИГРОКА
$enemy_name = '<orange>Зомби</orange>';
$enemy_def_var = 4; // ЗАЩИТА ВРАГА
$enemy_attack_var = 20; // АТАКА ВРАГА

$min_crit_index = $char['attack']*0.20; // 20% атаки игрока, макс.значение крита
$min_block_index = $enemy_attack_var*0.40; // 40% атаки врага, макс.значение блока

$enemy_midd_attack = ($enemy_attack_var-$char['def'])/2; // АТАКА ВРАГА
$midd_attack = ($char['attack']-$enemy_def_var)/2; // АТАКА ИГРОКА


$check_difference = $char['attack']*0.90; // РАЗНИЦА АТАКИ ИГРОКА
$enemy_check_difference = $enemy_attack_var*0.90; // РАЗНИЦА АТАКИ ИГРОКА


// УРОН ВРАГА
if($char['defense'] > $enemy_check_difference)
{
    $enemy_uron = floor(mt_rand((($enemy_attack_var*0.10)*0.90),(($enemy_attack_var*0.10)*1.10)));
}
else
{
    $enemy_uron = floor(mt_rand(($enemy_midd_attack*0.90),($enemy_midd_attack*1.10)));
}

// УРОН ИГРОКА
if($enemy_def_var > $check_difference)
{
    $uron = floor(mt_rand((($char['attack']*0.10)*0.90),(($char['attack']*0.10)*1.10)));
}
else
{
    $uron = floor(mt_rand(($midd_attack*0.90),($midd_attack*1.10)));
}
// УМЕНЬШАЕМ УРОН ПО КД
if($char['delay'] >= time()){ $uron = floor($uron*0.50); $d=50;}

// БЛОК ИГРОКА
$rand_block = mt_rand(0,100);
$block = floor($char['block']/($min_block_index/100)); // ШАНС БЛОКА
if($char['block'] >= $min_block_index)
{
    $block = 80;
}
if($rand_block <= $block)
{
    $enemy_uron = floor(mt_rand(($enemy_uron*0.75),($enemy_uron*0.80)));
    $e_block = true;
}


// КРИТ.УДАР ИГРОКА
$rand_crit = mt_rand(0,100);
$krit = floor($char['krit']/($min_crit_index/100)); // ШАНС КРИТА

if($char['krit'] >= $min_crit_index)
{
    $krit = 90;
}

if($rand_crit <= $krit)
{
    $uron = floor($uron*1.5);
    $ckrit = true;
}
//////////////////////////////


if($enemy_uron > '0')
{  
    if($e_block)
    {
        $enemy_text_uron = "<block>$enemy_uron Блок</block>";
    }
    else
    {
        $enemy_text_uron = "<font color=red>$enemy_uron</font>";
    }
    $db->query("INSERT INTO `test.log` SET `text`='$enemy_name ударил вас на $enemy_text_uron'");
}

if($ckrit)
{
    $char_text_uron = "<crit>$uron Крит</crit>";
}
else
{
    $char_text_uron = " $uron";
}


$delay = time()+2;
$db->query("UPDATE `character` SET `delay`='$delay' WHERE `id`='$user_id'");

$db->query("INSERT INTO `test.log` SET `text`='Вы ударили $enemy_name на $char_text_uron'");

#4
собственно как это выглядит,скрин:

http://prntscr.com/8q022w
#5
У меня Корейский рандом, формулы канают.
Все остальное не то.
#6
если ДРЮ разбанит мой основной ip, возможно буду ещё делиться разными плюшками
p.s: забанил,типо я ддудосил мастерам .смех.
#7
ну если взять л2,то там слишком трудно и слишком нафиг надо, делать правильную формулу с учётом всего)
#8
все надо считать, да это пол беды, а вот гео это вот да.
#9
Пример такая формула, и не очень она и сложная.

Критический урон оружия ближнего боя
Damage=77 * [P.atk * CDmult. * CDbonus + CDstaticbonus] / P.Def

P.Atk - текущее значение физ. атаки персонажа.
P.Def - текущее значение физ. защиты цели.
CDmult - модификатор крит. урона = 2.0
CDbonus - перемноженные модификаторы крит. урона от эффектов. к примеру death whisper (шёпот смерти) +35% cd bonus=1.35
CDstaticbonus - статичная прибавка к силе крит. урона. например умение "великая стрельба" имеет прибавку 774.
#10
ну у меня попроще будет)
#11
у тебя формулы не от чего не зависят кроме чистой атаки и защиты.
Все остальное просто для красоты.
#12
дак там ничего и нет,пока что)
позже будут всякий плюхи на повышение крит.урона,урона,снижение получаемого урона,скиллы разные
#13
Все делится, физ, маг, крит атака, маг/физ умения, с сосками, с разными оружиями + если по скилу, бафы/дебафы тоже со всей хурмой выше.
вот тебе подарок еще.))

damage=70*(((skill power*cd res. bonus+skill power*cd multiplier 2*bs bonus)/3*soulshot bonus+p.atk)*cd multiplier+crit dmg constant*crit dmg p.atk)*infinite physical skill damage bonus/p.def

p.atk - текущая физ. атака персонажа.
p.def - текущая физ. защита цели.
skill power - сила умения.
cd multiplier - бонусы к силе крит. удара. (шёпот смерти, поэма барабана и т.д.).
cd multiplier 2 - бонусы к силе крит. удара в зависимости от положения цели (спереди, сбоку, сзади).
bs bonus - сбоку х1,1, сзади х1,2.
soulshot bonus - бонус соулшотов. х2 (а там есть до х12).
crit dmg constant - 6.1.
crit dmg p.atk - статичная прибавка к силе крита. (макс. крит. урон +609, великое владение крит. ударом +539).
cd res. bonus - бонусы сопротивления к крит. урону. меньше единицы если это увеличение сопротивления, больше если уменьшение сопротивления резиста цели. пр.: поэма барабана - 0.7. слабость - крит. урон 1 lvl - 1.35.
infinite physical skill damage bonus - бонус введенный в infinite odyssey part 2, общий для всех физ. умений. х1,10113
#14
мне-то это зачем??
#15
ты просил кода то, яхз
может надо корейский рандом.
не у каждого он есть кроме инновы и нцсофта
#16
ну когда просил,я был молод и глуп))
л2 не рентабельна уже так-то) так что надо своё что-то мутить)
#17
армия че.
#18
какая армия?)
#19
яхз ты вроде та уходил.
Я БЛИН ДРОП НЕ МОГУ ДОПИСАТЬ НЕДЕЛЮ УЖЕ ИЗ ЗА МАРИССЫ
#20
нее,ты че путаешь)
с дропом на халтурь,я гномом гамаю)
Страница 1 из 2 · Всего записей: 26