chuyiwen_gmsv/mylua/npcbase.c

608 lines
13 KiB
C
Raw Permalink Normal View History

2016-12-24 08:45:52 +08:00
#include <string.h>
#include "battle.h"
#include "char_base.h"
#include "npccreate.h"
#include "object.h"
#include "char.h"
#include "enemy.h"
#include "char_base.h"
#include "npc_eventaction.h"
#include "lua.h"
#include "version.h"
#include "lauxlib.h"
#include "lualib.h"
#include "npcutil.h"
#include "log.h"
#ifdef _ALLBLUES_LUA
static int CreateNpc (lua_State *L) {
Char one;
size_t l;
CHAR_getDefaultChar( &one, 0);
one.data[CHAR_WHICHTYPE] = CHAR_TYPELUANPC;
char *Name = luaL_checklstring(L, 1, &l);
const int Image = luaL_checkinteger(L, 2);
const int Floor = luaL_checkinteger(L, 3);
const int x = luaL_checkinteger(L, 4);
const int y = luaL_checkinteger(L, 5);
const int dir = luaL_checkinteger(L, 6);
strcpysafe( one.string[CHAR_NAME].string ,
sizeof(one.string[CHAR_NAME].string),
Name);
one.data[CHAR_BASEBASEIMAGENUMBER] = Image;
one.data[CHAR_BASEIMAGENUMBER] = Image;
one.data[CHAR_FLOOR]=Floor;
one.data[CHAR_X]=x;
one.data[CHAR_Y]=y;
one.data[CHAR_DIR] = dir;
int npcindex = CHAR_initCharOneArray(&one);
if( npcindex < 0 ) {
print( "NPC<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܡ<EFBFBD>\n");
}
Object object;
int objindex;
object.type = OBJTYPE_CHARA;
object.index = npcindex;
object.x =CHAR_getInt(npcindex, CHAR_X);
object.y = CHAR_getInt(npcindex, CHAR_Y);
object.floor = CHAR_getInt(npcindex, CHAR_FLOOR);
objindex = initObjectOne( &object );
if( objindex == -1 ) {
CHAR_endCharOneArray( npcindex );
}else {
CHAR_setWorkInt( npcindex,CHAR_WORKOBJINDEX, objindex );
CHAR_LoginBesideSetWorkInt( npcindex, -1 );
}
lua_pushinteger(L, npcindex);
return 1;
}
#ifdef _DEL_FAME
static int DelFame (lua_State *L)
{
size_t l;
const int index = luaL_checkint(L, 1);
char *data = luaL_checklstring(L, 2, &l);
NPC_ActionDelFame(index, data);
return 1;
}
#endif
static int AddGold (lua_State *L)
{
size_t l;
const int index = luaL_checkint(L, 1);
char *data = luaL_checklstring(L, 2, &l);
NPC_ActionAddGold2(index, data);
return 1;
}
static int DelGold (lua_State *L)
{
size_t l;
const int index = luaL_checkint(L, 1);
char *data = luaL_checklstring(L, 2, &l);
NPC_ActionDelGold(index, data);
return 1;
}
#ifdef _MOMENTUM_NPC
static int DelMom (lua_State *L)
{
size_t l;
const int index = luaL_checkint(L, 1);
char *data = luaL_checklstring(L, 2, &l);
NPC_ActionMomentum(index, data);
return 1;
}
#endif
#ifdef _DP_NPC
static int DelDP (lua_State *L)
{
size_t l;
const int index = luaL_checkint(L, 1);
char *data = luaL_checklstring(L, 2, &l);
NPC_ActionDP(index, data);
return 1;
}
#endif
static int DelItem (lua_State *L)
{
size_t l;
const int index = luaL_checkint(L, 1);
char *data = luaL_checklstring(L, 2, &l);
NPC_ActionDelItem(index, data);
return 1;
}
static int AddItem (lua_State *L)
{
size_t l;
const int index = luaL_checkint(L, 1);
char *data = luaL_checklstring(L, 2, &l);
NPC_ActionAddItem(index, data);
return 1;
}
static int AddPet (lua_State *L)
{
size_t l;
const int index = luaL_checkint(L, 1);
char *data = luaL_checklstring(L, 2, &l);
NPC_ActionAddPet(index, data);
return 1;
}
static int EvEnd (lua_State *L)
{
size_t l;
const int index = luaL_checkint(L, 1);
char *data = luaL_checklstring(L, 2, &l);
NPC_ActionSetEend(index, data);
return 1;
}
static int EvNow (lua_State *L)
{
size_t l;
const int index = luaL_checkint(L, 1);
char *data = luaL_checklstring(L, 2, &l);
NPC_ActionSetNow(index, data);
return 1;
}
static int Event_End (lua_State *L)
{
size_t l;
const int index = luaL_checkint(L, 1);
char *data = luaL_checklstring(L, 2, &l);
NPC_ActionSetEend(index, data);
return 1;
}
static int Event_Now (lua_State *L)
{
size_t l;
const int index = luaL_checkint(L, 1);
char *data = luaL_checklstring(L, 2, &l);
NPC_ActionSetNow(index, data);
return 1;
}
static int EvClr (lua_State *L)
{
size_t l;
const int index = luaL_checkint(L, 1);
char *data = luaL_checklstring(L, 2, &l);
NPC_ActionClearEvent(index, data);
return 1;
}
#ifdef _VIP_SHOP
static int VipItem (lua_State *L)
{
size_t l;
const int index = luaL_checkint(L, 1);
char *data = luaL_checklstring(L, 2, &l);
NPC_ActionVipItem(index, data);
return 1;
}
static int VipPet (lua_State *L)
{
size_t l;
const int index = luaL_checkint(L, 1);
char *data = luaL_checklstring(L, 2, &l);
NPC_ActionVipPet(index, data);
return 1;
}
#endif
#ifdef _NEW_VIP_SHOP
static int Vip_Item (lua_State *L)
{
size_t l;
const int index = luaL_checkint(L, 1);
char *data = luaL_checklstring(L, 2, &l);
NPC_ActionVipItem(index, data);
return 1;
}
static int Vip_Pet (lua_State *L)
{
size_t l;
const int index = luaL_checkint(L, 1);
char *data = luaL_checklstring(L, 2, &l);
NPC_ActionVipPet(index, data);
return 1;
}
#endif
#ifdef _NPC_ADDLEVELUP
static int SetLevel (lua_State *L)
{
size_t l;
const int index = luaL_checkint(L, 1);
char *data = luaL_checklstring(L, 2, &l);
NPC_ActionLevelAndTransUp( 0, index, atoi(data), 0, 0, -1);
return 1;
}
static int AddExps (lua_State *L)
{
size_t l;
const int index = luaL_checkint(L, 1);
char *data = luaL_checklstring(L, 2, &l);
NPC_ActionLevelAndTransUp( 0, index, 0, 0, atoi(data), -1);
return 1;
}
static int AddSkillPoint (lua_State *L)
{
size_t l;
const int index = luaL_checkint(L, 1);
char *data = luaL_checklstring(L, 2, &l);
NPC_ActionLevelAndTransUp( 0, index, 0, atoi(data), 0, -1);
return 1;
}
static int SetRideType (lua_State *L)
{
size_t l;
const int index = luaL_checkint(L, 1);
char *data = luaL_checklstring(L, 2, &l);
NPC_ActionLevelAndTransUp( 0, index, 0, 0, 0, atoi(data));
return 1;
}
#endif
static int isFaceToFace (lua_State *L)
{
const int meindex = luaL_checkint(L, 1);
const int talkerindex = luaL_checkint(L, 2);
if(NPC_Util_isFaceToFace( meindex ,talkerindex ,2)==FALSE){
if( NPC_Util_CharDistance( talkerindex ,meindex ) > 1) {
lua_pushinteger(L, 0);
return 1;
}
}
lua_pushinteger(L, 1);
return 1;
}
static int ActionPassCheck (lua_State *L)
{
size_t l;
const int meindex = luaL_checkint(L, 1);
const int toindex = luaL_checkint(L, 2);
char *data = luaL_checklstring(L, 3, &l);
if( NPC_ActionPassCheck( meindex, toindex, data) == FALSE ) {
lua_pushinteger(L, 0);
return 1;
}
lua_pushinteger(L, 1);
return 1;
}
#ifdef _ALLBLUES_LUA_1_1
static int SetPoint (lua_State *L)
{
const int meindex = luaL_checkint(L, 1);
const int ff = luaL_checkint(L, 2);
const int fx = luaL_checkint(L, 3);
const int fy = luaL_checkint(L, 4);
OBJECT_setFloor(CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), ff);
OBJECT_setX(CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), fx);
OBJECT_setY(CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), fy);
CHAR_setInt(meindex, CHAR_FLOOR, ff);
CHAR_setInt(meindex, CHAR_X, fx);
CHAR_setInt(meindex, CHAR_Y, fy);
CHAR_sendCDArroundChar( ff, fx, fy, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX));
return 1;
}
static int DelItemNum (lua_State *L)
{
size_t l;
const int index = luaL_checkint(L, 1);
char *data = luaL_checklstring(L, 2, &l);
char tmp[16];
int itemID = 0;
int itemNUM = 0;
if( getStringFromIndexWithDelim( data, ",", 1, tmp, sizeof( tmp)) != FALSE ){
itemID = atoi(tmp);
}
if( getStringFromIndexWithDelim( data, ",", 2, tmp, sizeof( tmp)) != FALSE ){
itemNUM = atoi(tmp);
}
int i, itemindex;
char token[256];
int num=0;
for( i = CHAR_STARTITEMARRAY ; i < CHAR_MAXITEMHAVE ; i++ ){
if(num >= itemNUM)break;
itemindex = CHAR_getItemIndex( index , i );
if( !ITEM_CHECKINDEX(itemindex) ) continue;
if( ITEM_getInt(itemindex, ITEM_ID) != itemID ) continue;
sprintf( token, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%s",ITEM_getChar( itemindex, ITEM_NAME));
CHAR_talkToCli( index, -1, token, CHAR_COLORYELLOW);
LogItem(
CHAR_getChar( index, CHAR_NAME ),
CHAR_getChar( index, CHAR_CDKEY ),
#ifdef _add_item_log_name // WON ADD <20><>item<65><6D>log<6F><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD>item<65><6D><EFBFBD><EFBFBD>
itemindex,
#else
ITEM_getInt( itemindex, ITEM_ID),
#endif
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ",
CHAR_getInt( index,CHAR_FLOOR),
CHAR_getInt( index,CHAR_X ),
CHAR_getInt( index,CHAR_Y ),
ITEM_getChar( itemindex, ITEM_UNIQUECODE),
ITEM_getChar( itemindex, ITEM_NAME),
ITEM_getInt( itemindex, ITEM_ID)
);
CHAR_setItemIndex( index, i, -1);
ITEM_endExistItemsOne( itemindex);
CHAR_sendItemDataOne( index, i);
num++;
}
lua_pushinteger(L, num);
return 1;
}
static int DelNpc (lua_State *L)
{
const int index = luaL_checkint(L, 1);
if( !CHAR_CHECKINDEX( index ) ){
print( "ANDY index=%d err\n", index);
return 1;
}
CHAR_ObjectDelete(CHAR_getWorkInt( index,CHAR_WORKOBJINDEX));
CHAR_endCharOneArray( index );
return 1;
}
#endif
#ifdef _PLAYER_NPC
static int CreateSpecialNpc (lua_State *L)
{
Char one;
size_t l;
CHAR_getDefaultChar( &one, 0);
one.data[CHAR_WHICHTYPE] = CHAR_TYPELUANPC;
char *Name = luaL_checklstring(L, 1, &l);
const int Image = luaL_checkinteger(L, 2);
const int Floor = luaL_checkinteger(L, 3);
const int x = luaL_checkinteger(L, 4);
const int y = luaL_checkinteger(L, 5);
const int dir = luaL_checkinteger(L, 6);
const int enemyid = luaL_checkint(L, 7);
const int UpLevel = luaL_checkinteger(L, 8);
int i;
for( i = 0; i < ENEMY_getEnemyNum(); i ++ ) {
if( ENEMY_getInt( i, ENEMY_ID) == enemyid) {
break;
}
}
if( i == ENEMY_getEnemyNum() ){
lua_pushinteger(L, -1);
return 1;
}
int npcindex = ENEMY_createEnemy( i, 0);
if( npcindex < 0 ) {
print( "NPC<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܡ<EFBFBD>\n");
}
CHAR_setInt(npcindex, CHAR_WHICHTYPE, CHAR_TYPEPLAYERNPC);
CHAR_setChar(npcindex, CHAR_NAME, Name);
CHAR_setInt(npcindex, CHAR_BASEBASEIMAGENUMBER, Image);
CHAR_setInt(npcindex, CHAR_BASEIMAGENUMBER, Image);
CHAR_setInt(npcindex, CHAR_FLOOR, Floor);
CHAR_setInt(npcindex, CHAR_X, x);
CHAR_setInt(npcindex, CHAR_Y, y);
CHAR_setInt(npcindex, CHAR_DIR, dir);
CHAR_setInt(npcindex, CHAR_MODAI, 10000);
CHAR_setInt(npcindex, CHAR_VARIABLEAI,10000);
for( i = 0; i < UpLevel; i ++ ){
CHAR_PetLevelUp( npcindex );
CHAR_PetAddVariableAi( npcindex, AI_FIX_PETLEVELUP );
}
CHAR_complianceParameter( npcindex );
CHAR_setInt( npcindex, CHAR_HP, CHAR_getWorkInt( npcindex, CHAR_WORKMAXHP ));
Object object;
int objindex;
object.type = OBJTYPE_CHARA;
object.index = npcindex;
object.x =CHAR_getInt(npcindex, CHAR_X);
object.y = CHAR_getInt(npcindex, CHAR_Y);
object.floor = CHAR_getInt(npcindex, CHAR_FLOOR);
objindex = initObjectOne( &object );
if( objindex == -1 ) {
CHAR_endCharOneArray( npcindex );
}else {
CHAR_setWorkInt( npcindex,CHAR_WORKOBJINDEX, objindex );
CHAR_LoginBesideSetWorkInt( npcindex, -1 );
}
lua_pushinteger(L, npcindex);
return 1;
}
#endif
#ifdef _ALLBLUES_LUA_1_4
#ifdef _PLAYER_NPC
static int CreatePlayer (lua_State *L) {
Char one;
size_t l;
CHAR_getDefaultChar( &one, 0);
one.data[CHAR_WHICHTYPE] = CHAR_TYPEPLAYERNPC;
char *Name = luaL_checklstring(L, 1, &l);
const int Image = luaL_checkinteger(L, 2);
const int Floor = luaL_checkinteger(L, 3);
const int x = luaL_checkinteger(L, 4);
const int y = luaL_checkinteger(L, 5);
const int dir = luaL_checkinteger(L, 6);
strcpysafe( one.string[CHAR_NAME].string ,
sizeof(one.string[CHAR_NAME].string),
Name);
one.data[CHAR_BASEBASEIMAGENUMBER] = Image;
one.data[CHAR_BASEIMAGENUMBER] = Image;
one.data[CHAR_FLOOR]=Floor;
one.data[CHAR_X]=x;
one.data[CHAR_Y]=y;
one.data[CHAR_DIR] = dir;
int npcindex = CHAR_initCharOneArray(&one);
if( npcindex < 0 ) {
print( "NPC<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܡ<EFBFBD>\n");
}
Object object;
int objindex;
object.type = OBJTYPE_CHARA;
object.index = npcindex;
object.x =CHAR_getInt(npcindex, CHAR_X);
object.y = CHAR_getInt(npcindex, CHAR_Y);
object.floor = CHAR_getInt(npcindex, CHAR_FLOOR);
objindex = initObjectOne( &object );
if( objindex == -1 ) {
CHAR_endCharOneArray( npcindex );
lua_pushinteger(L, -1);
return 1;
}
CHAR_setWorkInt( npcindex,CHAR_WORKOBJINDEX, objindex );
CHAR_LoginBesideSetWorkInt( npcindex, -1 );
CHAR_setFlg( npcindex, CHAR_ISDUEL, 0);
CHAR_setFlg( npcindex, CHAR_ISTRADECARD, 0);
CHAR_setFlg( npcindex, CHAR_ISTRADE, 0);
CHAR_setFlg( npcindex, CHAR_ISPARTY, 0);
lua_pushinteger(L, npcindex);
return 1;
}
#endif
#endif
static const luaL_Reg npclib[] = {
{"CreateNpc", CreateNpc},
#ifdef _DEL_FAME
{"DelFame", DelFame},
#endif
{"AddGold", AddGold},
{"DelGold", DelGold},
#ifdef _MOMENTUM_NPC
{"DelMom", DelMom},
#endif
#ifdef _DP_NPC
{"DelDP", DelDP},
#endif
{"DelItem", DelItem},
{"AddItem", AddItem},
{"AddPet", AddPet},
{"EvEnd", EvEnd},
{"EvNow", EvNow},
{"Event_End", Event_End},
{"Event_Now", Event_Now},
{"EvClr", EvClr},
#ifdef _VIP_SHOP
{"VipItem", VipItem},
{"VipPet", VipPet},
#endif
#ifdef _NEW_VIP_SHOP
{"Vip_Item", Vip_Item},
{"Vip_Pet", Vip_Pet},
#endif
#ifdef _NPC_ADDLEVELUP
{"SetLevel", SetLevel},
{"AddExps", AddExps},
{"AddSkillPoint", AddSkillPoint},
{"SetRideType", SetRideType},
#endif
{"isFaceToFace", isFaceToFace},
{"Free", ActionPassCheck},
#ifdef _ALLBLUES_LUA_1_1
{"SetPoint", SetPoint},
{"DelItemNum", DelItemNum},
{"DelNpc", DelNpc},
#endif
#ifdef _PLAYER_NPC
{"CreateSpecialNpc", CreateSpecialNpc},
#ifdef _ALLBLUES_LUA_1_4
{"CreatePlayer", CreatePlayer},
#endif
#endif
{NULL, NULL}
};
LUALIB_API int luaopen_NPC (lua_State *L) {
luaL_register(L, "npc", npclib);
return 1;
}
#endif