签到天数: 208 天 [LV.7]常住居民III

♪(^∇^*)
- UID
- 58302
- 僵尸币
- 27935
- 贡献度
- 100
- 注册时间
- 2019-5-8
- 在线时间
- 691 小时
- 最后登录
- 2024-11-4
  
|
不注册个乐园论坛账号能玩??
您需要 登录 才可以下载或查看,没有账号?注册

×
本帖最后由 不科学 于 2020-2-26 11:55 编辑
原贴:https://bbs.zombieden.cn/thread-67984-1-1.html效果:
视频链接(笔记本录制):https://www.bilibili.com/video/av91638997
视频链接(手机录制):https://www.bilibili.com/video/av91662490
附件是地图和脚本注释。(神器在剪刀石头布房间右边那个房间,入口有个Push,CT进不去,自己开作弊穿墙进去就好)
神器使用方式:按E键切换方块,鼠标右键搭建
原理:就是game_ui检测玩家活动,然后创建一个模型,放到一个合适的位置。
注:因为要保证方块对齐,所以如果你位置或者角度不对的话,可能会把自己卡进方块里
**************************************************************
//models/props/zm_minecraft_bky_change_model_1.mdl
//1-19
//为了节省体积只准备了9个模型
mc_create_user <- null; //使用者
mc_create_user_origin <- null; //使用者的位置
mc_create_user_angles <- null; //使用者的视角方向
create_skin <- 1 ; //模型编号,因为我不会给一个模型设置多个skin,所以我加了9个模型..如果可以的话,请用一个模型,(9个skin),这样可以节省体积,也更加简单
//刀被捡起来的时候运行这个
function create_user()
{
//获取使用者的句柄
mc_create_user = activator;
//输出提示
ScriptPrintMessageChatAll("一位玩家获得了Minecraft创造者权限");
ScriptPrintMessageChatAll("按E切换方块,鼠标右键放置");
ScriptPrintMessageChatAll("当前方块为:红砖");
}
//按下鼠标右键的时候运行这个
function create()
{
//模型.mdl
local skin = "models/props/zm_minecraft_bky_change_model_" +create_skin+ ".mdl";
//神器使用者的位置
mc_create_user_origin = activator.GetOrigin();
//神器使用者的角度
mc_create_user_angles = activator.GetAngles();
//方块的位置,初始化,还要继续修改
local FK_origin = mc_create_user_origin;
//方块的位置修改成神器使用者正前方
FK_origin = Vector(90 * cos(mc_create_user_angles.y / 180 * 3.14159) + mc_create_user_origin.x , 90 * sin(mc_create_user_angles.y / 180 * 3.14159) + mc_create_user_origin.y , mc_create_user_origin.z);
//3个变量 为了保证方块,可以连接上,不出现缝隙,所以要让他们的坐标是64的倍数(方块大小为64,如果你的方块模型是32的话,改成32)
local dx = FK_origin.x % 64;
local dy = FK_origin.y % 64;
local dz = FK_origin.z % 64;
//高于一半,就填满64,少于一半,就去掉多余的,保证方块的位置是无缝的
if(dx >= 32) FK_origin = Vector(FK_origin.x - dx + 64,FK_origin.y,FK_origin.z);
else FK_origin = Vector(FK_origin.x - dx,FK_origin.y,FK_origin.z);
if(dy >= 32) FK_origin = Vector(FK_origin.x,FK_origin.y - dy + 64,FK_origin.z);
else FK_origin = Vector(FK_origin.x,FK_origin.y - dy,FK_origin.z);
if(dz >= 32) FK_origin = Vector(FK_origin.x,FK_origin.y,FK_origin.z - dz + 64);
else FK_origin = Vector(FK_origin.x,FK_origin.y,FK_origin.z - dz);
//这样我们就获得了一个合适的方块位置
//在这个位置60范围内寻找是否有prop_dynamic,也就是判断这个位置有没有方块
local Tar = Entities.FindByClassnameNearest("prop_dynamic", FK_origin, 60);
if(Tar == null)
{
//没有就创建一个方块,创建模型,class为动态模型,位置为刚才那个合适的位置,0是皮肤编号(如果你会给模型添加多个skin编号,那么就可以不用做那么多个模型了)
local FK = CreateProp("prop_dynamic",FK_origin,skin, 0);
//修改碰撞,6是有碰撞
FK.__KeyValueFromString("solid","6");
//提示创建成功
ScriptPrintMessageChatAll("方块创建完毕。");
}
else
{
//该地区有方块了,那么就不生成方块,出现提示
ScriptPrintMessageChatAll("方块重叠,模型创建失败。");
}
}
//按下E键更换方块
function mc_create_change()
{
//按一次+1
create_skin = create_skin + 1;
//我这里就9个方块 测试地图,不能太大
if(create_skin > 9)
{
create_skin = 1;
}
local skin = "未命名砖块,等有空了再添加名称";
switch(create_skin)
{
case 1:
skin = "红砖";
break;
case 2:
skin = "石块";
break;
case 3:
skin = "仙人掌根茎";
break;
case 4:
skin = "树叶";
break;
case 5:
skin = "水块";
break;
case 6:
skin = "图书";
break;
case 7:
skin = "附魔台";
break;
case 8:
skin = "储物箱";
break;
case 9:
skin = "绿宝石";
break;
}
ScriptPrintMessageChatAll("当前的模型为:"+skin);
}

|
评分
-
查看全部评分
|