first pass

This commit is contained in:
Aaron Kimbre 2022-02-19 22:36:33 -06:00
parent 2e82f94b9d
commit a66e4aaf80
7 changed files with 115 additions and 6 deletions

View File

@ -5,8 +5,12 @@ from datatables import ColumnDT, DataTables
import datetime, time import datetime, time
from app.models import CharacterInfo, CharacterXML, Account, db from app.models import CharacterInfo, CharacterXML, Account, db
from app.schemas import CharacterInfoSchema from app.schemas import CharacterInfoSchema
from app.forms import RescueForm
from app import gm_level, log_audit from app import gm_level, log_audit
from app.luclient import translate_from_locale
import xmltodict import xmltodict
import xml.etree.ElementTree as ET
character_blueprint = Blueprint('characters', __name__) character_blueprint = Blueprint('characters', __name__)
@ -92,7 +96,6 @@ def view(id):
@character_blueprint.route('/view_xml/<id>', methods=['GET']) @character_blueprint.route('/view_xml/<id>', methods=['GET'])
@login_required @login_required
@gm_level(9)
def view_xml(id): def view_xml(id):
character_data = CharacterInfo.query.filter(CharacterInfo.id == id).first() character_data = CharacterInfo.query.filter(CharacterInfo.id == id).first()
@ -101,6 +104,11 @@ def view_xml(id):
abort(404) abort(404)
return return
if current_user.gm_level < 3:
if character_data.account_id and character_data.account_id != current_user.id:
abort(403)
return
character_xml = CharacterXML.query.filter( character_xml = CharacterXML.query.filter(
CharacterXML.id==id CharacterXML.id==id
).first().xml_data ).first().xml_data
@ -111,7 +119,6 @@ def view_xml(id):
@character_blueprint.route('/get_xml/<id>', methods=['GET']) @character_blueprint.route('/get_xml/<id>', methods=['GET'])
@login_required @login_required
@gm_level(9)
def get_xml(id): def get_xml(id):
character_data = CharacterInfo.query.filter(CharacterInfo.id == id).first() character_data = CharacterInfo.query.filter(CharacterInfo.id == id).first()
@ -119,6 +126,10 @@ def get_xml(id):
if character_data == {}: if character_data == {}:
abort(404) abort(404)
return return
if current_user.gm_level < 3:
if character_data.account_id and character_data.account_id != current_user.id:
abort(403)
return
character_xml = CharacterXML.query.filter( character_xml = CharacterXML.query.filter(
CharacterXML.id==id CharacterXML.id==id
@ -158,6 +169,42 @@ def restrict(id, bit):
return redirect(request.referrer if request.referrer else url_for("main.index")) return redirect(request.referrer if request.referrer else url_for("main.index"))
@character_blueprint.route('/rescue/<id>', methods=['GET', 'POST'])
@login_required
@gm_level(3)
def rescue(id):
form = RescueForm()
character_data = CharacterXML.query.filter(
CharacterXML.id==id
).first()
character_xml = ET.XML(character_data.xml_data)
for zone in character_xml.findall('.//r'):
if int(zone.attrib["w"]) % 100 == 0:
form.save_world.choices.append(
(
zone.attrib["w"],
translate_from_locale(f"ZoneTable_{zone.attrib['w']}_DisplayDescription")
)
)
if form.validate_on_submit():
new_zone = character_xml.find(f'.//r[@w="{form.save_world.data}"]')
char = character_xml.find(".//char")
char.attrib["lzx"] = new_zone.attrib["x"]
char.attrib["lzy"] = new_zone.attrib["y"]
char.attrib["lzz"] = new_zone.attrib["z"]
char.attrib["lzid"] = form.save_world.data
character_data.xml_data = ET.tostring(character_xml)
character_data.save()
return redirect(url_for('characters.view', id=id))
return render_template("character/rescue.html.j2", form=form)
@character_blueprint.route('/get/<status>', methods=['GET']) @character_blueprint.route('/get/<status>', methods=['GET'])
@login_required @login_required
@gm_level(3) @gm_level(3)

View File

@ -171,3 +171,17 @@ class SendMailForm(FlaskForm):
) )
submit = SubmitField('Submit') submit = SubmitField('Submit')
class RescueForm(FlaskForm):
save_world = SelectField(
'Move to:',
coerce=str,
choices=[
("",""),
],
validators=[validators.DataRequired()]
)
submit = SubmitField('Submit')

