-
Content Count
1677 -
Joined
-
Last visited
-
Days Won
245
Reputation Activity
-
AnnieRuru got a reaction from IndieRO in King of Emperium Hill
I think its better to have a release topic for this instead of me update the script across separate topics
Download: Hercules 1.3
Script
Plugin for Hercules
Download: rAthena 1.2
Script.
Patch for rAthena
what this event do ? ( huh ? so popular script and I still need to explain ? )
1. make a guild
2. join this event
3. whack the emperium
4. defends it until times up
hahaha ....
How to configure the time:
L_start: <-- the label to start the event
change OnClock2000: into OnSat2000: to start this event on Saturday 8pm
L_end: <-- the label to end the event
change OnClock2030: into OnSat2030: to end this event on Saturday 8:30pm,
effectively makes this event runs 30 minutes
Frequently Asked Questions:
Question : why the Guild member can hit their own Emperium ?
Answer : because you didn't patch and recompile
Question: there is an exploit in this event, guild master can use Emergency Recall to abuse the prize
Answer : I already fixed it in this topic, now the prize reward will be given after the winner warp outside the map
original topic from eathena forum
http://www.eathena.ws/board/index.php?showtopic=174222
yeah ... I have been fixing this script since 7 years ago
-
AnnieRuru got a reaction from Yoh Asakura in Help to update this npc
LOL you mixed up both
sql query, this one added the index
alter table `char` add empbreak smallint(6) unsigned not null default 0 after unban_time, add index (empbreak);..
npc/guild/agit_main.txt
query_sql "UPDATE `char` SET empbreak = empbreak+1 WHERE char_id = " + getcharid(0);which is already correct.
.
////============================//// Emp Breaking Ladder////============================prontera,155,183,4 script Emperium Ranking 722,{ .@nb = query_sql( "select name, empbreak from `char` where empbreak > 0 order by empbreak desc limit 10", .@name$, .@empbreak ); mes "^FF0000[ Emperium Ranking ]^000000"; for ( .@i = 0; .@i < .@nb; .@i++ ) mes "^0000FF"+ ( .@i +1 ) +".^000000 " + .@name$[.@i] +" - ^FF0000"+ .@empbreak[.@i] +"^000000 Break(s)"; mes " "; query_sql "select empbreak from `char` where char_id = "+ getcharid(0), .@empbreak; mes "^0000FF["+ strcharinfo(0) +"'s]^000000 Emperium Break's is ^FF0000" + .@empbreak + "^000000 Break(s)"; close;OnInit:// waitingroom "Emperium's Ranking",0; // Look on the configuration! end;}use this script -
AnnieRuru got a reaction from Skyline in Redeemer NPC / Coupon NPC / Promotional NPC
perfectly built script, I can only see 1 bug and 2 improvements
1.
bindatcmd "claim",strnpcinfo(3)+"::OnClaim"; bindatcmd "code",strnpcinfo(3)+"::OnEditCode";when you write an atcommand that player can usealways set charcommand level to 99 or 100
its simple to reproduce
when pvp/gvg, type '#claim <player name that you hated>' and will send a chat box on the player,
cause him to have a moment of pause because need to type something
yet again ... this kind of knowledge can only acquire when you have work on a live server =/
2.
so change into like this
bindatcmd "claim",strnpcinfo(3)+"::OnClaim", 0, 100; bindatcmd "code",strnpcinfo(3)+"::OnEditCode", 99, 100;so you don't have to ( getgmlevel() < 99 ) end;
3.
query_sql "SELECT `nameid`, `amount` FROM `reward_codes` WHERE `code` = '" + escape_sql(.@pc$) + "'", .@item, .@amt; if ( !.@item ) dispbottom "Either invalid code or the code is already claimed by other people";can be simplify as if ( !query_sql( "SELECT `nameid`, `amount` FROM `reward_codes` WHERE `code` = '" + escape_sql(.@pc$) + "'", .@item, .@amt ) ) dispbottom "Either invalid code or the code is already claimed by other people"; -
AnnieRuru got a reaction from Nova in Chat space limitation!/Scammer avoid *Will pay for help*
I hope this is final one that will work
patch
src/map/clif.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+)diff --git a/src/map/clif.c b/src/map/clif.cindex d9acf07..5b3418e 100644--- a/src/map/clif.c+++ b/src/map/clif.c@@ -9110,6 +9110,22 @@ bool clif_process_message(struct map_session_data *sd, int format, char **name_, *namelen_ = namelen; *message_ = message; *messagelen_ = messagelen;++ {+ int i, l = strlen(message);+ for ( i = 0; i <= l; i++ )+ if ( message[i] == 'xA0' )+ message[i] = 'x20'; // replace Alt+0160 into [space]+ if ( stristr( message, " " ) ) {+ clif->colormes( sd->fd, COLOR_RED, "You are only allow to type maximum of 3 spaces in a dialog." );+ return false;+ }+ if ( stristr( message, "x20x3Ax20" ) || stristr( message, "x20x3Bx20" ) ) { // type " : " OR " ; " will be blocked+ clif->colormes( sd->fd, COLOR_RED, "You can't impersonate other players !" );+ return false;+ }+ }+ return true; } plugin#include <stdio.h>#include <stdlib.h>#include <string.h>#include "../map/pc.h"#include "../map/clif.h"#include "../common/HPMi.h"#include "../common/socket.h"#include "../common/HPMDataCheck.h" // should always be the last file included! (if you don't make it last, it'll intentionally break compile time)HPExport struct hplugin_info pinfo = { "GM_impersonate", // Plugin name SERVER_TYPE_MAP,// Which server types this plugin works with? "0.1", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated)};bool clif_process_message_spaces( int retVal, struct map_session_data *sd, int format, char **name_, size_t *namelen_, char **message_, size_t *messagelen_) { if ( retVal == true ) { char* message = (char*)RFIFOP( sd->fd ,4) + strnlen(sd->status.name, NAME_LENGTH-1) + 3; int i, l = strlen(message); for ( i = 0; i <= l; i++ ) if ( message[i] == 'xA0' ) message[i] = 'x20'; // replace Alt+0160 into [space] if ( stristr( message, " " ) ) { clif->colormes( sd->fd, COLOR_RED, "You are only allow to type maximum of 3 spaces in a dialog." ); return false; } if ( stristr( message, "x20x3Ax20" ) || stristr( message, "x20x3Bx20" ) ) { // type " : " OR " ; " will be blocked clif->colormes( sd->fd, COLOR_RED, "You can't impersonate other players !" ); return false; } } return true;}HPExport void plugin_init (void) { clif = GET_SYMBOL("clif"); session = GET_SYMBOL("session"); strlib = GET_SYMBOL("strlib"); addHookPost("clif->process_message", clif_process_message_spaces);}..
as it turns out, I just have to replace Alt+0160 into [space], then just block players from typing " : " is already enough
no need some kind of blocklist after all
-
AnnieRuru got a reaction from Nova in Chat space limitation!/Scammer avoid *Will pay for help*
I'm more interested to know how to type those charactersAlt + ????
those are actually meant for names
use together with
normalize_name( message, "255xA0032tx0Ax0D " );they are automatically trim into 1 single space
oh well
patch
src/map/clif.c | 7 +++++++ 1 file changed, 7 insertions(+)diff --git a/src/map/clif.c b/src/map/clif.cindex d9acf07..0118856 100644--- a/src/map/clif.c+++ b/src/map/clif.c@@ -9110,6 +9110,13 @@ bool clif_process_message(struct map_session_data *sd, int format, char **name_, *namelen_ = namelen; *message_ = message; *messagelen_ = messagelen;++ normalize_name( message, "255xA0032tx0Ax0D " );+ if ( stristr( message, "x20x3Ax20" ) || stristr( message, "x20x3Bx20" ) ) { // type " : " OR " ; " will be blocked+ clif->colormes( sd->fd, COLOR_RED, "You can't impersonate other players !" );+ return false;+ }+ return true; } plugin#include <stdio.h>#include <stdlib.h>#include <string.h>#include "../map/pc.h"#include "../map/clif.h"#include "../common/HPMi.h"#include "../common/socket.h"#include "../common/HPMDataCheck.h" // should always be the last file included! (if you don't make it last, it'll intentionally break compile time)HPExport struct hplugin_info pinfo = { "GM_impersonate", // Plugin name SERVER_TYPE_MAP,// Which server types this plugin works with? "0.1", // Plugin version HPM_VERSION, // HPM Version (don't change, macro is automatically updated)};bool clif_process_message_spaces( int retVal, struct map_session_data *sd, int format, char **name_, size_t *namelen_, char **message_, size_t *messagelen_) { if ( retVal == true ) { char* message = (char*)RFIFOP( sd->fd ,4) + strnlen(sd->status.name, NAME_LENGTH-1) + 3; normalize_name( message, "255xA0032tx0Ax0D " ); if ( stristr( message, "x20x3Ax20" ) || stristr( message, "x20x3Bx20" ) ) { // type " : " OR " ; " will be blocked clif->colormes( sd->fd, COLOR_RED, "You can't impersonate other players !" ); return false; } } return true;}HPExport void plugin_init (void) { clif = GET_SYMBOL("clif"); session = GET_SYMBOL("session"); strlib = GET_SYMBOL("strlib"); addHookPost("clif->process_message", clif_process_message_spaces);} -
AnnieRuru got a reaction from luis.seifert in [Outdated] battleground system without waitingroom
This plugin has outdated
Haru has already fixed queue iterator script command
this plugin is no longer needed
sample battleground script using queue iterator
http://upaste.me/ab3022385d0127b7f
outdated topics from eathena or rathena
this one is more update
Download: 1.5
plugin
-----------------------------------------
*createbgid , , , , ;
create a specific battleground ID, for the rest .... refer to doc
.red = createbgid( "guild_vs3", 13,50, strnpcinfo(0)+"::Onredout", strnpcinfo(0)+"::Onreddead" );.blue = createbgid( "guild_vs3", 86,50, strnpcinfo(0)+"::Onblueout", strnpcinfo(0)+"::Onbluedead" );.-----------------------------------------
*setbgid {, };
*setbgid {, };
player attached to the script will join the battleground team,
but if a player name ( or account ID ) is specify, will let that player join the battleground team
for debugging purposes
this command can return positive number ( > 0 ) if the function is successful
if it return negative :-
-1: the battleground team haven't create yet ... has to be create with createbgid
-2: the team already full, it reached MAX_BG_MEMBERS = 30 which can increase at srcmapbattleground.h
-3: player not found ... happens when the input is not online or not found
-5: the player already join the battleground ID that you specify
if the player has joined battleground ID 3, and you use setbgid 5;
this will force the player to leave battleground ID 3 and join battleground ID 5 without any notification
( player who same group will receive a message mention that "player xxx leaving battlefield" )
only when the player joined bg ID 9, and use setbgid 9; then only the command return -5
but the script will still continue running without posting any error, so don't worry
setbgid 0; is equal to *bg_leave;
and setbgid 0, "annie"; or setbgid 0, 2000000;
will make the player "annie" ( or account id 2000000 ) leave the battleground team without using *attachrid + *bg_leave
warpwaitingpc "guild_vs3", 0,0;for ( .@i = 0; .@i < $@warpwaitingpcnum; .@i++ )setbgid ( .@i % 2 )? .red : .blue, $@warpwaitingpc[.@i];.-----------------------------------------
*getbgusers ;
similar to getpartymember , 2; // <-- return account ID
this will create an array "$@arenamembers" holding all the player's account ID from the battleground team
and $@arenamembersnum is equal to bg_get_data(, 0), just like $@partymembercount
getbgusers .red;for ( .@i = 0; .@i < $@arenamembersnum; .@i++ )getitem 501, 1, $@arenamembers[.@i];.-----------------------------------------
sample script
http://upaste.me/7de710709dbb6fa17
example script for reference material
default battleground system using waitingroom, works in clean rathena/hercules
http://upaste.me/497010755d3295805
this script using this custom script commands
http://upaste.me/b2781075699b0f8d9
you can tell it really does make the script shorter
-
AnnieRuru got a reaction from Only4fun in [Custom battlegrounds] is it possible?
this should belongs to source modifications, move
http://herc.ws/board/tracker/issue-7894-battlegrounds-emblem-and-guardian/
if developer fix this bug, then I might be able to find the code for this modification ...
the trick should be ... make 2 fake guild and put emblems on it
so when battleground starts, clif send that fake guild emblem
-
AnnieRuru got a reaction from Only4fun in [Custom battlegrounds] is it possible?
until developer fix this bug =/
http://herc.ws/board/tracker/issue-7894-battlegrounds-emblem-and-guardian/
-
AnnieRuru got a reaction from ShankS in Maintenance mode
@Darkpurple
nope, this modification took me 2 full days to write, very time consuming stuffs
go ahead and buy from roserver or cydh ... I don't care
seriously, you should consider switch to hercules because I noticed you always follow my posts
@THPO
fixed in 1.0a
-
AnnieRuru got a reaction from Legend in Vendor Control (rewrite)
I think I'm going to start a "New Script Festival" LOL
I have so many scripts in my hard-disk ...
so I just have to post them 1 at a time ... everyday ! -> keep my fan base happy
-
AnnieRuru got a reaction from Tokeiburu in Suddenly missed AnnieRuru
just wondering ... how many people actually miss me ? XD
-
AnnieRuru got a reaction from karazu in @market clone
I just noticed somebody in rathena actually start converting my patch into rathena ... namely Napster
well kinda a competition then, as rathena does have more user base than hercules
version 1.3 released
plugin or patch
-- change back all status-damage into status-kill for readability
-- fix a bug that when a server enabled show_mob_info, the clone shouldn't has listed the hp nor level (credit: Napster)
-- fix a bug that player shouldn't create a market clone while chatting or vending
-- and for the patch, move all configuration into battle folder, makes more sense in this way (credit: Napster)
-- add zeny requirement
-
AnnieRuru got a reaction from Like it~* in King of Emperium Hill
I think its better to have a release topic for this instead of me update the script across separate topics
Download: Hercules 1.3
Script
Plugin for Hercules
Download: rAthena 1.2
Script.
Patch for rAthena
what this event do ? ( huh ? so popular script and I still need to explain ? )
1. make a guild
2. join this event
3. whack the emperium
4. defends it until times up
hahaha ....
How to configure the time:
L_start: <-- the label to start the event
change OnClock2000: into OnSat2000: to start this event on Saturday 8pm
L_end: <-- the label to end the event
change OnClock2030: into OnSat2030: to end this event on Saturday 8:30pm,
effectively makes this event runs 30 minutes
Frequently Asked Questions:
Question : why the Guild member can hit their own Emperium ?
Answer : because you didn't patch and recompile
Question: there is an exploit in this event, guild master can use Emergency Recall to abuse the prize
Answer : I already fixed it in this topic, now the prize reward will be given after the winner warp outside the map
original topic from eathena forum
http://www.eathena.ws/board/index.php?showtopic=174222
yeah ... I have been fixing this script since 7 years ago
-
AnnieRuru got a reaction from Yugosh in change to item reward hunting mission
#Mission_Points
search for it and delete every single line
and also remove the npc shop below
-
AnnieRuru got a reaction from BrothersKeeper in [Custom battlegrounds] is it possible?
until developer fix this bug =/
http://herc.ws/board/tracker/issue-7894-battlegrounds-emblem-and-guardian/
-
AnnieRuru got a reaction from Helena in How to do this? Don't allow @load to this town for non-castle owners
that was the least complex method in writing an instance script o.o
anyway
prontera,158,180,0 script Guild Town 123,{ if ( !getcharid(2) ) { mes "need a guild"; close; } if ( agitcheck() || agitcheck2() ) { mes "woe in progress"; close; } if ( getcastledata( "prtg_cas01", 1 ) != getcharid(2) && getcastledata( "payg_cas01", 1 ) != getcharid(2) && getcastledata( "aldeg_cas04", 1 ) != getcharid(2) && getcastledata( "gefg_cas04", 1 ) != getcharid(2) ) { mes "you need to hold a castle to gain access to guild town map"; close; } warp "guild_vs2",49,49; end;OnAgitStart: mapwarp "guild_vs2", "prontera",150,180; end;}guild_vs2 mapflag nowarptoguild_vs2 mapflag nomemoguild_vs2 mapflag nosave SavePoint -
AnnieRuru got a reaction from evilpuncker in get zeny amount from new bank system
try this plugin
http://upaste.me/7ba18d
tested with
prontera,155,186,7 script kldjhfksdjhf 100,{ dispbottom Zeny +" "+ bank_vault();}honestly ... developer should added a constant for this variable ... -
AnnieRuru got a reaction from kyeme in @market clone
people aren't saying it is a bug, so leave it then xD -
AnnieRuru got a reaction from Helena in How to do this? Don't allow @load to this town for non-castle owners
GmOcean gonna drool over this
prontera,158,180,0 script Guild Town 123,{ if ( has_instance2( "guild_vs2" ) >= 0 ) { warp has_instance( "guild_vs2" ), 0,0; end; } if ( !getcharid(2) ) { mes "need a guild"; close; } if ( agitcheck() || agitcheck2() ) { mes "woe in progress"; close; } if ( getcastledata( "prtg_cas01", 1 ) != getcharid(2) && getcastledata( "payg_cas01", 1 ) != getcharid(2) && getcastledata( "aldeg_cas04", 1 ) != getcharid(2) && getcastledata( "gefg_cas04", 1 ) != getcharid(2) ) { mes "you need to hold a castle to gain access to guild town map"; close; } if ( ( .@ins = instance_create( "Guild Town", getcharid(2), IOT_GUILD ) ) < 0 ) { mes "error : "+ .@ins; close; } if ( instance_attachmap( "guild_vs2", .@ins, 1, getcharid(2)+"gtown" ) == "" ) { mes "error : 5"; instance_destroy .@ins; close; } instance_set_timeout 0, 0, .@ins; instance_init .@ins; instance_attach .@ins; .guild_town_id[.count] = .@ins; .count++; warp has_instance( "guild_vs2" ), 0,0; end;OnAgitStart: for ( .@i = 0; .@i < .count; .@i++ ) instance_destroy .guild_town_id[.@i]; deletearray .guild_town_id; .count = 0; end;}guild_vs2 mapflag nowarptoguild_vs2 mapflag nomemoguild_vs2 mapflag nosave SavePointchange guild_vs2 into guild_town -
AnnieRuru got a reaction from GmOcean in how to make patch file
I usually ignore this kind of post ... meh .................
http://herc.ws/board/topic/152-obtaining-hercules/
I wonder how are you exactly download the hercules ?
if using tortoisegit, just right click -> Git Diff
then select all file to patch, then save the name of the file
you won't go anywhere without a tortoisegit, including making a pull request
-
AnnieRuru got a reaction from luis.seifert in [Help] Battleground script
if you modify like jabote did, that will affect any other battleground script, which possibly caused them bug
I won't touch the source if I were you
the practical way to do this, is make them wait inside a room
http://rathena.org/board/topic/97602-annierurus-bg-emp-edit-request/?p=267413
I've seen 2 battleground script using this method
-
AnnieRuru got a reaction from Only4fun in [Help] Battleground script
if you modify like jabote did, that will affect any other battleground script, which possibly caused them bug
I won't touch the source if I were you
the practical way to do this, is make them wait inside a room
http://rathena.org/board/topic/97602-annierurus-bg-emp-edit-request/?p=267413
I've seen 2 battleground script using this method
-
AnnieRuru got a reaction from nomade in @market clone
Download: 1.9
plugin
Create a market clone, to leave a message for other players
while the player can go hunting/questing/events
@market "<Title>" "<Message>" <Color> create a market clone with a chat room titled -> "<Title>"
when players tries to join the chat room, it refuse the joining, but instead leave a message -> "<Message>"
with 1.4 update,
player can now choose their own favorite color for their AFK message
the <Color> field is optional
I was struggling to use array for the color list ...
but in the end, I guess the simplicity is the best
so you guys can guess how to add in your own list easily
@marketkill kill the market clone without logging off
when a GM do @killmonster @killmonster2, or *killmonster *kilmonsterall script command will not remove the clone
but @reloadscript, however, will remove it
feels like I just copy paste from the description
whatever ...
Credit : remember to rep Dastgir's topic because I mostly copy his codes
-
AnnieRuru got a reaction from GmOcean in NPC Buy/Sell
noif you using clif_selllist function
then the packet header is 0xc7
this will open the sell item window
WFIFOW(fd,4+c*10)=i+2;
this one tells the client to list out the item from your inventory of position i
dunno what's +2 means though
try play around with it
-
AnnieRuru got a reaction from GmOcean in NPC Buy/Sell
if you look at BUILDIN(getitem)pc->additem(sd, &it, get_count, LOG_TYPE_SCRIPT)everything is manipulate in &itwhere it comes from
struct item it;and struct item comes from mmo.hstruct item { int id; short nameid; short amount; unsigned int equip; // Location(s) where item is equipped (using enum equip_pos for bitmasking). char identify; char refine; char attribute; short card[MAX_SLOTS]; unsigned int expire_time; char favorite; unsigned char bound; uint64 unique_id;};so you always manipulate the data withit.identify = 1;
it.card[0] = 4001;
and so on
http://www.tutorialspoint.com/cprogramming/c_structures.htm
.
.
http://herc.ws/board/topic/7040-item-item-deny/?p=42843need 3 commands
Sql->Query
Sql->NextRow
Sql->GetData