-
Постов
178 -
Зарегистрирован
-
Посещение
-
Победитель дней
24
Сообщения, опубликованные Nurkz
-
-
Не могу подключится к серверу, в чём причина?
В вашем clientinfo.xml стоит неправильная версия пакетов (26), нужно поменять на (33).
- 1
-
- script Time_events -1,{
OnClock0400:
OnClock0800:
OnClock1200:
OnClock1600:
OnClock2000:
OnClock0000:
if(isnight())
{
day;
announce "Солнце снова взошло.", 0;
}
end;
OnClock0300:
OnClock0700:
OnClock1100:
OnClock1500:
OnClock1900:
OnClock2300:
if(isday())
{
night;
announce "На мир опустились сумерки.", 0;
}
end;
}- 1
-
Что это за 3 предупреждения? (не считая s1/p1)
Отключение "фич", а именно auction и banking, в следствии того, что ваш клиент малость устарел.
Чтобы избавиться от предупреждений, следует в (папка с эмулятором)/conf/feature.conf отключить данные "фичи"
// Auction (Note 1)
// Feature became unstable on clients 2012 onwards (exact date not known),
// it has been fixed on clients 2013-05-15 onwards however.
feature.auction: off
...
// Banking (Note 1)
// Requires: 2013-07-24aRagexe or later
feature.banking: off- 2
-
Правильное название скрипта "Анти-Онлайн"
- script anti-bot2 -1,{
OnPCLoginEvent:
set checkbot, 0;
if( botter >= 1 )
doevent "anti-bot::Oncheckb";
}
- script anti-bot -1,{
OnNPCKillEvent:
set mob, mob +1;
if( mob < 300 ) end;
Oncheckb:
function GetString;
//if (getgmlevel() >= 3) { goto end;} /* Uncomment if you want to Ignore this by GM */
if( checkbot >= 1 ) end;
atcommand "@jail "+strcharinfo(0)+"";
set botter, 1;
set mob, 0;
sleep2 3000;
On2nd:
set .@String$,GetString( 15,rand(3,7) );
mes "Здравствуйте";
mes "У нас возникло подозрение что вы БОТ";
mes "Вы назодитесь в Тюрьме";
mes "Вы можете избежать наказания !";
mes "Введите, только то, что выделено ^FF0000Красным Цветом:^000000";
mes "Будте внимательнее !";
mes "^0000FF"+GetString( 15,rand(5,10) )+"^FF0000"+.@String$+"^0000FF"+GetString( 15,rand(3,10) )+"^000000";
input .@Input$;
if( .@Input$ != .@String$ )
{
if (botter >= 3)
{
atcommand "@unjail "+strcharinfo(0)+"";
sleep2 1000;
atcommand "@jailfor 10d "+strcharinfo(0)+"";
announce "[Anti-BOT]: Игрок [" +strcharinfo(0) +"] был пойман в Ботоводтве, Джайл 10 дней.",0,0xe80f0f;
set botter,0;
close;
}
mes "Проверка...";
set botter, botter +1;
next;
goto On2nd;
}
atcommand "@unjail "+strcharinfo(0)+"";
set botter,0;
set checkbot,1;
end;
function GetString {
if( getarg(0) & 1 ) setarray .@List$[ getarraysize( .@List$ ) ],"1","2","3","4","5","6","7","8","9";
if( getarg(0) & 2 ) setarray .@List$[ getarraysize( .@List$ ) ],"A","B","C","D","E","F","G","H","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z";
if( getarg(0) & 4 ) setarray .@List$[ getarraysize( .@List$ ) ],"a","b","c","d","e","f","g","h","i","j","k","m","n","o","p","q","r","s","t","u","v","w","x","y","z";
//if( getarg(0) & 8 ) setarray .@List$[ getarraysize( .@List$ ) ],"!","@","#","$","%","^","&","*","(",")","-","=","/","+";
set .@Str$,"";
while( getstrlen( .@Str$ ) < getarg(1) )
set .@Str$,.@Str$ + .@List$[ rand( getarraysize( .@List$ ) ) ];
return .@Str$;
}
}
sec_pri mapflag pvp off- 2
-
Где/в какой базе находится таблица loginlog, есть другие ошибки?
Проверь еще раз наличие таблицы в базе ragnarok, а так же conf/inter_athena.conf на наличие ошибок.
- 1
-
1549,Strike_eagle,Strike_eagle,5,120,,700,23,,1,4,0x0004C5B3,7,2,2,1,2,1,8,{},{},{} -
Узнать версию можно с помощью PE Viewer
- 1
-
Зайди в (папка с эмулятором)/src/config/renewal.h и закомментируй:
/// renewal ASPD [malufett]
/// (disable by commenting the line)
///
/// leave this line to enable renewal ASPD
/// - shield penalty is applied
/// - AGI has a greater factor in ASPD increase
/// - there is a change in how skills/items give ASPD
/// - some skill/item ASPD bonuses won't stack
#define RENEWAL_ASPD -
А как это сделать?
1. Заходим в папку conf, находим файл grf-files.txt и прописываем в нем путь к grf с твоими картами.
2. Заходим в папку db (если rAthena -> pre-re и re папки соответственно, в зависимости что мы используем) и удаляем файл map_cache.dat
3. Заходим в корневую папку с эмулятором и тыкаем два раза по mapcache.exe
Ждем и всё готово.
-
Какой эмулятор и что конкретно мы меняем, и на что?
-
Попробуй так что ли..
if( map[sd->bl.m].index == mapindex_name2id("payon") && (battle_config.bone_drop==2 || (battle_config.bone_drop==1 && map[sd->bl.m].flag.pvp)))
{
struct item item_tmp;
memset(&item_tmp,0,sizeof(item_tmp));
item_tmp.nameid=ITEMID_SKULL_;
item_tmp.identify=1;
item_tmp.card[0]=CARD0_CREATE;
item_tmp.card[1]=0;
item_tmp.card[2]=GetWord(sd->status.char_id,0); // CharId
item_tmp.card[3]=GetWord(sd->status.char_id,1);
map_addflooritem(&item_tmp,1,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0);
}- 1
-
prontera,156,102,0 script mobster -1,5,5,{
end;
OnTouch:
if(.mobster) end;
announce "Mobster : Monster Spawned",bc_map,"0xFFFF00";
monster "prontera",154,102,"Mobster",1869,1;
monster "prontera",154,102,"Mobster",1291,1;
monster "prontera",154,102,"Mobster",1292,1;
monster "prontera",154,102,"Mobster",1291,1;
monster "prontera",154,102,"Mobster",1869,1;
monster "prontera",154,102,"Mobster",1291,1;
monster "prontera",154,102,"Mobster",1117,1;
monster "prontera",154,102,"Mobster",1869,1;
monster "prontera",154,102,"Mobster",1117,1;
monster "prontera",154,102,"Mobster",1132,1;
monster "prontera",154,102,"Mobster",1117,1;
monster "prontera",154,102,"Mobster",1132,1;
monster "prontera",154,102,"Mobster",1292,1;
monster "prontera",154,102,"Mobster",1132,1;
monster "prontera",154,102,"Mobster",18102,1;
monster "prontera",154,102,"Mobster",1292,1;
set .mobster, 1;
initnpctimer;
end;
OnTimer60000:
set .mobster, 0;
stopnpctimer;
end;
}- 1
-
А на rand() ругается?
- 1
-
if(map[sd->bl.m].name == "MAP_PAYON" && (battle_config.bone_drop==2 || (battle_config.bone_drop==1 && map[sd->bl.m].flag.pvp)))
{
...
}ну или проще будет добавить свой mapflag
- 1
-
а где поменять этот череп на что то иное?
В (папка с игрой)/src/map/pc.c находишь:
if(battle_config.bone_drop==2 || (battle_config.bone_drop==1 && map[sd->bl.m].flag.pvp))
{
struct item item_tmp;
memset(&item_tmp,0,sizeof(item_tmp));
item_tmp.nameid=ITEMID_SKULL_;
item_tmp.identify=1;
item_tmp.card[0]=CARD0_CREATE;
item_tmp.card[1]=0;
item_tmp.card[2]=GetWord(sd->status.char_id,0); // CharId
item_tmp.card[3]=GetWord(sd->status.char_id,1);
map_addflooritem(&item_tmp,1,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0);
}И меняешь ITEMID_SKULL_ на ID нужного тебе предмета.
- 1
-
дроп итема идет 100% даже при значение 1
Извиняюсь, не досмотрел. =)
if( sd == mvp_sd && night_flag && rnd()%10000 >= 500 )
{
ditem = mob_setdropitem(7227, 1);
mob_item_drop(md, dlist, ditem, 0, 500, homkillonly);
}Соответственно rnd() на eAmod'e это rand() и homkillonly это aikillonly.
Процент дропа умножается на 100 (5% = 500).
- 1
-
Зайди в (папка с эмулятором)/src/map/mob.c и найди строчку:
// Ore Discovery [Celest]И добавь после этого:
if( sd == mvp_sd && night_flag )
{
ditem = mob_setdropitem([ID Вещи], 1);
mob_item_drop(md, dlist, ditem, 0, [Шанс Дропа], homkillonly);
}PS! В eAmod'e вместо homkillonly нужно вписать aikillonly
- 1
-
Обновил пост, добавил timetick на 30 секунд, чтобы не нагружали сервер запросами в базу.
Но ставить на сервера с большим онлайном всё равно не советую, хотя ваше дело.
-
А как же сторэйдж, сторейдж 2 (если rA или еАмод) и телеги?
Обновил пост.
- 1
-
Открываем (папка с эмулятором)/src/map/pc.h
Ищем:
int npc_timer_id; //For player attached npc timers. [Skotlex]
unsigned int chatID;
time_t idletime;Добавляем:
int npc_timer_id; //For player attached npc timers. [Skotlex]
unsigned int chatID;
time_t idletime;
time_t howmuch_tick;Далее.
Открываем (папка с эмулятором)/src/map/atcommand.c
Ищем:
static const char* atcommand_help_string(const char* command)
{
...
}Добавляем после:
ACMD_FUNC(howmuch)
{
char item[100];
int i, j, cardnum, item_count = 0;
char* data;
struct item_data *id;
const char* tables[] = { "inventory", "storage", "cart_inventory" };
nullpo_retr(-1, sd);
if (DIFF_TICK(sd->howmuch_tick, gettick()) > 0)
{
sprintf(atcmd_output, "You can use @howmuch after %d seconds.", DIFF_TICK(sd->howmuch_tick, gettick()) / 1000);
clif_displaymessage(fd, atcmd_output);
return -1;
}
if (!message || !*message || (sscanf(message, "\"%99[^\"]\"", item) < 1 && sscanf(message, "%99s", item) < 1)) {
clif_displaymessage(fd, "Please, enter an item name/id (usage: @howmuch <item name or ID>).");
return -1;
}
if ((id = itemdb_searchname(item)) == NULL && (id = itemdb_exists(atoi(item))) == NULL)
{
clif_displaymessage(fd, "Invalid item ID or name.");
return -1;
}
for (i = 0, j = 0; i < ARRAYLENGTH(tables); j = 0)
{
if (itemdb_type(id->nameid) == IT_CARD)
{
for (cardnum = 0; cardnum < 4; cardnum++)
{
if ((Sql_Query(mmysql_handle, "SELECT * FROM `%s` WHERE `card%d` = %d;", tables[i], cardnum, id->nameid) != SQL_SUCCESS))
{
Sql_ShowDebug(mmysql_handle);
return 0;
}
item_count += (int)Sql_NumRows(mmysql_handle);
}
}
if ((Sql_Query(mmysql_handle, "SELECT `amount` FROM `%s` WHERE `nameid` = %d;", tables[i++], id->nameid) != SQL_SUCCESS))
{
Sql_ShowDebug(mmysql_handle);
return 0;
}
while (SQL_SUCCESS == Sql_NextRow(mmysql_handle) && j < Sql_NumRows(mmysql_handle))
{
Sql_GetData(mmysql_handle, 0, &data, NULL);
item_count += atoi(data);
j++;
}
}
sd->howmuch_tick = 30000 + gettick();
sprintf(atcmd_output, "Total count : %d | Item id : %d ('%s'[%d])", item_count, id->nameid, id->jname, id->slot);
clif_displaymessage(fd, atcmd_output);
return 0;
}Ищем ниже:
...
ACMD_DEF(clonestat),
};
...Добавляем:
...
ACMD_DEF(clonestat),
ACMD_DEF(howmuch),
};
...Думаю как-то так.
- 2
-
Почему нет? Логика есть, значит должно работать..
-
setarray $t_id[0],2383,2410,2541;
for(set @i,0; @i < getarraysize($t_id); set @i, @i+1) {
if( isequipped($t_id[@i]) )
{
warp "geffen",0,0;
break;
}
}Попробуй так.
- 1
-
Добрый день!
Во-первых спасибо! Мне очень понравился ваш скрипт.
Немогли бы вы помочь пожалуиста переделать его с кэша на ТЦГ? ID7227. Я учусь скриптить но этот скрипт слишком сложный для меня пока что.
Благодарю!
prontera,146,166,6 script Premium Account 634,{
// Settings: -----------------------------
set .@Cost, 10; // TCG required
set .@Time, 4 * 7 * 24 * 60 * 60; // Time in Seconds = 4 weeks, 7 days per week, 24 hours per day, 60 minutes per day, 60 seconds per minute. = 1 month in this sample. in this sample.
set .@Time$, "1 month";
// ---------------------------------------
mes "[Premium Account]";
mes "I am the Premium Account seller.";
if( #PremiumUser > gettimetick(2) )
mes "Your Premium Account expires in ^FF0000" + callfunc("Time2Str",#PremiumUser) + "^000000.";
mes "What can I do for you?";
next;
// isPremium() returns 1 if the current user account is premium and it have not expired.
// It works together with #Premium_Tick, which is a account Var set with a Unix Time value, representing when the premium account expires.
// isPremium() is the same as #Premium_Tick > gettimetick(2)
switch( select("Pay for Premium Time:About Premium Account") )
{
case 1:
mes "[Premium Account]";
if( #PremiumUser > gettimetick(2) )
mes "Do you really want to extend your Premium Time?";
else
mes "You do really want to convert your account to premium?";
mes "Premium Time is ^FF0000" + .@Time$ + "^000000";
mes "Value is ^FF0000" + .@Cost + "^000000 TCG.";
next;
if( select("Yes:No") == 2 )
{
mes "[Premium Account]";
mes "Come back if you change your mind.";
close;
}
if( countitem(7227) < .@Cost )
{
mes "[Premium Account]";
mes "You don't have enough TCG.";
close;
}
if( #PremiumUser > gettimetick(2) )
set #PremiumUser, #PremiumUser + .@Time; // Time Extension
else
set #PremiumUser, gettimetick(2) + .@Time; // New premium Account
query_sql "UPDATE `login` SET level = '1' WHERE account_id = "+getcharid(3)+"";
delitem 7227, .@Cost;
mes "[Premium Account]";
mes "Congratulations!!..";
mes "Remember your Premium Account expires in ^FF0000" + callfunc("Time2Str",#PremiumUser) + "^000000.";
next;
mes "To change the status to take effect, please reenter the game.";
close;
case 2:
// Edit this messages to explain your Users about the premium account in your server.
// ----------------------------------------------------------------------------------
mes "[Premium Account]";
mes "With Premium Account you can:";
mes "Use the commands: @mobsearch,";
mes "@cast,@exp,@petrename,@where,";
mes "@changeleader, @packetfilter,";
mes "@autorefresh and other...";
mes " ";
close;
}
OnPCLoginEvent:
if( #PremiumUser > gettimetick(2)) {
// sc_start SC_ITEMBOOST,( #PremiumUser - gettimetick(2) ),50;
// sc_start SC_EXPBOOST,( #PremiumUser - gettimetick(2) ),50;
dispbottom "Remember your Premium Account expires in " + callfunc("Time2Str",#PremiumUser) + "";
}
if( #PremiumUser <= gettimetick(2) ) {
dispbottom "Time of Premium Account was ended or you don't pay for this.";
query_sql "UPDATE `login` SET level = '0' WHERE account_id = "+getcharid(3)+"";
}
end;
}Стыдно должно быть, 2 строчки не заменить.
-
Добавь элементарную проверку
if( sd->status.pet_id || sd->pd )
pet_menu(sd, 3);- 2
ошибка при создание персонажа
в Вопросы, ошибки и баги
Опубликовано
Возможные причины:
- В (папка с эмулятором)/conf/char_athena.conf отключено создание персонажей.
- В (папка с эмулятором)/conf/char_athena.conf имеются ошибки с "возможными символами" для создания персонажей.
- В используемой вами db установлена неверная кодировка. (Используйте UTF8_bin)
А так же возможно у вас нет соединения char_server'a с db или установлены неверные версии.
На всякий случай проверьте дату своего клиента, PACKETVER в ../src/common/mmo.h, packet_db_ver в ../db/packet_db.txt и clientinfo.xml