Собственно почему же старый редактор скриптов был выкинут.
/* Sample Nox-C Script File. author: KirConjurer */
/**/
/* 0. Ignore this one */
GLOBAL()
{
return;
}
/* 1. This function contains global variables, which are accessible from any other function */
GLOBAL()
{
int ignore1;
int ignore2;
int ignore3;
int ignore4;
int ignore5;
int elevatorPtr;
int elevatorButtonPtr;
string[3] classNames;
int KircPtr;
/* FireSnakeTrigger */
int[40] fireSnakePs;
int[7] snakeFlames;
int fireTriggerPtr;
int currentSnakePos = 0;
return;
}
/* 2. This function is executed every time when the map is loaded in-game */
MapInitialize()
{
/* Initialize objects */
GLOBAL:elevatorPtr = Nox:ObjFromName("ElevatorFromSpawn");
GLOBAL:elevatorButtonPtr = Nox:ObjFromName("ElevatorButton");
GLOBAL:KircPtr = Nox:ObjFromName("Kirc");
GLOBAL:fireTriggerPtr = Nox:ObjFromName("FireTrigger");
/* Initialize class name array */
GLOBAL:classNames[0] = "client.c:Warrior";
GLOBAL:classNames[1] = "client.c:Wizard";
GLOBAL:classNames[2] = "client.c:Conjurer";
Script:FireSnakeInit();
return;
}
/* 3. Initialize fire snake demo */
FireSnakeInit()
{
int num = 0;
/* I am too lazy to implement for loop in compiler... */
repeat1:
if (num < 40)
{
GLOBAL:fireSnakePs[num] = Nox:WaypointFromName("FireSnakeWP" + Nox:IntToString(num + 1));
num += 1;
goto repeat1;
}
num = 0;
repeat2:
if (num < 7)
{
GLOBAL:snakeFlames[num] = Nox:ObjFromName("SnakeFlame" + Nox:IntToString(num + 1));
num += 1;
goto repeat2;
}
return;
}
/* 4. Trigger demo */
CallDemo()
{
int class = Nox:GetServerInfo(4); /* get host player class */
string classString = GLOBAL:classNames[class];
Nox:Print(classString); /* print it to the script caller */
/* string test begin */
string medievalCloak = "Medieval";
medievalCloak += "Cloak";
medievalCloak += "PrettyName";
string thingDb = "thing.db:";
Nox:Print(Nox:IntToString(GLOBAL:snakeFlames[2]));
Nox:Print(thingDb + medievalCloak);
return; /* Never forget to put return! */
}
/* 5. Enable elevator */
ActivateElevator()
{
Nox:DisableObject(GLOBAL:elevatorButtonPtr);
Nox:EnableObject(GLOBAL:elevatorPtr);
return;
}
/* 6. NPC Attacked event */
KircAggressive()
{
Nox:MonsterSetAggressiveness(GLOBAL:KircPtr, 0.83F);
return;
}
/* 7. Fire Snake Cycle */
FireSnakeTrigger()
{
/* we don't want multiple cycles to run simultaneously */
if (Nox:ObjIsEnabled(GLOBAL:fireTriggerPtr)) { Nox:DisableObject(GLOBAL:fireTriggerPtr); }
/* Update snake position */
GLOBAL:currentSnakePos += 1;
if (GLOBAL:currentSnakePos >= 40) { GLOBAL:currentSnakePos = 0; }
int snakeSegment = 0;
int snakeOffset = 0;
/* for each flame */
repeat:
if (snakeSegment < 7)
{
snakeOffset = snakeSegment + GLOBAL:currentSnakePos;
if (snakeOffset >= 40) { snakeOffset -= 40; } /* out of bounds */
/* move flames around */
Nox:TeleportObj(GLOBAL:snakeFlames[snakeSegment], Nox:GetWaypointX(GLOBAL:fireSnakePs[snakeOffset]), Nox:GetWaypointY(GLOBAL:fireSnakePs[snakeOffset]));
snakeSegment += 1;
goto repeat;
}
Nox:WaitFrames(2, 7);
return;
}
Карта с компилированными скриптами прилагается. Попробуйте открыть в старом редакторе
NOTE: в последней версии моего редактора нашлась пара критических багов, из за которых карты могут вылетать при работе над обьектами. Настоятельно советую не использовать его до очередного обновления