Tokiwa Battle Royale  GE777
A PHP Battle Royale inspired game
 All Data Structures Namespaces Files Functions Variables Pages
state.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 death($death, $kname = '', $ktype = 0, $annex = '') {
8  global $now, $db, $tablepre, $alivenum, $deathnum, $name, $state, $deathtime, $type, $lvl, $bid, $killmsginfo, $typeinfo, $hp, $mhp, $wp, $wk, $wg, $wc, $wd, $wf, $sp, $msp, $club, $pls , $nick;
9  if (! $death) {
10  return;
11  }
12  $hp = 0;
13  if ($death == 'N') {
14  $state = 20;
15  } elseif ($death == 'P') {
16  $state = 21;
17  } elseif ($death == 'K') {
18  $state = 22;
19  } elseif ($death == 'G') {
20  $state = 23;
21  } elseif ($death == 'C') {
22  $state = 24;
23  } elseif ($death == 'D') {
24  $state = 25;
25  } elseif ($death == 'F') {
26  $state = 29;
27  } elseif ($death == 'J') {
28  $state = 23;
29  }elseif ($death == 'poison') {
30  $state = 26;
31  } elseif ($death == 'trap') {
32  $state = 27;
33  } elseif ($death == 'event') {
34  $state = 13;
35  } elseif ($death == 'hack') {
36  $state = 14;
37  } elseif ($death == 'pmove') {
38  $state = 12;
39  } elseif ($death == 'hsmove') {
40  $state = 17;
41  } elseif ($death == 'umove') {
42  $state = 18;
43  } elseif ($death == 'button') {
44  $state = 30;
45  } elseif ($death == 'suiside') {
46  $state = 31;
47  } elseif ($death == 'gradius') {
48  $state = 33;
49  } elseif ($death == 'SCP') {
50  $state = 34;
51  } elseif ($death == 'salv'){
52  $state = 35;
53  } elseif ($death == 'kagari1'){
54  $state = 36;
55  } elseif ($death == 'kagari2'){
56  $state = 37;
57  } elseif ($death == 'kagari3'){
58  $state = 38;
59  } elseif ($death == 'gg'){
60  $state = 39;
61  } elseif ($death == 'fake_dn'){
62  $state = 28;
63  } else {
64  $state = 10;
65  }
66 
67  $killmsg = '';
68  if ($ktype == 0 && $kname) {
69  $result = $db->query ( "SELECT killmsg FROM {$tablepre}users WHERE username = '$kname'" );
70  $killmsg = $db->result ( $result, 0 );
71  } elseif ($ktype != 0 && $kname) {
72  $killmsg = $killmsginfo [$ktype];
73  $kname = "$typeinfo[$ktype] $kname";
74  } else {
75  $kname = '';
76  $killmsg = '';
77  }
78 
79  if (! $type) {
80  $result = $db->query ( "SELECT lastword FROM {$tablepre}users WHERE username = '$name'" );
81  $lastword = $db->result ( $result, 0 );
82  $lwname = $typeinfo [$type] . ' ' . $name;
83  /*$result = $db->query("SELECT pls FROM {$tablepre}players WHERE name = '$name' AND type = '$type'");
84  $pls = $db->result($result, 0);*/
85  $db->query ( "INSERT INTO {$tablepre}chat (type,`time`,send,recv,msg) VALUES ('3','$now','$lwname','$pls','$lastword')" );
86  }
87  $deathtime = $now;
88  $result = $db->query("SELECT nick FROM {$tablepre}players WHERE name = '$kname' AND type = '$type'");
89  $knick = $db->result($result, 0);
90  addnews ( $now, 'death' . $state, $name, $type, $knick.' '.$kname, $annex, $lastword );
91  //$alivenum = $db->result($db->query("SELECT COUNT(*) FROM {$tablepre}players WHERE hp>0 AND type=0"), 0);
92 
93  if ($type==0 && $club==99 && ($death=="N" || $death=="P" || $death=="K" || $death=="G" || $death=="C" || $death=="D" || $death=="F" || $death=="J" || $death=="trap"))
94  {
95  addnews($now,'revival',$name); //玩家春哥附体称号的处理
96  $hp=$mhp; $sp=$msp;
97  $club=17; $state=0;
98  $alivenum++;
99  }
100 
101  $alivenum --;
102  $deathnum ++;
103  save_gameinfo ();
104 
105  return $killmsg;
106 }
107 
108 
109 function kill($death, $dname, $dtype = 0, $dpid = 0, $annex = '') {
110  global $now, $db, $tablepre, $alivenum, $deathnum, $name, $w_state, $type, $pid, $typeinfo, $pls, $lwinfo, $w_achievement;
111 
112  if (! $death || ! $dname) {
113  return;
114  }
115 
116  if ($death == 'N') {
117  $w_state = 20;
118  } elseif ($death == 'P') {
119  $w_state = 21;
120  } elseif ($death == 'K') {
121  $w_state = 22;
122  } elseif ($death == 'G') {
123  $w_state = 23;
124  } elseif ($death == 'J') {
125  $w_state = 23;
126  } elseif ($death == 'C') {
127  $w_state = 24;
128  } elseif ($death == 'D') {
129  $w_state = 25;
130  } elseif ($death == 'F') {
131  $w_state = 29;
132  } elseif ($death == 'dn') {
133  $w_state = 28;
134  } else {
135  $w_state = 10;
136  }
137 
138  $killmsg = '';
139  $result = $db->query ( "SELECT killmsg FROM {$tablepre}users WHERE username = '$name'" );
140  $killmsg = $db->result ( $result, 0 );
141 
142  if (! $dtype) {
143  //$alivenum = $db->result($db->query("SELECT COUNT(*) FROM {$tablepre}players WHERE hp>0 AND type=0"), 0);
144  $alivenum --;
145  }
146  $deathnum ++;
147 
148 
149  if ($dtype) {
150  if($dtype == 15){//静流AI
151  global $gamevars;
152  $gamevars['sanmadead'] = 1;
153  save_gameinfo();
154  }
155  $lwname = $typeinfo [$dtype] . ' ' . $dname;
156  if (is_array ( $lwinfo [$dtype] )) {
157  $lastword = $lwinfo [$dtype] [$dname];
158  } else {
159  $lastword = $lwinfo [$dtype];
160  }
161 
162  $db->query ( "INSERT INTO {$tablepre}chat (type,`time`,send,recv,msg) VALUES ('3','$now','$lwname','$pls','$lastword')" );
163  } else {
164  $lwname = $typeinfo [$dtype] . ' ' . $dname;
165  $result = $db->query ( "SELECT lastword FROM {$tablepre}users WHERE username = '$dname'" );
166  $lastword = $db->result ( $result, 0 );
167 
168  $db->query ( "INSERT INTO {$tablepre}chat (type,`time`,send,recv,msg) VALUES ('3','$now','$lwname','$pls','$lastword')" );
169  }
170  $result = $db->query("SELECT nick FROM {$tablepre}players WHERE name = '$name' AND type = '$type'");
171  $knick = $db->result($result, 0);
172  addnews ( $now, 'death' . $w_state, $dname, $dtype, $knick.' '.$name, $annex, $lastword );
173 
174  $result = $db->query("SELECT * FROM {$tablepre}players WHERE pid=$dpid" );
175  $res=$db->fetch_array($result);
176  $revivaled=false;
177  if ($res['type']==0 && $res['club']==99 && ($death=="N" || $death=="P" || $death=="K" || $death=="G" || $death=="C" ||$death=="D" || $death=="F" || $death=="J" || $death=="trap"))
178  {
179  addnews($now,'revival',$res['name']); //玩家春哥附体称号的处理
180  $db->query ( "UPDATE {$tablepre}players SET hp=mhp WHERE pid=$dpid" );
181  $db->query ( "UPDATE {$tablepre}players SET sp=msp WHERE pid=$dpid" );
182  $db->query ( "UPDATE {$tablepre}players SET club=17 WHERE pid=$dpid" );
183  $db->query ( "UPDATE {$tablepre}players SET state=0 WHERE pid=$dpid" );
184  $alivenum++;
185  $revivaled=true;
186  }
187  if (!$revivaled) $db->query ( "UPDATE {$tablepre}players SET hp='0',endtime='$now',deathtime='$now',bid='$pid',state='$w_state' WHERE pid=$dpid" );
188 // if($dtype == 1 || $dtype == 9){
189 // global $rdown,$bdown;
190 // if($dtype == 1){
191 // $rdown = 1;
192 // storyputchat($now,'rdown');
193 // }elseif($dtype == 9){
194 // $bdown = 1;
195 // storyputchat($now,'bdown');
196 // }
197 // }
198 
199  save_gameinfo ();
200  return $killmsg;
201 }
202 
203 function lvlup(&$lvl, &$exp, $isplayer = 1) {
204  global $baseexp;
205  $up_exp_temp = round ( (2 * $lvl + 1) * $baseexp );
206  if ($exp >= $up_exp_temp && $lvl < 255) {
207  if ($isplayer) {
208  $perfix = '';
209  } else {
210  $perfix = 'w_';
211  }
212  global ${$perfix . 'name'}, ${$perfix . 'hp'}, ${$perfix . 'mhp'}, ${$perfix . 'sp'}, ${$perfix . 'msp'}, ${$perfix . 'att'}, ${$perfix . 'def'}, ${$perfix . 'upexp'}, ${$perfix . 'club'}, ${$perfix . 'type'}, ${$perfix . 'skillpoint'};
213  global ${$perfix . 'wp'}, ${$perfix . 'wk'}, ${$perfix . 'wc'}, ${$perfix . 'wg'}, ${$perfix . 'wd'}, ${$perfix . 'wf'};
214  $sklanginfo = Array ('wp' => '殴熟', 'wk' => '斩熟', 'wg' => '射熟', 'wc' => '投熟', 'wd' => '爆熟', 'wf' => '灵熟', 'all' => '全系熟练度' );
215  $sknlist = Array (1 => 'wp', 2 => 'wk', 3 => 'wc', 4 => 'wg', 5 => 'wd', 9 => 'wf', 16 => 'all' );
216  $skname = $sknlist [${$perfix . 'club'}];
217  //升级判断
218  $lvup = 1 + floor ( ($exp - $up_exp_temp) / $baseexp / 2 );
219  $lvup = $lvup > 255 - $lvl ? 255 - $lvl : $lvup;
220  $lvuphp = $lvupatt = $lvupdef = $lvupskill = $lvupsp = $lvupspref = 0;
221  for($i = 0; $i < $lvup; $i += 1) {
222  if (${$perfix . 'club'} == 13) {
223  $lvuphp += rand ( 14, 18 );
224  } else {
225  $lvuphp += rand ( 8, 10 );
226  }
227  $lvupsp += rand( 4,6);
228  if (${$perfix . 'club'} == 14) {
229  $lvupatt += rand ( 4, 6 );
230  $lvupdef += rand ( 5, 8 );
231  } else {
232  $lvupatt += rand ( 2, 4 );
233  $lvupdef += rand ( 3, 5 );
234  }
235 
236  if ($skname == 'all') {
237  $lvupskill += rand ( 2, 4 );
238  } elseif ($skname == 'wd' || $skname == 'wf') {
239  $lvupskill += rand ( 3, 5 );
240  }elseif($skname){
241  $lvupskill += rand ( 4, 6 );
242  }
243  $lvupspref += round(${$perfix . 'msp'} * 0.1);
244  }
245  $lvl += $lvup;
246  $up_exp_temp = round ( (2 * $lvl + 1) * $baseexp );
247  if ($lvl >= 255) {
248  $lvl = 255;
249  $exp = $up_exp_temp;
250  }
251  ${$perfix . 'upexp'} = $up_exp_temp;
252  ${$perfix . 'hp'} += $lvuphp;
253  ${$perfix . 'mhp'} += $lvuphp;
254  ${$perfix . 'sp'} += $lvupsp;
255  ${$perfix . 'msp'} += $lvupsp;
256  ${$perfix . 'att'} += $lvupatt;
257  ${$perfix . 'def'} += $lvupdef;
258  ${$perfix . 'skillpoint'} += $lvup;
259  if ($skname == 'all') {
260  ${$perfix . 'wp'} += $lvupskill;
261  ${$perfix . 'wk'} += $lvupskill;
262  ${$perfix . 'wg'} += $lvupskill;
263  ${$perfix . 'wc'} += $lvupskill;
264  ${$perfix . 'wd'} += $lvupskill;
265  ${$perfix . 'wf'} += $lvupskill;
266  } elseif ($skname) {
267  ${$perfix . $skname} += $lvupskill;
268  }
269 
270  if (${$perfix . 'sp'}+$lvupspref >= ${$perfix . 'msp'}) {
271  $lvupspref = ${$perfix . 'msp'} - ${$perfix . 'sp'};
272 
273  }
274  ${$perfix . 'sp'} += $lvupspref;
275  if ($skname) {
276  $sklog = ",{$sklanginfo[$skname]}+{$lvupskill}";
277  }
278  if ($isplayer) {
279  global $log;
280  $log .= "<span class=\"yellow\">你升了{$lvup}级!生命上限+{$lvuphp},体力上限+{$lvupsp},攻击+{$lvupatt},防御+{$lvupdef}{$sklog},体力恢复了{$lvupspref},获得了{$lvup}点技能点!</span><br>";
281  } elseif (! $w_type) {
282  global $w_pid, $now;
283  $w_log = "<span class=\"yellow\">你升了{$lvup}级!生命上限+{$lvuphp},体力上限+{$lvupsp},攻击+{$lvupatt},防御+{$lvupdef}{$sklog},体力恢复了{$lvupspref},获得了{$lvup}点技能点!</span><br>";
284  logsave ( $w_pid, $now, $w_log,'s');
285  }
286  } elseif ($lvl >= 255) {
287  $lvl = 255;
288  $exp = $up_exp_temp;
289  }
290  return;
291 }
292 
293 /*function lvlup(&$lvl, &$exp, $isplayer = 1) {
294  global $log,$baseexp;
295  $up_exp_temp = round((2*$lvl+1)*$baseexp);
296  if($exp >= $up_exp_temp && $lvl<255) {
297  if($isplayer){
298  global $name,$hp,$mhp,$sp,$msp,$att,$def,$upexp,$club;
299  $sknlist=Array(1=>'wp',2=>'wk',3=>'wc',4=>'wg',5=>'wd',9=>'wf');//每级提升熟练
300 
301  $skname=$sknlist[$club];
302  if($skname){
303  global ${$skname},$skilllaninfo;
304  }
305  $lvup = 1+floor(($exp - $up_exp_temp)/$baseexp/2);
306  $lvup = $lvup > 255-$lvl ? 255-$lvl : $lvup;
307  //$log .="$lvup<br>";
308  $lvuphp = $lvupatt = $lvupdef = $lvupskill =0;
309 
310  for ($i=0;$i<$lvup;$i+=1){
311  $lvuphp += rand(8,10);$lvupatt += rand(2,4);$lvupdef += rand(3,5);
312  if($skname){
313  $lvupskill += rand(3,5);
314  }
315  $sp += ($msp * 0.1);
316  }
317  $lvl += $lvup;$up_exp_temp = round((2*$lvl+1)*$baseexp);
318 
319  if($lvl>=255){$lvl=255;$exp=$up_exp_temp;}
320  $upexp=$up_exp_temp;
321  $hp += $lvuphp;$mhp += $lvuphp;
322  $att += $lvupatt;$def += $lvupdef;
323  ${$skname} += $lvupskill;
324  if($sp >= $msp){$sp = $msp;}
325  if($skname){
326  $sklog = ",{$skilllaninfo[$skname]}+{$lvupskill}";
327  }
328  $log .= "<span class=\"yellow\">你升了{$lvup}级!生命+{$lvuphp},攻击+{$lvupatt},防御+{$lvupdef}{$sklog}!</span><br>";
329  } else {
330  global $now,$w_type,$w_pid,$w_name,$w_hp,$w_mhp,$w_sp,$w_msp,$w_att,$w_def,$w_upexp,$w_club;
331  $sknlist=Array(1=>'wp',2=>'wk',3=>'wg',4=>'wc',5=>'wd',9=>'wf');//每级提升熟练
332  $skname=$sknlist[$w_club];
333  if($skname){
334  global ${'w_'.$skname},$skilllaninfo;
335  }
336  $lvup = 1+floor(($exp - $up_exp_temp)/$baseexp/2);
337  $lvup = $lvup > 255-$lvl ? 255-$lvl : $lvup;
338  $lvuphp = $lvupatt = $lvupdef = $lvupskill = 0;
339  for ($i=0;$i<$lvup;$i+=1){
340  $lvuphp += rand(8,10);$lvupatt += rand(2,4);$lvupdef += rand(3,5);
341  if($skname){
342  $lvupskill += rand(3,5);
343  }
344  $w_sp += ($w_msp * 0.1);
345  }
346  $lvl += $lvup;$up_exp_temp = round((2*$lvl+1)*$baseexp);
347 
348  if($lvl>=255){$lvl=255;$exp=$up_exp_temp;}
349  $w_upexp=$up_exp_temp;
350  $w_hp += $lvuphp;$w_mhp += $lvuphp;
351  $w_att += $lvupatt;$w_def += $lvupdef;
352  ${'w_'.$skname} += $lvupskill;
353  if($w_sp >= $w_msp){$w_sp = $w_msp;}
354  if(!$w_type){
355  if($skname){
356  $sklog = ",{$skilllaninfo[$skname]}+{$lvupskill}";
357  }
358  $w_log = "<span class=\"yellow\">你升了{$lvup}级!生命+{$lvuphp},攻击+{$lvupatt},防御+{$lvupdef}{$sklog}!</span><br>";
359  logsave($w_pid,$now,$w_log);
360  }
361  }
362  } elseif($lvl >= 255){$lvl=255;$exp=$up_exp_temp;}
363  return;
364 }*/
365 
366 //玩家被攻击时的生命恢复未实现
367 
368 
369 function rest($command) {
370  global $now, $log, $mode, $cmd, $state, $endtime, $hp, $mhp, $sp, $msp, $sleep_time, $heal_time, $restinfo, $pose, $inf,$club,$exdmginf;
371 
372  if ($state == 1) {
373  $resttime = $now - $endtime;
374  $endtime = $now;
375  $oldsp = $sp;
376  $upsp = round ( $msp * $resttime / $sleep_time / 100 );
377  if ($pose == 5) {
378  $upsp *= 2;
379  }
380  if (strpos ( $inf, 'b' ) !== false) {
381  $upsp = round ( $upsp / 2 );
382  }
383  if ($club ==16){
384  $upsp *= 2;
385  }
386  $sp += $upsp;
387  if ($sp >= $msp) {
388  $sp = $msp;
389  }
390  $upsp = $sp - $oldsp;
391  $log .= "你的体力恢复了<span class=\"yellow\">$upsp</span>点。<br>";
392  } elseif ($state == 2) {
393  $resttime = $now - $endtime;
394  $endtime = $now;
395  $oldhp = $hp;
396  $uphp = round ( $mhp * $resttime / $heal_time / 100 );
397  if ($pose == 5) {
398  $uphp *= 2;
399  }
400  if (strpos ( $inf, 'b' ) !== false) {
401  $uphp = round ( $uphp / 2 );
402  }
403  if ($club ==16){
404  $uphp *= 2;
405  }
406  $hp += $uphp;
407  if ($hp >= $mhp) {
408  $hp = $mhp;
409  }
410  $uphp = $hp - $oldhp;
411  $log .= "你的生命恢复了<span class=\"yellow\">$uphp</span>点。<br>";
412  } elseif ($state == 3) {
413  $resttime = $now - $endtime;
414  $endtime = $now;
415  $oldsp = $sp;
416  $upsp = round ( $msp * $resttime / $sleep_time / 100 );
417  if ($pose == 5) {
418  $upsp *= 2;
419  }
420  if (strpos ( $inf, 'b' ) !== false) {
421  $upsp = round ( $upsp / 2 );
422  }
423  if ($club ==16){
424  $upsp *= 2;
425  }
426  $sp += $upsp;
427  if ($sp >= $msp) {
428  $sp = $msp;
429  }
430  $upsp = $sp - $oldsp;
431  $oldhp = $hp;
432  $uphp = round ( $mhp * $resttime / $heal_time / 100 );
433  if ($pose == 5) {
434  $uphp *= 2;
435  }
436  if (strpos ( $inf, 'b' ) !== false) {
437  $uphp = round ( $uphp / 2 );
438  }
439  if ($club ==16){
440  $uphp *= 2;
441  }
442  $hp += $uphp;
443  if ($hp >= $mhp) {
444  $hp = $mhp;
445  }
446  $uphp = $hp - $oldhp;
447  $log .= "你的体力恢复了<span class=\"yellow\">$upsp</span>点,生命恢复了<span class=\"yellow\">$uphp</span>点。<br>";
448 
449  $refintv = 90;
450  if ($pose == 5) {
451  $refintv -= 30;
452  }
453  if (strpos ( $inf, 'b' ) !== false) {
454  $refintv += 30;
455  }
456  $spinf = preg_replace("/[h|b|a|f]/", "", $inf);
457  $spinflength = strlen($spinf);
458  if($spinf){
459  $refflag = false;
460  do{
461  $dice = rand(0,$refintv);
462  if($dice + 15 < $resttime){
463  $infno = rand(0,$spinflength-1);
464  $refinfstr = substr($spinf,$infno,1);
465  $inf = str_replace($refinfstr,'',$inf);
466  $spinf = str_replace($refinfstr,'',$spinf);
467  $log .= "<span class=\"yellow\">你从{$exdmginf[$refinfstr]}状态中恢复了!</span><br>";
468  $spinflength -= 1;
469  $refflag = true;
470  }
471  $resttime -= $refintv;
472  } while ($resttime > 0 && $spinflength > 0);
473  if(!$refflag){
474  $log .= "也许是时间不够吧……你没有治好任何异常状态。<br>";
475  }
476  }
477  } else {
478  $mode = 'command';
479  }
480 
481  if ($command != 'rest') {
482  $state = 0;
483  $endtime = $now;
484  $mode = 'command';
485  }
486  return;
487 }
488 
489 ?>
$inf
Definition: botservice.php:49
$tablepre
Definition: config.inc.php:58
$sleep_time
Definition: gamecfg_1.php:67
$baseexp
Definition: gamecfg_1.php:55
$killmsginfo
Definition: resources_1.php:82
$restinfo
$i
Definition: botservice.php:267
lvlup(&$lvl, &$exp, $isplayer=1)
Definition: state.func.php:203
$endtime
Definition: botservice.php:321
logsave($pid, $time, $log= '', $type= 's')
addnews($t=0, $n= '', $a='', $b='', $c= '', $d= '', $e= '')
$db
Definition: clear.php:32
$heal_time
Definition: gamecfg_1.php:69
$lwinfo
kill($death, $dname, $dtype=0, $dpid=0, $annex= '')
Definition: state.func.php:109
$deathnum
Definition: gameinfo.php:15
【生存者数:<?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
$log
Definition: botservice.php:34
$alivenum
Definition: gameinfo.php:14
$now
Definition: clear.php:23
$exdmginf
rest($command)
Definition: state.func.php:369
$typeinfo
Definition: resources_1.php:58
$cmd
Definition: botservice.php:51
if(!defined( 'IN_GAME')) death($death, $kname= '', $ktype=0, $annex= '')
Definition: state.func.php:7
if(!$cuser||!$cpass) $result
Definition: admin.php:25
save_gameinfo()