📄 script.pas
字号:
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 + -