Jump to content

Haziel

Content Moderator
  • Posts

    639
  • Joined

  • Last visited

  • Days Won

    89

Everything posted by Haziel

  1. It IS a square, if you set it to ,3,3 it will be 3 cells in any direction.
  2. 1. Usually NPCs do not trigger it. 2. Yes.
  3. Take a look here, here and here. You probably might find an answer. Search Tool is your friend.
  4. Your loginlog SQL Table seems to not exists. Remember to apply the logs.sql (located on sql-files/) file into your MySQL Database and set it on inter_athena.conf.
  5. Sorry, that's my fault, that .@count must be replaced by: for(set .@i,0; .@i < getarraysize(.@maps$); set .@i,.@i+1){ It's not related to your .@c.
  6. Well, you can just change the If, if there will will be only a few maps to: if ( .@map$ == "aldeg_cas01" || .@map$ == "prtg_cas01" || .@map$ == "arug_cas01" || .@map$ == "schg_cas01") { Since || means 'or'. Or else, you can set an array and verify it with a for, something like: setarray .@maps$[0],"aldeg_cas01","prtg_cas01","arug_cas01","schg_cas01"; getmapxy .@map$, .@x, .@y, 0; for(set .@i,0; .@i < .@count; set .@i,.@i+1){ if (.@map$ == .@maps$[.@i]){ query_sql "SELECT `connect_member` FROM `guild` WHERE `guild_id` = '" +getcharid(2)+ "'",.@c; if ( .@c > 10 ) { message strcharinfo(0),"Your guild members are over the limit"; sleep2 2000; warp "prontera",156,183; } end; } } end; Also, remember that only maps with loadevent mapflag will trigger the OnPCLoadMapEvent label.
  7. Sim, sim, parece a opção mais viável. Se você tiver urgência, pode contratar algum dos Scripters que oferecem seus serviços para fazê-lo, mas aí já é com você.
  8. You client is not reaching those login, char or map-servers, may your clientinfo.xml's not being read. So, verify if the GRF that it is located is being read by the data.ini.
  9. À não ser que o Cronus tenha, creio que é traduzir na mão. Abrir arquivo por arquivo da pasta npc/(pre-)re/mobs e, traduzir o nome do monstro um à um.
  10. Mother of god, ALL MUST hail Tokei. I was telling her how I (who have a really long hair) almost get bald when Thor Generator insisted on not working anymore three months ago. But I'll stop the flood here.
  11. I instructed her to use GRF Editor instead of the broken Thor Generator and everything went fine.
  12. Mudar o DB não muda o nome dado pelos Spawns, à não ser em spawns que estejam com --en--, como não é o caso dos arquivos padrão, então sim, tem que substituir a pasta se for só para mudar os nomes. Porém, por algum motivo, o brAthena está com os Spawns em Inglês também, devem ter implementado o modo re/pre-re do rAthena e ainda não retraduziram.
  13. Você pode dar uma visitadinha no brAthena e comparar uns arquivos, mas geralmente, o que define o nome dos monstros é o spawn deles, em npc/(pre-)re/mobs/dungeons, que você pode, se achar viável, substituir pelos arquivos de spawn do brAthena, ou simplesmente editar todos os arquivos.
  14. Well, it depends HOW you want to do this. If you want only one to be summoned at a time, It's fairly simple: @summon <monster name/ID> {<duration>} Spawns mobs that treat you as their master. If a duration is specified, they will stay with you until the duration has ended. @summon has a duration field (in minutes), once you set it on item usage, you just need to put a delay on Item with the same duration the monster lasts. You can edit Item Delays on db/(pre-)re/item_delay.txt. If it's not what you wnat, be more specific, there's other ways to do it.
  15. Ok, forget all I did before, please revert the diffs. The problem is, after reading part of the source, I was led to believe that that 'signature' with the name of the char was read by the checks as an EQP_COSTUME_HEAD_TOP, EQP_COSTUME_HEAD_MID, EQP_COSTUME_HEAD_LOW or EQP_COSTUME_GARMENT. That's not true. So, let's do it pretty easily. First of all, there's the case of WHICH diff are you using. I'm currently using rAmod, but I'll assume you're using this diff. If so, yet on src/map/pc.c, find the function pc_isequip, I'll guide myself by the one Fantastik posted. /*================================================= * Checks if the player can equip the item at index n in inventory. * @param sd * @param n Item index in inventory * @return ITEM_EQUIP_ACK_OK(0) if can be equipped, or ITEM_EQUIP_ACK_FAIL(1)/ITEM_EQUIP_ACK_FAILLEVEL(2) if can't *------------------------------------------------*/ uint8 pc_isequip(struct map_session_data *sd,int n) { struct item_data *item; nullpo_retr(ITEM_EQUIP_ACK_FAIL, sd); item = sd->inventory_data[n]; if(pc_has_permission(sd, PC_PERM_USE_ALL_EQUIPMENT)) return ITEM_EQUIP_ACK_OK; if(item == NULL) return ITEM_EQUIP_ACK_FAIL; if(item->elv && sd->status.base_level < (unsigned int)item->elv) return ITEM_EQUIP_ACK_FAILLEVEL; if(item->elvmax && sd->status.base_level > (unsigned int)item->elvmax) return ITEM_EQUIP_ACK_FAILLEVEL; if(item->sex != 2 && sd->status.sex != item->sex) return ITEM_EQUIP_ACK_FAIL; if (sd->sc.count) { if(item->equip & EQP_ARMS && item->type == IT_WEAPON && sd->sc.data[SC_STRIPWEAPON]) // Also works with left-hand weapons [DracoRPG] return ITEM_EQUIP_ACK_FAIL; if(item->equip & EQP_SHIELD && item->type == IT_ARMOR && sd->sc.data[SC_STRIPSHIELD]) return ITEM_EQUIP_ACK_FAIL; if(item->equip & EQP_ARMOR && sd->sc.data[SC_STRIPARMOR]) return ITEM_EQUIP_ACK_FAIL; if(item->equip & EQP_HEAD_TOP && sd->sc.data[SC_STRIPHELM]) return ITEM_EQUIP_ACK_FAIL; if(item->equip & EQP_ACC && sd->sc.data[SC__STRIPACCESSORY]) return ITEM_EQUIP_ACK_FAIL; if(item->equip && sd->sc.data[SC_KYOUGAKU]) return ITEM_EQUIP_ACK_FAIL; if (sd->sc.data[SC_SPIRIT] && sd->sc.data[SC_SPIRIT]->val2 == SL_SUPERNOVICE) { //Spirit of Super Novice equip bonuses. [Skotlex] if (sd->status.base_level > 90 && item->equip & EQP_HELM) return ITEM_EQUIP_ACK_OK; //Can equip all helms //if (sd->status.base_level > 96 && item->equip & EQP_ARMS && item->type == IT_WEAPON && item->wlv == 4) if (sd->status.base_level > 96 && item->equip & EQP_ARMS && item->type == IT_WEAPON) // Modificado 17/09/2015 switch(item->look) { //In weapons, the look determines type of weapon. case W_DAGGER: //All level 4 - Daggers case W_1HSWORD: //All level 4 - 1H Swords case W_1HAXE: //All level 4 - 1H Axes case W_MACE: //All level 4 - 1H Maces case W_STAFF: //All level 4 - 1H Staves case W_2HSTAFF: //All level 4 - 2H Staves return ITEM_EQUIP_ACK_OK; } } } //fail to equip if item is restricted if (!battle_config.allow_equip_restricted_item && itemdb_isNoEquip(item, sd->bl.m)) return ITEM_EQUIP_ACK_FAIL; //Not equipable by class. [Skotlex] if (!(1<<(sd->class_&MAPID_BASEMASK)&item->class_base[(sd->class_&JOBL_2_1)?1:((sd->class_&JOBL_2_2)?2:0)])) return ITEM_EQUIP_ACK_FAIL; if (!pc_isItemClass(sd,item)) return ITEM_EQUIP_ACK_FAIL; return ITEM_EQUIP_ACK_OK; } So, find this fragment: struct item_data *item; nullpo_ret(sd); item = sd->inventory_data[n]; And turn into this: struct item equip; struct item_data *item; int char_id = 0; nullpo_ret(sd); equip = sd->status.inventory[n]; item = sd->inventory_data[n]; So we can get the important info, which is, if the item has a signature (I don't know how you name it, I'm talking about the name that appears when someone produce an Item, in costume itens it appears Costume in blue), and, if so, if it's the name of the Reserved Char ID for it. So, now the function. Now, find this fragment: if(item == NULL) return false; And, just below it, paste this check: if( equip.card[0] == CARD0_CREATE ){ char_id = MakeDWord(equip.card[2],equip.card[3]); if( battle_config.reserved_costume_id && char_id == battle_config.reserved_costume_id) return true; } I hope all the functions needed exists on your Costume Snippet. This one was tested, but I did it on rAmod, so don't know exactly the differences.
  16. Also, found an error on my suggestion, tho, the Garment Item as with a typo, edited my previous answer. Just change all EQP_COSTUME_HEAD_GARMENT to EQP_COSTUME_GARMENT, look if the problem persists. About the weight, maybe, on src/map/pc.c find: sd->weight += w; clif_updatestatus(sd,SP_WEIGHT); And try: if (!item->equip & EQP_COSTUME_HEAD_TOP && !item->equip & EQP_COSTUME_HEAD_MID && !item->equip & EQP_COSTUME_HEAD_LOW && !item->equip & EQP_COSTUME_GARMENT){ sd->weight += w; clif_updatestatus(sd,SP_WEIGHT); }
  17. If I recall correctly, a logarithm is the calculation about which exponent a base must be raised to reach a value. If I also recall correctly, there is not a in-built function which calculates that, so, you need a Custom Function. I made this one: prontera,150,150,3 script Test#log 420,{ mes "" + callfunc("Logarithim",10,10000) + ""; close; } function script Logarithim { set @basis, getarg(0); set @value, getarg(1); set @m, @basis; for (set @n, 2; @m < @value; set @n, @n + 1){ for (set @o, 1; @o < @n; set @o, @o + 1){ set @m, @m * @basis; } if (@m == @value) return @n; else if (@m > @value) return (@n - 1); else set @m, @basis; } return 0; } It's just a scratch and I don't know if it works perfectly. By the way, you can enter an basis and a target value, it will returns either the correct Logarithim or the closest one.
  18. Dunno, the patch you're using, so, I'll assume it's similar to eAmod one, which converts the signed items to real Costume Itens for the Source eyes. So, the fuction you're looking for is on src/map/pc.c. /*================================================= * Checks if the player can equip the item at index n in inventory. * @param sd * @param n Item index in inventory * @return ITEM_EQUIP_ACK_OK(0) if can be equipped, or ITEM_EQUIP_ACK_FAIL(1)/ITEM_EQUIP_ACK_FAILLEVEL(2) if can't *------------------------------------------------*/ uint8 pc_isequip(struct map_session_data *sd,int n) { struct item_data *item; nullpo_retr(ITEM_EQUIP_ACK_FAIL, sd); item = sd->inventory_data[n]; if(pc_has_permission(sd, PC_PERM_USE_ALL_EQUIPMENT)) return ITEM_EQUIP_ACK_OK; if(item == NULL) return ITEM_EQUIP_ACK_FAIL; if(item->elv && sd->status.base_level < (unsigned int)item->elv) return ITEM_EQUIP_ACK_FAILLEVEL; if(item->elvmax && sd->status.base_level > (unsigned int)item->elvmax) return ITEM_EQUIP_ACK_FAILLEVEL; if(item->sex != 2 && sd->status.sex != item->sex) return ITEM_EQUIP_ACK_FAIL; if (sd->sc.count) { if(item->equip & EQP_ARMS && item->type == IT_WEAPON && sd->sc.data[SC_STRIPWEAPON]) // Also works with left-hand weapons [DracoRPG] return ITEM_EQUIP_ACK_FAIL; if(item->equip & EQP_SHIELD && item->type == IT_ARMOR && sd->sc.data[SC_STRIPSHIELD]) return ITEM_EQUIP_ACK_FAIL; if(item->equip & EQP_ARMOR && sd->sc.data[SC_STRIPARMOR]) return ITEM_EQUIP_ACK_FAIL; if(item->equip & EQP_HEAD_TOP && sd->sc.data[SC_STRIPHELM]) return ITEM_EQUIP_ACK_FAIL; if(item->equip & EQP_ACC && sd->sc.data[SC__STRIPACCESSORY]) return ITEM_EQUIP_ACK_FAIL; if(item->equip && sd->sc.data[SC_KYOUGAKU]) return ITEM_EQUIP_ACK_FAIL; if (sd->sc.data[SC_SPIRIT] && sd->sc.data[SC_SPIRIT]->val2 == SL_SUPERNOVICE) { //Spirit of Super Novice equip bonuses. [Skotlex] if (sd->status.base_level > 90 && item->equip & EQP_HELM) return ITEM_EQUIP_ACK_OK; //Can equip all helms //if (sd->status.base_level > 96 && item->equip & EQP_ARMS && item->type == IT_WEAPON && item->wlv == 4) if (sd->status.base_level > 96 && item->equip & EQP_ARMS && item->type == IT_WEAPON) // Modificado 17/09/2015 switch(item->look) { //In weapons, the look determines type of weapon. case W_DAGGER: //All level 4 - Daggers case W_1HSWORD: //All level 4 - 1H Swords case W_1HAXE: //All level 4 - 1H Axes case W_MACE: //All level 4 - 1H Maces case W_STAFF: //All level 4 - 1H Staves case W_2HSTAFF: //All level 4 - 2H Staves return ITEM_EQUIP_ACK_OK; } } } //fail to equip if item is restricted if (!battle_config.allow_equip_restricted_item && itemdb_isNoEquip(item, sd->bl.m)) return ITEM_EQUIP_ACK_FAIL; //Not equipable by class. [Skotlex] if (!(1<<(sd->class_&MAPID_BASEMASK)&item->class_base[(sd->class_&JOBL_2_1)?1:((sd->class_&JOBL_2_2)?2:0)])) return ITEM_EQUIP_ACK_FAIL; if (!pc_isItemClass(sd,item)) return ITEM_EQUIP_ACK_FAIL; return ITEM_EQUIP_ACK_OK; } There is a check for every limitation on equip a player may have. So, what you need to do is edit: if(item->elv && sd->status.base_level < (unsigned int)item->elv) return ITEM_EQUIP_ACK_FAILLEVEL; And //Not equipable by class. [Skotlex] if (!(1<<(sd->class_&MAPID_BASEMASK)&item->class_base[(sd->class_&JOBL_2_1)?1:((sd->class_&JOBL_2_2)?2:0)])) return ITEM_EQUIP_ACK_FAIL; So they ignore this restriction if the item is a costume. I GUESS adding this check to each If you want to ignore, may do the trick: && (!item->equip & EQP_COSTUME_HEAD_TOP && !item->equip & EQP_COSTUME_HEAD_MID && !item->equip & EQP_COSTUME_HEAD_LOW && !item->equip & EQP_COSTUME_GARMENT) Like: if(item->elv && sd->status.base_level < (unsigned int)item->elv && (!item->equip & EQP_COSTUME_HEAD_TOP && !item->equip & EQP_COSTUME_HEAD_MID && !item->equip & EQP_COSTUME_HEAD_LOW && !item->equip & EQP_COSTUME_GARMENT)) return ITEM_EQUIP_ACK_FAILLEVEL; And: if (!(1<<(sd->class_&MAPID_BASEMASK)&item->class_base[(sd->class_&JOBL_2_1)?1:((sd->class_&JOBL_2_2)?2:0)]) && (!item->equip & EQP_COSTUME_HEAD_TOP && !item->equip & EQP_COSTUME_HEAD_MID && !item->equip & EQP_COSTUME_HEAD_LOW && !item->equip & EQP_COSTUME_GARMENT)) return ITEM_EQUIP_ACK_FAIL; I only figured a way to do it it's UNTESTED, try it at YOUR OWN RISK.
  19. First of all, get your data files here: here. Question #1: Update your data, you're using wrong msgstringtable.txt. Question #2: If you used /showname and it doesn't change, you need to reDiff your Client properly, also enabling /showname. Question #3: About the pink circle, it's because the item was the newest added to your inventory. About your Sprite Error: Man, look at your own screens, your file names, you did put them on wrong folder... Look: ¿© folder and ³² files!
  20. Problem #1: This only occurs with this item? If so, post the Item Script, please. Problem #2: Use /showname. Problem #3: If your NPC is not casting errors on console, check on .conf files (scripts_custom.conf in example) if it's name is listed correctly to be load when the server starts.
  21. Haziel

    about @noks

    @noks prevents Player 2 from dealing damage, only. He will ever be able to attack, but look carefully if Player 2 DOES DAMAGE.
  22. Haziel

    about @noks

    The Screenshots are unclear, and maybe, 1 hour can be a little much and broke the Script. My config is set to 15s and it's working properly. // Time in milliseconds to activate protection against Kill Steal // Set to 0 to disable it. // If this is activated and a player is using @noks, damage from others players (KS) not in the party // will be reduced to 0. ksprotection: 15000
×
×
  • Create New...