Jump to content

AnnieRuru

Script Developers
  • Content Count

    1677
  • Joined

  • Last visited

  • Days Won

    246

AnnieRuru last won the day on August 20

AnnieRuru had the most liked content!

About AnnieRuru

  • Rank
    ~~Cute~Cute~Scripter~~

Contact Methods

  • Discord
    AnnieRuru#1609

Profile Information

  • Gender
    Female
  • Location:
    your next door ~
  • Interests
    event scripts ~ battleground scripts ~
    making battleground scripts is my hobby ~
  • Github
    AnnieRuru
  • Emulator
    Hercules
  • Client Version
    2019-05-30aRagexeRE

Recent Profile Visitors

27956 profile views
  1.  

    cell pvp blink

  2. goto Hercules github, click History https://github.com/HerculesWS/Hercules/commits/stable/npc/jobs/2-1/hunter.txt it's the same thing
  3. can't reproduce your problem SoulLinker: { MaxLevel: 123 Exp: [ 2500, 4200, 7000, 10300, 15900, 18900, 20900, 22600, 24900, 28800, 31500, 32000, 33300, 35100, 40500, 44100, 46300, 48500, 50700, 56000, 59400, 63500, 68100, 75000, 85700, 90500, 96600, 102600, 108600, 119700, 126000, 132300, 138600, 146100, 157500, 170600, 180400, 190300, 196800, 214900, 225200, 232000, 245700, 255900, 279300, 294000, 308700, 327000, 345400 ] } my max level becomes 123 ok wait, this is renewal, let me compile to pre-renewal because I kinda remember you said using 20180620 client yup correct, if compile as pre-renewal, it will read SecondClasses: instead of SoulLinker: field in fact, pre-renwal doesn't even has SoulLinker: field so either change to renewal, or edit the source code yourself
  4. /// Updates the object's (bl) name on client. /// 0095 <id>.L <char name>.24B (ZC_ACK_REQNAME) /// 0195 <id>.L <char name>.24B <party name>.24B <guild name>.24B <position name>.24B (ZC_ACK_REQNAMEALL) /// 0A30 <id>.L <char name>.24B <party name>.24B <guild name>.24B <position name>.24B <title id>.L (ZC_ACK_REQNAMEALL2) static void clif_mobname_ack(int fd, struct block_list *bl) { nullpo_retv(bl); Assert_retv(bl->type == BL_MOB); const struct mob_data *md = BL_UCCAST(BL_MOB, bl); if (md->guardian_data && md->guardian_data->g) { clif->mobname_guardian_ack(fd, bl); } else if (battle_config.show_mob_info) { clif->mobname_additional_ack(fd, bl); } else { clif->mobname_normal_ack(fd, bl); } } if that monster belongs to the guild, it won't show the hp/maxhp /// Updates the object's (bl) name on client. /// 0095 <id>.L <char name>.24B (ZC_ACK_REQNAME) /// 0195 <id>.L <char name>.24B <party name>.24B <guild name>.24B <position name>.24B (ZC_ACK_REQNAMEALL) /// 0A30 <id>.L <char name>.24B <party name>.24B <guild name>.24B <position name>.24B <title id>.L (ZC_ACK_REQNAMEALL2) static void clif_mobname_guardian_ack(int fd, struct block_list *bl) { nullpo_retv(bl); Assert_retv(bl->type == BL_MOB); const struct mob_data *md = BL_UCCAST(BL_MOB, bl); Assert_retv(md->guardian_data && md->guardian_data->g); struct PACKET_ZC_ACK_REQNAMEALL packet = { 0 }; packet.packet_id = HEADER_ZC_ACK_REQNAMEALL; packet.gid = bl->id; memcpy(packet.name, md->name, NAME_LENGTH); memcpy(packet.guild_name, md->guardian_data->g->name, NAME_LENGTH); memcpy(packet.position_name, md->guardian_data->castle->castle_name, NAME_LENGTH); clif->send_selforarea(fd, bl, &packet, sizeof(struct PACKET_ZC_ACK_REQNAMEALL)); } it will shows the guild name, castle name etc instead of hp/maxhp this is some quick fix to not show the emprium hp/maxhp with show_mob_info src/map/clif.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/map/clif.c b/src/map/clif.c index a6427b796..9fa2323be 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -9728,12 +9728,14 @@ static void clif_mobname_additional_ack(int fd, struct block_list *bl) memcpy(packet.name, md->name, NAME_LENGTH); char mobhp[100]; char *str_p = mobhp; - if (battle_config.show_mob_info&4) - str_p += sprintf(str_p, "Lv. %d | ", md->level); - if (battle_config.show_mob_info&1) - str_p += sprintf(str_p, "HP: %u/%u | ", md->status.hp, md->status.max_hp); - if (battle_config.show_mob_info&2) - str_p += sprintf(str_p, "HP: %u%% | ", get_percentage(md->status.hp, md->status.max_hp)); + if (md->class_ != MOBID_EMPELIUM) { + if (battle_config.show_mob_info&4) + str_p += sprintf(str_p, "Lv. %d | ", md->level); + if (battle_config.show_mob_info&1) + str_p += sprintf(str_p, "HP: %u/%u | ", md->status.hp, md->status.max_hp); + if (battle_config.show_mob_info&2) + str_p += sprintf(str_p, "HP: %u%% | ", get_percentage(md->status.hp, md->status.max_hp)); + } //Even thought mobhp ain't a name, we send it as one so the client //can parse it. [Skotlex] if (str_p != mobhp) { btw, I don't really call this a bug ... but it's true emperium should belongs to CLASS_GUARDIAN according to aegis .... this one ... I don't really have a good idea how to make a correct fix on github, because emperium that belongs to guild doesn't show the information, which is working as intended
  5. { Id: 909 AegisName: "Jellopy" Name: "Jellopy" Buy: 6 Weight: 10 BuyingStore: true ShowDropEffect: true DropEffectMode: 2 }, https://github.com/HerculesWS/Hercules/blob/stable/doc/item_db.txt#L374-L381 your client needs to support 0xadd packet, which is 20180418 and above
  6. AnnieRuru

    @itemdestroy

    eamod's `@itemdestroy` doesn't include cards so `@itemdestroy 4001` will not destroy the poring card that already slot into the equipment the purpose of this mod is just to remove certain ... event related items I guess .... hmmm .... upon reading the code, I don't really think this will work ... let me test #include "common/hercules.h" #include "map/pc.h" #include "map/itemdb.h" #include "map/storage.h" #include "common/nullpo.h" #include "plugins/HPMHooking.h" #include "common/HPMDataCheck.h" HPExport struct hplugin_info pinfo = { "itemdestroy", SERVER_TYPE_MAP, "0.1", HPM_VERSION, }; ACMD(itemdestroy) { int nameid = atoi(message); if (itemdb->exists(nameid) == 0) { clif->message(fd, "Enter a Valid Item ID. Usage: @itemdestroy <itemid>"); return false; } int i; struct map_session_data *psd; struct s_mapiterator *iter = mapit_getallusers(); for (psd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); psd = BL_UCAST(BL_PC, mapit->next(iter))) { for (i = 0; i < MAX_INVENTORY; ++i) { // Inventory Removal if (psd->status.inventory[i].nameid != nameid) continue; pc->delitem(psd, i, psd->status.inventory[i].amount, 0, 0, LOG_TYPE_COMMAND); } for (i = 0; i < MAX_CART; ++i) { // Cart Removal if (psd->status.cart[i].nameid != nameid) continue; pc->cart_delitem(psd, i, psd->status.cart[i].amount, 0, LOG_TYPE_COMMAND); } for (i = 0; i < VECTOR_LENGTH(psd->storage.item); ++i) { // Storage Removal struct item *sitem = &VECTOR_INDEX(psd->storage.item, i); nullpo_ret(sitem); if (sitem->nameid == nameid) storage->delitem(psd, i, sitem->amount); } storage->close(psd); if (psd->status.guild_id > 0) { // Guild Storage Removal gstorage->open(sd); struct guild_storage *stor; nullpo_ret(stor=idb_get(gstorage->db, psd->status.guild_id)); for (i = 0; i < MAX_GUILD_STORAGE; ++i) { if (stor->items[i].nameid != nameid) continue; gstorage->delitem(psd, stor, i, stor->items[i].amount); } gstorage->close(psd); } } mapit->free(iter); return true; } HPExport void plugin_init(void) { addAtcommand("itemdestroy", itemdestroy); } yup doesn't work, the guild storage opens up, and there are delay between map-server and char-server when determine the client actually accessing the guild storage or not in fact, eamod's item destroy doesn't even include guild storage or mail removal /*========================================== Item Removal *------------------------------------------*/ void pc_item_remove4all(int nameid, bool char_server) { if( char_server ) chrif_item_remove4all(nameid); else { struct map_session_data *sd; struct s_mapiterator* iter; int index; iter = mapit_getallusers(); for( sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); sd = (TBL_PC*)mapit_next(iter) ) { for( index = 0; index < MAX_INVENTORY; index++ ) { // Inventory Removal if( sd->status.inventory[index].nameid != nameid ) continue; pc_delitem(sd, index, sd->status.inventory[index].amount, 0, 0, LOG_TYPE_COMMAND); } for( index = 0; index < MAX_CART; index++ ) { // Cart Removal if( sd->status.cart[index].nameid != nameid ) continue; pc_cart_delitem(sd, index, sd->status.cart[index].amount, 0, LOG_TYPE_COMMAND); } for( index = 0; index < MAX_STORAGE; index++ ) { // Storage Removal if( sd->status.storage.items[index].nameid != nameid ) continue; storage_delitem(sd, index, sd->status.storage.items[index].amount); } for( index = 0; index < MAX_EXTRA_STORAGE; index++ ) { // Extra Storage if( sd->status.ext_storage.items[index].nameid != nameid ) continue; ext_storage_delitem(sd, index, sd->status.ext_storage.items[index].amount); } } mapit_free(iter); } } this idea is fantastic, only in theory, but doesn't work on live server better just run DELETE syntax from MySQL and remove the item when server is offline
  7. well yes, almost same concept here this is rip from clif.c /// Presents list of items, that can be sold to an NPC shop (ZC_PC_SELL_ITEMLIST). /// 00c7 <packet len>.W { <index>.W <price>.L <overcharge price>.L }* static void clif_selllist(struct map_session_data *sd) { int c = 0, val; nullpo_retv(sd); int fd = sd->fd; WFIFOHEAD(fd, sd->status.inventorySize * 10 + 4); WFIFOW(fd,0)=0xc7; for (int i = 0; i < sd->status.inventorySize; i++) { if( sd->status.inventory[i].nameid > 0 && sd->inventory_data[i] ) { if( !itemdb_cansell(&sd->status.inventory[i], pc_get_group_level(sd)) ) continue; if (sd->status.inventory[i].favorite != 0) continue; // Cannot Sell Favorite item if( sd->status.inventory[i].expire_time ) continue; // Cannot Sell Rental Items if( sd->status.inventory[i].bound && !pc_can_give_bound_items(sd)) continue; // Don't allow sale of bound items val=sd->inventory_data[i]->value_sell; if( val < 0 ) continue; WFIFOW(fd,4+c*10)=i+2; WFIFOL(fd,6+c*10)=val; WFIFOL(fd,10+c*10)=pc->modifysellvalue(sd,val); c++; } } WFIFOW(fd,2)=c*10+4; WFIFOSET(fd,WFIFOW(fd,2)); }
  8. its either monthly or weekly, no both if needs both, its still possible but whole system needs to rewrite, not a free script anymore (means I charge for it) https://github.com/AnnieRuru/Release/blob/master/scripts/PvP %26 GvG/Dota PVP ladder/dota_sql_ladder_3.6_week_reward.txt
  9. must be caused by `@killmonster` or something like that just tested `@killmonster` or `@killmonster2` will trigger the monster label, so ... shouldn't happen this way script `*killmonster` or `*killmonsterall` ?? then there's the problem ..... - script Punching Bag FAKE_NPC,{ OnInit: .mobid = monster("prontera",158,183, "Punching Bag", BARRICADE, 1, "Punching Bag::OnInit"); setunitdata .mobid, UDT_MAXHP, 2000000000; OnTimer10000: if (getunittype(.mobid) == -1) end; setunitdata .mobid, UDT_HP, 2000000000; initnpctimer; end; } I thought the *unitexists script command is useless so I never made a pull request for it but in this case ... we really need a console warning to tell that barricade is gone so .... I also wonder how this barricade can go missing in the first place
  10. my test server, from the screenshot provided still follow this topic https://rathena.org/board/topic/106413-kro-full-client-2020-04-09-includes-bgm-rsu/ so I downloaded kro 20200409 20200205 hexed client from nemo <-- PACKETVER client translation use all 3 zackdreaver, Asheraf, chris
  11. http://nemo.herc.ws/downloads/2020-02-05aRagexeRE/
  12. 20200205 client nothing, gravity just put it there this feature isn't available on 20190530, but appear on 20200205 so its somewhere between these date why gibberish word ? I guess I have outdated translation file
  13. this topic come out at the right time I'm not sure about debian, but I tested CentOS 7 and CentOS 8 CentOS 8 come with mysql 8.0 https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-centos-8 and this alone speed up a lot of configuration time no need to install mariadb, (rathena's guide says need to install mariadb, but I tested CentOS 8 it doesn't need it) yes CentOS 7 needs to install a lot more stuffs, CentOS 8 just much simpler
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.