예제 #1
0
function globalize_user_info($private = true, $alive = true)
{
    global $username;
    global $char_id;
    $error = null;
    $char_id = self_char_id();
    // Will default to null.
    //$username = get_username(); // Will default to null.
    if ((!is_logged_in() || !$char_id) && $private) {
        $error = 'log_in';
        // A non-null set of content being in the error triggers a die at the end of the header.
    } elseif ($char_id) {
        // **************** Player information settings. *******************
        global $player, $player_id;
        // Polluting the global namespace here.  Booo.
        $player = new Player($char_id);
        // Defaults to current session user.
        $username = $player->name();
        // Set the global username.
        $player_id = $player->player_id;
        assert('isset($player_id)');
        if ($alive) {
            // *** That page requires the player to be alive to view it.
            if (!$player->health()) {
                $error = 'dead';
            } else {
                if ($player->hasStatus(FROZEN)) {
                    $error = 'frozen';
                }
            }
        }
    }
    return $error;
}
예제 #2
0
 /**
  * group char
  **/
 function testCreatePlayerObjectHasUsefulInfo()
 {
     $char = new Player($this->char_id);
     $this->assertTrue((bool) positive_int($char->health()));
     $this->assertTrue((bool) positive_int($char->speed()));
     $this->assertTrue((bool) positive_int($char->stamina()));
     $this->assertTrue((bool) positive_int($char->strength()));
     $this->assertTrue((bool) positive_int($char->level()));
     $this->assertNotEmpty($char->name());
     $this->assertTrue((bool) positive_int($char->damage()));
 }
예제 #3
0
/**
 * Creates all the environmental variables, with no outputting.
 *
 * Places much of the user info into the global namespace.
 */
function init($private, $alive)
{
    global $today;
    global $username;
    global $char_id;
    // ******************** Declared variables *****************************
    $today = date("F j, Y, g:i a");
    // Today var is only used for creating mails.
    // Page viewing settings usually set before the header.
    update_activity_info();
    // *** Updates the activity of the page viewer in the database.
    $error = null;
    $char_id = self_char_id();
    // Will default to null.
    if ((!is_logged_in() || !$char_id) && $private) {
        $error = 'log_in';
        // A non-null set of content being in the error triggers a die at the end of the header.
    } elseif ($char_id) {
        // **************** Player information settings. *******************
        global $player, $player_id;
        // Polluting the global namespace here.  Booo.
        $player = new Player($char_id);
        // Defaults to current session user.
        $username = $player->name();
        // Set the global username.
        $player_id = $player->player_id;
        if ($alive) {
            // That page requires the player to be alive to view it
            if (!$player->health()) {
                $error = 'dead';
            } else {
                if ($player->hasStatus(FROZEN)) {
                    $error = 'frozen';
                }
            }
        }
    }
    return $error;
}
예제 #4
0
             // Harmonize some chakra!
             // Use up some ki to heal yourself.
             function harmonize_chakra(Player $char)
             {
                 // Heal at most 100 or ki available or hurt by AND at least 0
                 $heal_for = (int) max(0, min(100, $char->is_hurt_by(), $char->ki()));
                 if ($heal_for > 0) {
                     // If there's anything to heal, try.
                     // Subtract the ki used for healing.
                     $char->heal($heal_for);
                     $char->set_ki($char->ki() - $heal_for);
                     $char->save();
                 }
                 return $char;
             }
             $start_health = $player->health();
             // Harmonize those chakra!
             $player = harmonize_chakra($player);
             $healed_by = $player->health() - $start_health;
             $ki_cost = $healed_by;
         }
         $target->addStatus(HEALING);
         $generic_skill_result_message = "__TARGET__ healed by {$healed_by} to " . $target->health() . ".";
         if ($target->id() != $player->id()) {
             send_event($attacker_char_id, $target->id(), "You have been healed by {$attacker_id} for {$healed_by}.");
         }
     }
 } else {
     if ($command == 'Ice Bolt') {
         if (!$target->hasStatus(SLOW)) {
             if ($target->vo->turns >= 10) {
예제 #5
0
파일: npc.php 프로젝트: reillo/ninjawars
                                            subtract_gold($char_id, $thief_gold);
                                        } else {
                                            if ($thief_attack < 30) {
                                                add_gold($char_id, $thief_gold);
                                                add_item($char_id, 'shuriken', $quantity = 1);
                                            }
                                        }
                                    } else {
                                        $thief_gold = 0;
                                    }
                                    $npc_template = 'npc.thief.tpl';
                                    $combat_data = array('attack' => $thief_attack, 'gold' => $thief_gold, 'victory' => $victory);
                                }
                            }
                        }
                    }
                }
            }
        }
        // ************ End of specific npc logic *******************
        // ************ FINAL CHECK FOR DEATH ***********************
        if ($player->health() <= 0) {
            $health = false;
            sendMessage("SysMsg", $username, "DEATH: You have been killed by a " . $victim . " on {$today}");
        }
        // Subtract the turn cost for attacking an npc, almost always going to be 1 apart from perhaps oni or group-of-thieves
        subtractTurns($char_id, $turn_cost);
    }
    // Add the combat_data into the standard stuff.
    display_page('npc.tpl', 'Battle', array('npc_template' => $npc_template, 'attacked' => 1, 'turns' => $turns, 'random_encounter' => $random_encounter, 'health' => $health) + $combat_data, array('quickstat' => 'player'));
}
예제 #6
0
 public function testCloneKillKillingWipesHealthAndTurns()
 {
     $char_id = TestAccountCreateAndDestroy::char_id();
     $charObj = new Player($char_id);
     $char_id_2 = TestAccountCreateAndDestroy::char_id_2();
     $charObj_2 = new Player($char_id_2);
     // Will create characters with 127.0.0.1 ip, but that shouldn't be clone kill able.
     $this->assertFalse(CloneKill::canKill($char_id, $char_id_2));
     $this->syncIps('222.244.244.222', $char_id, $char_id_2);
     $this->assertTrue(CloneKill::canKill($char_id, $char_id_2), 'Should be able to clone kill similar and same ip characters!');
     CloneKill::kill($charObj, $charObj, $charObj_2);
     // Obliterate them.
     $pc1 = new Player($char_id);
     $pc2 = new Player($char_id_2);
     $this->assertEquals(0, $pc1->health());
     $this->assertEquals(0, $pc2->health());
     $this->assertEquals(0, $pc1->turns());
     $this->assertEquals(0, $pc2->turns());
 }
