diff options
Diffstat (limited to 'src/map/script.c')
-rw-r--r-- | src/map/script.c | 1148 |
1 files changed, 0 insertions, 1148 deletions
diff --git a/src/map/script.c b/src/map/script.c deleted file mode 100644 index 02e34a4..0000000 --- a/src/map/script.c +++ /dev/null @@ -1,1148 +0,0 @@ -// Copyright (c) Copyright (c) Hercules Dev Team, licensed under GNU GPL. -// Copyright (c) 2014 Evol developers - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#include "../../../common/HPMi.h" -#include "../../../common/malloc.h" -#include "../../../common/mmo.h" -#include "../../../common/socket.h" -#include "../../../common/strlib.h" -#include "../../../common/timer.h" -#include "../../../map/chrif.h" -#include "../../../map/clif.h" -#include "../../../map/npc.h" -#include "../../../map/pc.h" -#include "../../../map/script.h" -#include "../../../map/quest.h" -#include "../../../map/unit.h" - -#include "map/script.h" -#include "map/clif.h" -#include "map/lang.h" -#include "map/scriptdefines.h" -#include "map/send.h" -#include "map/data/mapd.h" -#include "map/data/npcd.h" -#include "map/data/session.h" -#include "map/struct/mapdext.h" -#include "map/struct/npcdext.h" -#include "map/struct/sessionext.h" -#include "map/utils/formatutils.h" - -BUILDIN(l) -{ - format_sub(st, 1); - return true; -} - -BUILDIN(lg) -{ - format_sub(st, 2); - return true; -} - -BUILDIN(setCamNpc) -{ - getSD(); - TBL_NPC *nd = NULL; - - int x = 0; - int y = 0; - - if (script_hasdata(st, 2)) - { - nd = npc->name2id (script_getstr(st, 2)); - } - else - { - if (!st->oid) - { - ShowWarning("npc not attached\n"); - script->reportsrc(st); - return false; - } - - nd = (TBL_NPC *) map->id2bl (st->oid); - } - if (!nd) - { - ShowWarning("npc not found\n"); - script->reportsrc(st); - return false; - } - if (sd->bl.m != nd->bl.m) - { - ShowWarning("npc and player located in other maps\n"); - script->reportsrc(st); - return false; - } - - if (script_hasdata(st, 3) && script_hasdata(st, 4)) - { - x = script_getnum(st, 3); - y = script_getnum(st, 4); - } - - send_npccommand2(script->rid2sd (st), st->oid, 2, nd->bl.id, x, y); - - return true; -} - -BUILDIN(setCam) -{ - send_npccommand2(script->rid2sd (st), st->oid, 2, 0, - script_getnum(st, 2), script_getnum(st, 3)); - - return true; -} - -BUILDIN(moveCam) -{ - send_npccommand2(script->rid2sd (st), st->oid, 4, 0, - script_getnum(st, 2), script_getnum(st, 3)); - - return true; -} - -BUILDIN(restoreCam) -{ - getSD(); - send_npccommand(sd, st->oid, 3); - return true; -} - -BUILDIN(npcTalk3) -{ - const char *str; - char *msg; - TBL_NPC *nd = NULL; - - getSD(); - - if (script_hasdata(st, 3)) - { - nd = npc->name2id (script_getstr(st, 2)); - str = script_getstr(st, 3); - } - else - { - nd = (TBL_NPC *) map->id2bl (st->oid); - str = script_getstr(st, 2); - } - - if (!nd) - { - ShowWarning("npc not found\n"); - script->reportsrc(st); - return false; - } - - if (!str) - { - ShowWarning("error in string\n"); - script->reportsrc(st); - return false; - } - - if (sd) - msg = (char*)lang_pctrans (nd->name, sd); - else - msg = nd->name; - - if (!msg) - { - ShowWarning("error in string\n"); - script->reportsrc(st); - return false; - } - if (strlen(str) + strlen(msg) > 450) - { - ShowWarning("text message too big\n"); - script->reportsrc(st); - return false; - } - - if (nd) - { - char message[500]; - char name[500]; - strcpy (name, msg); - strtok(name, "#"); - strcpy (message, name); - strcat (message, " : "); - strcat (message, str); - send_local_message (sd->fd, &(nd->bl), message); - } - - return true; -} - -BUILDIN(closeDialog) -{ - getSD(); - send_npccommand(script->rid2sd (st), st->oid, 5); - return true; -} - -BUILDIN(shop) -{ - getSD(); - TBL_NPC *nd = npc->name2id (script_getstr(st, 2)); - if (!nd) - { - ShowWarning("shop npc not found\n"); - script->reportsrc(st); - return false; - } - - st->state = sd->state.dialog == 1 ? CLOSE : END; - clif->scriptclose(sd, st->oid); - - clif->npcbuysell (sd, nd->bl.id); - return true; -} - -BUILDIN(getItemLink) -{ - struct item_data *i_data; - char *item_name; - int item_id = 0; - - if (script_isstringtype(st, 2)) - { - i_data = itemdb->search_name (script_getstr(st, 2)); - } - else - { - item_id = script_getnum (st, 2); - i_data = itemdb->search (item_id); - } - - item_name = (char *) aCalloc (100, sizeof (char)); - TBL_PC *sd = script->rid2sd(st); - - if (sd) - { - int version = 0; - struct SessionExt *data = session_get_bysd(sd); - if (data) - version = data->clientVersion; - - if (i_data && version >= 7) - sprintf(item_name, "[@@%u|@@]", (unsigned)i_data->nameid); - else if (i_data) - sprintf(item_name, "[@@%u|%s@@]", (unsigned)i_data->nameid, lang_pctrans (i_data->jname, sd)); - else if (item_id > 0) - sprintf(item_name, "[@@%u|Unknown Item@@]", (unsigned)item_id); - else - sprintf(item_name, "[Unknown Item]"); - } - else - { - if (i_data) - sprintf(item_name, "[%s]", lang_pctrans (i_data->jname, sd)); - else - sprintf(item_name, "[Unknown Item]"); - } - - script_pushstr(st, item_name); - - return true; -} - -BUILDIN(requestLang) -{ - getSD(); - struct script_data* data; - int64 uid; - const char* name; - - data = script_getdata(st, 2); - if (!data_isreference(data)) - { - ShowError("script:requestlang: not a variable\n"); - script->reportsrc(st); - st->state = END; - return false; - } - uid = reference_getuid(data); - name = reference_getname(data); - - if (is_string_variable(name)) - { - ShowError("script:requestlang: not a variable\n"); - script->reportsrc(st); - return false; - } - - if (!sd->state.menu_or_input) - { - // first invocation, display npc input box - sd->state.menu_or_input = 1; - st->state = RERUNLINE; - - // send lang request - send_npccommand(script->rid2sd(st), st->oid, 0); - clif->scriptinputstr(sd, st->oid); - } - else - { - // take received text/value and store it in the designated variable - sd->state.menu_or_input = 0; - - int lng = -1; - if (*sd->npc_str) - lng = lang_getId(sd->npc_str); - script->set_reg(st, sd, uid, name, (void*)h64BPTRSIZE(lng), script_getref(st,2)); - st->state = RUN; - } - return true; -} - -BUILDIN(requestItem) -{ - getSD(); - struct script_data* data; - int64 uid; - const char* name; - - data = script_getdata(st, 2); - if (!data_isreference(data)) - { - ShowError("script:requestitem: not a variable\n"); - script->reportsrc(st); - st->state = END; - return false; - } - uid = reference_getuid(data); - name = reference_getname(data); - - if (is_string_variable(name)) - { - ShowError("script:requestlang: not a variable\n"); - script->reportsrc(st); - return false; - } - - if (!sd->state.menu_or_input) - { - // first invocation, display npc input box - sd->state.menu_or_input = 1; - st->state = RERUNLINE; - - // send item request - send_npccommand(script->rid2sd(st), st->oid, 10); - } - else - { - // take received text/value and store it in the designated variable - sd->state.menu_or_input = 0; - - int item = 0; - - if (!sd->npc_str) - { - ShowWarning("npc string not found\n"); - script->reportsrc(st); - return false; - } - - if (sscanf (sd->npc_str, "%5d", &item) < 1) - { - ShowWarning("input data is not item id\n"); - script->reportsrc(st); - return false; - } - - script->set_reg(st, sd, uid, name, (void*)h64BPTRSIZE(item), script_getref(st,2)); - st->state = RUN; - } - return true; -} - -BUILDIN(requestItems) -{ - getSD(); - struct script_data* data; - int64 uid; - const char* name; - - data = script_getdata(st, 2); - if (!data_isreference(data)) - { - ShowError("script:requestitem: not a variable\n"); - script->reportsrc(st); - st->state = END; - return false; - } - uid = reference_getuid(data); - name = reference_getname(data); - - if (!is_string_variable(name)) - { - ShowWarning("parameter is not variable\n"); - script->reportsrc(st); - return false; - } - - int count = 1; - - if (script_hasdata(st, 3)) - { - count = script_getnum(st, 3); - if (count < 0) - count = 1; - } - - if (!sd->state.menu_or_input) - { - // first invocation, display npc input box - sd->state.menu_or_input = 1; - st->state = RERUNLINE; - - // send item request with limit count - send_npccommand2(script->rid2sd (st), st->oid, 10, count, 0, 0); - } - else - { - // take received text/value and store it in the designated variable - sd->state.menu_or_input = 0; - - if (!sd->npc_str) - { - ShowWarning("npc string not found\n"); - script->reportsrc(st); - return false; - } - - script->set_reg(st, sd, uid, name, (void*)sd->npc_str, script_getref(st, 2)); - st->state = RUN; - } - return true; -} - -BUILDIN(setq) -{ - int i; - getSD(); - - int quest_id = script_getnum(st, 2); - int quest_value = script_getnum(st, 3); - - if (quest->check(sd, quest_id, HAVEQUEST) < 0) - quest->add(sd, quest_id); - ARR_FIND(0, sd->num_quests, i, sd->quest_log[i].quest_id == quest_id); - if (i == sd->num_quests) - { - ShowError("Quest with id=%d not found\n", quest_id); - script->reportsrc(st); - return false; - } - - sd->quest_log[i].count[0] = quest_value; - sd->save_quest = true; - if (map->save_settings & 64) - chrif->save(sd,0); - - eclif_quest_add(sd, &sd->quest_log[i]); - return true; -} - -BUILDIN(getq) -{ - int i; - getSDReturn(0); - - int quest_id = script_getnum(st, 2); - if (quest->check(sd, quest_id, HAVEQUEST) < 0) - { - script_pushint(st, 0); - return true; - } - ARR_FIND(0, sd->num_quests, i, sd->quest_log[i].quest_id == quest_id); - if (i == sd->num_quests) - { - script_pushint(st, 0); - return true; - } - script_pushint(st, sd->quest_log[i].count[0]); - return true; -} - -BUILDIN(setNpcDir) -{ - int newdir; - TBL_NPC *nd = 0; - - if (script_hasdata(st, 3)) - { - nd = npc->name2id (script_getstr(st, 2)); - newdir = script_getnum(st, 3); - } - else if (script_hasdata(st, 2)) - { - if (!st->oid) - { - ShowWarning("npc not found\n"); - script->reportsrc(st); - return false; - } - - nd = (TBL_NPC *) map->id2bl (st->oid); - newdir = script_getnum(st, 2); - } - if (!nd) - { - ShowWarning("npc not found\n"); - script->reportsrc(st); - return false; - } - - if (newdir < 0) - newdir = 0; - else if (newdir > 7) - newdir = 7; - - nd->dir = newdir; - npc->enable (nd->name, 1); - - return true; -} - -BUILDIN(rif) -{ - const char *str = 0; - if (script_getnum(st, 2)) - { - str = script_getstr(st, 3); - if (str) - script_pushstr(st, aStrdup(str)); - else - script_pushconststr(st, (char *)""); - } - else if (script_hasdata(st, 4)) - { - str = script_getstr(st, 4); - if (str) - script_pushstr(st, aStrdup(str)); - else - script_pushconststr(st, (char *)""); - } - else - { - script_pushconststr(st, (char *)""); - } - - return true; -} - -BUILDIN(countItemColor) -{ - int nameid, i; - int count = 0; - struct item_data* id = NULL; - - TBL_PC* sd = script->rid2sd(st); - if (!sd) - { - ShowWarning("player not attached\n"); - script->reportsrc(st); - return false; - } - - if (script_isstringtype(st, 2)) - { - // item name - id = itemdb->search_name(script_getstr(st, 2)); - } - else - { - // item id - id = itemdb->exists(script_getnum(st, 2)); - } - - if (id == NULL) - { - ShowError("buildin_countitem: Invalid item '%s'.\n", script_getstr(st,2)); // returns string, regardless of what it was - script->reportsrc(st); - script_pushint(st,0); - return false; - } - - nameid = id->nameid; - - for(i = 0; i < MAX_INVENTORY; i++) - { - if(sd->status.inventory[i].nameid == nameid) - count += sd->status.inventory[i].amount; - } - - script_pushint(st, count); - return true; -} - -BUILDIN(miscEffect) -{ - int type = script_getnum(st, 2); - struct block_list *bl = NULL; - - if (script_hasdata(st, 3)) - { - if (script_isstring(st, 3)) - { - TBL_PC *sd = map->nick2sd(script_getstr(st, 3)); - if (sd) - bl = &sd->bl; - } - else if (script_isint(st, 3)) - { - bl = map->id2bl(script_getnum(st, 3)); - } - } - - if (!bl) - { - TBL_PC *sd = script->rid2sd (st); - if (sd) - bl = &sd->bl; - } - if (bl) - clif->specialeffect(bl, type, AREA); - return true; -} - -BUILDIN(setMapMask) -{ - const char *const mapName = script_getstr(st, 2); - if (!mapName) - { - ShowWarning("invalid map name\n"); - script->reportsrc(st); - return false; - } - const int m = map->mapname2mapid(mapName); - if (m < 0) - { - ShowWarning("map not found\n"); - script->reportsrc(st); - return false; - } - getMapData(m); - - const int val = script_getnum(st, 3); - const unsigned int old = mapData->mask; - mapData->mask = val; - if (old != mapData->mask) - send_mapmask_brodcast(m, mapData->mask); - return true; -} - -BUILDIN(getMapMask) -{ - const char *const mapName = script_getstr(st, 2); - if (!mapName) - { - script_pushint(st, 0); - ShowWarning("invalid map name\n"); - script->reportsrc(st); - return false; - } - const int m = map->mapname2mapid(mapName); - if (m < 0) - { - script_pushint(st, 0); - ShowWarning("map not found\n"); - script->reportsrc(st); - return false; - } - getMapDataReturn(m, 0); - script_pushint(st, mapData->mask); - return true; -} - -BUILDIN(addMapMask) -{ - const char *const mapName = script_getstr(st, 2); - if (!mapName) - { - ShowWarning("invalid map name\n"); - script->reportsrc(st); - return false; - } - const int m = map->mapname2mapid(mapName); - if (m < 0) - { - ShowWarning("map not found\n"); - script->reportsrc(st); - return false; - } - getMapData(m); - const int val = script_getnum(st, 3); - const unsigned int old = mapData->mask; - mapData->mask |= val; - if (old != mapData->mask) - send_mapmask_brodcast(m, mapData->mask); - - return true; -} - -BUILDIN(removeMapMask) -{ - const char *const mapName = script_getstr(st, 2); - if (!mapName) - { - ShowWarning("invalid map name\n"); - script->reportsrc(st); - return true; - } - const int m = map->mapname2mapid(mapName); - if (m < 0) - { - ShowWarning("map not found\n"); - script->reportsrc(st); - return false; - } - getMapData(m); - const int val = script_getnum(st, 3); - const unsigned int old = mapData->mask; - mapData->mask |= val; - mapData->mask ^= val; - if (old != mapData->mask) - send_mapmask_brodcast(m, mapData->mask); - return true; -} - -BUILDIN(setNpcSex) -{ - TBL_NPC *nd = NULL; - int sex = 0; - if (script_hasdata(st, 3)) - { - nd = npc->name2id (script_getstr(st, 2)); - sex = script_getnum(st, 3); - } - else if (script_hasdata(st, 2)) - { - sex = script_getnum(st, 2); - } - else - { - ShowWarning("no parameters provided\n"); - script->reportsrc(st); - return false; - } - - if (!nd && !st->oid) - { - ShowWarning("npc not found\n"); - script->reportsrc(st); - return false; - } - - if (!nd) - nd = (TBL_NPC *) map->id2bl(st->oid); - - if (!nd || !nd->vd) - { - ShowWarning("npc not found\n"); - script->reportsrc(st); - return false; - } - - clif->clearunit_area(&nd->bl, CLR_OUTSIGHT); - nd->vd->sex = sex; - clif->spawn(&nd->bl); - return true; -} - -BUILDIN(showAvatar) -{ - int id = 0; - if (script_hasdata(st, 2)) - id = script_getnum(st, 2); - - send_npccommand2(script->rid2sd (st), st->oid, 6, id, 0, 0); - return true; -} - -BUILDIN(setAvatarDir) -{ - int newdir = script_getnum(st, 2); - - if (newdir < 0) - newdir = 0; - else if (newdir > 7) - newdir = 7; - - send_npccommand2(script->rid2sd (st), st->oid, 7, newdir, 0, 0); - return true; -} - -BUILDIN(setAvatarAction) -{ - send_npccommand2(script->rid2sd (st), st->oid, 8, script_getnum(st, 2), 0, 0); - return true; -} - -BUILDIN(clear) -{ - send_npccommand(script->rid2sd (st), st->oid, 9); - return true; -} - -BUILDIN(changeMusic) -{ - const char *const mapName = script_getstr(st, 2); - const char *const music = script_getstr(st, 3); - if (!music) - { - ShowWarning("invalid music file\n"); - script->reportsrc(st); - return false; - } - if (!mapName) - { - ShowWarning("invalid map file\n"); - script->reportsrc(st); - return false; - } - const int m = map->mapname2mapid(mapName); - if (m < 0) - { - ShowWarning("map not found\n"); - script->reportsrc(st); - return false; - } - - send_changemusic_brodcast(m, music); - return true; -} - -BUILDIN(setNpcDialogTitle) -{ - const char *const name = script_getstr(st, 2); - if (!name) - { - ShowWarning("invalid window title\n"); - script->reportsrc(st); - return false; - } - TBL_PC *sd = script->rid2sd (st); - if (!sd) - { - ShowWarning("player not attached\n"); - script->reportsrc(st); - return false; - } - - send_changenpc_title(sd, st->oid, name); - return true; -} - -BUILDIN(getMapName) -{ - TBL_PC *sd = script->rid2sd(st); - if (!sd) - { - script_pushstr(st, aStrdup("")); - ShowWarning("player not attached\n"); - script->reportsrc(st); - return false; - } - if (sd->bl.m == -1) - { - script_pushstr(st, aStrdup("")); - ShowWarning("invalid map\n"); - script->reportsrc(st); - return false; - } - script_pushstr(st, aStrdup(map->list[sd->bl.m].name)); - return true; -} - -BUILDIN(unequipById) -{ - int nameid = 0; - int i; - struct item_data *item_data; - TBL_PC *sd = script->rid2sd(st); - - if (sd == NULL) - { - ShowWarning("player not attached\n"); - script->reportsrc(st); - return false; - } - - nameid = script_getnum(st, 2); - if((item_data = itemdb->exists(nameid)) == NULL) - { - ShowWarning("item %d not found\n", nameid); - script->reportsrc(st); - return false; - } - for (i = 0; i < EQI_MAX; i++) - { - const int idx = sd->equip_index[i]; - if (idx >= 0) - { - if (sd->status.inventory[idx].nameid == nameid) - pc->unequipitem(sd, idx, 1 | 2); - } - } - return true; -} - -BUILDIN(isPcDead) -{ - TBL_PC *sd = script->rid2sd(st); - - if (sd == NULL) - { - ShowWarning("player not attached\n"); - script->reportsrc(st); - return false; - } - - script_pushint(st, pc_isdead(sd) ? 1 : 0); - return true; -} - -static int areatimer_sub(struct block_list *bl, va_list ap) -{ - int tick; - char *event; - TBL_PC *sd; - - tick = va_arg(ap, int); - event = va_arg(ap, char*); - - sd = (TBL_PC *)bl; - if (!pc->addeventtimer(sd, tick, event)) - { - if (sd) - ShowWarning("buildin_addtimer: Event timer is full, can't add new event timer. (cid:%d timer:%s)\n", sd->status.char_id, event); - } - return 0; -} - -BUILDIN(areaTimer) -{ - const char *const mapname = script_getstr(st, 2); - const int x1 = script_getnum(st, 3); - const int y1 = script_getnum(st, 4); - const int x2 = script_getnum(st, 5); - const int y2 = script_getnum(st, 6); - const int time = script_getnum(st, 7); - const char *const eventName = script_getstr(st, 8); - int m; - - if ((m = map->mapname2mapid(mapname)) < 0) - { - ShowWarning("map not found\n"); - script->reportsrc(st); - return false; - } - - map->foreachinarea(areatimer_sub, m, x1, y1, x2, y2, BL_PC, time, eventName); - - return true; -} - -static int buildin_getareadropitem_sub_del(struct block_list *bl, va_list ap) -{ - if (!bl) - return 0; - - const int item = va_arg(ap, int); - int *const amount = va_arg(ap, int *); - TBL_ITEM *drop = (TBL_ITEM *)bl; - - if (drop->item_data.nameid == item) - { - (*amount) += drop->item_data.amount; - map->clearflooritem(&drop->bl); - } - - return 0; -} - -BUILDIN(getAreaDropItem) -{ - const char *const str = script_getstr(st, 2); - int16 m; - int x0 = script_getnum(st, 3); - int y0 = script_getnum(st, 4); - int x1 = script_getnum(st, 5); - int y1 = script_getnum(st, 6); - int item; - int amount = 0; - - if (script_isstringtype(st, 7)) - { - const char *name = script_getstr(st, 7); - struct item_data *item_data = itemdb->search_name(name); - item = UNKNOWN_ITEM_ID; - if (item_data) - item = item_data->nameid; - } - else - { - item = script_getnum(st, 7); - } - - if ((m = map->mapname2mapid(str)) < 0) - { - script_pushint(st, -1); - ShowWarning("map not found\n"); - script->reportsrc(st); - return false; - } - - if (script_hasdata(st, 8) && script_getnum(st, 8)) - { - map->foreachinarea(buildin_getareadropitem_sub_del, - m, x0, y0, x1, y1, BL_ITEM, item, &amount); - } - else - { - map->foreachinarea(script->buildin_getareadropitem_sub, - m, x0, y0, x1, y1, BL_ITEM, item, &amount); - } - script_pushint(st, amount); - return true; -} - -enum setmount_type -{ - SETMOUNT_TYPE_NONE = 0, - SETMOUNT_TYPE_PECO = 1, - SETMOUNT_TYPE_WUG = 2, - SETMOUNT_TYPE_MADO = 3, - SETMOUNT_TYPE_DRAGON_GREEN = 4, - SETMOUNT_TYPE_DRAGON_BROWN = 5, - SETMOUNT_TYPE_DRAGON_GRAY = 6, - SETMOUNT_TYPE_DRAGON_BLUE = 7, - SETMOUNT_TYPE_DRAGON_RED = 8, - SETMOUNT_TYPE_MAX, - SETMOUNT_TYPE_DRAGON = SETMOUNT_TYPE_DRAGON_GREEN, -}; - -BUILDIN(setMount) -{ - int flag = SETMOUNT_TYPE_NONE; - TBL_PC* sd = script->rid2sd(st); - - if (sd == NULL) - return true; // no player attached, report source - - if (script_hasdata(st, 2)) - flag = script_getnum(st, 2); - - // Sanity checks and auto-detection - if (flag >= SETMOUNT_TYPE_DRAGON_GREEN && flag <= SETMOUNT_TYPE_DRAGON_RED) - { - if (pc->checkskill(sd, RK_DRAGONTRAINING)) - { - // Rune Knight (Dragon) - unsigned int option; - option = ( flag == SETMOUNT_TYPE_DRAGON_GREEN ? OPTION_DRAGON1 : - flag == SETMOUNT_TYPE_DRAGON_BROWN ? OPTION_DRAGON2 : - flag == SETMOUNT_TYPE_DRAGON_GRAY ? OPTION_DRAGON3 : - flag == SETMOUNT_TYPE_DRAGON_BLUE ? OPTION_DRAGON4 : - flag == SETMOUNT_TYPE_DRAGON_RED ? OPTION_DRAGON5 : - OPTION_DRAGON1); // default value - pc->setridingdragon(sd, option); - } - } - else if (flag == SETMOUNT_TYPE_WUG) - { - // Ranger (Warg) - if (pc->checkskill(sd, RA_WUGRIDER)) - pc->setridingwug(sd, true); - } - else if (flag == SETMOUNT_TYPE_MADO) - { - // Mechanic (Mado Gear) - if (pc->checkskill(sd, NC_MADOLICENCE)) - pc->setmadogear(sd, true); - } - else if (flag == SETMOUNT_TYPE_PECO) - { - // Knight / Crusader (Peco Peco) - if (pc->checkskill(sd, KN_RIDING)) - pc->setridingpeco(sd, true); - } - else if (flag == SETMOUNT_TYPE_NONE && pc_hasmount(sd)) - { - if (pc_isridingdragon(sd)) - { - pc->setridingdragon(sd, 0); - } - if (pc_isridingwug(sd)) - { - pc->setridingwug(sd, false); - } - if (pc_ismadogear(sd)) - { - pc->setmadogear(sd, false); - } - if (pc_isridingpeco(sd)) - { - pc->setridingpeco(sd, false); - } - } - - return true; -} - -BUILDIN(clientCommand) -{ - TBL_PC* sd = script->rid2sd(st); - - if (sd == NULL) - { - ShowWarning("player not attached\n"); - script->reportsrc(st); - return false; - } - const char *const command = script_getstr(st, 2); - if (!command) - { - ShowWarning("invalid client command\n"); - script->reportsrc(st); - return false; - } - send_client_command(sd, command); - return true; -} - -BUILDIN(isUnitWalking) -{ - int id = 0; - if (script_hasdata(st, 2)) - id = script_getnum(st, 2); - else - id = st->oid; - struct block_list *bl = map->id2bl(id); - if (!bl) - { - ShowWarning("invalid unit id\n"); - script->reportsrc(st); - script_pushint(st, 0); - return false; - } - struct unit_data *ud = unit->bl2ud(bl); - if (!ud) - { - ShowWarning("invalid unit data\n"); - script->reportsrc(st); - script_pushint(st, 0); - return false; - } - script_pushint(st, ud->walktimer != INVALID_TIMER); - return true; -} |