View File

@ -25,7 +25,6 @@ def send():
form = SendMailForm() form = SendMailForm()
if request.method == "POST": if request.method == "POST":
# if form.validate_on_submit():
if form.attachment.data != "0" and form.attachment_count.data == 0: if form.attachment.data != "0" and form.attachment_count.data == 0:
form.attachment_count.data = 1 form.attachment_count.data = 1
if form.recipient.data == "0": if form.recipient.data == "0":

View File

@ -1,11 +1,11 @@
{% extends 'base.html.j2' %} {% extends 'base.html.j2' %}
{% block title %} {% block title %}
Account Management Character Management
{% endblock title %} {% endblock title %}
{% block content_before %} {% block content_before %}
Account Management Character Management
{% endblock content_before %} {% endblock content_before %}
{% block content %} {% block content %}

View File

@ -0,0 +1,21 @@
{% extends 'base.html.j2' %}
{% block title %}
Character Rescue
{% endblock title %}
{% block content_before %}
Character Rescue
{% endblock content_before %}
{% block content %}
<form method=post>
{{ form.csrf_token }}
<div class="card shadow-sm mx-auto pb-3 bg-dark border-primary" style="width: 20rem;">
<div class="card-body">
{{ helper.render_field(form.save_world) }}
{{ helper.render_submit_field(form.submit) }}
</div>
</div>
</form>
{% endblock %}

View File

@ -52,6 +52,24 @@
</div> </div>
{% else %} {% else %}
<br/> <br/>
<div class="row">
<div class="col text-center">
<a role="button" class="btn btn-primary btn-block"
href='{{ url_for('characters.view_xml', id=character.id) }}'>
View XML
</a>
</div>
</div>
<br/>
<div class="row">
<div class="col text-center">
<a role="button" class="btn btn-primary btn-block"
href='{{ url_for('characters.get_xml', id=character.id) }}'>
Download XML
</a>
</div>
</div>
<br/>
<div class="row"> <div class="row">
<div class="col text-center"> <div class="col text-center">
<a role="button" class="btn btn-primary btn-block" <a role="button" class="btn btn-primary btn-block"
@ -62,7 +80,7 @@
</div> </div>
{% endif %} {% endif %}
{% if current_user.id != character.account_id and current_user.gm_level > 2 %} {% if current_user.gm_level > 2 %}
<hr class="bg-primary"/> <hr class="bg-primary"/>
<div class="row"> <div class="row">
<div class="col text-center"> <div class="col text-center">
@ -83,6 +101,10 @@
</a> </a>
{% endif %} {% endif %}
<a role="button" class="btn btn-warning btn-block"
href='{{ url_for('characters.rescue', id=character.id) }}'>
Rescue
</a>
<a role="button" class="btn btn-primary btn-block" <a role="button" class="btn btn-primary btn-block"
href='{{ url_for('characters.restrict', id=character.id, bit=4) }}'> href='{{ url_for('characters.restrict', id=character.id, bit=4) }}'>
{% if character.permission_map|check_perm_map(4) %}Unrestrict{% else %}Restrict{% endif %} Trade {% if character.permission_map|check_perm_map(4) %}Unrestrict{% else %}Restrict{% endif %} Trade

View File

@ -3,5 +3,11 @@
# unzip brickdb from client to the right places # unzip brickdb from client to the right places
unzip -n -q /app/luclient/res/brickdb.zip -d app/luclient/res/ unzip -n -q /app/luclient/res/brickdb.zip -d app/luclient/res/
# TODO: preconvert images options
# TODO: preconvery models options
# update the DB
flask db upgrade flask db upgrade
# RUNNNNNNNNNNNNN
gunicorn -b :8000 -w 4 wsgi:app gunicorn -b :8000 -w 4 wsgi:app