327 lines
8.0 KiB
C
327 lines
8.0 KiB
C
#include "npc_lua.h"
|
|
#include "util.h"
|
|
#include "char.h"
|
|
#include "char_base.h"
|
|
#include "anim_tbl.h"
|
|
#include "object.h"
|
|
#include "net.h"
|
|
#include "npcutil.h"
|
|
#include "npc_eventaction.h"
|
|
#include "battle.h"
|
|
#include "readmap.h"
|
|
#include "item.h"
|
|
#include "npc_lua.h"
|
|
#define _JZ_NEWSCRIPT_LUA
|
|
|
|
#ifdef _ALLBLUE_LUAscript
|
|
/*
|
|
char *MAP_getFloorName( int floor)
|
|
*/
|
|
int NPC_ABLua_map_getFloorName(lua_State *_NLL)
|
|
{
|
|
CheckEx(_NLL, 1);
|
|
CheckIndexNull(_NLL, 1);
|
|
|
|
int Floorid = (int)lua_tointeger(_NLL, 1);
|
|
|
|
LRetMsg(_NLL , MAP_getFloorName(Floorid));
|
|
|
|
}
|
|
int NPC_ABLua_map_getfloorX(lua_State *_NLL)
|
|
{
|
|
CheckEx(_NLL, 1);
|
|
CheckIndexNull(_NLL, 1);
|
|
|
|
int Floorid = (int)lua_tointeger(_NLL, 1);
|
|
|
|
LRetMsg(_NLL , MAP_getfloorX(Floorid));
|
|
|
|
}
|
|
int NPC_ABLua_map_getfloorY(lua_State *_NLL)
|
|
{
|
|
CheckEx(_NLL, 1);
|
|
CheckIndexNull(_NLL, 1);
|
|
|
|
int Floorid = (int)lua_tointeger(_NLL, 1);
|
|
|
|
LRetMsg(_NLL , MAP_getfloorY(Floorid));
|
|
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|
|
|
int NPC_Lua_Map_CheckCoordinates(lua_State *_NLL) //检测某点是否在地图范围内。
|
|
{
|
|
CheckEx(_NLL, 3);
|
|
CheckIndexNull(_NLL, 1);
|
|
int map = (int)lua_tointeger(_NLL, 1);
|
|
int x = (int)lua_tointeger(_NLL, 2);
|
|
int y = (int)lua_tointeger(_NLL, 3);
|
|
BOOL RETBOOL = MAP_checkCoordinates(map,x,y);
|
|
LRetBool(_NLL, RETBOOL);
|
|
}
|
|
|
|
|
|
int NPC_Lua_Map_GetExitFloorXY(lua_State *_NLL) //检测地图是否支持登出
|
|
{
|
|
CheckEx(_NLL, 1);
|
|
CheckIndexNull(_NLL, 1);
|
|
int map = (int)lua_tointeger(_NLL, 1);
|
|
int maparray[3];
|
|
int map_type=0;
|
|
unsigned int point;
|
|
point = MAP_getExFloor_XY( map , &map_type);
|
|
if( point > 0 ) {
|
|
if( map_type >= 0 ) { // map_type >= 0 优先回纪录点
|
|
if( map == map_type && map >= 0 ) {//回纪录点
|
|
}else {
|
|
maparray[0] = (point>>16)&0xffffff;
|
|
maparray[1] = (point>>8)&0xff;
|
|
maparray[2] = (point>>0)&0xff;
|
|
}
|
|
}
|
|
}
|
|
else if( map == 10032 ){
|
|
maparray[0] = 10030;
|
|
maparray[1] = 52;
|
|
maparray[2] = 36;
|
|
}
|
|
#ifdef _MAP_TIME
|
|
else if (map >= 30017 && map >= 30021)
|
|
{
|
|
maparray[0]= 30008;
|
|
maparray[1] = 39;
|
|
maparray[2] = 39;
|
|
}
|
|
#endif
|
|
else {
|
|
maparray[0] = map;
|
|
maparray[1] = 0;
|
|
maparray[2] = 0;
|
|
}
|
|
LRetArray(_NLL,maparray,arraysizeof(maparray));
|
|
}
|
|
|
|
int NPC_Lua_Map_GetfloorX(lua_State *_NLL) //获取地图X长度
|
|
{
|
|
CheckEx(_NLL, 1);
|
|
CheckIndexNull(_NLL, 1);
|
|
int map = (int)lua_tointeger(_NLL, 1);
|
|
int x;
|
|
x = MAP_getfloorX(map);
|
|
LRetInt(_NLL, x);
|
|
}
|
|
|
|
int NPC_Lua_Map_GetfloorY(lua_State *_NLL) //获取地图Y长度
|
|
{
|
|
CheckEx(_NLL, 1);
|
|
CheckIndexNull(_NLL, 1);
|
|
int map = (int)lua_tointeger(_NLL, 1);
|
|
int y;
|
|
y = MAP_getfloorX(map);
|
|
LRetInt(_NLL, y);
|
|
}
|
|
|
|
int NPC_Lua_Map_GetTileAndObjId(lua_State *_NLL) //获取地图某点的地板和装饰层
|
|
{
|
|
CheckEx(_NLL, 3);
|
|
CheckIndexNull(_NLL, 1);
|
|
int map = (int)lua_tointeger(_NLL, 1);
|
|
int x = (int)lua_tointeger(_NLL, 2);
|
|
int y = (int)lua_tointeger(_NLL, 3);
|
|
int *tile = -1, *obj = -1;
|
|
MAP_getTileAndObjData(map,x,y,&tile,&obj);
|
|
int maparray[2];
|
|
maparray[0]=tile;
|
|
maparray[1]=obj;
|
|
LRetArray(_NLL,maparray,arraysizeof(maparray));
|
|
}
|
|
|
|
int NPC_Lua_Map_SetTileAndObjId(lua_State *_NLL) //设置地图某点的地板和装饰层
|
|
{
|
|
CheckEx(_NLL, 5);
|
|
CheckIndexNull(_NLL, 1);
|
|
int map = (int)lua_tointeger(_NLL, 1);
|
|
int x = (int)lua_tointeger(_NLL, 2);
|
|
int y = (int)lua_tointeger(_NLL, 3);
|
|
int tile = (int)lua_tointeger(_NLL, 4);
|
|
int obj = (int)lua_tointeger(_NLL, 5);
|
|
if (MAP_setTileAndObjData(map,x,y,tile,obj)) LRetInt(_NLL, 0);
|
|
LRetInt(_NLL, -1);
|
|
}
|
|
|
|
int NPC_Lua_Map_GetWalkAbleFromPoint(lua_State *_NLL) //获取某点是否可以行走
|
|
{
|
|
CheckEx2(_NLL, 3,4);
|
|
CheckIndexNull(_NLL, 1);
|
|
int TM_Top = lua_gettop(_NLL);
|
|
int map = (int)lua_tointeger(_NLL, 1);
|
|
int x = (int)lua_tointeger(_NLL, 2);
|
|
int y = (int)lua_tointeger(_NLL, 3);
|
|
BOOL IsFly = FALSE;
|
|
if(TM_Top==4){
|
|
IsFly = (BOOL)lua_toboolean(_NLL, 4);
|
|
}
|
|
IsFly = MAP_walkAbleFromPoint(map,x,y,IsFly);
|
|
LRetBool(_NLL, IsFly);
|
|
}
|
|
|
|
int NPC_Lua_Map_GetImageData(lua_State *_NLL) //获取图片数据
|
|
{
|
|
CheckEx(_NLL, 2);
|
|
CheckIndexNull(_NLL, 1);
|
|
int MapImageid = (int)lua_tointeger(_NLL, 1);
|
|
int flg = (int)lua_tointeger(_NLL, 2);
|
|
if(flg >= 0)
|
|
{
|
|
if(flg < LUA_DATALINE1)
|
|
{
|
|
flg -= LUA_DATALINE0;
|
|
int TM_RetInt = MAP_getImageInt(MapImageid, flg);
|
|
LRetInt(_NLL, TM_RetInt);
|
|
}
|
|
}
|
|
LRetErrNull(_NLL, "传入的标志是错误的。");
|
|
}
|
|
int NPC_Lua_Map_SetImageData(lua_State *_NLL) //设置图片数据
|
|
{
|
|
CheckEx(_NLL, 3);
|
|
CheckIndexNull(_NLL, 1);
|
|
int MapImageid = (int)lua_tointeger(_NLL, 1);
|
|
int flg = (int)lua_tointeger(_NLL, 2);
|
|
int val = (int)lua_tointeger(_NLL, 3);
|
|
if(flg >= 0)
|
|
{
|
|
if(flg < LUA_DATALINE1)
|
|
{
|
|
flg -= LUA_DATALINE0;
|
|
BOOL TM_RetBool = MAP_setImageInt(MapImageid, flg, val);
|
|
LRetBool(_NLL, TM_RetBool);
|
|
}
|
|
}
|
|
LRetErrNull(_NLL, "传入的标志是错误的。");
|
|
}
|
|
static OBJECT TM_Object = NULL;
|
|
int NPC_Lua_Map_GetTopObj(lua_State *_NLL) //用来获取地图某点上对象
|
|
{
|
|
CheckEx(_NLL, 3);
|
|
CheckIndexNull(_NLL, 1);
|
|
int map = (int)lua_tointeger(_NLL, 1);
|
|
int x = (int)lua_tointeger(_NLL, 2);
|
|
int y = (int)lua_tointeger(_NLL, 3);
|
|
TM_Object = MAP_getTopObj( map, x, y) ;
|
|
LRetBool(_NLL, TRUE);
|
|
}
|
|
|
|
int NPC_Lua_Map_GetNextObj(lua_State *_NLL) //获取下一个对象索引
|
|
{
|
|
CheckEx(_NLL, 0);
|
|
int TM_ObjIndex = GET_OBJINDEX(TM_Object);
|
|
TM_Object = NEXT_OBJECT(TM_Object);
|
|
if( !CHECKOBJECTUSE(TM_ObjIndex) )
|
|
{
|
|
LRetInt(_NLL, -1);
|
|
TM_Object = NULL;
|
|
}
|
|
LRetInt(_NLL, TM_ObjIndex);
|
|
}
|
|
|
|
int NPC_Lua_Map_CheckImageIndex(lua_State *_NLL) //检测某地图号图片是否存在
|
|
{
|
|
CheckEx(_NLL, 1);
|
|
CheckIndexNull(_NLL, 1);
|
|
int map = (int)lua_tointeger(_NLL, 1);
|
|
BOOL TM_Ret = IsValidImagenumber( map) ;
|
|
LRetBool(_NLL, TM_Ret);
|
|
}
|
|
|
|
int NPC_Lua_Map_CheckIndex(lua_State *_NLL) //检测某地图号地图是否存在
|
|
{
|
|
CheckEx(_NLL, 1);
|
|
CheckIndexNull(_NLL, 1);
|
|
int map = (int)lua_tointeger(_NLL, 1);
|
|
BOOL TM_Ret = CHECKFLOORID( map) ;
|
|
LRetBool(_NLL, TM_Ret);
|
|
}
|
|
|
|
int NPC_Lua_Map_MakeNewMap(lua_State *_NLL) //制造一个副本地图,并返回新地图号
|
|
{
|
|
CheckEx2(_NLL, 1, 2);
|
|
CheckIndexNull(_NLL, 1);
|
|
int TM_Top = lua_gettop(_NLL);
|
|
int map = (int)lua_tointeger(_NLL, 1);
|
|
char *name = "";
|
|
if(TM_Top == 2)
|
|
{
|
|
CheckIndexNull(_NLL, 2);
|
|
name = lua_tostring(_NLL, 2);
|
|
}
|
|
int TM_Ret = MAP_makenew( map,name) ;
|
|
LRetInt(_NLL, TM_Ret);
|
|
}
|
|
|
|
int NPC_Lua_Map_DelNewMap(lua_State *_NLL) //删除一个副本地图
|
|
{
|
|
CheckEx(_NLL, 1);
|
|
CheckIndexNull(_NLL, 1);
|
|
int map = (int)lua_tointeger(_NLL, 1);
|
|
BOOL TM_Ret = MAP_DelMap( map) ;
|
|
LRetBool(_NLL, TM_Ret);
|
|
}
|
|
|
|
int NPC_Lua_Map_SetExWarp(lua_State *_NLL) //设置一个地图的退出传送点
|
|
{
|
|
CheckEx(_NLL, 5);
|
|
CheckIndexNull(_NLL, 1);
|
|
int map = (int)lua_tointeger(_NLL, 1);
|
|
int exfl = (int)lua_tointeger(_NLL, 2);
|
|
int exx = (int)lua_tointeger(_NLL, 3);
|
|
int exy = (int)lua_tointeger(_NLL, 4);
|
|
int type = (int)lua_tointeger(_NLL, 4);//地图类型
|
|
BOOL TM_Ret = MAP_SetExWarp( map, exfl,exx,exy,type) ;
|
|
LRetBool(_NLL, TM_Ret);
|
|
}
|
|
|
|
int NPC_Lua_Map_SetMapPoint(lua_State *_NLL) //设置一个地图传送点 返回一个传送点索引
|
|
{
|
|
CheckEx(_NLL, 1);
|
|
CheckIndexNull(_NLL, 1);
|
|
char* mappoint = lua_tostring(_NLL, 1);
|
|
int TM_Ret = SetMapPoint( mappoint) ;
|
|
LRetInt(_NLL, TM_Ret);
|
|
}
|
|
|
|
int NPC_Lua_Map_DelMapPoint(lua_State *_NLL) //删除一个传送点
|
|
{
|
|
CheckEx(_NLL, 1);
|
|
CheckIndexNull(_NLL, 1);
|
|
int ps = (int)lua_tointeger(_NLL, 1);
|
|
BOOL TM_Ret = DelMapPoint( ps) ;
|
|
LRetBool(_NLL, TM_Ret);
|
|
}
|
|
|
|
int NPC_Lua_Map_getFloorName(lua_State *_NLL) //返回一个地图名
|
|
{
|
|
CheckEx(_NLL, 1);
|
|
CheckIndexNull(_NLL, 1);
|
|
int MapID = (int)lua_tointeger(_NLL, 1);
|
|
char *MapName = MAP_getFloorName( MapID) ;
|
|
LRetMsg(_NLL, MapName);
|
|
}
|
|
/*
|
|
int NPC_Lua_Map_Upmap(lua_State *_NLL) //更新地图
|
|
{
|
|
CheckEx(_NLL, 3);
|
|
CheckIndexNull(_NLL, 1);
|
|
int TM_Index = (int)lua_tointeger(_NLL, 1);
|
|
int formatmap = (int)lua_tointeger(_NLL, 2);
|
|
int tomap = (int)lua_tointeger(_NLL, 3);
|
|
lssproto_Upmap_send(TM_Index,formatmap,tomap);
|
|
LRetBool(_NLL, TRUE);
|
|
}
|
|
*/
|
|
|
|
|