summaryrefslogblamecommitdiff
path: root/src/map/script-call-internal.hpp
blob: e10a859919a25dc47d6d4d1d24a0bf789347b70b (plain) (tree)
















































































                                                                                               
                                                                                    





                                                   
                                                                                







                                                               
#pragma once
//    script-call-internal.hpp - EAthena script frontend, engine, and library.
//
//    Copyright © ????-2004 Athena Dev Teams
//    Copyright © 2004-2011 The Mana World Development Team
//    Copyright © 2011-2014 Ben Longbons <b.r.longbons@gmail.com>
//
//    This file is part of The Mana World (Athena server)
//
//    This program is free software: you can redistribute it and/or modify
//    it under the terms of the GNU General Public License as published by
//    the Free Software Foundation, either version 3 of the License, or
//    (at your option) any later version.
//
//    This program is distributed in the hope that it will be useful,
//    but WITHOUT ANY WARRANTY; without even the implied warranty of
//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//    GNU General Public License for more details.
//
//    You should have received a copy of the GNU General Public License
//    along with this program.  If not, see <http://www.gnu.org/licenses/>.

#include "script-call.hpp"
#include "fwd.hpp"

#include "../mmo/ids.hpp"

#include "script-persist.hpp"


namespace tmwa
{
enum class VariableCode : uint8_t
{
    PARAM,
    VARIABLE,
};

struct script_stack
{
    std::vector<struct script_data> stack_datav;
};

enum class ScriptEndState;
// future improvements coming!
class ScriptState
{
public:
    struct script_stack *stack;
    int start, end;
    ScriptEndState state;
    BlockId rid, oid;
    ScriptPointer scriptp, new_scriptp;
    int defsp, new_defsp;
};

void run_func(ScriptState *st);

enum class ScriptEndState
{
    ZERO,
    STOP,
    END,
    RERUNLINE,
    GOTO,
    RETFUNC,
};

dumb_ptr<map_session_data> script_rid2sd(ScriptState *st);
void get_val(dumb_ptr<map_session_data> sd, struct script_data *data);
__attribute__((deprecated))
void get_val(ScriptState *st, struct script_data *data);
struct script_data get_val2(ScriptState *st, SIR reg);
void set_reg(dumb_ptr<map_session_data> sd, VariableCode type, SIR reg, struct script_data vd);
void set_reg(dumb_ptr<map_session_data> sd, VariableCode type, SIR reg, int id);
void set_reg(dumb_ptr<map_session_data> sd, VariableCode type, SIR reg, RString zd);
__attribute__((warn_unused_result))
RString conv_str(ScriptState *st, struct script_data *data);
__attribute__((warn_unused_result))
int conv_num(ScriptState *st, struct script_data *data);
__attribute__((warn_unused_result))
Borrowed<const ScriptBuffer> conv_script(ScriptState *st, struct script_data *data);

template<class T>
void push_int(struct script_stack *stack, int val);
template<class T>
void push_reg(struct script_stack *stack, SIR reg);
template<class T>
void push_script(struct script_stack *stack, Borrowed<const ScriptBuffer> code);
template<class T>
void push_str(struct script_stack *stack, RString str);

void push_copy(struct script_stack *stack, int pos_);
void pop_stack(struct script_stack *stack, int start, int end);
} // namespace tmwa

#include "script-call-internal.tcc"