Назад

Помогите с нпц

Автор: -OnIZuCa-: Дата: 01.20.2010

Привет!
Подскажите, пожалуйста, как написать нпц, который будет выбирать лут, допустим из 50 вариантов.
И давать задание на его сбор.

Пример.
В 19 00 включение и анонс.
(Регистрирует только 20 человек.)
Дальше подходит человек, который хочет получить (деньги) за этот квест и нпц ему говорит.
Принеси (идет рандом) это, дальше подходит следующий человек и нпц говорит, принеси (идет рандом) это, итд.
Дальше дается время 30 мин на выполнение задания каждому.
Как зарегистрировалось 20 человек, нпц говорит « у меня больше нет заданий ».
Если человек, который получил квест, не справляется за 30 минут, то квест аннулируется.
Нпц выключается только в том случае, если все люди не справились с заданием или после того как все приносят лут.

Буду оч благодарен.!

Автор: -OnIZuCa-: Дата: 01.20.2010

Как напишу, скину вам, что бы вы проверили. =)
Я оч вам благодарен!!!!

Автор: Мяфк: Дата: 01.20.2010

не за что, пиши, посмотрим.

Автор: -OnIZuCa-: Дата: 01.21.2010

//=========================================||
// Идея скрипта: OnIZuCa ||
//=========================================||



- script announce -1,{

OnClock1000:
OnClock1100:
OnClock1200:
OnClock1300:
OnClock1400:
OnClock1500:
OnClock1600:
OnClock1700:
OnClock1800:
OnClock1900:
OnClock2000:
OnClock2100:
OnClock2200:
OnClock2300:
OnClock2400:

announce "[Ростовщик]: Есть задании на получение валюты сервера!! ",bc_all|bc_blue;
sleep 3000;
announce "[Ростовщик]: Жду всех желающих! ",bc_all|bc_blue;
sleep 3000;
announce "[Ростовщик]: Я нахожусь (впишите координаты)!! ",bc_all|bc_blue;
enablenpc "Ростовщик";
set quest, 0;
set fail,0;
end;

OnInit:
disablenpc "Ростовщик";
end;

}

prontera,158,193,4 script Ростовщик 862,{

if (quest == 20) goto NOT;
if (quest == 20) set quest3, 20;

NOT:
mes "[Ростовщик]";
mes "Извени, но у меня, нет больше работы.";
close;

mes "[Ростовщик]";
mes "Привет, ты хочешь получит задание?";
menu "Да",-,"Нет",L_close;

set quest2, rand (4)
if (quest2 == 0) goto questpart0;
if (quest2 == 1) goto questpart1;
if (quest2 == 2) goto questpart2;
if (quest2 == 3) goto questpart3;
if (quest2 == 4) goto questpart4;
end;


questpart0:
mes "[Ростовщик]";
mes "Принеси мне 10 джелопи и 5 морковок. ";
next;
mes "На выполнение задания тебе дается 10 минут.";
next;
mes "Удачи!";
initnpctime;
OnTimer180000:
set fail,1;
set quest,1;
close;

questpart1:
mes "[Ростовщик]";
mes "Принеси мне 8 джелопи и 4 морковки. ";
next;
mes "На выполнение задания тебе дается 10 минут.";
next;
mes "Удачи!";
initnpctime;
OnTimer180000:
set fail,1;
set quest,1;
close;

questpart2:
mes "[Ростовщик]";
mes "Принеси мне 6 джелопи и 3 морковки. ";
next;
mes "На выполнение задания тебе дается 10 минут.";
next;
mes "Удачи!";
initnpctime;
OnTimer180000:
set fail,1;
set quest,1;
close;

questpart3:
mes "[Ростовщик]";
mes "Принеси мне 4 джелопи и 2 морковки. ";
next;
mes "На выполнение задания тебе дается 10 минут.";
next;
mes "Удачи!";
initnpctime;
OnTimer180000:
set fail,1;
set quest,1;
close;

questpart4:
mes "[Ростовщик]";
mes "Принеси мне 2 джелопи и 1 морковку. ";
next;
mes "На выполнение задания тебе дается 10 минут.";
next;
mes "Удачи!";
initnpctime;
OnTimer180000:
set fail,1;
set quest,1;
close;


}


Ну, как то так. =( Дальше что-то не понимаю.Помогите =)

Автор: nomn: Дата: 01.21.2010

ошибки: все переменные - переменные персонажей, записываемые в базу. Зачем?

set @quest, rand(0,4);

так будет лучше.


mes "Удачи!";
initnpctime;
end; // сюда нужен энд

ОнТаймер нужно писать отдельно, это Лейбл!

В самом начале скрипта какие-то не понятные проверки на чар переменные.. зачем они я так и не понял.

Задай глобальную переменную в самом начале скрипта $var и $var2 одна будет проверять на кол-во участников, а вторая на кол-во лузеров, которые не успели за 30 минут.
Дело в том, что когда второй человек возьмёт квест, таймер запустится заново :)

Автор: -OnIZuCa-: Дата: 01.21.2010

Хм.. Чуток не понял.. если не трудно скиньте какой-нибудь пример с этими переменными или на подобие их.
Я просто на примере лучше понимаю =)

Автор: 879546: Дата: 01.21.2010

