Explorar o código

Merge pull request #49 from CairoLee/master

- Add instance_enter2 script command
Euphy %!s(int64=11) %!d(string=hai) anos
pai
achega
4a84de748c
Modificáronse 4 ficheiros con 23 adicións e 5 borrados
  1. 1 1
      doc/script_commands.txt
  2. 14 1
      src/map/instance.c
  3. 1 0
      src/map/instance.h
  4. 7 3
      src/map/script.c

+ 1 - 1
doc/script_commands.txt

@@ -7481,7 +7481,7 @@ the script will come to a halt.
 
 
 ---------------------------------------
 ---------------------------------------
 
 
-*instance_enter("<instance name>");
+*instance_enter("<instance name>"{,<x>,<y>});
 
 
 Warps player to the specified instance after the script terminates. The map and
 Warps player to the specified instance after the script terminates. The map and
 coordinates are located in 'db/(pre-)re/instance_db.txt'.
 coordinates are located in 'db/(pre-)re/instance_db.txt'.

+ 14 - 1
src/map/instance.c

@@ -484,6 +484,19 @@ int instance_destroy(short instance_id)
  * Allows a user to enter an instance
  * Allows a user to enter an instance
  *------------------------------------------*/
  *------------------------------------------*/
 int instance_enter(struct map_session_data *sd, const char *name)
 int instance_enter(struct map_session_data *sd, const char *name)
+{
+	struct instance_db *db = instance_searchname_db(name);
+
+	if(db == NULL)
+		return 3;
+
+	return instance_enter_position(sd, name, db->enter.x, db->enter.y);
+}
+
+/*==========================================
+ * Warp a user into instance
+ *------------------------------------------*/
+int instance_enter_position(struct map_session_data *sd, const char *name, short x, short y)
 {
 {
 	struct instance_data *im;
 	struct instance_data *im;
 	struct instance_db *db = instance_searchname_db(name);
 	struct instance_db *db = instance_searchname_db(name);
@@ -517,7 +530,7 @@ int instance_enter(struct map_session_data *sd, const char *name)
 	if((m = instance_mapname2mapid(db->enter.mapname, p->instance_id)) < 0)
 	if((m = instance_mapname2mapid(db->enter.mapname, p->instance_id)) < 0)
 		return 3;
 		return 3;
 
 
-	if(pc_setpos(sd, map_id2index(m), db->enter.x, db->enter.y, 0))
+	if(pc_setpos(sd, map_id2index(m), x, y, 0))
 		return 3;
 		return 3;
 
 
 	// If there was an idle timer, let's stop it
 	// If there was an idle timer, let's stop it

+ 1 - 0
src/map/instance.h

@@ -33,6 +33,7 @@ extern struct instance_data instance_data[MAX_INSTANCE_DATA];
 int instance_create(int party_id, const char *name);
 int instance_create(int party_id, const char *name);
 int instance_destroy(short instance_id);
 int instance_destroy(short instance_id);
 int instance_enter(struct map_session_data *sd, const char *name);
 int instance_enter(struct map_session_data *sd, const char *name);
+int instance_enter_position(struct map_session_data *sd, const char *name, short x, short y);
 int instance_reqinfo(struct map_session_data *sd, short instance_id);
 int instance_reqinfo(struct map_session_data *sd, short instance_id);
 int instance_addusers(short instance_id);
 int instance_addusers(short instance_id);
 int instance_delusers(short instance_id);
 int instance_delusers(short instance_id);

+ 7 - 3
src/map/script.c

@@ -16954,8 +16954,12 @@ BUILDIN_FUNC(instance_enter)
 {
 {
 	struct map_session_data *sd;
 	struct map_session_data *sd;
 
 
-	if((sd = script_rid2sd(st)) != NULL)
-		script_pushint(st,instance_enter(sd,script_getstr(st, 2)));
+	if((sd = script_rid2sd(st)) != NULL){
+		if (script_hasdata(st,3) && script_hasdata(st,4))
+			script_pushint(st,instance_enter_position(sd,script_getstr(st, 2),script_getnum(st, 3),script_getnum(st, 4)));
+		else
+			script_pushint(st,instance_enter(sd,script_getstr(st, 2)));
+	}
 	else
 	else
 		return 1;
 		return 1;
 	return SCRIPT_CMD_SUCCESS;
 	return SCRIPT_CMD_SUCCESS;
@@ -19111,7 +19115,7 @@ struct script_function buildin_func[] = {
 	BUILDIN_DEF(instance_create,"s"),
 	BUILDIN_DEF(instance_create,"s"),
 	BUILDIN_DEF(instance_destroy,"?"),
 	BUILDIN_DEF(instance_destroy,"?"),
 	BUILDIN_DEF(instance_id,""),
 	BUILDIN_DEF(instance_id,""),
-	BUILDIN_DEF(instance_enter,"s"),
+	BUILDIN_DEF(instance_enter,"s??"),
 	BUILDIN_DEF(instance_npcname,"s?"),
 	BUILDIN_DEF(instance_npcname,"s?"),
 	BUILDIN_DEF(instance_mapname,"s?"),
 	BUILDIN_DEF(instance_mapname,"s?"),
 	BUILDIN_DEF(instance_warpall,"sii?"),
 	BUILDIN_DEF(instance_warpall,"sii?"),