Adding Veterano Calizor and Casa de Piedra.
This commit is contained in:
parent
8dbca09bd1
commit
f124fcd2f8
@ -18,7 +18,7 @@ export default function PJListItem (props: PJListItemProps): JSX.Element {
|
||||
return <></>
|
||||
}
|
||||
return (
|
||||
<p>Experiencia: <span style={{ color: 'red' }}>{pj.experience_to_next_level_current}</span>
|
||||
<p>Exp <span style={{ color: 'red' }}>{pj.experience_to_next_level_current}</span>
|
||||
/<span style={{ color: 'green' }}>{pj.experience_to_next_level_complete}</span></p>
|
||||
)
|
||||
}
|
||||
@ -30,17 +30,15 @@ export default function PJListItem (props: PJListItemProps): JSX.Element {
|
||||
}
|
||||
</div>
|
||||
<div className="data">
|
||||
<p>{pj.nick} Nivel <span style={{ color: 'red' }}>{pj.level}.</span></p>
|
||||
<p>{pj.nick} Nvl <span style={{ color: 'red' }}>{pj.level}.</span></p>
|
||||
{
|
||||
printExperience()
|
||||
}
|
||||
<label className="bar-container">
|
||||
Salud
|
||||
<PJHealthLikeBar value={pj.health} max={pj.max_health}/>
|
||||
S <PJHealthLikeBar value={pj.health} max={pj.max_health}/>
|
||||
</label>
|
||||
<label className="bar-container">
|
||||
Mana
|
||||
<PJHealthLikeBar value={pj.mana} max={pj.max_mana}/>
|
||||
M <PJHealthLikeBar value={pj.mana} max={pj.max_mana}/>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -101,7 +101,7 @@ export default function UpperPanel (props: UpperPanelProps): JSX.Element {
|
||||
function showThirdPanel (): JSX.Element {
|
||||
if (isBattling === null || !isBattling || enemyTeamPJs === null) {
|
||||
return (
|
||||
<>
|
||||
<div className="movement-menu">
|
||||
{
|
||||
showLocationMenuHeaderText()
|
||||
}
|
||||
@ -111,7 +111,7 @@ export default function UpperPanel (props: UpperPanelProps): JSX.Element {
|
||||
{
|
||||
availableLocationsToMove()
|
||||
}
|
||||
</>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
return (
|
||||
|
@ -11,4 +11,7 @@ sub INTRO_MESSAGE_SENT_FLAG {
|
||||
sub TALKED_WITH_OLD_MAN_AND_LEARNED_TO_SAY_DEVOTA {
|
||||
return 'TALKED_WITH_OLD_MAN_AND_LEARNED_TO_SAY_DEVOTA';
|
||||
}
|
||||
sub TALKED_FIRST_TIME_VETERANO_CALIZOR {
|
||||
return 'TALKED_FIRST_TIME_VETERANO_CALIZOR';
|
||||
}
|
||||
1;
|
||||
|
@ -0,0 +1,69 @@
|
||||
package LasTres::Planet::Bahdder::BosqueDelHeroe::TribuDeLaLima::CasaDePiedra;
|
||||
|
||||
use v5.36.0;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use feature 'signatures';
|
||||
|
||||
use utf8;
|
||||
|
||||
use Moo;
|
||||
|
||||
use LasTres::Planet::Bahdder::BosqueDelHeroe::TribuDeLaLima;
|
||||
use LasTres::TalkingNPC::VeteranoCalizor;
|
||||
|
||||
with 'LasTres::Location';
|
||||
|
||||
sub identifier {
|
||||
return 'casa_de_piedra';
|
||||
}
|
||||
|
||||
sub name {
|
||||
return 'Casa de piedra';
|
||||
}
|
||||
|
||||
sub description($self, $pj = undef) {
|
||||
return $self->first_description;
|
||||
}
|
||||
|
||||
sub first_description($self) {
|
||||
return
|
||||
'Esta casa la construyo Veterano Cálizor cuando se vino a vivir a la tribu tras terminar la guerra, varias personas de la tribu viven aquí al haber ayudado durante su construcción, si estás buscando a Devota, Bruto o Veterano existe la posibilidad de que estén aquí.
|
||||
|
||||
Algunos la llaman la Casa de los Líderes porque tanto Veterano como Devota fueron líderes de la tribu; no obstante el líder actual no reside aquí.
|
||||
|
||||
La casa es monumental para los estándares del bosque.';
|
||||
}
|
||||
|
||||
sub parent {
|
||||
return LasTres::Planet::Bahdder::BosqueDelHeroe::TribuDeLaLima->instance;
|
||||
}
|
||||
|
||||
sub actions($self, $pj) {
|
||||
return [ ];
|
||||
}
|
||||
|
||||
sub npcs($self, $pj) {
|
||||
return [ LasTres::TalkingNPC::VeteranoCalizor->instance ];
|
||||
}
|
||||
|
||||
sub connected_places {
|
||||
return [];
|
||||
}
|
||||
|
||||
my $singleton;
|
||||
|
||||
sub instance {
|
||||
my $class = shift;
|
||||
if ( !defined $singleton ) {
|
||||
$singleton = $class->new(@_);
|
||||
}
|
||||
return $singleton;
|
||||
}
|
||||
|
||||
sub is_spawn {
|
||||
return 0;
|
||||
}
|
||||
1;
|
133
lib/LasTres/TalkingNPC/VeteranoCalizor.pm
Normal file
133
lib/LasTres/TalkingNPC/VeteranoCalizor.pm
Normal file
@ -0,0 +1,133 @@
|
||||
package LasTres::TalkingNPC::VeteranoCalizor;
|
||||
|
||||
use v5.36.0;
|
||||
use strict;
|
||||
use warnings;
|
||||
use utf8;
|
||||
|
||||
use feature 'signatures';
|
||||
|
||||
use Moo;
|
||||
|
||||
use LasTres::Flags;
|
||||
use LasTres::Word::Devota;
|
||||
use LasTres::Word::Ayazel;
|
||||
|
||||
use parent 'LasTres::TalkingNPC';
|
||||
|
||||
sub talk ( $self, $pj, $word = undef ) {
|
||||
$self->SUPER::talk( $pj, $word );
|
||||
if ( !defined $word ) {
|
||||
$self->wordlessly_talk($pj);
|
||||
return;
|
||||
}
|
||||
$self->word_talk($pj, $word);
|
||||
}
|
||||
|
||||
sub word_talk($self, $pj, $word) {
|
||||
require LasTres::Word::Devota;
|
||||
if ($word->identifier eq LasTres::Word::Devota->instance->identifier) {
|
||||
$self->word_devota($pj);
|
||||
return;
|
||||
}
|
||||
if ($word->identifier eq LasTres::Word::Ayazel->instance->identifier) {
|
||||
$self->word_ayazel($pj);
|
||||
return;
|
||||
}
|
||||
$self->word_unknown($pj);
|
||||
|
||||
}
|
||||
|
||||
sub word_devota($self, $pj) {
|
||||
$self->send_response_dialog(
|
||||
$pj,
|
||||
[
|
||||
{
|
||||
text => '¿Buscas a mi esposa? Seguramente este rezando o junto a ese'
|
||||
. ' chamán de pacotilla, suele rezar en ese pequeño santuario a'
|
||||
. ' Ayazel, visitalo ahora que todavía sigue en pie...'
|
||||
. ' Maldito sea el día que le enseñé a la gente a edificar'
|
||||
. ' en piedra.'
|
||||
}
|
||||
]
|
||||
);
|
||||
$pj->teach_word( LasTres::Word::Ayazel->instance );
|
||||
}
|
||||
|
||||
sub word_ayazel($self, $pj) {
|
||||
$self->send_response_dialog(
|
||||
$pj,
|
||||
[
|
||||
{
|
||||
text => 'Eso de la Diosa de la Luna me parece una tontería, no me'
|
||||
. ' creo ni una palabra y ese chamán es un charlantán, pero creo'
|
||||
. ' que algo tiene que haber. Los cálizor tenemos nuestro propio Dios y'
|
||||
. ' es mucho más interesante que esa Diosa. ¿Qué nos importa'
|
||||
. ' lo que pase en la Luna si vivimos en tierra firme?'
|
||||
}
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
sub word_unknown($self, $pj) {
|
||||
$self->send_response_dialog(
|
||||
$pj,
|
||||
[
|
||||
{
|
||||
text => 'Mmmm, me lo tengo que pensar.'
|
||||
}
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
sub identifier {
|
||||
return 'veterano_calizor_tribu_de_la_lima';
|
||||
}
|
||||
|
||||
# sub icon {
|
||||
# return '/img/anciano.png';
|
||||
# }
|
||||
|
||||
sub name {
|
||||
return 'Veterano Cálizor';
|
||||
}
|
||||
|
||||
sub verb ( $self, $pj ) {
|
||||
return 'vocifera';
|
||||
}
|
||||
|
||||
sub wordlessly_talk ( $self, $pj ) {
|
||||
if ($pj->get_flag(LasTres::Flags::TALKED_FIRST_TIME_VETERANO_CALIZOR)) {
|
||||
$self->send_response_dialog(
|
||||
$pj,
|
||||
[
|
||||
{
|
||||
text => 'Echo de menos la cerveza de mi tierra, pero no volvería allí ni'
|
||||
. ' loco, y eso a pesar de esos malditos conejos que no nos dejan vivir.'
|
||||
}
|
||||
]
|
||||
);
|
||||
return;
|
||||
}
|
||||
$self->send_response_dialog(
|
||||
$pj,
|
||||
[
|
||||
{
|
||||
text => (
|
||||
'¿Ya te quieres marchar de la tribu hacia la torre?'
|
||||
. ' ¡Qué rápido creceis los jovenes!'
|
||||
. ' ¡Cuando te conocí me llegabas por aquí!.- Con su mano se señala la rodilla.-'
|
||||
. ' Este bosque es un lugar peligroso y endiablado, deberías quedarte aquí,'
|
||||
. ' tendrías más seguridad y harías feliz a este pobre viejo.'
|
||||
. ' ¿Qué ya lo tienes decidido? No puedo hacer nada para'
|
||||
. ' evitar que persigas tus sueños, en ese caso ven a buscarme'
|
||||
. ' más tarde, estoy preparandote una sorpresa que quizás'
|
||||
. ' te proteja aunque yo no esté.'
|
||||
|
||||
)
|
||||
}
|
||||
]
|
||||
);
|
||||
$pj->set_flag(LasTres::Flags::TALKED_FIRST_TIME_VETERANO_CALIZOR);
|
||||
}
|
||||
1;
|
21
lib/LasTres/Word/Ayazel.pm
Normal file
21
lib/LasTres/Word/Ayazel.pm
Normal file
@ -0,0 +1,21 @@
|
||||
package LasTres::Word::Ayazel;
|
||||
|
||||
use v5.36.0;
|
||||
use strict;
|
||||
use warnings;
|
||||
use utf8;
|
||||
|
||||
use feature 'signatures';
|
||||
|
||||
use Moo;
|
||||
|
||||
with 'LasTres::Word';
|
||||
|
||||
sub name {
|
||||
return 'Ayazel';
|
||||
}
|
||||
|
||||
sub identifier {
|
||||
return 'ayazel';
|
||||
}
|
||||
1;
|
@ -1,3 +1,6 @@
|
||||
html, body {
|
||||
overscroll-behavior-y: contain; }
|
||||
|
||||
@keyframes move-avatar {
|
||||
0% {
|
||||
padding-bottom: 0rem; }
|
||||
@ -9,7 +12,7 @@
|
||||
body {
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
height: 100vh;
|
||||
height: 100%;
|
||||
background: ghostwhite; }
|
||||
body div.talk-npc div.detail {
|
||||
display: flex;
|
||||
@ -22,9 +25,11 @@ body {
|
||||
justify-content: center; }
|
||||
body div.talk-npc div.name-container {
|
||||
display: flex;
|
||||
padding: 10px; }
|
||||
padding: 10px;
|
||||
align-items: center; }
|
||||
body div.talk-npc div.name-container div.avatar {
|
||||
width: 100%;
|
||||
max-width: 60%;
|
||||
max-height: 8rem;
|
||||
aspect-ratio: 1/1;
|
||||
border-radius: 50%;
|
||||
background: lightgray;
|
||||
@ -49,6 +54,7 @@ body {
|
||||
border-radius: 50%; }
|
||||
body div.talk-npc div.name-container div.name {
|
||||
width: 100%;
|
||||
font-size: 0.85rem;
|
||||
display: flex;
|
||||
align-items: center; }
|
||||
body div.talk-npc div.buttons {
|
||||
@ -56,6 +62,7 @@ body {
|
||||
body label.bar-container {
|
||||
width: 90%; }
|
||||
body label.bar-container div.bar {
|
||||
margin-left: 3px;
|
||||
width: 100%;
|
||||
height: 1em;
|
||||
border: solid 1px black; }
|
||||
@ -75,9 +82,14 @@ body {
|
||||
text-decoration: none; }
|
||||
body div.pj-list-item {
|
||||
display: flex;
|
||||
font-size: 0.85rem;
|
||||
align-items: center; }
|
||||
body div.pj-list-item label.bar-container {
|
||||
display: flex;
|
||||
font-family: monospace; }
|
||||
body div.pj-list-item div.avatar {
|
||||
width: 30%;
|
||||
max-width: 60%;
|
||||
max-height: 8rem;
|
||||
aspect-ratio: 1/1;
|
||||
border-radius: 50%;
|
||||
background: lightgray;
|
||||
@ -101,20 +113,29 @@ body {
|
||||
background: darkgray;
|
||||
border-radius: 50%; }
|
||||
body div.pj-list-item div.data {
|
||||
width: 60%; }
|
||||
width: 50%; }
|
||||
body div.pj-list-item div.data p {
|
||||
margin: 0; }
|
||||
body div.presentation {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
width: 95%;
|
||||
justify-content: center;
|
||||
height: 50vh; }
|
||||
height: 50%; }
|
||||
body div.presentation div.presentation-item {
|
||||
margin: 1%;
|
||||
width: 30%;
|
||||
font-size: 30px;
|
||||
font-size: 1.7rem;
|
||||
overflow-y: scroll; }
|
||||
body div.presentation div.presentation-item code pre {
|
||||
body div.presentation div.presentation-item * {
|
||||
overflow-wrap: break-word;
|
||||
white-space: pre-wrap; }
|
||||
body div.presentation div.presentation-item code {
|
||||
overflow-wrap: break-word; }
|
||||
body div.presentation div.presentation-item code pre {
|
||||
white-space: pre-wrap; }
|
||||
body div.presentation div.presentation-item div.movement-menu {
|
||||
font-size: 15px; }
|
||||
body div.width-max-content {
|
||||
width: max-content; }
|
||||
body div#game-container {
|
||||
@ -261,7 +282,7 @@ body {
|
||||
color: black;
|
||||
display: flex;
|
||||
border: 1px solid black;
|
||||
font-size: 30px;
|
||||
font-size: 1.7rem;
|
||||
height: 50px;
|
||||
text-align: center;
|
||||
flex-direction: column;
|
||||
|
@ -1,3 +1,7 @@
|
||||
html, body {
|
||||
overscroll-behavior-y: contain;
|
||||
}
|
||||
|
||||
$padding_select_word: 10px;
|
||||
@keyframes move-avatar {
|
||||
0% {
|
||||
@ -13,7 +17,7 @@ $padding_select_word: 10px;
|
||||
body {
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
height: 100vh;
|
||||
height: 100%;
|
||||
background: ghostwhite;
|
||||
div.talk-npc {
|
||||
div.detail {
|
||||
@ -29,8 +33,10 @@ body {
|
||||
div.name-container {
|
||||
display: flex;
|
||||
padding: 10px;
|
||||
align-items: center;
|
||||
div.avatar {
|
||||
width: 100%;
|
||||
max-width: 60%;
|
||||
max-height: 8rem;
|
||||
aspect-ratio: 1/1;
|
||||
border-radius: 50%;
|
||||
background: lightgray;
|
||||
@ -58,6 +64,7 @@ body {
|
||||
}
|
||||
div.name {
|
||||
width: 100%;
|
||||
font-size: 0.85rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
@ -69,6 +76,7 @@ body {
|
||||
label.bar-container {
|
||||
width: 90%;
|
||||
div.bar {
|
||||
margin-left: 3px;
|
||||
width: 100%;
|
||||
height: 1em;
|
||||
border: solid 1px black;
|
||||
@ -93,9 +101,15 @@ body {
|
||||
}
|
||||
div.pj-list-item {
|
||||
display: flex;
|
||||
font-size: 0.85rem;
|
||||
align-items: center;
|
||||
label.bar-container {
|
||||
display: flex;
|
||||
font-family: monospace;
|
||||
}
|
||||
div.avatar {
|
||||
width: 30%;
|
||||
max-width: 60%;
|
||||
max-height: 8rem;
|
||||
aspect-ratio: 1/1;
|
||||
border-radius: 50%;
|
||||
background: lightgray;
|
||||
@ -122,7 +136,10 @@ body {
|
||||
}
|
||||
}
|
||||
div.data {
|
||||
width: 60%;
|
||||
width: 50%;
|
||||
p {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -132,17 +149,25 @@ body {
|
||||
width: 95%;
|
||||
justify-content: center;
|
||||
div.presentation-item {
|
||||
* {
|
||||
overflow-wrap: break-word;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
code {
|
||||
overflow-wrap: break-word;
|
||||
pre {
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
}
|
||||
margin: 1%;
|
||||
width: 30%;
|
||||
font-size: 30px;
|
||||
font-size: 1.7rem;
|
||||
overflow-y: scroll;
|
||||
div.movement-menu {
|
||||
font-size: 15px;
|
||||
}
|
||||
}
|
||||
height: 50vh;
|
||||
height: 50%;
|
||||
}
|
||||
|
||||
div.width-max-content {
|
||||
@ -317,7 +342,7 @@ body {
|
||||
color: black;
|
||||
display: flex;
|
||||
border: 1px solid black;
|
||||
font-size: 30px;
|
||||
font-size: 1.7rem;
|
||||
height: 50px;
|
||||
text-align: center;
|
||||
flex-direction: column;
|
||||
|
File diff suppressed because one or more lines are too long
@ -1,13 +1,13 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<link rel="stylesheet" href="/css/styles.css"/>
|
||||
<link rel="stylesheet" href="/css/styles.css?id=<%=int(rand(1000000))%>"/>
|
||||
<meta name="viewport" content="height = device-height,
|
||||
width = device-width,
|
||||
initial-scale = 1.0,
|
||||
minimum-scale = 1.0,
|
||||
maximum-scale = 1.0,
|
||||
user-scalable = no,
|
||||
user-scalable = yes,
|
||||
target-densitydpi = device-dpi"/>
|
||||
</head>
|
||||
<body>
|
||||
@ -16,6 +16,6 @@
|
||||
</noscript>
|
||||
<div id="game-container">
|
||||
</div>
|
||||
<script src="/js/bundle.js"></script>
|
||||
<script src="/js/bundle.js?id=<%=int(rand(1000000))%>"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
Loading…
Reference in New Issue
Block a user