Tokiwa Battle Royale  GE777
A PHP Battle Royale inspired game
 All Data Structures Namespaces Files Functions Variables Pages
combat.func.php
Go to the documentation of this file.
1 <?php
2 
3 if (! defined ( 'IN_GAME' )) {
4  exit ( 'Access Denied' );
5 }
6 
7 function combat($active = 1, $wep_kind = '') {
8  global $log, $mode, $main, $cmd, $battle_title, $db, $tablepre, $pls, $message, $now, $w_log, $nosta, $hdamage, $hplayer;
9  global $pid, $name, $club, $inf, $lvl, $exp, $killnum, $bid, $tactic, $pose, $hp,$mhp;
10  global $wep, $wepk, $wepe, $weps, $wepsk;
11  global $edata, $w_pid, $w_name, $w_pass, $w_type, $w_endtime,$w_deathtime, $w_gd, $w_sNo, $w_icon, $w_club, $w_hp, $w_mhp, $w_sp, $w_msp, $w_att, $w_def, $w_pls, $w_lvl, $w_exp, $w_money, $w_bid, $w_inf, $w_rage, $w_pose, $w_tactic, $w_killnum, $w_state, $w_wp, $w_wk, $w_wg, $w_wc, $w_wd, $w_wf, $w_teamID, $w_teamPass;
12  global $w_wep, $w_wepk, $w_wepe, $w_weps, $w_arb, $w_arbk, $w_arbe, $w_arbs, $w_arh, $w_arhk, $w_arhe, $w_arhs, $w_ara, $w_arak, $w_arae, $w_aras, $w_arf, $w_arfk, $w_arfe, $w_arfs, $w_art, $w_artk, $w_arte, $w_arts, $w_itm0, $w_itmk0, $w_itme0, $w_itms0, $w_itm1, $w_itmk1, $w_itme1, $w_itms1, $w_itm2, $w_itmk2, $w_itme2, $w_itms2, $w_itm3, $w_itmk3, $w_itme3, $w_itms3, $w_itm4, $w_itmk4, $w_itme4, $w_itms4, $w_itm5, $w_itmk5, $w_itme5, $w_itms5,$w_itm6, $w_itmk6, $w_itme6, $w_itms6, $w_wepsk, $w_arbsk, $w_arhsk, $w_arask, $w_arfsk, $w_artsk, $w_itmsk0, $w_itmsk1, $w_itmsk2, $w_itmsk3, $w_itmsk4, $w_itmsk5, $w_itmsk6;
13  global $infinfo, $w_combat_inf;
14  global $rp,$w_rp,$action,$w_action,$achievement,$w_achievement,$skills,$w_skills,$skillpoint,$w_skillpoint;
15 
16  $battle_title = '战斗发生';
17 
18  if (! $wep_kind) {
19  $w1 = substr ( $wepk, 1, 1 );
20  $w2 = substr ( $wepk, 2, 1 );
21  if ((($w1 == 'G')||($w1=='J')) && ($weps == $nosta)) {
22  $wep_kind = $w2 ? $w2 : 'P';
23  } else {
24  $wep_kind = $w1;
25  }
26  } elseif (strpos($wepk,$wep_kind)===false && $wep_kind != 'back'){
27  $wep_kind = substr ( $wepk, 1, 1 );
28  }
29 
30  $wep_temp = $wep;
31 
32  include_once GAME_ROOT.'./include/game/clubskills.func.php';
33  if ($active) {
34 
35  if ($wep_kind == 'back') {
36  $log .= "你逃跑了。";
37  $action = '';
38  $mode = 'command';
39  return;
40  }
41  $enemyid = $active ? str_replace('enemy','',$action) : $bid;
42  if(!$enemyid || strpos($action,'enemy')===false){
43  $log .= "<span class=\"yellow\">你没有遇到敌人,或已经离开战场!</span><br>";
44  $action = '';
45  $mode = 'command';
46  return;
47  }
48 
49  $result = $db->query ( "SELECT * FROM {$tablepre}players WHERE pid='$enemyid'" );
50  if (! $db->num_rows ( $result )) {
51  $log .= "对方不存在!<br>";
52  $action = '';
53  $mode = 'command';
54  return;
55  }
56 
57  $edata = $db->fetch_array ( $result );
58 
59  if ($edata ['pls'] != $pls) {
60  $log .= "<span class=\"yellow\">" . $edata ['name'] . "</span>已经离开了<span class=\"yellow\">$plsinfo[$pls]</span>。<br>";
61  $action = '';
62  $mode = 'command';
63  return;
64  } elseif ($edata ['hp'] <= 0) {
66  $log .= "<span class=\"red\">" . $edata ['name'] . "</span>已经死亡,不能被攻击。<br>";
67  if($edata['endtime'] < $now -$corpseprotect && $gamestate < 40){
68  $action = 'corpse'.$edata['pid'];
69  include_once GAME_ROOT . './include/game/battle.func.php';
70  findcorpse ( $edata );
71  }
72  //$action = '';
73  return;
74  }
75 
76  if ($message) {
77 // foreach ( Array('<','>',';',',') as $value ) {
78 // if(strpos($message,$value)!==false){
79 // $message = str_replace ( $value, '', $message );
80 // }
81 // }
82  $log .= "<span class=\"lime\">你对{$edata ['name']}大喊:{$message}</span><br>";
83  if (! $edata ['type']) {
84  $w_log = "<span class=\"lime\">{$name}对你大喊:{$message}</span><br>";
85  logsave ( $edata ['pid'], $now, $w_log ,'c');
86  }
87  }
88 
89  extract ( $edata, EXTR_PREFIX_ALL, 'w' );
90  init_battle ( 1 );
91  include_once GAME_ROOT . './include/game/attr.func.php';
92 
93  $log .= "你向<span class=\"red\">$w_name</span>发起了攻击!<br>";
94  $att_dmg = attack ( $wep_kind, 1 );
95  global $ggflag;
96  if($ggflag){return;}
97 
98  $w_hp -= $att_dmg;
99 
100  if (($w_hp > 0) && ($w_tactic != 4) && ($w_pose != 5)) {
101  global $rangeinfo;
102  $w_w1 = substr ( $w_wepk, 1, 1 );
103  $w_w2 = substr ( $w_wepk, 2, 1 );
104  if ((($w_w1 == 'G')||($w_w1=='J')) && ($w_weps == $nosta)) {
105  $w_wep_kind = $w_w2 ? $w_w2 : 'P';
106  } else {
107  $w_wep_kind = $w_w1;
108  }
109  //if (($rangeinfo [$wep_kind] == $rangeinfo [$w_wep_kind]) || ($rangeinfo [$w_wep_kind] == 'M')) {
110  if ($rangeinfo [$wep_kind] <= $rangeinfo [$w_wep_kind] && $rangeinfo [$wep_kind] !== 0) {
111  $counter = get_counter ( $w_wep_kind, $w_tactic, $w_club, $w_inf );
112 
113  $counter *= get_clubskill_bonus_counter($w_club,$w_skills,'w_',$club,$skills,'');
114  $counter_dice = rand ( 0, 99 );
115  if ($counter_dice < $counter) {
116  $log .= "<span class=\"red\">{$w_name}的反击!</span><br>";
117 
118  $log .= npc_chat ( $w_type,$w_name, 'defend' );
119 
120  $def_dmg = defend ( $w_wep_kind );
121  } else {
122 
123  $log .= npc_chat ( $w_type,$w_name, 'escape' );
124 
125  $log .= "<span class=\"red\">{$w_name}处于无法反击的状态,逃跑了!</span><br>";
126  }
127  } else {
128 
129  $log .= npc_chat ( $w_type,$w_name, 'cannot' );
130 
131  $log .= "<span class=\"red\">{$w_name}攻击范围不足,不能反击,逃跑了!</span><br>";
132  }
133 
134  } elseif($w_hp > 0) {
135  $log .= "<span class=\"red\">{$w_name}逃跑了!</span><br>";
136  }
137  } else {
138  $result = $db->query ( "SELECT * FROM {$tablepre}players WHERE pid='$bid'" );
139  $edata = $db->fetch_array ( $result );
140  extract ( $edata, EXTR_PREFIX_ALL, 'w' );
141  init_battle ( 1 );
142  include_once GAME_ROOT . './include/game/attr.func.php';
143 
144  $log .= "<span class=\"red\">$w_name</span>突然向你袭来!<br>";
145 
146 
147  $log .= npc_chat ( $w_type,$w_name, 'attack' );
148  npc_changewep();
149 
150  $w_w1 = substr ( $w_wepk, 1, 1 );
151  $w_w2 = substr ( $w_wepk, 2, 1 );
152  if ((($w_w1 == 'G')||($w_w1=='J')) && ($w_weps == $nosta)) {
153  $w_wep_kind = $w_w2 ? $w_w2 : 'P';
154  } else {
155  $w_wep_kind = $w_w1;
156  }
157  $def_dmg = defend ( $w_wep_kind, 1 );
158  if (($hp > 0) && ($tactic != 4) && ($pose != 5)) {
159  global $rangeinfo;
160  if ($rangeinfo [$wep_kind] >= $rangeinfo [$w_wep_kind] && $rangeinfo [$w_wep_kind] !== 0) {
161  $counter = get_counter ( $wep_kind, $tactic, $club, $inf );
162 
163  $counter *= get_clubskill_bonus_counter($club,$skills,'',$w_club,$w_skills,'w_');
164  $counter_dice = rand ( 0, 99 );
165  if ($counter_dice < $counter) {
166  $log .= "<span class=\"red\">你的反击!</span><br>";
167  $wep_kind = substr ( $wepk, 1, 1 );
168  $att_dmg = attack ( $wep_kind );
169  $w_hp -= $att_dmg;
170  } else {
171  $log .= "<span class=\"red\">你处于无法反击的状态,逃跑了!</span><br>";
172  }
173  } else {
174  $log .= "<span class=\"red\">你攻击范围不足,不能反击,逃跑了!</span><br>";
175  }
176  } elseif($hp > 0) {
177  $log .= "<span class=\"red\">你逃跑了!</span><br>";
178  }
179  }
180 
181  if($hp == 0 && !$w_action){$w_action = 'pacorpse'.$pid;}
182  w_save ( $w_pid );
183  $att_dmg = $att_dmg ? $att_dmg : 0;
184  $def_dmg = $def_dmg ? $def_dmg : 0;
185 
186  if (! $w_type) {
187  $w_inf_log = '';
188  if ($w_combat_inf) {
189  global $exdmginf;
190  foreach ( $exdmginf as $inf_ky => $w_inf_words ) {
191  if (strpos ( $w_combat_inf, $inf_ky ) !== false) {
192  $w_inf_log .= "敌人的攻击造成你{$w_inf_words}了!<br>";
193  }
194  }
195 
196  }
197  if($active){
198  $w_log = "手持<span class=\"red\">$wep_temp</span>的<span class=\"yellow\">$name</span>向你袭击!<br>你受到其<span class=\"yellow\">$att_dmg</span>点攻击,对其做出了<span class=\"yellow\">$def_dmg</span>点反击。<br>$w_inf_log";
199  }else{
200  $w_log = "你发现了手持<span class=\"red\">$wep_temp</span>的<span class=\"yellow\">$name</span>并且先发制人!<br>你对其做出<span class=\"yellow\">$def_dmg</span>点攻击,受到其<span class=\"yellow\">$att_dmg</span>点反击。<br>$w_inf_log";
201  }
202  if($hp == 0){
203  $w_log .= "<span class=\"yellow\">$name</span><span class=\"red\">被你杀死了!</span><br>";
204  //include_once GAME_ROOT.'./include/game/achievement.func.php';
205  //check_battle_achievement($w_achievement,$w_type,$name);
206  }
207 
208  logsave ( $w_pid, $now, $w_log ,'b');
209  }
210 
211  if (($att_dmg > $hdamage) && ($att_dmg >= $def_dmg)) {
212  $hdamage = $att_dmg;
213  $hplayer = $name;
214  save_combatinfo ();
215  } elseif (($def_dmg > $hdamage) && (! $w_type)) {
216  $hdamage = $def_dmg;
217  $hplayer = $w_name;
218  save_combatinfo ();
219  }
220 
221  //$bid = $w_pid;
222 
223  if ($w_hp <= 0 && $w_club != 99) {
224  $w_bid = $pid;
225  $w_hp = 0;
226  if ($w_type==0){$killnum ++;};
227 
228  include_once GAME_ROOT . './include/state.func.php';
229  $killmsg = kill ( $wep_kind, $w_name, $w_type, $w_pid, $wep_temp );
230  $log .= npc_chat ( $w_type,$w_name, 'death' );
231 
232  include_once GAME_ROOT.'./include/game/achievement.func.php';
233  check_battle_achievement($name,$w_type,$w_name,$wep_temp);
234 
235  $log .= "<span class=\"red\">{$w_name}被你杀死了!</span><br>";
236  //$rp = $rp + 20 ;
237 
238  if(!$w_type){$rpup = $w_rp;}
239  else{$rpup = 20;}
240  if($club == 19){
241  $rpdec = 30;
242  $rpdec += get_clubskill_rp_dec($club,$skills);
243  $rp += round($rpup*(100-$rpdec)/100);
244  }
245  else{
246  $rp += $rpup;
247  }
248 
249  if($killmsg){$log .= "<span class=\"yellow\">你对{$w_name}说:“{$killmsg}”</span><br>";}
250  include_once GAME_ROOT . './include/game/battle.func.php';
251  $result = $db->query ( "SELECT * FROM {$tablepre}players WHERE pid='$w_pid'" );
252  $cdata = $db->fetch_array ( $result );
253  $action = 'corpse'.$edata['pid'];
254  findcorpse ( $cdata );
255  return;
256  } else {
257  if($w_hp <= 0){//有第二阶段
258  if ($w_type)
259  {
260  $log .= npc_chat ( $w_type,$w_name, 'death' );
261  include_once GAME_ROOT . './include/system.func.php';
262  $npcdata = evonpc ($w_type,$w_name);
263  $log .= '<span class="yellow">'.$w_name.'却没死去,反而爆发出真正的实力!</span><br>';
264  if($npcdata){
265  addnews($now , 'evonpc',$w_name, $npcdata['name'], $name);
266  foreach($npcdata as $key => $val){
267  ${'w_'.$key} = $val;
268  }
269  }
270  }
271  else
272  {
273  include_once GAME_ROOT . './include/state.func.php';
274  $killmsg = kill ( $wep_kind, $w_name, $w_type, $w_pid, $wep_temp );
275  $log .= '<span class="yellow">'.$w_name.'由于其及时按了BOMB键而原地满血复活了!</span><br>';
276  }
277  }
278  $main = 'battle';
279  init_battle ( 1 );
280 
281  if (CURSCRIPT !== 'botservice')
282  {
283  include template('battleresult');
284  //$cmd = '<br><br><input type="hidden" name="mode" value="command"><input type="radio" name="command" id="back" value="back" checked><a onclick=sl("back"); href="javascript:void(0);" >确定</a><br>';
285  $cmd = ob_get_contents();
286  ob_clean();
287  //$bid = $hp <= 0 ? $bid : 0;
288  }
289  $action = '';
290  return;
291  }
292 }
293 
294 function attack($wep_kind = 'N', $active = 0) {
296  global $name, $lvl, $gd, $pid, $pls, $hp, $sp, $rage, $exp, $club, $att, $inf, $message,$w_mhp;
297  global $wep, $wepk, $wepe, $weps, $wepsk;
298  global $w_arbe, $w_arbsk, $w_arhe, $w_arae, $w_arfe,$w_wepk;
299  global $artk, $arhsk, $arbsk, $arask, $arfsk, $artsk;
300  global $w_hp, $w_rage, $w_lvl, $w_pid, $w_gd, $w_name, $w_type, $w_inf, $w_def;
301  global $w_wepsk, $w_arhsk, $w_arask, $w_arfsk, $w_artsk, $w_artk;
302  global $wp,$wk,$wc,$wg,$wd,$wf,$skills,$w_skills,$w_club,$skillpoint,$w_skillpoint,$rp,$w_rp;
303  include_once GAME_ROOT.'./include/game/clubskills.func.php';
304  //npc_changewep();
305  $is_wpg = false;
306  $watt=-1;
307  if (((strpos ( $wepk, 'G' ) == 1)||(strpos($wepk,'J')==1)) && ($weps == $nosta)) {
308  if (($wep_kind == 'G') || ($wep_kind == 'P')||($wep_kind=='J')) {
309  $wep_kind = 'P';
310  $is_wpg = true;
311  $watt = round ( $wepe / 5 );
312  } else {
313  $watt = $wepe;
314  }
315  }
316 
317  $log .= "使用{$wep}<span class=\"yellow\">$attinfo[$wep_kind]</span>{$w_name}!<br>";
318 
319  $att_key = getatkkey ( $wepsk, $arhsk, $arbsk, $arask, $arfsk, $artsk, $artk, $is_wpg );
320  $w_def_key = getdefkey ( $w_wepsk, $w_arhsk, $w_arbsk, $w_arask, $w_arfsk, $w_artsk, $w_artk );
321  $mdr = $skdr = $sldr = false;
322  if(strpos($att_key.$w_def_key,'-')!==false){$mdr = true;}//精抽
323  if(strpos($att_key.$w_def_key,'*')!==false){$sldr = true;}//魂抽
324  if(strpos($att_key.$w_def_key,'+')!==false){$skdr = true;}//技抽
325 
326  if($mdr || $sldr || $skdr){
327  list($wsk,$hsk,$bsk,$ask,$fsk,$tsk,$tk)=Array($wepsk, $arhsk, $arbsk, $arask, $arfsk, $artsk, $artk);
328  list($wwsk,$whsk,$wbsk,$wask,$wfsk,$wtsk,$wtk)=Array( $w_wepsk, $w_arhsk, $w_arbsk, $w_arask, $w_arfsk, $w_artsk, $w_artk);
329  if($mdr){
330  $log .= "<span class=\"yellow\">精神抽取使双方的防具属性全部失效!</span><br>";
331  $hsk = $bsk = $ask = $fsk = $whsk = $wbsk = $wask = $wfsk = '';
332  }
333  if($sldr){
334  $log .= "<span class=\"yellow\">灵魂抽取使双方的武器和饰物属性全部失效!</span><br>";
335  $wsk = $tsk = $tk = $wwsk = $wtsk = $wtk = '';
336  }
337  if($skdr){
338  $log .= "<span class=\"yellow\">技能抽取使双方的武器熟练度在战斗中大幅下降!</span><br>";
339  //$bsk = $ask = $fsk = $wbsk = $wask = $wfsk = '';
340  }
341  $att_key = getatkkey ( $wsk,$hsk,$bsk,$ask,$fsk,$tsk,$tk, $is_wpg );
342  $w_def_key = getdefkey ( $wwsk,$whsk,$wbsk,$wask,$wfsk,$wtsk,$wtk );
343  }
344 
345 
346  //判定直死
347  if(strpos($att_key,'X')!==false){
348  global $ggflag;
349  $ggflag = false;
350  $ddice = rand(0,99);
351  if($ddice <=14){
352  $log .= "<span class=\"red\">你手中的武器忽然失去了控制,喀吧一声就斩断了什么。你发现那似乎是你的死线。</span><br>";
353  include_once GAME_ROOT . './include/state.func.php';
354  death('gg','','',$wep);
355  $ggflag = true;
356  return 0;
357  }
358  }
359 
360  //attack函数是玩家打npc专用,在这里加npc内容是没用的
361 
362 // if ((strpos($att_key,"X")!==false)&&($type)&&(!$w_type)&&(rand(1,5)>3)){
363 // if ($wep=='燕返262'){
364 // $log.="<img src=\"img/other/262.png\"><br>";
365 // }
366 // $damage=$w_mhp;
367 // $log .= "造成<span class=\"red\">$damage</span>点伤害!<br>";
368 // checkdmg ( $name, $w_name, $damage );
369 // return $damage;
370 // }
371 
372  global ${$skillinfo [$wep_kind]};
373  $add_skill = & ${$skillinfo [$wep_kind]};
374  if ($club==18){
375  $wep_skill=round(${$skillinfo [$wep_kind]}*0.7+($wp+$wk+$wc+$wg+$wd+$wf)*0.3);
376  }else{
377  $wep_skill=${$skillinfo [$wep_kind]};
378  }
379  if($skdr){
380  $wep_skill=sqrt($wep_skill);
381  }
382  if ($watt==-1){
383  if ($wep_kind == 'N') {
384  $watt = round ($wep_skill*2/3);
385  } else {
386  $watt = $wepe * 2;
387  }
388  }
389 
390  $hitrate = get_hitrate ( $wep_kind, $wep_skill, $club, $inf );
391 
392 
393  $hitrate *= get_clubskill_bonus_hitrate($club,$skills,'',$w_club,$w_skills,'w_');
394 
395  $damage_p = get_damage_p ( $rage, $att_key, 0, '你' , $club, $message);
396  $hit_time = get_hit_time ( $att_key, $wep_skill, $hitrate, $wep_kind, $weps, $infobbs [$wep_kind] * get_clubskill_bonus_imfrate($club,$skills,'',$w_club,$w_skills,'w_'), get_clubskill_bonus_imftime($club,$skills,'',$w_club,$w_skills,'w_'), $wepimprate [$wep_kind] * get_clubskill_bonus_imprate($club,$skills,'',$w_club,$w_skills,'w_'), $is_wpg, get_clubskill_bonus_hitrate($club,$skills,'',$w_club,$w_skills,'w_'));
397  if ($hit_time [1] > 0) {
398  if(strpos($att_key,'R')!==false){//随机伤害无视一切伤害计算
399  $maxdmg = $w_mhp > $wepe ? $wepe : $w_mhp;
400  $damage = rand(1,$maxdmg);
401  $log .= "武器随机造成了<span class=\"red\">$damage</span>点伤害!<br>";
402  }else{
403  $gender_dmg_p = check_gender ( '你', $w_name, $gd, $w_gd, $att_key );
404  if ($gender_dmg_p == 0) {
405  $damage = 1;
406  } else {
407  $w_active = 1 - $active;
408  $attack = $att + $watt;
409  $defend = checkdef($w_def , $w_arbe + $w_arhe + $w_arae + $w_arfe , $att_key, 1);
410 
411 
412 
413  $damage = get_original_dmg ( '', 'w_', $attack, $defend, $wep_skill, $wep_kind );
414 
415  if ($wep_kind == 'F') {
416  if($sldr){
417  $log.="<span class=\"red\">由于灵魂抽取的作用,灵系武器伤害大幅降低了!</span><br>";
418  }else{
419  $damage = round ( ($wepe + $damage) * get_WF_p ( '', $club, $wepe) ); //get_spell_factor ( 0, $club, $att_key, $sp, $wepe ) );
420  }
421 
422  }
423  if ($wep_kind == 'J') {
424  $adddamage=$w_mhp/3;
425  if ($adddamage>20000) {$adddamage=10000;}
426  $damage += round($wepe*2/3+$adddamage);
427  }
428  checkarb ( $damage, $wep_kind, $att_key, $w_def_key ,1);
429  $damage *= $damage_p;
430 
431  $damage = $damage > 1 ? round ( $damage ) : 1;
432  $damage *= $gender_dmg_p;
433  }
434  if ($w_wepk=='WJ'){
435  $log.="<span class=\"red\">由于{$w_name}手中的武器过于笨重,受到的伤害大增!真是大快人心啊!</span><br>";
436  $damage+=round($damage*0.5);
437  }
438 
439 
440 
441  if ($hit_time [1] > 1) {
442  $d_temp = $damage;
443  if ($hit_time [1] == 2) {
444  $dmg_p = 2;
445  } elseif ($hit_time [1] == 3) {
446  $dmg_p = 2.8;
447  } else {
448  $dmg_p = 2.8 + 0.6 * ($hit_time [1] - 3);
449  }
450  //$dmg_p = $hit_time[1] - ($hit_time[1]-1)*0.2;
451  $damage = round ( $damage * $dmg_p );
452  $log .= "造成{$d_temp}×{$dmg_p}=<span class=\"red\">$damage</span>点伤害!<br>";
453  } else {
454  $log .= "造成<span class=\"red\">$damage</span>点伤害!<br>";
455  }
456  $pdamage = $damage;
457  $damage += get_ex_dmg ( $w_name, 0, $club, $w_inf, $att_key, $wep_kind, $wepe, $wep_skill, $w_def_key );
458  $damage = checkdmgdef($damage, $att_key,$w_def_key,1);
459  //好人卡特别活动
460  if($w_type == 0){
461  $gm = ceil(count_good_man_card(0)*rand(80,120)/100);
462  if($gm){
463  $log .= "在{$w_name}身上的<span class=\"yellow\">好人卡</span>的作用下,{$w_name}受到的伤害增加了<span class=\"red\">$gm</span>点!<br>";
464  $damage += $gm;
465  }
466  }
467  $bonus_dmg = get_clubskill_bonus_dmg_rate($club,$skills,$w_club,$w_skills)*100;
468  if($bonus_dmg < 100){
469  $log.="<span class=\"yellow\">由于技能效果的作用,伤害下降至".$bonus_dmg."%!</span><br>";
470  $damage = round($damage * $bonus_dmg / 100);
471  }
472  $rpdmg=get_clubskill_bonus_dmg_val($club,$skills,$rp,$w_rp);
473  if($rpdmg > 0){
474  $log .= "<span class=\"yellow\">由于技能的影响,对方受到了<span class=\"red\">$rpdmg</span>点额外伤害。</span><br>";
475  $damage += $rpdmg;
476  }
477 
478  if($pdamage != $damage){
479  $log .= "<span class=\"yellow\">造成的总伤害:<span class=\"red\">$damage</span>。</span><br>";
480  }
481  }
482 
483  checkdmg ( $name, $w_name, $damage );
484 
485  get_dmg_punish ( '你', $damage, $hp, $att_key );
486 
487  get_inf ( $w_name, $hit_time [2], $wep_kind);
488 
489  check_KP_wep ( '你', $hit_time [3], $wep, $wepk, $wepe, $weps, $wepsk );
490 
491  exprgup ( $lvl, $w_lvl, $exp, 1, $w_rage );
492 
493  } else {
494  $damage = 0;
495  $log .= "但是没有击中!<br>";
496  }
497  check_GCDF_wep ( '你', $hit_time [0], $wep, $wep_kind, $wepk, $wepe, $weps, $wepsk );
498 
499  addnoise ( $wep_kind, $wepsk, $now, $pls, $pid, $w_pid, $wep_kind );
500  if($club == 10){
501  $add_skill +=2;
502  }else{
503  $add_skill +=1;
504  }
505  return $damage;
506 }
507 
508 function defend($w_wep_kind = 'N', $active = 0) {
510  global $w_name, $w_lvl, $w_gd, $w_pid, $pls, $w_hp, $w_sp, $w_rage, $w_exp, $w_club, $w_att, $w_inf;
511  global $w_wep, $w_wepk, $w_wepe, $w_weps, $w_wepsk;
512  global $arbe, $arbsk, $arhe, $arae, $arfe,$wepk;
513  global $w_artk, $w_arhsk, $w_arbsk, $w_arask, $w_arfsk, $w_artsk;
514  global $hp, $rage, $lvl, $pid, $gd, $name, $inf, $att, $def, $club;
515  global $wepsk, $arhsk, $arask, $arfsk, $artsk, $artk;
516  global $w_type, $w_sNo, $w_killnum,$mhp;
517  global $w_wp,$w_wk,$w_wc,$w_wg,$w_wf,$w_wd,$w_skills,$skills,$skillpoint,$w_skillpoint,$w_rp;
518  include_once GAME_ROOT.'./include/game/clubskills.func.php';
519  //npc_changewep();
520  $watt=-1;
521  $w_wep_temp = $w_wep;
522  $is_wpg = false;
523  if (((strpos ( $w_wepk, 'G' ) == 1)||(strpos($w_wepk,'J')==1)) && ($w_wep_kind == 'P')) {
524  $watt = round ( $w_wepe / 5 );
525  $is_wpg = true;
526  }
527 
528  $log .= "{$w_name}使用{$w_wep}<span class=\"yellow\">$attinfo[$w_wep_kind]</span>你!<br>";
529 
530  $w_att_key = getatkkey ( $w_wepsk, $w_arhsk, $w_arbsk, $w_arask, $w_arfsk, $w_artsk, $w_artk, $is_wpg );
531  $def_key = getdefkey ( $wepsk, $arhsk, $arbsk, $arask, $arfsk, $artsk, $artk );
532  $mdr = $skdr = $sldr = false;
533  if(strpos($w_att_key.$def_key,'-')!==false){$mdr = true;}//精抽
534  if(strpos($w_att_key.$def_key,'*')!==false){$sldr = true;}//魂抽
535  if(strpos($w_att_key.$def_key,'+')!==false){$skdr = true;}//技抽
536  if($mdr || $sldr || $skdr){
537  list($wsk,$hsk,$bsk,$ask,$fsk,$tsk,$tk)=Array($wepsk, $arhsk, $arbsk, $arask, $arfsk, $artsk, $artk);
538  list($wwsk,$whsk,$wbsk,$wask,$wfsk,$wtsk,$wtk)=Array( $w_wepsk, $w_arhsk, $w_arbsk, $w_arask, $w_arfsk, $w_artsk, $w_artk);
539  if($mdr){
540  $log .= "<span class=\"yellow\">精神抽取使双方的防具属性全部失效!</span><br>";
541  $hsk = $bsk = $ask = $fsk = $whsk = $wbsk = $wask = $wfsk = '';
542  }
543  if($sldr){
544  $log .= "<span class=\"yellow\">灵魂抽取使双方的武器和饰物属性全部失效!</span><br>";
545  $wsk = $tsk = $tk = $wwsk = $wtsk = $wtk = '';
546  }
547  if($skdr){
548  $log .= "<span class=\"yellow\">技能抽取使双方的武器熟练度在战斗中大幅下降!</span><br>";
549  //$bsk = $ask = $fsk = $wbsk = $wask = $wfsk = '';
550  }
551  $w_att_key = getatkkey ( $wwsk,$whsk,$wbsk,$wask,$wfsk,$wtsk,$wtk, $is_wpg );
552  $def_key = getdefkey ( $wsk,$hsk,$bsk,$ask,$fsk,$tsk,$tk );
553  }
554 
555 
556 
557 
558  if ((strpos($w_att_key,"X")!==false)&&($w_type)&&(!$type)&&(rand(1,100)>90)){
559  if ($w_wep=='燕返262'){
560  $log.="<img src=\"img/other/262.png\"><br>";
561  }
562  $damage=$mhp;
563  $log .= "造成<span class=\"red\">$damage</span>点伤害!<br>";
564  checkdmg ( $w_name, $name, $damage );
565  $hp = 0;
566  $w_killnum ++;
567  include_once GAME_ROOT . './include/state.func.php';
568  $killmsg = death ( $w_wep_kind, $w_name, $w_type, $w_wep_temp );
569  $log .= npc_chat ( $w_type,$w_name, 'kill' );
570  return $damage;
571  }
572 
573  global ${'w_' . $skillinfo [$w_wep_kind]};
574  $w_add_skill = & ${'w_' . $skillinfo [$w_wep_kind]};
575  if ($w_club==18){
576  $w_wep_skill=round(${'w_' .$skillinfo [$w_wep_kind]}*0.5+($w_wp+$w_wk+$w_wc+$w_wg+$w_wd+$w_wf)*0.5);
577  }else{
578  $w_wep_skill=${'w_' .$skillinfo [$w_wep_kind]};
579  }
580  if($skdr){
581  $w_wep_skill=sqrt($w_wep_skill);
582  }
583 
584  if ($watt==-1){
585  if ($w_wep_kind == 'N') {
586  global $w_wp;
587  $watt = round ($w_wep_skill*2/3);
588  } else {
589  $watt = $w_wepe * 2;
590  }
591  }
592 
593 
594 
595  $hitrate = get_hitrate ( $w_wep_kind, $w_wep_skill, $w_club, $w_inf );
596 
597  $hitrate *= get_clubskill_bonus_hitrate($w_club,$w_skills,'w_',$club,$skills,'');
598  $damage_p = get_damage_p ( $w_rage, $w_att_key, $w_type, $w_name , $w_club);
599  $hit_time = get_hit_time ( $w_att_key, $w_wep_skill, $hitrate, $w_wep_kind, $w_weps, $infobbs [$w_wep_kind] * get_clubskill_bonus_imfrate($w_club,$w_skills,'w_',$club,$skills,''), get_clubskill_bonus_imftime($w_club,$w_skills,'w_',$club,$skills,''), $wepimprate[$w_wep_kind] * get_clubskill_bonus_imprate($w_club,$w_skills,'w_',$club,$skills,''), $is_wpg, get_clubskill_bonus_hitrate($w_club,$w_skills,'w_',$club,$skills,'') );
600 
601  if ($hit_time [1] > 0) {
602  if(strpos($w_att_key,'R')!==false){//随机伤害无视一切伤害计算
603  $maxdmg = $mhp > $wepe ? $wepe : $mhp;
604  $damage = rand(1,$maxdmg);
605  $log .= "武器随机造成了<span class=\"red\">$damage</span>点伤害!<br>";
606  }else{
607  $gender_dmg_p = check_gender ( $w_name, '你', $w_gd, $gd, $w_att_key );
608  if ($gender_dmg_p == 0) {
609  $damage = 1;
610  } else {
611  global $w_att;
612  $w_active = 1 - $active;
613  $attack = $w_att + $watt;
614  $defend = checkdef($def , $arbe + $arhe + $arae + $arfe,$w_att_key);
615 
616 
617  $damage = get_original_dmg ( 'w_', '', $attack, $defend, $w_wep_skill, $w_wep_kind );
618 
619  if ($w_wep_kind == 'F') {
620  if($sldr){
621  $log.="<span class=\"red\">由于灵魂抽取的作用,灵系武器伤害大幅降低了!</span><br>";
622  }else{
623  $damage = round ( ($w_wepe + $damage) * get_WF_p ( 'w_', $w_club, $w_wepe) ); //get_spell_factor ( 1, $w_club, $w_att_key, $w_sp, $w_wepe ) );
624  }
625 
626 
627  }
628  if ($w_wep_kind == 'J') {
629  $adddamage=$mhp/3;
630  if ($adddamage>20000) {$adddamage=10000;}
631  $damage +=round($w_wepe*2/3+$adddamage);
632  }
633  checkarb ( $damage, $w_wep_kind, $w_att_key, $def_key );
634  $damage *= $damage_p;
635 
636  $damage = $damage > 1 ? round ( $damage ) : 1;
637  $damage *= $gender_dmg_p;
638  }
639  if ($wepk=='WJ'){
640  $log.="<span class=\"red\">由于你手中的武器过于笨重,受到的伤害大增!真是大快人心啊!</span><br>";
641  $damage+=round($damage*0.5);
642  }
643 
644 
645 
646  if ($hit_time [1] > 1) {
647  $d_temp = $damage;
648  if ($hit_time [1] == 2) {
649  $dmg_p = 2;
650  } elseif ($hit_time [1] == 3) {
651  $dmg_p = 2.8;
652  } else {
653  $dmg_p = 2.8 + 0.6 * ($hit_time [1] - 3);
654  }
655  //$dmg_p = $hit_time[1] - ($hit_time[1]-1)*0.2;
656  $damage = round ( $damage * $dmg_p );
657  $log .= "造成{$d_temp}×{$dmg_p}=<span class=\"red\">$damage</span>点伤害!<br>";
658  } else {
659  $log .= "造成<span class=\"red\">$damage</span>点伤害!<br>";
660  }
661  $pdamage = $damage;
662  $damage += get_ex_dmg ( "你", 1, $w_club, $inf, $w_att_key, $w_wep_kind, $w_wepe, $w_wep_skill, $def_key );
663  $damage = checkdmgdef($damage, $w_att_key, $def_key, 0);
664  //好人卡特别活动
665  $gm = ceil(count_good_man_card(1)*rand(80,120)/100);
666  if($gm){
667  $log .= "在你身上的<span class=\"yellow\">好人卡</span>的作用下,你受到的伤害增加了<span class=\"red\">$gm</span>点!<br>";
668  $damage += $gm;
669  }
670  $bonus_dmg = get_clubskill_bonus_dmg_rate($w_club,$w_skills,$club,$skills)*100;
671  if($bonus_dmg < 100){
672  $log.="<span class=\"yellow\">由于技能效果的作用,伤害下降至".$bonus_dmg."%!</span><br>";
673  $damage = round($damage * $bonus_dmg / 100);
674  }
675  if($damage != $pdamage){
676  $log .= "<span class=\"yellow\">造成的总伤害:<span class=\"red\">$damage</span>。</span><br>";
677  }
678  }
679 
680  checkdmg ( $w_name, $name, $damage );
681 
682  get_dmg_punish ( $w_name, $damage, $w_hp, $w_att_key );
683 
684  get_inf ( '你', $hit_time [2], $w_wep_kind);
685 
686  check_KP_wep ( $w_name, $hit_time [3], $w_wep, $w_wepk, $w_wepe, $w_weps, $w_wepsk );
687 
688  exprgup ( $w_lvl, $lvl, $w_exp, 0, $rage );
689 
690  $hp -= $damage;
691 
692  if ($hp <= 0) {
693  $tmp_club=$club;
694  $hp = 0;
695  $w_killnum ++;
696  $rpup = 20;
697  if($w_club == 19){
698  $rpdec = 30;
699  $rpdec += get_clubskill_rp_dec($w_club,$w_skills);
700  $w_rp += round($rpup*(100-$rpdec)/100);
701  }
702  else{
703  $w_rp += $rpup;
704  }
705 
706  include_once GAME_ROOT . './include/state.func.php';
707  $killmsg = death ( $w_wep_kind, $w_name, $w_type, $w_wep_temp );
708  $log .= npc_chat ( $w_type,$w_name, 'kill' );
709  if ($tmp_club==99)
710  $log .= '<span class="yellow">由于你及时按了BOMB键,你原地满血复活了!</span><br>';
711  }
712  } else {
713  $damage = 0;
714  $log .= "但是没有击中!<br>";
715  }
716 
717  check_GCDF_wep ( $w_name, $hit_time [0], $w_wep, $w_wep_kind, $w_wepk, $w_wepe, $w_weps, $w_wepsk );
718 
719  addnoise ( $w_wep_kind, $w_wepsk, $now, $pls, $w_pid, $pid, $w_wep_kind );
720 
721  if($w_club == 10){
722  $w_add_skill +=2;
723  }else{
724  $w_add_skill +=1;
725  }
726 
727  return $damage;
728 }
729 
730 function get_original_dmg($w1, $w2, $att, $def, $ws, $wp_kind) {
731  global $skill_dmg, $dmg_fluc, $weather, $pls;
732  global ${$w1 . 'pose'}, ${$w1 . 'tactic'}, ${$w1 . 'club'}, ${$w1 . 'inf'}, ${$w1 . 'active'}, ${$w2 . 'pose'}, ${$w2 . 'tactic'}, ${$w2 . 'club'}, ${$w2 . 'inf'}, ${$w2 . 'active'},${$w2 . 'skills'},${$w1 . 'skills'};
733  include_once GAME_ROOT.'./include/game/clubskills.func.php';
734  get_clubskill_bonus(${$w1 . 'club'},${$w1 . 'skills'},$w1,${$w2 . 'club'},${$w2 . 'skills'},$w2,$att1,$def1);
735  $att+=$att1; $def+=$def1;
736  $attack_p = get_attack_p ( $weather, $pls, ${$w1 . 'pose'}, ${$w1 . 'tactic'}, ${$w1 . 'club'}, ${$w1 . 'inf'}, ${$w1 . 'active'} );
737  $att_pow = $att * $attack_p;
738  $defend_p = get_defend_p ( $weather, $pls, ${$w2 . 'pose'}, ${$w2 . 'tactic'}, ${$w2 . 'club'}, ${$w2 . 'inf'}, ${$w2 . 'active'} );
739  $def_pow = $def * $defend_p;
740  get_clubskill_bonus_p(${$w1 . 'club'},${$w1 . 'skills'},$w1,${$w2 . 'club'},${$w2 . 'skills'},$w2,$attfac,$deffac);
741  $att_pow *= $attfac;
742  $def_pow *= $deffac;
743  if($def_pow <= 0){$def_pow = 0.01;}
744  $damage = ($att_pow / $def_pow) * $ws * $skill_dmg [$wp_kind];
745 
746  $dfluc = $dmg_fluc [$wp_kind];
747  $dfluc += get_clubskill_bonus_fluc(${$w1 . 'club'},${$w1 . 'skills'},$w1,${$w2 . 'club'},${$w2 . 'skills'},$w2);
748 
749  $dmg_factor = (100 + rand ( - $dfluc, $dfluc )) / 100;
750 
751  $damage = round ( $damage * $dmg_factor * rand ( 4, 10 ) / 10 );
752  return $damage;
753 }
754 
755 function get_damage_p(&$rg, $atkcdt, $type, $nm,$cl = 0, $msg = '' ) {
756  $cri_dice = rand ( 0, 99 );
757  if ($cl == 9) {
758  $rg_m = 50;
759  $dmg_p = 2;
760  if (!empty($msg) || $rg >= 255) {
761  $max_dice = 100;
762  } elseif ($type != 0) {
763  $max_dice = 40;
764  } else {
765  $max_dice = 0;
766  }
767  $cri_word = '发动必杀技';
768  } else {
769  $rg_m = 30;
770  $dmg_p = 1.5;
771  if ($rg >= 255) {
772  $max_dice = 100;
773  } else {
774  $max_dice = 30;
775  }
776  $cri_word = '使出重击';
777  }
778 
779  if (strpos ( $atkcdt, "c" ) !== false) {
780  $rg_m = $cl == 9 ? 20 : 10;
781  if ($max_dice != 0) {
782  $max_dice += 30;
783  }
784  }
785  if ($cri_dice <= $max_dice && $rg >= $rg_m) {
786  global $log;
787 
788  $log .= npc_chat ( $type,$nm, 'critical' );
789 
790  if ($nm == '你') {
791  $log .= "{$nm}消耗<span class=\"yellow\">$rg_m</span>点怒气,<span class=\"red\">{$cri_word}</span>!";
792  } else {
793  $log .= "{$nm}<span class=\"red\">{$cri_word}</span>!";
794  }
795  $rg -= $rg_m;
796  return $dmg_p;
797  } else {
798  return 1;
799  }
800  /*if ($cl == 9) {
801  if ($sd == 0) {
802  if ((! empty ( $msg )) && ($rg >= $rg_m) || $rg == 255) {
803  $log .= "你消耗<span class=\"yellow\">$rg_m</span>点怒气,<span class=\"red\">发动必杀技</span>!";
804  $damage_p = 2;
805  $rg -= $rg_m;
806  }
807  } else {
808  if (($cri_dice < $max_dice && ($rg >= $rg_m)) || $rg == 255) {
809  global $w_type;
810  if ($w_type == 1) {
811  $log .= npc_chat ( $w_type, 'critical' );
812  }
813  $log .= "<span class=\"red\">发动必杀技</span>!";
814  $damage_p = 2;
815  $rg -= $rg_m;
816  }
817  }
818  } elseif ($cri_dice < $max_dice || $rg == 255) {
819  if (($rg >= $rg_m) && ($sk >= 20) &&($lv > 3)) {
820  if ($sd == 0) {
821  $log .= "你消耗<span class=\"yellow\">$rg_m</span>点怒气,使出";
822  } else {
823  global $w_type;
824  if ($w_type == 1) {
825  $log .= npc_chat ( $w_type, 'critical' );
826  }
827  }
828  $log .= "<span class=\"red\">重击</span>!";
829  $damage_p = 1.5;
830  $rg -= $rg_m;
831  }
832  }
833  return $damage_p;*/
834 }
835 
836 function checkdmg($p1, $p2, $d) {
837  if (($d >= 100) && ($d < 150)) {
838  $words = "{$p1}对{$p2}施加了一定程度的伤害。(100-150)";
839  } elseif (($d >= 150) && ($d < 200)) {
840  $words = "{$p1}拿了什么神兵?{$p2}所受的损伤已经不可忽略了。(150-200)";
841  } elseif (($d >= 200) && ($d < 250)) {
842  $words = "{$p1}简直不是人!{$p2}只能狼狈招架。(200-250)";
843  } elseif (($d >= 250) && ($d < 300)) {
844  $words = "{$p1}发出会心一击!{$p2}瞬间损失了大量生命!(250-300)";
845  } elseif (($d >= 300) && ($d < 400)) {
846  $words = "{$p1}使出浑身解数奋力一击!{$p2}想必凶多吉少!(300-400)";
847  } elseif (($d >= 400) && ($d < 500)) {
848  $words = "{$p1}使出武器中内藏的力量!可怜的{$p2}已经承受不住凶残的攻击了!(400-500)";
849  } elseif (($d >= 500) && ($d < 600)) {
850  $words = "{$p1}眼色一变使出绝招!{$p2}无法抵挡,只能任人宰割!(500-600)";
851  } elseif (($d >= 600) && ($d < 750)) {
852  $words = "{$p1}手中的武器闪耀出七彩光芒!{$p2}的身躯几乎融化在光芒中!(600-750)";
853  } elseif (($d >= 750) && ($d < 1000)) {
854  $words = "{$p1}受到天神的加护,打出惊天动地的一击!{$p2}此刻已不成人形!(750-1000)";
855  } elseif (($d >= 1000) && ($d < 5000)) {
856  $words = "{$p1}燃烧自己的生命得到了不可思议的力量!{$p2},你还活着吗?(1000-5000)";
857  } elseif (($d >= 5000) && ($d < 10000)) {
858  $words = "{$p1}超越自己的极限爆发出了震天动地的力量!受此神力摧残的{$p2}化作了一颗流星!(5000-10000)";
859  } elseif (($d >= 10000) && ($d < 50000)) {
860  $words = "{$p1}运转百万匹周天,吐气扬声,一道霸气的光束直逼{$p2},后者的身躯瞬间被力量的洪流所吞没!(10000-50000)";
861  } elseif (($d >= 50000) && ($d < 200000)) {
862  $words = "{$p1}已然超越了人类的极限!【{$d}】点的伤害——疾风怒涛般的攻击令大地崩塌,而{$p2}几乎化为齑粉!";
863  } elseif (($d >= 200000) && ($d < 500000)) {
864  $words = "鬼哭神嚎!风暴既逝,{$p1}仍然屹立在战场上,而受到了【{$d}】点伤害的{$p2}想必已化为宇宙的尘埃了!";
865  } elseif ( $d >= 500000) {
866  $words = "残虐的攻击已经无法用言语形容!将{$p2}击飞出【{$d}】点伤害的英雄——{$p1}!让我们记住他的名字吧!";
867  } else {
868  $words = '';
869  }
870  if ($words) {
871  addnews ( 0, 'damage', $words );
872  }
873  return;
874 }
875 
876 function checkdef($def, $ardef, $aky, $active = 0){
877  global $specialrate,$log,$w_name;
878  $defend = $def + $ardef;
879  if(strpos($aky,'N')!==false){
880  $Ndice = rand(0,99);
881  if($Ndice < $specialrate['N']){
882  $defend = $def + round($ardef / 2);
883  $log .= $active ? "<span class=\"yellow\">你的攻击隔着{$w_name}的防具造成了伤害!</span><br>" : "<span class=\"yellow\">{$w_name}的攻击隔着你的防具造成了伤害!</span><br>";
884  }
885  }
886  return $defend;
887 }
888 
889 function checkarb(&$dmg, $w, $aky, $dky, $active = 0) {
890  global $log,$specialrate,$w_name;
891  $dmginv = false;
892  if (strpos ( $aky, 'n' ) !== false && (strpos ( $dky, 'B' ) !== false || strpos ( $dky, $w ) !== false)) {
893  $dice = rand ( 0, 99 );
894  if ($dice < $specialrate['n']) {
895  $log .= $active ? "<span class=\"yellow\">你的攻击贯穿了{$w_name}的防具!</span><br>" : "<span class=\"yellow\">{$w_name}的攻击贯穿了你的防具!</span><br>";
896  return;
897  }
898  }
899  if (strpos ( $dky, 'B' ) !== false) {
900  $dice = rand ( 0, 99 );
901  if ($dice < $specialrate['B']) {
902  $dmg = 1;
903  $log .= $active ? "<span class=\"yellow\">你的攻击完全被{$w_name}的装备吸收了!</span><br>" : "<span class=\"yellow\">{$w_name}的攻击完全被你的装备吸收了!</span><br>";
904  $dmginv = true;
905  }else{
906  $log .= $active ? "纳尼?你的装备使攻击无效化的属性竟然失效了!<br>" : "纳尼?{$w_name}的装备使攻击无效化的属性竟然失效了!<br>";
907  }
908  }
909  if (strpos ( $dky, $w ) !== false && !$dmginv) {
910  $dice = rand ( 0, 99 );
911  if ($dice < 90) {
912  $dmg /= 2;
913  $log .= $active ? "<span class=\"yellow\">{$w_name}的装备使你的攻击伤害减半了!</span><br>" : "<span class=\"yellow\">你的装备使{$w_name}的攻击伤害减半了!</span><br>";
914 
915  }else{
916  $log .= $active ? "{$w_name}的装备没能发挥减半伤害的效果!<br>" : "你的装备没能发挥减半伤害的效果!<br>";
917  }
918  }
919  return;
920 }
921 
922 function checkdmgdef($dmg, $aky, $dky, $active) {
923  global $log, $name, $w_name;
924  //if (strpos ( $aky, 'h' ) !== false){
925  // if($active){$nm = '你';}
926  // else{$nm = $w_name;}
927  // $flag = 1;
928  if (strpos ( $dky, 'h' ) !== false){
929  if($active){$nm = $w_name;}
930  else{$nm = '你';}
931  $flag = 1;
932  }else{$flag = 0;}
933  if ($flag) {
934  $dice = rand ( 0, 99 );
935  if($dmg > 1950 + $dice){
936  if ($dice < 90) {
937  $dmg = 1950 + $dice;
938  $log .= "在{$nm}的装备的作用下,攻击伤害被限制了!<br>";
939 
940  }else{
941  $log .= "{$nm}的装备没能发挥限制攻击伤害的效果!<br>";
942  }
943  }
944  }
945  return $dmg;
946 }
947 
948 function checkdmgreflex(&$dmg, $ar) {
949  global $log;
950  if (strpos ( $ar, 'B' ) !== false) {
951  $dice = rand ( 0, 99 );
952  if ($dice < 90) {
953  $dmg = 1;
954  $log .= "<span class=\"red\">攻击的力量被完全吸收了!</span>";
955  }else{
956  $log .= "防具使攻击无效化的效果失败了!";
957  }
958  }
959  return;
960 }
961 
962 function getatkkey($w, $ah, $ab, $aa, $af, $at, $atkind, $is_wpg) {
963  global $ex_attack;
964  $atkcdt = '';
965  $eqpkey = $w . $ah . $ab . $aa . $af . $at . substr ( $atkind, 1, 1 );
966  foreach(Array('c','l','g','H','h','N','n','X','L','-','*','+') as $value){
967  if (strpos ( $eqpkey, $value ) !== false) {
968  $atkcdt .= '_'.$value;
969  }
970  }
971  if(!$is_wpg){
972  foreach(Array('r','R') as $value){
973  if (strpos ( $w, $value ) !== false) {
974  $atkcdt .= '_'.$value;
975  }
976  }
977  }
978  foreach ($ex_attack as $value) {
979  if (strpos ( $w, $value ) !== false && ! $is_wpg) {
980  $atkcdt .= '_'.$value;
981  }
982  }
983 
984  return $atkcdt;
985 }
986 
987 function get_hit_time($ky, $ws, $htr, $wk, $lmt, $infr, $inft, $wimpr, $is_wpg = false, $hitratebonus) {
988  global $log, $nosta;
989  if ($lmt == $nosta) {
990  $wimpr *= 2;
991  if ($is_wpg) {
992  $wimpr *= 4;
993  }
994  }
995  if (strpos ( $ky, 'r' ) !== false) {
996  $atk_t = $ws >= 800 ? 6 : 2 + floor ( $ws / 200 );
997  if ($wk == 'C' || $wk == 'D' || $wk == 'F') {
998  if ($lmt == $nosta) {
999  $lmt = 99;
1000  }
1001  if ($atk_t > $lmt) {
1002  $atk_t = $lmt;
1003  }
1004  }
1005  if ($wk == 'G' && $atk_t > $lmt) {
1006  $atk_t = $lmt;
1007  }
1008 
1009  $ht_t = 0;
1010  $inf_t = 0;
1011  $wimp_t = 0;
1012  //if($htr>100){$htr=100;}
1013  for($i = 1; $i <= $atk_t; $i ++) {
1014  $dice = rand ( 0, 99 );
1015  $dice2 = rand ( 0, 99 );
1016  $dice3 = rand ( 0, 99 );
1017  if ($dice < $htr) {
1018  $ht_t ++;
1019  if ($dice2 < $infr) {
1020  $inf_t += $inft;
1021  }
1022  if ($dice3 < $wimpr) {
1023  $wimp_t ++;
1024  }
1025  }
1026  $htr *= 0.8 * $hitratebonus;
1027  $infr *= 0.9;
1028  $wimpr *= $wimpr <= 0 ? 1 : 1.2;
1029  }
1030  } else {
1031  $atk_t = 1;
1032  $ht_t = 0;
1033  $inf_t = 0;
1034  $wimp_t = 0;
1035  $dice = rand ( 0, 99 );
1036  $dice2 = rand ( 0, 99 );
1037  $dice3 = rand ( 0, 99 );
1038  if ($dice < $htr) {
1039  $ht_t = 1;
1040  if ($dice2 < $infr) {
1041  $inf_t += $inft;
1042  }
1043  if ($dice3 < $wimpr) {
1044  $wimp_t = 1;
1045  }
1046  }
1047  }
1048  if ($atk_t > 1 && $ht_t > 0) {
1049  $log .= "{$atk_t}次连续攻击命中<span class=\"yellow\">{$ht_t}</span>次!";
1050  }
1051  return Array ($atk_t, $ht_t, $inf_t, $wimp_t );
1052 }
1053 
1054 function getdefkey($w, $ah, $ab, $aa, $af, $at, $atkind) {
1055  global $ex_dmg_def;
1056  $defcdt = '';
1057  $eqpkey = $w . $ah . $ab . $aa . $af . $at . substr ( $atkind, 1, 1 );
1058  foreach(Array('B','b','h','R','-','*','+') as $value){
1059  if (strpos ( $eqpkey, $value ) !== false) {
1060  $defcdt .= '_'.$value;
1061  }
1062  }
1063  if (strpos ( $eqpkey, 'A' ) !== false) {
1064  $defcdt .= '_P_K_G_C_D_F_J';
1065  } else {
1066  foreach(Array('P','K','G','C','D','F') as $value){
1067  if (strpos ( $eqpkey, $value ) !== false) {
1068  $defcdt .= '_'.$value;
1069  }
1070  }
1071  if (strpos($eqpkey,'G')!== false){
1072  $defcdt.='_J';
1073  }
1074  }
1075  foreach ($ex_dmg_def as $value) {
1076  if (strpos ( $eqpkey, $value ) !== false || strpos ( $eqpkey, 'a' ) !== false) {
1077  $defcdt .= '_'.$value;
1078  }
1079  }
1080  return $defcdt;
1081 }
1082 
1083 function get_ex_dmg($nm, $sd, $clb, &$inf, $ky, $wk, $we, $ws, $dky) {
1084  if ($ky) {
1087  $ex_final_dmg = 0;
1088  $exinv = false;
1089  $ex_list = array();
1090  foreach ( $ex_attack as $ex_dmg_sign ) {
1091  if (strpos ( $ky, $ex_dmg_sign ) !== false){
1092  $ex_list[] = $ex_dmg_sign;
1093  }
1094  }
1095  if (strpos ( $dky, 'b' ) !== false && !empty($ex_list)){
1096  $dice = rand ( 0, 99);
1097  if ($dice < $specialrate['b']) {//几率4%
1098  $ex_final_dmg = 1;$exnum = 0;
1099  foreach ( $ex_attack as $ex_dmg_sign ) {
1100  if (strpos ( $ky, $ex_dmg_sign ) !== false) {
1101  $exnum ++;
1102  }
1103  }
1104  $log .= "<span class=\"red\">属性攻击的力量完全被防具吸收了!</span>只造成了<span class=\"red\">{$exnum}</span>点伤害!<br>";
1105  $exinv = true;
1106  }else{
1107  $log .= "纳尼?防具使属性攻击无效化的属性竟然失效了!<br>";
1108  }
1109  }
1110  if(!$exinv){
1111  foreach ( $ex_list as $ex_dmg_sign ) {
1112  $dmgnm = $exdmgname [$ex_dmg_sign];
1113  $def = $ex_dmg_def [$ex_dmg_sign];
1114  $bdmg = $ex_base_dmg [$ex_dmg_sign];
1115  $mdmg = $ex_max_dmg [$ex_dmg_sign];
1116  $wdmg = $ex_wep_dmg [$ex_dmg_sign];
1117  $sdmg = $ex_skill_dmg [$ex_dmg_sign];
1118  $fluc = $ex_dmg_fluc [$ex_dmg_sign];
1119  if (in_array($ex_dmg_sign,array_keys($ex_inf))) {
1120  $dmginf = $exdmginf [$ex_inf[$ex_dmg_sign]];
1121  $ex_inf_sign = $ex_inf [$ex_dmg_sign];
1122  $infr = $ex_inf_r [$ex_inf_sign];
1123  $minfr = $ex_max_inf_r [$ex_inf_sign];
1124  $sinfr = $ex_skill_inf_r [$ex_inf_sign];
1125  $punish = $ex_inf_punish [$ex_dmg_sign];
1126  $e_htr = $ex_good_club [$ex_inf_sign] == $clb ? 20 : 0;
1127  } else {
1128  $ex_inf_sign = '';
1129  $punish = 1;
1130  $e_htr = 0;
1131  }
1132  $wk_dmg_p = $ex_good_wep [$ex_dmg_sign] == $wk ? 2 : 1;
1133  $e_dmg = $bdmg + $we/$wdmg + $ws/$sdmg;
1134  if(($mdmg>0)&&($wk!='H')){
1135  //$e_dmg = $e_dmg > $mdmg ? round($wk_dmg_p*$mdmg*rand(100 - $fluc, 100 + $fluc)/100) : round($wk_dmg_p*$e_dmg*rand(100 - $fluc, 100 + $fluc)/100);
1136  $e_dmg = round($wk_dmg_p*$mdmg*($e_dmg/($e_dmg+$mdmg/2))*rand(100 - $fluc, 100 + $fluc)/100);
1137  } else{
1138  $e_dmg = round($wk_dmg_p*$e_dmg*rand(100 - $fluc, 100 + $fluc)/100);
1139  }
1140  //$e_dmg += round ( ($we / ($we + $wdmg) + $ws / ($ws + $sdmg)) * rand ( 100 - $fluc, 100 + $fluc ) / 200 * $bdmg * $wk_dmg_p );
1141  $ex_def_dice = rand(0,99);
1142  if (strpos ( $dky, $def ) === false || $ex_def_dice > 90) {
1143  if(strpos ( $dky, $def ) !== false){
1144  $log .= "属性防御装备没能发挥应有的作用!";
1145  }
1146  //var_dump( $punish);
1147  if ($ex_inf_sign && strpos ( $inf, $ex_inf_sign ) !== false && $punish > 1) {
1148  $log .= "由于{$nm}已经{$dmginf},{$dmgnm}伤害倍增!";
1149  $e_dmg *= $punish;
1150  } elseif ($ex_inf_sign && strpos ( $inf, $ex_inf_sign ) !== false && $punish < 1) {
1151  $log .= "由于{$nm}已经{$dmginf},{$dmgnm}伤害减少!";
1152  $e_dmg *= $punish;
1153  } else {
1154  $e_htr += $infr + $ws * $sinfr;
1155  $e_htr = $e_htr > $minfr ? $minfr : $e_htr;
1156  }
1157  $e_dmg = round($e_dmg);
1158  $log .= "{$dmgnm}造成了<span class=\"red\">{$e_dmg}</span>点额外伤害!<br>";
1159  if (!empty($ex_inf_sign) && (strpos ( $inf, $ex_inf_sign ) === false)) {
1160  $dice = rand ( 0, 99 );
1161  if ($dice < $e_htr) {
1162  $inf .= $ex_inf_sign;
1163  if ($sd == 0) {
1164  global $w_combat_inf;
1165  $w_combat_inf .= $ex_inf_sign;
1166  }
1167  $log .= "并造成{$nm}{$dmginf}了!<br>";
1168  global $name,$w_name;
1169  if($nm == '你'){
1170  addnews($now,'inf',$w_name,$name,$ex_inf_sign);
1171  }else{
1172  addnews($now,'inf',$name,$w_name,$ex_inf_sign);
1173  }
1174  }
1175  }
1176  } else {
1177  $e_dmg = round ( $e_dmg / 2 );
1178  $log .= "{$dmgnm}被防御效果抵消了!造成了<span class=\"red\">{$e_dmg}</span>点额外伤害!<br>";
1179  }
1180 
1181 
1182  $ex_final_dmg += $e_dmg;
1183  }
1184  }
1185 
1186  return $ex_final_dmg;
1187  } else {
1188  return 0;
1189  }
1190  /*
1191  if (strpos ( $ky, 'p' ) !== false) {
1192  $ex_dmg_sign = 'p';
1193  if ($clb == 8) {
1194  $e_htr = 20;
1195  } else {
1196  $e_htr = 0;
1197  }
1198  }
1199  if (strpos ( $ky, 'u' ) !== false) {
1200  $ex_dmg_sign = 'u';
1201  $e_htr = 0;
1202  if ($wk == 'G') {
1203  //echo 'g';
1204  $wk_dmg_p = 2;
1205  }
1206  }
1207  if (strpos ( $ky, 'i' ) !== false) {
1208  $ex_dmg_sign = 'i';
1209  $e_htr = 0;
1210  }
1211  if (isset ( $ex_dmg_sign )) {
1212  $dmgnm = $exdmgname [$ex_dmg_sign];
1213  $dmginf = $exdmginf [$ex_dmg_sign];
1214  $def = $ex_dmg_def [$ex_dmg_sign];
1215  $bdmg = $ex_base_dmg [$ex_dmg_sign];
1216  $wdmg = $ex_wep_dmg [$ex_dmg_sign];
1217  $sdmg = $ex_skill_dmg [$ex_dmg_sign];
1218  $fluc = $ex_dmg_fluc [$ex_dmg_sign];
1219  $infr = $ex_inf_r [$ex_dmg_sign];
1220  $minfr = $ex_max_inf_r [$ex_dmg_sign];
1221  $sinfr = $ex_skill_inf_r [$ex_dmg_sign];
1222  $punish = $ex_inf_punish [$ex_dmg_sign];
1223  $e_dmg = 1 + round ( ($we / ($we + $wdmg) + $ws / ($ws + $sdmg)) * rand (100 - $fluc,100 + $fluc ) / 200 * $bdmg * $wk_dmg_p );
1224  if (strpos ( $dky, $def ) == false) {
1225  if (strpos ( $inf, $ex_dmg_sign ) !== false && $punish > 1) {
1226  $log .= "由于{$nm}已经{$dmginf},{$dmgnm}伤害倍增!";
1227  $e_htr = 0;
1228  } elseif (strpos ( $inf, $ex_dmg_sign ) !== false && $punish < 1) {
1229  $log .= "由于{$nm}已经{$dmginf},{$dmgnm}伤害减少!";
1230  $e_htr = 0;
1231  } else {
1232  $e_htr += $infr + $ws * $sinfr;
1233  $e_htr = $e_htr > $minfr ? $minfr : $e_htr;
1234  }
1235  $e_dmg = round ( $e_dmg * $punish );
1236  $log .= "{$dmgnm}造成了<span class=\"red\">{$e_dmg}</span>点额外伤害!<br>";
1237  $dice = rand ( 0, 99 );
1238  if ($dice < $e_htr) {
1239  $inf .= $ex_dmg_sign;
1240  if ($sd == 0) {
1241  global $w_combat_inf;
1242  $w_combat_inf .= $ex_dmg_sign;
1243  }
1244  $log .= "并造成{$nm}{$dmginf}了!<br>";
1245  }
1246  } else {
1247  $e_dmg = round ( $e_dmg / 2 );
1248  $log .= "{$dmgnm}被防御效果抵消了!造成了<span class=\"red\">{$e_dmg}</span>点额外伤害!<br>";
1249  }
1250  return $e_dmg;
1251  } else {
1252  return;
1253  }
1254 */
1255 }
1256 
1257 function get_WF_p($w, $clb, $we) {
1258  global $log, ${$w . 'sp'}, ${$w . 'skills'};
1259  if (! empty ( $w )) {
1260  $factor = 0.5;
1261  } else {
1262  $we = $we > 0 ? $we : 1;
1263  if ($clb == 9) {
1264  include_once GAME_ROOT.'./include/game/clubskills.func.php';
1265  $spd0 = round ( 0.2*get_clubskill_bonus_spd($clb,${$w . 'skills'})*$we);
1266  } else {
1267  $spd0 = round ( 0.25*$we);
1268  }
1269  if ($spd0 >= ${$w . 'sp'}) {
1270  $spd = ${$w . 'sp'} - 1;
1271  } else {
1272  $spd = $spd0;
1273  }
1274  $factor = 0.5 + $spd / $spd0 / 2;
1275  $f = round ( 100 * $factor );
1276  $log .= "你消耗{$spd}点体力,发挥了灵力武器{$f}%的威力!";
1277  ${$w . 'sp'} -= $spd;
1278  }
1279  return $factor;
1280 }
1281 
1282 function check_KP_wep($nm, $ht, &$wp, &$wk, &$we, &$ws, &$wsk) {
1283  global $log, $nosta;
1284  if ($ht > 0 && $ws == $nosta) {
1285  $we -= $ht;
1286  if ($nm == '你') {
1287  $log .= "{$nm}的{$wp}的攻击力下降了{$ht}!<br>";
1288  }
1289  if ($we <= 0) {
1290  $log .= "{$nm}的<span class=\"red\">$wp</span>使用过度,已经损坏,无法再装备了!<br>";
1291  $wp = '拳头';
1292  $wk = 'WN';
1293  $we = 0;
1294  $ws = $nosta;
1295  $wsk = '';
1296  }
1297  } elseif ($ht > 0 && $ws != $nosta) {
1298  $ws -= $ht;
1299  if ($nm == '你') {
1300  $log .= "{$nm}的{$wp}的耐久度下降了{$ht}!<br>";
1301  }
1302  if ($ws <= 0) {
1303  $log .= "{$nm}的<span class=\"red\">$wp</span>使用过度,已经损坏,无法再装备了!<br>";
1304  $wp = '拳头';
1305  $wk = 'WN';
1306  $we = 0;
1307  $ws = $nosta;
1308  $wsk = '';
1309  }
1310  }
1311  return;
1312 }
1313 
1314 function check_GCDF_wep($nm, $ht, &$wp, $wp_kind, &$wk, &$we, &$ws, &$wsk) {
1315  global $log, $nosta;
1316  if ((($wp_kind == 'C') || ($wp_kind == 'D')|| ($wp_kind == 'F')) && ($ws != $nosta)) {
1317  $ws -= $ht;
1318  if ($nm == '你') {
1319  $log .= "{$nm}用掉了{$ht}个{$wp}。<br>";
1320  }
1321  if ($ws <= 0) {
1322  $log .= "{$nm}的<span class=\"red\">$wp</span>用光了!<br>";
1323  $wp = '拳头';
1324  $wsk = '';
1325  $wk = 'WN';
1326  $we = 0;
1327  $ws = $nosta;
1328  }
1329  } elseif ((($wp_kind == 'G')||($wp_kind == 'J')) && ($ws != $nosta)) {
1330  $ws -= $ht;
1331  if ($nm == '你') {
1332  $log .= "{$nm}的{$wp}的弹药数减少了{$ht}。<br>";
1333  }
1334  if ($ws <= 0) {
1335  $log .= "{$nm}的<span class=\"red\">$wp</span>的弹药用光了!<br>";
1336  $ws = $nosta;
1337  }
1338  }
1339  return;
1340 }
1341 
1342 function get_inf($nm, $ht, $wp_kind) {
1343  if ($ht > 0) {
1344  global $infatt;
1345  $infatt_dice = rand ( 1, 4 );
1346  if (($infatt_dice == 1) && (strpos ( $infatt [$wp_kind], 'b' ) !== false)) {
1347  $inf_att = 'b';
1348  } elseif (($infatt_dice == 2) && (strpos ( $infatt [$wp_kind], 'h' ) !== false)) {
1349  $inf_att = 'h';
1350  } elseif (($infatt_dice == 3) && (strpos ( $infatt [$wp_kind], 'a' ) !== false)) {
1351  $inf_att = 'a';
1352  } elseif (($infatt_dice == 4) && (strpos ( $infatt [$wp_kind], 'f' ) !== false)) {
1353  $inf_att = 'f';
1354  }
1355  if($nm == '你'){
1356  $w = '';
1357  } else {
1358  $w = 'w_';
1359  }
1360  if ($inf_att) {
1361  global $log, ${$w . 'ar' . $inf_att}, ${$w . 'ar' . $inf_att . 'k'}, ${$w . 'ar' . $inf_att . 'e'}, ${$w . 'ar' . $inf_att . 's'}, ${$w . 'ar' . $inf_att . 'sk'};
1362  if (${$w . 'ar' . $inf_att . 's'}) {
1363  ${$w . 'ar' . $inf_att . 's'} -= $ht;
1364  if ($nm == '你') {
1365  $log .= "你的${$w.'ar'.$inf_att}的耐久度下降了{$ht}!<br>";
1366  }
1367  if (${$w . 'ar' . $inf_att . 's'} <= 0) {
1368  $log .= "{$nm}的<span class=\"red\">${$w.'ar'.$inf_att}</span>受损过重,无法再装备了!<br>";
1369  ${$w . 'ar' . $inf_att} = ${$w . 'ar' . $inf_att . 'k'} = ${$w . 'ar' . $inf_att . 'sk'} = '';
1370  ${$w . 'ar' . $inf_att . 'e'} = ${$w . 'ar' . $inf_att . 's'} = 0;
1371  }
1372  } else {
1373  global $log, ${$w . 'inf'}, $infinfo;
1374  if (strpos ( ${$w . 'inf'}, $inf_att ) === false) {
1375  ${$w . 'inf'} .= $inf_att;
1376  if ($w == 'w_') {
1377  global ${$w . 'combat_inf'};
1378  ${$w . 'combat_inf'} .= $inf_att;
1379  }
1380  $log .= "{$nm}的<span class=\"red\">$infinfo[$inf_att]</span>部受伤了!<br>";
1381 // global $name,$w_name;
1382 // if($nm == '你'){
1383 // addnews($now,'inf',$w_name,$name,$inf_att);
1384 // }else{
1385 // addnews($now,'inf',$name,$w_name,$inf_att);
1386 // }
1387  }
1388  }
1389  }
1390  }
1391  return;
1392 }
1393 
1394 function get_dmg_punish($nm, $dmg, &$hp, $a_ky) {
1395  if ($dmg >= 1000) {
1396  global $log;
1397  if ($dmg < 2000) {
1398  $hp_d = floor ( $hp / 2 );
1399  } elseif ($dmg < 5000) {
1400  $hp_d = floor ( $hp * 2 / 3 );
1401  } else {
1402  $hp_d = floor ( $hp * 4 / 5 );
1403  }
1404  if (strpos ( $a_ky, 'H' ) != false) {
1405  $hp_d = floor ( $hp_d / 10 );
1406  }
1407  $log .= "惨无人道的攻击对{$nm}自身造成了<span class=\"red\">$hp_d</span>点<span class=\"red\">反噬伤害!</span><br>";
1408  $hp -= $hp_d;
1409  }
1410  return;
1411 }
1412 
1413 function exprgup(&$lv_a, $lv_d, &$exp, $isplayer, &$rg) {
1414  global $log;
1415  $expup = round ( ($lv_d - $lv_a) / 3 );
1416  $expup = $expup > 0 ? $expup : 1;
1417  $exp += $expup;
1418  //$log .= "$isplayer 的经验值增加 $expup 点<br>";
1419  if ($isplayer) {
1420  global $upexp;
1421  $nl_exp = $upexp;
1422  } else {
1423  global $w_upexp;
1424  $nl_exp = $w_upexp;
1425  }
1426  if ($exp >= $nl_exp) {
1427  include_once GAME_ROOT . './include/state.func.php';
1428  lvlup ( $lv_a, $exp, $isplayer );
1429  }
1430  $rgup = round ( ($lv_a - $lv_d) / 3 );
1431  $rg += $rgup > 0 ? $rgup : 1;
1432  return;
1433 }
1434 
1435 function addnoise($wp_kind, $wsk, $ntime, $npls, $nid1, $nid2, $nmode) {
1436  if ((($wp_kind == 'G') && (strpos ( $wsk, 'S' ) === false)) || ($wp_kind == 'F')) {
1438  $noisetime = $ntime;
1439  $noisepls = $npls;
1440  $noiseid = $nid1;
1441  $noiseid2 = $nid2;
1442  $noisemode = $nmode;
1443  save_combatinfo ();
1444  } elseif (strpos ( $wsk, 'd' ) !== false){
1446  $noisetime = $ntime;
1447  $noisepls = $npls;
1448  $noiseid = $nid1;
1449  $noiseid2 = $nid2;
1450  $noisemode = 'D';
1451  save_combatinfo ();
1452  }
1453  if (strlen($wp_kind)>=3){
1455  $noisetime = $ntime;
1456  $noisepls = $npls;
1457  $noiseid = $nid1;
1458  $noiseid2 = $nid2;
1459  $noisemode = $wp_kind;
1460  save_combatinfo ();
1461  }
1462 
1463  return;
1464 }
1465 
1466 function check_gender($nm_a, $nm_d, $gd_a, $gd_d, $a_ky) {
1467  $gd_dmg_p = 1;
1468  if ((((strpos ( $a_ky, "l" ) !== false) && ($gd_a != $gd_d)) || ((strpos ( $a_ky, "g" ) !== false) && ($gd_a == $gd_d))) && (! rand ( 0, 4 ))) {
1469  global $log;
1470  $log .= "<span class=\"red\">{$nm_a}被{$nm_d}迷惑,无法全力攻击!</span>";
1471  $gd_dmg_p = 0;
1472  } elseif ((((strpos ( $a_ky, "l" ) !== false) && ($gd_a == $gd_d)) || ((strpos ( $a_ky, "g" ) !== false) && ($gd_a != $gd_d))) && (! rand ( 0, 4 ))) {
1473  global $log;
1474  $log .= "<span class=\"red\">{$nm_a}被{$nm_d}激怒,伤害加倍!</span>";
1475  $gd_dmg_p = 2;
1476  }
1477  return $gd_dmg_p;
1478 }
1479 
1480 function npc_changewep($active = 0){
1481  global $now,$log,$w_name,$w_type,$w_club,$w_wep, $w_wepk, $w_wepe, $w_weps, $w_itm0, $w_itmk0, $w_itme0, $w_itms0, $w_itm1, $w_itmk1, $w_itme1, $w_itms1, $w_itm2, $w_itmk2, $w_itme2, $w_itms2, $w_itm3, $w_itmk3, $w_itme3, $w_itms3, $w_itm4, $w_itmk4, $w_itme4, $w_itms4, $w_itm5, $w_itmk5, $w_itme5, $w_itms5,$w_itm6, $w_itmk6, $w_itme6, $w_itms6, $w_wepsk, $w_arbsk, $w_arhsk, $w_arask, $w_arfsk, $w_artsk, $w_itmsk0, $w_itmsk1, $w_itmsk2, $w_itmsk3, $w_itmsk4, $w_itmsk5, $w_itmsk6;
1482  global $w_arb, $w_arbk, $w_arbe, $w_arbs, $w_arh, $w_arhk, $w_arhe, $w_arhs, $w_ara, $w_arak, $w_arae, $w_aras, $w_arf, $w_arfk, $w_arfe, $w_arfs, $w_art, $w_artk, $w_arte, $w_arts;
1483  global $wepk,$wepsk,$arbsk,$arask,$arhsk,$arfsk,$artsk,$artk,$rangeinfo,$ex_dmg_def;
1484  if(!$w_name || !$w_type || $w_club != 98){return;}
1485 
1486  $dice = rand(0,99);
1487  if($dice > 50){
1488  $weplist = array();
1489  $wepklist = Array($w_wepk);$weplist2 = array();
1490  for($i=0;$i<=6;$i++){
1491  if(${'w_itms'.$i} && ${'w_itme'.$i} && strpos(${'w_itmk'.$i},'W')===0){
1492  $weplist[] = Array($i,${'w_itm'.$i},${'w_itmk'.$i},${'w_itme'.$i},${'w_itms'.$i},${'w_itmsk'.$i});
1493  $wepklist[] = ${'w_itmk'.$i};
1494  }
1495  }
1496  if(!empty($weplist)){
1497  $wepklist = array_unique($wepklist);
1498  $temp_def_key = getdefkey($wepsk,$arhsk,$arbsk,$arask,$arfsk,$artsk,$artk);
1499  $wepkAI = $wepskAI = true;
1500  if(strpos($temp_def_key,'_P_K_G_C_D_F')!==false || strpos($temp_def_key,'B')!==false){$wepkAI = false;}
1501  if(count($wepklist)<=1){$wepkAI = false;}
1502  if(strpos($temp_def_key,'_q_U_I_D_E')!==false || strpos($temp_def_key,'b')!==false){$wepskAI = false;}
1503 
1504  if($wepkAI){
1505  if(!$wepk){$wepk_temp = 'WN';}else{$wepk_temp = $wepk;}
1506  foreach($weplist as $val){
1507  if($rangeinfo[substr($val[2],1,1)] >= $rangeinfo[substr($wepk_temp,1,1)] && strpos($temp_def_key,substr($val[2],1,1))===false){
1508  $weplist2[] = $val;
1509  }
1510  }
1511  if($weplist2){
1512  $weplist = $weplist2;
1513  }
1514  }
1515  if($wepskAI && $weplist){
1516  $minus = array();
1517  foreach($weplist as $val){
1518  foreach($ex_dmg_def as $key => $val2){
1519  if(strpos($val[5],$key)!==false && strpos($temp_def_key,$val2)!==false){
1520  $minus[] = $val;
1521  }
1522  }
1523  }
1524  //var_dump($minus);
1525  if(count($minus) < count($weplist)){
1526  $weplist = array_diff($weplist,$minus);
1527  }
1528  }
1529  }
1530 // var_dump($wepkAI);echo '<br>';var_dump($wepskAI);echo '<br>';
1531 // var_dump($weplist);
1532 // if(!empty($weplist2)){
1533 // $weplist = $weplist2;
1534 // }
1535 
1536  if(!empty($weplist)){
1537  $oldwep = $w_wep;
1538  shuffle($weplist);
1539  $chosen = $weplist[0];$c = $chosen[0];
1540  //var_dump($chosen);
1541  ${'w_itm'.$c} = $w_wep;${'w_itmk'.$c} = $w_wepk;${'w_itme'.$c} = $w_wepe;${'w_itms'.$c} = $w_weps;${'w_itmsk'.$c} = $w_wepsk;
1542  $w_wep = $chosen[1]; $w_wepk = $chosen[2]; $w_wepe = $chosen[3];$w_weps = $chosen[4];$w_wepsk = $chosen[5];
1543  //list($c,$w_wep,$w_wepk,$w_wepe,$w_weps,$w_wepsk) = $chosen;
1544  $log .= "<span class=\"yellow\">{$w_name}</span>将手中的<span class=\"yellow\">{$oldwep}</span>卸下,装备了<span class=\"yellow\">{$w_wep}</span>!<br>";
1545  }
1546  }
1547  return;
1548 }
1549 
1550 function npc_chat($type,$nm, $mode) {
1551  global $npccanchat,$npcchaton;
1552  if ($npcchaton && in_array($type,$npccanchat)) {
1553  global $npcchat, $w_itmsk0, $w_hp, $w_mhp;
1554  $chatcolor = $npcchat[$type][$nm]['color'];
1555  if(!empty($chatcolor)){
1556  $npcwords = "<span class = \"{$chatcolor}\">";
1557  }else{
1558  $npcwords = '<span>';
1559  }
1560  switch ($mode) {
1561  case 'attack' :
1562  if (empty ( $w_itmsk0 )) {
1563  $npcwords .= "{$npcchat[$type][$nm][0]}";
1564  $w_itmsk0 = '1';
1565  } elseif ($w_hp > ($w_mhp / 2)) {
1566  $dice = rand ( 1, 2 );
1567  $npcwords .= "{$npcchat[$type][$nm][$dice]}";
1568  } else {
1569  $dice = rand ( 3, 4 );
1570  $npcwords .= "{$npcchat[$type][$nm][$dice]}";
1571  }
1572  break;
1573  case 'defend' :
1574  if (empty ( $w_itmsk0 )) {
1575  $npcwords .= "{$npcchat[$type][$nm][0]}";
1576  $w_itmsk0 = '1';
1577  } elseif ($w_hp > ($w_mhp / 2)) {
1578  $dice = rand ( 5, 6 );
1579  $npcwords .= "{$npcchat[$type][$nm][$dice]}";
1580  } else {
1581  $dice = rand ( 7, 8 );
1582  $npcwords .= "{$npcchat[$type][$nm][$dice]}";
1583  }
1584  break;
1585  case 'death' :
1586  $npcwords .= "{$npcchat[$type][$nm][9]}";
1587  break;
1588  case 'escape' :
1589  $npcwords .= "{$npcchat[$type][$nm][10]}";
1590  break;
1591  case 'cannot' :
1592  $npcwords .= "{$npcchat[$type][$nm][11]}";
1593  break;
1594  case 'critical' :
1595  $npcwords .= "{$npcchat[$type][$nm][12]}";
1596  break;
1597  case 'kill' :
1598  $npcwords .= "{$nm}对你说道:{$npcchat[$type][$nm][13]}";
1599  break;
1600  }
1601  $npcwords .= '</span><br>';
1602  return $npcwords;
1603  } elseif ($mode == 'death') {
1604  global $lwinfo;
1605  if (is_array ( $lwinfo [$type] )) {
1606  $lastword = $lwinfo [$type] [$nm];
1607  } else {
1608  $lastword = $lwinfo [$type];
1609  }
1610  $npcwords = "<span class=\"yellow\">“{$lastword}”</span><br>";
1611  return $npcwords;
1612  } else {
1613  return;
1614  }
1615 }
1616 
1617 function count_good_man_card($active){
1618  $goodmancard = 0;
1619  if($active){
1620  global $itm0,$itmk0,$itms0,$itm1,$itmk1,$itms1,$itm2,$itmk2,$itms2,$itm3,$itmk3,$itms3,$itm4,$itmk4,$itms4,$itm5,$itmk5,$itms5,$itm6,$itmk6,$itms6;
1621 
1622  for($i=0;$i<=6;$i++){
1623  if(${'itms'.$i} && ${'itm'.$i} == '好人卡' && ${'itmk'.$i} == 'Y'){
1624  $goodmancard += ${'itms'.$i};
1625  }
1626  }
1627  }else{
1628  global $w_itm0,$w_itmk0,$w_itms0,$w_itm1,$w_itmk1,$w_itms1,$w_itm2,$w_itmk2,$w_itms2,$w_itm3,$w_itmk3,$w_itms3,$w_itm4,$w_itmk4,$w_itms4,$w_itm5,$w_itmk5,$w_itms5,$w_itm6,$w_itmk6,$w_itms6;
1629 
1630  for($i=0;$i<=6;$i++){
1631  if(${'w_itms'.$i} && ${'w_itm'.$i} == '好人卡' && ${'w_itmk'.$i} == 'Y'){
1632  $goodmancard += ${'w_itms'.$i};
1633  }
1634  }
1635  }
1636  return $goodmancard;
1637 }
1638 ?>
attack($wep_kind= 'N', $active=0)
$inf
Definition: botservice.php:49
npc_chat($type, $nm, $mode)
$hplayer
Definition: combatinfo.php:6
get_clubskill_bonus_fluc($aclub, $askl, $prefix1, $bclub, $bskl, $prefix2)
$tablepre
Definition: config.inc.php:58
get_clubskill_bonus_hitrate($aclub, $askl, $prefix1, $bclub, $bskl, $prefix2)
check_battle_achievement($n, $is_npc, $killname, $wp)
$skillinfo
get_WF_p($w, $clb, $we)
get_clubskill_bonus_imprate($aclub, $askl, $prefix1, $bclub, $bskl, $prefix2)
$noisetime
Definition: combatinfo.php:7
$noiseid2
Definition: combatinfo.php:10
$ex_max_dmg
Definition: combatcfg_1.php:41
get_clubskill_bonus_spd($clb, $skl)
defend($w_wep_kind= 'N', $active=0)
w_save($id)
Definition: game.func.php:328
get_clubskill_bonus($aclub, $askl, $prefix1, $bclub, $bskl, $prefix2, &$att, &$def)
if(!defined('IN_GAME')) $hdamage
Definition: combatinfo.php:5
findcorpse(&$w_pdata)
Definition: battle.func.php:80
$noiseid
Definition: combatinfo.php:9
get_damage_p(&$rg, $atkcdt, $type, $nm, $cl=0, $msg= '')
get_inf($nm, $ht, $wp_kind)
checkdmgdef($dmg, $aky, $dky, $active)
get_attack_p($weather=0, $pls=0, $pose=0, $tactic=0, $club=0, $inf= '', $active=1)
Definition: attr.func.php:105
get_defend_p($weather=0, $pls=0, $pose=0, $tactic=0, $club=0, $inf= '', $active=1)
Definition: attr.func.php:130
$specialrate
Definition: combatcfg_1.php:29
checkdef($def, $ardef, $aky, $active=0)
$infinfo
$noisepls
Definition: combatinfo.php:8
get_clubskill_bonus_dmg_val($club, $skl, $rp, $w_rp)
$i
Definition: botservice.php:267
lvlup(&$lvl, &$exp, $isplayer=1)
Definition: state.func.php:203
check_gender($nm_a, $nm_d, $gd_a, $gd_d, $a_ky)
checkarb(&$dmg, $w, $aky, $dky, $active=0)
$noisemode
Definition: combatinfo.php:11
logsave($pid, $time, $log= '', $type= 's')
$corpseprotect
Definition: gamecfg_1.php:26
$npcchaton
Definition: gamecfg_1.php:20
$exdmgname
$npccanchat
Definition: gamecfg_1.php:22
addnews($t=0, $n= '', $a='', $b='', $c= '', $d= '', $e= '')
get_clubskill_bonus_imfrate($aclub, $askl, $prefix1, $bclub, $bskl, $prefix2)
if(PHP_VERSION< '4.3.0') $action
Definition: install.php:14
$db
Definition: clear.php:32
$lwinfo
get_clubskill_bonus_p($aclub, $askl, $prefix1, $bclub, $bskl, $prefix2, &$att, &$def)
get_original_dmg($w1, $w2, $att, $def, $ws, $wp_kind)
get_clubskill_bonus_imftime($aclub, $askl, $prefix1, $bclub, $bskl, $prefix2)
$skill_dmg
Definition: combatcfg_1.php:18
kill($death, $dname, $dtype=0, $dpid=0, $annex= '')
Definition: state.func.php:109
【生存者数:<?php echo $alivenum?> 人】< input type="button"value="显示全部幸存者"onClick="$('alivemode').value='all';$('gbmode').value='none';postCmd('alive','alive.php');"></p > if($gamblingon &&$gamestate >=20) elseif($gamblingon &&$gamestate<=10)
Definition: 1_alive.tpl.php:18
getdefkey($w, $ah, $ab, $aa, $af, $at, $atkind)
get_hitrate($wkind= 'N', $skill=0, $club=0, $inf= '')
Definition: attr.func.php:76
const GAME_ROOT
Definition: clear.php:6
$log
Definition: botservice.php:34
addnoise($wp_kind, $wsk, $ntime, $npls, $nid1, $nid2, $nmode)
get_counter($wkind= 'N', $tactic=0, $club=0, $inf= '')
Definition: attr.func.php:90
$weather
Definition: gameinfo.php:11
$main
Definition: command.php:457
$rangeinfo
Definition: combatcfg_1.php:6
get_clubskill_bonus_dmg_rate($aclub, $askl, $bclub, $bskl)
$now
Definition: clear.php:23
$ex_skill_dmg
Definition: combatcfg_1.php:45
$exdmginf
$attinfo
$ex_base_dmg
Definition: combatcfg_1.php:39
$dmg_fluc
Definition: combatcfg_1.php:16
$ex_inf
Definition: combatcfg_1.php:49
get_dmg_punish($nm, $dmg, &$hp, $a_ky)
checkdmg($p1, $p2, $d)
$gamestate
Definition: gameinfo.php:4
npc_changewep($active=0)
const CURSCRIPT
Definition: admin.php:3
check_KP_wep($nm, $ht, &$wp, &$wk, &$we, &$ws, &$wsk)
exprgup(&$lv_a, $lv_d, &$exp, $isplayer, &$rg)
$nosta
Definition: resources_1.php:13
$wepimprate
Definition: combatcfg_1.php:27
$ex_dmg_def
Definition: combatcfg_1.php:37
getatkkey($w, $ah, $ab, $aa, $af, $at, $atkind, $is_wpg)
$ex_good_club
Definition: combatcfg_1.php:35
evonpc($type, $name)
$npcchat
get_ex_dmg($nm, $sd, $clb, &$inf, $ky, $wk, $we, $ws, $dky)
$ex_skill_inf_r
Definition: combatcfg_1.php:57
$ex_wep_dmg
Definition: combatcfg_1.php:43
check_GCDF_wep($nm, $ht, &$wp, $wp_kind, &$wk, &$we, &$ws, &$wsk)
$ex_inf_punish
Definition: combatcfg_1.php:51
checkdmgreflex(&$dmg, $ar)
init_battle($ismeet=0)
Definition: game.func.php:170
$ex_dmg_fluc
Definition: combatcfg_1.php:47
count_good_man_card($active)
$cmd
Definition: botservice.php:51
get_clubskill_bonus_counter($aclub, $askl, $prefix1, $bclub, $bskl, $prefix2)
get_hit_time($ky, $ws, $htr, $wk, $lmt, $infr, $inft, $wimpr, $is_wpg=false, $hitratebonus)
save_combatinfo()
$infatt
Definition: combatcfg_1.php:22
$ex_max_inf_r
Definition: combatcfg_1.php:55
if(!defined( 'IN_GAME')) death($death, $kname= '', $ktype=0, $annex= '')
Definition: state.func.php:7
if(!$cuser||!$cpass) $result
Definition: admin.php:25
if(!defined( 'IN_GAME')) combat($active=1, $wep_kind= '')
Definition: combat.func.php:7
$ex_attack
Definition: combatcfg_1.php:31
get_clubskill_rp_dec($clb, $skl)
$ex_inf_r
Definition: combatcfg_1.php:53
$infobbs
Definition: combatcfg_1.php:24
$ex_good_wep
Definition: combatcfg_1.php:33