⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 script.c

📁 仙镜游戏源码,仅供学习!请勿用于非法应用!
💻 C
字号:
#include <string.h>
#include <lua.h>
#include <lualib.h>
#include <tolua.h>

#include "mmo.h"
#include "core.h"
#include "npc.h"
#include "script2.h"
#include "script.h"

extern struct mmo_map_data map_data[];
int internal_fd;
struct map_session_data *internal_sd;
lua_State *L;

void get_char_data(struct mmo_charstatus cs)
	{
	zeny=cs.zeny;
	class=cs.class;
	status_point=cs.status_point;
	skill_point=cs.skill_point;
	hp=cs.hp;
	max_hp=cs.max_hp;
	sp=cs.sp;
	max_sp=cs.max_sp;
	option=cs.option;
	karma=cs.karma;
	manner=cs.manner;
	hair=cs.hair;
	hair_color=cs.hair_color;
	clothes_color=cs.clothes_color;
	weapon=cs.weapon;
	sheild=cs.sheild;
	head_top=cs.head_top;
	head_mid=cs.head_mid;
	head_bottom=cs.head_bottom;
	strcpy(name,cs.name);
	base_level=cs.base_level;
	job_level=cs.job_level;
	str=cs.str;
	agi=cs.vit;
	int_=cs.int_;
	dex=cs.dex;
	luk=cs.luk;
	}

void sendMessage(char *msg)
	{
	int len;

	len=mmo_map_npc_say(internal_fd,WFIFOP(internal_fd,0),internal_sd->npc_id,msg);
	if(len>0)
		WFIFOSET(internal_fd,len);
	}

void sendMenu(char *options)
	{
	int len;

	len=mmo_map_npc_select(internal_fd,WFIFOP(internal_fd,0),internal_sd->npc_id,options);
	if(len>0)
		WFIFOSET(internal_fd,len);
	}

void sendNext()
	{
	int len;

	len=mmo_map_npc_next(internal_fd,WFIFOP(internal_fd,0),internal_sd->npc_id);
	if(len>0)
		WFIFOSET(internal_fd,len);
	}

void sendEnd()
	{
	int len;

	len=mmo_map_npc_close(internal_fd,WFIFOP(internal_fd,0),internal_sd->npc_id);
	if(len>0)
		WFIFOSET(internal_fd,len);
	menuSelect=0;
	next=0;
	}

void changeJob(int job)
	{
	mmo_map_jobchange(internal_fd,job);
	}

void changeLook(int i, int j)
	{
	int len;

	len=mmo_map_set_look(internal_fd,WFIFOP(internal_fd,0),internal_sd->account_id,i,j);
	if(len>0)
		mmo_map_sendarea(internal_fd,WFIFOP(internal_fd,0),len,0);

	}

void statusChange(int status,int new)
	{
	mmo_map_update_param(internal_fd,status,new);
	}

void changeSavePoint(char *name,int x, int y)
	{
	struct map_session_data *temp_sd;

	temp_sd=session[internal_fd]->session_data;
	strcpy(temp_sd->status.save_point.map,name);
	temp_sd->status.save_point.x=x;
	temp_sd->status.save_point.y=y;
	}

void sendImage(char *name, int type)
	{
	int len;

	len=send_image(internal_fd,WFIFOP(internal_fd,0),name,type);
	if(len>0)
		WFIFOSET(internal_fd,len);
	}

unsigned char *parse_script(unsigned char *script)
	{
	int length =strlen(script);
	char *final;

	final=(char *)malloc(length+1);
	script[length-1]=0;
	script[length]=0;
	strcpy(final,script+2);
	return final;
	}

void warp(char *map,int x, int y)
	{
	mmo_map_changemap(internal_fd,internal_sd,map,x,y,2);
	}

void waitInput()
	{
	int len;

	len=mmo_map_npc_amount_request(internal_fd,WFIFOP(internal_fd,0),internal_sd->npc_id);
      if(len>0)
		WFIFOSET(internal_fd,len);
	}

int run_script(int fd,struct map_session_data *sd)
	{
	unsigned char *script;
	struct map_session_data *temp_sd;

	menuSelect=sd->local_reg[15];
	input=sd->local_reg[14];
	temp_sd=session[fd]->session_data;
	internal_fd=fd;
	internal_sd=sd;
	get_char_data(temp_sd->status);
	script=map_data[sd->mapno].npc[sd->npc_n]->u.script;
	lua_dostring(L,script);
	sd->local_reg[15]=0;
	return(1);
	}

int script_init()
	{
	menuSelect=0;
	next=0;
	L=lua_open(0);
	if(L==NULL)
		{
		printf("Error with lua\n");
		return(1);
		}
	tolua_ragnarok_open(L);
	lua_baselibopen(L);
	lua_strlibopen(L);
	lua_mathlibopen(L);
	return(0);
	}

void script_close()
	{
	tolua_ragnarok_close(L);
	lua_close(L);
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -