-
Posts
1096 -
Joined
-
Days Won
40
Content Type
Profiles
Forums
Downloads
Jobs Available
Server Database
Third-Party Services
Top Guides
Store
Everything posted by anacondaq
-
roBrowser on the biggest exUSSR internet space: http://habrahabr.ru/post/236683/
-
How to block skill usage if target on Land Protector?
anacondaq replied to anacondaq's question in Source Support
Problem not solved. Anyone can help me? -
How to block skill usage if target on Land Protector?
anacondaq replied to anacondaq's question in Source Support
-
Hi, how to do next thing? Example Player A casting Fire Bolt on Player B, If ( player B on the CELL_CHKLANDPROTECTOR ) skill will fail. Example 2: if( Player A casting NJ_BAKUENRYU on Player B && Player B on the CELL_CHKLANDPROTECTOR) skill will fail How to do that? NJ_BAKUENRYU = have splash area Firewall = do not have splash area
-
Hi, i'm playing with TK_SPTIME & TK_HPTIME, because both wont working. I found it here: static int skill_sit_in (struct block_list *bl, va_list ap) { struct map_session_data *sd; int type = va_arg(ap,int); sd = (struct map_session_data*)bl; if(!pc_issit(sd)) return 0; if(type&1 && pc_checkskill(sd,RG_GANGSTER) > 0) sd->state.gangsterparadise = 1; if(type&2 && (pc_checkskill(sd,TK_HPTIME) > 0 || pc_checkskill(sd,TK_SPTIME) > 0 )) { sd->state.rest = 1; status_calc_regen(bl, &sd->battle_status, &sd->regen); status_calc_regen_rate(bl, &sd->regen, &sd->sc); } return 0; } static int skill_sit_out (struct block_list *bl, va_list ap) { struct map_session_data *sd; int type = va_arg(ap,int); sd = (struct map_session_data*)bl; if(sd->state.gangsterparadise && type&1) sd->state.gangsterparadise = 0; if(sd->state.rest && type&2) { sd->state.rest = 0; status_calc_regen(bl, &sd->battle_status, &sd->regen); status_calc_regen_rate(bl, &sd->regen, &sd->sc); } return 0; } Each taekwon sit next at mine character. Anyone, can guide me, when will be trigger sd->state.rest And what is it "type&2"?
-
This topic is mine, and this topic about BUG caused from this mode. http://rathena.org/board/topic/98014-help-me-to-find-issue-what-make-my-dispell-work-on-normal-maps-against-players/ But i dunno which version i did use.
-
Hi, first of all this is NOT rathena issue, on rAthena anything is OK! Around 3 month ago, after wrong merge and resolving conflicts in git i did made some changes in sources (or in battle.c or in skill.c or somewhere else in sources) And now, my problem in next: Player A at for example Prontera can use Dispel with Shift (/ns) to another player in Prontera. This is wrong. Because Prontera have no pvp or other mapflags. I did tryied that on different other maps with no mapflags and i have the same bug. With other spells anything is good. My native SA_DISPELL in skill.c is clear, and the same like in rAthena. What i need from people with knowladge: 1.) How can i check each "statement" in SA_dispel to debug what is happened while i'm using dispell and what is wrong? 2.) Can anyone guide me for logic in SA_DISPELL in skill.c (code below) 3.) Can anyone help me to debug SA_DISPELL to get more information about that and find where i did mistake while i'm was merge wrong commits? case SA_DISPELL: if (flag&1 || (i = skill_get_splash(skill_id, skill_lv)) < 1) { clif_skill_nodamage(src,bl,skill_id,skill_lv,1); if((dstsd && (dstsd->class_&MAPID_UPPERMASK) == MAPID_SOUL_LINKER) || (tsc && tsc->data[SC_SPIRIT] && tsc->data[SC_SPIRIT]->val2 == SL_ROGUE) //Rogue's spirit defends againt dispel. || rnd()%100 >= 50+10*skill_lv || ( tsc && tsc->option&OPTION_MADOGEAR ) )//Mado Gear is immune to dispell according to bug report 49 [Ind] { if (sd) clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0); break; } if(status_isimmune(bl)) break; //Remove bonus_script by Dispell if (dstsd) pc_bonus_script_clear(dstsd,BSF_REM_ON_DISPELL); if(!tsc || !tsc->count) break; if( sd && dstsd && !map_flag_vs(sd->bl.m) && sd->status.guild_id == dstsd->status.guild_id ) { clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0); break; } for(i=0;i<SC_MAX;i++) { if (!tsc->data[i]) continue; switch (i) { case SC_WEIGHT50: case SC_WEIGHT90: case SC_HALLUCINATION: case SC_STRIPWEAPON: case SC_STRIPSHIELD: case SC_STRIPARMOR: case SC_STRIPHELM: case SC_CP_WEAPON: case SC_CP_SHIELD: case SC_CP_ARMOR: case SC_CP_HELM: case SC_COMBO: case SC_STRFOOD: case SC_AGIFOOD: case SC_VITFOOD: case SC_INTFOOD: case SC_DEXFOOD: case SC_LUKFOOD: case SC_HITFOOD: case SC_FLEEFOOD: case SC_BATKFOOD: case SC_WATKFOOD: case SC_MATKFOOD: case SC_DANCING: case SC_EDP: case SC_AUTOBERSERK: case SC_CARTBOOST: case SC_MELTDOWN: case SC_SAFETYWALL: case SC_SMA: case SC_SPEEDUP0: case SC_NOCHAT: case SC_ANKLE: case SC_SPIDERWEB: case SC_JAILED: case SC_ITEMBOOST: case SC_EXPBOOST: case SC_LIFEINSURANCE: case SC_BOSSMAPINFO: case SC_PNEUMA: case SC_AUTOSPELL: case SC_INCHITRATE: case SC_INCATKRATE: case SC_NEN: case SC_READYSTORM: case SC_READYDOWN: case SC_READYTURN: case SC_READYCOUNTER: case SC_DODGE: case SC_WARM: case SC_SPEEDUP1: case SC_AUTOTRADE: case SC_CRITICALWOUND: case SC_JEXPBOOST: case SC_INVINCIBLE: case SC_INVINCIBLEOFF: case SC_HELLPOWER: case SC_MANU_ATK: case SC_MANU_DEF: case SC_SPL_ATK: case SC_SPL_DEF: case SC_MANU_MATK: case SC_SPL_MATK: case SC_RICHMANKIM: case SC_ETERNALCHAOS: case SC_DRUMBATTLE: case SC_NIBELUNGEN: case SC_ROKISWEIL: case SC_INTOABYSS: case SC_SIEGFRIED: case SC_FOOD_STR_CASH: case SC_FOOD_AGI_CASH: case SC_FOOD_VIT_CASH: case SC_FOOD_DEX_CASH: case SC_FOOD_INT_CASH: case SC_FOOD_LUK_CASH: case SC_SEVENWIND: case SC_MIRACLE: case SC_S_LIFEPOTION: case SC_L_LIFEPOTION: case SC_INCHEALRATE: case SC_ELECTRICSHOCKER: case SC__STRIPACCESSORY: //case SC_SAVAGE_STEAK: case SC_COCKTAIL_WARG_BLOOD: case SC_MINOR_BBQ: //case SC_SIROMA_ICE_TEA: case SC_DROCERA_HERB_STEAMED: case SC_PUTTI_TAILS_NOODLES: case SC_NEUTRALBARRIER_MASTER: case SC_NEUTRALBARRIER: case SC_STEALTHFIELD_MASTER: case SC_STEALTHFIELD: case SC_GIANTGROWTH: case SC_MILLENNIUMSHIELD: case SC_REFRESH: case SC_STONEHARDSKIN: case SC_VITALITYACTIVATION: case SC_FIGHTINGSPIRIT: case SC_ABUNDANCE: case SC__SHADOWFORM: case SC_LEADERSHIP: case SC_GLORYWOUNDS: case SC_SOULCOLD: case SC_HAWKEYES: case SC_PUSH_CART: case SC_RAISINGDRAGON: case SC_GT_ENERGYGAIN: case SC_GT_CHANGE: case SC_GT_REVITALIZE: case SC_REFLECTDAMAGE: case SC_INSPIRATION: case SC_EXEEDBREAK: case SC_FORCEOFVANGUARD: case SC_BANDING: case SC_DUPLELIGHT: case SC_EXPIATIO: case SC_LAUDAAGNUS: case SC_LAUDARAMUS: case SC_GATLINGFEVER: case SC_INCREASING: case SC_ADJUSTMENT: case SC_MADNESSCANCEL: case SC_ANGEL_PROTECT: case SC_MONSTER_TRANSFORM: case SC_FULL_THROTTLE: case SC_REBOUND: case SC_TELEKINESIS_INTENSE: case SC_HEAT_BARREL: case SC_HEAT_BARREL_AFTER: case SC_P_ALTER: case SC_E_CHAIN: case SC_C_MARKER: case SC_B_TRAP: case SC_H_MINE: case SC_RECOGNIZEDSPELL: case SC_MTF_ASPD: case SC_MTF_RANGEATK: case SC_MTF_MATK: case SC_MTF_MLEATKED: case SC_MTF_CRIDAMAGE: case SC_GN_CARTBOOST: case SC_AUTOREFRESH: #ifdef RENEWAL case SC_EXTREMITYFIST2: #endif continue; /** * bugreport:4888 these songs may only be dispelled if you're not in their song area anymore **/ case SC_WHISTLE: case SC_ASSNCROS: case SC_POEMBRAGI: case SC_APPLEIDUN: case SC_HUMMING: case SC_DONTFORGETME: case SC_FORTUNE: case SC_SERVICE4U: if(tsc->data[i]->val4==0) continue; //if in song-area don't end it break; case SC_ASSUMPTIO: if( bl->type == BL_MOB ) continue; break; } if(i == SC_BERSERK) tsc->data[i]->val2=0; //Mark a dispelled berserk to avoid setting hp to 100 by setting hp penalty to 0. status_change_end(bl, (sc_type)i, INVALID_TIMER); } break; } //Affect all targets on splash area. map_foreachinrange(skill_area_sub, bl, i, BL_CHAR, src, skill_id, skill_lv, tick, flag|1, skill_castend_damage_id); break;
-
Hi, i want to make next thing. As we all know we have at db/pre or re/skill_require_db.txt With next structure: SkillID,HPCost,MaxHPTrigger,SPCost,HPRateCost,SPRateCost,ZenyCost,RequiredWeapons,RequiredAmmoTypes,RequiredAmmoAmount,RequiredState,RequiredStatuses,SpiritSphereCost,RequiredItemID1,RequiredItemAmount1,RequiredItemID2,RequiredItemAmount2,RequiredItemID3,RequiredItemAmount3,RequiredItemID4,RequiredItemAmount4,RequiredItemID5,RequiredItemAmount5,RequiredItemID6,RequiredItemAmount6,RequiredItemID7,RequiredItemAmount7,RequiredItemID8,RequiredItemAmount8,RequiredItemID9,RequiredItemAmount9,RequiredItemID10,RequiredItemAmount10,RequiredEquipment I need to modify sources & that db to next prototype: Original: 289,0,0,1,0,0,0,99,0,0,none,0,0,715,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SA_DISPELL Modified: 289,0,0,1,0,0,0,99,0,0,none,0,0,715:505:506,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SA_DISPELL What i want to get by this edit: IF player have itemID 715 (yellow gemstone) -> he can use spell and that item will be removed (like by default) IF player DON'T have itemID 715 map-server will be looking for player inventory for next value after ":", the next value in this example 505. So, if player Don't have 715, but have 505 -> the skill will require this item for skill. IF player don't have 715 or 505 in inventory -> server will looking for next item_id after ":", the next item is 506. So if player don't have 715 or 505 item in inventory (order is important) the skill will require and use 506 item id. IF player don't have any item of that list (715, 505, 506) in inventory -> skill will fail. Requirement Amount (715:505:506,1) is the same for all of this items. In few words: I want to make alternative require_db for spell in txt file which is divided by ":" (like weapon's (Spiral Pierce in renewal (it's required OR Spear or Sword)) I did found this function, and i'm get stucked. /** * Read skill requirement from skill_require_db.txt **/ static bool skill_parse_row_requiredb(char* split[], int columns, int current) {// skill_id,HPCost,MaxHPTrigger,SPCost,HPRateCost,SPRateCost,ZenyCost,RequiredWeapons,RequiredAmmoTypes,RequiredAmmoAmount,RequiredState,RequiredStatuss,SpiritSphereCost,RequiredItemID1,RequiredItemAmount1,RequiredItemID2,RequiredItemAmount2,RequiredItemID3,RequiredItemAmount3,RequiredItemID4,RequiredItemAmount4,RequiredItemID5,RequiredItemAmount5,RequiredItemID6,RequiredItemAmount6,RequiredItemID7,RequiredItemAmount7,RequiredItemID8,RequiredItemAmount8,RequiredItemID9,RequiredItemAmount9,RequiredItemID10,RequiredItemAmount10 char* p; uint16 skill_id = atoi(split[0]), idx, i; if (!(idx = skill_get_index(skill_id))) // invalid skill id return false; skill_split_atoi(split[1],skill_db[idx].require.hp); skill_split_atoi(split[2],skill_db[idx].require.mhp); skill_split_atoi(split[3],skill_db[idx].require.sp); skill_split_atoi(split[4],skill_db[idx].require.hp_rate); skill_split_atoi(split[5],skill_db[idx].require.sp_rate); skill_split_atoi(split[6],skill_db[idx].require.zeny); //Witch weapon type are required, see doc/item_db for weapon types (View column) p = split[7]; while (p) { int l = atoi(p); if( l == 99 ) { // Any weapon skill_db[idx].require.weapon = 0; break; } else skill_db[idx].require.weapon |= 1<<l; p = strchr(p,':'); if(!p) break; p++; } //Ammo type that required, see doc/item_db for ammo types (View column) p = split[8]; while (p) { int l = atoi(p); if( l == 99 ) { // Any ammo type skill_db[idx].require.ammo = 0xFFFFFFFF; break; } else if( l ) // 0 stands for no requirement skill_db[idx].require.ammo |= 1<<l; p = strchr(p,':'); if( !p ) break; p++; } skill_split_atoi(split[9],skill_db[idx].require.ammo_qty); if( strcmpi(split[10],"hidden") == 0 ) skill_db[idx].require.state = ST_HIDDEN; else if( strcmpi(split[10],"riding") == 0 ) skill_db[idx].require.state = ST_RIDING; else if( strcmpi(split[10],"falcon") == 0 ) skill_db[idx].require.state = ST_FALCON; else if( strcmpi(split[10],"cart") == 0 ) skill_db[idx].require.state = ST_CART; else if( strcmpi(split[10],"shield") == 0 ) skill_db[idx].require.state = ST_SHIELD; else if( strcmpi(split[10],"recover_weight_rate") == 0 ) skill_db[idx].require.state = ST_RECOV_WEIGHT_RATE; else if( strcmpi(split[10],"move_enable") == 0 ) skill_db[idx].require.state = ST_MOVE_ENABLE; else if( strcmpi(split[10],"water") == 0 ) skill_db[idx].require.state = ST_WATER; else if( strcmpi(split[10],"dragon") == 0 ) skill_db[idx].require.state = ST_RIDINGDRAGON; else if( strcmpi(split[10],"warg") == 0 ) skill_db[idx].require.state = ST_WUG; else if( strcmpi(split[10],"ridingwarg") == 0 ) skill_db[idx].require.state = ST_RIDINGWUG; else if( strcmpi(split[10],"mado") == 0 ) skill_db[idx].require.state = ST_MADO; else if( strcmpi(split[10],"elementalspirit") == 0 ) skill_db[idx].require.state = ST_ELEMENTALSPIRIT; else if( strcmpi(split[10],"peco") == 0 ) skill_db[idx].require.state = ST_PECO; else skill_db[idx].require.state = ST_NONE; // Unknown or no state //Status requirements //FIXME: Default entry should be -1/SC_ALL in skill_require_db.txt but it's 0/SC_STONE. trim(split[11]); if (split[11][0] != '\0' || atoi(split[11])) { int require[MAX_SKILL_STATUS_REQUIRE]; if ((skill_db[idx].require.status_count = skill_split_atoi2(split[11], require, ":", SC_STONE, ARRAYLENGTH(require)))) { CREATE(skill_db[idx].require.status, enum sc_type, skill_db[idx].require.status_count); for (i = 0; i < skill_db[idx].require.status_count; i++) skill_db[idx].require.status[i] = (sc_type)require[i]; } } skill_split_atoi(split[12],skill_db[idx].require.spiritball); for( i = 0; i < MAX_SKILL_ITEM_REQUIRE; i++ ) { skill_db[idx].require.itemid[i] = atoi(split[13+ 2*i]); skill_db[idx].require.amount[i] = atoi(split[14+ 2*i]); } //Equipped Item requirements. //NOTE: We don't check the item is exist or not here trim(split[33]); if (split[33][0] != '\0' || atoi(split[33])) { int require[MAX_SKILL_EQUIP_REQUIRE]; if ((skill_db[idx].require.eqItem_count = skill_split_atoi2(split[33], require, ":", 500, ARRAYLENGTH(require)))) { CREATE(skill_db[idx].require.eqItem, uint16, skill_db[idx].require.eqItem_count); for (i = 0; i < skill_db[idx].require.eqItem_count; i++) skill_db[idx].require.eqItem[i] = require[i]; } } return true; }
-
Looking for any suggestions about next feature: By default SA_DISPEL required 1 Yellow Gemstone. I'm looking for any suggestions or where to start to search/think about next feature: For example we want to modify SA_DISPEL to next model: if player on map with mapflag mf_pvp -> SA_DISPEL will required item_id not Yellow Gemstone, but for example Apple. if player back to normal mapflag -> SA_DISPEL will required normal item (Yellow Gemstone) I'm planning to modify many skills. But editing each spell => bored. If there are any solution to make some config for example: emulator/db/skill_require_override.txt With next structure: skill_id,EVENT (mapflag or???),Default ID:overrided item_id Example: emulator/db/skill_required_override.txt // item_id,mapflag ID,original_item:overrided_item,original_item1:overrided_item1 // mapflags ID: // 0 = normal // 1 = pvp // 2 = woe // 3 = town // 4 = restricted // 5 = battlegrounds 289,1,715:505 // in only pvp mapflag will overwrite required item to 505
-
http://rathena.org/wiki
-
My problem is for lazy... I have thouthends of mapannounce, and sometimes i getting something like this: [Debug]: mapindex_name2id: Map "" not found in index list! I want to know more details about a reason of that Debug (sure i know, is somewhere empty or non convertable variable, or etc, but in which NPC?) We have a function what showing debuginfo. But there are not many information about "REASON"... That is very sad. unsigned short mapindex_name2id(const char* name) { int i; char map_name[MAP_NAME_LENGTH]; mapindex_getmapname(name, map_name); if( (i = strdb_iget(mapindex_db, map_name)) ) return i; ShowDebug("mapindex_name2id: Map \"%s\" not found in index list!\n", map_name); return 0; } Is that possible to add extra information to ShowDebug which NPC (if it called from NPC) have null variable problem? If yes, how? Or how to modify this function, to showing the "source npc name and string, or just source npc name" in that function? BUILDIN_FUNC(mapannounce) { const char *mapname = script_getstr(st,2); const char *mes = script_getstr(st,3); int flag = script_getnum(st,4); const char *fontColor = script_hasdata(st,5) ? script_getstr(st,5) : NULL; int fontType = script_hasdata(st,6) ? script_getnum(st,6) : 0x190; // default fontType (FW_NORMAL) int fontSize = script_hasdata(st,7) ? script_getnum(st,7) : 12; // default fontSize int fontAlign = script_hasdata(st,8) ? script_getnum(st,8) : 0; // default fontAlign int fontY = script_hasdata(st,9) ? script_getnum(st,9) : 0; // default fontY int16 m; if ((m = map_mapname2mapid(mapname)) < 0) return 0; map_foreachinmap(buildin_announce_sub, m, BL_PC, mes, strlen(mes)+1, flag&BC_COLOR_MASK, fontColor, fontType, fontSize, fontAlign, fontY); return SCRIPT_CMD_SUCCESS; }
-
I have few questions. 1.) Is that possible to do next thing? (or any another altenative) NPC_A setarray .somearray$[0],"value","value2","value3"; NPC_B $@variable$ = getvariableofnpc(.somearray$[1],"NPC_A"); 2.) Is that possible to copy array from destination array in NPC to source array? Example: NPC_A setarray .array_name[0],1,2,3,4,5,6,7,8; NPC_B setarray .some_array[0],2,3,6,2,351,6; NPC_C (here i want to get NPC based arrays to 3rd NPC from above) copyarray .thirdarray[0],.array_name[5],.some_array[3]; 3.) About variables names and their "visible zone" in NPC Tell me please, if i have two NPC, for example NPC_A .somevalue = 1; NPC_B .somevalue = 1; Does both variable names will work with UNIQUE (NPC BOUNDED variable) or it will be only one variable for both? I mean, Does NPC variables (it's hard to explain with my english) https://en.wikipedia.org/wiki/Scope_(programming)? 4.) I like to read script code from different scriptes here (AnieRuru, Euphy) (i'm somethings learning some new tricks in their scripts) Is there any good examples of advansed scripting examples? (i do not talk about wiki exaples like dyn menu, or if/else statement (var)?:this:else, i'm talking about more examples of that tricks); For example mini questions about some command There is no error deletearray .@array_name$; In documentation is deletearray .@array_name$[ where to start ], how many to remove; I saw that command in few scripts, does that mean it's totally remove array? Or what that is do? Thank you.
-
Nope, you can't do that from script commands. Only @mapexit, but that only map-exit...
-
Random warp when you select second menu to different positions. // PVP Yoyo Mode Staff //============================================================ prontera,150,150,4 script PVP Arena 559,{ mes "Hi ^ff8000"+strcharinfo(0)+"^000000,"; mes "Which arena do you want to go to?"; switch( select( "PVP Normal [ "+getmapusers("pvp_m_1-1")+" ]", "Guild Vs Guild [ "+getmapusers("magpvp")+" ]" )) { case 1: warp "pvp_m_1-1",0,0; break; case 2: if( getcharid(1) ) mes "Please leave your party."; else switch(rand(3)) { case 0: .@x = 57; .@y = 78; break; case 1: .@x = 78; .@y = 74; break; case 2: .@x = 65; .@y = 24; break; case 3: .@x = 31; .@y = 65; break; } warp "Coliseum",.@x,.@y; break; } close; OnInit: waitingroom "PVP Warper",0; end; } You select second menu, then you select to what position you want warp: // PVP Yoyo Mode Staff //============================================================ prontera,150,150,4 script PVP Arena 559,{ mes "Hi ^ff8000"+strcharinfo(0)+"^000000,"; mes "Which arena do you want to go to?"; switch( select( "PVP Normal [ "+getmapusers("pvp_m_1-1")+" ]", "Guild Vs Guild [ "+getmapusers("magpvp")+" ]" )) { case 1: warp "pvp_m_1-1",0,0; break; case 2: switch( select( "Position 1", "Position 2", "Position 3", "Position 4") ) { case 1: if( getcharid(1) ) mes "Please Leave Your Party"; else warp "Coliseum",57,78; break; case 2: if( getcharid(1) ) mes "Please Leave Your Party"; else warp "Coliseum",78,74; break; case 3: if( getcharid(1) ) mes "Please Leave Your Party"; else warp "Coliseum",65,24; break; case 4: if( getcharid(1) ) mes "Please Leave Your Party"; else warp "Coliseum",31,65; break; } } close; OnInit: delwaitingroom; waitingroom "PVP Warper",0; end; }
-
.@nb = query_sql("SELECT `id`,`cmd`,`char` FROM `CMDIST` ORDER BY `id` DESC LIMIT 1", .@id, .@cmd$, .@char$); query_sql("SELECT COUNT(column name) * FROM `auction`",.@count ); char - reserved name of MYSQL
-
As i understand by icons on minimap, that is not 2010 or 2012 game client. So, check your ItemInfo.lua in Ragnarok Online client folder
-
About rentitem2, rAthena already have that feature: http://rathena.org/wiki/Rentitem2
-
Doesnot matter. It's depends on your knowladge Ubuntu builded on debian. Both have the same packet manager (apt) Both are good Ubuntu just have latest kernel + extra features like sudo, etc.
-
src/map/pc.h #define MAX_PC_BONUS 10 Increase that value a littlebit and recompile your server.
-
request script stop bg and pvp during woe time...
anacondaq replied to dennis259's question in Script Requests
disablenpc "npcname?"; -
This guy told me that: https://github.com/rathena/rathena/blob/master/doc/script_commands.txt *monster "<map name>",<x>,<y>,"<name to show>",<mob id>,<amount>{,"<event label>",<size>,<ai>}; *areamonster "<map name>",<x1>,<y1>,<x2>,<y2>,"<name to show>",<mob id>,<amount>{,"<event label>",<size>,<ai>}; This command will spawn a monster on the specified coordinates on the specified map. If the script is invoked by a character, a special map name, "this", will be recognized to mean the name of the map the invoking character is located at. This command works fine in the item scripts. The same command arguments mean the same things as described above in the beginning of this document when talking about permanent monster spawns. Monsters spawned in this manner will not respawn upon being killed. Unlike the permanent monster spawns, if the mob id is -1, a random monster will be picked from the entire database according to the rules configured in the server for dead branches. This will work for all other kinds of non-permanent monster spawns. The only very special thing about this command is an event label, which is an optional parameter. This label is written like '<NPC object name>::<label name>' and upon the monster being killed, it will execute the script inside of the specified NPC object starting from the label given. The RID of the player attached at this execution will be the RID of the killing character. <size> can be: 0 = medium (default) 1 = small 2 = big <ai> can be: 0 = none (default) 1 = attack/friendly 2 = sphere (Alchemist skill) 3 = flora (Alchemist skill) 4 = zanzou (Kagerou/Oboro skill) monster "place",60,100,"Poring",1002,1,"NPCNAME::OnLabel"; The coordinates of 0,0 will spawn the monster on a random place on the map. The 'areamonster' command works much like the 'monster' command and is not significantly different, but spawns the monsters within a square defined by x1/y1-x2/y2. Simple monster killing script: <Normal NPC object definition. Let's assume you called him NPCNAME.> mes "[Summon Man]"; mes "Want to start the Poring hunt?"; next; if(select("Yes.:No.") == 2) { mes "[Summon Man]"; mes "Come back later."; close; } // Summon 10 Porings. // Using coordinates 0,0 will spawn them in a random location. monster "prontera",0,0,"Quest Poring",1002,10,"NPCNAME::OnPoringKilled"; mes "[Summon Man]"; mes "Now go and kill all the Porings I summoned."; close; OnPoringKilled: $PoringKilled++; if ($PoringKilled >= 10) goto L_AllDead; end; L_AllDead: announce "Summon Man: Well done. All the Porings are dead!",3; $PoringKilled = 0; end; For more good examples see just about any official 2-1 or 2-2 job quest script.
-
Sure, you can: query_sql() in /doc/scripts_commands.txt SELECT, LIMIT, ORDER, from mysql docs Command in NPC to select total zeny from all characters on the server to .@total_zeny array. query_sql(" SELECT SUM(`zeny`) FROM `char`", .@total_zeny); It will select from `char` table 10 richest players to the two arrays: .@player$[], and .@zeny[] query_sql("SELECT name, zeny FROM `char` ORDER BY DESC LIMIT 10", .@player$, .@zeny);
-
You don't need gdb on windows. Just recompile server in debug mode (VS)
-
Hi, that is very strange Issue happened at my server every %duration%. And i have no errors, warnings, or any info about that (this is very bad for me). [24/Aug 21:30][Info]: Session #38 timed out [24/Aug 21:30][Info]: Character 'randomplayer' logged off. [24/Aug 21:30][Info]: Session #10 timed out [24/Aug 21:30][Info]: Character 'name doesnot matter' logged off. [24/Aug 21:30][Info]: Session #13 timed out [24/Aug 21:30][Info]: Character 'doesnotmattername' logged off. What did happened? Server going freez (but cpu/mem is normal and not stucked) All players getting DC after some time Server DONT crash There is no errors at map-server, or warnings or any notice info except above. Players after some time can reconnect. All Vendors in @autotrade totally removed. All Vendors DONOT restore their possitions Database table for feature autotrade is EMPTY. The server was up, do not touch for around 1 week. 6 days for sure. I though that: http://rathena.org/board/topic/96553-how-to-modify-autotrade-duration/ And my options is the same // Set this to the amount of minutes autotrade chars will be kicked from the server. at_timeout: 0 I did't write to bugtracker, because i can't reproduce that bug, and i have not enough information about it. That why i'm write about this issue here. Technical Details: pre-re Git revision NOT LATEST 3efe5375f384a90775705f65e6aad3257218614c Client Date 2010-07-30 Why is that interesting for me? Because it randomly happened only after some big duration of time Because it's remove totally Vendors and do not restore them (and wipe a vendor SQL table) Because map-server going to freez for a while (~ 30-60 seconds, dunno...) Because it's map players DC sometimes What i need, and what is it? (my opinion) somewhere problem with Features Autotrade somewhere problem with some delays for autotrade or session somewhere problem in my own sources maybe bug??? P.S. I will update that topic. P.P.S. sometimes after shutdown server and restart, i have not placed back vendors, i'm going then to mysql, and checking table where are must be vendors, and this table is empty.
-
There is a answer.