예제 #7
0
 } else {
     // *** If the attacker is purely dueling or attacking, even if stealthed, though stealth is broken by dueling. ***
     // *** MAIN DUELING SECTION ***
     if ($attacking_player->hasStatus(STEALTH)) {
         // *** Remove their stealth if they duel instead of preventing dueling.
         $attacking_player->subtractStatus(STEALTH);
         $stealth_lost = true;
     }
     // *** PRE-BATTLE STATS - Template Vars ***
     $pre_battle_stats = true;
     $pbs_attacker_name = $attacking_player->name();
     $pbs_attacker_str = $attacking_player->getStrength();
     $pbs_attacker_hp = $attacking_player->health();
     $pbs_target_name = $target_player->name();
     $pbs_target_str = $target_player->getStrength();
     $pbs_target_hp = $target_player->health();
     // *** BEGINNING OF MAIN BATTLE ALGORITHM ***
     $turns_counter = $attack_turns;
     $total_target_damage = 0;
     $total_attacker_damage = 0;
     $target_damage = 0;
     $attacker_damage = 0;
     // *** Combat Calculations ***
     $round = 1;
     $rounds = 0;
     while ($turns_counter > 0 && $total_target_damage < $attacker_health && $total_attacker_damage < $target_health) {
         $turns_counter -= !$duel ? 1 : 0;
         // *** SWITCH BETWEEN DUELING LOOP AND SINGLE ATTACK ***
         $target_damage = rand(1, $target_str);
         $attacker_damage = rand(1, $attacker_str);
         if ($blaze) {
예제 #8
0
 public function testCauseDeath()
 {
     $char = new Player($this->char_id);
     $char->death();
     $this->assertEquals(0, $char->health());
 }
예제 #9
0
         $stealth_damage = true;
         sendMessage($attacker, $target, "{$attacker} has attacked you from the shadows for {$stealthAttackDamage} damage.");
     }
 } else {
     // *** If the attacker is purely dueling or attacking, even if stealthed, though stealth is broken by dueling. ***
     // *** MAIN DUELING SECTION ***
     if ($attacking_player->hasStatus(STEALTH)) {
         // *** Remove their stealth if they duel instead of preventing dueling.
         $attacking_player->subtractStatus(STEALTH);
         $stealth_lost = true;
     }
     // *** PRE-BATTLE STATS - Template Vars ***
     $pre_battle_stats = true;
     $pbs_attacker_name = $attacking_player->name();
     $pbs_attacker_str = $attacking_player->getStrength();
     $pbs_attacker_hp = $attacking_player->health();
     $pbs_target_name = $target_player->name();
     $pbs_target_str = $target_player->getStrength();
     $pbs_target_hp = $target_player->health();
     // *** BEGINNING OF MAIN BATTLE ALGORITHM ***
     $turns_counter = $attack_turns;
     $total_target_damage = 0;
     $total_attacker_damage = 0;
     $target_damage = 0;
     $attacker_damage = 0;
     // *** Combat Calculations ***
     $round = 1;
     $rounds = 0;
     while ($turns_counter > 0 && $total_target_damage < $attacker_health && $total_attacker_damage < $target_health) {
         $turns_counter -= !$duel ? 1 : 0;
         // *** SWITCH BETWEEN DUELING LOOP AND SINGLE ATTACK ***