// Copyright (c) Copyright (c) Hercules Dev Team, licensed under GNU GPL. // Copyright (c) 2014 Evol developers #include #include #include #include "../../../../common/HPMi.h" #include "../../../../common/malloc.h" #include "../../../../common/mmo.h" #include "../../../../common/socket.h" #include "../../../../common/strlib.h" #include "../../../../map/script.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/utils/formatutils.h" #include "map/lang.h" int format_sub(struct script_state* st, int translate) { TBL_PC *sd = NULL; if (translate) sd = script->rid2sd(st); if (!script_hasdata(st, 3)) { if (sd) { if (translate == 2) { char *buf = aCalloc (strlen(script_getstr(st, 2)) + 3, sizeof(char)); strcpy (buf, script_getstr(st, 2)); if (sd->status.sex) strcat (buf, "#1"); else strcat (buf, "#0"); script_pushstr(st, aStrdup(lang_pctrans(buf, sd))); aFree (buf); } else { script_pushstr(st, aStrdup(lang_pctrans(script_getstr(st, 2), sd))); } } else { script_pushstr(st, aStrdup(script_getstr(st, 2))); } return 1; } char *line = (char *) aCalloc (550, sizeof (char)); int idx = 3; if (sd) { if (translate == 2) { const char *str = NULL; char *buf = NULL; if (sd->status.sex) { str = script_getstr(st, 3); buf = aCalloc (strlen(str) + 3, sizeof(char)); strcpy (buf, str); strcat (buf, "#1"); } else { str = script_getstr(st, 2); buf = aCalloc (strlen(str) + 3, sizeof(char)); strcpy (buf, str); strcat (buf, "#0"); } strcpy(line, lang_pctrans(buf, sd)); aFree (buf); idx = 4; } else { strcpy(line, lang_pctrans(script_getstr(st, 2), sd)); } } else { strcpy(line, script_getstr(st, 2)); } char *ptr = line; int sz = strlen(line); while (script_hasdata(st, idx)) { char *tmp = strstr(ptr, "@@"); if (!tmp) break; const char *item = script_getstr(st, idx); int len = strlen(item); if (len > 50) break; sz += len - 2; if (sz > 490) break; memmove(tmp + len, tmp + 2, strlen(tmp + 2)); memcpy(tmp, item, len); ptr = tmp + len; idx ++; } script_pushstr(st, line); return 0; }