Просмотр исходного кода

Merge pull request #49 from CairoLee/master

- Add instance_enter2 script command
Euphy 11 лет назад
Родитель
Сommit
4a84de748c
4 измененных файлов с 23 добавлено и 5 удалено
  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
 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
  *------------------------------------------*/
 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_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)
 		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;
 
 	// 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_destroy(short instance_id);
 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_addusers(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;
 
-	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
 		return 1;
 	return SCRIPT_CMD_SUCCESS;
@@ -19111,7 +19115,7 @@ struct script_function buildin_func[] = {
 	BUILDIN_DEF(instance_create,"s"),
 	BUILDIN_DEF(instance_destroy,"?"),
 	BUILDIN_DEF(instance_id,""),
-	BUILDIN_DEF(instance_enter,"s"),
+	BUILDIN_DEF(instance_enter,"s??"),
 	BUILDIN_DEF(instance_npcname,"s?"),
 	BUILDIN_DEF(instance_mapname,"s?"),
 	BUILDIN_DEF(instance_warpall,"sii?"),