签到天数: 107 天 [LV.6]常住居民II

自定义头衔
- UID
- 85367
- 僵尸币
- 51220
- 贡献度
- 0
- 注册时间
- 2022-12-23
- 在线时间
- 127 小时
- 最后登录
- 2025-5-2
     

|
不注册个乐园论坛账号能玩??
您需要 登录 才可以下载或查看,没有账号?注册

×
看此贴以前,请移步到B站看个大佬的视频https://www.bilibili.com/video/BV1qD4y1n7AS/。以下内容默认已经读懂代码以及原理。对于单个BOSS,使用视频里的固然没啥问题,但想要制作一个刷怪点,就需要用class打包一下,以下是我本人基于原文件打包的代码,包含技能(这里只有加速)
- //----------------------------BOSS------------------------------------
- TICKRATE<-0.05;
- TARGET_DISTANCE<-10000;
- RETARGET_TIME<-20.00;
- SPEED_FORWARD<-0.95;
- SPEED_TURNING<-1.5;
- class boss
- {
- skiNOW=0;//是否处于技能中
- skiJL=0;//是否处于技能冷却状态
- skill=null;//默认NULL,如果怪物拥有技能,这里填上怪物模型的handle
- tf=null;
- ts=null;
- nnself=null;//自身handle
- id=null;//第几个怪物刷新点
- target = null;
- ttime = 0.00;
- ticking = false;
- CTICKRATE=null;
- CTARGET_DISTANCE=null;
- CRETARGET_TIME=null;
- CSPEED_FORWARD=null;
- CSPEED_TURNING=null;
- function CG(sf,idd,TICKRATE,TARGET_DISTANCE,RETARGET_TIME,SPEED_FORWARD,SPEED_TURNING)
- {
- nnself=Entities.FindByName(nnself,sf);
- id=idd;
- CTICKRATE=TICKRATE;
- CTARGET_DISTANCE=TARGET_DISTANCE;
- CRETARGET_TIME=RETARGET_TIME;
- CSPEED_FORWARD=SPEED_FORWARD;
- CSPEED_TURNING=SPEED_TURNING;
- }
- function CStart(){if(!ticking){ticking = true;CTick();}}
- function CStop(){if(ticking){ticking = false;}}
- function CTick()
- {
- if(ticking)
- EntFireByHandle(nnself,"RunScriptCode","Tick("+id+");",CTICKRATE,null,null);
- else
- {
- EntFireByHandle(tf,"Deactivate","",0.00,null,null);
- EntFireByHandle(ts,"Deactivate","",0.00,null,null);
- EntFireByHandle(nnself,"Kill","",0.05,null,null);
- return;
- }
- EntFireByHandle(tf,"Deactivate","",0.00,null,null);
- EntFireByHandle(ts,"Deactivate","",0.00,null,null);
- if(target==null||!target.IsValid()||target.GetHealth()<=0.00||target.GetTeam()!=3||ttime>=CRETARGET_TIME)
- return CSearchTarget();
- if(skill!=null&&ttime<=15&&ttime>=3&&skiJL==0)//在切换攻击对象后的3——15秒内释放一次技能
- {
- skiJL++;
- _CSkill();
- }
- ttime+=CTICKRATE;
- EntFireByHandle(tf,"Activate","",0.02,null,null);
- EntFireByHandle(ts,"Activate","",0.02,null,null);
- local sa = nnself.GetAngles().y;
- local ta = CGetTargetYaw(nnself.GetOrigin(),target.GetOrigin());
- local ang = abs((sa-ta+360)%360);
- if(ang>=180)EntFireByHandle(ts,"AddOutput","angles 0 270 0",0.00,null,null);
- else EntFireByHandle(ts,"AddOutput","angles 0 90 0",0.00,null,null);
- local angdif = (sa-ta-180);
- while(angdif>360){angdif-=180;}
- while(angdif< -180){angdif+=360;}
- angdif=abs(angdif);
- local tdist = CGetDistance(nnself.GetOrigin(),target.GetOrigin());
- local tdistz = (target.GetOrigin().z-nnself.GetOrigin().z);
- if(skiNOW==1)
- {
- //这里只是释放了“急速”技能
- EntFireByHandle(tf,"AddOutput","force "+(3000*5).tostring(),0.00,null,null);
- EntFireByHandle(ts,"AddOutput","force "+((3*2)*angdif).tostring(),0.00,null,null);
- }
- else
- {
- EntFireByHandle(tf,"AddOutput","force "+(3000*CSPEED_FORWARD).tostring(),0.00,null,null);
- EntFireByHandle(ts,"AddOutput","force "+((3*CSPEED_TURNING)*angdif).tostring(),0.00,null,null);
- }
- }
- function _CSkill()
- {
- ScriptPrintMessageCenterAll("BOSS开启冲刺技能");
- EntFireByHandle(skill,"SetAnimation","skill1",0,null,null);
- EntFireByHandle(nnself,"RunScriptCode","bosses["+id+"].skiNOW=0",3.9,null,null);
- skiNOW=1;
- }
- function CSearchTarget()
- {
- ttime = 0.00;
- skiJL=0;
- target = null;
- local h = null;
- local candidates = [];
- while(null!=(h=Entities.FindInSphere(h,nnself.GetOrigin(),CTARGET_DISTANCE)))
- {
- if(h.GetClassname()=="player"&&h.GetTeam()==3&&h.GetHealth()>0)
- {
- if(TraceLine(nnself.GetOrigin()+Vector(0,0,40),h.GetOrigin()+Vector(0,0,48),nnself)==1.00)
- candidates.push(h);
- }
- }
- if(candidates.len()==0)return;
- target = candidates[RandomInt(0,candidates.len()-1)];
- if(skill)_CSkill();
- }
- function CGetTargetYaw(start,target)
- {
- local yaw = 0.00;
- local v = Vector(start.x-target.x,start.y-target.y,start.z-target.z);
- local vl = sqrt(v.x*v.x+v.y*v.y);
- yaw = 180*acos(v.x/vl)/3.14159;
- if(v.y<0)
- yaw=-yaw;
- return yaw;
- }
- function CSetThruster(string,forward){if(forward)tf=Entities.FindByName(tf,string);else ts=Entities.FindByName(ts,string);}
- function CGetDistance(v1,v2){return sqrt((v1.x-v2.x)*(v1.x-v2.x)+(v1.y-v2.y)*(v1.y-v2.y)+(v1.z-v2.z)*(v1.z-v2.z));}
- }
- used<-0;
- bosses<-array(100,boss());
- function Start(id)
- {
- bosses[id].CG(self.GetName(),id,TICKRATE,TARGET_DISTANCE,RETARGET_TIME,SPEED_FORWARD,SPEED_TURNING);
- bosses[id].CStart();
- }
- function SetThruster(id,forward)
- {
- bosses[id].CSetThruster(caller.GetName(),forward);
- }
- function Tick(id)
- {
- bosses[id].CTick();
- }
- function Stop(id)
- {
- bosses[id].CStop();
- }
- function sk(id)
- {
- bosses[id].skill=Entities.FindByName(bosses[id].skill,caller.GetName());
- }
复制代码
|
评分
-
查看全部评分
|