Перейти к содержанию

команда


Рекомендуемые сообщения

*readparam(<parameter number>)

This function will return the basic stats of an invoking character, referred to

by the parameter number. Instead of a number, you can use a parameter name if it

is defined in "db/const.txt".

For reference, in there these things are defined:

StatusPoint, BaseLevel, SkillPoint, Class, Upper, Zeny, Sex, Weight, MaxWeight,

JobLevel, BaseExp, JobExp, NextBaseExp, NextJobExp, Hp, MaxHp, Sp, MaxSp,

BaseJob, Karma, Manner, bVit, bDex, bAgi, bStr, bInt, bLuk

All of these also behave as variables, but don't expect to be able to just 'set'

all of them - some will not work for various internal reasons.

// This would return how many status points you haven't spent yet

readparam(9)

Using this particular information as a function call is not required. Just

putting

StatusPoint

will give you the same result, and some of these parameters work just like

variables (i.e. you can 'set Zeny,100' to make the character have 100 Zeny,

destroying whatever Zeny they had before, or 'set Zeny,Zeny+100' to give them

100 Zeny)

You can also use this command to get stat values:

readparam(bVit)

if(readparam(bVit)<=77) goto L_End;

mes "Only people with over 77 Vit are reading this";

L_End:

close;

Читаем документацию, окда? ;)

  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

спасибо за ответ, сейчас посмотрим

if(readparam(bVit)<=77)

Я имел в виду команду по типу getmapxy

которая может определить все характеристики игрока.

Изменено пользователем Salfer
Ссылка на комментарий
Поделиться на другие сайты

спасибо за ответ, сейчас посмотрим

if(readparam(bVit)<=77)

Я имел в виду команду по типу getmapxy

которая может определить все характеристики игрока.

getmapxy определяет на какой локации находится персонаж, но уж точно не характеристики.

Ссылка на комментарий
Поделиться на другие сайты

спасибо за ответ, сейчас посмотрим

if(readparam(bVit)<=77)

Я имел в виду команду по типу getmapxy

которая может определить все характеристики игрока.


for (set .@i, 22; .@i < 28; set .@i, .@i + 1 ) {
setarray .@char_stats[.@i - 22],readparam(.@i);
}

Например :D

Тогда:

.@char_stats[0] - Вит

.@char_stats[1] - Декс

.@char_stats[2] - Аги

.@char_stats[3] - Стр

.@char_stats[4] - Инт

.@char_stats[5] - Лак

Если часто нужно - можно вынести в отдельную функцию и вызывать через callfunc. Да много чего придумать можно, было бы желание )

  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

разведчика делаю, который за денежку говорит характеристики игроков ^_^

Тогда игрока нужно будет сначала приаттачить. Не забыть, что .@ переменные привязываются к приаттаченному игроку и действуют только во время текущего диалога с нпц. Ну и да, вынесение в отдельную функцию\метку здесь будет вполне уместно.

Ссылка на комментарий
Поделиться на другие сайты

разведчика делаю, который за денежку говорит характеристики игроков ^_^

Сам допишешь) :)

prontera,141,171,5	script	Шпион	933,{
set $@player, getcharid(3);
mes "[Шпион]";
mes "Говорят хороший билд - путь к победе.";
next;
mes "[Шпион]";
mes "Введите пожалуйста никнейм чара:";
input @target$;
if (isloggedin(getcharid(3,@target$))) {
attachrid(getcharid(3,@target$));
set $@tname$, strcharinfo(0);
set $@tjob$, jobname(class);
set $@tlvl, baselevel;
set $@tjlvl, joblevel;
set $@thp, hp;
set $@tmaxhp, maxhp;
set $@tsp, sp;
set $@tmaxsp, maxsp;
set $@tstr, readparam(bstr);
set $@tagi, readparam(bagi);
set $@tvit, readparam(bvit);
set $@tint, readparam(bint);
set $@tdex, readparam(bdex);
set $@tluk, readparam(bluk);
set $@tzeny, zeny;
set $@tstpoints, statuspoint;
set $@tskpoints, skillpoint;
set $@tjchangelvl, jobchange_level;
attachrid($@player);
dispbottom "["+$@tname$+"] "+$@tjob$+" "+$@tlvl+"/"+$@tjlvl+" HP ("+$@thp+"/"+$@tmaxhp+") SP ("+$@tsp+"/"+$@tmaxsp+")";
dispbottom "Str: "+$@tstr;
dispbottom "Agi: "+$@tagi;
dispbottom "Vit: "+$@tvit;
dispbottom "Int: "+$@tint;
dispbottom "Dex: "+$@tdex;
dispbottom "Luk: "+$@tluk;
dispbottom "Zeny: "+$@tzeny;
dispbottom "Free Skill Points: "+$@tskpoints;
dispbottom "Free Status Points: "+$@tstpoints;
dispbottom "Job Change Level: "+$@tjchangelvl;
close;
}else{
dispbottom "Персонаж в оффлайне.";
close;
}
}

Изменено пользователем mrboob
  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

mrboob, если вы используете такой скрипт, то советую переписать.

Не нужны вам глобальные (пусть и временные) переменные, можно обойтись временными нпцшными .@

И да, минус скрипта - только онлайн персов можно проверить. А если очень нужно, а перса в игре нет? За доп. зени можно сделать sql-запрос.

  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

mrboob, если вы используете такой скрипт, то советую переписать.

Не нужны вам глобальные (пусть и временные) переменные, можно обойтись временными нпцшными .@

И да, минус скрипта - только онлайн персов можно проверить. А если очень нужно, а перса в игре нет? За доп. зени можно сделать sql-запрос.

Только .var , а не .@var ;)

  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

Не вижу смысла сохранять данные, ибо они используются только в данный момент, в данной инстанции

А разве .@ переменные не будут привязаны к приаттаченному персонажу? К тому, у которого проверяются всякие там статы и т.п.? Скрипт-то изначально вызывает другой персонаж. Хм

Ссылка на комментарий
Поделиться на другие сайты

"." привязан к нпц.

Я в курсе, потому их и предлагал. А спрашивал про ".@"

P.S. Да, не сразу обратил внимание... "." переменные тоже не очень подходят... Если два человека одновременно заговорят - велика вероятность перезаписи переменных, что приведет к выдаче неверной информации одному из них(обоим?). Лучшим решением, пожалуй, будет брать инфу из базы и хранить в ".@" переменных

  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

Подумал. По идее можно и без базы обойтись, но не уверен будет ли работать...

Вот набросал:

prontera,141,171,5	script	Шпион	933,{
mes "[Шпион]";
mes "Говорят хороший билд - путь к победе.";
next;
mes "[Шпион]";
mes "Введите, пожалуйста, никнейм чара:";
input .@target$;
if (isloggedin(getcharid(3,.@target$))) {
set .@player, getcharid(3);
copyarray .@charInfo[0], callfunc("getCharInfo",.@target$), 6;
attachrid(.@player); // А нужна-ли эта строчка вообще?
dispbottom "Цель: "+.@target$;
dispbottom "Str: "+.@charInfo[3];
dispbottom "Agi: "+.@charInfo[2];
dispbottom "Vit: "+.@charInfo[0];
dispbottom "Int: "+.@charInfo[4];
dispbottom "Dex: "+.@charInfo[1];
dispbottom "Luk: "+.@charInfo[5];
close;
} else {
dispbottom "Персонаж в оффлайне.";
close;
}
}

function script getCharInfo {
attachrid(getcharid(3,getarg(0)));
for (set .@i, 22; .@i < 28; set .@i, .@i + 1 ) {
setarray .@char_stats[.@i - 22],readparam(.@i);
}
return(.@char_stats);
}

Пара непонятных моментов, мб кто знает точно.

1) Возврат функцией массива правильно сработает? И сработает-ли вообще?

2) Аттач другого персонажа внутри функции аттачит его так же и к основному скрипту? По идее не должен, но уверенности нет...

  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

разведчика делаю, который за денежку говорит характеристики игроков ^_^

а из SQL базы не кошерно выбирать?Я конечно знаю что вы любители написать несколько странирц кода вместо трёх строк, но всётаки.

Изменено пользователем Renegade Bastard_1226
  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

разведчика делаю, который за денежку говорит характеристики игроков ^_^

а из SQL базы не кошерно выбирать?Я конечно знаю что вы любители написать несколько странирц кода вместо трёх строк, но всётаки.

Кошерно-кошерно (не нравится мне это слово, ы)

Интересно будет-ли работать вариант без базы. Ну и не всегда база хороша) Порой лучше из памяти взять..

P.S. Че за цифры в конце ника :blink:

Ссылка на комментарий
Поделиться на другие сайты

Ну.. Тема, пожалуй, исчерпана. Спасибо.

Пусть автор топика отпишется о результатах и прикроем лавочку ;)

  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...
Яндекс.Метрика