|
@@ -18657,28 +18657,28 @@ BUILDIN_FUNC(waitingroom2bg)
|
|
|
}
|
|
|
|
|
|
map_name = script_getstr(st,2);
|
|
|
- if( strcmp(map_name,"-") != 0 )
|
|
|
- {
|
|
|
- mapindex = mapindex_name2id(map_name);
|
|
|
- if( mapindex == 0 )
|
|
|
- { // Invalid Map
|
|
|
- script_pushint(st,0);
|
|
|
- return SCRIPT_CMD_SUCCESS;
|
|
|
- }
|
|
|
+ if (strcmp(map_name, "-") != 0 && (mapindex = mapindex_name2id(map_name)) == 0)
|
|
|
+ { // Invalid Map
|
|
|
+ script_pushint(st, 0);
|
|
|
+ return SCRIPT_CMD_SUCCESS;
|
|
|
}
|
|
|
|
|
|
x = script_getnum(st,3);
|
|
|
y = script_getnum(st,4);
|
|
|
- ev = script_getstr(st,5); // Logout Event
|
|
|
- dev = script_getstr(st,6); // Die Event
|
|
|
+ if(script_hasdata(st,5))
|
|
|
+ ev = script_getstr(st,5); // Logout Event
|
|
|
+ if(script_hasdata(st,6))
|
|
|
+ dev = script_getstr(st,6); // Die Event
|
|
|
+
|
|
|
+ check_event(st, ev);
|
|
|
+ check_event(st, dev);
|
|
|
|
|
|
if( (bg_id = bg_create(mapindex, x, y, ev, dev)) == 0 )
|
|
|
{ // Creation failed
|
|
|
script_pushint(st,0);
|
|
|
return SCRIPT_CMD_SUCCESS;
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
for (i = 0; i < cd->users; i++) { // Only add those who are in the chat room
|
|
|
struct map_session_data *sd;
|
|
|
if( (sd = cd->usersd[i]) != NULL && bg_team_join(bg_id, sd) ){
|
|
@@ -18698,15 +18698,29 @@ BUILDIN_FUNC(waitingroom2bg_single)
|
|
|
struct npc_data *nd;
|
|
|
struct chat_data *cd;
|
|
|
struct map_session_data *sd;
|
|
|
+ struct battleground_data *bg;
|
|
|
int x, y, mapindex, bg_id;
|
|
|
|
|
|
bg_id = script_getnum(st,2);
|
|
|
- map_name = script_getstr(st,3);
|
|
|
- if( (mapindex = mapindex_name2id(map_name)) == 0 )
|
|
|
- return SCRIPT_CMD_SUCCESS; // Invalid Map
|
|
|
+ if ((bg = bg_team_search(bg_id)) == NULL) {
|
|
|
+ script_pushint(st, false);
|
|
|
+ return SCRIPT_CMD_SUCCESS;
|
|
|
+ }
|
|
|
+ if (script_hasdata(st, 3)) {
|
|
|
+ map_name = script_getstr(st, 3);
|
|
|
+ if ((mapindex = mapindex_name2id(map_name)) == 0) {
|
|
|
+ script_pushint(st, false);
|
|
|
+ return SCRIPT_CMD_SUCCESS; // Invalid Map
|
|
|
+ }
|
|
|
+ x = script_getnum(st, 4);
|
|
|
+ y = script_getnum(st, 5);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ mapindex = bg->mapindex;
|
|
|
+ x = bg->x;
|
|
|
+ y = bg->y;
|
|
|
+ }
|
|
|
|
|
|
- x = script_getnum(st,4);
|
|
|
- y = script_getnum(st,5);
|
|
|
nd = npc_name2id(script_getstr(st,6));
|
|
|
|
|
|
if( nd == NULL || (cd = (struct chat_data *)map_id2bl(nd->chat_id)) == NULL || cd->users <= 0 )
|
|
@@ -18715,13 +18729,86 @@ BUILDIN_FUNC(waitingroom2bg_single)
|
|
|
if( (sd = cd->usersd[0]) == NULL )
|
|
|
return SCRIPT_CMD_SUCCESS;
|
|
|
|
|
|
- if( bg_team_join(bg_id, sd) )
|
|
|
+ if( bg_team_join(bg_id, sd) && pc_setpos(sd, mapindex, x, y, CLR_TELEPORT) == SETPOS_OK)
|
|
|
{
|
|
|
- pc_setpos(sd, mapindex, x, y, CLR_TELEPORT);
|
|
|
- script_pushint(st,1);
|
|
|
+ script_pushint(st, true);
|
|
|
}
|
|
|
else
|
|
|
- script_pushint(st,0);
|
|
|
+ script_pushint(st, false);
|
|
|
+
|
|
|
+ return SCRIPT_CMD_SUCCESS;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+/// Creates an instance of battleground battle group.
|
|
|
+/// *bg_create("<map name>",<x>,<y>{,"<On Quit Event>","<On Death Event>"});
|
|
|
+/// @author [secretdataz]
|
|
|
+BUILDIN_FUNC(bg_create) {
|
|
|
+ const char *map_name, *ev = "", *dev = "";
|
|
|
+ int x, y, mapindex = 0;
|
|
|
+
|
|
|
+ map_name = script_getstr(st, 2);
|
|
|
+ if (strcmp(map_name, "-") != 0 && (mapindex = mapindex_name2id(map_name)) == 0)
|
|
|
+ { // Invalid Map
|
|
|
+ script_pushint(st, 0);
|
|
|
+ return SCRIPT_CMD_SUCCESS;
|
|
|
+ }
|
|
|
+
|
|
|
+ x = script_getnum(st, 3);
|
|
|
+ y = script_getnum(st, 4);
|
|
|
+ if(script_hasdata(st, 5))
|
|
|
+ ev = script_getstr(st, 5); // Logout Event
|
|
|
+ if(script_hasdata(st, 6))
|
|
|
+ dev = script_getstr(st, 6); // Die Event
|
|
|
+
|
|
|
+ check_event(st, ev);
|
|
|
+ check_event(st, dev);
|
|
|
+
|
|
|
+ script_pushint(st, bg_create(mapindex, x, y, ev, dev));
|
|
|
+ return SCRIPT_CMD_SUCCESS;
|
|
|
+}
|
|
|
+
|
|
|
+/// Adds attached player or <char id> (if specified) to an existing
|
|
|
+/// battleground group and warps it to the specified coordinates on
|
|
|
+/// the given map.
|
|
|
+/// bg_join(<battle group>,{"<map name>",<x>,<y>{,<char id>}});
|
|
|
+/// @author [secretdataz]
|
|
|
+BUILDIN_FUNC(bg_join) {
|
|
|
+ const char* map_name;
|
|
|
+ struct map_session_data *sd;
|
|
|
+ struct battleground_data *bg;
|
|
|
+ int x, y, bg_id, mapindex;
|
|
|
+
|
|
|
+ bg_id = script_getnum(st, 2);
|
|
|
+ if ((bg = bg_team_search(bg_id)) == NULL) {
|
|
|
+ script_pushint(st, false);
|
|
|
+ return SCRIPT_CMD_SUCCESS;
|
|
|
+ }
|
|
|
+ if (script_hasdata(st, 3)) {
|
|
|
+ map_name = script_getstr(st, 3);
|
|
|
+ if ((mapindex = mapindex_name2id(map_name)) == 0) {
|
|
|
+ script_pushint(st, false);
|
|
|
+ return SCRIPT_CMD_SUCCESS; // Invalid Map
|
|
|
+ }
|
|
|
+ x = script_getnum(st, 4);
|
|
|
+ y = script_getnum(st, 5);
|
|
|
+ } else {
|
|
|
+ mapindex = bg->mapindex;
|
|
|
+ x = bg->x;
|
|
|
+ y = bg->y;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!script_charid2sd(6, sd)) {
|
|
|
+ script_pushint(st, false);
|
|
|
+ return SCRIPT_CMD_FAILURE;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (bg_team_join(bg_id, sd) && pc_setpos(sd, mapindex, x, y, CLR_TELEPORT) == SETPOS_OK)
|
|
|
+ {
|
|
|
+ script_pushint(st, true);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ script_pushint(st, false);
|
|
|
|
|
|
return SCRIPT_CMD_SUCCESS;
|
|
|
}
|
|
@@ -22221,8 +22308,8 @@ struct script_function buildin_func[] = {
|
|
|
BUILDIN_DEF(agitend2,""),
|
|
|
BUILDIN_DEF(agitcheck2,""),
|
|
|
// BattleGround
|
|
|
- BUILDIN_DEF(waitingroom2bg,"siiss?"),
|
|
|
- BUILDIN_DEF(waitingroom2bg_single,"isiis"),
|
|
|
+ BUILDIN_DEF(waitingroom2bg,"sii???"),
|
|
|
+ BUILDIN_DEF(waitingroom2bg_single,"i????"),
|
|
|
BUILDIN_DEF(bg_team_setxy,"iii"),
|
|
|
BUILDIN_DEF(bg_warp,"isii"),
|
|
|
BUILDIN_DEF(bg_monster,"isiisi?"),
|
|
@@ -22233,6 +22320,8 @@ struct script_function buildin_func[] = {
|
|
|
BUILDIN_DEF(bg_get_data,"ii"),
|
|
|
BUILDIN_DEF(bg_getareausers,"isiiii"),
|
|
|
BUILDIN_DEF(bg_updatescore,"sii"),
|
|
|
+ BUILDIN_DEF(bg_join,"i????"),
|
|
|
+ BUILDIN_DEF(bg_create,"sii??"),
|
|
|
|
|
|
// Instancing
|
|
|
BUILDIN_DEF(instance_create,"s??"),
|