Изучай! ;)
[SPOILER="ea/doc/script_commands.txt"]
Variables
---------

The meat of every programming language is variables - places where you store
data.

Variables are divided into and uniquely identified by the combination of:
prefix - determines the scope and extent (or lifetime) of the variable
name - an identifier consisting of '_' and alfanumeric characters
postfix - determines the type of the variable: integer or string

Scope can be:
global - global to all servers
local - local to the server
account - attached to the account of the character identified by RID
character - attached to the character identified by RID
npc - attached to the NPC
scope - attached to the scope of the instance

Extent can be:
permanent - They still exist when the server resets.
temporary - They cease to exist when the server resets.

Prefix: scope and extent
nothing - A permanent variable attached to the character, the default
variable type.
"@" - A temporary variable attached to the character.
SVN versions before 2094 revision and RC5 version will also treat
'l' as a temporary variable prefix, so beware of having variable
names starting with 'l' if you want full backward compatibility.
"$" - A global permanent variable.
They are stored in "save\mapreg.txt" or database table `mapreg`,
depending on server type.
"$@" - A global temporary variable.
This is important for scripts which are called with no RID
attached, that is, not triggered by a specific character object.
"." - A NPC variable.
They exist in the NPC and dissapear when the server restarts or the
npc is reloaded. Can be accessed from inside the NPC or by calling
'getvariableofnpc'.
".@" - A scope variable.
They are unique to the instance and scope. Each instance has it's
own scope that ends when the script ends. Calling a function with
callsub/callfunc starts a new scope, returning from the function
ends it. When a scope ends, it's variables are converted to values
('return .@var;' returns a value, not a reference).
"#" - A permanent local account variable.
They are stored with all the account data in "save\accreg.txt" in
TXT versions and in the SQL versions in the 'global_reg_value'
table using type 2.
"##" - A permanent global account variable stored by the login server.
They are stored in "save\account.txt" and in the SQL versions in the
'global_reg_value' table, using type 1. The only difference you will
note from normal # variables is when you have multiple char-servers
connected to the same login server. The # variables are unique to
each char-server, while the ## variables are shared by all these
char-servers.

Postfix: integer or string
nothing - integer variable, can store positive and negative numbers, but only
whole numbers (so don't expect to do any fractional math)
'$' - string variable, can store text

Examples:
name - permanent character integer variable
name$ - permanent character string variable
@name - temporary character integer variable
@name$ - temporary character string variable
$name - permanent global integer variable
$name$ - permanent global string variable
$@name - temporary global integer variable
$@name$ - temporary global string variable
.name - npc integer variable
.name$ - npc string variable
.@name - scope integer variable
.@name$ - scope string variable
#name - permanent local account integer variable
#name$ - permanent local account string variable
##name - permanent global account integer variable
##name$ - permanent global account string variable

If a variable was never set, it is considered to equal zero for integer
variables or an empty string ("", nothing between the quotes) for string
variables. Once you set it to that, the variable is as good as forgotten
forever, and no trace remains of it even if it was stored with character or
account data.

Some variables are special, that is, they are already defined for you by the
scripting engine. You can see the full list somewhere in 'db/const.txt', which
is a file you should read, since it also allows you to replace lots of numbered
arguments for many commands with easier to read text. The special variables most
commonly used are all permanent character-based variables:

StatusPoint - Amount of status points remaining.
BaseLevel - Current base level
SkillPoint - Amount of skill points remaining
Class - Current job
Upper - 1 if the character is an advanced job class.
Zeny - Current amount of zeny
Sex - Character's gender, 0 if female, 1 if male.
Weight - The weight the character currently carries.
MaxWeight - The maximum weight the character can carry.
JobLevel - Character's job level
BaseExp - The amount of base experience points the character has.
Notice that it's zero (or close) if the character just got a level.
JobExp - Same for job levels
NextBaseExp - Amount of experience points needed to reach the next base level.
NextJobExp - Same for job levels.
Hp - Current amount of hit points.
MaxHp - Maximum amount of hit points.
Sp - Current spell points.
MaxSp - Maximum amount of spell points.
BaseJob - This is sneaky, apparently meant for baby class support.
This will supposedly equal Job_Acolyte regardless of whether the
character is an acolyte or a baby acolyte, for example.
Karma - The character's karma. Karma system is not fully functional, but
this doesn't mean this doesn't work at all. Not tested.
Manner - The character's manner rating. Becomes negative if the player
utters words forbidden through the use of 'manner.txt' client-side
file.

While these behave as variables, do not always expect to just set them - it is
not certain whether this will work for all of them. Whenever there is a command
or a function to set something, it's usually preferable to use that instead. The
notable exception is Zeny, which you can and often will address directly -
setting it will make the character own this number of zeny.
If you try to set Zeny to a negative number, the script will be terminated with an error.

[/SPOILER]

Автор: -OnIZuCa-: Дата: 01.21.2010

Прочитал, но многого не понял((

Автор: 879546: Дата: 01.21.2010

Перевод, или суть?

Автор: -OnIZuCa-: Дата: 01.21.2010

Суть, я сейчас читаю "script_commands" но там тоже многое не понятно.((

Автор: -OnIZuCa-: Дата: 01.21.2010

Чет я совем не понимаю как его написать((
Если не трудно то помогите=)

Мне помогут или нет?