Автор: FakeChel: Дата: 01.27.2011
Необходимо по завершению создания персонажа, к указанному имени добавлялся префикс. К примеру, я создаю персонажа, указываю имя "Архипоп" нажимаю "Ок". Создается персонаж с ником "Архипоп[G]" где "Архипоп"-имя указанное при создании, [G]-префикс добавленный после создания.
Возможно ли динамическое изменение имени в игре? Игрок выполняет некое действие в игре (убивает, умирает, проходит квест и т.д.) и к его основному имени прибавляется некий префикс без видимых перезагрузок?
[SPOILER="fakename()"]Собрал воедино, компилируется без ошибок, скрипт работает без ошибок.
BUILDIN_FUNC(fakename)
{
TBL_PC* sd = script_rid2sd(st);
char name[NAME_LENGTH];
const char* message = script_getstr(st,2);
if((!message || !*message) && strlen(sd->fakename) > 1) {
sd->fakename[0]='\0';
clif_charnameack(0, &sd->bl);
return 0;
}
if (!message || !*message || sscanf(message, "%23[^\n]", name) < 1) {
return 1;
}
if(strlen(name) < 2) {
return 1;
}
memcpy(sd->fakename,name,NAME_LENGTH);
sd->fakename[NAME_LENGTH-1] = '\0';
clif_charnameack(0, &sd->bl);
return 0;
}
struct script_function buildin_func[] = {
BUILDIN_DEF(fakename,"s"),
[/SPOILER]
Автор: FakeChel: Дата: 01.27.2011
Цитата Asuma;31548:
1. Поправьте запрос в char_sql/char.c
// validation success, log result
if (log_char) {
if( SQL_ERROR == Sql_Query(sql_handle, "INSERT INTO `%s` (`time`, `char_msg`,`account_id`,`char_num`,`name`,`str`,`agi`,`vit`,`int`,`dex`,`luk`,`hair`,`hair_color`)"
"VALUES (NOW(), '%s', '%d', '%d', '%s', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d')",
charlog_db, "make new char", sd->account_id, slot, esc_name, str, agi, vit, int_, dex, luk, hair_style, hair_color) )
Sql_ShowDebug(sql_handle);
}
2. Реально, но вам придется обновлять базу данных и текущую память - что есть не хорошо.
Автор: 10minutemail: Дата: 01.27.2011
Цитата FakeChel;31547:
Необходимо по завершению создания персонажа, к указанному имени добавлялся префикс. К примеру, я создаю персонажа, указываю имя "Архипоп" нажимаю "Ок". Создается персонаж с ником "Архипоп[G]" где "Архипоп"-имя указанное при создании, [G]-префикс добавленный после создания.
Возможно ли динамическое изменение имени в игре? Игрок выполняет некое действие в игре (убивает, умирает, проходит квест и т.д.) и к его основному имени прибавляется некий префикс без видимых перезагрузок?
Автор: Asuma: Дата: 01.27.2011
Ок, вы знаете что эмулятор синхронизирует свою память с базой данных?
Автор: Sanasol: Дата: 01.27.2011
нахер тут сорсы. есть скрипт на eathena.ws
Титулы выдает всякие.
Убил 20 бафо ты король бафо и т.д
http://www.eathena.ws/board/index.php?showtopic=252567&hl=title
Автор: FakeChel: Дата: 01.27.2011
В игре есть команда @fakename можно через нее попробовать сделать. Изменяемое имя в игре не обязательно сохранять в базе, пусть даже при пере-заходе оно возвращается к исходному.
Автор: FakeChel: Дата: 02.14.2011
Как сделать функцию fakename() по аналогии @fakename чтоб пользоваться в скриптах, а не через команду в игре и "atcommand"
BUILDIN_FUNC(fakename)
{
char name[NAME_LENGTH];
struct map_session_data* sd;
const char* message = script_getstr(st,2);
if((!message || !*message) && strlen(sd->fakename) > 1) {
sd->fakename[0]='\0';
clif_charnameack(0, &sd->bl);
return 0;
}
if (!message || !*message || sscanf(message, "%23[^\n]", name) < 1) {
return 1;
}
if(strlen(name) < 2) {
return 1;
}
memcpy(sd->fakename,name,NAME_LENGTH);
sd->fakename[NAME_LENGTH-1] = '\0';
clif_charnameack(0, &sd->bl);
//clif_displaymessage(sd->fd,"Fake name enabled.");
return 0;
}
Автор: FakeChel: Дата: 02.14.2011
Есть предложения?
Автор: Jarek: Дата: 02.14.2011
Мап-сервер вообще ничего не пишет?
И да, тот код - что вы написали - всё, что вы добавили, или еще что-нибудь?
Автор: FakeChel: Дата: 02.14.2011
Цитата Jarek;33812:
Мап-сервер вообще ничего не пишет?
И да, тот код - что вы написали - всё, что вы добавили, или еще что-нибудь?
BUILDIN_DEF(fakename,"s"),
в struct script_function buildin_func[] = {}
Автор: Jarek: Дата: 02.14.2011
Не обратил внимания на то, как вы обращаетесь с sd (Я удивляюсь, что компилятор даже ворнинга не выдал)
char name[NAME_LENGTH];
TBL_PC* sd;
const char* message = script_getstr(st,2);
sd = map_id2sd(st->rid);
Автор: FakeChel: Дата: 02.14.2011
Цитата Jarek;33816:
Не обратил внимания на то, как вы обращаетесь с sd (Я удивляюсь, что компилятор даже ворнинга не выдал)
Автор: Jarek: Дата: 02.14.2011
#define ACMD_FUNC(x) int atcommand_ ## x (const int fd, struct map_session_data* sd, const char* command, const char* message)
#define BUILDIN_FUNC(x) int buildin_ ## x (struct script_state* st)
char name[NAME_LENGTH];
TBL_PC* sd = map_id2sd(st->rid);
const char* message = script_getstr(st,2);
Автор: FakeChel: Дата: 02.14.2011
Собрал воедино, компилируется без ошибок, скрипт работает без ошибок.
BUILDIN_FUNC(fakename)
{
TBL_PC* sd = script_rid2sd(st);
char name[NAME_LENGTH];
const char* message = script_getstr(st,2);
if((!message || !*message) && strlen(sd->fakename) > 1) {
sd->fakename[0]='\0';
clif_charnameack(0, &sd->bl);
return 0;
}
if (!message || !*message || sscanf(message, "%23[^\n]", name) < 1) {
return 1;
}
if(strlen(name) < 2) {
return 1;
}
memcpy(sd->fakename,name,NAME_LENGTH);
sd->fakename[NAME_LENGTH-1] = '\0';
clif_charnameack(0, &sd->bl);
return 0;
}
struct script_function buildin_func[] = {
BUILDIN_DEF(fakename,"s"),