Nurkz

Donators
  • Публикации

    175
  • Зарегистрирован

  • Посещение

Все публикации пользователя Nurkz

  1. Куплю команду

    Нет ты ничего не видел
  2. Сам думал о такой идее, но все упиралось во время. Нужна будет любая помощь, можете писать Тоже интересно, на чем пишете? Пс. На open-source проект пойдёт куда быстрее.
  3. Пиратский сервер Raggame

    Вы правы, но очень многое было переписано, можно считать это был своего рода эксклюзив. И всё же, за основу брался старенький еАмод. =) Но были и свои проблемы, недочеты, поэтому мы недавно перешли на Herc.  
  4.   Глянул, в последних ра проверку из clif_parse_loadEndAck засунули в src/map/pc.c функция pc_setpos for( i = 0; i < EQI_MAX; i++ ) { if( sd->equip_index[i] >= 0 ) if( pc_isequip(sd,sd->equip_index[i]) ) pc_unequipitem(sd,sd->equip_index[i],2); }   Ну и в src/map/map.c функция map_quit for (i = 0; i < EQI_MAX; i++) { if (sd->equip_index[i] >= 0) if (pc_isequip(sd,sd->equip_index[i])) pc_unequipitem(sd,sd->equip_index[i],2); }   В обоих случаях просто заменить на банальное. for (i = 0; i < EQI_MAX; i++) { if (sd->equip_index[i] >= 0) { if ((sd->class_ & MAPID_UPPERMASK) == MAPID_SUPER_NOVICE && sd->status.base_level > 96) continue; if (pc_isequip(sd,sd->equip_index[i])) pc_unequipitem(sd,sd->equip_index[i],2); } } Не идеально, но сойдет.
  5. Отключи проверку предметов для снов 99-го, pc_checkequip вроде. Или если нужно только при смене карты, clif_parse_LoadEndAck
  6. Пиратский сервер Raggame

    То чувство, когда у гепарда появился анти ддос.. А @Functor то молодец
  7. Пиратский сервер Raggame

    @Kubix! Напиши в пм, есть желание затестить YARL.
  8. Пиратский сервер Raggame

    Ребят, внедрение внешних программ запрещено =)  
  9. Пиратский сервер Raggame

    К - Качество! Или как не надо пользоваться "гуглтранслейтом"..   ПС! Фаталити!   Простите, не удержался =)
  10. Пиратский сервер Raggame

    По теме как надо косить под руофф - https://oldro.me/ Ребята, которые смогли, но их жадность их же и погубила.
  11. Куплю команду

    Ох, я и забыл что мне далеко до уровня написания кода здешнего уровня. Ну поведайте нам чего же не хватает ?
  12. Куплю команду

       
  13. Куплю команду

    Сделаю за 10$
  14. Пиратский сервер Raggame

    Ничего у них не выгорит, опыта 0, навыков 0, денег.. 0? Короче, не доживет и до открытия, нечего тут обсуждать. Никогда не отписывался в подобных темах, но с названия пригорело, сам начинал свой путь с руоффа, помню как это было. 
  15. Stylist,Reset NPC Unknown syntax

    смените кодировку на utf8
  16. Если будет нужно что, пиши телеграм @Nurkz, помогу по мере свободного времени
  17. Break (Дмитрий Корыткин)

    Чет у вас тут страсти
  18. НПЦ скрипт

    status_calc_misc(&nd->bl, &nd->status, nd->level); Извиняюсь =) Еще было бы правильно поправить status_get_status_data и status_get_base_status. Обновил пост выше.
  19. НПЦ скрипт

    В rA и Herc уже можно давным давно давать статы нпсам, но если у нас eAthena, ничего страшного, всегда можно стырить =) Ну во первых изменим в src/map/script.c функции unitskilluseid и unitskillusepos Меняем в функции unitskilluseid: if( bl != NULL ) unit_skilluse_id(bl, target_id, skill_id, skill_lv); На: if (bl != NULL) { if (bl->type == BL_NPC) { if (!((TBL_NPC*)bl)->status.hp) status_calc_npc(((TBL_NPC*)bl), true); else status_calc_npc(((TBL_NPC*)bl), false); } unit_skilluse_id(bl, target_id, skill_id, skill_lv); } И в unitskillusepos: if( bl != NULL ) unit_skilluse_pos(bl, skill_x, skill_y, skill_id, skill_lv); На: if (bl != NULL) { if (bl->type == BL_NPC) { if (!((TBL_NPC*)bl)->status.hp) status_calc_npc(((TBL_NPC*)bl), true); else status_calc_npc(((TBL_NPC*)bl), false); } unit_skilluse_pos(bl, skill_x, skill_y, skill_id, skill_lv); }   Далее добавим функцию добавления статов нпсу =) BUILDIN_FUNC(setnpcstats) { TBL_NPC* nd = NULL; unsigned int value = 0; if (script_hasdata(st,2)) nd = map_id2nd(script_getnum(st,2)); else nd = map_id2nd(st->oid); if (nd == NULL) return 0; if (script_hasdata(st,3)) value = script_getnum(st,3); if (!nd->status.hp) status_calc_npc(nd, true); else status_calc_npc(nd, false); break; nd->stat_point = value > 0 ? value : 999; status_calc_misc(&nd->bl, &nd->status, nd->level); } и ниже описываем что она будет принимать: (Всего два необязательных параметра) BUILDIN_DEF(setnpcstats,"??"),   Далее идем в src/map/status.c и функцию status_calc_bl_ в свиче добавляем новый кейс которым будет выглядеть данным образом: case BL_NPC: status_calc_npc_(BL_CAST(BL_NPC,bl), first); break; Далее ищем status_get_status_data и добавляем: case BL_NPC: return ((mobdb_checkid(((TBL_NPC*)bl)->class_) == 0) ? &((TBL_NPC*)bl)->status : &dummy_status); То же самое ниже в status_get_base_status: case BL_NPC: return ((mobdb_checkid(((TBL_NPC*)bl)->class_) == 0) ? &((TBL_NPC*)bl)->status : NULL); И добавляем функцию status_calc_npc_: int status_calc_npc_(struct npc_data *nd, bool first) { struct status_data *status = &nd->status; if (!nd) return 0; if (first) { status->hp = 1; status->sp = 1; status->max_hp = 1; status->max_sp = 1; status->def_ele = ELE_NEUTRAL; status->ele_lv = 1; status->race = RC_DEMIHUMAN; status->size = nd->size; status->rhw.range = 1 + status->size; status->mode = (MD_CANMOVE|MD_CANATTACK); status->speed = nd->speed; } status->str = nd->stat_point + nd->params.str; status->agi = nd->stat_point + nd->params.agi; status->vit = nd->stat_point + nd->params.vit; status->int_= nd->stat_point + nd->params.int_; status->dex = nd->stat_point + nd->params.dex; status->luk = nd->stat_point + nd->params.luk; status_calc_misc(&nd->bl, status, nd->level); status_cpy(&nd->status, status); return 0; } Далее заходим в src/map/status.h В самом верху песле строчки: struct mercenary_data; Добавляем: struct npc_data; Листаем в самый низ и находим: #define status_calc_mercenary(md, first) status_calc_bl_(&(md)->bl, SCB_ALL, first) Добавляем следующей строчкой: #define status_calc_npc(nd, first) status_calc_bl_(&(nd)->bl, SCB_ALL, first) Ниже видим: int status_calc_mercenary_(struct mercenary_data *md, bool first); Добавляем: int status_calc_npc_(struct npc_data *nd, bool first); Далее идём в src/map/npc.h и видим строчку: unsigned size : 2; Ниже добавляем: struct status_data status; unsigned int level,stat_point; struct s_npc_params { unsigned short str, agi, vit, int_, dex, luk; } params; Вот вроде и всё, рекомпилим и пишем в скрипте: getmapxy [email protected]$, [email protected], [email protected], 1; setnpcstats getnpcid(0), 999; unitskillusepos getnpcid(0), WZ_METEOR, 10, [email protected], [email protected];   ПС! Хотя я бы всё же рекомендовал перейти на rA/Herc и использовать setunitdata. Может кому нужно будет, пусть будет.
  20. НПЦ скрипт

    А почему бы не дать нпцу статов?)
  21. подскажите с ехе для eathena

    Скажите ревизию rA или лучше выложите эмулятор.
  22. заходим в skill_db.txt и ищем: Вот и всё =) А насчет Devo, он вроде и так по дефолту работает так как ты хочешь О_О
  23. Заходим в mob.c и находим строки : } else if( mvp_sd && !md->state.npc_killmonster ) { pc_setparam(mvp_sd, SP_KILLEDRID, md->mob_id); И далее вписываем : Для rA : pc_setreg(mvp_sd, add_str("@mobdead_m"), md->bl.m); pc_setreg(mvp_sd, add_str("@mobdead_x"), md->bl.x); pc_setreg(mvp_sd, add_str("@mobdead_y"), md->bl.y); Для Herc соответственно : pc_setreg(mvp_sd, script->add_str("@mobdead_m"), md->bl.m); pc_setreg(mvp_sd, script->add_str("@mobdead_x"), md->bl.x); pc_setreg(mvp_sd, script->add_str("@mobdead_y"), md->bl.y); Сохраняем, компилим, и вуаля, у нас есть все необходимое. - script custom_drop -1,{ end; OnNPCKillEvent: switch(killedrid) { default: break; case 1002: makeitem 20000,1,mapid2name(@mobdead_m),@mobdead_x,@mobdead_y; break; } end; } Имхо, куда легче, чем лопатить всех мобов и делать их эвентными.
  24. getpartymember getcharid(1), 2; for (set [email protected], 0; [email protected] < [email protected]; set [email protected], [email protected] + 1) { if (attachrid([email protected][[email protected]])) { set round1, round1 + 1; if (round1 == 5) { warp "prontera",0,0; } } }