Jump to content

Tanlor

Members
  • Posts

    50
  • Joined

  • Last visited

Everything posted by Tanlor

  1. English: Do you speak Portuguese? ? The char Petrifies because you're using a SC_ value that don't exists on rAthena. The following ones will work with the same effect you wish on your Script: SC_FIREWEAPON (EFST_PROPERTYFIRE) desc: Change weapon element to Fire element val1: SC_WATERWEAPON (EFST_PROPERTYWATER) desc: Change weapon element to Water element val1: SC_WINDWEAPON (EFST_PROPERTYWIND) desc: Change weapon element to Wind element val1: SC_EARTHWEAPON (EFST_PROPERTYGROUND) desc: Change weapon element to Earth element val1: So, just change the SC_ effects and probably it'll work. Font: https://github.com/rathena/rathena/blob/master/doc/status_change.txt The enchant animation is working too? If isn't, i suggest you to use specialeffect2 280; specialeffect2 281; specialeffect2 282; specialeffect2 283; *specialeffect2 <effect number>{,<send_target>{,"<Player Name>"}}; This command behaves identically to 'specialeffect', but the effect will be centered on the invoking character's sprite. <Player name> parameter will display <effect number> on another Player than the one currently attached to the script. Like with specialeffect, when specifying a player, <send_target> must be supplied, specifying AREA will retain the default behavior of the command. If it keeps not working, please post the edited Script here and I can help you some more. Good luck! ?
  2. Posso te oferecer uma outra solução? Será que resolveria apenas bloqueando o @mobsearch no mapa do seu evento? Se sim, acesse src/map/atcommand.cpp, procure @mobsearch e mude isso: ACMD_FUNC(mobsearch) { char mob_name[100]; int mob_id; int number = 0; struct s_mapiterator* it; nullpo_retr(-1, sd); if (!message || !*message || sscanf(message, "%99[^\n]", mob_name) < 1) { clif_displaymessage(fd, msg_txt(sd,1218)); // Please enter a monster name (usage: @mobsearch <monster name>). return -1; } if ((mob_id = atoi(mob_name)) == 0) mob_id = mobdb_searchname(mob_name); if( mobdb_checkid(mob_id) == 0){ snprintf(atcmd_output, sizeof atcmd_output, msg_txt(sd,1219),mob_name); // Invalid mob ID %s! clif_displaymessage(fd, atcmd_output); return -1; } strcpy(mob_name,mob_db(mob_id)->jname); // --ja-- // strcpy(mob_name,mob_db(mob_id)->name); // --en-- snprintf(atcmd_output, sizeof atcmd_output, msg_txt(sd,1220), mob_name, mapindex_id2name(sd->mapindex)); // Mob Search... %s %s clif_displaymessage(fd, atcmd_output); it = mapit_geteachmob(); for(;;) { TBL_MOB* md = (TBL_MOB*)mapit_next(it); if( md == NULL ) break;// no more mobs if( md->bl.m != sd->bl.m ) continue; if( md->mob_id != mob_id ) continue; ++number; if( md->spawn_timer == INVALID_TIMER ) snprintf(atcmd_output, sizeof(atcmd_output), "%2d[%3d:%3d] %s", number, md->bl.x, md->bl.y, md->name); else snprintf(atcmd_output, sizeof(atcmd_output), "%2d[%s] %s", number, "dead", md->name); clif_displaymessage(fd, atcmd_output); } mapit_free(it); return 0; } Para isso: ACMD_FUNC(mobsearch) { char mob_name[100]; int mob_id; int number = 0; struct s_mapiterator* it; nullpo_retr(-1, sd); if(sd->bl.m == map_mapname2mapid("mapadoseuevento")) { clif_displaymessage(fd, "Você não pode usar Mobsearch nesse mapa."); return -1; } if (!message || !*message || sscanf(message, "%99[^\n]", mob_name) < 1) { clif_displaymessage(fd, msg_txt(sd,1218)); // Please enter a monster name (usage: @mobsearch <monster name>). return -1; } if ((mob_id = atoi(mob_name)) == 0) mob_id = mobdb_searchname(mob_name); if( mobdb_checkid(mob_id) == 0){ snprintf(atcmd_output, sizeof atcmd_output, msg_txt(sd,1219),mob_name); // Invalid mob ID %s! clif_displaymessage(fd, atcmd_output); return -1; } strcpy(mob_name,mob_db(mob_id)->jname); // --ja-- // strcpy(mob_name,mob_db(mob_id)->name); // --en-- snprintf(atcmd_output, sizeof atcmd_output, msg_txt(sd,1220), mob_name, mapindex_id2name(sd->mapindex)); // Mob Search... %s %s clif_displaymessage(fd, atcmd_output); it = mapit_geteachmob(); for(;;) { TBL_MOB* md = (TBL_MOB*)mapit_next(it); if( md == NULL ) break;// no more mobs if( md->bl.m != sd->bl.m ) continue; if( md->mob_id != mob_id ) continue; ++number; if( md->spawn_timer == INVALID_TIMER ) snprintf(atcmd_output, sizeof(atcmd_output), "%2d[%3d:%3d] %s", number, md->bl.x, md->bl.y, md->name); else snprintf(atcmd_output, sizeof(atcmd_output), "%2d[%s] %s", number, "dead", md->name); clif_displaymessage(fd, atcmd_output); } mapit_free(it); return 0; } Alterando apenas o nome "mapadoseuevento" para o nome do mapa do seu evento. Lembrando que toda alteração na pasta src só é aplicada quando você recompila o seu emulador. Bônus Caso você precise bloquear em mais de um mapa, você pode copiar apenas essa parte: if(sd->bl.m == map_mapname2mapid("mapadoseuevento")) { clif_displaymessage(fd, "Você não pode usar Mobsearch nesse mapa."); return -1; } E colar abaixo da outra (existe uma forma mais organizada, mas eu recomendo que faça assim por enquanto. Esse código serve pra bloquear outros comandos também, por exemplo, no nosso servidor o uso do @duel é bloqueado em Prontera. Você só tem que ficar atento ao return que encerra o Script, em alguns comandos é -1, outros 0 ou 1. Espero ter ajudado!
  3. Deixa eu ver como tá seu Script atual, por favor.
  4. Mude isso: prontera,164,168,3 script Loja MVP#3 873,{ callfunc "qshop",2; } Pra isso: prontera,164,168,3 script Loja MVP#3 873,{ callfunc "qshop,3"; } Sugestão minha: Se você quiser as duas lojas no mesmo NPC - já que os itens são os mesmos, você quer apenas que o jogador selecione a "moeda de troca" - mude isso: prontera,164,168,3 script Loja MVP#3 873,{ callfunc "qshop",2; } Pra isso: prontera,164,168,3 script Loja MVP#3 873,{ callfunc "qshop",2,3; } E renomeie as lojas pro nome da moeda de Troca. Por exemplo, se os dois itens forem "Moeda Gato" e "Moeda Cachorro", sugiro que renomeie o nome das lojas disso: setarray .Shops$[1],"Topo","Meio","Baixo"; Pra isso: setarray .Shops$[1],"Topo","Trocar por: Moeda Gato","Trocar por: Moeda Cachorro"; Assim, quando o jogador clicar no NPC "Loja MVP" em prontera,164.168 , vai aparecer um Select com as opções: Trocar por: Moeda Gato e Trocar por: Moeda Cachorro, e o jogador vai se orientar melhor. Se consegui te ajudar, só dar um Upvote pra reforçar. ?
  5. Não entendi. Você quer que um NPC tenha a opção pra abrir as duas lojas? É isso?
  6. Não vai funcionar porque você tem as mesmas functions nos dois NPC's, então um Script vai puxar a function de outro NPC. No meu servidor, por exemplo, eu uso esse Script (que é excelente mesmo, por sinal) e separei entre com anúncio e sem anúncio, em .txt's separados, e pra que funcionasse eu tive que renomear as functions no segundo Script, senão ele puxaria o do primeiro. Renomeie todas as functions e callfuncs do Script, bem como todos os qshops ( porque se o seu segundo Script tiver nome "qshop" no Script, o segundo vai puxar o do primeiro ) pra que cada .txt se torne único.
  7. @AnnieRuru always with the best answer lol ?
  8. Hello Dolphin! You need to apply the novending mapflag on the maps you don't wanna vending. To do that, you need to make a Script like this: mapname<tab>mapflag<tab>novending For example: prontera<tab>mapflag<tab>novending And people will not be able to use Vending Skill on Prontera anymore. There's no default novending.txt by default on rAthena repositories, but you can create a novending.txt to manage easily the mapflags. You can see other mapflags examples on yourmainfolder/npc/mapflag/, and you'll undestand how you can manage it. If you want to block Vending on all maps except one, that's probably better make a Source Code Modification on src/map/skill.cpp. I can't help you on that way, but you can use the Source Support Area on forums and people will Hopefully help you, rAthena support rocks ?
  9. I don't know how to edit those functions ? Can you teach-me/send yours, please?
  10. Donated to rAthena. Feels so good, cause the support you guys give me is wonderful.

    Thank you, and if you can, do it! ?

  11. Up - Already tried Too, but it's in C, not C++, will not work on latest rAthena version. ?
  12. I know about SDE, thank you @Sofia! =D But that's really a bug, was confirmed on a git issue I opened. https://github.com/rathena/rathena/issues/3871 Already tried to change the skill type to Misc, but still bugs. ;/
  13. I know we already have a topic about that, but i think that's on a wrong forum, so I decided to post it here. On db/(pre-)re/skill_db.txt we have: // 06 nk (skill damage properties): // 0x01 - No damage skill // 0x02 - Has splash area // 0x04 - Damage should be split among targets // 0x08 - Skill ignores caster's % damage cards (misc type always ignores) // 0x10 - Skill ignores elemental adjustments // 0x20 - Skill ignores target's defense (misc type always ignores) // 0x40 - Skill ignores target's flee (magic type always ignores) // 0x80 - Skill ignores target's def cards The 0x08 is not working and it's crucial for pre-renewal formulas, like Cart Termination. Other skills that use that nk: Soul DestroyerBulls EyeThrow Venom KnifeWall of Thorns Already tried: https://github.com/rathena/rathena/issues/2577 But it's still not working for me, and WS, for example, are insanely OP on my server because of that. ? My skill_db.txt CART TERMINATION line: 485,-2,6,1,-1,0x8,0,10,1,no,0,0,0,weapon,0,0x204000, WS_CARTTERMINATION,Cart Termination Can you guys help me, please? Edit: For aditional information, i'm using Latest rAthena version, recompiling with cmake3 on my Linux Centos7 KVM server.
  14. Still not working for me! Did the fixes in battle.cpp found at https://github.com/rathena/rathena/issues/2577 and still not working. My skill_db.txt CART TERMINATION line: 485,-2,6,1,-1,0x8,0,10,1,no,0,0,0,weapon,0,0x204000, WS_CARTTERMINATION,Cart Termination
  15. Tenta usar o e-mail como opção de delete, a Data de Aniversário também não deu muito certo pra mim.
  16. Nowadays there's any way to prevent the Ultimate Alt+F4? Because people are abusing it from my server. ;/ Like, change the time the char will remain connected in game after Client Close...
  17. Hello Functor! I'm interested to buy Gepard for my server. Can we talk about it, please? ?

    1. Functor

      Functor

      Hello! Check PM.

  18. Hello! I'm trying to disable the Emperium Skill Immunity when it spawns out of a gvg_castle mapflag. It's cause I NEED to enable SG_Hate (Star Gladiator Oposition) on that, so SG can boost the damage on the Emperium before WoE Starts. How I do this? My Emperium is actually immune to Skills in all maps (MO_TRIPLEATTACK works on it, btw) My Skill.cpp: if (ud && ud->immune_attack) return false; if(md && md->guardian_data) { if ((status_bl_has_mode(bl,MD_SKILL_IMMUNE) || (class_ == MOBID_EMPERIUM && !(skill_get_inf3(skill_id)&INF3_HIT_EMP))) && flag&BF_SKILL) //Skill immunity. return false; I searched a lot on how to change that i didn't found anything. The solutions I had was in C.
  19. How to make it now with C++? Cause that's .cpp now, not .c and I need it so much ?
  20. Got it guys: pc.cpp class_ = status_get_class(bl); if (!pcdb_checkid(class_)) { unsigned int max_hp = status_get_max_hp(bl); if ((pos == 1 && max_hp < 6000) || (pos == 2 && max_hp < 20000)) return false; if (pos != status_get_size(bl)) return false; //Wrong size Replaced with: class_ = status_get_class(bl); if (!pcdb_checkid(class_)) { unsigned int max_hp = status_get_max_hp(bl); if ((pos == 1 && max_hp < 6000) || (pos == 2 && max_hp < 20000)) return false; // if (pos != status_get_size(bl)) // return false; //Wrong size }
  21. Hello community! I want to remove the SG_HATE - Star Gladiator Oppositions restriction by mob, so you can choose any mob to make an Opposition for on any of 3 skill levels. The default is: I wanna remove the HP and Size Restriction, so the players can choose 3 MVP's to make an Opposition for, as well as the Emperium, for example. My actual skill.cpp SG_HATE is: case SG_HATE: if (sd) { clif_skill_nodamage(src,bl,skill_id,skill_lv,1); if (!pc_set_hate_mob(sd, skill_lv-1, bl)) clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0); } break; Any clue to how I can do that? Thank you guys! ?
  22. What a beautiful script, Emistry! ;D
  23. Hello community! I'm trying to implement the new Star Gladiator and Soul Link sprites on my 2015-11-04 Client so the players have an option to use that instead SG and SL ones. The way I found to do that was by replacing the Job Sprites with non-combat sprites, Like 'Oktoberfest' and 'Summer', than using the changebase script on the id of that non-combat sprites (now with the SE and SR sprites) like the Dress Room npc does. The total ammount of Sprites I replaced was 4, one for SE, another for SE Cash-mounted, One for SR and another for SR Cash-mounted, so when the player use the cashmount item to mount2, the item triggers a changebase script that change the visual to the mounted one for the current player Job, as long as the Mount2 status so the player can't attack. Like, if the player uses the mount2 item as an SG, it gets a Poring Mount, but if the player is changebased to SE sprite it get no mount2 because the non-combat sprite don't have a mounted sprite, so the right way is the changebase it again to a mounted job sprite id. The problem is, there's a way on script to check if the player is "changebased" to another job? Like if(ischangebased == 4016) or something else? With something like that, I can solve my problem at all. Thank you very much!
  24. It recompiles but don't solve the problem, but I found another way to fix it. You can mount on Ferus with: while "changebased" to RK Sprite, so the Way I fix it is to make the player atcommand the above command if it's a LK! when it clicks on the Tammer npc. Tyvm ?
×
×
  • Create New...