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

📄 script.pas

📁 RO模拟器!!适合玩仙境传说的玩家们呦~
💻 PAS
📖 第 1 页 / 共 5 页
字号:
          SendCStat1(tc, 0, $000c, tc.SkillPoint);
					Inc(tc.ScriptStep);
				end;

      47: //hstyle
				begin
					i := ConvFlagValue(tc, tn.Script[tc.ScriptStep].Data1[0], true);
					if (i >= 0) then begin
              j := tc.HairColor;
						  tc.Hair := i;

              UpdateLook(tc.MData, tc, 1, i, 0, true);
              UpdateLook(tc.MData, tc, 6, j, 0, true);
					end;
					Inc(tc.ScriptStep);
				end;
      48: //guildreg
				begin
          tn.Reg := tn.Script[tc.ScriptStep].Data1[0];
          // Colus, 20040130: Setting the agit here too.  No need for getagit.
          tn.Agit := tn.Script[tc.ScriptStep].Data1[0];
					Inc(tc.ScriptStep);
				end;
      49: //getgskilllevel //S144 addstart
				begin
{NPC僀儀儞僩捛壛}
          j := GuildList.IndexOf(tc.GuildID);
          if (j <> -1) then begin
          tg := GuildList.Objects[j] as TGuild;
					//i := ConvFlagValue(tc, tn.Script[tc.ScriptStep].Data1[0]);
          i := StrToInt(tn.Script[tc.ScriptStep].Data1[0]);
          //debugout.lines.add('[' + TimeToStr(Now) + '] ' + tn.Script[tc.ScriptStep].Data1[0]);
          //debugout.lines.add('[' + TimeToStr(Now) + '] ' + tn.Script[tc.ScriptStep].Data1[1]);
					if (Copy(tn.Script[tc.ScriptStep].Data1[0], 1, 1) <> '\') then begin
						if i = 0 then begin
							tc.Flag.Values[tn.Script[tc.ScriptStep].Data1[0]] := '0';
						end else begin
							tc.Flag.Values[tn.Script[tc.ScriptStep].Data1[1]] := IntToStr(tg.GSkill[i].Lv);
						end;
					end else begin
						if i = 0 then begin
							ServerFlag.Values[tn.Script[tc.ScriptStep].Data1[0]] := '0';
						end else begin
							ServerFlag.Values[tn.Script[tc.ScriptStep].Data1[1]] := IntToStr(tg.GSkill[i].Lv);
						end;
					end;
          end;
{NPC僀儀儞僩捛壛僐僐傑偱}
					Inc(tc.ScriptStep);
				end;
      50: //getguardstatus //S144 addstart
				begin
{NPC僀儀儞僩捛壛}
          j := CastleList.IndexOf(tn.Reg);
          if (j <> -1) then begin
          tgc := CastleList.Objects[j] as TCastle;
					i := ConvFlagValue(tc, tn.Script[tc.ScriptStep].Data1[0]);
          //i := StrToInt(tn.Script[tc.ScriptStep].Data1[0]);
          //i := i - 1;
          //debugout.lines.add('[' + TimeToStr(Now) + '] ' + IntToStr(tgc.GuardStatus[i]));
          //debugout.lines.add('[' + TimeToStr(Now) + '] ' + tn.Script[tc.ScriptStep].Data1[0]);
          //debugout.lines.add('[' + TimeToStr(Now) + '] ' + tn.Script[tc.ScriptStep].Data1[1]);
					if (Copy(tn.Script[tc.ScriptStep].Data1[0], 1, 1) <> '\') then begin
						if i = 0 then begin
							tc.Flag.Values[tn.Script[tc.ScriptStep].Data1[0]] := '0';
						end else begin
							tc.Flag.Values[tn.Script[tc.ScriptStep].Data1[1]] := IntToStr(tgc.GuardStatus[i]);
						end;
					end else begin
						if i = 0 then begin
							ServerFlag.Values[tn.Script[tc.ScriptStep].Data1[0]] := '0';
						end else begin
							ServerFlag.Values[tn.Script[tc.ScriptStep].Data1[1]] := IntToStr(tgc.GuardStatus[i]);
						end;
					end;
          end;
{NPC僀儀儞僩捛壛僐僐傑偱}
					Inc(tc.ScriptStep);
				end;
      52: //setguardstatus
				begin
					i := ConvFlagValue(tc, tn.Script[tc.ScriptStep].Data1[0]);
          j := StrToInt(tn.Script[tc.ScriptStep].Data1[1]);
          k := CastleList.IndexOf(tn.Reg);
          if (k <> -1) then begin
          tgc := CastleList.Objects[k] as TCastle;
          if (i >= 1) or (i <= 8) then begin
					if (j = 0) or (j = 1) then begin
          //i := i - 1;
          tgc.GuardStatus[i] := 1;
					end;
          end;
          end;
					Inc(tc.ScriptStep);
				end;
      51: //setguildkafra
				begin
					i := StrToInt(tn.Script[tc.ScriptStep].Data1[0]);
					if (i = 0) or (i = 1) then begin
          SetGuildKafra(tn,i);
          EnableGuildKafra(tn.Map,'Kafra Service',i);
					end;
					Inc(tc.ScriptStep);
				end;
      53: //callguard
				begin
					i := ConvFlagValue(tc, tn.Script[tc.ScriptStep].Data1[0]);
          if (i >= 1) or (i <= 8) then begin
          CallGuildGuard(tn,i);
          end;
          Inc(tc.ScriptStep);
        end;
       54: //callmymob
				begin
					str := UpperCase(tn.Script[tc.ScriptStep].Data1[0]);
          j := ConvFlagValue(tc, tn.Script[tc.ScriptStep].Data1[1]);
          k := ConvFlagValue(tc, tn.Script[tc.ScriptStep].Data1[2]);
          l := ConvFlagValue(tc, tn.Script[tc.ScriptStep].Data1[3]);
          m := ConvFlagValue(tc, tn.Script[tc.ScriptStep].Data1[4]);
          SpawnNPCMob(tn,str,j,k,l,m);
          Inc(tc.ScriptStep);
        end;
       55: //resetguild
        begin
        l := CastleList.IndexOf(tn.Reg);
        if (l <> - 1) then begin
        CastleList.Delete(l);
        end;
        Inc(tc.ScriptStep);
        end;
       56: //guilddinvest
        begin
          GuildDInvest(tn);
          Inc(tc.ScriptStep);
        end;


    	{Colus, 20040110: Added (empty so far) guild territory commands}
      58: //getagit
        begin

        end;
      59: //getguild
        begin
        end;
      60: //agitregist
        begin
          //debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('Agit now %s', [tn.Script[tc.ScriptStep].Data1[0]]));
          tn.Agit := tn.Script[tc.ScriptStep].Data1[0];
					Inc(tc.ScriptStep);        
        end;

        {61: //Movenpc
                begin

                end;}
      63: //Remove Equipment
        begin
          for  j := 1 to 100 do begin
            if tc.Item[j].Equip = 32768 then begin
              tc.Item[j].Equip := 0;
              WFIFOW(0, $013c);
              WFIFOW(2, 0);
              tc.Socket.SendBuf(buf, 4);
            end else if tc.Item[j].Equip <> 0 then begin
            	reset_skill_effects(tc);
              WFIFOW(0, $00ac);
              WFIFOW(2, j);
              WFIFOW(4, tc.Item[j].Equip);
              tc.Item[j].Equip := 0;
              WFIFOB(6, 1);
              tc.Socket.SendBuf(buf, 7);
              remove_equipcard_skills(tc, j);
            end;
          end;
          Inc(tc.ScriptStep);
        end;
      64: //BaseReset
        begin
          for i := 0 to 5 do begin
            tc.ParamBase[i] := 1;
          end;
          tc.BaseLV := 1;
          tc.BaseEXP := 0;
          CalcStat(tc);
          SendCStat(tc);
          SendCStat1(tc, 0, $000b, tc.BaseLV);
          SendCStat1(tc, 0, $0009, tc.StatusPoint);
          SendCStat1(tc, 1, $0001, tc.BaseEXP);
          Inc(tc.ScriptStep);
        end;
      65: //Global Variable
        {Syntax:
          global [variable name] = [value];
        }
        begin
          tGlobal := TGlobalVars.Create;
          sl := TStringList.Create;
					str := tn.Script[tc.ScriptStep].Data1[0];
					p := nil;
					len := 0;

					//Get the Data from the script
          j := ConvFlagValue(tc, tn.Script[tc.ScriptStep].Data1[1]);
          if (tn.Script[tc.ScriptStep].Data3[0] = 0) then begin
            i := 0;
          end else begin
            i := ConvFlagValue(tc, str);
          end;

          //Different Math cases
          case tn.Script[tc.ScriptStep].Data3[0] of
						0,1:  i := i + j;
						2:    i := i - j;
						3:    i := i * j;
						4:    i := i div j;
          end;

          //Prevent i from being negative
          if i < 0 then i := 0;
          if (tn.Script[tc.ScriptStep].Data3[1] <> 0) and
            (i > tn.Script[tc.ScriptStep].Data3[1]) then i := tn.Script[tc.ScriptStep].Data3[1];
          {Write the Vaules}
						{if (Copy(str, 1, 1) <> '\') then begin
							tc.Flag.Values[str] := IntToStr(i);
						end else begin
							ServerFlag.Values[str] := IntToStr(i);
						end;}
          tGlobal.Variable := str;
          tGlobal.Value := i;

          if GlobalVars.IndexOf(str) = - 1 then
            GlobalVars.AddObject(tGlobal.Variable, tGlobal)
          else begin
            tGlobal := GlobalVars.Objects[GlobalVars.IndexOf(str)] as TGlobalVars;
            tGlobal.Variable := str;
            tGlobal.Value := i;
          end;

          AssignFile(txt2, 'Global_Vars.txt');
          Rewrite(txt2);
          Writeln(txt2, '// Variable, Value');
          for i := 0 to GlobalVars.Count - 1 do begin
            tGlobal := GlobalVars.Objects[i] as TGlobalVars;
            sl.Clear;
            sl.Add( tGlobal.Variable );
            sl.Add( IntToStr( tGlobal.Value ) );
            Writeln(txt2, sl.DelimitedText);
          end;

					Inc(tc.ScriptStep);
          CloseFile(txt2);
				end;
      66: // gcheck - Global Variable Check
        begin
          flag := false;
					str := tn.Script[tc.ScriptStep].Data1[0];
          tGlobal := GlobalVars.Objects[GlobalVars.Indexof(str)] as TGlobalVars;
          i := tGlobal.Value;

					j := ConvFlagValue(tc, tn.Script[tc.ScriptStep].Data1[1]);
{NPC僀儀儞僩捛壛僐僐傑偱}
					case tn.Script[tc.ScriptStep].Data3[2] of
					0: flag := boolean(i >= j);
					1: flag := boolean(i <= j);
					2: flag := boolean(i  = j);
					3: flag := boolean(i <> j);
					4: flag := boolean(i >  j);
					5: flag := boolean(i <  j);
					else
						begin
							//debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('s-check: invalid formula "%s"', [tn.Script[tc.ScriptStep].Data1[2]]));
							tc.ScriptStep := $FFFF;
							break;
						end;
					end;
					//debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('s-check: %s %s(%d) %s = %d', [tn.Script[tc.ScriptStep].Data1[0], tn.Script[tc.ScriptStep].Data1[2], tn.Script[tc.ScriptStep].Data3[2], tn.Script[tc.ScriptStep].Data1[1], byte(flag)]));
					if flag then begin
						tc.ScriptStep := tn.Script[tc.ScriptStep].Data3[0];
					end else begin
						tc.ScriptStep := tn.Script[tc.ScriptStep].Data3[1];
					end;
				end;
      67: {Event MOB}
      //Syntax
      // eventmob [JID],[Name],[X Position],[YPosition],[Perfect Drop ID(0 = None)]
        begin
          j := ConvFlagValue(tc, tn.Script[tc.ScriptStep].Data1[0]);
          str := UpperCase(tn.Script[tc.ScriptStep].Data1[1]);
          k := ConvFlagValue(tc, tn.Script[tc.ScriptStep].Data1[2]);
          l := ConvFlagValue(tc, tn.Script[tc.ScriptStep].Data1[3]);
          m := ConvFlagValue(tc, tn.Script[tc.ScriptStep].Data1[4]);
          SpawnEventMob(tn,j,str,k,l,m);
          Inc(tc.ScriptStep);
        end;
			44: //checkstr
				begin
					j := tn.Script[tc.ScriptStep].Data3[2];
					str := '';
					//塃曈僼儔僌僠僃僢僋
					if (Copy(tn.Script[tc.ScriptStep].Data1[1], 1, 1) = '\') then begin
						//僒乕僶嫟桳僼儔僌
						str := ServerFlag.Values[tn.Script[tc.ScriptStep].Data1[1]];
					end else begin
						i := -1;
						if (tc.Login = 2) then begin
							i := tc.Flag.IndexOfName(tn.Script[tc.ScriptStep].Data1[1]);
						end;
						if (i <> -1) then begin
							//僉儍儔僋僞乕僼儔僌
							str := tc.Flag.Values[tn.Script[tc.ScriptStep].Data1[1]];
						end else begin
							//暥帤楍
							str := tn.Script[tc.ScriptStep].Data1[1];
						end;
					end;

					flag := false;
					//嵍曈僼儔僌僠僃僢僋
					if (Copy(tn.Script[tc.ScriptStep].Data1[0], 1, 1) = '\') then begin
						//僒乕僶嫟桳僼儔僌
						if (ServerFlag.Values[tn.Script[tc.ScriptStep].Data1[0]] = str) then begin
							flag := true;
						end;
					end else if (tc.Login = 2) then begin
						//僉儍儔僋僞乕僼儔僌
						//debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('str-check: %s', [tc.Flag.Values[tn.Script[tc.ScriptStep].Data1[0]]]));
						if (tc.Flag.Values[tn.Script[tc.ScriptStep].Data1[0]] = str) then begin
							flag := true;
						end;
					end;

					//debugout.lines.add('[' + TimeToStr(Now) + '] ' + Format('str-check: %s %s %s(%s) = %d', [tn.Script[tc.ScriptStep].Data1[0], tn.Script[tc.ScriptStep].Data1[2], tn.Script[tc.ScriptStep].Data1[1], str, byte(flag)]));
					if ((j = 0) and (flag = true)) or ((j = 1) and (flag = false)) then begin
						tc.ScriptStep := tn.Script[tc.ScriptStep].Data3[0];
					end else begin
						tc.ScriptStep := tn.Script[tc.ScriptStep].Data3[1];
					end;
				end;



    68: // addskillpoints
        begin
            i := ConvFlagValue(tc, tn.Script[tc.ScriptStep].Data1[0]);
            tc.SkillPoint := tc.SkillPoint + i;
            SendCSkillList(tc);
            Inc(tc.ScriptStep);
        end;
    69: // addstatpoints
        begin
            i := ConvFlagValue(tc, tn.Script[tc.ScriptStep].Data1[0]);
            tc.StatusPoint := tc.StatusPoint + i;
            SendCStat(tc);
            Inc(tc.ScriptStep);
        end;
    70:   {NPC Emotions}
    // emotion <emotion #>;
      begin
            i := ConvFlagValue(tc, tn.Script[tc.ScriptStep].Data1[0]);
            tm := tc.MData;
            WFIFOW(0, $00c0);
            WFIFOL(2, tn.ID);
            WFIFOB(6, i);
            SendBCmd(tm, tn.Point, 7);
  

⌨️ 快捷键说明

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